aplance-ui 1.0.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 (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -0
  3. package/dist/api.d.ts +175 -0
  4. package/dist/api.js +1954 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/frameworks/astro/astro.config.snippet.md +23 -0
  7. package/dist/frameworks/astro/postcss.config.mjs.template +20 -0
  8. package/dist/frameworks/astro/vite-inline.snippet.md +22 -0
  9. package/dist/frameworks/electron-vite/vite.config.snippet.md +44 -0
  10. package/dist/frameworks/next/layout-import.snippet.md +19 -0
  11. package/dist/frameworks/next/next.config.snippet.md +15 -0
  12. package/dist/frameworks/next/postcss.config.js.template +16 -0
  13. package/dist/frameworks/tanstack-start/postcss.config.ts.template +17 -0
  14. package/dist/frameworks/tanstack-start/vite-inline.snippet.md +22 -0
  15. package/dist/frameworks/vite-react/postcss.config.ts.template +16 -0
  16. package/dist/frameworks/vite-react/vite-inline.snippet.md +20 -0
  17. package/dist/frameworks/vite-react/vite.config.ts.template +48 -0
  18. package/dist/index.js +2047 -0
  19. package/dist/index.js.map +1 -0
  20. package/package.json +63 -0
  21. package/registry/components/primitives/icon/icon.module.css +63 -0
  22. package/registry/components/primitives/icon/icon.tsx +53 -0
  23. package/registry/components/primitives/modal/modal-context.ts +19 -0
  24. package/registry/components/primitives/modal/modal.module.css +415 -0
  25. package/registry/components/primitives/modal/modal.tsx +550 -0
  26. package/registry/components/primitives/popover/popover-context.ts +28 -0
  27. package/registry/components/primitives/popover/popover.module.css +28 -0
  28. package/registry/components/primitives/popover/popover.tsx +465 -0
  29. package/registry/components/ui/accordion/accordion.module.css +208 -0
  30. package/registry/components/ui/accordion/accordion.tsx +327 -0
  31. package/registry/components/ui/avatar/avatar.module.css +32 -0
  32. package/registry/components/ui/avatar/avatar.tsx +37 -0
  33. package/registry/components/ui/badge/badge.module.css +103 -0
  34. package/registry/components/ui/badge/badge.tsx +29 -0
  35. package/registry/components/ui/button/button.module.css +216 -0
  36. package/registry/components/ui/button/button.tsx +133 -0
  37. package/registry/components/ui/chart/chart.module.css +168 -0
  38. package/registry/components/ui/chart/chart.tsx +1293 -0
  39. package/registry/components/ui/chart/types.ts +210 -0
  40. package/registry/components/ui/chart/utils.ts +59 -0
  41. package/registry/components/ui/copy-button/copy-button.module.css +21 -0
  42. package/registry/components/ui/copy-button/copy-button.tsx +123 -0
  43. package/registry/components/ui/countdown/countdown.module.css +5 -0
  44. package/registry/components/ui/countdown/countdown.tsx +152 -0
  45. package/registry/components/ui/data-table/checkbox-column.tsx +59 -0
  46. package/registry/components/ui/data-table/data-table.module.css +594 -0
  47. package/registry/components/ui/data-table/data-table.tsx +1109 -0
  48. package/registry/components/ui/data-table/filter-bar.tsx +33 -0
  49. package/registry/components/ui/data-table/pagination-bar.tsx +125 -0
  50. package/registry/components/ui/data-table/types.ts +594 -0
  51. package/registry/components/ui/data-table/useDataTable.tsx +573 -0
  52. package/registry/components/ui/data-table/utils.ts +445 -0
  53. package/registry/components/ui/empty-state/empty-state.module.css +26 -0
  54. package/registry/components/ui/empty-state/empty-state.tsx +32 -0
  55. package/registry/components/ui/input-fields/color-picker/color-palette.module.css +102 -0
  56. package/registry/components/ui/input-fields/color-picker/color-palette.tsx +92 -0
  57. package/registry/components/ui/input-fields/color-picker/color-picker.module.css +29 -0
  58. package/registry/components/ui/input-fields/color-picker/color-picker.tsx +168 -0
  59. package/registry/components/ui/input-fields/common/field-message/field-message.module.css +28 -0
  60. package/registry/components/ui/input-fields/common/field-message/field-message.tsx +39 -0
  61. package/registry/components/ui/input-fields/common/input-field-common.module.css +318 -0
  62. package/registry/components/ui/input-fields/common/input-field-native.module.css +267 -0
  63. package/registry/components/ui/input-fields/common/picker-popover-common.module.css +40 -0
  64. package/registry/components/ui/input-fields/common/select-button/select-button.module.css +9 -0
  65. package/registry/components/ui/input-fields/common/select-button/select-button.tsx +171 -0
  66. package/registry/components/ui/input-fields/common/types.ts +38 -0
  67. package/registry/components/ui/input-fields/custom-select/custom-select.module.css +56 -0
  68. package/registry/components/ui/input-fields/custom-select/custom-select.tsx +403 -0
  69. package/registry/components/ui/input-fields/date-picker/calendar.module.css +311 -0
  70. package/registry/components/ui/input-fields/date-picker/calendar.tsx +186 -0
  71. package/registry/components/ui/input-fields/date-picker/date-picker.module.css +57 -0
  72. package/registry/components/ui/input-fields/date-picker/date-picker.tsx +945 -0
  73. package/registry/components/ui/input-fields/date-picker/types.ts +102 -0
  74. package/registry/components/ui/input-fields/date-picker/utils.ts +236 -0
  75. package/registry/components/ui/input-fields/emoji-picker/emoji-palette.module.css +90 -0
  76. package/registry/components/ui/input-fields/emoji-picker/emoji-palette.tsx +168 -0
  77. package/registry/components/ui/input-fields/emoji-picker/emoji-picker.module.css +8 -0
  78. package/registry/components/ui/input-fields/emoji-picker/emoji-picker.tsx +102 -0
  79. package/registry/components/ui/input-fields/emoji-picker/utils.ts +505 -0
  80. package/registry/components/ui/input-fields/field-group/field-group.module.css +86 -0
  81. package/registry/components/ui/input-fields/field-group/field-group.tsx +86 -0
  82. package/registry/components/ui/input-fields/input/input.tsx +319 -0
  83. package/registry/components/ui/input-fields/media-input/kind-icons.tsx +62 -0
  84. package/registry/components/ui/input-fields/media-input/media-input.module.css +294 -0
  85. package/registry/components/ui/input-fields/media-input/media-input.tsx +327 -0
  86. package/registry/components/ui/input-fields/media-input/media-preview.tsx +101 -0
  87. package/registry/components/ui/input-fields/media-input/types.ts +129 -0
  88. package/registry/components/ui/input-fields/media-input/useMediaUpload.tsx +302 -0
  89. package/registry/components/ui/input-fields/media-input/utils.ts +325 -0
  90. package/registry/components/ui/input-fields/otp-input/otp-input.module.css +24 -0
  91. package/registry/components/ui/input-fields/otp-input/otp-input.tsx +291 -0
  92. package/registry/components/ui/input-fields/select/select.tsx +118 -0
  93. package/registry/components/ui/input-fields/switch/switch.module.css +70 -0
  94. package/registry/components/ui/input-fields/switch/switch.tsx +59 -0
  95. package/registry/components/ui/input-fields/textarea/textarea.tsx +133 -0
  96. package/registry/components/ui/input-fields/time-picker/time-picker.module.css +57 -0
  97. package/registry/components/ui/input-fields/time-picker/time-picker.tsx +437 -0
  98. package/registry/components/ui/loader/loader.module.css +156 -0
  99. package/registry/components/ui/loader/loader.tsx +102 -0
  100. package/registry/components/ui/stepper/stepper.module.css +294 -0
  101. package/registry/components/ui/stepper/stepper.tsx +197 -0
  102. package/registry/components/ui/tabs/tabs.module.css +150 -0
  103. package/registry/components/ui/tabs/tabs.tsx +134 -0
  104. package/registry/components/ui/toast/toast.module.css +159 -0
  105. package/registry/components/ui/toast/toast.tsx +104 -0
  106. package/registry/components/ui/tooltip/tooltip.module.css +82 -0
  107. package/registry/components/ui/tooltip/tooltip.tsx +72 -0
  108. package/registry/global.d.ts +4 -0
  109. package/registry/hooks/useFocusOutside.tsx +33 -0
  110. package/registry/hooks/useResizeObserver.tsx +32 -0
  111. package/registry/lib/dom.ts +25 -0
  112. package/registry/lib/string.ts +23 -0
  113. package/registry/registry.json +719 -0
  114. package/registry/styles/app.css +240 -0
  115. package/registry/styles/components.css +78 -0
  116. package/registry/styles/fonts/geist-regular.woff2 +0 -0
  117. package/registry/styles/globals.css +7 -0
  118. package/registry/styles/media.css +25 -0
  119. package/registry/styles/utilities.css +90 -0
  120. package/registry/themes/colors/blue.css +37 -0
  121. package/registry/themes/colors/green.css +37 -0
  122. package/registry/themes/colors/rose.css +37 -0
  123. package/registry/themes/colors/slate.css +37 -0
  124. package/registry/themes/colors/stone.css +37 -0
  125. package/registry/themes/colors/violet.css +37 -0
  126. package/registry/themes/colors/zinc.css +37 -0
  127. package/registry/themes/radius/pill.css +8 -0
  128. package/registry/themes/radius/rounded.css +8 -0
  129. package/registry/themes/radius/sharp.css +8 -0
  130. package/registry/themes/spacing/compact.css +17 -0
  131. package/registry/themes/spacing/spacious.css +17 -0
  132. package/registry/tsconfig.json +25 -0
@@ -0,0 +1,415 @@
1
+ /* ─── Overlay ────────────────────────────────────────────────────────────────
2
+ Full-screen backdrop + flex positioning container.
3
+ Placement is driven by `data-placement` / `data-mobile-placement` on the
4
+ overlay and content so one prop contract controls both desktop and mobile.
5
+ ─────────────────────────────────────────────────────────────────────────── */
6
+
7
+ .overlay {
8
+ position: fixed;
9
+ inset: 0;
10
+ background-color: var(--color-overlay);
11
+ backdrop-filter: blur(var(--blur-sm));
12
+ -webkit-backdrop-filter: blur(var(--blur-sm));
13
+ z-index: var(--z-index-modal);
14
+ display: flex;
15
+ padding: var(--spacing-6);
16
+ /* Keep overflow locked by default to avoid transient scrollbars while
17
+ placement animations run. For scrollBehavior="outside", we opt in to
18
+ vertical scrolling with a data attribute below. */
19
+ overflow: hidden;
20
+ overscroll-behavior: contain;
21
+ opacity: 0;
22
+ transition: opacity var(--modal-animation-duration) var(--ease-in-out);
23
+
24
+ &[data-state='open'] {
25
+ opacity: 1;
26
+ }
27
+
28
+ &[data-scroll-behavior='outside'] {
29
+ overflow-x: hidden;
30
+ overflow-y: auto;
31
+ }
32
+
33
+ /* ─── Placement (overlay alignment) ──────────────────────────────────── */
34
+ &[data-placement='center'] {
35
+ align-items: center;
36
+ justify-content: center;
37
+ }
38
+ &[data-placement='top'] {
39
+ align-items: flex-start;
40
+ justify-content: center;
41
+ padding: 0;
42
+ }
43
+ &[data-placement='bottom'] {
44
+ align-items: flex-end;
45
+ justify-content: center;
46
+ padding: 0;
47
+ }
48
+ &[data-placement='left'] {
49
+ align-items: stretch;
50
+ justify-content: flex-start;
51
+ padding: 0;
52
+ }
53
+ &[data-placement='right'] {
54
+ align-items: stretch;
55
+ justify-content: flex-end;
56
+ padding: 0;
57
+ }
58
+ &[data-placement='full'] {
59
+ align-items: stretch;
60
+ justify-content: flex-start;
61
+ padding: 0;
62
+ }
63
+ }
64
+
65
+ /* ─── Content (dialog panel) ─────────────────────────────────────────────── */
66
+
67
+ .content {
68
+ background-color: var(--color-background);
69
+ color: var(--color-foreground);
70
+ border-radius: var(--radius-lg);
71
+ border: var(--border-1) solid var(--color-border);
72
+ box-shadow: var(--shadow-lg);
73
+ width: 100%;
74
+ position: relative;
75
+ overflow: hidden;
76
+ outline: none;
77
+
78
+ /* Placement-specific panel shape. Selectors target the content node's
79
+ own data-placement so sizes/radii stay in sync with overlay alignment. */
80
+ &[data-placement='bottom'] {
81
+ border-bottom-left-radius: 0;
82
+ border-bottom-right-radius: 0;
83
+ max-width: 100%;
84
+ }
85
+ &[data-placement='top'] {
86
+ border-top-left-radius: 0;
87
+ border-top-right-radius: 0;
88
+ max-width: 100%;
89
+ }
90
+ &[data-placement='left'],
91
+ &[data-placement='right'] {
92
+ height: 100%;
93
+ min-height: 100dvh;
94
+ border-radius: 0;
95
+ max-width: min(28rem, 100%);
96
+ }
97
+ &[data-placement='left'] {
98
+ border-right: var(--border-1) solid var(--color-border);
99
+ }
100
+ &[data-placement='right'] {
101
+ border-left: var(--border-1) solid var(--color-border);
102
+ }
103
+ &[data-placement='full'] {
104
+ max-width: 100%;
105
+ width: 100%;
106
+ height: 100%;
107
+ min-height: 100dvh;
108
+ border-radius: 0;
109
+ }
110
+ }
111
+
112
+ /* scrollBehavior="inside": body scrolls, header/footer stay pinned */
113
+ .scroll_inside {
114
+ display: flex;
115
+ flex-direction: column;
116
+ max-height: calc(100dvh - 2 * var(--spacing-6));
117
+
118
+ /* Edge placements fill the viewport - inside-scroll should reach the edges */
119
+ &[data-placement='bottom'],
120
+ &[data-placement='top'],
121
+ &[data-placement='left'],
122
+ &[data-placement='right'],
123
+ &[data-placement='full'] {
124
+ max-height: 100dvh;
125
+ }
126
+
127
+ .body {
128
+ overflow-y: auto;
129
+ overscroll-behavior: contain;
130
+ flex: 1 1 auto;
131
+ }
132
+ }
133
+
134
+ /* ─── Sizes (primarily for centered dialogs) ─────────────────────────────── */
135
+ /* Edge-attached placements (top/bottom/full) override width to fill. */
136
+ /* Left/right drawers use their own width cap above. */
137
+
138
+ .size_sm {
139
+ max-width: 24rem;
140
+ }
141
+ .size_md {
142
+ max-width: 32rem;
143
+ }
144
+ .size_lg {
145
+ max-width: 48rem;
146
+ }
147
+ .size_xl {
148
+ max-width: 64rem;
149
+ }
150
+ .size_full {
151
+ max-width: 100%;
152
+ min-height: 100%;
153
+ border-radius: 0;
154
+ }
155
+
156
+ /* ─── Animations ─────────────────────────────────────────────────────────── */
157
+
158
+ .anim_scale {
159
+ opacity: 0;
160
+ transform: scale(0.95);
161
+ transition:
162
+ opacity var(--modal-animation-duration) var(--ease-in-out),
163
+ transform var(--modal-animation-duration) var(--ease-in-out);
164
+
165
+ &[data-state='open'] {
166
+ opacity: 1;
167
+ transform: scale(1);
168
+ }
169
+ }
170
+
171
+ .anim_fade {
172
+ opacity: 0;
173
+ transition: opacity var(--modal-animation-duration) var(--ease-in-out);
174
+
175
+ &[data-state='open'] {
176
+ opacity: 1;
177
+ }
178
+ }
179
+
180
+ /* slide-{edge}: enters from that edge. Pair with `placement` of the same
181
+ name for the natural sheet/drawer motion. */
182
+ .anim_slide-bottom {
183
+ opacity: 0;
184
+ transform: translateY(16px);
185
+ transition:
186
+ opacity var(--modal-animation-duration) var(--ease-in-out),
187
+ transform var(--modal-animation-duration) var(--ease-in-out);
188
+
189
+ &[data-state='open'] {
190
+ opacity: 1;
191
+ transform: translateY(0);
192
+ }
193
+ }
194
+
195
+ .anim_slide-top {
196
+ opacity: 0;
197
+ transform: translateY(-16px);
198
+ transition:
199
+ opacity var(--modal-animation-duration) var(--ease-in-out),
200
+ transform var(--modal-animation-duration) var(--ease-in-out);
201
+
202
+ &[data-state='open'] {
203
+ opacity: 1;
204
+ transform: translateY(0);
205
+ }
206
+ }
207
+
208
+ .anim_slide-left {
209
+ opacity: 0;
210
+ transform: translateX(-16px);
211
+ transition:
212
+ opacity var(--modal-animation-duration) var(--ease-in-out),
213
+ transform var(--modal-animation-duration) var(--ease-in-out);
214
+
215
+ &[data-state='open'] {
216
+ opacity: 1;
217
+ transform: translateX(0);
218
+ }
219
+ }
220
+
221
+ .anim_slide-right {
222
+ opacity: 0;
223
+ transform: translateX(16px);
224
+ transition:
225
+ opacity var(--modal-animation-duration) var(--ease-in-out),
226
+ transform var(--modal-animation-duration) var(--ease-in-out);
227
+
228
+ &[data-state='open'] {
229
+ opacity: 1;
230
+ transform: translateX(0);
231
+ }
232
+ }
233
+
234
+ .anim_none {
235
+ opacity: 1;
236
+ transform: none;
237
+ transition: none;
238
+ }
239
+
240
+ /* ─── Header ─────────────────────────────────────────────────────────────── */
241
+
242
+ .header {
243
+ padding: var(--spacing-6);
244
+ display: flex;
245
+ align-items: flex-start;
246
+ justify-content: space-between;
247
+ gap: var(--spacing-6);
248
+ flex-shrink: 0;
249
+ }
250
+
251
+ /* title + description stack */
252
+ .header_content {
253
+ display: flex;
254
+ flex-direction: column;
255
+ gap: var(--spacing-3);
256
+ flex: 1;
257
+ min-width: 0;
258
+ padding-top: var(--spacing-3);
259
+ }
260
+
261
+ /* Close button sits inline at the end of the header row - no absolute needed */
262
+ .close_button {
263
+ flex-shrink: 0;
264
+ }
265
+
266
+ .title {
267
+ font-size: var(--font-size-base);
268
+ font-weight: var(--font-weight-semibold);
269
+ line-height: var(--line-height-md);
270
+ color: var(--color-foreground);
271
+ }
272
+
273
+ .description {
274
+ font-size: var(--font-size-sm);
275
+ color: var(--color-muted-foreground);
276
+ line-height: 1.5;
277
+ }
278
+
279
+ /* ─── Body ───────────────────────────────────────────────────────────────── */
280
+
281
+ .body {
282
+ padding: var(--spacing-6);
283
+ font-size: var(--font-size-base);
284
+ line-height: 1.6;
285
+ }
286
+
287
+ /* ─── Footer ─────────────────────────────────────────────────────────────── */
288
+
289
+ .footer {
290
+ padding: var(--spacing-6);
291
+ display: flex;
292
+ justify-content: flex-end;
293
+ gap: var(--spacing-4);
294
+ flex-shrink: 0;
295
+ flex-wrap: wrap;
296
+ }
297
+
298
+ /* ─── Divider ────────────────────────────────────────────────────────────── */
299
+
300
+ .divider {
301
+ border: none;
302
+ border-top: var(--border-1) solid var(--color-border);
303
+ margin: 0;
304
+ }
305
+
306
+ /* ─── Responsive: mobilePlacement takes over below --md ──────────────────── */
307
+ /* The mobile override copies each placement's rules but reads from
308
+ data-mobile-placement. Kept co-located with the desktop rules above so
309
+ one contract drives both axes. */
310
+
311
+ @media (--md) {
312
+ .overlay[data-mobile-placement='center'] {
313
+ align-items: center;
314
+ justify-content: center;
315
+ padding: var(--spacing-6);
316
+ }
317
+ .overlay[data-mobile-placement='top'] {
318
+ align-items: flex-start;
319
+ justify-content: center;
320
+ padding: 0;
321
+ }
322
+ .overlay[data-mobile-placement='bottom'] {
323
+ align-items: flex-end;
324
+ justify-content: center;
325
+ padding: 0;
326
+ }
327
+ .overlay[data-mobile-placement='left'] {
328
+ align-items: stretch;
329
+ justify-content: flex-start;
330
+ padding: 0;
331
+ }
332
+ .overlay[data-mobile-placement='right'] {
333
+ align-items: stretch;
334
+ justify-content: flex-end;
335
+ padding: 0;
336
+ }
337
+ .overlay[data-mobile-placement='full'] {
338
+ align-items: stretch;
339
+ justify-content: flex-start;
340
+ padding: 0;
341
+ }
342
+
343
+ /* Panel shapes per mobile placement */
344
+ .content[data-mobile-placement='center'] {
345
+ border-radius: var(--radius-lg);
346
+ max-width: 100%;
347
+ height: auto;
348
+ min-height: 0;
349
+ }
350
+ .content[data-mobile-placement='bottom'] {
351
+ border-bottom-left-radius: 0;
352
+ border-bottom-right-radius: 0;
353
+ border-top-left-radius: var(--radius-lg);
354
+ border-top-right-radius: var(--radius-lg);
355
+ max-width: 100%;
356
+ width: 100%;
357
+ height: auto;
358
+ min-height: 0;
359
+ }
360
+ .content[data-mobile-placement='top'] {
361
+ border-top-left-radius: 0;
362
+ border-top-right-radius: 0;
363
+ max-width: 100%;
364
+ width: 100%;
365
+ height: auto;
366
+ min-height: 0;
367
+ }
368
+ .content[data-mobile-placement='left'],
369
+ .content[data-mobile-placement='right'] {
370
+ height: 100%;
371
+ min-height: 100dvh;
372
+ border-radius: 0;
373
+ max-width: min(20rem, 85%);
374
+ }
375
+ .content[data-mobile-placement='full'] {
376
+ max-width: 100%;
377
+ width: 100%;
378
+ height: 100%;
379
+ min-height: 100dvh;
380
+ border-radius: 0;
381
+ }
382
+
383
+ /* Scroll-inside extent follows the mobile placement, not the desktop one */
384
+ .scroll_inside[data-mobile-placement='center'] {
385
+ max-height: calc(100dvh - 2 * var(--spacing-6));
386
+ }
387
+ .scroll_inside[data-mobile-placement='bottom'],
388
+ .scroll_inside[data-mobile-placement='top'],
389
+ .scroll_inside[data-mobile-placement='left'],
390
+ .scroll_inside[data-mobile-placement='right'],
391
+ .scroll_inside[data-mobile-placement='full'] {
392
+ max-height: 100dvh;
393
+ }
394
+
395
+ }
396
+
397
+ @media (--motion-reduce) {
398
+ .overlay,
399
+ .anim_scale,
400
+ .anim_fade,
401
+ .anim_slide-top,
402
+ .anim_slide-bottom,
403
+ .anim_slide-left,
404
+ .anim_slide-right {
405
+ transition: none;
406
+ }
407
+
408
+ .anim_scale,
409
+ .anim_slide-top,
410
+ .anim_slide-bottom,
411
+ .anim_slide-left,
412
+ .anim_slide-right {
413
+ transform: none;
414
+ }
415
+ }