@nordcode/ui 1.1.6 → 1.1.7

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 (67) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/out/bundle.css +150 -79
  3. package/out/bundle_configless.css +150 -79
  4. package/out/colors.css +53 -66
  5. package/out/complete.css +156 -85
  6. package/out/complete_configless.css +156 -85
  7. package/out/src/assets/fonts/DMMono-Regular.woff +0 -0
  8. package/out/src/assets/fonts/DMMono-Regular.woff2 +0 -0
  9. package/out/src/assets/fonts/fonts.css +7 -0
  10. package/out/src/assets/icons/ArrowRightSolid.svelte +1 -0
  11. package/out/src/assets/icons/arrow-right-solid.svg +1 -0
  12. package/out/src/assets/icons/favicon.png +0 -0
  13. package/out/src/assets/icons/favicon.svg +8 -0
  14. package/out/src/assets/logos/nordcode-logo-icon.svg +3 -0
  15. package/out/src/assets/logos/nordcode-logo.svg +17 -0
  16. package/out/src/modules/copyButtons/ts/copyButtons.ts +9 -0
  17. package/out/src/modules/dialogs/svelte/dialog.svelte +27 -0
  18. package/out/src/modules/dialogs/ts/LICENCE +171 -0
  19. package/out/src/modules/dialogs/ts/dialogs.ts +111 -0
  20. package/out/src/modules/notifications/js/notifications.js +294 -0
  21. package/out/src/modules/notifications/svelte/NotificationCenter.svelte +18 -0
  22. package/out/src/modules/notifications/svelte/NotificationTemplate.svelte +16 -0
  23. package/out/src/modules/sectionObserver/ts/sectionOberserver.ts +34 -0
  24. package/out/src/styles/bundle.css +7 -0
  25. package/out/src/styles/bundle_configless.css +5 -0
  26. package/out/src/styles/complete.css +5 -0
  27. package/out/src/styles/complete_configless.css +5 -0
  28. package/out/src/styles/components/alerts.css +20 -0
  29. package/out/src/styles/components/badges.css +14 -0
  30. package/out/src/styles/components/breadcrumbs.css +37 -0
  31. package/out/src/styles/components/bundle.css +13 -0
  32. package/out/src/styles/components/buttons.css +260 -0
  33. package/out/src/styles/components/card.css +55 -0
  34. package/out/src/styles/components/dialogs.css +138 -0
  35. package/out/src/styles/components/forms.css +41 -0
  36. package/out/src/styles/components/gallery.css +66 -0
  37. package/out/src/styles/components/icons.css +60 -0
  38. package/out/src/styles/components/inputs/base.css +249 -0
  39. package/out/src/styles/components/inputs/bundle.css +5 -0
  40. package/out/src/styles/components/inputs/fields.css +76 -0
  41. package/out/src/styles/components/inputs/segmented.css +114 -0
  42. package/out/src/styles/components/inputs/switch.css +42 -0
  43. package/out/src/styles/components/inputs/tag-select.css +41 -0
  44. package/out/src/styles/components/lists.css +40 -0
  45. package/out/src/styles/components/notifications.css +135 -0
  46. package/out/src/styles/components/tables.css +7 -0
  47. package/out/src/styles/config/bundle.css +2 -0
  48. package/out/src/styles/config/config.css +700 -0
  49. package/out/src/styles/config/extras.css +12 -0
  50. package/out/src/styles/exceptions/bundle.css +3 -0
  51. package/out/src/styles/exceptions/misc.css +21 -0
  52. package/out/src/styles/exceptions/spacings.css +15 -0
  53. package/out/src/styles/exceptions/typography.css +57 -0
  54. package/out/src/styles/theme/colors.css +165 -0
  55. package/out/src/styles/theme/colors_processed.css +87 -0
  56. package/out/src/styles/utils/base.css +415 -0
  57. package/out/src/styles/utils/bundle.css +6 -0
  58. package/out/src/styles/utils/easings.css +364 -0
  59. package/out/src/styles/utils/layouts.css +281 -0
  60. package/out/src/styles/utils/media.css +55 -0
  61. package/out/src/styles/utils/reset.css +145 -0
  62. package/out/src/styles/utils/theme.css +125 -0
  63. package/package.json +1 -1
  64. package/src/styles/exceptions/typography.css +15 -0
  65. package/src/styles/utils/base.css +101 -6
  66. package/src/styles/utils/reset.css +4 -6
  67. package/transform.js +11 -23
@@ -0,0 +1,20 @@
1
+ @layer components.alerts {
2
+ :where(.nc-alert) {
3
+ background: var(--surface);
4
+ color: var(--text);
5
+ gap: 1ch;
6
+ }
7
+
8
+ :where(.nc-alert)>.nc-icon {
9
+ margin-block: calc((var(--line-height-base) - var(--icon-size)) / 2);
10
+ }
11
+
12
+ :where(.nc-alert-title) {
13
+ font-weight: var(--font-weight-heading);
14
+ }
15
+
16
+ :where(.nc-alert.-filled) {
17
+ background: var(--surface-hover);
18
+ color: var(--text-hover);
19
+ }
20
+ }
@@ -0,0 +1,14 @@
1
+ @layer components.badge {
2
+ :where(.badge) {
3
+ font-family: var(--font-family-mono);
4
+ letter-spacing: var(--tracking-tight);
5
+ font-weight: var(--font-weight-default);
6
+ color: var(--text, var(--color-text-base));
7
+ border: var(--border-width-thin) solid var(--text, var(--color-text-base));
8
+ border-radius: var(--border-radius-small);
9
+ background: var(--surface, transparent);
10
+ padding: 0.5lh 1ch;
11
+ inline-size: max-content;
12
+ line-height: 1;
13
+ }
14
+ }
@@ -0,0 +1,37 @@
1
+ @layer components.breadcrumbs {
2
+ :where(.nc-breadcrumbs) {
3
+ inline-size: max-content;
4
+ max-inline-size: 100%;
5
+ background-color: var(--nc-breadcrumbs-surface, transparent);
6
+ color: var(--nc-breadcrumbs-text, --color-text-muted);
7
+ }
8
+
9
+ :where(.nc-breadcrumb-item) {
10
+ color: inherit;
11
+
12
+ &:last-child {
13
+ color: var(--color-brand-primary-base);
14
+ }
15
+
16
+ &:not(:last-child):after {
17
+ padding-inline: 1ch;
18
+ color: inherit;
19
+ content: "›";
20
+ font-size: inherit;
21
+ }
22
+ }
23
+
24
+ :where(.nc-breadcrumb-link) {
25
+ text-decoration: none;
26
+ color: inherit;
27
+
28
+ &:hover {
29
+ text-decoration: underline;
30
+ }
31
+
32
+ &[aria-current="page"] {
33
+ pointer-events: none;
34
+ color: var(--nc-breadcrumbs-text-active, --color-text-base);
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,13 @@
1
+ @import "./alerts.css";
2
+ @import "./badges.css";
3
+ @import "./breadcrumbs.css";
4
+ @import "./buttons.css";
5
+ @import "./card.css";
6
+ @import "./dialogs.css";
7
+ @import "./forms.css";
8
+ @import "./gallery.css";
9
+ @import "./icons.css";
10
+ @import "./inputs/bundle.css";
11
+ @import "./lists.css";
12
+ @import "./notifications.css";
13
+ @import "./tables.css";
@@ -0,0 +1,260 @@
1
+ @layer components.buttons {
2
+ .buttonReset {
3
+ padding: 0;
4
+ border: none;
5
+ background: none;
6
+ }
7
+
8
+ :where(button:not([class]),
9
+ button[type]:not([class]),
10
+ input[type='button']:not([class]),
11
+ input[type='submit']:not([class]),
12
+ input[type='reset']:not([class]),
13
+ input[type='file']:not([class]),
14
+ input[type='file']:not([class])::-webkit-file-upload-button,
15
+ input[type='file']:not([class])::file-selector-button,
16
+ .nc-button) {
17
+ --_button-background: var(--button-background, var(--surface-hover));
18
+ --_button-color: var(--button-color, var(--text-hover));
19
+ --_button-border-color: var(--button-border-color, var(--surface-hover));
20
+ --_button-border-radius: var(--button-border-radius, var(--border-radius-medium));
21
+
22
+ --_button-background-hover: var(--button-background-hover, var(--surface));
23
+ --_button-background-hover-light: var(--button-background-hover-light,
24
+ color-mix(in oklch,
25
+ currentColor calc(var(--transparency-weaker) * 10%),
26
+ transparent));
27
+ --_button-color-hover: var(--button-color-hover, var(--text));
28
+ --_button-border-color-hover: var(--button-border-color-hover,
29
+ var(--border));
30
+
31
+ --_button-box-shadow: var(--button-box-shadow, var(--shadow-near));
32
+ --_button-hover-shadow: var(--button-hover-shadow, var(--shadow-nearest));
33
+
34
+ --_button-padding-inline: var(--button-padding-inline, 1ch);
35
+
36
+ background-color: var(--_button-background);
37
+ color: var(--_button-color);
38
+ border: var(--border-width-thin) solid var(--_button-border-color);
39
+ border-radius: var(--_button-border-radius);
40
+ padding-inline: var(--_button-padding-inline);
41
+ min-block-size: var(--button-height-base);
42
+ padding-block: 0;
43
+ font-family: var(--font-family-button);
44
+ letter-spacing: var(--tracking-tight);
45
+ font-weight: var(--font-weight-default);
46
+ font-size: inherit;
47
+ cursor: pointer;
48
+ display: inline-flex;
49
+ box-sizing: border-box;
50
+ align-items: center;
51
+ justify-content: center;
52
+ text-align: center;
53
+ position: relative;
54
+ transition: var(--transition-duration-base) var(--ease-2);
55
+ transition-property: box-shadow, transform;
56
+ text-decoration: unset;
57
+ box-shadow: var(--_button-box-shadow);
58
+ user-select: none;
59
+ -webkit-tap-highlight-color: transparent;
60
+ -webkit-touch-callout: none;
61
+
62
+ line-height: var(--line-height-base);
63
+ }
64
+
65
+ :where(button:not([class]),
66
+ button[type]:not([class]),
67
+ input[type='button']:not([class]),
68
+ input[type='submit']:not([class]),
69
+ input[type='reset']:not([class]),
70
+ .nc-button) {
71
+ &:hover {
72
+ background: var(--_button-background-hover);
73
+ color: var(--_button-color-hover);
74
+ border-color: var(--_button-border-color-hover);
75
+ box-shadow: var(--_button-hover-shadow);
76
+ }
77
+
78
+ &[aria-pressed='true'] {
79
+ box-shadow: none;
80
+ transform: none;
81
+ font-weight: var(--font-weight-active);
82
+ }
83
+
84
+ &:active {
85
+ box-shadow: none;
86
+ transform: none;
87
+ }
88
+
89
+ &[disabled] {
90
+ --_button-background: none !important;
91
+ --_button-background-hover: none !important;
92
+ --_button-color: var(--color-text-subtle) !important;
93
+ --_button-color-hover: var(--_button-color) !important;
94
+ --_button-border-color: var(--color-text-subtle) !important;
95
+ --_button-border-color-hover: var(--_button-border-color);
96
+
97
+ box-shadow: none !important;
98
+ transform: none !important;
99
+ filter: contrast(0.72) opacity(0.72);
100
+ cursor: not-allowed;
101
+ }
102
+
103
+ &.-active {
104
+ background-color: var(--_button-background-hover);
105
+ color: var(--_button-color-hover);
106
+ border-color: var(--_button-border-color-hover);
107
+
108
+ box-shadow: none;
109
+ transform: none;
110
+ }
111
+
112
+ &.-outline {
113
+ background-color: transparent;
114
+ color: var(--text);
115
+ border-color: var(--border);
116
+
117
+ &:hover {
118
+ background-color: var(--_button-background-hover-light);
119
+ color: var(--text);
120
+ border-color: var(--border-hover);
121
+ }
122
+ }
123
+
124
+ &.-stealth {
125
+ background-color: transparent;
126
+ border-color: transparent;
127
+ color: var(--text);
128
+
129
+ &:hover {
130
+ background-color: var(--_button-background-hover-light);
131
+ color: var(--text);
132
+ border-color: transparent;
133
+ }
134
+
135
+ box-shadow: none !important;
136
+ transform: none !important;
137
+ }
138
+
139
+ &.-small {
140
+ --_button-padding-inline: 1ch;
141
+ min-block-size: var(--button-height-small);
142
+ }
143
+
144
+ &.-round {
145
+ --_button-border-radius: var(--border-radius-round);
146
+ }
147
+
148
+ &.-offset {
149
+ --_button-offset-distance: var(--button-offset-distance, -0.1lh);
150
+ --_button-offset-distance-hover: var(--button-offset-distance-hover, -0.05lh);
151
+
152
+ --_button-transform: translate(var(--_button-offset-distance),
153
+ var(--_button-offset-distance));
154
+ --_button-hover-transform: translate(var(--_button-offset-distance-hover),
155
+ var(--_button-offset-distance-hover));
156
+
157
+ --button-box-shadow: calc(var(--_button-offset-distance) / -2) calc(var(--_button-offset-distance) / -2) 0 0 var(--shadow-color),
158
+ calc(var(--_button-offset-distance) * -1) calc(var(--_button-offset-distance) * -1) 0 0 var(--shadow-color),
159
+ calc(var(--_button-offset-distance) * -1) calc(var(--_button-offset-distance) * -1) calc(var(--_button-offset-distance) * -2) 0 var(--shadow-color);
160
+
161
+ --button-hover-shadow: calc(var(--_button-offset-distance-hover) * -1) calc(var(--_button-offset-distance-hover) * -1) 0 0 var(--shadow-color),
162
+ calc(var(--_button-offset-distance-hover) * -1) calc(var(--_button-offset-distance-hover) * -1) calc(var(--_button-offset-distance-hover) / -2) 0 var(--shadow-color);
163
+
164
+ inset-block-start: calc(var(--_button-offset-distance) * -1);
165
+ inset-inline-start: calc(var(--_button-offset-distance) * -1);
166
+ transform: var(--_button-transform);
167
+
168
+ &:hover {
169
+ transform: var(--_button-hover-transform);
170
+ }
171
+ }
172
+
173
+ /*
174
+ * for inline icons
175
+ */
176
+
177
+ &:has(svg) {
178
+ gap: 0.5ch;
179
+ }
180
+
181
+ /*
182
+ * If there is no text node for the button,
183
+ * it is assumed that an `aria-label` is that
184
+ * and the button will be styled as an icon button.
185
+ */
186
+
187
+ &[aria-label],
188
+ &.-icon {
189
+ --_button-border-radius: var(--border-radius-round);
190
+ padding: 0;
191
+ aspect-ratio: 1;
192
+ fill: currentColor;
193
+
194
+ &:after {
195
+ content: '';
196
+ inline-size: max(var(--button-height-base), 100%);
197
+ block-size: max(var(--button-height-base), 100%);
198
+ aspect-ratio: 1;
199
+ border-radius: 100%;
200
+ inset-inline-start: calc(-0.5 * (var(--button-height-base) - 100%));
201
+ inset-block-start: calc(-0.5 * (var(--button-height-base) - 100%));
202
+ position: absolute;
203
+ z-index: -1;
204
+ pointer-events: all;
205
+ }
206
+
207
+ &>svg {
208
+ pointer-events: none;
209
+ }
210
+ }
211
+
212
+ &.-icon.-small {
213
+ padding: 0;
214
+ }
215
+
216
+ &.-aligned {
217
+ margin-inline: calc(-1 * var(--_button-padding-inline));
218
+ }
219
+ }
220
+
221
+ :where(input[type='file']:not([class])) {
222
+ color: var(--_input-color);
223
+ background-color: var(--_input-background);
224
+ border: var(--_input-border);
225
+ min-block-size: var(--button-height-base);
226
+ padding-inline-end: 1ch;
227
+ padding-inline-start: 0;
228
+ border-radius: var(--_input-border-radius);
229
+ }
230
+
231
+ :where(input[type='file']:not([class]))::-webkit-file-upload-button,
232
+ :where(input[type='file']:not([class]))::file-selector-button {
233
+ background-color: var(--_button-background);
234
+ color: var(--_button-color);
235
+ padding-inline: var(--_button-padding-inline);
236
+ margin-inline-end: 1ch;
237
+ cursor: pointer;
238
+ box-shadow: none;
239
+ min-block-size: calc(var(--button-height-base) - var(--border-width-thin));
240
+ border: none;
241
+ border-inline-end: var(--border-width-thin) solid var(--color-border-base);
242
+ transform: none;
243
+ inset-block-start: 0;
244
+ inset-inline-start: 0;
245
+ border-start-end-radius: 0;
246
+ border-end-end-radius: 0;
247
+ }
248
+
249
+ :where(button[type='reset']:not([class]), .nc-button.-destructive) {
250
+ --text: var(--color-status-danger-emphasis);
251
+ --color: var(--color-status-danger-base);
252
+ --surface: var(--color-status-danger-surface);
253
+ --border: var(--color-status-danger-base);
254
+
255
+ --text-hover: var(--color-status-danger-contrast);
256
+ --color-hover: var(--color-status-danger-contrast);
257
+ --surface-hover: var(--color-status-danger-base);
258
+ --border-hover: var(--color-status-danger-base);
259
+ }
260
+ }
@@ -0,0 +1,55 @@
1
+ @layer components.cards {
2
+ :where(.nc-card) {
3
+ --_card-background-color: var(--card-background-color, var(--color-surface-base));
4
+ --_card-color: var(--card-color, var(--color-text-base));
5
+ --_card-border-color: var(--card-border-color, var(--color-border-base));
6
+ --_card-shadow: var(--card-shadow, var(--shadow-medium));
7
+ --_card-padding-inline: var(--card-padding-inline, var(--spacing-base));
8
+ --_card-padding-block: var(--card-padding-block, var(--spacing-far));
9
+ --_card-border-radius: var(--card-border-radius, var(--border-radius-large));
10
+
11
+ &[data-size="xs"] {
12
+ --_card-padding-inline: var(--card-padding-inline, var(--spacing-nearest));
13
+ --_card-padding-block: var(--card-padding-block, var(--spacing-near));
14
+ --_card-border-radius: var(--card-border-radius, var(--border-radius-medium));
15
+ }
16
+
17
+ &[data-size="sm"] {
18
+ --_card-padding-inline: var(--card-padding-inline, var(--spacing-near));
19
+ --_card-padding-block: var(--card-padding-block, var(--spacing-base));
20
+ }
21
+
22
+ inline-size: 100%;
23
+ display: inline-block;
24
+ box-sizing: border-box;
25
+ padding-inline: var(--_card-padding-inline);
26
+ padding-block: var(--_card-padding-block);
27
+ color: var(--_card-color);
28
+ overflow: hidden;
29
+
30
+ appearance: none;
31
+ border: 1px solid var(--_card-border-color);
32
+
33
+ background-color: var(--_card-background-color);
34
+ border-radius: var(--_card-border-radius);
35
+ box-shadow: var(--_card-shadow);
36
+
37
+ transition: border-color var(--transition-duration-base) var(--ease-2);
38
+
39
+ @media (width >= 480px) {
40
+ --_card-padding-inline: var(--card-padding-inline, var(--spacing-far));
41
+ }
42
+
43
+ @media (width >= 1024px) {
44
+ --_card-padding-inline: var(--card-padding-inline, var(--spacing-farthest));
45
+ }
46
+
47
+ &:is([href], button) {
48
+ text-decoration: none;
49
+
50
+ &:hover {
51
+ border-color: var(--color-brand-primary-base);
52
+ }
53
+ }
54
+ }
55
+ }
@@ -0,0 +1,138 @@
1
+ @layer components.dialogs {
2
+ :where(.nc-dialog) {
3
+ --_dialog-padding-inline: var(--dialog-padding-inline, var(--spacing-base));
4
+ --_dialog-layout-padding: var(--layout-padding, var(--spacing-base));
5
+ --_dialog-close-size: var(--dialog-close-size, var(--button-height-base));
6
+ --_dialog-transition-duration: var(--dialog-transition-duration,
7
+ var(--transition-duration-base));
8
+ --_dialog-max-block-size: var(--dialog-max-block-size, 90dvh);
9
+ --_dialog-max-inline-size: var(--dialog-max-inline-size, 28rem);
10
+
11
+ --_dialog-radius: 0;
12
+ display: block;
13
+ z-index: var(--layer-important);
14
+ animation: close-dialog var(--_dialog-transition-duration) cubic-bezier(0.7, 0, 1, 1) forwards;
15
+ transition: opacity var(--_dialog-transition-duration) cubic-bezier(0.7, 0, 1, 1);
16
+ position: fixed;
17
+ inset: 0;
18
+ border: var(--border-width-thin) solid var(--color-border-base);
19
+ inline-size: 100dvw;
20
+ block-size: max-content;
21
+ max-inline-size: var(--_dialog-max-inline-size);
22
+ max-block-size: 100dvh;
23
+ background: var(--color-surface-base);
24
+ margin: auto 0;
25
+ padding: 0;
26
+ border-radius: var(--_dialog-radius);
27
+ overflow: clip;
28
+ overflow-clip-margin: 1rem;
29
+ pointer-events: all;
30
+
31
+ @media (min-width: 36rem) {
32
+ --_dialog-radius: var(--dialog-radius, var(--border-radius-medium));
33
+ inline-size: calc(100dvw - 2 * var(--_dialog-layout-padding));
34
+ max-block-size: var(--_dialog-max-block-size);
35
+ margin-inline: auto;
36
+ box-shadow: var(--shadow-medium);
37
+ }
38
+
39
+ &[open] {
40
+ animation: open-dialog var(--_dialog-transition-duration) cubic-bezier(0, 0.6, 0.58, 1);
41
+ }
42
+
43
+ &:not([open]) {
44
+ opacity: 0;
45
+ pointer-events: none;
46
+ }
47
+
48
+ &::backdrop {
49
+ background: rgba(0, 0, 0, 0.05);
50
+ backdrop-filter: blur(3px);
51
+ }
52
+
53
+ :where(.dialog-container) {
54
+ display: grid;
55
+ grid-template:
56
+ "header header" auto
57
+ "content content" 1fr
58
+ "footer footer" auto / 1fr 1fr;
59
+ inline-size: 100%;
60
+ block-size: max-content;
61
+ max-block-size: var(--_dialog-max-block-size);
62
+ overflow: clip;
63
+ overflow-clip-margin: 1rem;
64
+
65
+ &>*:first-child {
66
+ border-radius: var(--_dialog-radius) var(--_dialog-radius) 0 0;
67
+ }
68
+
69
+ &>*:last-child {
70
+ border-radius: 0 0 var(--_dialog-radius) var(--_dialog-radius);
71
+ }
72
+ }
73
+
74
+ :where(.dialog-header) {
75
+ grid-area: header;
76
+ border-block-end: var(--border-width-thin) solid var(--color-border-muted);
77
+ background-color: var(--color-surface-subtle);
78
+ padding-inline: var(--_dialog-padding-inline);
79
+ display: grid;
80
+ grid-template: "title close" / 1fr var(--_dialog-close-size);
81
+ align-items: flex-start;
82
+ padding-block: var(--spacing-near);
83
+ min-inline-size: calc(2 * var(--spacing-near) + var(--_dialog-close-size));
84
+ }
85
+
86
+ :where(.dialog-header)>button[data-closes-dialog] {
87
+ grid-area: close;
88
+ inline-size: var(--_dialog-close-size);
89
+ block-size: var(--_dialog-close-size);
90
+ }
91
+
92
+ :where(.dialog-title) {
93
+ font-size: var(--font-size-large);
94
+ margin: 0;
95
+ padding: 0;
96
+ line-height: var(--_dialog-close-size);
97
+ overflow-wrap: anywhere;
98
+ }
99
+
100
+ :where(.dialog-content) {
101
+ grid-area: content;
102
+ padding-inline: var(--_dialog-padding-inline);
103
+ padding-block: var(--spacing-near);
104
+ overflow: auto;
105
+ }
106
+
107
+ :where(.dialog-actions) {
108
+ grid-area: footer;
109
+ padding-inline: var(--_dialog-padding-inline);
110
+ padding-block: var(--spacing-near);
111
+ display: flex;
112
+ justify-content: flex-end;
113
+ align-items: flex-start;
114
+ border-block-start: var(--border-width-thin) solid var(--color-border-muted);
115
+ background-color: var(--color-surface-subtle);
116
+ }
117
+ }
118
+
119
+ @keyframes open-dialog {
120
+ from {
121
+ transform: translate(0%, 100dvh) rotate(0deg);
122
+ }
123
+
124
+ to {
125
+ transform: translate(0dvh, 0%) rotate(0deg);
126
+ }
127
+ }
128
+
129
+ @keyframes close-dialog {
130
+ from {
131
+ transform: translate(0dvh, 0%) rotate(0deg);
132
+ }
133
+
134
+ to {
135
+ transform: translate(0%, 100dvh) rotate(10deg);
136
+ }
137
+ }
138
+ }
@@ -0,0 +1,41 @@
1
+ @layer components.forms {
2
+ :where(.nc-form) {
3
+ inline-size: min(100%, var(--nc-form-max-inline-size, var(--measure-base)));
4
+ }
5
+
6
+ :where(.nc-form-title) {
7
+ font-size: var(--font-size-largest);
8
+ font-weight: var(--font-weight-heading);
9
+ line-height: var(--line-height-small);
10
+ color: var(--color-text-base);
11
+ }
12
+
13
+ :where(.nc-form-hint) {
14
+ margin-block: 0.5lh;
15
+ font-size: var(--font-size-large);
16
+ color: var(--color-text-muted);
17
+ }
18
+
19
+ :where(fieldset:not([class]), .nc-fieldset) {
20
+ border: none;
21
+ margin: 0;
22
+ padding: 0;
23
+ min-inline-size: 0;
24
+ }
25
+
26
+ :where(legend:not([class]), .nc-legend) {
27
+ padding: 0;
28
+ border: none;
29
+ border-radius: 0;
30
+ inline-size: 100%;
31
+
32
+ &+* {
33
+ margin-block-start: var(--nc-legend-spacing, 0.8lh);
34
+ }
35
+ }
36
+
37
+ :where(:is(fieldset:not([class]), .nc-fieldset):has( :is(.nc-legend + .nc-hint, legend:not([class]) + .nc-hint)) > :is(legend:not([class]), .nc-legend) + .nc-hint) {
38
+ --nc-legend-spacing: .125lh;
39
+ margin-block-end: 0.5lh;
40
+ }
41
+ }
@@ -0,0 +1,66 @@
1
+ @layer components.gallery {
2
+ /**
3
+ * A horizontal stacked gallery that is scrollable when it overflows.
4
+ *
5
+ * @example ```html
6
+ * <ul class="nc-gallery">
7
+ * <li>First</li>
8
+ * <li>Second</li>
9
+ * <li>Third</li>
10
+ * </ul>
11
+ * ```
12
+ */
13
+ :where(.nc-gallery) {
14
+ display: flex;
15
+ flex-direction: row;
16
+ gap: var(--gallery-gap, var(--spacing-base));
17
+ margin: 0;
18
+ max-inline-size: 100%;
19
+ block-size: var(--gallery-size, auto);
20
+ padding-block-end: var(--gallery-scrollbar-padding, var(--spacing-base));
21
+ overflow-x: auto;
22
+ overscroll-behavior-inline: contain;
23
+ scroll-snap-type: inline mandatory;
24
+ scroll-snap-stop: normal;
25
+ scroll-padding-inline: var(--gallery-scroll-padding-inline, var(--spacing-base));
26
+ list-style: none;
27
+
28
+ @media (prefers-reduced-motion: no-preference) {
29
+ scroll-behavior: smooth;
30
+ }
31
+
32
+ & > * {
33
+ display: inline-block;
34
+ scroll-snap-align: start;
35
+ flex: 0 0 var(--gallery-item-size, auto);
36
+ }
37
+
38
+ &.-custom-scrollbar {
39
+ scrollbar-color: var(--gallery-scrollbar-fg, var(--color-text-on-emphasis))
40
+ var(--gallery-scrollbar-bg, var(--color-surface-emphasis));
41
+
42
+ &::-webkit-scrollbar {
43
+ block-size: var(--gallery-scrollbar-height, var(--spacing-base));
44
+ }
45
+
46
+ &::-webkit-scrollbar-track {
47
+ background-color: var(--gallery-scrollbar-bg, var(--color-surface-emphasis));
48
+ }
49
+
50
+ &::-webkit-scrollbar-thumb {
51
+ background-color: var(--gallery-scrollbar-bg, var(--color-surface-emphasis));
52
+ background-image: linear-gradient(
53
+ var(--gallery-scrollbar-bg, var(--color-surface-emphasis)) 0,
54
+ var(--gallery-scrollbar-bg, var(--color-surface-emphasis))
55
+ calc(var(--gallery-scrollbar-height, var(--spacing-base)) * 0.25),
56
+ var(--gallery-scrollbar-fg, var(--color-text-on-emphasis))
57
+ calc(var(--gallery-scrollbar-height, var(--spacing-base)) * 0.25),
58
+ var(--gallery-scrollbar-fg, var(--color-text-on-emphasis))
59
+ calc(var(--gallery-scrollbar-height, var(--spacing-base)) * 0.75),
60
+ var(--gallery-scrollbar-bg, var(--color-surface-emphasis))
61
+ calc(var(--gallery-scrollbar-height, var(--spacing-base)) * 0.75)
62
+ );
63
+ }
64
+ }
65
+ }
66
+ }