@db-vincent/components 0.0.0-stage → 0.1.1

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 (86) hide show
  1. package/package.json +28 -4
  2. package/src/astro/Accordion.astro +37 -0
  3. package/src/astro/Alert.astro +73 -0
  4. package/src/astro/Avatar.astro +88 -0
  5. package/src/astro/AvatarGroup.astro +63 -0
  6. package/src/astro/Badge.astro +23 -0
  7. package/src/astro/Breadcrumbs.astro +45 -0
  8. package/src/astro/Button.astro +125 -0
  9. package/src/astro/Card.astro +63 -0
  10. package/src/astro/Checkbox.astro +61 -0
  11. package/src/astro/Chip.astro +135 -0
  12. package/src/astro/CodeBlock.astro +17 -0
  13. package/src/astro/Drawer.astro +30 -0
  14. package/src/astro/EmptyState.astro +45 -0
  15. package/src/astro/Example.astro +37 -0
  16. package/src/astro/Grid.astro +56 -0
  17. package/src/astro/GridItem.astro +25 -0
  18. package/src/astro/Icon.astro +52 -0
  19. package/src/astro/Menu.astro +151 -0
  20. package/src/astro/MenuItem.astro +57 -0
  21. package/src/astro/Modal.astro +124 -0
  22. package/src/astro/Navbar.astro +756 -0
  23. package/src/astro/PageHeader.astro +34 -0
  24. package/src/astro/Pagination.astro +212 -0
  25. package/src/astro/Popover.astro +51 -0
  26. package/src/astro/Progress.astro +71 -0
  27. package/src/astro/Radio.astro +58 -0
  28. package/src/astro/RadioGroup.astro +25 -0
  29. package/src/astro/Section.astro +25 -0
  30. package/src/astro/Select.astro +420 -0
  31. package/src/astro/Sidebar.astro +215 -0
  32. package/src/astro/Skeleton.astro +41 -0
  33. package/src/astro/Spinner.astro +20 -0
  34. package/src/astro/Stepper.astro +82 -0
  35. package/src/astro/Switch.astro +78 -0
  36. package/src/astro/Table.astro +268 -0
  37. package/src/astro/Tabs.astro +83 -0
  38. package/src/astro/TextField.astro +305 -0
  39. package/src/astro/ThemeToggle.astro +66 -0
  40. package/src/astro/Toast.astro +181 -0
  41. package/src/astro/Tooltip.astro +54 -0
  42. package/src/astro/TopBar.astro +29 -0
  43. package/src/data/icons.ts +120 -0
  44. package/src/scripts/avatar.ts +33 -0
  45. package/src/scripts/menu.ts +218 -0
  46. package/src/scripts/tabs.ts +127 -0
  47. package/src/scripts/toast.ts +565 -0
  48. package/src/scripts/tooltip.ts +127 -0
  49. package/src/styles/accordion.css +79 -0
  50. package/src/styles/alert.css +108 -0
  51. package/src/styles/avatar.css +131 -0
  52. package/src/styles/badge.css +48 -0
  53. package/src/styles/base.css +205 -0
  54. package/src/styles/breadcrumbs.css +54 -0
  55. package/src/styles/button.css +174 -0
  56. package/src/styles/card.css +112 -0
  57. package/src/styles/chip.css +106 -0
  58. package/src/styles/choice.css +143 -0
  59. package/src/styles/code.css +44 -0
  60. package/src/styles/empty.css +59 -0
  61. package/src/styles/example.css +57 -0
  62. package/src/styles/grid.css +64 -0
  63. package/src/styles/input.css +208 -0
  64. package/src/styles/menu.css +151 -0
  65. package/src/styles/modal.css +285 -0
  66. package/src/styles/motion.css +114 -0
  67. package/src/styles/nav.css +232 -0
  68. package/src/styles/navbar.css +658 -0
  69. package/src/styles/page-header.css +62 -0
  70. package/src/styles/pagination.css +81 -0
  71. package/src/styles/popover.css +134 -0
  72. package/src/styles/progress.css +95 -0
  73. package/src/styles/section.css +38 -0
  74. package/src/styles/select.css +246 -0
  75. package/src/styles/skeleton.css +66 -0
  76. package/src/styles/spinner.css +44 -0
  77. package/src/styles/sr-only.css +14 -0
  78. package/src/styles/stepper.css +169 -0
  79. package/src/styles/switch.css +143 -0
  80. package/src/styles/table.css +177 -0
  81. package/src/styles/tabs.css +120 -0
  82. package/src/styles/theme-toggle.css +31 -0
  83. package/src/styles/toast.css +225 -0
  84. package/src/styles/tooltip.css +63 -0
  85. package/src/styles/topbar.css +32 -0
  86. package/README.md +0 -3
@@ -0,0 +1,174 @@
1
+ @layer reset, tokens, base, components, motion, utilities;
2
+
3
+ @layer components {
4
+ .ds-button {
5
+ align-items: center;
6
+ background: var(--button-secondary-bg);
7
+ border: 1px solid var(--button-secondary-border);
8
+ border-radius: var(--button-radius);
9
+ color: var(--button-secondary-fg);
10
+ display: inline-flex;
11
+ font-family: var(--button-font);
12
+ font-size: var(--button-font-md);
13
+ font-weight: var(--button-font-weight);
14
+ gap: var(--button-gap);
15
+ height: var(--button-height-md);
16
+ justify-content: center;
17
+ line-height: 1;
18
+ padding-inline: var(--button-padding-x-md);
19
+ position: relative;
20
+ text-decoration: none;
21
+ transition:
22
+ background-color var(--duration-fast) var(--ease-standard),
23
+ border-color var(--duration-fast) var(--ease-standard),
24
+ color var(--duration-fast) var(--ease-standard),
25
+ box-shadow var(--duration-fast) var(--ease-standard),
26
+ transform var(--duration-fast) var(--ease-standard);
27
+ user-select: none;
28
+ white-space: nowrap;
29
+ }
30
+
31
+ .ds-button:hover {
32
+ background: var(--button-secondary-bg-hover);
33
+ border-color: var(--button-secondary-border-hover);
34
+ }
35
+
36
+ .ds-button:active {
37
+ background: var(--button-secondary-bg-active);
38
+ }
39
+
40
+ .ds-button:active:not(:disabled, [aria-disabled="true"]) {
41
+ transform: scale(0.97);
42
+ }
43
+
44
+ .ds-button:focus-visible {
45
+ outline: var(--button-focus-width) solid var(--button-focus-color);
46
+ outline-offset: var(--button-focus-offset);
47
+ }
48
+
49
+ .ds-button--primary {
50
+ background: var(--button-primary-bg);
51
+ border-color: var(--button-primary-border);
52
+ color: var(--button-primary-fg);
53
+ }
54
+
55
+ .ds-button--primary:hover {
56
+ background: var(--button-primary-bg-hover);
57
+ border-color: var(--button-primary-border-hover);
58
+ }
59
+
60
+ .ds-button--primary:active {
61
+ background: var(--button-primary-bg-active);
62
+ }
63
+
64
+ .ds-button--ghost {
65
+ background: var(--button-ghost-bg);
66
+ border-color: var(--button-ghost-border);
67
+ color: var(--button-ghost-fg);
68
+ }
69
+
70
+ .ds-button--ghost:hover {
71
+ background: var(--button-ghost-bg-hover);
72
+ color: var(--button-ghost-fg-hover);
73
+ }
74
+
75
+ .ds-button--ghost:active {
76
+ background: var(--button-ghost-bg-active);
77
+ }
78
+
79
+ .ds-button--danger {
80
+ background: var(--button-danger-bg);
81
+ border-color: var(--button-danger-border);
82
+ color: var(--button-danger-fg);
83
+ }
84
+
85
+ .ds-button--danger:hover {
86
+ background: var(--button-danger-bg-hover);
87
+ }
88
+
89
+ .ds-button--sm {
90
+ font-size: var(--button-font-sm);
91
+ height: var(--button-height-sm);
92
+ padding-inline: var(--button-padding-x-sm);
93
+ }
94
+
95
+ .ds-button--lg {
96
+ font-size: var(--button-font-lg);
97
+ height: var(--button-height-lg);
98
+ padding-inline: var(--button-padding-x-lg);
99
+ }
100
+
101
+ .ds-button--block {
102
+ width: 100%;
103
+ }
104
+
105
+ .ds-button--icon {
106
+ aspect-ratio: 1;
107
+ padding-inline: var(--space-0);
108
+ width: var(--button-height-md);
109
+ }
110
+
111
+ .ds-button--icon.ds-button--sm {
112
+ width: var(--button-height-sm);
113
+ }
114
+
115
+ .ds-button--icon.ds-button--lg {
116
+ width: var(--button-height-lg);
117
+ }
118
+
119
+ .ds-button__icon {
120
+ align-items: center;
121
+ display: inline-flex;
122
+ height: var(--button-icon-size-md);
123
+ justify-content: center;
124
+ width: var(--button-icon-size-md);
125
+ }
126
+
127
+ .ds-button--sm .ds-button__icon {
128
+ height: var(--button-icon-size-sm);
129
+ width: var(--button-icon-size-sm);
130
+ }
131
+
132
+ .ds-button--lg .ds-button__icon {
133
+ height: var(--button-icon-size-lg);
134
+ width: var(--button-icon-size-lg);
135
+ }
136
+
137
+ .ds-button[aria-disabled="true"],
138
+ .ds-button:disabled {
139
+ background: var(--button-disabled-bg);
140
+ border-color: var(--button-disabled-border);
141
+ color: var(--button-disabled-fg);
142
+ cursor: not-allowed;
143
+ pointer-events: none;
144
+ }
145
+
146
+ .ds-button__spinner {
147
+ animation: ds-button-spin calc(var(--duration-slower) * 2) linear infinite;
148
+ border: var(--spinner-stroke) solid currentColor;
149
+ border-right-color: transparent;
150
+ border-radius: var(--radius-full);
151
+ height: var(--space-4);
152
+ width: var(--space-4);
153
+ }
154
+
155
+ .ds-button[aria-busy="true"] {
156
+ cursor: progress;
157
+ }
158
+
159
+ @keyframes ds-button-spin {
160
+ to {
161
+ transform: rotate(360deg);
162
+ }
163
+ }
164
+
165
+ @media (prefers-reduced-motion: reduce) {
166
+ .ds-button:active:not(:disabled, [aria-disabled="true"]) {
167
+ transform: none;
168
+ }
169
+
170
+ .ds-button__spinner {
171
+ animation-duration: 1.6s;
172
+ }
173
+ }
174
+ }
@@ -0,0 +1,112 @@
1
+ @layer reset, tokens, base, components, motion, utilities;
2
+
3
+ @layer components {
4
+ .ds-card {
5
+ background: var(--card-bg);
6
+ border: 1px solid var(--card-border);
7
+ border-radius: var(--card-radius);
8
+ color: var(--card-fg);
9
+ display: block;
10
+ overflow: hidden;
11
+ transition:
12
+ border-color var(--duration-fast) var(--ease-standard),
13
+ box-shadow var(--duration-fast) var(--ease-standard),
14
+ transform var(--duration-fast) var(--ease-standard);
15
+ }
16
+
17
+ .ds-card--accent {
18
+ background: var(--card-accent-bg);
19
+ border-color: var(--card-accent-border);
20
+ }
21
+
22
+ .ds-card--raised {
23
+ background: var(--card-raised-bg);
24
+ border-color: var(--card-raised-border);
25
+ box-shadow: var(--card-raised-shadow);
26
+ }
27
+
28
+ .ds-card--flat {
29
+ background: var(--card-flat-bg);
30
+ border-color: var(--card-flat-border);
31
+ box-shadow: none;
32
+ }
33
+
34
+ a.ds-card {
35
+ text-decoration: none;
36
+ }
37
+
38
+ @media (hover: hover) and (pointer: fine) {
39
+ a.ds-card:hover {
40
+ border-color: var(--card-hover-border);
41
+ box-shadow: var(--card-raised-shadow);
42
+ transform: translateY(-1px);
43
+ }
44
+ }
45
+
46
+ a.ds-card:focus-visible {
47
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
48
+ outline-offset: var(--focus-ring-offset);
49
+ }
50
+
51
+ .ds-card__header {
52
+ padding: var(--card-padding) var(--card-padding) 0;
53
+ }
54
+
55
+ .ds-card__header > * + * {
56
+ margin-block-start: var(--card-header-gap);
57
+ }
58
+
59
+ .ds-card__eyebrow {
60
+ color: var(--card-meta-fg);
61
+ font-family: var(--font-body);
62
+ font-size: var(--type-overline-size);
63
+ font-weight: var(--type-overline-weight);
64
+ letter-spacing: var(--type-overline-tracking);
65
+ margin-block-end: var(--space-2);
66
+ text-transform: uppercase;
67
+ }
68
+
69
+ .ds-card__title {
70
+ color: var(--card-title-fg);
71
+ font-size: var(--text-lg);
72
+ font-weight: var(--weight-semibold);
73
+ letter-spacing: var(--type-heading-tracking);
74
+ line-height: var(--leading-lg);
75
+ }
76
+
77
+ .ds-card__meta {
78
+ color: var(--card-meta-fg);
79
+ font-size: var(--text-sm);
80
+ line-height: var(--leading-sm);
81
+ }
82
+
83
+ .ds-card__body {
84
+ color: var(--card-body-fg);
85
+ font-size: var(--text-sm);
86
+ line-height: var(--leading-base);
87
+ padding: var(--card-padding);
88
+ }
89
+
90
+ .ds-card__header + .ds-card__body {
91
+ padding-block-start: var(--space-3);
92
+ }
93
+
94
+ .ds-card__footer {
95
+ align-items: center;
96
+ background: var(--card-footer-bg);
97
+ border-top: 1px solid var(--card-footer-border);
98
+ display: flex;
99
+ gap: var(--space-3);
100
+ padding: var(--space-3) var(--card-padding);
101
+ }
102
+
103
+ @media (prefers-reduced-motion: reduce) {
104
+ .ds-card {
105
+ transition: none;
106
+ }
107
+
108
+ a.ds-card:hover {
109
+ transform: none;
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,106 @@
1
+ @layer reset, tokens, base, components, motion, utilities;
2
+
3
+ @layer components {
4
+ .ds-chip {
5
+ align-items: center;
6
+ background: var(--chip-bg);
7
+ border: 1px solid var(--chip-border);
8
+ border-radius: var(--chip-radius);
9
+ color: var(--chip-fg);
10
+ display: inline-flex;
11
+ font-family: var(--font-body);
12
+ font-size: var(--chip-font-size);
13
+ gap: var(--space-1-5);
14
+ height: var(--chip-height);
15
+ line-height: 1;
16
+ padding-inline: var(--chip-padding-x);
17
+ text-decoration: none;
18
+ transition:
19
+ background-color var(--duration-fast) var(--ease-standard),
20
+ border-color var(--duration-fast) var(--ease-standard),
21
+ color var(--duration-fast) var(--ease-standard);
22
+ white-space: nowrap;
23
+ }
24
+
25
+ button.ds-chip {
26
+ cursor: pointer;
27
+ }
28
+
29
+ .ds-chip--sm {
30
+ font-size: var(--text-xs);
31
+ gap: var(--space-1);
32
+ height: var(--chip-height-sm);
33
+ padding-inline: var(--space-2-5);
34
+ }
35
+
36
+ /* Selection is never color alone: a pressed toggle shows a check. */
37
+ .ds-chip__check {
38
+ display: none;
39
+ margin-inline-start: calc(-1 * var(--space-0-5));
40
+ }
41
+
42
+ .ds-chip[aria-pressed="true"] .ds-chip__check {
43
+ display: block;
44
+ }
45
+
46
+ .ds-chip.is-disabled,
47
+ .ds-chip:disabled {
48
+ color: var(--chip-fg-disabled);
49
+ cursor: not-allowed;
50
+ pointer-events: none;
51
+ }
52
+
53
+ .ds-chip:hover {
54
+ background: var(--chip-bg-hover);
55
+ border-color: var(--chip-border-hover);
56
+ color: var(--chip-fg-hover);
57
+ }
58
+
59
+ .ds-chip[aria-pressed="true"],
60
+ .ds-chip.is-selected {
61
+ background: var(--chip-bg-selected);
62
+ border-color: var(--chip-border-selected);
63
+ color: var(--chip-fg-selected);
64
+ }
65
+
66
+ .ds-chip:focus-visible {
67
+ outline: var(--chip-focus-width) solid var(--chip-focus-color);
68
+ outline-offset: var(--chip-focus-offset);
69
+ }
70
+
71
+ .ds-chip__remove {
72
+ align-items: center;
73
+ background: transparent;
74
+ border: 0;
75
+ border-radius: var(--radius-full);
76
+ color: inherit;
77
+ display: inline-flex;
78
+ height: var(--space-4);
79
+ justify-content: center;
80
+ margin-inline-end: calc(-1 * var(--space-1));
81
+ padding: 0;
82
+ position: relative;
83
+ width: var(--space-4);
84
+ }
85
+
86
+ /* Keep the 14px glyph but give it a 24px pointer target. */
87
+ .ds-chip__remove::after {
88
+ content: "";
89
+ inset: calc(-1 * var(--space-1));
90
+ position: absolute;
91
+ }
92
+
93
+ .ds-chip__remove:hover {
94
+ background: var(--chip-remove-bg-hover);
95
+ }
96
+
97
+ .ds-chip__remove:focus-visible {
98
+ outline: var(--chip-focus-width) solid var(--chip-focus-color);
99
+ outline-offset: var(--chip-focus-offset);
100
+ }
101
+
102
+ .ds-chip__remove:disabled {
103
+ color: var(--chip-fg-disabled);
104
+ cursor: not-allowed;
105
+ }
106
+ }
@@ -0,0 +1,143 @@
1
+ @layer reset, tokens, base, components, motion, utilities;
2
+
3
+ @layer components {
4
+ .ds-choice {
5
+ align-items: flex-start;
6
+ cursor: pointer;
7
+ display: inline-flex;
8
+ gap: var(--checkbox-gap);
9
+ position: relative;
10
+ }
11
+
12
+ .ds-choice__input {
13
+ height: var(--checkbox-size);
14
+ inset-block-start: var(--space-0-5);
15
+ margin: 0;
16
+ opacity: 0;
17
+ position: absolute;
18
+ width: var(--checkbox-size);
19
+ }
20
+
21
+ .ds-choice__box {
22
+ align-items: center;
23
+ background: var(--checkbox-bg);
24
+ border: 1px solid var(--checkbox-border);
25
+ border-radius: var(--checkbox-radius);
26
+ color: transparent;
27
+ display: inline-flex;
28
+ flex: none;
29
+ height: var(--checkbox-size);
30
+ justify-content: center;
31
+ margin-block-start: var(--space-0-5);
32
+ transition:
33
+ background-color var(--duration-fast) var(--ease-standard),
34
+ border-color var(--duration-fast) var(--ease-standard);
35
+ width: var(--checkbox-size);
36
+ }
37
+
38
+ .ds-choice__box svg {
39
+ height: 80%;
40
+ stroke-width: 3;
41
+ width: 80%;
42
+ }
43
+
44
+ .ds-choice:hover .ds-choice__input:not(:disabled) + .ds-choice__box {
45
+ background: var(--checkbox-bg-hover);
46
+ border-color: var(--checkbox-border-checked);
47
+ }
48
+
49
+ .ds-choice__input:checked + .ds-choice__box {
50
+ background: var(--checkbox-bg-checked);
51
+ border-color: var(--checkbox-border-checked);
52
+ color: var(--checkbox-fg-check);
53
+ }
54
+
55
+ .ds-choice__input:focus-visible + .ds-choice__box {
56
+ outline: var(--checkbox-focus-width) solid var(--checkbox-focus-color);
57
+ outline-offset: var(--checkbox-focus-offset);
58
+ }
59
+
60
+ .ds-choice__input:disabled + .ds-choice__box {
61
+ background: var(--checkbox-bg-disabled);
62
+ border-color: var(--checkbox-border);
63
+ cursor: not-allowed;
64
+ }
65
+
66
+ .ds-choice__input:checked:disabled + .ds-choice__box {
67
+ color: var(--checkbox-fg-disabled);
68
+ }
69
+
70
+ .ds-choice:has(.ds-choice__input:disabled) {
71
+ cursor: not-allowed;
72
+ }
73
+
74
+ .ds-choice__label {
75
+ color: var(--checkbox-label-fg);
76
+ font-size: var(--text-sm);
77
+ line-height: var(--leading-sm);
78
+ }
79
+
80
+ .ds-choice:has(.ds-choice__input:disabled) .ds-choice__label {
81
+ color: var(--checkbox-label-fg-disabled);
82
+ }
83
+
84
+ .ds-choice__description {
85
+ color: var(--color-text-tertiary);
86
+ display: block;
87
+ font-size: var(--text-sm);
88
+ line-height: var(--leading-sm);
89
+ margin-block-start: var(--space-0-5);
90
+ }
91
+
92
+ .ds-choice--radio .ds-choice__box {
93
+ border-radius: var(--radius-full);
94
+ }
95
+
96
+ .ds-choice--radio .ds-choice__input:checked + .ds-choice__box {
97
+ background: var(--radio-bg-checked);
98
+ border-color: var(--radio-border-checked);
99
+ }
100
+
101
+ .ds-choice--radio .ds-choice__box::after {
102
+ background: var(--radio-dot);
103
+ border-radius: var(--radius-full);
104
+ content: "";
105
+ height: var(--radio-dot-size);
106
+ opacity: 0;
107
+ transform: scale(0.5);
108
+ transition:
109
+ opacity var(--duration-fast) var(--ease-standard),
110
+ transform var(--duration-fast) var(--ease-standard);
111
+ width: var(--radio-dot-size);
112
+ }
113
+
114
+ .ds-choice--radio .ds-choice__input:checked + .ds-choice__box::after {
115
+ opacity: 1;
116
+ transform: scale(1);
117
+ }
118
+
119
+ .ds-choice--radio .ds-choice__input:disabled + .ds-choice__box {
120
+ background: var(--radio-bg-disabled);
121
+ }
122
+
123
+ .ds-choice-group {
124
+ border: 0;
125
+ display: grid;
126
+ gap: var(--space-3);
127
+ padding: 0;
128
+ }
129
+
130
+ .ds-choice-group__legend {
131
+ color: var(--color-text-primary);
132
+ font-size: var(--text-sm);
133
+ font-weight: var(--weight-medium);
134
+ margin-block-end: var(--space-2);
135
+ padding: 0;
136
+ }
137
+
138
+ .ds-choice-group__hint {
139
+ color: var(--color-text-secondary);
140
+ font-size: var(--text-sm);
141
+ margin-block-end: var(--space-3);
142
+ }
143
+ }
@@ -0,0 +1,44 @@
1
+ @layer reset, tokens, base, components, motion, utilities;
2
+
3
+ @layer components {
4
+ .ds-code {
5
+ margin: 0;
6
+ max-width: 100%;
7
+ min-width: 0;
8
+ }
9
+
10
+ .ds-code__label {
11
+ color: var(--code-label-fg);
12
+ font-family: var(--font-body);
13
+ font-size: var(--code-label-size);
14
+ font-weight: var(--type-overline-weight);
15
+ letter-spacing: var(--type-overline-tracking);
16
+ text-transform: uppercase;
17
+ margin-block-end: var(--code-label-margin);
18
+ }
19
+
20
+ .ds-code__pre {
21
+ background: var(--code-bg);
22
+ border: 1px solid var(--code-border);
23
+ border-radius: var(--code-radius);
24
+ color: var(--code-fg);
25
+ font-family: var(--font-mono);
26
+ font-size: var(--code-font-size);
27
+ line-height: var(--code-line-height);
28
+ margin: 0;
29
+ max-width: 100%;
30
+ overflow-x: auto;
31
+ padding: var(--code-padding);
32
+ scrollbar-color: var(--code-scrollbar) transparent;
33
+ scrollbar-width: thin;
34
+ tab-size: 2;
35
+ white-space: pre;
36
+ }
37
+
38
+ .ds-code__pre code {
39
+ background: none;
40
+ border-radius: 0;
41
+ font-size: inherit;
42
+ padding: 0;
43
+ }
44
+ }
@@ -0,0 +1,59 @@
1
+ @layer reset, tokens, base, components, motion, utilities;
2
+
3
+ @layer components {
4
+ .ds-empty {
5
+ align-items: center;
6
+ display: flex;
7
+ flex-direction: column;
8
+ gap: var(--empty-gap);
9
+ padding: var(--empty-padding);
10
+ text-align: center;
11
+ }
12
+
13
+ .ds-empty--dashed {
14
+ border: 1px dashed var(--empty-dashed-border);
15
+ border-radius: var(--empty-radius);
16
+ }
17
+
18
+ .ds-empty__icon {
19
+ align-items: center;
20
+ background: var(--empty-icon-bg);
21
+ border-radius: var(--radius-full);
22
+ color: var(--empty-icon-fg);
23
+ display: inline-flex;
24
+ height: var(--empty-icon-size);
25
+ justify-content: center;
26
+ margin-block-end: var(--space-2);
27
+ width: var(--empty-icon-size);
28
+ }
29
+
30
+ .ds-empty__skeleton {
31
+ display: grid;
32
+ gap: var(--empty-skeleton-gap);
33
+ max-width: var(--empty-skeleton-width);
34
+ width: 100%;
35
+ }
36
+
37
+ .ds-empty__title {
38
+ color: var(--empty-title-fg);
39
+ font-size: var(--empty-title-size);
40
+ font-weight: var(--weight-semibold);
41
+ letter-spacing: var(--type-heading-tracking);
42
+ line-height: var(--leading-lg);
43
+ }
44
+
45
+ .ds-empty__body {
46
+ color: var(--empty-body-fg);
47
+ font-size: var(--empty-body-size);
48
+ line-height: var(--leading-base);
49
+ max-width: var(--empty-max-width);
50
+ }
51
+
52
+ .ds-empty__actions {
53
+ display: flex;
54
+ flex-wrap: wrap;
55
+ gap: var(--space-3);
56
+ justify-content: center;
57
+ margin-block-start: var(--space-2);
58
+ }
59
+ }
@@ -0,0 +1,57 @@
1
+ @layer reset, tokens, base, components, motion, utilities;
2
+
3
+ @layer components {
4
+ .ds-example {
5
+ display: grid;
6
+ gap: var(--example-gap);
7
+ grid-template-columns: minmax(0, 1fr);
8
+ margin: 0;
9
+ min-width: 0;
10
+ }
11
+
12
+ .ds-example + .ds-example {
13
+ margin-block-start: var(--space-8);
14
+ }
15
+
16
+ .ds-example__caption {
17
+ align-items: baseline;
18
+ display: flex;
19
+ flex-wrap: wrap;
20
+ gap: var(--space-2) var(--space-3);
21
+ justify-content: space-between;
22
+ }
23
+
24
+ .ds-example__title {
25
+ color: var(--example-label-fg);
26
+ font-family: var(--font-body);
27
+ font-size: var(--type-overline-size);
28
+ font-weight: var(--type-overline-weight);
29
+ letter-spacing: var(--type-overline-tracking);
30
+ text-transform: uppercase;
31
+ }
32
+
33
+ .ds-example__description {
34
+ color: var(--example-description-fg);
35
+ font-size: var(--text-sm);
36
+ }
37
+
38
+ .ds-example__preview {
39
+ background: var(--example-bg);
40
+ border: 1px solid var(--example-border);
41
+ border-radius: var(--example-radius);
42
+ min-height: var(--example-preview-min);
43
+ min-width: 0;
44
+ padding: var(--example-padding);
45
+ }
46
+
47
+ @media (max-width: 699px) {
48
+ .ds-example__preview {
49
+ padding: var(--space-4);
50
+ }
51
+ }
52
+
53
+ .ds-example__preview--flush {
54
+ overflow: hidden;
55
+ padding: 0;
56
+ }
57
+ }