premium-ds 0.1.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 (257) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +113 -0
  3. package/dist/alert.d.ts +31 -0
  4. package/dist/alert.js +6 -0
  5. package/dist/alert.js.map +1 -0
  6. package/dist/avatar-group.d.ts +13 -0
  7. package/dist/avatar-group.js +3 -0
  8. package/dist/avatar-group.js.map +1 -0
  9. package/dist/avatar.d.ts +25 -0
  10. package/dist/avatar.js +3 -0
  11. package/dist/avatar.js.map +1 -0
  12. package/dist/badge.d.ts +23 -0
  13. package/dist/badge.js +3 -0
  14. package/dist/badge.js.map +1 -0
  15. package/dist/button.d.ts +20 -0
  16. package/dist/button.js +3 -0
  17. package/dist/button.js.map +1 -0
  18. package/dist/checkbox.d.ts +25 -0
  19. package/dist/checkbox.js +3 -0
  20. package/dist/checkbox.js.map +1 -0
  21. package/dist/chunk-2OWHZ4JT.js +36 -0
  22. package/dist/chunk-2OWHZ4JT.js.map +1 -0
  23. package/dist/chunk-34SIXSYL.js +64 -0
  24. package/dist/chunk-34SIXSYL.js.map +1 -0
  25. package/dist/chunk-37O2ZXD6.js +55 -0
  26. package/dist/chunk-37O2ZXD6.js.map +1 -0
  27. package/dist/chunk-4AZL76UJ.js +89 -0
  28. package/dist/chunk-4AZL76UJ.js.map +1 -0
  29. package/dist/chunk-4HSCN5TZ.js +86 -0
  30. package/dist/chunk-4HSCN5TZ.js.map +1 -0
  31. package/dist/chunk-5DDOOT33.js +258 -0
  32. package/dist/chunk-5DDOOT33.js.map +1 -0
  33. package/dist/chunk-5FVHWIMY.js +117 -0
  34. package/dist/chunk-5FVHWIMY.js.map +1 -0
  35. package/dist/chunk-5K6KRJGX.js +147 -0
  36. package/dist/chunk-5K6KRJGX.js.map +1 -0
  37. package/dist/chunk-5PQMQBQC.js +74 -0
  38. package/dist/chunk-5PQMQBQC.js.map +1 -0
  39. package/dist/chunk-7OCTVQ7C.js +95 -0
  40. package/dist/chunk-7OCTVQ7C.js.map +1 -0
  41. package/dist/chunk-7OPMOET7.js +39 -0
  42. package/dist/chunk-7OPMOET7.js.map +1 -0
  43. package/dist/chunk-BXXS7YRC.js +270 -0
  44. package/dist/chunk-BXXS7YRC.js.map +1 -0
  45. package/dist/chunk-CV2Q4YXX.js +272 -0
  46. package/dist/chunk-CV2Q4YXX.js.map +1 -0
  47. package/dist/chunk-EIMMDWIW.js +282 -0
  48. package/dist/chunk-EIMMDWIW.js.map +1 -0
  49. package/dist/chunk-EZ2CWTBE.js +230 -0
  50. package/dist/chunk-EZ2CWTBE.js.map +1 -0
  51. package/dist/chunk-FGHDG3Y4.js +89 -0
  52. package/dist/chunk-FGHDG3Y4.js.map +1 -0
  53. package/dist/chunk-FPP2XLKX.js +127 -0
  54. package/dist/chunk-FPP2XLKX.js.map +1 -0
  55. package/dist/chunk-G6OY35DI.js +295 -0
  56. package/dist/chunk-G6OY35DI.js.map +1 -0
  57. package/dist/chunk-H6KWJNOE.js +65 -0
  58. package/dist/chunk-H6KWJNOE.js.map +1 -0
  59. package/dist/chunk-HGILYGY3.js +45 -0
  60. package/dist/chunk-HGILYGY3.js.map +1 -0
  61. package/dist/chunk-I3BCB4Z5.js +88 -0
  62. package/dist/chunk-I3BCB4Z5.js.map +1 -0
  63. package/dist/chunk-KBWNUUWM.js +582 -0
  64. package/dist/chunk-KBWNUUWM.js.map +1 -0
  65. package/dist/chunk-KN7JFAZ6.js +113 -0
  66. package/dist/chunk-KN7JFAZ6.js.map +1 -0
  67. package/dist/chunk-MEF7PI6U.js +16 -0
  68. package/dist/chunk-MEF7PI6U.js.map +1 -0
  69. package/dist/chunk-NKGMQL6I.js +310 -0
  70. package/dist/chunk-NKGMQL6I.js.map +1 -0
  71. package/dist/chunk-NMFQRGLL.js +127 -0
  72. package/dist/chunk-NMFQRGLL.js.map +1 -0
  73. package/dist/chunk-OUBWD6CX.js +433 -0
  74. package/dist/chunk-OUBWD6CX.js.map +1 -0
  75. package/dist/chunk-PFNXVBLU.js +96 -0
  76. package/dist/chunk-PFNXVBLU.js.map +1 -0
  77. package/dist/chunk-PUPZ4HME.js +165 -0
  78. package/dist/chunk-PUPZ4HME.js.map +1 -0
  79. package/dist/chunk-QFS52OK5.js +690 -0
  80. package/dist/chunk-QFS52OK5.js.map +1 -0
  81. package/dist/chunk-QNC6O3PG.js +45 -0
  82. package/dist/chunk-QNC6O3PG.js.map +1 -0
  83. package/dist/chunk-QUHOXWBK.js +82 -0
  84. package/dist/chunk-QUHOXWBK.js.map +1 -0
  85. package/dist/chunk-UIQGSTBJ.js +106 -0
  86. package/dist/chunk-UIQGSTBJ.js.map +1 -0
  87. package/dist/chunk-UJQKVP6V.js +193 -0
  88. package/dist/chunk-UJQKVP6V.js.map +1 -0
  89. package/dist/chunk-VVPGEAC6.js +11 -0
  90. package/dist/chunk-VVPGEAC6.js.map +1 -0
  91. package/dist/chunk-XA3T5KWA.js +58 -0
  92. package/dist/chunk-XA3T5KWA.js.map +1 -0
  93. package/dist/chunk-YSHJHSJM.js +19 -0
  94. package/dist/chunk-YSHJHSJM.js.map +1 -0
  95. package/dist/chunk-YVHOAVSM.js +182 -0
  96. package/dist/chunk-YVHOAVSM.js.map +1 -0
  97. package/dist/collapse.d.ts +16 -0
  98. package/dist/collapse.js +3 -0
  99. package/dist/collapse.js.map +1 -0
  100. package/dist/count-badge.d.ts +11 -0
  101. package/dist/count-badge.js +4 -0
  102. package/dist/count-badge.js.map +1 -0
  103. package/dist/date-field.d.ts +39 -0
  104. package/dist/date-field.js +8 -0
  105. package/dist/date-field.js.map +1 -0
  106. package/dist/date-range-field.d.ts +30 -0
  107. package/dist/date-range-field.js +8 -0
  108. package/dist/date-range-field.js.map +1 -0
  109. package/dist/datetime-field.d.ts +28 -0
  110. package/dist/datetime-field.js +10 -0
  111. package/dist/datetime-field.js.map +1 -0
  112. package/dist/dialog.d.ts +26 -0
  113. package/dist/dialog.js +7 -0
  114. package/dist/dialog.js.map +1 -0
  115. package/dist/index.d.ts +35 -0
  116. package/dist/index.js +40 -0
  117. package/dist/index.js.map +1 -0
  118. package/dist/motion-tokens.d.ts +29 -0
  119. package/dist/motion-tokens.js +3 -0
  120. package/dist/motion-tokens.js.map +1 -0
  121. package/dist/multi-select.d.ts +25 -0
  122. package/dist/multi-select.js +7 -0
  123. package/dist/multi-select.js.map +1 -0
  124. package/dist/number-field.d.ts +24 -0
  125. package/dist/number-field.js +4 -0
  126. package/dist/number-field.js.map +1 -0
  127. package/dist/otp-field.d.ts +20 -0
  128. package/dist/otp-field.js +3 -0
  129. package/dist/otp-field.js.map +1 -0
  130. package/dist/overlay.d.ts +31 -0
  131. package/dist/overlay.js +4 -0
  132. package/dist/overlay.js.map +1 -0
  133. package/dist/pagination.d.ts +24 -0
  134. package/dist/pagination.js +5 -0
  135. package/dist/pagination.js.map +1 -0
  136. package/dist/radio-group.d.ts +46 -0
  137. package/dist/radio-group.js +6 -0
  138. package/dist/radio-group.js.map +1 -0
  139. package/dist/select-core-SAyS-8w0.d.ts +16 -0
  140. package/dist/select.d.ts +27 -0
  141. package/dist/select.js +7 -0
  142. package/dist/select.js.map +1 -0
  143. package/dist/status-badge.d.ts +17 -0
  144. package/dist/status-badge.js +5 -0
  145. package/dist/status-badge.js.map +1 -0
  146. package/dist/table.d.ts +65 -0
  147. package/dist/table.js +5 -0
  148. package/dist/table.js.map +1 -0
  149. package/dist/tabs.d.ts +44 -0
  150. package/dist/tabs.js +5 -0
  151. package/dist/tabs.js.map +1 -0
  152. package/dist/tag.d.ts +28 -0
  153. package/dist/tag.js +5 -0
  154. package/dist/tag.js.map +1 -0
  155. package/dist/text-field.d.ts +30 -0
  156. package/dist/text-field.js +6 -0
  157. package/dist/text-field.js.map +1 -0
  158. package/dist/textarea.d.ts +33 -0
  159. package/dist/textarea.js +5 -0
  160. package/dist/textarea.js.map +1 -0
  161. package/dist/time-field.d.ts +27 -0
  162. package/dist/time-field.js +6 -0
  163. package/dist/time-field.js.map +1 -0
  164. package/dist/toast-store.d.ts +75 -0
  165. package/dist/toast-store.js +3 -0
  166. package/dist/toast-store.js.map +1 -0
  167. package/dist/toast.d.ts +3 -0
  168. package/dist/toast.js +6 -0
  169. package/dist/toast.js.map +1 -0
  170. package/dist/toggle-tag.d.ts +24 -0
  171. package/dist/toggle-tag.js +4 -0
  172. package/dist/toggle-tag.js.map +1 -0
  173. package/dist/toggle.d.ts +21 -0
  174. package/dist/toggle.js +3 -0
  175. package/dist/toggle.js.map +1 -0
  176. package/dist/tooltip.d.ts +27 -0
  177. package/dist/tooltip.js +4 -0
  178. package/dist/tooltip.js.map +1 -0
  179. package/llms.txt +165 -0
  180. package/package.json +205 -0
  181. package/src/components/alert/Alert.tsx +118 -0
  182. package/src/components/alert/alert.css +136 -0
  183. package/src/components/avatar/Avatar.tsx +128 -0
  184. package/src/components/avatar/AvatarGroup.tsx +50 -0
  185. package/src/components/avatar/avatar.css +200 -0
  186. package/src/components/badge/Badge.tsx +66 -0
  187. package/src/components/badge/CountBadge.tsx +46 -0
  188. package/src/components/badge/StatusBadge.tsx +132 -0
  189. package/src/components/badge/badge.css +243 -0
  190. package/src/components/button/Button.tsx +68 -0
  191. package/src/components/button/button.css +222 -0
  192. package/src/components/checkbox/Checkbox.tsx +90 -0
  193. package/src/components/checkbox/checkbox.css +179 -0
  194. package/src/components/date-picker/DateField.tsx +362 -0
  195. package/src/components/date-picker/DateRangeField.tsx +533 -0
  196. package/src/components/date-picker/DateTimeField.tsx +177 -0
  197. package/src/components/date-picker/TimeField.tsx +100 -0
  198. package/src/components/date-picker/date-picker.css +591 -0
  199. package/src/components/date-picker/date-utils.ts +55 -0
  200. package/src/components/date-picker/field-shell.tsx +78 -0
  201. package/src/components/date-picker/glide-pill.tsx +81 -0
  202. package/src/components/date-picker/time-core.tsx +305 -0
  203. package/src/components/dialog/Dialog.tsx +181 -0
  204. package/src/components/dialog/dialog.css +170 -0
  205. package/src/components/glass/glass.css +100 -0
  206. package/src/components/icon/Icon.tsx +76 -0
  207. package/src/components/icon/IconSlot.tsx +11 -0
  208. package/src/components/icon/icon.css +33 -0
  209. package/src/components/input/NumberField.tsx +117 -0
  210. package/src/components/input/OtpField.tsx +118 -0
  211. package/src/components/input/TextField.tsx +123 -0
  212. package/src/components/input/input.css +335 -0
  213. package/src/components/motion/Collapse.tsx +33 -0
  214. package/src/components/motion/collapse.css +41 -0
  215. package/src/components/overlay/Overlay.tsx +239 -0
  216. package/src/components/overlay/overlay-core.tsx +565 -0
  217. package/src/components/overlay/overlay.css +119 -0
  218. package/src/components/overlay/sheet-drag.tsx +146 -0
  219. package/src/components/pagination/Pagination.tsx +140 -0
  220. package/src/components/pagination/pagination.css +48 -0
  221. package/src/components/radio-group/RadioGroup.tsx +182 -0
  222. package/src/components/radio-group/radio-group.css +277 -0
  223. package/src/components/select/MultiSelect.tsx +251 -0
  224. package/src/components/select/Select.tsx +235 -0
  225. package/src/components/select/select-core.tsx +417 -0
  226. package/src/components/select/select.css +386 -0
  227. package/src/components/table/Table.tsx +433 -0
  228. package/src/components/table/table.css +348 -0
  229. package/src/components/tabs/Tabs.tsx +371 -0
  230. package/src/components/tabs/tabs.css +228 -0
  231. package/src/components/tag/Tag.tsx +145 -0
  232. package/src/components/tag/ToggleTag.tsx +125 -0
  233. package/src/components/tag/tag.css +248 -0
  234. package/src/components/textarea/Textarea.tsx +197 -0
  235. package/src/components/textarea/textarea.css +219 -0
  236. package/src/components/toast/Toast.tsx +349 -0
  237. package/src/components/toast/toast-store.ts +266 -0
  238. package/src/components/toast/toast.css +233 -0
  239. package/src/components/toggle/Toggle.tsx +94 -0
  240. package/src/components/toggle/toggle.css +152 -0
  241. package/src/components/tooltip/Tooltip.tsx +365 -0
  242. package/src/components/tooltip/tooltip.css +86 -0
  243. package/src/index.ts +42 -0
  244. package/src/styles.css +39 -0
  245. package/src/tokens/avatar.css +20 -0
  246. package/src/tokens/color.css +56 -0
  247. package/src/tokens/elevation.css +20 -0
  248. package/src/tokens/fonts.css +3 -0
  249. package/src/tokens/glass.css +21 -0
  250. package/src/tokens/icons.css +7 -0
  251. package/src/tokens/layers.css +6 -0
  252. package/src/tokens/motion-tokens.ts +72 -0
  253. package/src/tokens/motion.css +49 -0
  254. package/src/tokens/radius.css +11 -0
  255. package/src/tokens/semantic.css +75 -0
  256. package/src/tokens/spacing.css +26 -0
  257. package/src/tokens/typography.css +54 -0
@@ -0,0 +1,33 @@
1
+ import * as React from 'react';
2
+
3
+ interface TextareaProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'size' | 'rows' | 'onSubmit'> {
4
+ id?: string;
5
+ /** Label text (sentence case). */
6
+ label?: React.ReactNode;
7
+ required?: boolean;
8
+ optional?: boolean;
9
+ /** Neutral helper - shown when there's no validation message. */
10
+ helper?: React.ReactNode;
11
+ /** Sets the matching state (border + icon + colour). error wins over warning/success/helper. */
12
+ error?: React.ReactNode;
13
+ warning?: React.ReactNode;
14
+ success?: React.ReactNode;
15
+ value?: string;
16
+ onChange?: React.ChangeEventHandler<HTMLTextAreaElement>;
17
+ /** Fired on ⌘/Ctrl+Enter with the current text. */
18
+ onSubmit?: (value: string) => void;
19
+ /** Soft char limit: shows the meter + over-limit highlight. Does NOT truncate (use native maxLength for a hard stop). */
20
+ max?: number;
21
+ /** Visible rows before growing (default 3) and the cap before it scrolls (default 10). */
22
+ minRows?: number;
23
+ maxRows?: number;
24
+ /** Remaining-chars threshold that flips the meter amber. Default 20. */
25
+ warnAt?: number;
26
+ /** Footer hint, left of the meter - e.g. a ⌘↵ affordance. */
27
+ hint?: React.ReactNode;
28
+ /** md (default) - lg (prominent composer). */
29
+ size?: 'md' | 'lg';
30
+ }
31
+ declare function Textarea({ id, label, required, optional, placeholder, helper, error, warning, success, value, onChange, onSubmit, max, minRows, maxRows, warnAt, hint, size, disabled, readOnly, className, ...rest }: TextareaProps): React.JSX.Element;
32
+
33
+ export { Textarea, type TextareaProps };
@@ -0,0 +1,5 @@
1
+ 'use client';export { Textarea } from './chunk-5K6KRJGX.js';
2
+ import './chunk-KBWNUUWM.js';
3
+ import './chunk-YSHJHSJM.js';
4
+ //# sourceMappingURL=textarea.js.map
5
+ //# sourceMappingURL=textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"textarea.js"}
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+
3
+ interface TimeFieldProps {
4
+ /** Controlled value, canonical 'HH:mm' (24h). */
5
+ value?: string | null;
6
+ defaultValue?: string | null;
7
+ /** Fires live - the instant both segments exist. */
8
+ onChange?: (value: string) => void;
9
+ label?: string;
10
+ /** Display only; storage stays 24h. Default '24h'. */
11
+ format?: '24h' | '12h';
12
+ /** ↑/↓ step granularity in minutes (typing is exact). Default 5. */
13
+ minuteStep?: number;
14
+ /** Lower bound 'HH:mm' - saturates, never errors. */
15
+ min?: string;
16
+ /** Upper bound 'HH:mm' - saturates, never errors. */
17
+ max?: string;
18
+ required?: boolean;
19
+ invalid?: boolean;
20
+ message?: string;
21
+ disabled?: boolean;
22
+ className?: string;
23
+ }
24
+ declare function TimeField({ value, // controlled: 'HH:mm' | null
25
+ defaultValue, onChange, label, format, minuteStep, min, max, required, invalid, message, disabled, className, }: TimeFieldProps): React.JSX.Element;
26
+
27
+ export { TimeField, type TimeFieldProps };
@@ -0,0 +1,6 @@
1
+ 'use client';export { TimeField } from './chunk-34SIXSYL.js';
2
+ import './chunk-5DDOOT33.js';
3
+ import './chunk-QNC6O3PG.js';
4
+ import './chunk-KBWNUUWM.js';
5
+ //# sourceMappingURL=time-field.js.map
6
+ //# sourceMappingURL=time-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"time-field.js"}
@@ -0,0 +1,75 @@
1
+ type ToastTone = 'default' | 'success' | 'error' | 'warning' | 'info' | 'loading' | 'custom';
2
+ interface ToastAction {
3
+ label: string;
4
+ onClick: () => void;
5
+ }
6
+ interface ToastOptions {
7
+ id?: string | number;
8
+ duration?: number;
9
+ description?: string | null;
10
+ action?: ToastAction | null;
11
+ }
12
+ interface ToastRecord {
13
+ id: string;
14
+ tone: ToastTone;
15
+ message: string | null;
16
+ description: string | null;
17
+ action: ToastAction | null;
18
+ duration: number;
19
+ remaining: number;
20
+ count: number;
21
+ timerKey: number;
22
+ node: unknown;
23
+ dismissible: boolean;
24
+ expiresAt?: number;
25
+ }
26
+ interface ToastSnapshot {
27
+ toasts: ToastRecord[];
28
+ paused: boolean;
29
+ expanded: boolean;
30
+ }
31
+ interface ToastStore {
32
+ toasts: ToastRecord[];
33
+ paused: boolean;
34
+ expanded: boolean;
35
+ host: null | (() => void);
36
+ snap: ToastSnapshot;
37
+ listeners: Set<() => void>;
38
+ subscribe(l: () => void): () => void;
39
+ get(): ToastSnapshot;
40
+ emit(): void;
41
+ add(t: ToastRecord): string;
42
+ update(id: string, patch: Partial<ToastRecord>): string;
43
+ dismiss(id?: string | null): void;
44
+ schedule(t: ToastRecord): void;
45
+ pause(): void;
46
+ resume(): void;
47
+ setExpanded(v: boolean): void;
48
+ }
49
+ type PromiseMsg<V> = string | ((v: V) => string);
50
+ interface ToastPromiseMsgs<T> {
51
+ loading?: string;
52
+ success?: PromiseMsg<T>;
53
+ error?: PromiseMsg<unknown>;
54
+ }
55
+ interface ToastApi {
56
+ (message: string, opts?: ToastOptions): string;
57
+ success(m: string, o?: ToastOptions): string;
58
+ error(m: string, o?: ToastOptions): string;
59
+ warning(m: string, o?: ToastOptions): string;
60
+ info(m: string, o?: ToastOptions): string;
61
+ loading(m: string, o?: ToastOptions): string;
62
+ dismiss(id?: string | null): void;
63
+ update(id: string, patch?: Partial<ToastRecord>): string;
64
+ promise<T>(promise: Promise<T>, msgs?: ToastPromiseMsgs<T>): Promise<T>;
65
+ custom(node: unknown, opts?: {
66
+ id?: string | number;
67
+ duration?: number;
68
+ dismissible?: boolean;
69
+ }): string;
70
+ }
71
+ declare const toast: ToastApi;
72
+
73
+ declare const UIToast: ToastStore;
74
+
75
+ export { type ToastAction, type ToastApi, type ToastOptions, type ToastPromiseMsgs, type ToastRecord, type ToastSnapshot, type ToastTone, UIToast, toast };
@@ -0,0 +1,3 @@
1
+ export { UIToast, toast } from './chunk-PUPZ4HME.js';
2
+ //# sourceMappingURL=toast-store.js.map
3
+ //# sourceMappingURL=toast-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"toast-store.js"}
@@ -0,0 +1,3 @@
1
+ declare function Toaster(): null;
2
+
3
+ export { Toaster };
package/dist/toast.js ADDED
@@ -0,0 +1,6 @@
1
+ 'use client';export { Toaster } from './chunk-NKGMQL6I.js';
2
+ import './chunk-PUPZ4HME.js';
3
+ import './chunk-KBWNUUWM.js';
4
+ import './chunk-37O2ZXD6.js';
5
+ //# sourceMappingURL=toast.js.map
6
+ //# sourceMappingURL=toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"toast.js"}
@@ -0,0 +1,24 @@
1
+ import * as React from 'react';
2
+
3
+ /** ToggleTag - the on/off filter chip (<button aria-pressed>). */
4
+ interface ToggleTagProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange' | 'children'> {
5
+ /** The label. */
6
+ children: React.ReactNode;
7
+ /** Controlled selected value. Omit for uncontrolled. */
8
+ selected?: boolean;
9
+ /** Uncontrolled initial value. */
10
+ defaultSelected?: boolean;
11
+ /** Fires with the next value on every toggle. */
12
+ onChange?: (selected: boolean) => void;
13
+ /** Your own icon node; replaces the tick. Selected state reads from the wash. */
14
+ icon?: React.ReactNode | null;
15
+ /** Optional result count - rendered mono/tabular. */
16
+ count?: React.ReactNode;
17
+ /** 'md' = 28px (default) - 'sm' = 24px for dense rows. */
18
+ size?: 'md' | 'sm';
19
+ disabled?: boolean;
20
+ className?: string;
21
+ }
22
+ declare function ToggleTag(props: ToggleTagProps): React.JSX.Element;
23
+
24
+ export { ToggleTag, type ToggleTagProps };
@@ -0,0 +1,4 @@
1
+ 'use client';export { ToggleTag } from './chunk-4AZL76UJ.js';
2
+ import './chunk-VVPGEAC6.js';
3
+ //# sourceMappingURL=toggle-tag.js.map
4
+ //# sourceMappingURL=toggle-tag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"toggle-tag.js"}
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+
3
+ interface ToggleProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'type'> {
4
+ /** Controlled checked state. Omit for uncontrolled (use `defaultChecked`). */
5
+ checked?: boolean;
6
+ /** Uncontrolled initial state. */
7
+ defaultChecked?: boolean;
8
+ /** Disabled - inert and de-emphasized (faded track, retains its position). */
9
+ disabled?: boolean;
10
+ /** Track size: `md` 36x20 - `sm` 28x16 for dense settings/table rows. @default 'md' */
11
+ size?: 'sm' | 'md';
12
+ /** Label text beside the track. */
13
+ label?: React.ReactNode;
14
+ /** Optional secondary line under the label (settings rows). */
15
+ description?: React.ReactNode;
16
+ /** Fires on flip - read `e.target.checked`. */
17
+ onChange?: React.ChangeEventHandler<HTMLInputElement>;
18
+ }
19
+ declare function Toggle({ checked, defaultChecked, disabled, size, label, description, className, onChange, ...rest }: ToggleProps): React.JSX.Element;
20
+
21
+ export { Toggle, type ToggleProps };
package/dist/toggle.js ADDED
@@ -0,0 +1,3 @@
1
+ 'use client';export { Toggle } from './chunk-5PQMQBQC.js';
2
+ //# sourceMappingURL=toggle.js.map
3
+ //# sourceMappingURL=toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"toggle.js"}
@@ -0,0 +1,27 @@
1
+ import * as React from 'react';
2
+ import { ReactNode, ReactElement } from 'react';
3
+
4
+ type Placement = 'top' | 'bottom' | 'left' | 'right';
5
+ declare function TooltipHost(): React.ReactPortal;
6
+ interface TooltipProps {
7
+ /** The hint - a string or small node; never interactive content. */
8
+ content: ReactNode;
9
+ /** Optional keyboard hint, rendered as mono metadata ("⌘↩", "S"). */
10
+ shortcut?: string | null;
11
+ /** Preferred side; flips automatically when out of viewport room. */
12
+ placement?: Placement;
13
+ /** Suppress the tooltip entirely (trigger renders untouched). */
14
+ disabled?: boolean;
15
+ /** ms before a cold hover shows; warm hovers + focus are instant. Default 350. */
16
+ openDelay?: number;
17
+ /** ms the bubble lingers after leaving (bridges moving to a neighbour). Default 140. */
18
+ closeDelay?: number;
19
+ /** Skip the wrapper - clone the child and merge handlers + ref onto it (child must take a ref). Default false. */
20
+ asChild?: boolean;
21
+ id?: string;
22
+ /** Exactly one element; any element works by default, asChild requires one that accepts a ref. */
23
+ children: ReactElement;
24
+ }
25
+ declare function Tooltip({ content, shortcut, placement, disabled, openDelay, closeDelay, asChild, id, children, }: TooltipProps): React.JSX.Element;
26
+
27
+ export { Tooltip, TooltipHost, type TooltipProps };
@@ -0,0 +1,4 @@
1
+ 'use client';export { Tooltip, TooltipHost } from './chunk-BXXS7YRC.js';
2
+ import './chunk-37O2ZXD6.js';
3
+ //# sourceMappingURL=tooltip.js.map
4
+ //# sourceMappingURL=tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"tooltip.js"}
package/llms.txt ADDED
@@ -0,0 +1,165 @@
1
+ # premium-ds - LLM usage guide
2
+
3
+ Premium React 19 design system, shipped as built ESM + types. This is a compact per-component
4
+ index; full prop types (with docs) live in node_modules/premium-ds/dist/*.d.ts.
5
+
6
+ Setup:
7
+ import { Button, toast } from 'premium-ds'; // barrel - or a subpath: premium-ds/button
8
+ import 'premium-ds/styles.css'; // link ONCE at the app root
9
+ Peers: react, react-dom, motion. (The curated Phosphor glyphs used internally are bundled in - not a peer.)
10
+ No bundler/transpile config - built ESM keeps 'use client' intact for the Next.js App Router.
11
+
12
+ Conventions:
13
+ - Sentence case everywhere; no emoji or exclamation marks in UI. One primary <Button> per view.
14
+ - Numbers, times, IDs, status read mono + tabular. Status words: Scheduled, Draft, Published, Failed.
15
+ - Status hues (info/success/warning/danger) only for genuine status; hierarchy from the neutral ramp.
16
+ - Icons: premium-ds renders its own glyphs from a bundled curated Phosphor set, but does NOT
17
+ export an Icon component. Where an example below shows <Icon name="..." />, that is YOUR OWN icon
18
+ node - any ReactNode you pass into the prop (e.g. an @phosphor-icons/react element).
19
+
20
+ Every named export is also a subpath: premium-ds/<kebab-name> (e.g. premium-ds/status-badge).
21
+
22
+ ============================================================ PRIMITIVES
23
+
24
+ Button - premium-ds/button
25
+ One control for every click; exactly one primary per view. variant primary|secondary|ghost|danger|link, size sm|md|lg, iconLeft/iconRight (ReactNode), loading, disabled.
26
+ <Button variant="primary" iconLeft={<Icon name="plus" size="sm" />}>Schedule post</Button>
27
+
28
+ Collapse - premium-ds/collapse
29
+ Layout-transition primitive; eases height open/closed, never teleports.
30
+ <Collapse open={open}><div>...revealed content...</div></Collapse>
31
+
32
+ Badge - premium-ds/badge
33
+ Glass or outline chip. tone neutral|info|success|warning|danger, dot, live, variant="outline", pill, size="sm".
34
+ <Badge tone="success" pill>Published</Badge>
35
+
36
+ StatusBadge - premium-ds/status-badge
37
+ Canonical post status - tone + one-word label. status draft|scheduled|processing|published|failed; add `morph` to animate in place as status changes.
38
+ <StatusBadge status="published" />
39
+ <StatusBadge status={s} morph />
40
+
41
+ CountBadge - premium-ds/count-badge
42
+ Mono tabular count; `roll` animates digits like an odometer. value: number | string.
43
+ <CountBadge value="7 / 10" />
44
+ <CountBadge value={count} roll tone="info" />
45
+
46
+ ============================================================ FORMS
47
+ (all take label, helper/error/warning/success, size sm|md|lg, disabled)
48
+
49
+ TextField - premium-ds/text-field
50
+ Base text input; states disclose via Collapse. leadingIcon, clearable, optional/required.
51
+ <TextField id="ws" label="Workspace name" required value={v} onChange={(e) => set(e.target.value)} />
52
+ <TextField id="h" label="Username" error="Must be at least 4 characters." value={v} onChange={...} />
53
+
54
+ NumberField - premium-ds/number-field
55
+ Tabular figures, caret steppers, unit suffix, clamp to [min,max]. onChange(value: number).
56
+ <NumberField id="seats" label="Seats" unit="users" min={1} max={50} value={n} onChange={setN} />
57
+
58
+ OtpField - premium-ds/otp-field
59
+ Segmented one-time code; auto-advance, paste-to-fill. length, group, error, size.
60
+ <OtpField length={6} group={3} value={code} onChange={setCode} />
61
+
62
+ Textarea - premium-ds/textarea
63
+ Auto-grow, char meter (max), ⌘/Ctrl+↵ submit (onSubmit). minRows/maxRows.
64
+ <Textarea id="bio" label="Bio" max={280} minRows={4} value={v} onChange={(e) => set(e.target.value)} onSubmit={save} />
65
+
66
+ Checkbox - premium-ds/checkbox
67
+ Stages a choice. label, description, indeterminate, invalid, required, disabled. Standard checked/onChange.
68
+ <Checkbox label="Email me about product updates" checked={on} onChange={(e) => set(e.target.checked)} />
69
+
70
+ Toggle - premium-ds/toggle
71
+ Actuates a setting on the spot. label, description; checked/onChange like a checkbox.
72
+ <Toggle label="Auto-save drafts" checked={on} onChange={(e) => set(e.target.checked)} />
73
+
74
+ RadioGroup - premium-ds/radio-group
75
+ Pick exactly one. options: RadioOption[] ({ value, label, description?, icon?, disabled? }); variant rows|cards, orientation; value/onChange(value).
76
+ <RadioGroup name="role" label="Member role" value={role} onChange={setRole} options={ROLES} />
77
+
78
+ Select - premium-ds/select
79
+ Single-select listbox. options: SelectOption[]; value: string|null, onChange(value); searchable, leadingIcon, placeholder, invalid, loading, ariaLabel.
80
+ <Select options={TIMEZONES} value={tz} onChange={setTz} searchable placeholder="Choose a time zone" ariaLabel="Time zone" />
81
+
82
+ MultiSelect - premium-ds/multi-select
83
+ Many-of listbox; stays open while toggling, trigger summarises as first +N. value: string[], onChange(string[]); searchable.
84
+ <MultiSelect options={PEOPLE} value={ids} onChange={setIds} placeholder="Choose members" ariaLabel="Members" />
85
+
86
+ ============================================================ DATA DISPLAY
87
+
88
+ Avatar - premium-ds/avatar
89
+ Identity mark: image, initials, or silhouette. name, src, size xs|sm|md|lg|xl, status online|away|busy|offline, shape, paletteIndex, icon.
90
+ <Avatar name="Ana Ng" src="..." status="online" />
91
+
92
+ AvatarGroup - premium-ds/avatar-group
93
+ Overlapping avatars with +N overflow. max, size; children are <Avatar>s.
94
+ <AvatarGroup max={4} size="sm"><Avatar name="Ana Ng" />...</AvatarGroup>
95
+
96
+ Tag / TagGroup - premium-ds/tag
97
+ User-owned label (a control, not a status). icon, size, disabled, onRemove + removeLabel (removable). TagGroup wraps a labelled set.
98
+ <Tag icon={<Icon name="hash" />} onRemove={fn} removeLabel="Remove design">design</Tag>
99
+
100
+ ToggleTag - premium-ds/toggle-tag
101
+ Many-of-many filter chip. selected/onChange(next) or defaultSelected; icon, count.
102
+ <ToggleTag selected={on} onChange={setOn} icon={<Icon name="star" />} count={48}>Starred</ToggleTag>
103
+
104
+ Table - premium-ds/table
105
+ Declare columns + rows; owns sort, selection, stickiness, overflow. columns: TableColumn<T>[] ({ key, label, render?, sortable?, sortBy?, align?, mono?, strong?, grow? }); selectable, defaultSort, footer.
106
+ <Table<Invoice> label="Invoices" columns={COLUMNS} rows={INVOICES} selectable defaultSort={{ key: 'amount', dir: 'desc' }} />
107
+
108
+ Pagination - premium-ds/pagination
109
+ Cursor strip: mono range readout + prev/next pair. range: [from,to], total?, hasPrev/hasNext, onPrev/onNext.
110
+ <Pagination label="Rows" range={[from, to]} total={312} hasPrev hasNext onPrev={...} onNext={...} />
111
+
112
+ ============================================================ DATE, TIME & TABS
113
+ (value is a string; onChange(value | null); timezone, min/max, disabled)
114
+
115
+ DateField - premium-ds/date-field
116
+ Month calendar in a popover; value 'YYYY-MM-DD'.
117
+ <DateField label="Start date" value={d} onChange={setD} timezone="Europe/Riga" min="2026-06-01" />
118
+
119
+ DateTimeField - premium-ds/datetime-field
120
+ Calendar + segmented HH:MM; value 'YYYY-MM-DDTHH:mm'. format 12h|24h, minuteStep.
121
+ <DateTimeField label="Due at" value={v} onChange={setV} format="12h" minuteStep={15} />
122
+
123
+ DateRangeField - premium-ds/date-range-field
124
+ Two-tap auto-ordering window; value DateRange { start, end } | null; commits when both ends exist.
125
+ <DateRangeField label="Reporting period" value={r} onChange={setR} />
126
+
127
+ TimeField - premium-ds/time-field
128
+ Standalone segmented time; value 'HH:mm'; bounds saturate. format, minuteStep.
129
+ <TimeField label="Send at" value={t} onChange={setT} format="12h" minuteStep={15} />
130
+
131
+ Tabs / TabPanel - premium-ds/tabs
132
+ Line tabs; the ink reaches then releases; panels enter from the side you moved toward. items: TabItem[]; value/onChange(value, dir). Pair with <TabPanel name tab dir>.
133
+ <Tabs name="views" label="Workspace views" value={view} onChange={(v, d) => { setView(v); setDir(d); }} items={items} />
134
+ <TabPanel name="views" tab={view} dir={dir}>...</TabPanel>
135
+
136
+ ============================================================ OVERLAYS & FEEDBACK
137
+
138
+ Alert - premium-ds/alert
139
+ Persistent, in-flow status. tone, title, children (body), action { label, onClick }, dismissible, banner, open/onDismiss (controlled).
140
+ <Alert tone="warning" title="Your trial ends in 5 days" action={{ label: 'Upgrade', onClick: fn }}>Add a plan...</Alert>
141
+
142
+ Toast - premium-ds/toast (imperative; the host self-mounts - no <Toaster> needed)
143
+ toast(msg) - toast.success/error/warning/info(msg, { description, action }) - toast.promise(p, { loading, success, error }) - toast.loading - toast.dismiss().
144
+ import { toast } from 'premium-ds';
145
+ toast.success('Changes saved', { description: 'Synced to the cloud' });
146
+ toast.promise(save(), { loading: 'Saving...', success: (v) => `Saved - ${v.count}`, error: (e) => `Failed - ${e.message}` });
147
+
148
+ Tooltip - premium-ds/tooltip
149
+ Transient hint on hover/focus; wraps any child (no ref wiring needed). content, shortcut, placement top|bottom|left|right.
150
+ <Tooltip content="Save changes" shortcut="⌘S"><Button>Save</Button></Tooltip>
151
+
152
+ Dialog - premium-ds/dialog
153
+ Styled modal: scrim, focus trap, scroll lock. open/onOpenChange, tone, icon, title, description, footer: (close) => node.
154
+ <Dialog open={o} onOpenChange={setO} tone="danger" title="Delete this project?" footer={(close) => <>...</>}>...</Dialog>
155
+
156
+ Overlay - premium-ds/overlay
157
+ Headless floating surface. mode popover|sheet, side, align, trigger (node), asChild; children: ({ close }) => node.
158
+ <Overlay side="bottom" align="start" trigger={<Button>Actions</Button>}>{({ close }) => <menu>...</menu>}</Overlay>
159
+ Sheet = <Overlay mode="sheet" side="right|bottom"> - edge-docked, drag-to-dismiss.
160
+
161
+ ============================================================ THEMING
162
+ Re-skin by overriding the CSS custom properties (tokens) in your own stylesheet, loaded after
163
+ premium-ds/styles.css - never fork the source. Token groups: spacing --space-*, type --type-*,
164
+ color (--bg-*, --text-*, --border-*, --accent), --radius-*, elevation --shadow-*, motion
165
+ (--duration-*, --ease-*).
package/package.json ADDED
@@ -0,0 +1,205 @@
1
+ {
2
+ "name": "premium-ds",
3
+ "version": "0.1.0",
4
+ "description": "A React 19 design system: accessible, animated UI components built on a small, closed CSS design-token vocabulary. No Tailwind, no CSS-in-JS.",
5
+ "keywords": [
6
+ "react",
7
+ "react-19",
8
+ "design-system",
9
+ "component-library",
10
+ "react-components",
11
+ "ui-components",
12
+ "ui-kit",
13
+ "design-tokens",
14
+ "css",
15
+ "typescript",
16
+ "accessible",
17
+ "a11y",
18
+ "motion",
19
+ "animation",
20
+ "headless-ui",
21
+ "esm"
22
+ ],
23
+ "type": "module",
24
+ "license": "MIT",
25
+ "author": "Tabsir Ahammed",
26
+ "homepage": "https://github.com/Tabsir99/premium-ds#readme",
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/Tabsir99/premium-ds.git"
30
+ },
31
+ "bugs": {
32
+ "url": "https://github.com/Tabsir99/premium-ds/issues"
33
+ },
34
+ "sideEffects": [
35
+ "*.css"
36
+ ],
37
+ "main": "./dist/index.js",
38
+ "module": "./dist/index.js",
39
+ "types": "./dist/index.d.ts",
40
+ "exports": {
41
+ ".": {
42
+ "types": "./dist/index.d.ts",
43
+ "import": "./dist/index.js"
44
+ },
45
+ "./button": {
46
+ "types": "./dist/button.d.ts",
47
+ "import": "./dist/button.js"
48
+ },
49
+ "./collapse": {
50
+ "types": "./dist/collapse.d.ts",
51
+ "import": "./dist/collapse.js"
52
+ },
53
+ "./badge": {
54
+ "types": "./dist/badge.d.ts",
55
+ "import": "./dist/badge.js"
56
+ },
57
+ "./status-badge": {
58
+ "types": "./dist/status-badge.d.ts",
59
+ "import": "./dist/status-badge.js"
60
+ },
61
+ "./count-badge": {
62
+ "types": "./dist/count-badge.d.ts",
63
+ "import": "./dist/count-badge.js"
64
+ },
65
+ "./avatar": {
66
+ "types": "./dist/avatar.d.ts",
67
+ "import": "./dist/avatar.js"
68
+ },
69
+ "./avatar-group": {
70
+ "types": "./dist/avatar-group.d.ts",
71
+ "import": "./dist/avatar-group.js"
72
+ },
73
+ "./tag": {
74
+ "types": "./dist/tag.d.ts",
75
+ "import": "./dist/tag.js"
76
+ },
77
+ "./toggle-tag": {
78
+ "types": "./dist/toggle-tag.d.ts",
79
+ "import": "./dist/toggle-tag.js"
80
+ },
81
+ "./table": {
82
+ "types": "./dist/table.d.ts",
83
+ "import": "./dist/table.js"
84
+ },
85
+ "./pagination": {
86
+ "types": "./dist/pagination.d.ts",
87
+ "import": "./dist/pagination.js"
88
+ },
89
+ "./text-field": {
90
+ "types": "./dist/text-field.d.ts",
91
+ "import": "./dist/text-field.js"
92
+ },
93
+ "./number-field": {
94
+ "types": "./dist/number-field.d.ts",
95
+ "import": "./dist/number-field.js"
96
+ },
97
+ "./otp-field": {
98
+ "types": "./dist/otp-field.d.ts",
99
+ "import": "./dist/otp-field.js"
100
+ },
101
+ "./textarea": {
102
+ "types": "./dist/textarea.d.ts",
103
+ "import": "./dist/textarea.js"
104
+ },
105
+ "./checkbox": {
106
+ "types": "./dist/checkbox.d.ts",
107
+ "import": "./dist/checkbox.js"
108
+ },
109
+ "./toggle": {
110
+ "types": "./dist/toggle.d.ts",
111
+ "import": "./dist/toggle.js"
112
+ },
113
+ "./radio-group": {
114
+ "types": "./dist/radio-group.d.ts",
115
+ "import": "./dist/radio-group.js"
116
+ },
117
+ "./select": {
118
+ "types": "./dist/select.d.ts",
119
+ "import": "./dist/select.js"
120
+ },
121
+ "./multi-select": {
122
+ "types": "./dist/multi-select.d.ts",
123
+ "import": "./dist/multi-select.js"
124
+ },
125
+ "./date-field": {
126
+ "types": "./dist/date-field.d.ts",
127
+ "import": "./dist/date-field.js"
128
+ },
129
+ "./datetime-field": {
130
+ "types": "./dist/datetime-field.d.ts",
131
+ "import": "./dist/datetime-field.js"
132
+ },
133
+ "./date-range-field": {
134
+ "types": "./dist/date-range-field.d.ts",
135
+ "import": "./dist/date-range-field.js"
136
+ },
137
+ "./time-field": {
138
+ "types": "./dist/time-field.d.ts",
139
+ "import": "./dist/time-field.js"
140
+ },
141
+ "./tabs": {
142
+ "types": "./dist/tabs.d.ts",
143
+ "import": "./dist/tabs.js"
144
+ },
145
+ "./overlay": {
146
+ "types": "./dist/overlay.d.ts",
147
+ "import": "./dist/overlay.js"
148
+ },
149
+ "./dialog": {
150
+ "types": "./dist/dialog.d.ts",
151
+ "import": "./dist/dialog.js"
152
+ },
153
+ "./tooltip": {
154
+ "types": "./dist/tooltip.d.ts",
155
+ "import": "./dist/tooltip.js"
156
+ },
157
+ "./alert": {
158
+ "types": "./dist/alert.d.ts",
159
+ "import": "./dist/alert.js"
160
+ },
161
+ "./toast": {
162
+ "types": "./dist/toast.d.ts",
163
+ "import": "./dist/toast.js"
164
+ },
165
+ "./toast-store": {
166
+ "types": "./dist/toast-store.d.ts",
167
+ "import": "./dist/toast-store.js"
168
+ },
169
+ "./motion-tokens": {
170
+ "types": "./dist/motion-tokens.d.ts",
171
+ "import": "./dist/motion-tokens.js"
172
+ },
173
+ "./styles.css": "./src/styles.css",
174
+ "./package.json": "./package.json"
175
+ },
176
+ "files": [
177
+ "dist",
178
+ "src",
179
+ "llms.txt"
180
+ ],
181
+ "scripts": {
182
+ "build": "tsup",
183
+ "typecheck": "tsc --noEmit && tsc -p tsconfig.node.json",
184
+ "format": "prettier --write .",
185
+ "format:check": "prettier --check .",
186
+ "prepublishOnly": "pnpm build"
187
+ },
188
+ "peerDependencies": {
189
+ "motion": "^12",
190
+ "react": "^19",
191
+ "react-dom": "^19"
192
+ },
193
+ "devDependencies": {
194
+ "@phosphor-icons/react": "^2.1.10",
195
+ "@types/node": "^26.0.1",
196
+ "@types/react": "^19.2.17",
197
+ "@types/react-dom": "^19.2.3",
198
+ "motion": "^12.40.0",
199
+ "prettier": "^3.8.3",
200
+ "react": "^19.2.7",
201
+ "react-dom": "^19.2.7",
202
+ "tsup": "^8.5.0",
203
+ "typescript": "~6.0.3"
204
+ }
205
+ }