@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,114 @@
1
+ @layer reset, tokens, base, components, motion, utilities;
2
+
3
+ @layer motion {
4
+ .ds-motion-lift,
5
+ .ds-motion-underline,
6
+ .ds-motion-arrow,
7
+ .ds-motion-row {
8
+ --ds-motion-time: var(--motion-duration);
9
+ --ds-motion-delay: var(--motion-delay-none);
10
+ }
11
+
12
+ .ds-motion-fast {
13
+ --ds-motion-time: var(--motion-duration-fast);
14
+ }
15
+
16
+ .ds-motion-slow {
17
+ --ds-motion-time: var(--motion-duration-slow);
18
+ }
19
+
20
+ .ds-motion-delay {
21
+ --ds-motion-delay: var(--motion-delay-short);
22
+ }
23
+
24
+ .ds-motion-delay-long {
25
+ --ds-motion-delay: var(--motion-delay-long);
26
+ }
27
+
28
+ .ds-motion-lift {
29
+ transition:
30
+ transform var(--ds-motion-time) var(--motion-ease) var(--ds-motion-delay),
31
+ box-shadow var(--ds-motion-time) var(--motion-ease) var(--ds-motion-delay),
32
+ border-color var(--ds-motion-time) var(--motion-ease)
33
+ var(--ds-motion-delay);
34
+ }
35
+
36
+ .ds-motion-lift:focus-visible {
37
+ box-shadow: var(--motion-lift-shadow);
38
+ transform: translateY(var(--motion-lift-y));
39
+ }
40
+
41
+ @media (hover: hover) and (pointer: fine) {
42
+ .ds-motion-lift:hover {
43
+ box-shadow: var(--motion-lift-shadow);
44
+ transform: translateY(var(--motion-lift-y));
45
+ }
46
+ }
47
+
48
+ .ds-motion-underline {
49
+ background-image: linear-gradient(currentColor, currentColor);
50
+ background-position: 0 100%;
51
+ background-repeat: no-repeat;
52
+ background-size: 0 var(--motion-underline-thickness);
53
+ padding-block-end: var(--motion-underline-offset);
54
+ text-decoration: none;
55
+ transition: background-size var(--ds-motion-time) var(--motion-ease)
56
+ var(--ds-motion-delay);
57
+ }
58
+
59
+ .ds-motion-underline:hover,
60
+ .ds-motion-underline:focus-visible {
61
+ background-size: 100% var(--motion-underline-thickness);
62
+ }
63
+
64
+ .ds-motion-arrow {
65
+ align-items: center;
66
+ display: inline-flex;
67
+ gap: var(--space-2);
68
+ text-decoration: none;
69
+ }
70
+
71
+ .ds-motion-arrow__target {
72
+ display: inline-flex;
73
+ transition: transform var(--ds-motion-time) var(--motion-ease)
74
+ var(--ds-motion-delay);
75
+ }
76
+
77
+ .ds-motion-arrow:focus-visible .ds-motion-arrow__target {
78
+ transform: translateX(var(--motion-nudge));
79
+ }
80
+
81
+ @media (hover: hover) and (pointer: fine) {
82
+ .ds-motion-arrow:hover .ds-motion-arrow__target {
83
+ transform: translateX(var(--motion-nudge));
84
+ }
85
+ }
86
+
87
+ .ds-motion-row {
88
+ transition:
89
+ background-color var(--ds-motion-time) var(--motion-ease)
90
+ var(--ds-motion-delay),
91
+ transform var(--ds-motion-time) var(--motion-ease) var(--ds-motion-delay);
92
+ }
93
+
94
+ .ds-motion-row:focus-within {
95
+ transform: translateX(var(--motion-row-nudge));
96
+ }
97
+
98
+ @media (hover: hover) and (pointer: fine) {
99
+ .ds-motion-row:hover {
100
+ transform: translateX(var(--motion-row-nudge));
101
+ }
102
+ }
103
+
104
+ @media (prefers-reduced-motion: reduce) {
105
+ .ds-motion-lift:hover,
106
+ .ds-motion-lift:focus-visible,
107
+ .ds-motion-arrow:hover .ds-motion-arrow__target,
108
+ .ds-motion-arrow:focus-visible .ds-motion-arrow__target,
109
+ .ds-motion-row:hover,
110
+ .ds-motion-row:focus-within {
111
+ transform: none;
112
+ }
113
+ }
114
+ }
@@ -0,0 +1,232 @@
1
+ @layer reset, tokens, base, components, motion, utilities;
2
+
3
+ @layer components {
4
+ .ds-nav {
5
+ background: var(--nav-bg);
6
+ border-inline-end: 1px solid var(--nav-border);
7
+ display: flex;
8
+ flex-direction: column;
9
+ height: 100dvh;
10
+ padding: var(--space-4);
11
+ width: var(--nav-width);
12
+ }
13
+
14
+ .ds-nav__brand {
15
+ align-items: center;
16
+ color: var(--nav-brand-fg);
17
+ display: flex;
18
+ font-size: var(--nav-brand-size);
19
+ font-weight: var(--weight-semibold);
20
+ gap: var(--space-2-5);
21
+ letter-spacing: var(--type-heading-tracking);
22
+ min-height: var(--space-10);
23
+ padding-inline: var(--nav-item-padding-x);
24
+ text-decoration: none;
25
+ }
26
+
27
+ .ds-nav__brand-mark {
28
+ align-items: center;
29
+ background: var(--nav-brand-mark-bg);
30
+ border-radius: var(--radius-sm);
31
+ color: var(--nav-brand-mark-fg);
32
+ display: inline-flex;
33
+ height: var(--space-7);
34
+ justify-content: center;
35
+ width: var(--space-7);
36
+ }
37
+
38
+ .ds-nav__scroll {
39
+ flex: 1;
40
+ margin-block-start: var(--space-6);
41
+ overflow-y: auto;
42
+ scrollbar-color: var(--nav-scrollbar) transparent;
43
+ scrollbar-width: thin;
44
+ }
45
+
46
+ .ds-nav__group + .ds-nav__group {
47
+ margin-block-start: var(--space-6);
48
+ }
49
+
50
+ .ds-nav__group-label {
51
+ color: var(--nav-group-label-fg);
52
+ font-family: var(--font-body);
53
+ font-size: var(--nav-group-label-size);
54
+ font-weight: var(--type-overline-weight);
55
+ letter-spacing: var(--type-overline-tracking);
56
+ padding-inline: var(--nav-item-padding-x);
57
+ text-transform: uppercase;
58
+ }
59
+
60
+ .ds-nav__list {
61
+ display: grid;
62
+ gap: var(--space-0-5);
63
+ list-style: none;
64
+ margin-block-start: var(--space-2);
65
+ padding: 0;
66
+ }
67
+
68
+ .ds-nav__link,
69
+ .ds-nav__summary {
70
+ align-items: center;
71
+ border-radius: var(--nav-item-radius);
72
+ color: var(--nav-item-fg);
73
+ display: flex;
74
+ font-size: var(--text-sm);
75
+ gap: var(--nav-item-gap);
76
+ min-height: var(--nav-item-height);
77
+ padding: var(--space-1) var(--nav-item-padding-x);
78
+ text-decoration: none;
79
+ transition:
80
+ background-color var(--duration-fast) var(--ease-standard),
81
+ color var(--duration-fast) var(--ease-standard);
82
+ width: 100%;
83
+ }
84
+
85
+ .ds-nav__link:hover,
86
+ .ds-nav__summary:hover {
87
+ background: var(--nav-item-bg-hover);
88
+ color: var(--nav-item-fg-hover);
89
+ }
90
+
91
+ .ds-nav__link[aria-current="page"] {
92
+ background: var(--nav-item-bg-active);
93
+ color: var(--nav-item-fg-active);
94
+ font-weight: var(--weight-medium);
95
+ }
96
+
97
+ .ds-nav__link[aria-current="page"] .ds-nav__icon {
98
+ color: var(--nav-item-indicator);
99
+ }
100
+
101
+ .ds-nav__link:focus-visible,
102
+ .ds-nav__summary:focus-visible {
103
+ outline: var(--nav-focus-width) solid var(--nav-focus-color);
104
+ outline-offset: var(--nav-focus-offset);
105
+ }
106
+
107
+ .ds-nav__icon {
108
+ color: var(--nav-icon);
109
+ flex: none;
110
+ }
111
+
112
+ .ds-nav__summary[data-active="true"] {
113
+ color: var(--nav-item-fg-active);
114
+ font-weight: var(--weight-medium);
115
+ }
116
+
117
+ .ds-nav__summary[data-active="true"] .ds-nav__icon {
118
+ color: var(--nav-item-indicator);
119
+ }
120
+
121
+ .ds-nav__badge {
122
+ margin-inline-start: auto;
123
+ }
124
+
125
+ .ds-nav__summary {
126
+ cursor: pointer;
127
+ justify-content: flex-start;
128
+ list-style: none;
129
+ }
130
+
131
+ .ds-nav__summary::-webkit-details-marker {
132
+ display: none;
133
+ }
134
+
135
+ .ds-nav__summary .ds-nav__chevron {
136
+ margin-inline-start: auto;
137
+ transition: transform var(--duration-fast) var(--ease-standard);
138
+ }
139
+
140
+ .ds-nav__submenu[open] > .ds-nav__summary .ds-nav__chevron {
141
+ transform: rotate(90deg);
142
+ }
143
+
144
+ .ds-nav__submenu .ds-nav__list {
145
+ border-inline-start: 1px solid var(--nav-border);
146
+ margin-block-start: var(--space-1);
147
+ margin-inline-start: calc(var(--nav-item-padding-x) + var(--space-2));
148
+ padding-inline-start: var(--space-2);
149
+ }
150
+
151
+ .ds-nav__footer {
152
+ border-top: 1px solid var(--nav-border);
153
+ margin-block-start: var(--space-4);
154
+ padding-block-start: var(--space-4);
155
+ }
156
+
157
+ .ds-nav__mobilebar {
158
+ align-items: center;
159
+ background: var(--nav-mobilebar-bg);
160
+ border-bottom: 1px solid var(--nav-border);
161
+ display: none;
162
+ gap: var(--space-3);
163
+ justify-content: space-between;
164
+ min-height: var(--layout-header);
165
+ padding-inline: var(--space-4);
166
+ position: sticky;
167
+ top: 0;
168
+ z-index: var(--z-sticky);
169
+ }
170
+
171
+ .ds-nav__toggle {
172
+ align-items: center;
173
+ background: var(--nav-toggle-bg);
174
+ border: 1px solid var(--nav-toggle-border);
175
+ border-radius: var(--radius-sm);
176
+ color: var(--nav-toggle-fg);
177
+ display: inline-flex;
178
+ height: var(--space-10);
179
+ justify-content: center;
180
+ width: var(--space-10);
181
+ }
182
+
183
+ .ds-nav__toggle:focus-visible {
184
+ outline: var(--nav-focus-width) solid var(--nav-focus-color);
185
+ outline-offset: var(--nav-focus-offset);
186
+ }
187
+
188
+ .ds-nav__backdrop {
189
+ background: var(--nav-mobile-backdrop);
190
+ inset: 0;
191
+ opacity: 0;
192
+ position: fixed;
193
+ transition: opacity var(--duration-base) var(--ease-standard);
194
+ visibility: hidden;
195
+ z-index: var(--z-overlay);
196
+ }
197
+
198
+ @media (max-width: 900px) {
199
+ .ds-nav {
200
+ inset-block: 0;
201
+ inset-inline-start: 0;
202
+ position: fixed;
203
+ transform: translateX(-100%);
204
+ transition: transform var(--duration-base) var(--ease-standard);
205
+ z-index: var(--z-modal);
206
+ }
207
+
208
+ .ds-nav__mobilebar {
209
+ display: flex;
210
+ }
211
+
212
+ .ds-nav__backdrop {
213
+ display: block;
214
+ }
215
+
216
+ .ds-nav[data-open="true"] {
217
+ transform: none;
218
+ }
219
+
220
+ .ds-nav[data-open="true"] + .ds-nav__backdrop {
221
+ opacity: 1;
222
+ visibility: visible;
223
+ }
224
+ }
225
+
226
+ @media (prefers-reduced-motion: reduce) {
227
+ .ds-nav,
228
+ .ds-nav__backdrop {
229
+ transition: none;
230
+ }
231
+ }
232
+ }