@recordair/ui-core 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 (195) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +12 -0
  3. package/dist/Accordion.d.ts +17 -0
  4. package/dist/Accordion.d.ts.map +1 -0
  5. package/dist/Accordion.js +25 -0
  6. package/dist/Accordion.js.map +1 -0
  7. package/dist/Alert.d.ts +11 -0
  8. package/dist/Alert.d.ts.map +1 -0
  9. package/dist/Alert.js +18 -0
  10. package/dist/Alert.js.map +1 -0
  11. package/dist/Avatar.d.ts +12 -0
  12. package/dist/Avatar.d.ts.map +1 -0
  13. package/dist/Avatar.js +19 -0
  14. package/dist/Avatar.js.map +1 -0
  15. package/dist/Badge.d.ts +14 -0
  16. package/dist/Badge.d.ts.map +1 -0
  17. package/dist/Badge.js +25 -0
  18. package/dist/Badge.js.map +1 -0
  19. package/dist/Button.d.ts +26 -0
  20. package/dist/Button.d.ts.map +1 -0
  21. package/dist/Button.js +8 -0
  22. package/dist/Button.js.map +1 -0
  23. package/dist/ButtonGroup.d.ts +8 -0
  24. package/dist/ButtonGroup.d.ts.map +1 -0
  25. package/dist/ButtonGroup.js +11 -0
  26. package/dist/ButtonGroup.js.map +1 -0
  27. package/dist/Card.d.ts +13 -0
  28. package/dist/Card.d.ts.map +1 -0
  29. package/dist/Card.js +20 -0
  30. package/dist/Card.js.map +1 -0
  31. package/dist/CardContent.d.ts +8 -0
  32. package/dist/CardContent.d.ts.map +1 -0
  33. package/dist/CardContent.js +11 -0
  34. package/dist/CardContent.js.map +1 -0
  35. package/dist/CardDescription.d.ts +6 -0
  36. package/dist/CardDescription.d.ts.map +1 -0
  37. package/dist/CardDescription.js +5 -0
  38. package/dist/CardDescription.js.map +1 -0
  39. package/dist/CardFooter.d.ts +8 -0
  40. package/dist/CardFooter.d.ts.map +1 -0
  41. package/dist/CardFooter.js +5 -0
  42. package/dist/CardFooter.js.map +1 -0
  43. package/dist/CardHeader.d.ts +9 -0
  44. package/dist/CardHeader.d.ts.map +1 -0
  45. package/dist/CardHeader.js +5 -0
  46. package/dist/CardHeader.js.map +1 -0
  47. package/dist/CardMedia.d.ts +9 -0
  48. package/dist/CardMedia.d.ts.map +1 -0
  49. package/dist/CardMedia.js +10 -0
  50. package/dist/CardMedia.js.map +1 -0
  51. package/dist/CardTitle.d.ts +8 -0
  52. package/dist/CardTitle.d.ts.map +1 -0
  53. package/dist/CardTitle.js +8 -0
  54. package/dist/CardTitle.js.map +1 -0
  55. package/dist/Checkbox.d.ts +10 -0
  56. package/dist/Checkbox.d.ts.map +1 -0
  57. package/dist/Checkbox.js +8 -0
  58. package/dist/Checkbox.js.map +1 -0
  59. package/dist/ChoiceChip.d.ts +9 -0
  60. package/dist/ChoiceChip.d.ts.map +1 -0
  61. package/dist/ChoiceChip.js +5 -0
  62. package/dist/ChoiceChip.js.map +1 -0
  63. package/dist/ContentBlock.d.ts +19 -0
  64. package/dist/ContentBlock.d.ts.map +1 -0
  65. package/dist/ContentBlock.js +18 -0
  66. package/dist/ContentBlock.js.map +1 -0
  67. package/dist/Divider.d.ts +7 -0
  68. package/dist/Divider.d.ts.map +1 -0
  69. package/dist/Divider.js +9 -0
  70. package/dist/Divider.js.map +1 -0
  71. package/dist/EmptyState.d.ts +11 -0
  72. package/dist/EmptyState.d.ts.map +1 -0
  73. package/dist/EmptyState.js +5 -0
  74. package/dist/EmptyState.js.map +1 -0
  75. package/dist/Field.d.ts +13 -0
  76. package/dist/Field.d.ts.map +1 -0
  77. package/dist/Field.js +7 -0
  78. package/dist/Field.js.map +1 -0
  79. package/dist/IconBox.d.ts +13 -0
  80. package/dist/IconBox.d.ts.map +1 -0
  81. package/dist/IconBox.js +18 -0
  82. package/dist/IconBox.js.map +1 -0
  83. package/dist/IconButton.d.ts +12 -0
  84. package/dist/IconButton.d.ts.map +1 -0
  85. package/dist/IconButton.js +10 -0
  86. package/dist/IconButton.js.map +1 -0
  87. package/dist/Input.d.ts +14 -0
  88. package/dist/Input.d.ts.map +1 -0
  89. package/dist/Input.js +14 -0
  90. package/dist/Input.js.map +1 -0
  91. package/dist/KeyValue.d.ts +9 -0
  92. package/dist/KeyValue.d.ts.map +1 -0
  93. package/dist/KeyValue.js +5 -0
  94. package/dist/KeyValue.js.map +1 -0
  95. package/dist/LinkButton.d.ts +14 -0
  96. package/dist/LinkButton.d.ts.map +1 -0
  97. package/dist/LinkButton.js +5 -0
  98. package/dist/LinkButton.js.map +1 -0
  99. package/dist/LinkTabs.d.ts +17 -0
  100. package/dist/LinkTabs.d.ts.map +1 -0
  101. package/dist/LinkTabs.js +10 -0
  102. package/dist/LinkTabs.js.map +1 -0
  103. package/dist/MenuSelect.d.ts +16 -0
  104. package/dist/MenuSelect.d.ts.map +1 -0
  105. package/dist/MenuSelect.js +41 -0
  106. package/dist/MenuSelect.js.map +1 -0
  107. package/dist/Modal.d.ts +14 -0
  108. package/dist/Modal.d.ts.map +1 -0
  109. package/dist/Modal.js +59 -0
  110. package/dist/Modal.js.map +1 -0
  111. package/dist/NativeSelect.d.ts +8 -0
  112. package/dist/NativeSelect.d.ts.map +1 -0
  113. package/dist/NativeSelect.js +8 -0
  114. package/dist/NativeSelect.js.map +1 -0
  115. package/dist/NavigationList.d.ts +20 -0
  116. package/dist/NavigationList.d.ts.map +1 -0
  117. package/dist/NavigationList.js +23 -0
  118. package/dist/NavigationList.js.map +1 -0
  119. package/dist/Progress.d.ts +9 -0
  120. package/dist/Progress.d.ts.map +1 -0
  121. package/dist/Progress.js +8 -0
  122. package/dist/Progress.js.map +1 -0
  123. package/dist/Radio.d.ts +12 -0
  124. package/dist/Radio.d.ts.map +1 -0
  125. package/dist/Radio.js +8 -0
  126. package/dist/Radio.js.map +1 -0
  127. package/dist/RatingStars.d.ts +12 -0
  128. package/dist/RatingStars.d.ts.map +1 -0
  129. package/dist/RatingStars.js +13 -0
  130. package/dist/RatingStars.js.map +1 -0
  131. package/dist/ScrollAnchor.d.ts +8 -0
  132. package/dist/ScrollAnchor.d.ts.map +1 -0
  133. package/dist/ScrollAnchor.js +12 -0
  134. package/dist/ScrollAnchor.js.map +1 -0
  135. package/dist/SearchInput.d.ts +10 -0
  136. package/dist/SearchInput.d.ts.map +1 -0
  137. package/dist/SearchInput.js +9 -0
  138. package/dist/SearchInput.js.map +1 -0
  139. package/dist/Select.d.ts +12 -0
  140. package/dist/Select.d.ts.map +1 -0
  141. package/dist/Select.js +12 -0
  142. package/dist/Select.js.map +1 -0
  143. package/dist/Skeleton.d.ts +8 -0
  144. package/dist/Skeleton.d.ts.map +1 -0
  145. package/dist/Skeleton.js +5 -0
  146. package/dist/Skeleton.js.map +1 -0
  147. package/dist/Spinner.d.ts +10 -0
  148. package/dist/Spinner.d.ts.map +1 -0
  149. package/dist/Spinner.js +10 -0
  150. package/dist/Spinner.js.map +1 -0
  151. package/dist/SubmitButton.d.ts +10 -0
  152. package/dist/SubmitButton.d.ts.map +1 -0
  153. package/dist/SubmitButton.js +10 -0
  154. package/dist/SubmitButton.js.map +1 -0
  155. package/dist/Tabs.d.ts +17 -0
  156. package/dist/Tabs.d.ts.map +1 -0
  157. package/dist/Tabs.js +8 -0
  158. package/dist/Tabs.js.map +1 -0
  159. package/dist/Textarea.d.ts +10 -0
  160. package/dist/Textarea.d.ts.map +1 -0
  161. package/dist/Textarea.js +8 -0
  162. package/dist/Textarea.js.map +1 -0
  163. package/dist/Toast.d.ts +13 -0
  164. package/dist/Toast.d.ts.map +1 -0
  165. package/dist/Toast.js +26 -0
  166. package/dist/Toast.js.map +1 -0
  167. package/dist/Toggle.d.ts +13 -0
  168. package/dist/Toggle.d.ts.map +1 -0
  169. package/dist/Toggle.js +21 -0
  170. package/dist/Toggle.js.map +1 -0
  171. package/dist/buttonStyles.d.ts +14 -0
  172. package/dist/buttonStyles.d.ts.map +1 -0
  173. package/dist/buttonStyles.js +16 -0
  174. package/dist/buttonStyles.js.map +1 -0
  175. package/dist/classNames.d.ts +4 -0
  176. package/dist/classNames.d.ts.map +1 -0
  177. package/dist/classNames.js +3 -0
  178. package/dist/classNames.js.map +1 -0
  179. package/dist/icons/GoogleIcon.d.ts +6 -0
  180. package/dist/icons/GoogleIcon.d.ts.map +1 -0
  181. package/dist/icons/GoogleIcon.js +4 -0
  182. package/dist/icons/GoogleIcon.js.map +1 -0
  183. package/dist/icons/XSocialIcon.d.ts +6 -0
  184. package/dist/icons/XSocialIcon.d.ts.map +1 -0
  185. package/dist/icons/XSocialIcon.js +4 -0
  186. package/dist/icons/XSocialIcon.js.map +1 -0
  187. package/dist/icons/index.d.ts +7 -0
  188. package/dist/icons/index.d.ts.map +1 -0
  189. package/dist/icons/index.js +4 -0
  190. package/dist/icons/index.js.map +1 -0
  191. package/dist/index.d.ts +85 -0
  192. package/dist/index.d.ts.map +1 -0
  193. package/dist/index.js +43 -0
  194. package/dist/index.js.map +1 -0
  195. package/package.json +34 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentBlock.d.ts","sourceRoot":"","sources":["../src/ContentBlock.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,KAAK,gBAAgB,GACjB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE7E,KAAK,iBAAiB,GAAG,cAAc,CAAC,WAAW,CAAC,GAAG;IACrD,KAAK,EAAE,gBAAgB,CAAC;CACzB,CAAC;AAQF,QAAA,MAAM,YAAY,GAAI,+BAA+B,iBAAiB,gCAmCrE,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { classNames } from "./classNames";
3
+ const calloutClasses = {
4
+ neutral: "border-neutral-200 bg-neutral-100 text-neutral-700",
5
+ info: "border-info-border bg-info-bg text-info-text",
6
+ warning: "border-warning-border bg-warning-bg text-warning-text",
7
+ };
8
+ const ContentBlock = ({ block, className, ...rest }) => {
9
+ if (block.kind === "list") {
10
+ return (_jsx("ul", { className: classNames("flex list-disc flex-col gap-2 pl-5 text-body-sm leading-copy text-neutral-700 marker:text-neutral-400", className), ...rest, children: block.items.map((item, index) => _jsx("li", { children: item }, `${item}-${index}`)) }));
11
+ }
12
+ if (block.kind === "callout") {
13
+ return (_jsx("aside", { className: classNames("rounded-lg border px-4 py-3 text-body-sm leading-copy", calloutClasses[block.tone ?? "neutral"], className), ...rest, children: block.text }));
14
+ }
15
+ return (_jsx("p", { className: classNames("text-body-sm leading-copy text-neutral-700", className), ...rest, children: block.text }));
16
+ };
17
+ export { ContentBlock };
18
+ //# sourceMappingURL=ContentBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentBlock.js","sourceRoot":"","sources":["../src/ContentBlock.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAW1C,MAAM,cAAc,GAAwF;IAC1G,OAAO,EAAE,oDAAoD;IAC7D,IAAI,EAAE,8CAA8C;IACpD,OAAO,EAAE,uDAAuD;CACjE,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAqB,EAAE,EAAE;IACxE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,CACL,aACE,SAAS,EAAE,UAAU,CACnB,uGAAuG,EACvG,SAAS,CACV,KACG,IAAI,YAEP,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,uBAA8B,IAAI,IAAzB,GAAG,IAAI,IAAI,KAAK,EAAE,CAAa,CAAC,GACxE,CACN,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,CACL,gBACE,SAAS,EAAE,UAAU,CACnB,uDAAuD,EACvD,cAAc,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,EACvC,SAAS,CACV,KACG,IAAI,YAEP,KAAK,CAAC,IAAI,GACL,CACT,CAAC;IACJ,CAAC;IAED,OAAO,CACL,YAAG,SAAS,EAAE,UAAU,CAAC,4CAA4C,EAAE,SAAS,CAAC,KAAM,IAAI,YACxF,KAAK,CAAC,IAAI,GACT,CACL,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ type DividerProps = {
2
+ label?: string;
3
+ };
4
+ declare const Divider: ({ label }: DividerProps) => import("react").JSX.Element;
5
+ export { Divider };
6
+ export type { DividerProps };
7
+ //# sourceMappingURL=Divider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divider.d.ts","sourceRoot":"","sources":["../src/Divider.tsx"],"names":[],"mappings":"AAAA,KAAK,YAAY,GAAG;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,QAAA,MAAM,OAAO,GAAI,WAAW,YAAY,gCAYvC,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const Divider = ({ label }) => {
3
+ if (!label) {
4
+ return _jsx("hr", { className: "h-px w-full border-0 bg-neutral-200" });
5
+ }
6
+ return (_jsxs("div", { className: "flex items-center gap-3 text-neutral-400", children: [_jsx("span", { className: "h-px flex-1 bg-neutral-200" }), _jsx("span", { className: "text-xs font-medium tracking-wider", children: label }), _jsx("span", { className: "h-px flex-1 bg-neutral-200" })] }));
7
+ };
8
+ export { Divider };
9
+ //# sourceMappingURL=Divider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divider.js","sourceRoot":"","sources":["../src/Divider.tsx"],"names":[],"mappings":";AAIA,MAAM,OAAO,GAAG,CAAC,EAAE,KAAK,EAAgB,EAAE,EAAE;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,aAAI,SAAS,EAAC,qCAAqC,GAAG,CAAC;IAChE,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,0CAA0C,aACvD,eAAM,SAAS,EAAC,4BAA4B,GAAG,EAC/C,eAAM,SAAS,EAAC,oCAAoC,YAAE,KAAK,GAAQ,EACnE,eAAM,SAAS,EAAC,4BAA4B,GAAG,IAC3C,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ type EmptyStateProps = HTMLAttributes<HTMLDivElement> & {
3
+ icon?: ReactNode;
4
+ title: string;
5
+ description?: string;
6
+ action?: ReactNode;
7
+ };
8
+ declare const EmptyState: ({ icon, title, description, action, className, ...rest }: EmptyStateProps) => import("react").JSX.Element;
9
+ export { EmptyState };
10
+ export type { EmptyStateProps };
11
+ //# sourceMappingURL=EmptyState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.d.ts","sourceRoot":"","sources":["../src/EmptyState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,KAAK,eAAe,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IACtD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,0DAA0D,eAAe,gCAS5F,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { classNames } from "./classNames";
3
+ const EmptyState = ({ icon, title, description, action, className, ...rest }) => (_jsxs("div", { className: classNames("flex flex-col items-center gap-3 rounded-lg border border-dashed border-neutral-300 bg-neutral-50 p-8 text-center", className), ...rest, children: [icon, _jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("h3", { className: "text-heading-sm font-semibold text-neutral-900", children: title }), description ? _jsx("p", { className: "max-w-md text-sm text-neutral-500", children: description }) : null] }), action] }));
4
+ export { EmptyState };
5
+ //# sourceMappingURL=EmptyState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.js","sourceRoot":"","sources":["../src/EmptyState.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAS1C,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,EAAmB,EAAE,EAAE,CAAC,CAChG,eAAK,SAAS,EAAE,UAAU,CAAC,mHAAmH,EAAE,SAAS,CAAC,KAAM,IAAI,aACjK,IAAI,EACL,eAAK,SAAS,EAAC,qBAAqB,aAClC,aAAI,SAAS,EAAC,gDAAgD,YAAE,KAAK,GAAM,EAC1E,WAAW,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,mCAAmC,YAAE,WAAW,GAAK,CAAC,CAAC,CAAC,IAAI,IACpF,EACL,MAAM,IACH,CACP,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from "react";
2
+ type FieldProps = {
3
+ label: string;
4
+ htmlFor: string;
5
+ error?: string;
6
+ hint?: string;
7
+ required?: boolean;
8
+ children: ReactNode;
9
+ };
10
+ declare const Field: ({ label, htmlFor, error, hint, required, children, }: FieldProps) => import("react").JSX.Element;
11
+ export { Field };
12
+ export type { FieldProps };
13
+ //# sourceMappingURL=Field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Field.d.ts","sourceRoot":"","sources":["../src/Field.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,KAAK,UAAU,GAAG;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,QAAA,MAAM,KAAK,GAAI,sDAOZ,UAAU,gCAqBZ,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,YAAY,EAAE,UAAU,EAAE,CAAC"}
package/dist/Field.js ADDED
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const Field = ({ label, htmlFor, error, hint, required = false, children, }) => {
3
+ const descriptionId = error || hint ? `${htmlFor}-description` : undefined;
4
+ return (_jsxs("div", { className: "flex flex-col gap-2", children: [_jsxs("label", { htmlFor: htmlFor, className: "text-label font-medium text-neutral-700", children: [label, required ? _jsx("span", { "aria-hidden": true, children: " *" }) : null] }), children, error ? (_jsx("p", { id: descriptionId, className: "text-xs text-error-text", role: "alert", children: error })) : hint ? (_jsx("p", { id: descriptionId, className: "text-xs text-neutral-500", children: hint })) : null] }));
5
+ };
6
+ export { Field };
7
+ //# sourceMappingURL=Field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Field.js","sourceRoot":"","sources":["../src/Field.tsx"],"names":[],"mappings":";AAWA,MAAM,KAAK,GAAG,CAAC,EACb,KAAK,EACL,OAAO,EACP,KAAK,EACL,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,QAAQ,GACG,EAAE,EAAE;IACf,MAAM,aAAa,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAE3E,OAAO,CACL,eAAK,SAAS,EAAC,qBAAqB,aAClC,iBAAO,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,yCAAyC,aACzE,KAAK,EACL,QAAQ,CAAC,CAAC,CAAC,qDAA2B,CAAC,CAAC,CAAC,IAAI,IACxC,EACP,QAAQ,EACR,KAAK,CAAC,CAAC,CAAC,CACP,YAAG,EAAE,EAAE,aAAa,EAAE,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAC,OAAO,YACnE,KAAK,GACJ,CACL,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACT,YAAG,EAAE,EAAE,aAAa,EAAE,SAAS,EAAC,0BAA0B,YACvD,IAAI,GACH,CACL,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ type IconBoxTone = "neutral" | "brand" | "artist" | "studio" | "pro" | "success";
3
+ type IconBoxSize = "sm" | "md" | "lg";
4
+ type IconBoxProps = HTMLAttributes<HTMLSpanElement> & {
5
+ tone?: IconBoxTone;
6
+ size?: IconBoxSize;
7
+ icon: ReactNode;
8
+ pill?: boolean;
9
+ };
10
+ declare const IconBox: ({ tone, size, icon, pill, className, ...rest }: IconBoxProps) => import("react").JSX.Element;
11
+ export { IconBox };
12
+ export type { IconBoxProps, IconBoxSize, IconBoxTone };
13
+ //# sourceMappingURL=IconBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconBox.d.ts","sourceRoot":"","sources":["../src/IconBox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,KAAK,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;AACjF,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtC,KAAK,YAAY,GAAG,cAAc,CAAC,eAAe,CAAC,GAAG;IACpD,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAiBF,QAAA,MAAM,OAAO,GAAI,gDAA2E,YAAY,gCAcvG,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC;AACnB,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { classNames } from "./classNames";
3
+ const toneClasses = {
4
+ neutral: "bg-neutral-100 text-neutral-700",
5
+ brand: "bg-gradient-to-br from-brand-gradient-from to-brand-gradient-to text-neutral-0",
6
+ artist: "bg-gradient-to-br from-role-artist-from to-role-artist-to text-neutral-0",
7
+ studio: "bg-gradient-to-br from-role-studio-from to-role-studio-to text-neutral-0",
8
+ pro: "bg-gradient-to-br from-role-pro-from to-role-pro-to text-neutral-0",
9
+ success: "bg-success-bg text-success-text",
10
+ };
11
+ const sizeClasses = {
12
+ sm: "size-8 [&_svg]:size-4",
13
+ md: "size-10 [&_svg]:size-5",
14
+ lg: "size-[var(--size-role-icon-box)] [&_svg]:size-10",
15
+ };
16
+ const IconBox = ({ tone = "neutral", size = "md", icon, pill = false, className, ...rest }) => (_jsx("span", { "aria-hidden": true, className: classNames("grid shrink-0 place-items-center", pill ? "rounded-full" : "rounded-md", toneClasses[tone], sizeClasses[size], className), ...rest, children: icon }));
17
+ export { IconBox };
18
+ //# sourceMappingURL=IconBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconBox.js","sourceRoot":"","sources":["../src/IconBox.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAY1C,MAAM,WAAW,GAAgC;IAC/C,OAAO,EAAE,iCAAiC;IAC1C,KAAK,EAAE,gFAAgF;IACvF,MAAM,EAAE,0EAA0E;IAClF,MAAM,EAAE,0EAA0E;IAClF,GAAG,EAAE,oEAAoE;IACzE,OAAO,EAAE,iCAAiC;CAC3C,CAAC;AAEF,MAAM,WAAW,GAAgC;IAC/C,EAAE,EAAE,uBAAuB;IAC3B,EAAE,EAAE,wBAAwB;IAC5B,EAAE,EAAE,kDAAkD;CACvD,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAgB,EAAE,EAAE,CAAC,CAC3G,oCAEE,SAAS,EAAE,UAAU,CACnB,kCAAkC,EAClC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,EACpC,WAAW,CAAC,IAAI,CAAC,EACjB,WAAW,CAAC,IAAI,CAAC,EACjB,SAAS,CACV,KACG,IAAI,YAEP,IAAI,GACA,CACR,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from "react";
2
+ import type { ButtonSize, ButtonVariant } from "./buttonStyles";
3
+ type IconButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
4
+ icon: ReactNode;
5
+ label: string;
6
+ variant?: ButtonVariant;
7
+ size?: ButtonSize;
8
+ };
9
+ declare const IconButton: ({ icon, label, variant, size, className, ...rest }: IconButtonProps) => import("react").JSX.Element;
10
+ export { IconButton };
11
+ export type { IconButtonProps };
12
+ //# sourceMappingURL=IconButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../src/IconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEhE,KAAK,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,UAAU,CAAC,GAAG;IACjF,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB,CAAC;AAQF,QAAA,MAAM,UAAU,GAAI,oDAOjB,eAAe,gCAWjB,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Button } from "./Button";
3
+ const iconSizeClasses = {
4
+ sm: "size-[var(--size-btn-sm)] p-0",
5
+ md: "size-[var(--size-btn-md)] p-0",
6
+ lg: "size-[var(--size-btn-lg)] p-0",
7
+ };
8
+ const IconButton = ({ icon, label, variant = "ghost", size = "md", className, ...rest }) => (_jsx(Button, { "aria-label": label, variant: variant, size: size, shape: "pill", className: `${iconSizeClasses[size]} ${className ?? ""}`, ...rest, children: icon }));
9
+ export { IconButton };
10
+ //# sourceMappingURL=IconButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.js","sourceRoot":"","sources":["../src/IconButton.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAUlC,MAAM,eAAe,GAA+B;IAClD,EAAE,EAAE,+BAA+B;IACnC,EAAE,EAAE,+BAA+B;IACnC,EAAE,EAAE,+BAA+B;CACpC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,EAClB,IAAI,EACJ,KAAK,EACL,OAAO,GAAG,OAAO,EACjB,IAAI,GAAG,IAAI,EACX,SAAS,EACT,GAAG,IAAI,EACS,EAAE,EAAE,CAAC,CACrB,KAAC,MAAM,kBACO,KAAK,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,KAAK,EAAC,MAAM,EACZ,SAAS,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,SAAS,IAAI,EAAE,EAAE,KACpD,IAAI,YAEP,IAAI,GACE,CACV,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { InputHTMLAttributes, ReactNode } from "react";
2
+ type InputProps = InputHTMLAttributes<HTMLInputElement> & {
3
+ invalid?: boolean;
4
+ leadingIcon?: ReactNode;
5
+ trailingIcon?: ReactNode;
6
+ };
7
+ declare const Input: import("react").ForwardRefExoticComponent<InputHTMLAttributes<HTMLInputElement> & {
8
+ invalid?: boolean;
9
+ leadingIcon?: ReactNode;
10
+ trailingIcon?: ReactNode;
11
+ } & import("react").RefAttributes<HTMLInputElement>>;
12
+ export { Input };
13
+ export type { InputProps };
14
+ //# sourceMappingURL=Input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../src/Input.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAG5D,KAAK,UAAU,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,GAAG;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B,CAAC;AAEF,QAAA,MAAM,KAAK;cALC,OAAO;kBACH,SAAS;mBACR,SAAS;oDA6CxB,CAAC;AAEH,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,YAAY,EAAE,UAAU,EAAE,CAAC"}
package/dist/Input.js ADDED
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { classNames } from "./classNames";
4
+ const Input = forwardRef(function Input({ invalid = false, leadingIcon, trailingIcon, className, ...rest }, ref) {
5
+ const input = (_jsx("input", { ref: ref, "aria-invalid": invalid || undefined, className: classNames("h-[var(--size-btn-md)] w-full rounded-md border-control bg-neutral-0 px-4 text-sm text-neutral-900 placeholder:text-neutral-400", "focus:outline-none focus:shadow-focus", "disabled:bg-neutral-100 disabled:text-neutral-400", Boolean(leadingIcon) && "pl-11", Boolean(trailingIcon) && "pr-11", invalid
6
+ ? "border-error focus:border-error"
7
+ : "border-neutral-200 focus:border-brand-primary", className), ...rest }));
8
+ if (!leadingIcon && !trailingIcon) {
9
+ return input;
10
+ }
11
+ return (_jsxs("span", { className: "relative block w-full", children: [leadingIcon ? (_jsx("span", { className: "pointer-events-none absolute inset-y-0 left-4 grid place-items-center text-neutral-400", children: leadingIcon })) : null, input, trailingIcon ? (_jsx("span", { className: "absolute inset-y-0 right-4 grid place-items-center text-neutral-500", children: trailingIcon })) : null] }));
12
+ });
13
+ export { Input };
14
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","sourceRoot":"","sources":["../src/Input.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQ1C,MAAM,KAAK,GAAG,UAAU,CAA+B,SAAS,KAAK,CACnE,EAAE,OAAO,GAAG,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAClE,GAAG;IAEH,MAAM,KAAK,GAAG,CACZ,gBACE,GAAG,EAAE,GAAG,kBACM,OAAO,IAAI,SAAS,EAClC,SAAS,EAAE,UAAU,CACnB,iIAAiI,EACjI,uCAAuC,EACvC,mDAAmD,EACnD,OAAO,CAAC,WAAW,CAAC,IAAI,OAAO,EAC/B,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,EAChC,OAAO;YACL,CAAC,CAAC,iCAAiC;YACnC,CAAC,CAAC,+CAA+C,EACnD,SAAS,CACV,KACG,IAAI,GACR,CACH,CAAC;IAEF,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,gBAAM,SAAS,EAAC,uBAAuB,aACpC,WAAW,CAAC,CAAC,CAAC,CACb,eAAM,SAAS,EAAC,wFAAwF,YACrG,WAAW,GACP,CACR,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,EACL,YAAY,CAAC,CAAC,CAAC,CACd,eAAM,SAAS,EAAC,qEAAqE,YAClF,YAAY,GACR,CACR,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { HTMLAttributes, ReactNode } from "react";
2
+ type KeyValueProps = HTMLAttributes<HTMLDivElement> & {
3
+ label: ReactNode;
4
+ value: ReactNode;
5
+ };
6
+ declare const KeyValue: ({ label, value, className, ...rest }: KeyValueProps) => import("react").JSX.Element;
7
+ export { KeyValue };
8
+ export type { KeyValueProps };
9
+ //# sourceMappingURL=KeyValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyValue.d.ts","sourceRoot":"","sources":["../src/KeyValue.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,KAAK,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IACpD,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,sCAAsC,aAAa,gCAWpE,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { classNames } from "./classNames";
3
+ const KeyValue = ({ label, value, className, ...rest }) => (_jsxs("div", { className: classNames("flex flex-col gap-1 sm:flex-row sm:items-start sm:justify-between sm:gap-4", className), ...rest, children: [_jsx("dt", { className: "text-sm text-neutral-500", children: label }), _jsx("dd", { className: "text-sm font-semibold text-neutral-900 sm:text-right", children: value })] }));
4
+ export { KeyValue };
5
+ //# sourceMappingURL=KeyValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyValue.js","sourceRoot":"","sources":["../src/KeyValue.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAO1C,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,EAAiB,EAAE,EAAE,CAAC,CACxE,eACE,SAAS,EAAE,UAAU,CACnB,4EAA4E,EAC5E,SAAS,CACV,KACG,IAAI,aAER,aAAI,SAAS,EAAC,0BAA0B,YAAE,KAAK,GAAM,EACrD,aAAI,SAAS,EAAC,sDAAsD,YAAE,KAAK,GAAM,IAC7E,CACP,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { AnchorHTMLAttributes, ReactNode } from "react";
2
+ import type { ButtonShape, ButtonSize, ButtonVariant } from "./buttonStyles";
3
+ type LinkButtonProps = AnchorHTMLAttributes<HTMLAnchorElement> & {
4
+ variant?: ButtonVariant;
5
+ size?: ButtonSize;
6
+ shape?: ButtonShape;
7
+ leadingIcon?: ReactNode;
8
+ trailingIcon?: ReactNode;
9
+ block?: boolean;
10
+ };
11
+ declare const LinkButton: ({ variant, size, shape, leadingIcon, trailingIcon, block, className, children, ...rest }: LinkButtonProps) => import("react").JSX.Element;
12
+ export { LinkButton };
13
+ export type { LinkButtonProps };
14
+ //# sourceMappingURL=LinkButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkButton.d.ts","sourceRoot":"","sources":["../src/LinkButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE7E,KAAK,eAAe,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IAC/D,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,0FAUjB,eAAe,gCASjB,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { buttonClassName } from "./buttonStyles";
3
+ const LinkButton = ({ variant = "primary", size = "md", shape = "default", leadingIcon, trailingIcon, block = false, className, children, ...rest }) => (_jsxs("a", { className: buttonClassName({ variant, size, shape, block, className }), ...rest, children: [leadingIcon, children, trailingIcon] }));
4
+ export { LinkButton };
5
+ //# sourceMappingURL=LinkButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkButton.js","sourceRoot":"","sources":["../src/LinkButton.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAYjD,MAAM,UAAU,GAAG,CAAC,EAClB,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,IAAI,EACX,KAAK,GAAG,SAAS,EACjB,WAAW,EACX,YAAY,EACZ,KAAK,GAAG,KAAK,EACb,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACS,EAAE,EAAE,CAAC,CACrB,aACE,SAAS,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,KAClE,IAAI,aAEP,WAAW,EACX,QAAQ,EACR,YAAY,IACX,CACL,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { ReactNode } from "react";
2
+ type LinkTabItem = {
3
+ href: string;
4
+ label: ReactNode;
5
+ count?: number;
6
+ disabled?: boolean;
7
+ };
8
+ type LinkTabsProps = {
9
+ items: readonly LinkTabItem[];
10
+ activeHref: string;
11
+ label: string;
12
+ className?: string;
13
+ };
14
+ declare const LinkTabs: ({ items, activeHref, label, className }: LinkTabsProps) => import("react").JSX.Element;
15
+ export { LinkTabs };
16
+ export type { LinkTabItem, LinkTabsProps };
17
+ //# sourceMappingURL=LinkTabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkTabs.d.ts","sourceRoot":"","sources":["../src/LinkTabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,yCAAyC,aAAa,gCAmCvE,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { classNames } from "./classNames";
3
+ const LinkTabs = ({ items, activeHref, label, className }) => (_jsx("nav", { "aria-label": label, className: classNames("flex gap-1 border-b border-neutral-200", className), children: items.map((item) => {
4
+ const active = activeHref === item.href || activeHref.startsWith(`${item.href}/`);
5
+ return (_jsxs("a", { href: item.href, "aria-current": active ? "page" : undefined, "aria-disabled": item.disabled || undefined, onClick: item.disabled ? (event) => event.preventDefault() : undefined, className: classNames("-mb-px flex items-center gap-2 border-b-2 px-4 py-3 text-sm font-semibold transition focus-visible:outline-none focus-visible:shadow-focus", active
6
+ ? "border-brand-primary text-neutral-900"
7
+ : "border-transparent text-neutral-500 hover:text-neutral-900", item.disabled && "cursor-not-allowed opacity-50"), children: [item.label, item.count !== undefined ? (_jsx("span", { className: classNames("grid min-w-[var(--size-nav-badge-min)] place-items-center rounded-full px-2 py-0.5 text-overline font-bold", active ? "bg-brand-primary text-neutral-0" : "bg-neutral-200 text-neutral-600"), children: item.count })) : null] }, item.href));
8
+ }) }));
9
+ export { LinkTabs };
10
+ //# sourceMappingURL=LinkTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkTabs.js","sourceRoot":"","sources":["../src/LinkTabs.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAgB1C,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAiB,EAAE,EAAE,CAAC,CAC3E,4BAAiB,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,wCAAwC,EAAE,SAAS,CAAC,YAC/F,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,UAAU,KAAK,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAElF,OAAO,CACL,aAEE,IAAI,EAAE,IAAI,CAAC,IAAI,kBACD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,mBAC1B,IAAI,CAAC,QAAQ,IAAI,SAAS,EACzC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,SAAS,EACtE,SAAS,EAAE,UAAU,CACnB,4IAA4I,EAC5I,MAAM;gBACJ,CAAC,CAAC,uCAAuC;gBACzC,CAAC,CAAC,4DAA4D,EAChE,IAAI,CAAC,QAAQ,IAAI,+BAA+B,CACjD,aAEA,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAC1B,eACE,SAAS,EAAE,UAAU,CACnB,4GAA4G,EAC5G,MAAM,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,iCAAiC,CAC/E,YAEA,IAAI,CAAC,KAAK,GACN,CACR,CAAC,CAAC,CAAC,IAAI,KAvBH,IAAI,CAAC,IAAI,CAwBZ,CACL,CAAC;IACJ,CAAC,CAAC,GACE,CACP,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,16 @@
1
+ type MenuSelectOption = {
2
+ id: string;
3
+ label: string;
4
+ disabled?: boolean;
5
+ };
6
+ type MenuSelectProps = {
7
+ label: string;
8
+ options: readonly MenuSelectOption[];
9
+ selectedId?: string;
10
+ onSelect: (id: string) => void;
11
+ className?: string;
12
+ };
13
+ declare const MenuSelect: ({ label, options, selectedId, onSelect, className }: MenuSelectProps) => import("react").JSX.Element;
14
+ export { MenuSelect };
15
+ export type { MenuSelectOption, MenuSelectProps };
16
+ //# sourceMappingURL=MenuSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuSelect.d.ts","sourceRoot":"","sources":["../src/MenuSelect.tsx"],"names":[],"mappings":"AAMA,KAAK,gBAAgB,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,QAAA,MAAM,UAAU,GAAI,qDAAqD,eAAe,gCA8EvF,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,CAAC;AACtB,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,41 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useId, useRef, useState } from "react";
4
+ import { ChevronDownIcon } from "./icons";
5
+ import { classNames } from "./classNames";
6
+ const MenuSelect = ({ label, options, selectedId, onSelect, className }) => {
7
+ const menuId = useId();
8
+ const rootRef = useRef(null);
9
+ const triggerRef = useRef(null);
10
+ const [open, setOpen] = useState(false);
11
+ useEffect(() => {
12
+ if (!open) {
13
+ return undefined;
14
+ }
15
+ const handlePointer = (event) => {
16
+ if (rootRef.current && !rootRef.current.contains(event.target)) {
17
+ setOpen(false);
18
+ }
19
+ };
20
+ const handleKey = (event) => {
21
+ if (event.key === "Escape") {
22
+ setOpen(false);
23
+ triggerRef.current?.focus();
24
+ }
25
+ };
26
+ document.addEventListener("mousedown", handlePointer);
27
+ document.addEventListener("keydown", handleKey);
28
+ return () => {
29
+ document.removeEventListener("mousedown", handlePointer);
30
+ document.removeEventListener("keydown", handleKey);
31
+ };
32
+ }, [open]);
33
+ const select = (id) => {
34
+ onSelect(id);
35
+ setOpen(false);
36
+ triggerRef.current?.focus();
37
+ };
38
+ return (_jsxs("div", { ref: rootRef, className: classNames("relative inline-flex", className), children: [_jsxs("button", { ref: triggerRef, type: "button", "aria-controls": menuId, "aria-expanded": open, "aria-haspopup": "menu", onClick: () => setOpen((current) => !current), className: "flex h-[var(--size-btn-sm)] items-center gap-2 rounded-lg border border-neutral-200 bg-neutral-0 px-4 text-label font-medium text-neutral-700 transition hover:bg-neutral-50 focus-visible:outline-none focus-visible:shadow-focus", children: [label, _jsx(ChevronDownIcon, { "aria-hidden": true, className: classNames("size-4 text-neutral-500 transition-transform", open && "rotate-180") })] }), open ? (_jsx("div", { id: menuId, role: "menu", className: "absolute left-0 top-full z-20 mt-1 flex w-[var(--size-mobile-menu)] flex-col rounded-lg border border-neutral-200 bg-neutral-0 p-1 shadow-elevated", children: options.map((option) => (_jsx("button", { type: "button", role: "menuitemradio", "aria-checked": option.id === selectedId, disabled: option.disabled, onClick: () => select(option.id), className: classNames("rounded-md px-3 py-2 text-left text-label transition hover:bg-neutral-50 focus-visible:outline-none focus-visible:shadow-focus disabled:cursor-not-allowed disabled:opacity-50", option.id === selectedId ? "font-semibold text-neutral-900" : "text-neutral-700"), children: option.label }, option.id))) })) : null] }));
39
+ };
40
+ export { MenuSelect };
41
+ //# sourceMappingURL=MenuSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuSelect.js","sourceRoot":"","sources":["../src/MenuSelect.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from "react";
2
+ type ModalProps = {
3
+ open: boolean;
4
+ onClose: () => void;
5
+ closeLabel: string;
6
+ labelledBy?: string;
7
+ describedBy?: string;
8
+ panelClassName?: string;
9
+ children: ReactNode;
10
+ };
11
+ declare const Modal: ({ open, onClose, closeLabel, labelledBy, describedBy, panelClassName, children, }: ModalProps) => import("react").ReactPortal | null;
12
+ export { Modal };
13
+ export type { ModalProps };
14
+ //# sourceMappingURL=Modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../src/Modal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAWF,QAAA,MAAM,KAAK,GAAI,mFAQZ,UAAU,uCAiFZ,CAAC;AAEF,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,YAAY,EAAE,UAAU,EAAE,CAAC"}
package/dist/Modal.js ADDED
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { createPortal } from "react-dom";
5
+ import { classNames } from "./classNames";
6
+ const focusableSelector = [
7
+ "a[href]",
8
+ "button:not([disabled])",
9
+ "input:not([disabled])",
10
+ "select:not([disabled])",
11
+ "textarea:not([disabled])",
12
+ "[tabindex]:not([tabindex='-1'])",
13
+ ].join(",");
14
+ const Modal = ({ open, onClose, closeLabel, labelledBy, describedBy, panelClassName, children, }) => {
15
+ const [mounted, setMounted] = useState(false);
16
+ const panelRef = useRef(null);
17
+ useEffect(() => setMounted(true), []);
18
+ useEffect(() => {
19
+ if (!open) {
20
+ return;
21
+ }
22
+ const previousOverflow = document.body.style.overflow;
23
+ const previousFocus = document.activeElement;
24
+ const panel = panelRef.current;
25
+ document.body.style.overflow = "hidden";
26
+ panel?.querySelector(focusableSelector)?.focus();
27
+ const handleKeyDown = (event) => {
28
+ if (event.key === "Escape") {
29
+ onClose();
30
+ }
31
+ if (event.key !== "Tab" || !panel) {
32
+ return;
33
+ }
34
+ const focusableElements = Array.from(panel.querySelectorAll(focusableSelector));
35
+ const firstElement = focusableElements[0];
36
+ const lastElement = focusableElements.at(-1);
37
+ if (event.shiftKey && document.activeElement === firstElement) {
38
+ event.preventDefault();
39
+ lastElement?.focus();
40
+ }
41
+ else if (!event.shiftKey && document.activeElement === lastElement) {
42
+ event.preventDefault();
43
+ firstElement?.focus();
44
+ }
45
+ };
46
+ document.addEventListener("keydown", handleKeyDown);
47
+ return () => {
48
+ document.body.style.overflow = previousOverflow;
49
+ document.removeEventListener("keydown", handleKeyDown);
50
+ previousFocus?.focus();
51
+ };
52
+ }, [open, onClose]);
53
+ if (!mounted || !open) {
54
+ return null;
55
+ }
56
+ return createPortal(_jsxs("div", { className: "fixed inset-0 z-50 flex items-center justify-center p-4", role: "dialog", "aria-modal": "true", "aria-labelledby": labelledBy, "aria-describedby": describedBy, children: [_jsx("button", { type: "button", "aria-label": closeLabel, onClick: onClose, className: "absolute inset-0 bg-neutral-900/50" }), _jsx("div", { ref: panelRef, className: classNames("relative z-10 flex w-full flex-col rounded-xl bg-neutral-0 shadow-xl", panelClassName ?? "max-w-lg p-8"), children: children })] }), document.body);
57
+ };
58
+ export { Modal };
59
+ //# sourceMappingURL=Modal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../src/Modal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { SelectHTMLAttributes } from "react";
2
+ type NativeSelectProps = SelectHTMLAttributes<HTMLSelectElement> & {
3
+ invalid?: boolean;
4
+ };
5
+ declare const NativeSelect: ({ invalid, className, children, ...rest }: NativeSelectProps) => import("react").JSX.Element;
6
+ export { NativeSelect };
7
+ export type { NativeSelectProps };
8
+ //# sourceMappingURL=NativeSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeSelect.d.ts","sourceRoot":"","sources":["../src/NativeSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAIlD,KAAK,iBAAiB,GAAG,oBAAoB,CAAC,iBAAiB,CAAC,GAAG;IACjE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,QAAA,MAAM,YAAY,GAAI,2CAKnB,iBAAiB,gCAsBnB,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ChevronDownIcon } from "./icons";
3
+ import { classNames } from "./classNames";
4
+ const NativeSelect = ({ invalid = false, className, children, ...rest }) => (_jsxs("span", { className: "relative block w-full", children: [_jsx("select", { "aria-invalid": invalid || undefined, className: classNames("h-[var(--size-btn-md)] w-full appearance-none rounded-md border-control bg-neutral-0 px-4 pr-10 text-sm text-neutral-900", "focus:outline-none focus:shadow-focus", "disabled:bg-neutral-100 disabled:text-neutral-400", invalid
5
+ ? "border-error focus:border-error"
6
+ : "border-neutral-200 focus:border-brand-primary", className), ...rest, children: children }), _jsx(ChevronDownIcon, { "aria-hidden": true, className: "pointer-events-none absolute right-3 top-1/2 size-4 -translate-y-1/2 text-neutral-400" })] }));
7
+ export { NativeSelect };
8
+ //# sourceMappingURL=NativeSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeSelect.js","sourceRoot":"","sources":["../src/NativeSelect.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM1C,MAAM,YAAY,GAAG,CAAC,EACpB,OAAO,GAAG,KAAK,EACf,SAAS,EACT,QAAQ,EACR,GAAG,IAAI,EACW,EAAE,EAAE,CAAC,CACvB,gBAAM,SAAS,EAAC,uBAAuB,aACrC,iCACgB,OAAO,IAAI,SAAS,EAClC,SAAS,EAAE,UAAU,CACnB,0HAA0H,EAC1H,uCAAuC,EACvC,mDAAmD,EACnD,OAAO;gBACL,CAAC,CAAC,iCAAiC;gBACnC,CAAC,CAAC,+CAA+C,EACnD,SAAS,CACV,KACG,IAAI,YAEP,QAAQ,GACF,EACT,KAAC,eAAe,yBAEd,SAAS,EAAC,uFAAuF,GACjG,IACG,CACR,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ReactNode } from "react";
2
+ type NavigationListTone = "brand" | "inverted";
3
+ type NavigationListItem = {
4
+ href: string;
5
+ label: ReactNode;
6
+ badge?: ReactNode;
7
+ leadingIcon?: ReactNode;
8
+ exact?: boolean;
9
+ };
10
+ type NavigationListProps = {
11
+ items: readonly NavigationListItem[];
12
+ activeHref?: string;
13
+ label: string;
14
+ tone?: NavigationListTone;
15
+ className?: string;
16
+ };
17
+ declare const NavigationList: ({ items, activeHref, label, tone, className, }: NavigationListProps) => import("react").JSX.Element;
18
+ export { NavigationList };
19
+ export type { NavigationListItem, NavigationListProps, NavigationListTone };
20
+ //# sourceMappingURL=NavigationList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavigationList.d.ts","sourceRoot":"","sources":["../src/NavigationList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,KAAK,kBAAkB,GAAG,OAAO,GAAG,UAAU,CAAC;AAE/C,KAAK,kBAAkB,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAYF,QAAA,MAAM,cAAc,GAAI,gDAMrB,mBAAmB,gCAmCrB,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { classNames } from "./classNames";
3
+ const activeClasses = {
4
+ brand: "bg-role-studio-bg text-role-studio-text",
5
+ inverted: "bg-surface-inverted text-neutral-0",
6
+ };
7
+ const inactiveClasses = {
8
+ brand: "text-neutral-600 hover:bg-neutral-100 hover:text-neutral-900",
9
+ inverted: "text-neutral-300 hover:bg-neutral-0/10 hover:text-neutral-0",
10
+ };
11
+ const NavigationList = ({ items, activeHref, label, tone = "brand", className, }) => (_jsx("nav", { "aria-label": label, className: classNames("flex flex-col gap-1", className), children: items.map((item) => {
12
+ const target = item.href.split("#")[0]?.split("?")[0] || "/";
13
+ const active = Boolean(activeHref
14
+ && !item.href.includes("#")
15
+ && (item.exact || target === "/"
16
+ ? activeHref === target
17
+ : activeHref === target || activeHref.startsWith(`${target}/`)));
18
+ return (_jsxs("a", { href: item.href, "aria-current": active ? "page" : undefined, className: classNames("flex items-center gap-3 rounded-lg px-4 py-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:shadow-focus", active
19
+ ? activeClasses[tone]
20
+ : inactiveClasses[tone]), children: [item.leadingIcon ? _jsx("span", { "aria-hidden": true, className: "shrink-0", children: item.leadingIcon }) : null, _jsx("span", { className: "flex-1", children: item.label }), item.badge ? (_jsx("span", { className: "grid min-w-[var(--size-nav-badge-min)] place-items-center rounded-full bg-error px-2 py-0.5 text-overline font-bold text-neutral-0", children: item.badge })) : null] }, item.href));
21
+ }) }));
22
+ export { NavigationList };
23
+ //# sourceMappingURL=NavigationList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NavigationList.js","sourceRoot":"","sources":["../src/NavigationList.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAoB1C,MAAM,aAAa,GAAuC;IACxD,KAAK,EAAE,yCAAyC;IAChD,QAAQ,EAAE,oCAAoC;CAC/C,CAAC;AAEF,MAAM,eAAe,GAAuC;IAC1D,KAAK,EAAE,8DAA8D;IACrE,QAAQ,EAAE,6DAA6D;CACxE,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,EACtB,KAAK,EACL,UAAU,EACV,KAAK,EACL,IAAI,GAAG,OAAO,EACd,SAAS,GACW,EAAE,EAAE,CAAC,CACzB,4BAAiB,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,qBAAqB,EAAE,SAAS,CAAC,YAC5E,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;QAC7D,MAAM,MAAM,GAAG,OAAO,CACpB,UAAU;eACP,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;eACxB,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,GAAG;gBAC9B,CAAC,CAAC,UAAU,KAAK,MAAM;gBACvB,CAAC,CAAC,UAAU,KAAK,MAAM,IAAI,UAAU,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAClE,CAAC;QAEF,OAAO,CACL,aAEE,IAAI,EAAE,IAAI,CAAC,IAAI,kBACD,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EACzC,SAAS,EAAE,UAAU,CACnB,0IAA0I,EAC1I,MAAM;gBACJ,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC;gBACrB,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAC1B,aAEA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,oCAAkB,SAAS,EAAC,UAAU,YAAE,IAAI,CAAC,WAAW,GAAQ,CAAC,CAAC,CAAC,IAAI,EAC3F,eAAM,SAAS,EAAC,QAAQ,YAAE,IAAI,CAAC,KAAK,GAAQ,EAC3C,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACZ,eAAM,SAAS,EAAC,oIAAoI,YACjJ,IAAI,CAAC,KAAK,GACN,CACR,CAAC,CAAC,CAAC,IAAI,KAhBH,IAAI,CAAC,IAAI,CAiBZ,CACL,CAAC;IACJ,CAAC,CAAC,GACE,CACP,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { HTMLAttributes } from "react";
2
+ type ProgressProps = HTMLAttributes<HTMLDivElement> & {
3
+ value: number;
4
+ label: string;
5
+ };
6
+ declare const Progress: ({ value, label, className, ...rest }: ProgressProps) => import("react").JSX.Element;
7
+ export { Progress };
8
+ export type { ProgressProps };
9
+ //# sourceMappingURL=Progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.d.ts","sourceRoot":"","sources":["../src/Progress.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAG5C,KAAK,aAAa,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAI,sCAAsC,aAAa,gCAgBpE,CAAC;AAEF,OAAO,EAAE,QAAQ,EAAE,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,CAAC"}