@dialpad/dialtone-css 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/CHANGELOG.json +1 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +64 -0
  4. package/lib/build/favicons/dialpad/favicon-beta-notification__512.png +0 -0
  5. package/lib/build/favicons/dialpad/favicon-beta__512.png +0 -0
  6. package/lib/build/favicons/dialpad/favicon-csr__512.png +0 -0
  7. package/lib/build/favicons/dialpad/favicon-notification__512.png +0 -0
  8. package/lib/build/favicons/dialpad/favicon-staging-notification__512.png +0 -0
  9. package/lib/build/favicons/dialpad/favicon-staging__512.png +0 -0
  10. package/lib/build/favicons/dialpad/favicon__512.png +0 -0
  11. package/lib/build/favicons/favicon-dialtone__512.png +0 -0
  12. package/lib/build/favicons/uberconference/favicon-uberconference__512.png +0 -0
  13. package/lib/build/fonts/Archivo-Bold.woff2 +0 -0
  14. package/lib/build/fonts/Archivo-Regular.woff2 +0 -0
  15. package/lib/build/fonts/Archivo-SemiBold.woff2 +0 -0
  16. package/lib/build/fonts/ArchivoExpanded-SemiBold.woff2 +0 -0
  17. package/lib/build/fonts/ArchivoSemiExpanded-Medium.woff2 +0 -0
  18. package/lib/build/fonts/ArchivoSemiExpanded-SemiBold.woff2 +0 -0
  19. package/lib/build/js/dialtone_health_check/deprecated_icons.cjs +105 -0
  20. package/lib/build/js/dialtone_health_check/index.cjs +82 -0
  21. package/lib/build/js/dialtone_health_check/non_dialtone_properties.cjs +44 -0
  22. package/lib/build/js/dialtone_migration_helper/configs/box-shadows.mjs +19 -0
  23. package/lib/build/js/dialtone_migration_helper/configs/colors.mjs +69 -0
  24. package/lib/build/js/dialtone_migration_helper/configs/fonts.mjs +49 -0
  25. package/lib/build/js/dialtone_migration_helper/configs/size-and-space.mjs +124 -0
  26. package/lib/build/js/dialtone_migration_helper/helpers.mjs +212 -0
  27. package/lib/build/js/dialtone_migration_helper/index.mjs +135 -0
  28. package/lib/build/less/components/avatar.less +169 -0
  29. package/lib/build/less/components/badge.less +139 -0
  30. package/lib/build/less/components/banner.less +77 -0
  31. package/lib/build/less/components/breadcrumbs.less +88 -0
  32. package/lib/build/less/components/button.less +554 -0
  33. package/lib/build/less/components/card.less +56 -0
  34. package/lib/build/less/components/chip.less +192 -0
  35. package/lib/build/less/components/codeblock.less +26 -0
  36. package/lib/build/less/components/collapsible.less +33 -0
  37. package/lib/build/less/components/combobox.less +28 -0
  38. package/lib/build/less/components/datepicker.less +146 -0
  39. package/lib/build/less/components/emoji-picker.less +223 -0
  40. package/lib/build/less/components/forms.less +153 -0
  41. package/lib/build/less/components/icon.less +63 -0
  42. package/lib/build/less/components/image-viewer.less +35 -0
  43. package/lib/build/less/components/input.less +321 -0
  44. package/lib/build/less/components/item-layout.less +53 -0
  45. package/lib/build/less/components/keyboard-shortcut.less +39 -0
  46. package/lib/build/less/components/link.less +130 -0
  47. package/lib/build/less/components/list-group.less +48 -0
  48. package/lib/build/less/components/list-item-group.less +17 -0
  49. package/lib/build/less/components/modal.less +340 -0
  50. package/lib/build/less/components/notice.less +171 -0
  51. package/lib/build/less/components/pagination.less +41 -0
  52. package/lib/build/less/components/popover.less +99 -0
  53. package/lib/build/less/components/presence.less +60 -0
  54. package/lib/build/less/components/radio-checkbox.less +278 -0
  55. package/lib/build/less/components/root-layout.less +125 -0
  56. package/lib/build/less/components/selects.less +152 -0
  57. package/lib/build/less/components/skeleton.less +101 -0
  58. package/lib/build/less/components/stack.less +129 -0
  59. package/lib/build/less/components/tab-panel.less +15 -0
  60. package/lib/build/less/components/table.less +118 -0
  61. package/lib/build/less/components/tabs.less +219 -0
  62. package/lib/build/less/components/toast.less +120 -0
  63. package/lib/build/less/components/toggle.less +173 -0
  64. package/lib/build/less/components/tooltip.less +267 -0
  65. package/lib/build/less/dialtone-globals.less +45 -0
  66. package/lib/build/less/dialtone-reset.less +362 -0
  67. package/lib/build/less/dialtone-variables.less +16 -0
  68. package/lib/build/less/dialtone.less +71 -0
  69. package/lib/build/less/themes/default.less +83 -0
  70. package/lib/build/less/themes/example.less +89 -0
  71. package/lib/build/less/utilities/backgrounds.less +139 -0
  72. package/lib/build/less/utilities/borders.less +196 -0
  73. package/lib/build/less/utilities/colors.less +122 -0
  74. package/lib/build/less/utilities/effects.less +210 -0
  75. package/lib/build/less/utilities/flex.less +227 -0
  76. package/lib/build/less/utilities/grid.less +244 -0
  77. package/lib/build/less/utilities/interactivity.less +69 -0
  78. package/lib/build/less/utilities/layout.less +146 -0
  79. package/lib/build/less/utilities/lint-staged.config.cjs +5 -0
  80. package/lib/build/less/utilities/sizing.less +152 -0
  81. package/lib/build/less/utilities/spacing.less +107 -0
  82. package/lib/build/less/utilities/typography.less +300 -0
  83. package/lib/build/less/variables/layout.less +19 -0
  84. package/lib/build/less/variables/sizes.less +64 -0
  85. package/lib/build/less/variables/typography.less +46 -0
  86. package/lib/build/less/variables/visual-styles.less +77 -0
  87. package/lib/build/svg/spot/blank-space.svg +35 -0
  88. package/lib/build/svg/spot/browser-list-callout.svg +27 -0
  89. package/lib/build/svg/spot/browser-table-graph.svg +37 -0
  90. package/lib/build/svg/spot/female-laptop-typing.svg +21 -0
  91. package/lib/build/svg/spot/file-upload.svg +50 -0
  92. package/lib/build/svg/spot/male-laptop-typing.svg +24 -0
  93. package/lib/build/svg/spot/mind.svg +58 -0
  94. package/lib/build/svg/spot/publish.svg +54 -0
  95. package/lib/build/svg/spot/vector-vortex.svg +53 -0
  96. package/lib/build/svg/spot/wireless-screenshare.svg +30 -0
  97. package/lib/dist/css/dialtone.css +18711 -0
  98. package/lib/dist/css/dialtone.min.css +1 -0
  99. package/lib/dist/fonts/Archivo-Bold.woff2 +0 -0
  100. package/lib/dist/fonts/Archivo-Regular.woff2 +0 -0
  101. package/lib/dist/fonts/Archivo-SemiBold.woff2 +0 -0
  102. package/lib/dist/fonts/ArchivoExpanded-SemiBold.woff2 +0 -0
  103. package/lib/dist/fonts/ArchivoSemiExpanded-Medium.woff2 +0 -0
  104. package/lib/dist/fonts/ArchivoSemiExpanded-SemiBold.woff2 +0 -0
  105. package/lib/dist/js/dialtone_health_check/deprecated_icons.cjs +105 -0
  106. package/lib/dist/js/dialtone_health_check/index.cjs +82 -0
  107. package/lib/dist/js/dialtone_health_check/non_dialtone_properties.cjs +44 -0
  108. package/lib/dist/js/dialtone_migration_helper/configs/box-shadows.mjs +19 -0
  109. package/lib/dist/js/dialtone_migration_helper/configs/colors.mjs +69 -0
  110. package/lib/dist/js/dialtone_migration_helper/configs/fonts.mjs +49 -0
  111. package/lib/dist/js/dialtone_migration_helper/configs/size-and-space.mjs +124 -0
  112. package/lib/dist/js/dialtone_migration_helper/helpers.mjs +212 -0
  113. package/lib/dist/js/dialtone_migration_helper/index.mjs +135 -0
  114. package/lib/dist/svg/spot/blank-space.svg +1 -0
  115. package/lib/dist/svg/spot/browser-list-callout.svg +1 -0
  116. package/lib/dist/svg/spot/browser-table-graph.svg +1 -0
  117. package/lib/dist/svg/spot/female-laptop-typing.svg +1 -0
  118. package/lib/dist/svg/spot/file-upload.svg +1 -0
  119. package/lib/dist/svg/spot/male-laptop-typing.svg +1 -0
  120. package/lib/dist/svg/spot/mind.svg +1 -0
  121. package/lib/dist/svg/spot/publish.svg +1 -0
  122. package/lib/dist/svg/spot/vector-vortex.svg +1 -0
  123. package/lib/dist/svg/spot/wireless-screenshare.svg +1 -0
  124. package/lib/dist/vue/spot/SpotBlankSpace.vue +3 -0
  125. package/lib/dist/vue/spot/SpotBrowserListCallout.vue +3 -0
  126. package/lib/dist/vue/spot/SpotBrowserTableGraph.vue +3 -0
  127. package/lib/dist/vue/spot/SpotFemaleLaptopTyping.vue +3 -0
  128. package/lib/dist/vue/spot/SpotFileUpload.vue +3 -0
  129. package/lib/dist/vue/spot/SpotMaleLaptopTyping.vue +3 -0
  130. package/lib/dist/vue/spot/SpotMind.vue +3 -0
  131. package/lib/dist/vue/spot/SpotPublish.vue +3 -0
  132. package/lib/dist/vue/spot/SpotVectorVortex.vue +3 -0
  133. package/lib/dist/vue/spot/SpotWirelessScreenshare.vue +3 -0
  134. package/package.json +115 -0
@@ -0,0 +1,219 @@
1
+ //
2
+ // DIALTONE
3
+ // COMPONENTS: TABS
4
+ //
5
+ // These are tab classes for Dialpad's design system Dialtone.
6
+ // For further documentation of these and other classes,
7
+ // visit https://dialpad.design/components/tabs
8
+ //
9
+ // TABLE OF CONTENTS
10
+ // • BASE STYLE
11
+ // • ALTERNATE STYLES
12
+ //
13
+ // ============================================================================
14
+ // $ WRAPPERS
15
+ // ----------------------------------------------------------------------------
16
+ .d-tablist {
17
+ position: relative;
18
+ display: flex;
19
+ flex-wrap: wrap;
20
+ gap: var(--dt-space-300);
21
+ color: var(--dt-color-foreground-muted-default);
22
+ font-size: var(--dt-font-size-200);
23
+
24
+ &:focus {
25
+ outline: 0;
26
+ }
27
+
28
+ // Add a bottom border unless no border is requested
29
+ &:not(.d-tablist--no-border)::after {
30
+ position: absolute;
31
+ right: 0;
32
+ bottom: 0;
33
+ left: 0;
34
+ z-index: var(--zi-base1);
35
+ height: var(--dt-size-100);
36
+ background-color: var(--dt-color-border-default);
37
+ content: '';
38
+ }
39
+
40
+ // ============================================================================
41
+ // $ SIZES
42
+ // ----------------------------------------------------------------------------
43
+ &--sm {
44
+ font-size: var(--dt-font-size-100);
45
+
46
+ .d-tab {
47
+ --tab-padding-x: var(--dt-space-400);
48
+ --tab-padding-y: var(--dt-space-400);
49
+ --tab-padding-bottom: calc(var(--tab-padding-y) + var(--dt-space-100));
50
+ --tab-border-radius-top: var(--dt-size-radius-300);
51
+
52
+ .d-tablist--no-border &:not(.d-tab--selected) {
53
+ border-radius: var(--tab-border-radius-top);
54
+ }
55
+ }
56
+ }
57
+ }
58
+
59
+
60
+ // ============================================================================
61
+ // $ BASE STYLE
62
+ // ----------------------------------------------------------------------------
63
+ .d-tab {
64
+ // -- COMPONENT CSS VARS
65
+ // ------------------------------------------------------------------------
66
+ --tab-color-background: var(--dt-action-color-background-base-default);
67
+ --tab-color-text: var(--dt-action-color-foreground-muted-default);
68
+ --tab-line-height: var(--dt-font-line-height-200);
69
+ --tab-font-weight: var(--dt-font-weight-medium);
70
+ --tab-border-radius-top: var(--dt-size-radius-400);
71
+ --tab-padding-x: var(--dt-space-450);
72
+ --tab-padding-y: var(--dt-space-400);
73
+ --tab-padding-bottom: calc(var(--tab-padding-y) + var(--dt-space-100));
74
+
75
+ position: relative;
76
+ display: inline-flex;
77
+ gap: var(--dt-space-400);
78
+ align-items: center;
79
+ justify-content: center;
80
+ box-sizing: border-box;
81
+ padding: var(--tab-padding-y) var(--tab-padding-x);
82
+ padding-bottom: var(--tab-padding-bottom);
83
+ color: var(--tab-color-text);
84
+ font: inherit;
85
+ font-weight: var(--tab-font-weight);
86
+ line-height: var(--tab-line-height);
87
+ background-color: var(--tab-color-background);
88
+ border: 0;
89
+ border-radius: var(--tab-border-radius-top) var(--tab-border-radius-top) 0 0;
90
+ cursor: pointer;
91
+ transition-timing-function: var(--ttf-out-quint);
92
+ transition-duration: var(--td200);
93
+ transition-property: background-color, border, color, box-shadow;
94
+ fill: currentColor;
95
+
96
+ .d-tablist--no-border &:not(.d-tab--selected) {
97
+ border-radius: var(--tab-border-radius-top);
98
+ }
99
+
100
+ &:first-of-type {
101
+ margin-left: 0;
102
+ }
103
+
104
+ &:last-of-type {
105
+ margin-right: 0;
106
+ }
107
+
108
+ &::after {
109
+ position: absolute;
110
+ right: 0;
111
+ bottom: 0;
112
+ left: 0;
113
+ height: var(--dt-size-200);
114
+ background-color: var(--tab-color-background);
115
+ content: '';
116
+
117
+ .d-tablist--no-border & {
118
+ background-color: transparent;
119
+ }
120
+ }
121
+
122
+ &:focus-visible {
123
+ outline: none;
124
+ box-shadow: var(--dt-shadow-focus-inset);
125
+ }
126
+
127
+ &:disabled {
128
+ --tab-color-text: var(--dt-action-color-foreground-disabled-default);
129
+
130
+ cursor: not-allowed;
131
+ }
132
+
133
+ &:not(:disabled):hover {
134
+ --tab-color-background: var(--dt-action-color-background-muted-hover);
135
+ --tab-color-text: var(--dt-action-color-foreground-muted-hover);
136
+ }
137
+
138
+ &:not(:disabled):active {
139
+ --tab-color-background: var(--dt-action-color-background-muted-active);
140
+ --tab-color-text: var(--dt-action-color-foreground-muted-active);
141
+ }
142
+
143
+ // Turn off animations if someone doesn't want them.
144
+ @media (prefers-reduced-motion) {
145
+ transition: none;
146
+ }
147
+ }
148
+
149
+ // ============================================================================
150
+ // $ SELECTED STYLE
151
+ // ----------------------------------------------------------------------------
152
+ .d-tab--selected {
153
+ --tab-color-text: var(--dt-action-color-foreground-base-default);
154
+
155
+ z-index: var(--zi-selected);
156
+
157
+ &:not(:disabled):hover {
158
+ --tab-color-background: var(--dt-action-color-background-base-hover);
159
+ --tab-color-text: var(--dt-action-color-foreground-base-hover);
160
+ }
161
+
162
+ &:not(:disabled):active {
163
+ --tab-color-background: var(--dt-action-color-background-base-active);
164
+ --tab-color-text: var(--dt-action-color-foreground-base-active);
165
+ }
166
+
167
+ &::after,
168
+ &:hover::after {
169
+ --tab-color-background: var(--dt-action-color-foreground-base-default);
170
+
171
+ .d-tablist--no-border & {
172
+ background-color: var(--tab-color-background);
173
+ }
174
+ }
175
+ }
176
+
177
+
178
+ // ============================================================================
179
+ // $ INVERTED STYLE
180
+ // ----------------------------------------------------------------------------
181
+ .d-tablist--inverted {
182
+ --tab-color-text: var(--dt-action-color-foreground-inverted-default);
183
+
184
+ &::after {
185
+ background-color: var(--dt-color-border-moderate-inverted);
186
+ }
187
+
188
+ &:not(.d-tablist--no-border)::after {
189
+ background-color: var(--dt-color-foreground-primary-inverted);
190
+ }
191
+
192
+ .d-tab {
193
+ --tab-color-text: var(--dt-action-color-foreground-inverted-default);
194
+
195
+ &:not(:disabled):hover {
196
+ --tab-color-text: var(--dt-action-color-foreground-inverted-hover);
197
+ --tab-color-background: var(--dt-action-color-background-inverted-hover);
198
+ }
199
+
200
+ &:not(:disabled):active {
201
+ --tab-color-text: var(--dt-action-color-foreground-inverted-active);
202
+ --tab-color-background: var(--dt-action-color-background-inverted-active);
203
+ }
204
+
205
+ &:disabled {
206
+ --tab-color-text: var(--dt-action-color-foreground-disabled-default);
207
+
208
+ cursor: not-allowed;
209
+ }
210
+ }
211
+
212
+ .d-tab--selected {
213
+ --tab-color-text: var(--dt-action-color-foreground-inverted-default);
214
+
215
+ &::after {
216
+ --tab-color-background: currentColor;
217
+ }
218
+ }
219
+ }
@@ -0,0 +1,120 @@
1
+ //
2
+ // DIALTONE
3
+ // COMPONENTS: TOAST
4
+ //
5
+ // These are the styles for toast notices, which are used by alert users to
6
+ // information they might need. For further documentation of these styles,
7
+ // please visit https://dialpad.design/components/toasts
8
+
9
+ // ============================================================================
10
+ // @ TOAST CONTAINER
11
+ // ----------------------------------------------------------------------------
12
+ .d-toast-wrapper {
13
+ position: absolute;
14
+ top: var(--dt-space-600); // 32
15
+ left: 50%;
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: var(--dt-space-500);
19
+ transform: translateX(-50%);
20
+ }
21
+
22
+ // ============================================================================
23
+ // @ BASE STYLE
24
+ // ----------------------------------------------------------------------------
25
+ .d-toast {
26
+ // Component CSS Vars
27
+ // ------------------------------------------------------------------------
28
+ --toast-color-shadow: hsla(var(--dt-color-black-900-hsl) / 0.15);
29
+ --toast-box-shadow: 0 0 0 var(--dt-size-100) var(--toast-color-shadow) inset, var(--dt-shadow-medium);
30
+
31
+ z-index: var(--zi-notification);
32
+ display: block;
33
+ max-width: var(--dt-size-975);
34
+ word-break: normal;
35
+ box-shadow: var(--toast-box-shadow);
36
+ pointer-events: all;
37
+
38
+ // If there's a link in a toast, break the url so it wraps
39
+ > a {
40
+ word-break: break-all;
41
+ }
42
+
43
+ // If you want to hide and reveal the toast
44
+ &[aria-hidden='true'] {
45
+ visibility: hidden;
46
+ opacity: 0;
47
+ }
48
+
49
+ &[aria-hidden='false'] {
50
+ visibility: visible;
51
+ opacity: 1;
52
+ }
53
+ }
54
+
55
+ // ============================================================================
56
+ // $ CONTENT CONTAINER
57
+ // ----------------------------------------------------------------------------
58
+ .d-toast__dialog {
59
+ position: relative;
60
+ display: flex;
61
+ align-items: center;
62
+
63
+
64
+ .d-notice__actions button:first-child {
65
+ margin-left: var(--dt-space-600); // 32
66
+ }
67
+ }
68
+
69
+ // ============================================================================
70
+ // $ UC Toast Shims
71
+ // ============================================================================
72
+ // $$ CHAT
73
+ // ----------------------------------------------------------------------------
74
+ .d-toast--chat {
75
+ .d-notice__icon,
76
+ .d-toast__meta {
77
+ color: var(--dt-color-black-500);
78
+ }
79
+
80
+ .d-toast__meta {
81
+ font-size: var(--dt-font-size-100);
82
+ }
83
+
84
+ &.d-toast--important {
85
+ .d-notice__icon,
86
+ .d-toast__meta {
87
+ color: var(--dt-color-foreground-secondary-inverted);
88
+ }
89
+ }
90
+ }
91
+
92
+ // $$ ORGANIZER
93
+ // ----------------------------------------------------------------------------
94
+ .d-toast--organizer {
95
+ //
96
+ }
97
+
98
+ // $$ VIEWING
99
+ // ----------------------------------------------------------------------------
100
+ // TODO: resolve
101
+ .d-toast--viewing {
102
+ //
103
+ }
104
+
105
+ .d-toast--organizer,
106
+ .d-toast--viewing {
107
+ --toast-border-radius: var(--dt-size-radius-200);
108
+
109
+ border-top: var(--dt-size-300) solid var(--dt-color-magenta-300);
110
+
111
+ .d-notice__icon {
112
+ color: var(--dt-color-magenta-300);
113
+ }
114
+ }
115
+
116
+ .d-toast--chat,
117
+ .d-toast--organizer,
118
+ .d-toast--viewing {
119
+ --toast-color-background: var(--dt-color-surface-secondary);
120
+ }
@@ -0,0 +1,173 @@
1
+ //
2
+ // DIALTONE
3
+ // COMPONENTS: TOGGLE
4
+ //
5
+ // These are toggle classes for Dialpad's design system Dialtone.
6
+ // For further documentation of these and other classes,
7
+ // visit https://dialpad.design/components/toggle
8
+ //
9
+ // TABLE OF CONTENTS
10
+ // • BASE STYLE
11
+ // • TOGGLE VARIANTS
12
+ // • CHECKED TOGGLE
13
+ // • INDETERMINATE TOGGLE
14
+ // • FOCUSED TOGGLE
15
+ // • DISABLED TOGGLE
16
+ // • TOGGLE WRAPPER
17
+ //
18
+ //
19
+ // ============================================================================
20
+ // $ BASE STYLE
21
+ // ----------------------------------------------------------------------------
22
+ .d-toggle {
23
+ // Component specific CSS Vars
24
+ // ------------------------------------------------------------------------
25
+ --toggle-transition-timing-function: var(--ttf-out-quint);
26
+ --toggle-transition-speed: var(--td300);
27
+ --toggle-color-background: var(--dt-color-black-400);
28
+ --toggle-size-height: var(--dt-size-550); // 24
29
+ --toggle-size-width: var(--dt-size-650); // 48
30
+ --toggle-size-icon: var(--dt-size-500); // 16
31
+
32
+ // $$ BASE STYLE
33
+ // ----------------------------------------------------------------------------
34
+ position: relative;
35
+ display: inline-block;
36
+ box-sizing: border-box;
37
+ width: var(--toggle-size-width);
38
+ min-width: var(--toggle-size-width);
39
+ height: var(--toggle-size-height);
40
+ padding: 0;
41
+ line-height: var(--lh4);
42
+ vertical-align: middle;
43
+ background-color: var(--toggle-color-background);
44
+ border: var(--dt-size-100) solid var(--toggle-color-background);
45
+ border-radius: var(--toggle-size-width);
46
+ cursor: pointer;
47
+ transition-timing-function: var(--ttf-out-quint);
48
+ transition-duration: var(--td200);
49
+ transition-property: background-color, border, color, box-shadow;
50
+
51
+ &__inner {
52
+ position: absolute;
53
+ top: calc(var(--dt-space-300) - var(--dt-space-100)); // 3
54
+ left: var(--dt-space-550); // 24
55
+ width: var(--toggle-size-icon);
56
+ height: var(--toggle-size-icon);
57
+
58
+ .d-toggle--small & {
59
+ top: var(--dt-space-100); // 1
60
+ left: calc(var(--dt-space-500) + var(--dt-space-100)); // 17
61
+ }
62
+
63
+ .d-toggle--indeterminate & {
64
+ display: none;
65
+ }
66
+
67
+ color: var(--dt-color-neutral-white);
68
+ background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjM4MTI4IDUuMzgxMjhDNS43MjI5OSA1LjAzOTU3IDYuMjc3MDEgNS4wMzk1NyA2LjYxODcyIDUuMzgxMjhMMTIgMTAuNzYyNkwxNy4zODEzIDUuMzgxMjhDMTcuNzIzIDUuMDM5NTcgMTguMjc3IDUuMDM5NTcgMTguNjE4NyA1LjM4MTI4QzE4Ljk2MDQgNS43MjI5OSAxOC45NjA0IDYuMjc3MDEgMTguNjE4NyA2LjYxODcyTDEzLjIzNzQgMTJMMTguNjE4NyAxNy4zODEzQzE4Ljk2MDQgMTcuNzIzIDE4Ljk2MDQgMTguMjc3IDE4LjYxODcgMTguNjE4N0MxOC4yNzcgMTguOTYwNCAxNy43MjMgMTguOTYwNCAxNy4zODEzIDE4LjYxODdMMTIgMTMuMjM3NEw2LjYxODcyIDE4LjYxODdDNi4yNzcwMSAxOC45NjA0IDUuNzIyOTkgMTguOTYwNCA1LjM4MTI4IDE4LjYxODdDNS4wMzk1NyAxOC4yNzcgNS4wMzk1NyAxNy43MjMgNS4zODEyOCAxNy4zODEzTDEwLjc2MjYgMTJMNS4zODEyOCA2LjYxODcyQzUuMDM5NTcgNi4yNzcwMSA1LjAzOTU3IDUuNzIyOTkgNS4zODEyOCA1LjM4MTI4WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==');
69
+ background-repeat: no-repeat;
70
+ background-size: cover;
71
+ }
72
+
73
+ &::after {
74
+ position: absolute;
75
+ top: var(--dt-space-100); // 1
76
+ left: var(--dt-space-100); // 1
77
+ width: calc(var(--toggle-size-icon) + var(--dt-size-300));
78
+ height: calc(var(--toggle-size-icon) + var(--dt-size-300));
79
+ background-color: var(--dt-color-neutral-white);
80
+ border-radius: var(--dt-size-radius-circle);
81
+ cursor: pointer;
82
+ transition: left var(--toggle-transition-speed) var(--toggle-transition-timing-function);
83
+ content: ' ';
84
+ }
85
+
86
+ // $$ TOGGLE VARIANTS
87
+ // ----------------------------------------------------------------------------
88
+ &--small {
89
+ --toggle-size-height: calc(var(--dt-size-500) + var(--dt-size-200)); // 18
90
+ --toggle-size-width: calc(var(--dt-size-600) + var(--dt-size-300)); // 36
91
+ --toggle-size-icon: calc(var(--dt-size-500) - var(--dt-size-200)); // 14
92
+
93
+ &::before {
94
+ position: absolute;
95
+ inset: var(--dt-space-300-negative) 0 var(--dt-space-300-negative) 0; // -4 // -4
96
+ content: '';
97
+ }
98
+ }
99
+
100
+ &--small::after {
101
+ width: var(--toggle-size-icon);
102
+ height: var(--toggle-size-icon);
103
+ }
104
+
105
+ // $$ CHECKED TOGGLE
106
+ // ----------------------------------------------------------------------------
107
+ &--checked {
108
+ --toggle-color-background: var(--dt-color-brand-purple);
109
+
110
+ .d-toggle__inner {
111
+ left: var(--dt-space-350); // 6
112
+ background-image: url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC42MTg3IDUuMzgxMjhDMjAuOTYwNCA1LjcyMjk5IDIwLjk2MDQgNi4yNzcwMSAyMC42MTg3IDYuNjE4NzJMOS42MTg3MiAxNy42MTg3QzkuMjc3MDEgMTcuOTYwNCA4LjcyMjk5IDE3Ljk2MDQgOC4zODEyOCAxNy42MTg3TDMuMzgxMjggMTIuNjE4N0MzLjAzOTU3IDEyLjI3NyAzLjAzOTU3IDExLjcyMyAzLjM4MTI4IDExLjM4MTNDMy43MjI5OSAxMS4wMzk2IDQuMjc3MDEgMTEuMDM5NiA0LjYxODcyIDExLjM4MTNMOSAxNS43NjI2TDE5LjM4MTMgNS4zODEyOEMxOS43MjMgNS4wMzk1NyAyMC4yNzcgNS4wMzk1NyAyMC42MTg3IDUuMzgxMjhaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K');
113
+ }
114
+
115
+ &.d-toggle--small .d-toggle__inner {
116
+ left: calc(var(--dt-space-100) + var(--dt-space-200)); // 3
117
+ }
118
+
119
+ &::after {
120
+ left: calc(var(--dt-space-550) + var(--dt-space-100)); // 25
121
+ }
122
+
123
+ &.d-toggle--small::after {
124
+ right: var(--dt-space-100); // 1
125
+ left: calc(calc(var(--dt-space-300) * 5) - var(--dt-space-100)); // 19
126
+ }
127
+ }
128
+
129
+ // $$ INDETERMINATE TOGGLE
130
+ // ----------------------------------------------------------------------------
131
+ &--indeterminate {
132
+ &__inner {
133
+ display: none;
134
+ }
135
+
136
+ &::after {
137
+ left: 50%;
138
+ transform: translate(-50%, 0);
139
+ }
140
+ }
141
+
142
+ // $$ FOCUSED TOGGLE
143
+ // ----------------------------------------------------------------------------
144
+ &:focus-visible {
145
+ outline: none;
146
+ box-shadow: var(--dt-shadow-focus);
147
+ }
148
+
149
+ // $$ DISABLED TOGGLE
150
+ // ----------------------------------------------------------------------------
151
+ &--disabled,
152
+ &[disabled] {
153
+ cursor: not-allowed;
154
+ opacity: 0.5;
155
+
156
+ &::after {
157
+ cursor: not-allowed;
158
+ transition-property: none;
159
+ }
160
+ }
161
+ }
162
+
163
+ .d-toggle-group {
164
+ gap: var(--dt-space-400); // 8
165
+ }
166
+
167
+ // ============================================================================
168
+ // $ TOGGLE WRAPPER
169
+ // ----------------------------------------------------------------------------
170
+ .d-toggle-wrapper {
171
+ display: flex;
172
+ align-items: center;
173
+ }