@davidsouther/jiffies 2026.4.1 → 2026.24.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 (121) hide show
  1. package/README.md +0 -3
  2. package/package.json +11 -6
  3. package/src/404.html +1 -1
  4. package/src/components/accordion.ts +25 -0
  5. package/src/components/alert.ts +47 -0
  6. package/src/components/card.ts +54 -0
  7. package/src/components/children.ts +11 -0
  8. package/src/components/form.ts +25 -0
  9. package/src/components/index.ts +22 -0
  10. package/src/components/link.ts +22 -0
  11. package/src/components/modal.ts +15 -0
  12. package/src/components/nav.ts +42 -0
  13. package/src/components/property.ts +32 -0
  14. package/src/components/tabs.ts +82 -0
  15. package/src/components/virtual_scroll.ts +1 -1
  16. package/src/dom/README.md +7 -2
  17. package/src/dom/SKILL.md +201 -0
  18. package/src/dom/dom.ts +185 -41
  19. package/src/dom/fc.ts +3 -2
  20. package/src/dom/form/form.app.ts +35 -41
  21. package/src/dom/form/form.ts +79 -10
  22. package/src/dom/form/index.html +2 -2
  23. package/src/dom/hydrate.ts +206 -0
  24. package/src/dom/navigation/index.ts +349 -0
  25. package/src/dom/render.ts +41 -0
  26. package/src/dom/svg.ts +6 -2
  27. package/src/fs_node.ts +2 -2
  28. package/src/log.ts +154 -2
  29. package/src/server/http/response.ts +6 -3
  30. package/src/server/http/sitemap.ts +10 -34
  31. package/src/server/http/static.ts +0 -2
  32. package/src/server/live-reload.ts +208 -0
  33. package/src/server/main.ts +14 -7
  34. package/src/server/ws/frame.ts +36 -0
  35. package/src/server/ws/handshake.ts +42 -0
  36. package/src/server/ws/index.ts +100 -0
  37. package/src/ssg/bundle.ts +85 -0
  38. package/src/ssg/copy-public.ts +44 -0
  39. package/src/ssg/discover.ts +143 -0
  40. package/src/ssg/main.ts +168 -0
  41. package/src/ssg/rewrite.ts +18 -0
  42. package/src/ssg/ssg.ts +134 -0
  43. package/src/components/test.ts +0 -5
  44. package/src/components/virtual_scroll.test.ts +0 -30
  45. package/src/context.test.ts +0 -58
  46. package/src/context.ts +0 -67
  47. package/src/diff.test.ts +0 -48
  48. package/src/dom/fc.test.ts +0 -43
  49. package/src/dom/form/form.test.ts +0 -0
  50. package/src/dom/html.test.ts +0 -74
  51. package/src/dom/observable.test.ts +0 -43
  52. package/src/dom/test.ts +0 -11
  53. package/src/equal.test.ts +0 -23
  54. package/src/flags.test.ts +0 -43
  55. package/src/flags.ts +0 -53
  56. package/src/fs.test.ts +0 -106
  57. package/src/fs_win.test.ts +0 -11
  58. package/src/generator.test.ts +0 -27
  59. package/src/index.html +0 -82
  60. package/src/is_browser.js +0 -1
  61. package/src/lock.test.ts +0 -17
  62. package/src/observable/observable.test.ts +0 -73
  63. package/src/pico/_variables.scss +0 -66
  64. package/src/pico/components/_accordion.scss +0 -112
  65. package/src/pico/components/_button-group.scss +0 -51
  66. package/src/pico/components/_card.scss +0 -47
  67. package/src/pico/components/_dropdown.scss +0 -203
  68. package/src/pico/components/_modal.scss +0 -181
  69. package/src/pico/components/_nav.scss +0 -79
  70. package/src/pico/components/_progress.scss +0 -70
  71. package/src/pico/components/_property.scss +0 -34
  72. package/src/pico/content/_button.scss +0 -152
  73. package/src/pico/content/_code.scss +0 -63
  74. package/src/pico/content/_embedded.scss +0 -0
  75. package/src/pico/content/_form-alt.scss +0 -276
  76. package/src/pico/content/_form.scss +0 -259
  77. package/src/pico/content/_misc.scss +0 -0
  78. package/src/pico/content/_table.scss +0 -28
  79. package/src/pico/content/_toggle.scss +0 -132
  80. package/src/pico/content/_typography.scss +0 -232
  81. package/src/pico/layout/_container.scss +0 -40
  82. package/src/pico/layout/_document.scss +0 -0
  83. package/src/pico/layout/_flex.scss +0 -46
  84. package/src/pico/layout/_grid.scss +0 -24
  85. package/src/pico/layout/_scroller.scss +0 -16
  86. package/src/pico/layout/_section.scss +0 -8
  87. package/src/pico/layout/_sectioning.scss +0 -55
  88. package/src/pico/pico.scss +0 -60
  89. package/src/pico/reset/_accessibility.scss +0 -34
  90. package/src/pico/reset/_button.scss +0 -17
  91. package/src/pico/reset/_code.scss +0 -15
  92. package/src/pico/reset/_document.scss +0 -48
  93. package/src/pico/reset/_embedded.scss +0 -39
  94. package/src/pico/reset/_form.scss +0 -97
  95. package/src/pico/reset/_misc.scss +0 -23
  96. package/src/pico/reset/_nav.scss +0 -5
  97. package/src/pico/reset/_progress.scss +0 -4
  98. package/src/pico/reset/_table.scss +0 -8
  99. package/src/pico/reset/_typography.scss +0 -25
  100. package/src/pico/themes/default/_colors.scss +0 -65
  101. package/src/pico/themes/default/_dark.scss +0 -148
  102. package/src/pico/themes/default/_light.scss +0 -149
  103. package/src/pico/themes/default/_styles.scss +0 -272
  104. package/src/pico/themes/default.scss +0 -34
  105. package/src/pico/utilities/_accessibility.scss +0 -3
  106. package/src/pico/utilities/_loading.scss +0 -52
  107. package/src/pico/utilities/_reduce-motion.scss +0 -27
  108. package/src/pico/utilities/_tooltip.scss +0 -101
  109. package/src/result.test.ts +0 -101
  110. package/src/scope/describe.ts +0 -81
  111. package/src/scope/display/console.ts +0 -26
  112. package/src/scope/display/dom.ts +0 -36
  113. package/src/scope/display/junit.ts +0 -64
  114. package/src/scope/execute.ts +0 -110
  115. package/src/scope/expect.ts +0 -169
  116. package/src/scope/fix.ts +0 -30
  117. package/src/scope/index.ts +0 -11
  118. package/src/scope/scope.ts +0 -21
  119. package/src/scope/state.ts +0 -13
  120. package/src/test.mjs +0 -33
  121. package/src/test_all.ts +0 -35
@@ -1,276 +0,0 @@
1
- // Color
2
- [type="color"] {
3
- // Wrapper
4
- @mixin color-wrapper {
5
- padding: 0;
6
- }
7
-
8
- &::-webkit-color-swatch-wrapper {
9
- @include color-wrapper;
10
- }
11
-
12
- &::-moz-focus-inner {
13
- @include color-wrapper;
14
- }
15
-
16
- // Swatch
17
- @mixin color-swatch {
18
- border: 0;
19
- border-radius: calc(var(--border-radius) * 0.5);
20
- }
21
-
22
- &::-webkit-color-swatch {
23
- @include color-swatch;
24
- }
25
-
26
- &::-moz-color-swatch {
27
- @include color-swatch;
28
- }
29
- }
30
-
31
- // Date & Time
32
- // :not() are needed to add Specificity and avoid !important on padding
33
- input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]) {
34
- &[type="date"],
35
- &[type="datetime-local"],
36
- &[type="month"],
37
- &[type="time"],
38
- &[type="week"] {
39
- --icon-position: 0.75rem;
40
- --icon-width: 1rem;
41
- padding-right: calc(var(--icon-width) + var(--icon-position));
42
- background-image: var(--icon-date);
43
- background-position: center right var(--icon-position);
44
- background-size: var(--icon-width) auto;
45
- background-repeat: no-repeat;
46
- }
47
-
48
- // Time
49
- &[type="time"] {
50
- background-image: var(--icon-time);
51
- }
52
- }
53
-
54
- // Calendar picker
55
- [type="date"],
56
- [type="datetime-local"],
57
- [type="month"],
58
- [type="time"],
59
- [type="week"] {
60
- &::-webkit-calendar-picker-indicator {
61
- width: var(--icon-width);
62
- margin-right: calc(var(--icon-width) * -1);
63
- margin-left: var(--icon-position);
64
- opacity: 0;
65
- }
66
- }
67
-
68
- [dir="rtl"]
69
- :is([type="date"], [type="datetime-local"], [type="month"], [type="time"], [type="week"]) {
70
- text-align: right;
71
- }
72
-
73
- // File
74
- [type="file"] {
75
- --color: var(--muted-color);
76
- padding: calc(var(--form-element-spacing-vertical) * 0.5) 0;
77
- border: 0;
78
- border-radius: 0;
79
- background: none;
80
-
81
- @mixin file-selector-button {
82
- --background-color: var(--secondary);
83
- --border-color: var(--secondary);
84
- --color: var(--secondary-inverse);
85
- margin-right: calc(var(--spacing) / 2);
86
- margin-left: 0;
87
- margin-inline-start: 0;
88
- margin-inline-end: calc(var(--spacing) / 2);
89
- padding: calc(var(--form-element-spacing-vertical) * 0.5)
90
- calc(var(--form-element-spacing-horizontal) * 0.5);
91
- border: var(--border-width) solid var(--border-color);
92
- border-radius: var(--border-radius);
93
- outline: none;
94
- background-color: var(--background-color);
95
- box-shadow: var(--box-shadow);
96
- color: var(--color);
97
- font-weight: var(--font-weight);
98
- font-size: 1rem;
99
- line-height: var(--line-height);
100
- text-align: center;
101
- cursor: pointer;
102
-
103
- @if $enable-transitions {
104
- transition: background-color var(--transition),
105
- border-color var(--transition), color var(--transition),
106
- box-shadow var(--transition);
107
- }
108
-
109
- &:is(:hover, :active, :focus) {
110
- --background-color: var(--secondary-hover);
111
- --border-color: var(--secondary-hover);
112
- }
113
- }
114
-
115
- &::file-selector-button {
116
- @include file-selector-button;
117
- }
118
-
119
- &::-webkit-file-upload-button {
120
- @include file-selector-button;
121
- }
122
-
123
- &::-ms-browse {
124
- @include file-selector-button;
125
- }
126
- }
127
-
128
- // Range
129
- [type="range"] {
130
- // Config
131
- $height-track: 0.25rem;
132
- $height-thumb: 1.25rem;
133
- $border-thumb: 2px;
134
-
135
- // Styles
136
- -webkit-appearance: none;
137
- -moz-appearance: none;
138
- appearance: none;
139
- width: 100%;
140
- height: $height-thumb;
141
- background: none;
142
-
143
- // Slider Track
144
- @mixin slider-track {
145
- width: 100%;
146
- height: $height-track;
147
- border-radius: var(--border-radius);
148
- background-color: var(--range-border-color);
149
-
150
- @if $enable-transitions {
151
- transition: background-color var(--transition),
152
- box-shadow var(--transition);
153
- }
154
- }
155
-
156
- &::-webkit-slider-runnable-track {
157
- @include slider-track;
158
- }
159
-
160
- &::-moz-range-track {
161
- @include slider-track;
162
- }
163
-
164
- &::-ms-track {
165
- @include slider-track;
166
- }
167
-
168
- // Slider Thumb
169
- @mixin slider-thumb {
170
- -webkit-appearance: none;
171
- width: $height-thumb;
172
- height: $height-thumb;
173
- margin-top: #{(-($height-thumb * 0.5) + ($height-track * 0.5))};
174
- border: $border-thumb solid var(--range-thumb-border-color);
175
- border-radius: 50%;
176
- background-color: var(--range-thumb-color);
177
- cursor: pointer;
178
-
179
- @if $enable-transitions {
180
- transition: background-color var(--transition),
181
- transform var(--transition);
182
- }
183
- }
184
- &::-webkit-slider-thumb {
185
- @include slider-thumb;
186
- }
187
-
188
- &::-moz-range-thumb {
189
- @include slider-thumb;
190
- }
191
-
192
- &::-ms-thumb {
193
- @include slider-thumb;
194
- }
195
-
196
- &:hover,
197
- &:focus {
198
- --range-border-color: var(--range-active-border-color);
199
- --range-thumb-color: var(--range-thumb-hover-color);
200
- }
201
-
202
- &:active {
203
- --range-thumb-color: var(--range-thumb-active-color);
204
-
205
- // Slider Thumb
206
- &::-webkit-slider-thumb {
207
- transform: scale(1.25);
208
- }
209
-
210
- &::-moz-range-thumb {
211
- transform: scale(1.25);
212
- }
213
-
214
- &::-ms-thumb {
215
- transform: scale(1.25);
216
- }
217
- }
218
- }
219
-
220
- // Search
221
- // :not() are needed to add Specificity and avoid !important on padding
222
- input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]) {
223
- &[type="search"] {
224
- padding-inline-start: calc(
225
- var(--form-element-spacing-horizontal) + 1.75rem
226
- );
227
- border-radius: 5rem;
228
- background-image: var(--icon-search);
229
- background-position: center left 1.125rem;
230
- background-size: 1rem auto;
231
- background-repeat: no-repeat;
232
-
233
- &[aria-invalid] {
234
- @if $enable-important {
235
- padding-inline-start: calc(
236
- var(--form-element-spacing-horizontal) + 1.75rem
237
- ) !important;
238
- } @else {
239
- padding-inline-start: calc(
240
- var(--form-element-spacing-horizontal) + 1.75rem
241
- );
242
- }
243
- background-position: center left 1.125rem, center right 0.75rem;
244
- }
245
-
246
- &[aria-invalid="false"] {
247
- background-image: var(--icon-search), var(--icon-valid);
248
- }
249
-
250
- &[aria-invalid="true"] {
251
- background-image: var(--icon-search), var(--icon-invalid);
252
- }
253
- }
254
- }
255
-
256
- // Cancel button
257
- [type="search"] {
258
- &::-webkit-search-cancel-button {
259
- -webkit-appearance: none;
260
- display: none;
261
- }
262
- }
263
-
264
- [dir="rtl"] {
265
- :where(input) {
266
- &:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]) {
267
- &[type="search"] {
268
- background-position: center right 1.125rem;
269
-
270
- &[aria-invalid] {
271
- background-position: center right 1.125rem, center left 0.75rem;
272
- }
273
- }
274
- }
275
- }
276
- }
@@ -1,259 +0,0 @@
1
- // Force height for alternatives input types
2
- input:not([type="checkbox"]):not([type="radio"]):not([type="range"]) {
3
- height: calc(
4
- (1rem * var(--line-height)) + (var(--form-element-spacing-vertical) * 2) +
5
- (var(--border-width) * 2)
6
- );
7
- }
8
-
9
- // Fieldset
10
- fieldset {
11
- margin: 0;
12
- margin-bottom: var(--spacing);
13
- padding: 0;
14
- border: 0;
15
- }
16
-
17
- // Label & legend
18
- label,
19
- fieldset legend {
20
- display: block;
21
- margin-bottom: calc(var(--spacing) * 0.25);
22
- font-weight: var(--form-label-font-weight, var(--font-weight));
23
- }
24
-
25
- // Blocks, 100%
26
- input:not([type="checkbox"]):not([type="radio"]),
27
- select,
28
- textarea {
29
- width: 100%;
30
- }
31
-
32
- // Reset appearance (Not Checkboxes, Radios, Range and File)
33
- input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]),
34
- select,
35
- textarea {
36
- appearance: none;
37
- padding: var(--form-element-spacing-vertical)
38
- var(--form-element-spacing-horizontal);
39
- vertical-align: middle;
40
- }
41
-
42
- // Commons styles
43
- input,
44
- select,
45
- textarea {
46
- --background-color: var(--form-element-background-color);
47
- --border-color: var(--form-element-border-color);
48
- --color: var(--form-element-color);
49
- --box-shadow: none;
50
- border: var(--border-width) solid var(--border-color);
51
- border-radius: var(--border-radius);
52
- outline: none;
53
- background-color: var(--background-color);
54
- box-shadow: var(--box-shadow);
55
- color: var(--color);
56
- font-weight: var(--font-weight);
57
-
58
- @if $enable-transitions {
59
- transition: background-color var(--transition),
60
- border-color var(--transition), color var(--transition),
61
- box-shadow var(--transition);
62
- }
63
- }
64
-
65
- // Active & Focus
66
- input:not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]):not([readonly]),
67
- :where(select, textarea) {
68
- &:is(:active, :focus) {
69
- --background-color: var(--form-element-active-background-color);
70
- }
71
- }
72
-
73
- // Active & Focus
74
- input:not([type="submit"]):not([type="button"]):not([type="reset"]):not([role="switch"]):not([readonly]),
75
- :where(select, textarea) {
76
- &:is(:active, :focus) {
77
- --border-color: var(--form-element-active-border-color);
78
- }
79
- }
80
-
81
- // Focus
82
- input:not([type="submit"]):not([type="button"]):not([type="reset"]):not([type="range"]):not([type="file"]):not([readonly]),
83
- select,
84
- textarea {
85
- &:focus {
86
- --box-shadow: 0 0 0 var(--outline-width) var(--form-element-focus-color);
87
- }
88
- }
89
-
90
- // Disabled
91
- input:not([type="submit"]):not([type="button"]):not([type="reset"])[disabled],
92
- select[disabled],
93
- textarea[disabled],
94
- :where(fieldset[disabled])
95
- :is(input:not([type="submit"]):not([type="button"]):not([type="reset"]), select, textarea) {
96
- --background-color: var(--form-element-disabled-background-color);
97
- --border-color: var(--form-element-disabled-border-color);
98
- opacity: var(--form-element-disabled-opacity);
99
- pointer-events: none;
100
- }
101
-
102
- // Aria-invalid
103
- :where(input, select, textarea) {
104
- &:not([type="checkbox"]):not([type="radio"]) {
105
- &[aria-invalid] {
106
- @if $enable-important {
107
- padding-right: calc(
108
- var(--form-element-spacing-horizontal) + 1.5rem
109
- ) !important;
110
- padding-left: var(--form-element-spacing-horizontal);
111
- padding-inline-start: var(--form-element-spacing-horizontal) !important;
112
- padding-inline-end: calc(
113
- var(--form-element-spacing-horizontal) + 1.5rem
114
- ) !important;
115
- } @else {
116
- padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem);
117
- padding-left: var(--form-element-spacing-horizontal);
118
- padding-inline-start: var(--form-element-spacing-horizontal);
119
- padding-inline-end: calc(
120
- var(--form-element-spacing-horizontal) + 1.5rem
121
- );
122
- }
123
- background-position: center right 0.75rem;
124
- background-size: 1rem auto;
125
- background-repeat: no-repeat;
126
- }
127
-
128
- &[aria-invalid="false"] {
129
- background-image: var(--icon-valid);
130
- }
131
-
132
- &[aria-invalid="true"] {
133
- background-image: var(--icon-invalid);
134
- }
135
- }
136
-
137
- &[aria-invalid="false"] {
138
- --border-color: var(--form-element-valid-border-color);
139
-
140
- &:is(:active, :focus) {
141
- @if $enable-important {
142
- --border-color: var(
143
- --form-element-valid-active-border-color
144
- ) !important;
145
- --box-shadow: 0
146
- 0
147
- 0
148
- var(--outline-width)
149
- var(--form-element-valid-focus-color) !important;
150
- } @else {
151
- --border-color: var(--form-element-valid-active-border-color);
152
- --box-shadow: 0
153
- 0
154
- 0
155
- var(--outline-width)
156
- var(--form-element-valid-focus-color);
157
- }
158
- }
159
- }
160
-
161
- &[aria-invalid="true"] {
162
- --border-color: var(--form-element-invalid-border-color);
163
-
164
- &:is(:active, :focus) {
165
- @if $enable-important {
166
- --border-color: var(
167
- --form-element-invalid-active-border-color
168
- ) !important;
169
- --box-shadow: 0
170
- 0
171
- 0
172
- var(--outline-width)
173
- var(--form-element-invalid-focus-color) !important;
174
- } @else {
175
- --border-color: var(--form-element-invalid-active-border-color);
176
- --box-shadow: 0
177
- 0
178
- 0
179
- var(--outline-width)
180
- var(--form-element-invalid-focus-color);
181
- }
182
- }
183
- }
184
- }
185
-
186
- [dir="rtl"] {
187
- :where(input, select, textarea) {
188
- &:not([type="checkbox"]):not([type="radio"]) {
189
- &[aria-invalid],
190
- &[aria-invalid="true"],
191
- &[aria-invalid="false"] {
192
- background-position: center left 0.75rem;
193
- }
194
- }
195
- }
196
- }
197
-
198
- // Placeholder
199
- input::placeholder,
200
- input::-webkit-input-placeholder,
201
- textarea::placeholder,
202
- textarea::-webkit-input-placeholder,
203
- select:invalid {
204
- color: var(--form-element-placeholder-color);
205
- opacity: 1;
206
- }
207
-
208
- // Margin bottom (Not Checkboxes and Radios)
209
- input:not([type="checkbox"]):not([type="radio"]),
210
- select,
211
- textarea {
212
- margin-bottom: var(--spacing);
213
- }
214
-
215
- // Select
216
- select {
217
- // Unstyle the caret on `<select>`s in IE10+.
218
- &::-ms-expand {
219
- border: 0;
220
- background-color: transparent;
221
- }
222
-
223
- &:not([multiple]):not([size]) {
224
- padding-right: calc(var(--form-element-spacing-horizontal) + 1.5rem);
225
- padding-left: var(--form-element-spacing-horizontal);
226
- padding-inline-start: var(--form-element-spacing-horizontal);
227
- padding-inline-end: calc(var(--form-element-spacing-horizontal) + 1.5rem);
228
- background-image: var(--icon-chevron);
229
- background-position: center right 0.75rem;
230
- background-size: 1rem auto;
231
- background-repeat: no-repeat;
232
- }
233
- }
234
-
235
- [dir="rtl"] {
236
- select {
237
- &:not([multiple]):not([size]) {
238
- background-position: center left 0.75rem;
239
- }
240
- }
241
- }
242
-
243
- // Helper
244
- :where(input, select, textarea) {
245
- + small {
246
- display: block;
247
- width: 100%;
248
- margin-top: calc(var(--spacing) * -0.75);
249
- margin-bottom: var(--spacing);
250
- color: var(--muted-color);
251
- }
252
- }
253
-
254
- // Styles for Input inside a label
255
- label {
256
- > :where(input, select, textarea) {
257
- margin-top: calc(var(--spacing) * 0.25);
258
- }
259
- }
File without changes
@@ -1,28 +0,0 @@
1
- th,
2
- td {
3
- padding: calc(var(--spacing) / 2) var(--spacing);
4
- border-bottom: var(--border-width) solid var(--table-border-color);
5
- color: var(--color);
6
- font-weight: var(--font-weight);
7
- font-size: var(--font-size);
8
- text-align: left;
9
- text-align: start;
10
- }
11
-
12
- // Footer
13
- tfoot {
14
- th,
15
- td {
16
- border-top: var(--border-width) solid var(--table-border-color);
17
- border-bottom: 0;
18
- }
19
- }
20
-
21
- // Striped
22
- table {
23
- &[role="grid"] {
24
- tbody tr:nth-child(odd) {
25
- background-color: var(--table-row-stripped-background-color);
26
- }
27
- }
28
- }
@@ -1,132 +0,0 @@
1
- [type="checkbox"],
2
- [type="radio"] {
3
- -webkit-appearance: none;
4
- -moz-appearance: none;
5
- appearance: none;
6
- width: 1.25em;
7
- height: 1.25em;
8
- margin-top: -0.125em;
9
- margin-right: 0.375em;
10
- margin-left: 0;
11
- margin-inline-start: 0;
12
- margin-inline-end: 0.375em;
13
- border-width: var(--border-width);
14
- font-size: inherit;
15
- vertical-align: middle;
16
- cursor: pointer;
17
-
18
- &::-ms-check {
19
- display: none; // unstyle IE checkboxes
20
- }
21
-
22
- &:checked,
23
- &:checked:active,
24
- &:checked:focus {
25
- --background-color: var(--primary);
26
- --border-color: var(--primary);
27
- background-image: var(--icon-checkbox);
28
- background-position: center;
29
- background-size: 0.75em auto;
30
- background-repeat: no-repeat;
31
- }
32
-
33
- & ~ label {
34
- display: inline-block;
35
- margin-right: 0.375em;
36
- margin-bottom: 0;
37
- cursor: pointer;
38
- }
39
- }
40
-
41
- // Checkboxes
42
- [type="checkbox"] {
43
- &:indeterminate {
44
- --background-color: var(--primary);
45
- --border-color: var(--primary);
46
- background-image: var(--icon-minus);
47
- background-position: center;
48
- background-size: 0.75em auto;
49
- background-repeat: no-repeat;
50
- }
51
- }
52
-
53
- // Radios
54
- [type="radio"] {
55
- border-radius: 50%;
56
-
57
- &:checked,
58
- &:checked:active,
59
- &:checked:focus {
60
- --background-color: var(--primary-inverse);
61
- border-width: 0.35em;
62
- background-image: none;
63
- }
64
- }
65
-
66
- // Switchs
67
- [type="checkbox"][role="switch"] {
68
- --background-color: var(--switch-background-color);
69
- --border-color: var(--switch-background-color);
70
- --color: var(--switch-color);
71
-
72
- // Config
73
- $switch-height: 1.25em;
74
- $switch-width: 2.25em;
75
- $switch-transition: 0.1s ease-in-out;
76
-
77
- // Styles
78
- width: $switch-width;
79
- height: $switch-height;
80
- border: var(--border-width) solid var(--border-color);
81
- border-radius: $switch-height;
82
- background-color: var(--background-color);
83
- line-height: $switch-height;
84
-
85
- &:focus {
86
- --background-color: var(--switch-background-color);
87
- --border-color: var(--switch-background-color);
88
- }
89
-
90
- &:checked {
91
- --background-color: var(--switch-checked-background-color);
92
- --border-color: var(--switch-checked-background-color);
93
- }
94
-
95
- &:before {
96
- display: block;
97
- width: calc(#{$switch-height} - (var(--border-width) * 2));
98
- height: 100%;
99
- border-radius: 50%;
100
- background-color: var(--color);
101
- content: "";
102
-
103
- @if $enable-transitions {
104
- transition: margin $switch-transition;
105
- }
106
- }
107
-
108
- &:checked {
109
- background-image: none;
110
-
111
- &::before {
112
- margin-left: calc(#{$switch-width * 0.5} - var(--border-width));
113
- margin-inline-start: calc(#{$switch-width * 0.5} - var(--border-width));
114
- }
115
- }
116
- }
117
-
118
- // Aria-invalid
119
- [type="checkbox"],
120
- [type="checkbox"]:checked,
121
- [type="radio"],
122
- [type="radio"]:checked,
123
- [type="checkbox"][role="switch"],
124
- [type="checkbox"][role="switch"]:checked {
125
- &[aria-invalid="false"] {
126
- --border-color: var(--form-element-valid-border-color);
127
- }
128
-
129
- &[aria-invalid="true"] {
130
- --border-color: var(--form-element-invalid-border-color);
131
- }
132
- }