@studiocubics/components 0.0.3 → 0.0.4

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 (237) hide show
  1. package/README.md +2 -0
  2. package/dist/Cards/Card/Card.js +1 -44
  3. package/dist/Cards/Card/Card.js.map +1 -1
  4. package/dist/Cards/Card/Card.module.css.js +1 -3
  5. package/dist/Cards/Card/Card.module.css.js.map +1 -1
  6. package/dist/Cards/CollectionItemCard/CollectionItemCard.js +1 -47
  7. package/dist/Cards/CollectionItemCard/CollectionItemCard.js.map +1 -1
  8. package/dist/Cards/CollectionItemCard/CollectionItemCard.module.css.js +1 -3
  9. package/dist/Cards/CollectionItemCard/CollectionItemCard.module.css.js.map +1 -1
  10. package/dist/Cards/CollectionItemCard/CollectionItemCardActions.js +1 -33
  11. package/dist/Cards/CollectionItemCard/CollectionItemCardActions.js.map +1 -1
  12. package/dist/Cards/GlassCard/GlassCard.js +1 -51
  13. package/dist/Cards/GlassCard/GlassCard.js.map +1 -1
  14. package/dist/Cards/GlassCard/GlassCard.module.css.js +1 -3
  15. package/dist/Cards/GlassCard/GlassCard.module.css.js.map +1 -1
  16. package/dist/Display/Accordion/Accordion.js +1 -27
  17. package/dist/Display/Accordion/Accordion.js.map +1 -1
  18. package/dist/Display/Accordion/Accordion.module.css.js +1 -3
  19. package/dist/Display/Accordion/Accordion.module.css.js.map +1 -1
  20. package/dist/Display/Accordion/AccordionItem.js +1 -55
  21. package/dist/Display/Accordion/AccordionItem.js.map +1 -1
  22. package/dist/Display/Chip/Chip.js +1 -42
  23. package/dist/Display/Chip/Chip.js.map +1 -1
  24. package/dist/Display/Chip/Chip.module.css.js +1 -3
  25. package/dist/Display/Chip/Chip.module.css.js.map +1 -1
  26. package/dist/Display/IdentityDisplay/IdentityDisplay.js +1 -35
  27. package/dist/Display/IdentityDisplay/IdentityDisplay.js.map +1 -1
  28. package/dist/Display/IdentityDisplay/IdentityDisplay.module.css.js +1 -3
  29. package/dist/Display/IdentityDisplay/IdentityDisplay.module.css.js.map +1 -1
  30. package/dist/Display/InputErrors/InputErrors.js +1 -24
  31. package/dist/Display/InputErrors/InputErrors.js.map +1 -1
  32. package/dist/Display/InputErrors/InputErrors.module.css.js +1 -3
  33. package/dist/Display/InputErrors/InputErrors.module.css.js.map +1 -1
  34. package/dist/Display/Kbd/Kbd.js +1 -18
  35. package/dist/Display/Kbd/Kbd.js.map +1 -1
  36. package/dist/Display/Kbd/Kbd.module.css.js +1 -3
  37. package/dist/Display/Kbd/Kbd.module.css.js.map +1 -1
  38. package/dist/Display/Kbd/buttonList.js +1 -197
  39. package/dist/Display/Kbd/buttonList.js.map +1 -1
  40. package/dist/Display/LabeledValue/LabeledValue.js +1 -10
  41. package/dist/Display/LabeledValue/LabeledValue.js.map +1 -1
  42. package/dist/Display/LabeledValue/LabeledValue.module.css.js +1 -3
  43. package/dist/Display/LabeledValue/LabeledValue.module.css.js.map +1 -1
  44. package/dist/Display/List/List.js +1 -95
  45. package/dist/Display/List/List.js.map +1 -1
  46. package/dist/Display/List/List.module.css.js +1 -3
  47. package/dist/Display/List/List.module.css.js.map +1 -1
  48. package/dist/Display/PasswordStrength/PasswordStrength.js +1 -16
  49. package/dist/Display/PasswordStrength/PasswordStrength.js.map +1 -1
  50. package/dist/Display/PasswordStrength/PasswordStrength.module.css.js +1 -3
  51. package/dist/Display/PasswordStrength/PasswordStrength.module.css.js.map +1 -1
  52. package/dist/Display/PasswordStrength/usePasswordStrength.js +1 -48
  53. package/dist/Display/PasswordStrength/usePasswordStrength.js.map +1 -1
  54. package/dist/Display/Skeleton/Skeleton.js +1 -10
  55. package/dist/Display/Skeleton/Skeleton.js.map +1 -1
  56. package/dist/Display/Skeleton/Skeleton.module.css.js +1 -3
  57. package/dist/Display/Skeleton/Skeleton.module.css.js.map +1 -1
  58. package/dist/Display/Toast/Toaster.js +1 -44
  59. package/dist/Display/Toast/Toaster.js.map +1 -1
  60. package/dist/Display/Toast/toast.js +1 -31
  61. package/dist/Display/Toast/toast.js.map +1 -1
  62. package/dist/Display/Tooltip/Tooltip.js +1 -44
  63. package/dist/Display/Tooltip/Tooltip.js.map +1 -1
  64. package/dist/Display/Tooltip/Tooltip.module.css.js +1 -3
  65. package/dist/Display/Tooltip/Tooltip.module.css.js.map +1 -1
  66. package/dist/Display/Tooltip/getArrowDirection.js +1 -47
  67. package/dist/Display/Tooltip/getArrowDirection.js.map +1 -1
  68. package/dist/Display/Tooltip/useTooltip.js +1 -47
  69. package/dist/Display/Tooltip/useTooltip.js.map +1 -1
  70. package/dist/Display/WIP/WIP.d.ts +5 -0
  71. package/dist/Forms/ConfirmationForm/ConfirmationForm.js +1 -11
  72. package/dist/Forms/ConfirmationForm/ConfirmationForm.js.map +1 -1
  73. package/dist/Forms/ConfirmationForm/ConfirmationForm.module.css.js +1 -3
  74. package/dist/Forms/ConfirmationForm/ConfirmationForm.module.css.js.map +1 -1
  75. package/dist/Inputs/Button/Button.js +1 -55
  76. package/dist/Inputs/Button/Button.js.map +1 -1
  77. package/dist/Inputs/Button/Button.module.css.js +1 -3
  78. package/dist/Inputs/Button/Button.module.css.js.map +1 -1
  79. package/dist/Inputs/Checkbox/Checkbox.js +1 -54
  80. package/dist/Inputs/Checkbox/Checkbox.js.map +1 -1
  81. package/dist/Inputs/Checkbox/Checkbox.module.css.js +1 -3
  82. package/dist/Inputs/Checkbox/Checkbox.module.css.js.map +1 -1
  83. package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.js +1 -34
  84. package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.js.map +1 -1
  85. package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.module.css.js +1 -3
  86. package/dist/Inputs/Checkbox/CheckboxGroup/CheckboxGroup.module.css.js.map +1 -1
  87. package/dist/Inputs/Checkbox/CheckboxSelectAll.js +1 -18
  88. package/dist/Inputs/Checkbox/CheckboxSelectAll.js.map +1 -1
  89. package/dist/Inputs/PasswordInput/PasswordInput.js +1 -44
  90. package/dist/Inputs/PasswordInput/PasswordInput.js.map +1 -1
  91. package/dist/Inputs/PasswordInput/PasswordInput.module.css.js +1 -3
  92. package/dist/Inputs/PasswordInput/PasswordInput.module.css.js.map +1 -1
  93. package/dist/Inputs/Select/Select.js +1 -25
  94. package/dist/Inputs/Select/Select.js.map +1 -1
  95. package/dist/Inputs/Select/Select.module.css.js +1 -3
  96. package/dist/Inputs/Select/Select.module.css.js.map +1 -1
  97. package/dist/Inputs/Switch/Switch.js +1 -80
  98. package/dist/Inputs/Switch/Switch.js.map +1 -1
  99. package/dist/Inputs/Switch/Switch.module.css.js +1 -3
  100. package/dist/Inputs/Switch/Switch.module.css.js.map +1 -1
  101. package/dist/Inputs/TextAreaInput/TextAreaInput.js +1 -29
  102. package/dist/Inputs/TextAreaInput/TextAreaInput.js.map +1 -1
  103. package/dist/Inputs/TextAreaInput/TextAreaInput.module.css.js +1 -3
  104. package/dist/Inputs/TextAreaInput/TextAreaInput.module.css.js.map +1 -1
  105. package/dist/Inputs/TextInput/TextInput.js +1 -22
  106. package/dist/Inputs/TextInput/TextInput.js.map +1 -1
  107. package/dist/Inputs/TextInput/TextInput.module.css.js +1 -3
  108. package/dist/Inputs/TextInput/TextInput.module.css.js.map +1 -1
  109. package/dist/Inputs/ThemeToggle/ThemeToggleListItem.js +1 -30
  110. package/dist/Inputs/ThemeToggle/ThemeToggleListItem.js.map +1 -1
  111. package/dist/Layout/Dialog/Dialog.js +1 -74
  112. package/dist/Layout/Dialog/Dialog.js.map +1 -1
  113. package/dist/Layout/Dialog/Dialog.module.css.js +1 -3
  114. package/dist/Layout/Dialog/Dialog.module.css.js.map +1 -1
  115. package/dist/Layout/Drawer/Drawer.d.ts +1 -1
  116. package/dist/Layout/Drawer/Drawer.js +1 -38
  117. package/dist/Layout/Drawer/Drawer.js.map +1 -1
  118. package/dist/Layout/Drawer/Drawer.module.css.js +1 -3
  119. package/dist/Layout/Drawer/Drawer.module.css.js.map +1 -1
  120. package/dist/Layout/PageLayout/PageLayout.js +1 -24
  121. package/dist/Layout/PageLayout/PageLayout.js.map +1 -1
  122. package/dist/Layout/PageLayout/PageLayout.module.css.js +1 -3
  123. package/dist/Layout/PageLayout/PageLayout.module.css.js.map +1 -1
  124. package/dist/Layout/PageLayoutPagination/PageLayoutPagination.js +1 -12
  125. package/dist/Layout/PageLayoutPagination/PageLayoutPagination.js.map +1 -1
  126. package/dist/Layout/PageLayoutPagination/PageLayoutPagination.module.css.js +1 -3
  127. package/dist/Layout/PageLayoutPagination/PageLayoutPagination.module.css.js.map +1 -1
  128. package/dist/Layout/PageLayoutTabs/PageLayoutTabs.js +1 -21
  129. package/dist/Layout/PageLayoutTabs/PageLayoutTabs.js.map +1 -1
  130. package/dist/Layout/PageLayoutTabs/PageLayoutTabs.module.css.js +1 -3
  131. package/dist/Layout/PageLayoutTabs/PageLayoutTabs.module.css.js.map +1 -1
  132. package/dist/Layout/Popover/Popover.js +1 -102
  133. package/dist/Layout/Popover/Popover.js.map +1 -1
  134. package/dist/Layout/Popover/Popover.module.css.js +1 -3
  135. package/dist/Layout/Popover/Popover.module.css.js.map +1 -1
  136. package/dist/Layout/SectionWrapper/SectionWrapper.js +1 -10
  137. package/dist/Layout/SectionWrapper/SectionWrapper.js.map +1 -1
  138. package/dist/Layout/SectionWrapper/SectionWrapper.module.css.js +1 -3
  139. package/dist/Layout/SectionWrapper/SectionWrapper.module.css.js.map +1 -1
  140. package/dist/Layout/Sidebar/Sidebar.js +1 -24
  141. package/dist/Layout/Sidebar/Sidebar.js.map +1 -1
  142. package/dist/Layout/Sidebar/Sidebar.module.css.js +1 -3
  143. package/dist/Layout/Sidebar/Sidebar.module.css.js.map +1 -1
  144. package/dist/Layout/Sidebar/SidebarBody/SidebarBody.js +1 -13
  145. package/dist/Layout/Sidebar/SidebarBody/SidebarBody.js.map +1 -1
  146. package/dist/Layout/Sidebar/SidebarBody/SidebarBody.module.css.js +1 -3
  147. package/dist/Layout/Sidebar/SidebarBody/SidebarBody.module.css.js.map +1 -1
  148. package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.js +1 -13
  149. package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.js.map +1 -1
  150. package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.module.css.js +1 -3
  151. package/dist/Layout/Sidebar/SidebarDrawer/SidebarDrawer.module.css.js.map +1 -1
  152. package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.js +1 -13
  153. package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.js.map +1 -1
  154. package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.module.css.js +1 -3
  155. package/dist/Layout/Sidebar/SidebarFooter/SidebarFooter.module.css.js.map +1 -1
  156. package/dist/Layout/Sidebar/SidebarHeader/SidebarHeader.js +1 -11
  157. package/dist/Layout/Sidebar/SidebarHeader/SidebarHeader.js.map +1 -1
  158. package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.js +1 -10
  159. package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.js.map +1 -1
  160. package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.module.css.js +1 -3
  161. package/dist/Layout/Sidebar/SidebarViewport/SidebarViewport.module.css.js.map +1 -1
  162. package/dist/Layout/Table/Table.js +1 -130
  163. package/dist/Layout/Table/Table.js.map +1 -1
  164. package/dist/Layout/Table/Table.module.css.js +1 -3
  165. package/dist/Layout/Table/Table.module.css.js.map +1 -1
  166. package/dist/Layout/Table/TableFooter.js +1 -8
  167. package/dist/Layout/Table/TableFooter.js.map +1 -1
  168. package/dist/Layout/Table/TableHeader.js +1 -8
  169. package/dist/Layout/Table/TableHeader.js.map +1 -1
  170. package/dist/Layout/Table/tableUtils.js +1 -123
  171. package/dist/Layout/Table/tableUtils.js.map +1 -1
  172. package/dist/Misc/Cursor/Cursor.js +1 -58
  173. package/dist/Misc/Cursor/Cursor.js.map +1 -1
  174. package/dist/Misc/Cursor/Cursor.module.css.js +1 -3
  175. package/dist/Misc/Cursor/Cursor.module.css.js.map +1 -1
  176. package/dist/Misc/Logos.js +1 -28
  177. package/dist/Misc/Logos.js.map +1 -1
  178. package/dist/Misc/PoweredByBanner/PoweredByBanner.js +1 -11
  179. package/dist/Misc/PoweredByBanner/PoweredByBanner.js.map +1 -1
  180. package/dist/Misc/PoweredByBanner/PoweredByBanner.module.css.js +1 -3
  181. package/dist/Misc/PoweredByBanner/PoweredByBanner.module.css.js.map +1 -1
  182. package/dist/Misc/Ripple/Ripple.js +1 -61
  183. package/dist/Misc/Ripple/Ripple.js.map +1 -1
  184. package/dist/Misc/Ripple/Ripple.module.css.js +1 -3
  185. package/dist/Misc/Ripple/Ripple.module.css.js.map +1 -1
  186. package/dist/Misc/Spinner/Spinner.js +1 -11
  187. package/dist/Misc/Spinner/Spinner.js.map +1 -1
  188. package/dist/Misc/Spinner/Spinner.module.css.js +1 -3
  189. package/dist/Misc/Spinner/Spinner.module.css.js.map +1 -1
  190. package/dist/Misc/TransitionAnimation/TransitionAnimation.js +1 -86
  191. package/dist/Misc/TransitionAnimation/TransitionAnimation.js.map +1 -1
  192. package/dist/Misc/TransitionAnimation/TransitionAnimation.module.css.js +1 -3
  193. package/dist/Misc/TransitionAnimation/TransitionAnimation.module.css.js.map +1 -1
  194. package/dist/Navigation/Breadcrumbs/Breadcrumbs.js +1 -35
  195. package/dist/Navigation/Breadcrumbs/Breadcrumbs.js.map +1 -1
  196. package/dist/Navigation/Breadcrumbs/Breadcrumbs.module.css.js +1 -3
  197. package/dist/Navigation/Breadcrumbs/Breadcrumbs.module.css.js.map +1 -1
  198. package/dist/Navigation/Breadcrumbs/BreadcrumbsItem.js +1 -14
  199. package/dist/Navigation/Breadcrumbs/BreadcrumbsItem.js.map +1 -1
  200. package/dist/Navigation/Breadcrumbs/useBreadcrumbs.js +1 -43
  201. package/dist/Navigation/Breadcrumbs/useBreadcrumbs.js.map +1 -1
  202. package/dist/Navigation/Pagination/Pagination.js +1 -60
  203. package/dist/Navigation/Pagination/Pagination.js.map +1 -1
  204. package/dist/Navigation/Pagination/Pagination.module.css.js +1 -3
  205. package/dist/Navigation/Pagination/Pagination.module.css.js.map +1 -1
  206. package/dist/Navigation/Pagination/PaginationItem.js +1 -13
  207. package/dist/Navigation/Pagination/PaginationItem.js.map +1 -1
  208. package/dist/Navigation/Pagination/usePagination.js +1 -37
  209. package/dist/Navigation/Pagination/usePagination.js.map +1 -1
  210. package/dist/Navigation/Tabs/Tab/Tab.js +1 -69
  211. package/dist/Navigation/Tabs/Tab/Tab.js.map +1 -1
  212. package/dist/Navigation/Tabs/Tab/Tab.module.css.js +1 -3
  213. package/dist/Navigation/Tabs/Tab/Tab.module.css.js.map +1 -1
  214. package/dist/Navigation/Tabs/Tabs.js +1 -21
  215. package/dist/Navigation/Tabs/Tabs.js.map +1 -1
  216. package/dist/Navigation/Tabs/TabsBar/TabsBar.d.ts +5 -2
  217. package/dist/Navigation/Tabs/TabsBar/TabsBar.js +1 -43
  218. package/dist/Navigation/Tabs/TabsBar/TabsBar.js.map +1 -1
  219. package/dist/Navigation/Tabs/TabsBar/TabsBar.module.css.js +1 -3
  220. package/dist/Navigation/Tabs/TabsBar/TabsBar.module.css.js.map +1 -1
  221. package/dist/Typography/ClampedText/ClampedText.js +1 -43
  222. package/dist/Typography/ClampedText/ClampedText.js.map +1 -1
  223. package/dist/Typography/ClampedText/ClampedText.module.css.js +1 -3
  224. package/dist/Typography/ClampedText/ClampedText.module.css.js.map +1 -1
  225. package/dist/Typography/CopyableText/CopyableText.js +1 -38
  226. package/dist/Typography/CopyableText/CopyableText.js.map +1 -1
  227. package/dist/Typography/CopyableText/CopyableText.module.css.js +1 -3
  228. package/dist/Typography/CopyableText/CopyableText.module.css.js.map +1 -1
  229. package/dist/Typography/PageTitle/PageTitle.js +1 -9
  230. package/dist/Typography/PageTitle/PageTitle.js.map +1 -1
  231. package/dist/Typography/PageTitle/PageTitle.module.css.js +1 -3
  232. package/dist/Typography/PageTitle/PageTitle.module.css.js.map +1 -1
  233. package/dist/index.css +1 -2398
  234. package/dist/index.js +1 -64
  235. package/dist/index.js.map +1 -1
  236. package/package.json +6 -4
  237. package/rollup.config.js +0 -34
@@ -1,22 +1,2 @@
1
- 'use client';
2
- import { jsx } from 'react/jsx-runtime';
3
- import { createContext, useContext, useState } from 'react';
4
-
5
- const TabsContext = createContext(null);
6
- function useTabs() {
7
- const c = useContext(TabsContext);
8
- if (!c)
9
- throw new Error("Components must be wrapped in <Tabs/>");
10
- return c;
11
- }
12
- function Tabs(props) {
13
- const { children } = props;
14
- const [activeTab, setActiveTab] = useState(null);
15
- return (jsx(TabsContext.Provider, { value: {
16
- activeTab,
17
- setActiveTab,
18
- }, children: children }));
19
- }
20
-
21
- export { Tabs, useTabs };
1
+ "use client";import{jsx as r}from"react/jsx-runtime";import{createContext as t,useContext as e,useState as n}from"react";const o=t(null);function i(){const r=e(o);if(!r)throw new Error("Components must be wrapped in <Tabs/>");return r}function c(t){const{children:e}=t,[i,c]=n(null);return r(o.Provider,{value:{activeTab:i,setActiveTab:c},children:e})}export{c as Tabs,i as useTabs};
22
2
  //# sourceMappingURL=Tabs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","sources":["../../../src/Navigation/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport type { SetState } from \"@studiocubics/types\";\nimport { createContext, type ReactNode, useContext, useState } from \"react\";\n\ninterface TabsContextProps {\n activeTab: HTMLButtonElement | null;\n setActiveTab: SetState<HTMLButtonElement | null>;\n}\nexport interface TabsProps {\n children: ReactNode;\n}\n\nconst TabsContext = createContext<TabsContextProps | null>(null);\n\nexport function useTabs() {\n const c = useContext(TabsContext);\n if (!c) throw new Error(\"Components must be wrapped in <Tabs/>\");\n return c;\n}\n\nexport function Tabs(props: TabsProps) {\n const { children } = props;\n const [activeTab, setActiveTab] =\n useState<TabsContextProps[\"activeTab\"]>(null);\n\n return (\n <TabsContext.Provider\n value={{\n activeTab,\n setActiveTab,\n }}\n >\n {children}\n </TabsContext.Provider>\n );\n}\n"],"names":["_jsx"],"mappings":";;;;AAaA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAA0B,IAAI,CAAC;SAEhD,OAAO,CAAA,CAAA,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,WAAW,CAAC;AACjC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAC;AAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,uCAAuC,CAAC;AAChE,CAAA,CAAA,CAAA,CAAA,OAAO,CAAC;AACV;AAEM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK;IAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAC7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAgC,CAAA,CAAA,CAAA,CAAI,CAAC;AAE/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACEA,GAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CACnB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAE;YACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS;YACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY;SACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAA,CACY,CAAA;AAE3B;;"}
1
+ {"version":3,"file":"Tabs.js","sources":["../../../src/Navigation/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport type { SetState } from \"@studiocubics/types\";\nimport { createContext, type ReactNode, useContext, useState } from \"react\";\n\ninterface TabsContextProps {\n activeTab: HTMLButtonElement | null;\n setActiveTab: SetState<HTMLButtonElement | null>;\n}\nexport interface TabsProps {\n children: ReactNode;\n}\n\nconst TabsContext = createContext<TabsContextProps | null>(null);\n\nexport function useTabs() {\n const c = useContext(TabsContext);\n if (!c) throw new Error(\"Components must be wrapped in <Tabs/>\");\n return c;\n}\n\nexport function Tabs(props: TabsProps) {\n const { children } = props;\n const [activeTab, setActiveTab] =\n useState<TabsContextProps[\"activeTab\"]>(null);\n\n return (\n <TabsContext.Provider\n value={{\n activeTab,\n setActiveTab,\n }}\n >\n {children}\n </TabsContext.Provider>\n );\n}\n"],"names":["TabsContext","createContext","useTabs","c","useContext","Error","Tabs","props","children","activeTab","setActiveTab","useState","_jsx","Provider","value"],"mappings":"yHAaA,MAAMA,EAAcC,EAAuC,eAE3CC,IACd,MAAMC,EAAIC,EAAWJ,GACrB,IAAKG,EAAG,MAAM,IAAIE,MAAM,yCACxB,OAAOF,CACT,CAEM,SAAUG,EAAKC,GACnB,MAAMC,SAAEA,GAAaD,GACdE,EAAWC,GAChBC,EAAwC,MAE1C,OACEC,EAACZ,EAAYa,SAAQ,CACnBC,MAAO,CACLL,YACAC,gBACDF,SAEAA,GAGP"}
@@ -1,8 +1,11 @@
1
- import { type ComponentProps, type ElementType } from "react";
1
+ import { type ComponentProps, type ElementType, type ReactElement } from "react";
2
2
  import { GlassCard } from "../../../Cards/GlassCard/GlassCard";
3
- export type TabsBarProps<M extends ElementType = typeof GlassCard> = ComponentProps<"div"> & {
3
+ export type TabsBarProps<M extends ElementType = typeof GlassCard> = ComponentProps<"nav"> & {
4
4
  column?: boolean;
5
5
  marker?: M;
6
+ color?: "default" | "primary" | "secondary";
7
+ tabs?: string[];
8
+ renderTab?: (t: string) => ReactElement;
6
9
  slotProps?: {
7
10
  overflowContainer?: ComponentProps<"div">;
8
11
  markerContainer?: ComponentProps<"span">;
@@ -1,44 +1,2 @@
1
- 'use client';
2
- import { jsx, jsxs } from 'react/jsx-runtime';
3
- import { useRef, useEffect } from 'react';
4
- import { useTabs } from '../Tabs.js';
5
- import styles from './TabsBar.module.css.js';
6
- import { cn } from '@studiocubics/utils';
7
- import { GlassCard } from '../../../Cards/GlassCard/GlassCard.js';
8
-
9
- function TabsBar(props) {
10
- const { children, className, column = false, marker: Marker = GlassCard, slotProps = {}, ...rest } = props;
11
- const { activeTab } = useTabs();
12
- const markerRef = useRef(null);
13
- const rootRef = useRef(null);
14
- useEffect(() => {
15
- if (!rootRef.current || !markerRef.current || !activeTab)
16
- return;
17
- const updateMarkerPosition = () => {
18
- if (!rootRef.current || !markerRef.current || !activeTab)
19
- return;
20
- const marker = markerRef.current;
21
- const tabRect = activeTab.getBoundingClientRect();
22
- const rootRect = rootRef.current.getBoundingClientRect();
23
- // Account for scroll offset
24
- const scrollLeft = rootRef.current.scrollLeft;
25
- const scrollTop = rootRef.current.scrollTop;
26
- marker.style.width = `${tabRect.width}px`;
27
- marker.style.height = `${tabRect.height}px`;
28
- marker.style.left = `${tabRect.left - rootRect.left + scrollLeft}px`;
29
- marker.style.top = `${tabRect.top - rootRect.top + scrollTop}px`;
30
- };
31
- updateMarkerPosition();
32
- const container = rootRef.current;
33
- // Update marker position when container resizes
34
- const resizeObserver = new ResizeObserver(updateMarkerPosition);
35
- resizeObserver.observe(container);
36
- return () => {
37
- resizeObserver.disconnect();
38
- };
39
- }, [activeTab]);
40
- return (jsx("nav", { ...rest, className: cn(styles.root, className), children: jsxs("div", { ...slotProps.overflowContainer, ref: rootRef, className: cn(styles.overflowContainer, column ? styles.columnContainer : styles.rowContainer, slotProps.overflowContainer?.className), children: [children, jsx("span", { ...slotProps.markerContainer, className: cn(styles.marker, slotProps.markerContainer?.className), ref: markerRef, children: jsx(Marker, { ...slotProps.marker, className: cn(styles.markerGlass, slotProps.marker?.className) }) })] }) }));
41
- }
42
-
43
- export { TabsBar };
1
+ "use client";import{jsx as r,Fragment as e,jsxs as t}from"react/jsx-runtime";import{useRef as a,useEffect as s}from"react";import{useTabs as n}from"../Tabs.js";import o from"./TabsBar.module.css.js";import{cn as c}from"@studiocubics/utils";import{GlassCard as l}from"../../../Cards/GlassCard/GlassCard.js";import{Tab as i}from"../Tab/Tab.js";function m(e){const{as:t=l,className:a,...s}=e;return r(t,{className:c(o.markerInner,a),...s})}function u(l){const{children:u,className:d,column:f=!1,marker:p=m,color:h="default",tabs:b,renderTab:v=t=>r(e,{children:t}),slotProps:N={},...C}=l,{activeTab:k}=n(),w=a(null),T=a(null);s(()=>{if(!T.current||!w.current||!k)return;const r=()=>{if(!T.current||!w.current||!k)return;const r=k.getBoundingClientRect(),e=T.current.getBoundingClientRect();w.current.style.width=`${r.width}px`,w.current.style.height=`${r.height}px`,w.current.style.left=`${r.left-e.left+T.current.scrollLeft}px`,w.current.style.top=`${r.top-e.top+T.current.scrollTop}px`};r();const e=new ResizeObserver(r);return e.observe(T.current),()=>e.disconnect()},[k]);const g=null!=b?b.map((e,t)=>r(i,{"data-value":e,selected:0===t,className:c(o.tab,k?.dataset.value===e?o.active:""),children:v(e)},e)):u;return r("nav",{...C,"data-color":h,className:c(o.root,d),children:t("div",{...N.overflowContainer,ref:T,className:c(o.overflowContainer,f?o.column:o.row,N.overflowContainer?.className),children:[g,r("span",{...N.markerContainer,ref:w,className:c(o.marker,N.markerContainer?.className),children:r(p,{...N.marker,className:c(o.markerGlass,N.marker?.className)})})]})})}export{u as TabsBar};
44
2
  //# sourceMappingURL=TabsBar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabsBar.js","sources":["../../../../src/Navigation/Tabs/TabsBar/TabsBar.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useRef,\n useEffect,\n type ReactNode,\n type ComponentProps,\n type ElementType,\n} from \"react\";\nimport { useTabs } from \"../Tabs\";\nimport styles from \"./TabsBar.module.css\";\nimport { cn } from \"@studiocubics/utils\";\nimport { GlassCard } from \"../../../Cards/GlassCard/GlassCard\";\n\nexport type TabsBarProps<M extends ElementType = typeof GlassCard> =\n ComponentProps<\"div\"> & {\n column?: boolean;\n marker?: M;\n slotProps?: {\n overflowContainer?: ComponentProps<\"div\">;\n markerContainer?: ComponentProps<\"span\">;\n marker?: ComponentProps<M>;\n };\n };\n\nexport function TabsBar(props: TabsBarProps) {\n const {\n children,\n className,\n column = false,\n marker: Marker = GlassCard,\n slotProps = {},\n ...rest\n } = props;\n\n const { activeTab } = useTabs();\n const markerRef = useRef<HTMLSpanElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!rootRef.current || !markerRef.current || !activeTab) return;\n\n const updateMarkerPosition = () => {\n if (!rootRef.current || !markerRef.current || !activeTab) return;\n\n const marker = markerRef.current;\n const tabRect = activeTab.getBoundingClientRect();\n const rootRect = rootRef.current.getBoundingClientRect();\n\n // Account for scroll offset\n const scrollLeft = rootRef.current.scrollLeft;\n const scrollTop = rootRef.current.scrollTop;\n\n marker.style.width = `${tabRect.width}px`;\n marker.style.height = `${tabRect.height}px`;\n marker.style.left = `${tabRect.left - rootRect.left + scrollLeft}px`;\n marker.style.top = `${tabRect.top - rootRect.top + scrollTop}px`;\n };\n\n updateMarkerPosition();\n\n const container = rootRef.current;\n\n // Update marker position when container resizes\n const resizeObserver = new ResizeObserver(updateMarkerPosition);\n resizeObserver.observe(container);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [activeTab]);\n\n return (\n <nav {...rest} className={cn(styles.root, className)}>\n <div\n {...slotProps.overflowContainer}\n ref={rootRef}\n className={cn(\n styles.overflowContainer,\n column ? styles.columnContainer : styles.rowContainer,\n slotProps.overflowContainer?.className,\n )}\n >\n {children as ReactNode}\n <span\n {...slotProps.markerContainer}\n className={cn(styles.marker, slotProps.markerContainer?.className)}\n ref={markerRef}\n >\n <Marker\n {...slotProps.marker}\n className={cn(styles.markerGlass, slotProps.marker?.className)}\n />\n </span>\n </div>\n </nav>\n );\n}\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"TabsBar.js","sources":["../../../../src/Navigation/Tabs/TabsBar/TabsBar.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useRef,\n useEffect,\n type ReactNode,\n type ComponentProps,\n type ElementType,\n type ReactElement,\n} from \"react\";\nimport { useTabs } from \"../Tabs\";\nimport styles from \"./TabsBar.module.css\";\nimport { cn } from \"@studiocubics/utils\";\nimport { GlassCard } from \"../../../Cards/GlassCard/GlassCard\";\nimport { Tab } from \"../Tab/Tab\";\nimport type { PolymorphicComponentProps } from \"@studiocubics/types\";\n\nfunction DefaultMarker<C extends ElementType>(\n props: PolymorphicComponentProps<C, object>,\n) {\n const { as: Component = GlassCard, className, ...rest } = props;\n return <Component className={cn(styles.markerInner, className)} {...rest} />;\n}\n\nexport type TabsBarProps<M extends ElementType = typeof GlassCard> =\n ComponentProps<\"nav\"> & {\n column?: boolean;\n marker?: M;\n color?: \"default\" | \"primary\" | \"secondary\";\n tabs?: string[];\n renderTab?: (t: string) => ReactElement;\n slotProps?: {\n overflowContainer?: ComponentProps<\"div\">;\n markerContainer?: ComponentProps<\"span\">;\n marker?: ComponentProps<M>;\n };\n };\n\nexport function TabsBar(props: TabsBarProps) {\n const {\n children,\n className,\n column = false,\n marker: Marker = DefaultMarker,\n color = \"default\",\n tabs,\n renderTab = (t) => <>{t}</>,\n slotProps = {},\n ...rest\n } = props;\n\n const { activeTab } = useTabs();\n const markerRef = useRef<HTMLSpanElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!rootRef.current || !markerRef.current || !activeTab) return;\n\n const update = () => {\n if (!rootRef.current || !markerRef.current || !activeTab) return;\n\n const tabRect = activeTab.getBoundingClientRect();\n const rootRect = rootRef.current.getBoundingClientRect();\n\n markerRef.current.style.width = `${tabRect.width}px`;\n markerRef.current.style.height = `${tabRect.height}px`;\n markerRef.current.style.left = `${tabRect.left - rootRect.left + rootRef.current.scrollLeft}px`;\n markerRef.current.style.top = `${tabRect.top - rootRect.top + rootRef.current.scrollTop}px`;\n };\n\n update();\n\n const ro = new ResizeObserver(update);\n ro.observe(rootRef.current);\n\n return () => ro.disconnect();\n }, [activeTab]);\n\n const content: ReactNode =\n tabs != null\n ? tabs.map((t, i) => (\n <Tab\n key={t}\n data-value={t}\n selected={i === 0}\n className={cn(\n styles.tab,\n activeTab?.dataset.value === t ? styles.active : \"\",\n )}\n >\n {renderTab(t)}\n </Tab>\n ))\n : children;\n\n return (\n <nav {...rest} data-color={color} className={cn(styles.root, className)}>\n <div\n {...slotProps.overflowContainer}\n ref={rootRef}\n className={cn(\n styles.overflowContainer,\n column ? styles.column : styles.row,\n slotProps.overflowContainer?.className,\n )}\n >\n {content}\n <span\n {...slotProps.markerContainer}\n ref={markerRef}\n className={cn(styles.marker, slotProps.markerContainer?.className)}\n >\n <Marker\n {...slotProps.marker}\n className={cn(styles.markerGlass, slotProps.marker?.className)}\n />\n </span>\n </div>\n </nav>\n );\n}\n"],"names":["DefaultMarker","props","as","Component","GlassCard","className","rest","_jsx","cn","styles","markerInner","TabsBar","children","column","marker","Marker","color","tabs","renderTab","t","slotProps","activeTab","useTabs","markerRef","useRef","rootRef","useEffect","current","update","tabRect","getBoundingClientRect","rootRect","style","width","height","left","scrollLeft","top","scrollTop","ro","ResizeObserver","observe","disconnect","content","map","i","Tab","selected","tab","dataset","value","active","root","_jsxs","overflowContainer","ref","row","markerContainer","markerGlass"],"mappings":"sVAiBA,SAASA,EACPC,GAEA,MAAQC,GAAIC,EAAYC,EAASC,UAAEA,KAAcC,GAASL,EAC1D,OAAOM,EAACJ,EAAS,CAACE,UAAWG,EAAGC,EAAOC,YAAaL,MAAgBC,GACtE,CAgBM,SAAUK,EAAQV,GACtB,MAAMW,SACJA,EAAQP,UACRA,EAASQ,OACTA,GAAS,EACTC,OAAQC,EAASf,EAAagB,MAC9BA,EAAQ,UAASC,KACjBA,EAAIC,UACJA,EAAaC,GAAMZ,cAAGY,IAAKC,UAC3BA,EAAY,CAAA,KACTd,GACDL,GAEEoB,UAAEA,GAAcC,IAChBC,EAAYC,EAAwB,MACpCC,EAAUD,EAAuB,MAEvCE,EAAU,KACR,IAAKD,EAAQE,UAAYJ,EAAUI,UAAYN,EAAW,OAE1D,MAAMO,EAAS,KACb,IAAKH,EAAQE,UAAYJ,EAAUI,UAAYN,EAAW,OAE1D,MAAMQ,EAAUR,EAAUS,wBACpBC,EAAWN,EAAQE,QAAQG,wBAEjCP,EAAUI,QAAQK,MAAMC,MAAQ,GAAGJ,EAAQI,UAC3CV,EAAUI,QAAQK,MAAME,OAAS,GAAGL,EAAQK,WAC5CX,EAAUI,QAAQK,MAAMG,KAAO,GAAGN,EAAQM,KAAOJ,EAASI,KAAOV,EAAQE,QAAQS,eACjFb,EAAUI,QAAQK,MAAMK,IAAM,GAAGR,EAAQQ,IAAMN,EAASM,IAAMZ,EAAQE,QAAQW,eAGhFV,IAEA,MAAMW,EAAK,IAAIC,eAAeZ,GAG9B,OAFAW,EAAGE,QAAQhB,EAAQE,SAEZ,IAAMY,EAAGG,cACf,CAACrB,IAEJ,MAAMsB,EACI,MAAR1B,EACIA,EAAK2B,IAAI,CAACzB,EAAG0B,IACXtC,EAACuC,EAAG,CAAA,aAEU3B,EACZ4B,SAAgB,IAANF,EACVxC,UAAWG,EACTC,EAAOuC,IACP3B,GAAW4B,QAAQC,QAAU/B,EAAIV,EAAO0C,OAAS,IAClDvC,SAEAM,EAAUC,IARNA,IAWTP,EAEN,OACEL,YAASD,EAAI,aAAcU,EAAOX,UAAWG,EAAGC,EAAO2C,KAAM/C,GAAUO,SACrEyC,EAAA,MAAA,IACMjC,EAAUkC,kBACdC,IAAK9B,EACLpB,UAAWG,EACTC,EAAO6C,kBACPzC,EAASJ,EAAOI,OAASJ,EAAO+C,IAChCpC,EAAUkC,mBAAmBjD,WAC9BO,SAAA,CAEA+B,EACDpC,EAAA,OAAA,IACMa,EAAUqC,gBACdF,IAAKhC,EACLlB,UAAWG,EAAGC,EAAOK,OAAQM,EAAUqC,iBAAiBpD,WAAUO,SAElEL,EAACQ,EAAM,IACDK,EAAUN,OACdT,UAAWG,EAAGC,EAAOiD,YAAatC,EAAUN,QAAQT,mBAMhE"}
@@ -1,4 +1,2 @@
1
- var styles = {"root":"TabsBar-module_root__Uve19","overflowContainer":"TabsBar-module_overflowContainer__FuUXd","rowContainer":"TabsBar-module_rowContainer__qeTaq","columnContainer":"TabsBar-module_columnContainer__G1t-z","marker":"TabsBar-module_marker__2e4am","markerGlass":"TabsBar-module_markerGlass__-8xd8"};
2
-
3
- export { styles as default };
1
+ var a={root:"TabsBar-module_root__Uve19",overflowContainer:"TabsBar-module_overflowContainer__FuUXd",row:"TabsBar-module_row__5PKvn",column:"TabsBar-module_column__8Mc64",tab:"TabsBar-module_tab__jD1nX",active:"TabsBar-module_active__ESPgA",marker:"TabsBar-module_marker__2e4am",markerGlass:"TabsBar-module_markerGlass__-8xd8",markerInner:"TabsBar-module_markerInner__T0FZ3"};export{a as default};
4
2
  //# sourceMappingURL=TabsBar.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TabsBar.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"TabsBar.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,44 +1,2 @@
1
- 'use client';
2
- import { jsx } from 'react/jsx-runtime';
3
- import { cn } from '@studiocubics/utils';
4
- import styles from './ClampedText.module.css.js';
5
-
6
- const defaultElement = "p";
7
- /**
8
- * Base implementation for the ClampedText component.
9
- *
10
- * This is a polymorphic component that defaults to rendering a `<ClampedText>`.
11
- * Use the `as` prop to change the underlying element.
12
- *
13
- * @typeParam C - The intrinsic or custom element type to render.
14
- *
15
- * @group ClampedText
16
- * @category inputs
17
- */
18
- function ClampedTextBase(props) {
19
- const { as, className, lineCount = 1, style, ...restProps } = props;
20
- const Component = (as || defaultElement);
21
- const componentProps = {
22
- className: cn(className, styles.root),
23
- style: { WebkitLineClamp: `${lineCount}`, ...style },
24
- ...restProps,
25
- };
26
- return jsx(Component, { ...componentProps });
27
- }
28
- ClampedTextBase.displayName = "ClampedText";
29
- /**
30
- * A polymorphic ClampedText component.
31
- *
32
- * By default it renders a `<ClampedText>`, but any element can be used via the `as` prop:
33
- *
34
- * ```tsx
35
- * <ClampedText as="a" href="/docs">Read docs</ClampedText>
36
- * ```
37
- *
38
- * @group ClampedText
39
- * @category inputs
40
- */
41
- const ClampedText = ClampedTextBase;
42
-
43
- export { ClampedText };
1
+ "use client";import{jsx as t}from"react/jsx-runtime";import{cn as e}from"@studiocubics/utils";import s from"./ClampedText.module.css.js";function o(o){const{as:m,className:i,lineCount:l=1,style:r,...a}=o,c=m||"p",n={className:e(i,s.root),style:{WebkitLineClamp:`${l}`,...r},...a};return t(c,{...n})}o.displayName="ClampedText";const m=o;export{m as ClampedText};
44
2
  //# sourceMappingURL=ClampedText.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClampedText.js","sources":["../../../src/Typography/ClampedText/ClampedText.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\nimport { cn } from \"@studiocubics/utils\";\nimport type { ElementType } from \"react\";\nimport styles from \"./ClampedText.module.css\";\n\n/**\n * Props specific to the ClampedText component.\n *\n * These extend the intrinsic element props of whatever element is passed via `as`.\n * @group ClampedText\n * @category inputs\n */\nexport interface ClampedTextBaseProps {\n lineCount?: number;\n}\nconst defaultElement = \"p\";\ntype DefaultElement = typeof defaultElement;\n/**\n * Polymorphic props for the ClampedText component.\n *\n * `C` defines the element type rendered by the component (e.g. `\"ClampedText\"`, `\"a\"`, `\"div\"`).\n * All intrinsic props for `C` are supported unless overridden by `ClampedTextBaseProps`.\n *\n * @group ClampedText\n * @category inputs\n */\nexport type ClampedTextProps<C extends ElementType = DefaultElement> =\n PolymorphicComponentProps<C, ClampedTextBaseProps>;\n\n/**\n * Base implementation for the ClampedText component.\n *\n * This is a polymorphic component that defaults to rendering a `<ClampedText>`.\n * Use the `as` prop to change the underlying element.\n *\n * @typeParam C - The intrinsic or custom element type to render.\n *\n * @group ClampedText\n * @category inputs\n */\nfunction ClampedTextBase<C extends ElementType = DefaultElement>(\n props: ClampedTextProps<C>,\n) {\n const { as, className, lineCount = 1, style, ...restProps } = props;\n const Component = (as || defaultElement) as ElementType;\n\n const componentProps = {\n className: cn(className, styles.root),\n style: { WebkitLineClamp: `${lineCount}`, ...style },\n ...restProps,\n };\n\n return <Component {...componentProps} />;\n}\nClampedTextBase.displayName = \"ClampedText\";\n\n/**\n * A polymorphic ClampedText component.\n *\n * By default it renders a `<ClampedText>`, but any element can be used via the `as` prop:\n *\n * ```tsx\n * <ClampedText as=\"a\" href=\"/docs\">Read docs</ClampedText>\n * ```\n *\n * @group ClampedText\n * @category inputs\n */\nexport const ClampedText = ClampedTextBase as PolymorphicComponentType<\n ClampedTextBaseProps,\n DefaultElement\n>;\n"],"names":["_jsx"],"mappings":";;;;;AAoBA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,GAAG,CAAA,CAAA,CAAG;AAc1B,CAAA,CAAA;;;;;;;;;;AAUG,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CACtB,CAAA,CAAA,CAAA,CAAA,CAA0B,CAAA,CAAA;AAE1B,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAE,CAAA,CAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK;AACnE,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAI,CAAA,CAAE,CAAA,CAAA,CAAA,CAAI,cAAc,CAAgB;AAEvD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,cAAc,CAAA,CAAA,CAAG;QACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAE,CAAA,CAAE,CAAC,SAAS,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC;QACrC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAE,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAA,CAAE,CAAA,CAAA,CAAG,KAAK,CAAA,CAAE;AACpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS;KACb;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOA,GAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,EAAI;AAC1C;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa;AAE3C,CAAA,CAAA;;;;;;;;;;;AAWG,CAAA,CAAA;AACI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,WAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;"}
1
+ {"version":3,"file":"ClampedText.js","sources":["../../../src/Typography/ClampedText/ClampedText.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\nimport { cn } from \"@studiocubics/utils\";\nimport type { ElementType } from \"react\";\nimport styles from \"./ClampedText.module.css\";\n\n/**\n * Props specific to the ClampedText component.\n *\n * These extend the intrinsic element props of whatever element is passed via `as`.\n * @group ClampedText\n * @category inputs\n */\nexport interface ClampedTextBaseProps {\n lineCount?: number;\n}\nconst defaultElement = \"p\";\ntype DefaultElement = typeof defaultElement;\n/**\n * Polymorphic props for the ClampedText component.\n *\n * `C` defines the element type rendered by the component (e.g. `\"ClampedText\"`, `\"a\"`, `\"div\"`).\n * All intrinsic props for `C` are supported unless overridden by `ClampedTextBaseProps`.\n *\n * @group ClampedText\n * @category inputs\n */\nexport type ClampedTextProps<C extends ElementType = DefaultElement> =\n PolymorphicComponentProps<C, ClampedTextBaseProps>;\n\n/**\n * Base implementation for the ClampedText component.\n *\n * This is a polymorphic component that defaults to rendering a `<ClampedText>`.\n * Use the `as` prop to change the underlying element.\n *\n * @typeParam C - The intrinsic or custom element type to render.\n *\n * @group ClampedText\n * @category inputs\n */\nfunction ClampedTextBase<C extends ElementType = DefaultElement>(\n props: ClampedTextProps<C>,\n) {\n const { as, className, lineCount = 1, style, ...restProps } = props;\n const Component = (as || defaultElement) as ElementType;\n\n const componentProps = {\n className: cn(className, styles.root),\n style: { WebkitLineClamp: `${lineCount}`, ...style },\n ...restProps,\n };\n\n return <Component {...componentProps} />;\n}\nClampedTextBase.displayName = \"ClampedText\";\n\n/**\n * A polymorphic ClampedText component.\n *\n * By default it renders a `<ClampedText>`, but any element can be used via the `as` prop:\n *\n * ```tsx\n * <ClampedText as=\"a\" href=\"/docs\">Read docs</ClampedText>\n * ```\n *\n * @group ClampedText\n * @category inputs\n */\nexport const ClampedText = ClampedTextBase as PolymorphicComponentType<\n ClampedTextBaseProps,\n DefaultElement\n>;\n"],"names":["ClampedTextBase","props","as","className","lineCount","style","restProps","Component","componentProps","cn","styles","root","WebkitLineClamp","_jsx","displayName","ClampedText"],"mappings":"yIA6CA,SAASA,EACPC,GAEA,MAAMC,GAAEA,EAAEC,UAAEA,EAASC,UAAEA,EAAY,EAACC,MAAEA,KAAUC,GAAcL,EACxDM,EAAaL,GA7BE,IA+BfM,EAAiB,CACrBL,UAAWM,EAAGN,EAAWO,EAAOC,MAChCN,MAAO,CAAEO,gBAAiB,GAAGR,OAAgBC,MAC1CC,GAGL,OAAOO,EAACN,EAAS,IAAKC,GACxB,CACAR,EAAgBc,YAAc,cAcvB,MAAMC,EAAcf"}
@@ -1,4 +1,2 @@
1
- var styles = {"root":"ClampedText-module_root__WGLiO"};
2
-
3
- export { styles as default };
1
+ var o={root:"ClampedText-module_root__WGLiO"};export{o as default};
4
2
  //# sourceMappingURL=ClampedText.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClampedText.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"ClampedText.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,39 +1,2 @@
1
- 'use client';
2
- import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { cn } from '@studiocubics/utils';
4
- import { useState, useEffect } from 'react';
5
- import styles from './CopyableText.module.css.js';
6
- import { useDelayedAction } from '@studiocubics/hooks';
7
- import { Button } from '../../Inputs/Button/Button.js';
8
-
9
- const defaultElement = "div";
10
- function CopyableTextBase(props) {
11
- const { as, children, className, disabled = false, slotProps = {}, ...rest } = props;
12
- const [copied, setCopied] = useState(false);
13
- const delay = useDelayedAction();
14
- const Component = (as || defaultElement);
15
- const componentProps = { ...rest, className: cn(className, styles.root) };
16
- async function handleCopy(e) {
17
- await navigator.clipboard.writeText(children);
18
- setCopied(true);
19
- slotProps.button?.onClick?.(e);
20
- }
21
- useEffect(() => {
22
- if (copied) {
23
- delay(() => setCopied(false), 2000);
24
- }
25
- }, [delay, copied]);
26
- return (jsxs(Component, { ...componentProps, children: [jsx("span", { children: children }), jsx(Button, { disabled: disabled, square: true, size: "sm", ...slotProps.button, onClick: handleCopy, children: copied ? (jsx(CheckIcon, { width: 24, height: 24 })) : (jsx(CopyIcon, { width: 24, height: 24 })) })] }));
27
- }
28
- CopyableTextBase.displayName = "CopyableText";
29
- const CopyableText = CopyableTextBase;
30
- function CopyIcon(props) {
31
- return (jsxs("svg", { ...props, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.3", strokeLinecap: "round", strokeLinejoin: "round", children: [jsx("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }), jsx("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })] }));
32
- }
33
- // TODO convert to animated check icon
34
- function CheckIcon(props) {
35
- return (jsx("svg", { ...props, xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.3", strokeLinecap: "round", strokeLinejoin: "round", children: jsx("path", { d: "M4 12 9 17l11 -11" }) }));
36
- }
37
-
38
- export { CopyIcon, CopyableText };
1
+ "use client";import{jsxs as t,jsx as o}from"react/jsx-runtime";import{cn as r}from"@studiocubics/utils";import{useState as e,useEffect as i}from"react";import n from"./CopyableText.module.css.js";import{useDelayedAction as s}from"@studiocubics/hooks";import{Button as c}from"../../Inputs/Button/Button.js";function l(l){const{as:u,children:h,className:m,disabled:p=!1,slotProps:w={},...f}=l,[k,x]=e(!1),b=s(),g=u||"div",v={...f,className:r(m,n.root)};return i(()=>{k&&b(()=>x(!1),2e3)},[b,k]),t(g,{...v,children:[o("span",{children:h}),o(c,{disabled:p,square:!0,size:"sm",...w.button,onClick:async function(t){await navigator.clipboard.writeText(h),x(!0),w.button?.onClick?.(t)},children:o(k?a:d,{width:24,height:24})})]})}l.displayName="CopyableText";const u=l;function d(r){return t("svg",{...r,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.3",strokeLinecap:"round",strokeLinejoin:"round",children:[o("rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2"}),o("path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"})]})}function a(t){return o("svg",{...t,xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.3",strokeLinecap:"round",strokeLinejoin:"round",children:o("path",{d:"M4 12 9 17l11 -11"})})}export{d as CopyIcon,u as CopyableText};
39
2
  //# sourceMappingURL=CopyableText.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CopyableText.js","sources":["../../../src/Typography/CopyableText/CopyableText.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\nimport { cn } from \"@studiocubics/utils\";\nimport {\n type ComponentProps,\n type MouseEvent,\n useEffect,\n useState,\n type ElementType,\n} from \"react\";\nimport styles from \"./CopyableText.module.css\";\nimport { useDelayedAction } from \"@studiocubics/hooks\";\nimport { Button, type ButtonProps } from \"../../Inputs/Button/Button\";\n\nexport interface CopyableTextBaseProps {\n children: string;\n disabled?: boolean;\n slotProps?: {\n button?: ButtonProps;\n };\n}\n\nconst defaultElement = \"div\";\ntype DefaultElement = typeof defaultElement;\n\nexport type CopyableTextProps<C extends ElementType = DefaultElement> =\n PolymorphicComponentProps<C, CopyableTextBaseProps>;\n\nfunction CopyableTextBase<C extends ElementType = DefaultElement>(\n props: CopyableTextProps<C>,\n) {\n const {\n as,\n children,\n className,\n disabled = false,\n slotProps = {},\n ...rest\n } = props as CopyableTextProps<DefaultElement>;\n\n const [copied, setCopied] = useState(false);\n const delay = useDelayedAction();\n const Component = (as || defaultElement) as ElementType;\n const componentProps = { ...rest, className: cn(className, styles.root) };\n\n async function handleCopy(e: MouseEvent<HTMLButtonElement>) {\n await navigator.clipboard.writeText(children);\n setCopied(true);\n slotProps.button?.onClick?.(e);\n }\n useEffect(() => {\n if (copied) {\n delay(() => setCopied(false), 2000);\n }\n }, [delay, copied]);\n return (\n <Component {...componentProps}>\n <span>{children}</span>\n <Button\n disabled={disabled}\n square\n size=\"sm\"\n {...slotProps.button}\n onClick={handleCopy}\n >\n {copied ? (\n <CheckIcon width={24} height={24} />\n ) : (\n <CopyIcon width={24} height={24} />\n )}\n </Button>\n </Component>\n );\n}\n\nCopyableTextBase.displayName = \"CopyableText\";\n\nexport const CopyableText = CopyableTextBase as PolymorphicComponentType<\n CopyableTextBaseProps,\n DefaultElement\n>;\n\nexport function CopyIcon(props: ComponentProps<\"svg\">) {\n return (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n );\n}\n// TODO convert to animated check icon\nfunction CheckIcon(props: ComponentProps<\"svg\">) {\n return (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M4 12 9 17l11 -11\" />\n </svg>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;AA0BA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK;AAM5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CACvB,CAAA,CAAA,CAAA,CAAA,CAA2B,CAAA,CAAA;IAE3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EACJ,CAAA,CAAE,CAAA,CACF,QAAQ,CAAA,CACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,EACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,KAAK,CAAA,CAChB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,GAAG,CAAA,CAAE,CAAA,CACd,GAAG,CAAA,CAAA,CAAA,CAAI,CAAA,CACR,GAAG,CAAA,CAAA,CAAA,CAAA,CAA0C;IAE9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAE;AAChC,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAI,CAAA,CAAE,CAAA,CAAA,CAAA,CAAI,cAAc,CAAgB;AACvD,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAG,CAAA,CAAE,CAAA,CAAA,CAAG,IAAI,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE;IAEzE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAgC,CAAA,CAAA;QACxD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,QAAQ,CAAC;QAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC;QACf,SAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAG,CAAC,CAAC;IAChC;IACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK;QACb,CAAA,CAAA,CAAA,CAAI,MAAM,CAAA,CAAE;YACV,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAA,CAAE,CAAA,CAAA,CAAA,CAAI,CAAC;QACrC;AACF,CAAA,CAAA,CAAA,CAAA,CAAC,CAAA,CAAE,CAAC,KAAK,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAC;AACnB,CAAA,CAAA,CAAA,CAAA,QACEA,CAAAA,CAAAA,CAAAA,CAAA,CAAC,SAAS,CAAA,CAAA,CAAA,CAAA,GAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC3BC,CAAAA,CAAAA,CAAA,CAAA,MAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAQ,EACvBA,CAAAA,CAAAA,CAAA,CAAC,MAAM,CAAA,GACL,QAAQ,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,IAAA,CAAA,CACN,CAAA,CAAA,CAAA,CAAI,EAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,GACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CACpB,OAAO,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,YAElB,MAAM,CAAA,CAAA,CAAA,CACLA,CAAAA,CAAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,EAAC,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,EAAE,CAAA,CAAE,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAEpCA,GAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAA,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EAAE,CAAA,CAAE,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA,CAAE,EAAA,CAAI,CACpC,EAAA,CACM,CAAA,EAAA,CACC,CAAA;AAEhB;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc;AAEtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,YAAY,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAKtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA,CAAA,CAAA,CAA4B,CAAA,CAAA;AACnD,CAAA,CAAA,CAAA,CAAA,QACED,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CACM,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAK,EAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4B,CAAA,CAClC,OAAO,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,EACnB,CAAA,CAAA,CAAA,CAAI,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CACX,MAAM,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,EACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAC,KAAK,CAAA,CACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,EACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAC,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAEtBC,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAK,EAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CAAC,MAAM,CAAA,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CAAC,CAAC,EAAC,CAAA,CAAA,CAAG,CAAA,CAAC,CAAC,CAAA,CAAC,CAAA,CAAA,CAAG,EAAC,CAAA,CAAE,CAAA,CAAC,CAAA,CAAA,CAAG,CAAA,CAAC,EAAE,CAAA,CAAC,CAAA,CAAA,CAAG,EAAA,CAAG,CAAA,CACzDA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAyD,EAAA,CAAG,CAAA,EAAA,CAChE,CAAA;AAEV;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAA4B,CAAA,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACEA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CACM,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAC,4BAA4B,CAAA,CAClC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CACnB,CAAA,CAAA,CAAA,CAAI,EAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CACrB,WAAW,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,EACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAC,OAAO,CAAA,CACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAEtBA,CAAAA,CAAAA,YAAM,CAAC,EAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAA,CAAA,CAAG,CAAA,CAAA,CAC1B,CAAA;AAEV;;"}
1
+ {"version":3,"file":"CopyableText.js","sources":["../../../src/Typography/CopyableText/CopyableText.tsx"],"sourcesContent":["\"use client\";\n\nimport type {\n PolymorphicComponentProps,\n PolymorphicComponentType,\n} from \"@studiocubics/types\";\nimport { cn } from \"@studiocubics/utils\";\nimport {\n type ComponentProps,\n type MouseEvent,\n useEffect,\n useState,\n type ElementType,\n} from \"react\";\nimport styles from \"./CopyableText.module.css\";\nimport { useDelayedAction } from \"@studiocubics/hooks\";\nimport { Button, type ButtonProps } from \"../../Inputs/Button/Button\";\n\nexport interface CopyableTextBaseProps {\n children: string;\n disabled?: boolean;\n slotProps?: {\n button?: ButtonProps;\n };\n}\n\nconst defaultElement = \"div\";\ntype DefaultElement = typeof defaultElement;\n\nexport type CopyableTextProps<C extends ElementType = DefaultElement> =\n PolymorphicComponentProps<C, CopyableTextBaseProps>;\n\nfunction CopyableTextBase<C extends ElementType = DefaultElement>(\n props: CopyableTextProps<C>,\n) {\n const {\n as,\n children,\n className,\n disabled = false,\n slotProps = {},\n ...rest\n } = props as CopyableTextProps<DefaultElement>;\n\n const [copied, setCopied] = useState(false);\n const delay = useDelayedAction();\n const Component = (as || defaultElement) as ElementType;\n const componentProps = { ...rest, className: cn(className, styles.root) };\n\n async function handleCopy(e: MouseEvent<HTMLButtonElement>) {\n await navigator.clipboard.writeText(children);\n setCopied(true);\n slotProps.button?.onClick?.(e);\n }\n useEffect(() => {\n if (copied) {\n delay(() => setCopied(false), 2000);\n }\n }, [delay, copied]);\n return (\n <Component {...componentProps}>\n <span>{children}</span>\n <Button\n disabled={disabled}\n square\n size=\"sm\"\n {...slotProps.button}\n onClick={handleCopy}\n >\n {copied ? (\n <CheckIcon width={24} height={24} />\n ) : (\n <CopyIcon width={24} height={24} />\n )}\n </Button>\n </Component>\n );\n}\n\nCopyableTextBase.displayName = \"CopyableText\";\n\nexport const CopyableText = CopyableTextBase as PolymorphicComponentType<\n CopyableTextBaseProps,\n DefaultElement\n>;\n\nexport function CopyIcon(props: ComponentProps<\"svg\">) {\n return (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\" />\n <path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\" />\n </svg>\n );\n}\n// TODO convert to animated check icon\nfunction CheckIcon(props: ComponentProps<\"svg\">) {\n return (\n <svg\n {...props}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M4 12 9 17l11 -11\" />\n </svg>\n );\n}\n"],"names":["CopyableTextBase","props","as","children","className","disabled","slotProps","rest","copied","setCopied","useState","delay","useDelayedAction","Component","componentProps","cn","styles","root","useEffect","_jsxs","_jsx","Button","square","size","button","onClick","async","e","navigator","clipboard","writeText","CheckIcon","CopyIcon","width","height","displayName","CopyableText","xmlns","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","x","y","rx","ry","d"],"mappings":"kTAgCA,SAASA,EACPC,GAEA,MAAMC,GACJA,EAAEC,SACFA,EAAQC,UACRA,EAASC,SACTA,GAAW,EAAKC,UAChBA,EAAY,CAAA,KACTC,GACDN,GAEGO,EAAQC,GAAaC,GAAS,GAC/BC,EAAQC,IACRC,EAAaX,GApBE,MAqBfY,EAAiB,IAAKP,EAAMH,UAAWW,EAAGX,EAAWY,EAAOC,OAYlE,OALAC,EAAU,KACJV,GACFG,EAAM,IAAMF,GAAU,GAAQ,MAE/B,CAACE,EAAOH,IAETW,EAACN,EAAS,IAAKC,EAAcX,SAAA,CAC3BiB,EAAA,OAAA,CAAAjB,SAAOA,IACPiB,EAACC,GACChB,SAAUA,EACViB,QAAM,EACNC,KAAK,QACDjB,EAAUkB,OACdC,QAlBNC,eAA0BC,SAClBC,UAAUC,UAAUC,UAAU3B,GACpCM,GAAU,GACVH,EAAUkB,QAAQC,UAAUE,EAC9B,WAiBQP,EADDZ,EACEuB,EAEAC,EAFS,CAACC,MAAO,GAAIC,OAAQ,SAOxC,CAEAlC,EAAiBmC,YAAc,eAExB,MAAMC,EAAepC,EAKtB,SAAUgC,EAAS/B,GACvB,OACEkB,EAAA,MAAA,IACMlB,EACJoC,MAAM,6BACNC,QAAQ,YACRC,KAAK,OACLC,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QAAOxC,SAAA,CAEtBiB,EAAA,OAAA,CAAMa,MAAM,KAAKC,OAAO,KAAKU,EAAE,IAAIC,EAAE,IAAIC,GAAG,IAAIC,GAAG,MACnD3B,EAAA,OAAA,CAAM4B,EAAE,8DAGd,CAEA,SAASjB,EAAU9B,GACjB,OACEmB,EAAA,MAAA,IACMnB,EACJoC,MAAM,6BACNC,QAAQ,YACRC,KAAK,OACLC,OAAO,eACPC,YAAY,MACZC,cAAc,QACdC,eAAe,QAAOxC,SAEtBiB,UAAM4B,EAAE,uBAGd"}
@@ -1,4 +1,2 @@
1
- var styles = {"root":"CopyableText-module_root__bhwTN"};
2
-
3
- export { styles as default };
1
+ var o={root:"CopyableText-module_root__bhwTN"};export{o as default};
4
2
  //# sourceMappingURL=CopyableText.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CopyableText.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"CopyableText.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,10 +1,2 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import styles from './PageTitle.module.css.js';
3
- import { cn } from '@studiocubics/utils';
4
-
5
- function PageTitle({ title, subtitle, actions, size = "md", noBorders = false, }) {
6
- return (jsxs("div", { className: cn(styles.root, styles[`size_${size}`], noBorders ? styles.noBorder : ""), children: [jsxs("div", { className: styles.main, children: [jsx("h1", { children: title }), jsx("h2", { children: subtitle })] }), actions && jsx("div", { className: styles.actions, children: actions })] }));
7
- }
8
-
9
- export { PageTitle };
1
+ import{jsxs as i,jsx as e}from"react/jsx-runtime";import r from"./PageTitle.module.css.js";import{cn as s}from"@studiocubics/utils";function o({title:o,subtitle:t,actions:c,size:n="md",noBorders:d=!1}){return i("div",{className:s(r.root,r[`size_${n}`],d?r.noBorder:""),children:[i("div",{className:r.main,children:[e("h1",{children:o}),e("h2",{children:t})]}),c&&e("div",{className:r.actions,children:c})]})}export{o as PageTitle};
10
2
  //# sourceMappingURL=PageTitle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageTitle.js","sources":["../../../src/Typography/PageTitle/PageTitle.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport styles from \"./PageTitle.module.css\";\nimport { cn } from \"@studiocubics/utils\";\n\nexport interface PageTitleProps {\n title: ReactNode;\n actions?: ReactNode;\n subtitle?: ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n noBorders?: boolean;\n}\n\nexport function PageTitle({\n title,\n subtitle,\n actions,\n size = \"md\",\n noBorders = false,\n}: PageTitleProps) {\n return (\n <div\n className={cn(\n styles.root,\n styles[`size_${size}`],\n noBorders ? styles.noBorder : \"\"\n )}\n >\n <div className={styles.main}>\n <h1>{title}</h1>\n <h2>{subtitle}</h2>\n </div>\n {actions && <div className={styles.actions}>{actions}</div>}\n </div>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;SAYgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,IAAI,GAAG,IAAI,EACX,SAAS,GAAG,KAAK,GACF,EAAA;IACf,QACEA,IAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAE,EAAE,CACX,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE,CAAC,EACtB,SAAS,GAAG,MAAM,CAAC,QAAQ,GAAG,EAAE,CACjC,EAAA,QAAA,EAAA,CAEDA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,IAAI,EAAA,QAAA,EAAA,CACzBC,GAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EAAK,KAAK,EAAA,CAAM,EAChBA,GAAA,CAAA,IAAA,EAAA,EAAA,QAAA,EAAK,QAAQ,EAAA,CAAM,CAAA,EAAA,CACf,EACL,OAAO,IAAIA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,MAAM,CAAC,OAAO,EAAA,QAAA,EAAG,OAAO,EAAA,CAAO,CAAA,EAAA,CACvD;AAEV;;;;"}
1
+ {"version":3,"file":"PageTitle.js","sources":["../../../src/Typography/PageTitle/PageTitle.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport styles from \"./PageTitle.module.css\";\nimport { cn } from \"@studiocubics/utils\";\n\nexport interface PageTitleProps {\n title: ReactNode;\n actions?: ReactNode;\n subtitle?: ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n noBorders?: boolean;\n}\n\nexport function PageTitle({\n title,\n subtitle,\n actions,\n size = \"md\",\n noBorders = false,\n}: PageTitleProps) {\n return (\n <div\n className={cn(\n styles.root,\n styles[`size_${size}`],\n noBorders ? styles.noBorder : \"\"\n )}\n >\n <div className={styles.main}>\n <h1>{title}</h1>\n <h2>{subtitle}</h2>\n </div>\n {actions && <div className={styles.actions}>{actions}</div>}\n </div>\n );\n}\n"],"names":["PageTitle","title","subtitle","actions","size","noBorders","_jsxs","className","cn","styles","root","noBorder","children","main","_jsx"],"mappings":"6IAYgBA,GAAUC,MACxBA,EAAKC,SACLA,EAAQC,QACRA,EAAOC,KACPA,EAAO,KAAIC,UACXA,GAAY,IAEZ,OACEC,EAAA,MAAA,CACEC,UAAWC,EACTC,EAAOC,KACPD,EAAO,QAAQL,KACfC,EAAYI,EAAOE,SAAW,IAC/BC,SAAA,CAEDN,EAAA,MAAA,CAAKC,UAAWE,EAAOI,KAAID,SAAA,CACzBE,EAAA,KAAA,CAAAF,SAAKX,IACLa,EAAA,KAAA,CAAAF,SAAKV,OAENC,GAAWW,EAAA,MAAA,CAAKP,UAAWE,EAAON,QAAOS,SAAGT,MAGnD"}
@@ -1,4 +1,2 @@
1
- var styles = {"root":"PageTitle-module_root__qgEO4","noBorder":"PageTitle-module_noBorder__hoNLA","size_lg":"PageTitle-module_size_lg__VBUCT","size_sm":"PageTitle-module_size_sm__QmF4G","main":"PageTitle-module_main__bncFv","actions":"PageTitle-module_actions__Wef1k"};
2
-
3
- export { styles as default };
1
+ var e={root:"PageTitle-module_root__qgEO4",noBorder:"PageTitle-module_noBorder__hoNLA",size_lg:"PageTitle-module_size_lg__VBUCT",size_sm:"PageTitle-module_size_sm__QmF4G",main:"PageTitle-module_main__bncFv",actions:"PageTitle-module_actions__Wef1k"};export{e as default};
4
2
  //# sourceMappingURL=PageTitle.module.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PageTitle.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"PageTitle.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}