summaryrefslogtreecommitdiffstats
path: root/packages/excalidraw/components/FilledButton.scss
diff options
context:
space:
mode:
Diffstat (limited to 'packages/excalidraw/components/FilledButton.scss')
-rw-r--r--packages/excalidraw/components/FilledButton.scss317
1 files changed, 317 insertions, 0 deletions
diff --git a/packages/excalidraw/components/FilledButton.scss b/packages/excalidraw/components/FilledButton.scss
new file mode 100644
index 0000000..1f689e9
--- /dev/null
+++ b/packages/excalidraw/components/FilledButton.scss
@@ -0,0 +1,317 @@
+@import "../css/variables.module.scss";
+
+@keyframes successStatusAnimation {
+ 0% {
+ transform: scale(0.35);
+ }
+
+ 50% {
+ transform: scale(1.25);
+ }
+
+ 100% {
+ transform: scale(1);
+ }
+}
+
+.excalidraw {
+ .ExcButton {
+ --text-color: transparent;
+ --border-color: transparent;
+ --back-color: transparent;
+
+ color: var(--text-color);
+ background-color: var(--back-color);
+ border-color: var(--border-color);
+
+ &:hover {
+ transition: all 150ms ease-out;
+ }
+
+ .Spinner {
+ --spinner-color: var(--color-surface-lowest);
+ }
+
+ .ExcButton__statusIcon {
+ visibility: visible;
+ position: absolute;
+
+ width: 1.2rem;
+ height: 1.2rem;
+
+ animation: successStatusAnimation 0.5s cubic-bezier(0.3, 1, 0.6, 1);
+ }
+
+ &.ExcButton--status-loading,
+ &.ExcButton--status-success {
+ pointer-events: none;
+
+ .ExcButton__contents {
+ visibility: hidden;
+ }
+ }
+
+ &[disabled] {
+ pointer-events: none;
+ }
+
+ &,
+ &__contents {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ flex-shrink: 0;
+ flex-wrap: nowrap;
+ // needed because of .Spinner
+ position: relative;
+ }
+
+ &--color-primary {
+ &.ExcButton--variant-filled {
+ --text-color: var(--color-surface-lowest);
+ --back-color: var(--color-primary);
+
+ .Spinner {
+ --spinner-color: var(--text-color);
+ }
+
+ &:hover {
+ --back-color: var(--color-brand-hover);
+ }
+
+ &:active {
+ --back-color: var(--color-brand-active);
+ }
+ }
+
+ &.ExcButton--variant-outlined,
+ &.ExcButton--variant-icon {
+ --text-color: var(--color-primary);
+ --border-color: var(--color-primary);
+ --back-color: transparent;
+
+ .Spinner {
+ --spinner-color: var(--text-color);
+ }
+
+ &:hover {
+ --text-color: var(--color-brand-hover);
+ --border-color: var(--color-brand-hover);
+ }
+
+ &:active {
+ --text-color: var(--color-brand-active);
+ --border-color: var(--color-brand-active);
+ }
+ }
+ }
+
+ &--color-danger {
+ &.ExcButton--variant-filled {
+ --text-color: var(--color-danger-text);
+ --back-color: var(--color-danger-dark);
+
+ .Spinner {
+ --spinner-color: var(--text-color);
+ }
+
+ &:hover {
+ --back-color: var(--color-danger-darker);
+ }
+
+ &:active {
+ --back-color: var(--color-danger-darkest);
+ }
+ }
+
+ &.ExcButton--variant-outlined,
+ &.ExcButton--variant-icon {
+ --text-color: var(--color-danger);
+ --border-color: var(--color-danger);
+ --back-color: transparent;
+
+ .Spinner {
+ --spinner-color: var(--text-color);
+ }
+
+ &:hover {
+ --text-color: var(--color-danger-darkest);
+ --border-color: var(--color-danger-darkest);
+ }
+
+ &:active {
+ --text-color: var(--color-danger-darker);
+ --border-color: var(--color-danger-darker);
+ }
+ }
+ }
+
+ &--color-success {
+ &.ExcButton--variant-filled {
+ --text-color: var(--color-success-text);
+ --back-color: var(--color-success);
+
+ .Spinner {
+ --spinner-color: var(--color-success);
+ }
+
+ &:hover {
+ --back-color: var(--color-success-darker);
+ }
+
+ &:active {
+ --back-color: var(--color-success-darkest);
+ }
+ }
+
+ &.ExcButton--variant-outlined,
+ &.ExcButton--variant-icon {
+ --text-color: var(--color-success-contrast);
+ --border-color: var(--color-success-contrast);
+ --back-color: transparent;
+
+ .Spinner {
+ --spinner-color: var(--color-success-contrast);
+ }
+
+ &:hover {
+ --text-color: var(--color-success-contrast-hover);
+ --border-color: var(--color-success-contrast-hover);
+ }
+
+ &:active {
+ --text-color: var(--color-success-contrast-active);
+ --border-color: var(--color-success-contrast-active);
+ }
+ }
+ }
+
+ &--color-muted {
+ &.ExcButton--variant-filled {
+ --text-color: var(--island-bg-color);
+ --back-color: var(--color-gray-50);
+
+ .Spinner {
+ --spinner-color: var(--text-color);
+ }
+
+ &:hover {
+ --back-color: var(--color-gray-60);
+ }
+
+ &:active {
+ --back-color: var(--color-gray-80);
+ }
+ }
+
+ &.ExcButton--variant-outlined,
+ &.ExcButton--variant-icon {
+ --text-color: var(--color-muted-background);
+ --border-color: var(--color-muted);
+ --back-color: var(--island-bg-color);
+
+ .Spinner {
+ --spinner-color: var(--text-color);
+ }
+
+ &:hover {
+ --text-color: var(--color-muted-background-darker);
+ --border-color: var(--color-muted-darker);
+ }
+
+ &:active {
+ --text-color: var(--color-muted-background-darker);
+ --border-color: var(--color-muted-darkest);
+ }
+ }
+ }
+
+ &--color-warning {
+ &.ExcButton--variant-filled {
+ --text-color: black;
+ --back-color: var(--color-warning-dark);
+
+ .Spinner {
+ --spinner-color: var(--text-color);
+ }
+
+ &:hover {
+ --back-color: var(--color-warning-darker);
+ }
+
+ &:active {
+ --back-color: var(--color-warning-darkest);
+ }
+ }
+
+ &.ExcButton--variant-outlined,
+ &.ExcButton--variant-icon {
+ --text-color: var(--color-warning-dark);
+ --border-color: var(--color-warning-dark);
+ --back-color: var(--input-bg-color);
+
+ .Spinner {
+ --spinner-color: var(--text-color);
+ }
+
+ &:hover {
+ --text-color: var(--color-warning-darker);
+ --border-color: var(--color-warning-darker);
+ }
+
+ &:active {
+ --text-color: var(--color-warning-darkest);
+ --border-color: var(--color-warning-darkest);
+ }
+ }
+ }
+
+ border-radius: 0.5rem;
+ border-width: 1px;
+ border-style: solid;
+
+ font-family: var(--font-family);
+
+ user-select: none;
+
+ &--size-large {
+ font-weight: 600;
+ font-size: 0.875rem;
+ min-height: 3rem;
+ padding: 0.5rem 1.5rem;
+
+ letter-spacing: 0.4px;
+
+ .ExcButton__contents {
+ gap: 0.75rem;
+ }
+ }
+
+ &--size-medium {
+ font-weight: 600;
+ font-size: 0.75rem;
+ min-height: 2.5rem;
+ padding: 0.5rem 1rem;
+
+ letter-spacing: normal;
+
+ .ExcButton__contents {
+ gap: 0.5rem;
+ }
+ }
+
+ &--variant-icon {
+ padding: 0.5rem 0.75rem;
+ width: 3rem;
+ }
+
+ &--fullWidth {
+ width: 100%;
+ }
+
+ &__icon {
+ width: 1.25rem;
+ height: 1.25rem;
+ }
+ }
+}