@fuf-stack/pixels 1.11.0 → 1.11.2

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 (166) hide show
  1. package/dist/Accordion/Accordion.cjs +0 -1
  2. package/dist/Accordion/Accordion.cjs.map +1 -1
  3. package/dist/Accordion/Accordion.d.cts +512 -74
  4. package/dist/Accordion/Accordion.d.cts.map +1 -1
  5. package/dist/Accordion/Accordion.d.ts +512 -74
  6. package/dist/Accordion/Accordion.d.ts.map +1 -1
  7. package/dist/Alert/Alert.cjs +0 -1
  8. package/dist/Alert/Alert.cjs.map +1 -1
  9. package/dist/Alert/Alert.d.cts +395 -109
  10. package/dist/Alert/Alert.d.cts.map +1 -1
  11. package/dist/Alert/Alert.d.ts +395 -109
  12. package/dist/Alert/Alert.d.ts.map +1 -1
  13. package/dist/Avatar/Avatar.cjs +0 -1
  14. package/dist/Avatar/Avatar.cjs.map +1 -1
  15. package/dist/Avatar/Avatar.d.cts +734 -45
  16. package/dist/Avatar/Avatar.d.cts.map +1 -1
  17. package/dist/Avatar/Avatar.d.ts +734 -45
  18. package/dist/Avatar/Avatar.d.ts.map +1 -1
  19. package/dist/AvatarGroup/AvatarGroup.cjs +0 -1
  20. package/dist/AvatarGroup/AvatarGroup.cjs.map +1 -1
  21. package/dist/Badge/Badge.cjs +0 -1
  22. package/dist/Badge/Badge.cjs.map +1 -1
  23. package/dist/Badge/Badge.d.cts +377 -27
  24. package/dist/Badge/Badge.d.cts.map +1 -1
  25. package/dist/Badge/Badge.d.ts +377 -27
  26. package/dist/Badge/Badge.d.ts.map +1 -1
  27. package/dist/Breadcrumb/Breadcrumb.cjs +10 -11
  28. package/dist/Breadcrumb/Breadcrumb.cjs.map +1 -1
  29. package/dist/Breadcrumb/Breadcrumb.d.cts +853 -51
  30. package/dist/Breadcrumb/Breadcrumb.d.cts.map +1 -1
  31. package/dist/Breadcrumb/Breadcrumb.d.ts +853 -51
  32. package/dist/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  33. package/dist/Breadcrumb/Breadcrumb.js +10 -10
  34. package/dist/Breadcrumb/Breadcrumb.js.map +1 -1
  35. package/dist/Button/Button.cjs +0 -1
  36. package/dist/Button/Button.cjs.map +1 -1
  37. package/dist/Button/Button.d.cts +3 -215
  38. package/dist/Button/Button.d.cts.map +1 -1
  39. package/dist/Button/Button.d.ts +3 -215
  40. package/dist/Button/Button.d.ts.map +1 -1
  41. package/dist/Button/Button.js.map +1 -1
  42. package/dist/Button/subcomponents/LoadingSpinner.cjs +0 -1
  43. package/dist/Button/subcomponents/LoadingSpinner.cjs.map +1 -1
  44. package/dist/ButtonGroup/ButtonGroup.cjs +0 -1
  45. package/dist/ButtonGroup/ButtonGroup.cjs.map +1 -1
  46. package/dist/Card/Card.cjs +1 -2
  47. package/dist/Card/Card.cjs.map +1 -1
  48. package/dist/Card/Card.d.cts +734 -45
  49. package/dist/Card/Card.d.cts.map +1 -1
  50. package/dist/Card/Card.d.ts +734 -45
  51. package/dist/Card/Card.d.ts.map +1 -1
  52. package/dist/Card/Card.js +1 -1
  53. package/dist/Card/Card.js.map +1 -1
  54. package/dist/Drawer/Drawer.cjs +0 -1
  55. package/dist/Drawer/Drawer.cjs.map +1 -1
  56. package/dist/Drawer/Drawer.d.cts +972 -57
  57. package/dist/Drawer/Drawer.d.cts.map +1 -1
  58. package/dist/Drawer/Drawer.d.ts +972 -57
  59. package/dist/Drawer/Drawer.d.ts.map +1 -1
  60. package/dist/Json/Json.cjs +30 -23
  61. package/dist/Json/Json.cjs.map +1 -1
  62. package/dist/Json/Json.d.cts.map +1 -1
  63. package/dist/Json/Json.d.ts.map +1 -1
  64. package/dist/Json/Json.js +30 -22
  65. package/dist/Json/Json.js.map +1 -1
  66. package/dist/Json/subcomponents/CopiedRenderer.cjs +3 -4
  67. package/dist/Json/subcomponents/CopiedRenderer.cjs.map +1 -1
  68. package/dist/Json/subcomponents/CopiedRenderer.js +3 -3
  69. package/dist/Json/subcomponents/CopiedRenderer.js.map +1 -1
  70. package/dist/Json/subcomponents/ErrorRenderer.cjs +0 -1
  71. package/dist/Json/subcomponents/ErrorRenderer.cjs.map +1 -1
  72. package/dist/Json/subcomponents/NullRenderer.cjs +0 -1
  73. package/dist/Json/subcomponents/NullRenderer.cjs.map +1 -1
  74. package/dist/Label/Label.cjs +0 -1
  75. package/dist/Label/Label.cjs.map +1 -1
  76. package/dist/Label/Label.d.cts +418 -173
  77. package/dist/Label/Label.d.cts.map +1 -1
  78. package/dist/Label/Label.d.ts +418 -173
  79. package/dist/Label/Label.d.ts.map +1 -1
  80. package/dist/Menu/Menu.cjs +1 -2
  81. package/dist/Menu/Menu.cjs.map +1 -1
  82. package/dist/Menu/Menu.d.cts +377 -27
  83. package/dist/Menu/Menu.d.cts.map +1 -1
  84. package/dist/Menu/Menu.d.ts +377 -27
  85. package/dist/Menu/Menu.d.ts.map +1 -1
  86. package/dist/Menu/Menu.js +1 -1
  87. package/dist/Menu/Menu.js.map +1 -1
  88. package/dist/Menu/VerticalDotsIcon.cjs +0 -1
  89. package/dist/Menu/VerticalDotsIcon.cjs.map +1 -1
  90. package/dist/Modal/Modal.cjs +0 -1
  91. package/dist/Modal/Modal.cjs.map +1 -1
  92. package/dist/Modal/Modal.d.cts +342 -70
  93. package/dist/Modal/Modal.d.cts.map +1 -1
  94. package/dist/Modal/Modal.d.ts +342 -70
  95. package/dist/Modal/Modal.d.ts.map +1 -1
  96. package/dist/Modal/ModalHost.cjs +0 -1
  97. package/dist/Modal/ModalHost.cjs.map +1 -1
  98. package/dist/Modal/modalStore.cjs +0 -1
  99. package/dist/Modal/modalStore.cjs.map +1 -1
  100. package/dist/Popover/Popover.cjs +1 -2
  101. package/dist/Popover/Popover.cjs.map +1 -1
  102. package/dist/Popover/Popover.d.cts +1091 -63
  103. package/dist/Popover/Popover.d.cts.map +1 -1
  104. package/dist/Popover/Popover.d.ts +1091 -63
  105. package/dist/Popover/Popover.d.ts.map +1 -1
  106. package/dist/Popover/Popover.js +1 -1
  107. package/dist/Popover/Popover.js.map +1 -1
  108. package/dist/Progress/Progress.cjs +0 -1
  109. package/dist/Progress/Progress.cjs.map +1 -1
  110. package/dist/Progress/Progress.d.cts +321 -85
  111. package/dist/Progress/Progress.d.cts.map +1 -1
  112. package/dist/Progress/Progress.d.ts +321 -85
  113. package/dist/Progress/Progress.d.ts.map +1 -1
  114. package/dist/ProgressCircular/ProgressCircular.cjs +1 -2
  115. package/dist/ProgressCircular/ProgressCircular.cjs.map +1 -1
  116. package/dist/ProgressCircular/ProgressCircular.d.cts +507 -186
  117. package/dist/ProgressCircular/ProgressCircular.d.cts.map +1 -1
  118. package/dist/ProgressCircular/ProgressCircular.d.ts +507 -186
  119. package/dist/ProgressCircular/ProgressCircular.d.ts.map +1 -1
  120. package/dist/ProgressCircular/ProgressCircular.js +1 -1
  121. package/dist/ProgressCircular/ProgressCircular.js.map +1 -1
  122. package/dist/ScrollShadow/ScrollShadow.cjs +0 -1
  123. package/dist/ScrollShadow/ScrollShadow.cjs.map +1 -1
  124. package/dist/SearchInput/SearchInput.cjs +8 -9
  125. package/dist/SearchInput/SearchInput.cjs.map +1 -1
  126. package/dist/SearchInput/SearchInput.d.cts +615 -39
  127. package/dist/SearchInput/SearchInput.d.cts.map +1 -1
  128. package/dist/SearchInput/SearchInput.d.ts +615 -39
  129. package/dist/SearchInput/SearchInput.d.ts.map +1 -1
  130. package/dist/SearchInput/SearchInput.js +8 -8
  131. package/dist/SearchInput/SearchInput.js.map +1 -1
  132. package/dist/Table/Table.cjs +0 -1
  133. package/dist/Table/Table.cjs.map +1 -1
  134. package/dist/Table/Table.d.cts +514 -96
  135. package/dist/Table/Table.d.cts.map +1 -1
  136. package/dist/Table/Table.d.ts +514 -96
  137. package/dist/Table/Table.d.ts.map +1 -1
  138. package/dist/Tabs/Tabs.cjs +0 -1
  139. package/dist/Tabs/Tabs.cjs.map +1 -1
  140. package/dist/Tabs/Tabs.d.cts +972 -57
  141. package/dist/Tabs/Tabs.d.cts.map +1 -1
  142. package/dist/Tabs/Tabs.d.ts +972 -57
  143. package/dist/Tabs/Tabs.d.ts.map +1 -1
  144. package/dist/Toast/Toaster.cjs +0 -1
  145. package/dist/Toast/Toaster.cjs.map +1 -1
  146. package/dist/Toast/toast.cjs +0 -1
  147. package/dist/Toast/toast.cjs.map +1 -1
  148. package/dist/Tooltip/Tooltip.cjs +6 -7
  149. package/dist/Tooltip/Tooltip.cjs.map +1 -1
  150. package/dist/Tooltip/Tooltip.d.cts +452 -143
  151. package/dist/Tooltip/Tooltip.d.cts.map +1 -1
  152. package/dist/Tooltip/Tooltip.d.ts +452 -143
  153. package/dist/Tooltip/Tooltip.d.ts.map +1 -1
  154. package/dist/Tooltip/Tooltip.js +6 -6
  155. package/dist/Tooltip/Tooltip.js.map +1 -1
  156. package/dist/hooks/useDebounce/useDebounce.cjs +0 -1
  157. package/dist/hooks/useDebounce/useDebounce.cjs.map +1 -1
  158. package/dist/hooks/useIsInitialRenderCycle/useIsInitialRenderCycle.cjs +0 -1
  159. package/dist/hooks/useIsInitialRenderCycle/useIsInitialRenderCycle.cjs.map +1 -1
  160. package/dist/hooks/useLocalStorage/useLocalStorage.cjs +0 -1
  161. package/dist/hooks/useLocalStorage/useLocalStorage.cjs.map +1 -1
  162. package/dist/node_modules/.pnpm/@uiw_react-json-view@2.0.0-alpha.43_@babel_runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/useIdCompat.cjs +0 -1
  163. package/dist/node_modules/.pnpm/@uiw_react-json-view@2.0.0-alpha.43_@babel_runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/useIdCompat.cjs.map +1 -1
  164. package/dist/node_modules/.pnpm/@uiw_react-json-view@2.0.0-alpha.43_@babel_runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/utils/useHighlight.cjs +0 -1
  165. package/dist/node_modules/.pnpm/@uiw_react-json-view@2.0.0-alpha.43_@babel_runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/utils/useHighlight.cjs.map +1 -1
  166. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.d.ts","names":[],"sources":["../../src/Tooltip/Tooltip.tsx"],"mappings":";;;;;cAWa,eAAA,8BAAe,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA6DvB,YAAA,GAAe,OAAO,QAAQ,eAAA;AAAA,KAC9B,SAAA,GAAY,WAAW,QAAQ,eAAA;AAAA,KAExB,kBAAA,GAAmB,gBAAoB;AAAA,UAElC,YAAA,SAAqB,YAAA;EAAA;EAEpC,QAAA,EAAU,SAAA;EAAA;EAEV,SAAA,GAAY,SAAA;EAAA;EAEZ,UAAA;EAEA;EAAA,gBAAA;EAES;EAAT,OAAA,EAAS,SAAA;EAIT;EAFA,WAAA;EAIS;EAFT,KAAA;EAIS;EAFT,MAAA,GAAS,SAAA;EAIO;EAFhB,MAAA,GAAS,SAAA;EAIG;EAFZ,YAAA,IAAgB,MAAA;EAIT;EAFP,SAAA,GAAY,kBAAA;EAEO;EAAnB,IAAA,GAAO,YAAA;AAAA;;;;cAMH,SAAA;EAAW,QAAA;EAAA,SAAA,EAAA,UAAA;EAAA,UAAA;EAAA,gBAAA;EAAA,OAAA;EAAA,WAAA;EAAA,KAAA;EAAA,MAAA;EAAA,MAAA;EAAA,YAAA;EAAA,SAAA;EAAA;AAAA,GAad,YAAA,iCAAY,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"Tooltip.d.ts","names":[],"sources":["../../src/Tooltip/Tooltip.tsx"],"mappings":";;;;;cAWa,eAAA,IAAe,KAAA;;;gbA2D1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mbAqCe;mbAAA;mbAAA;sbAAA;sbAAA;qbAAA;4bAAA;qbAad;4bAAY;sbAAA;IAAA;;;;ubAbE;mbAAA;mbAAA;sbAAA;sbAAA;qbAAA;4bAAA;qbAAA;4bAAA;sbAAA;IAAA;EAAA;;;;;;kbAAA;;;;sbAaF;EAAA;;;KAhDV,YAAA,GAAe,OAAO,QAAQ,eAAA;AAAA,KAC9B,SAAA,GAAY,WAAW,QAAQ,eAAA;AAAA,KAExB,kBAAA,GAAmB,gBAAoB;AAAA,UAElC,YAAA,SAAqB,YAAA;;EAEpC,QAAA,EAAU,SAAA;;EAEV,SAAA,GAAY,SAAA;;EAEZ,UAAA;;EAEA,gBAAA;;EAEA,OAAA,EAAS,SAAA;;EAET,WAAA;;EAEA,KAAA;;EAEA,MAAA,GAAS,SAAA;;EAET,MAAA,GAAS,SAAA;;EAET,YAAA,IAAgB,MAAA;;EAEhB,SAAA,GAAY,kBAAA;;EAEZ,IAAA,GAAO,YAAA;AAAA;;;;cAMH,SAAA;EAAW,QAAA;EAAA,SAAA,EAAA,UAAA;EAAA,UAAA;EAAA,gBAAA;EAAA,OAAA;EAAA,WAAA;EAAA,KAAA;EAAA,MAAA;EAAA,MAAA;EAAA,YAAA;EAAA,SAAA;EAAA;AAAA,GAad,YAAA,iCAAY,GAAA,CAAA,OAAA"}
@@ -60,15 +60,9 @@ const tooltipVariants = tv({
60
60
  const Tooltip$1 = ({ children, className: _className = void 0, closeDelay = 500, containerPadding = 0, content, defaultOpen = false, delay = 0, footer = void 0, header = void 0, onOpenChange = void 0, placement = "top", size = "full" }) => {
61
61
  const classNames = variantsToClassNames(tooltipVariants({ size }), _className, "base");
62
62
  return /* @__PURE__ */ jsx(Tooltip, {
63
- shouldFlip: true,
64
- showArrow: true,
65
63
  classNames,
66
64
  closeDelay,
67
65
  containerPadding,
68
- defaultOpen,
69
- delay,
70
- onOpenChange,
71
- placement,
72
66
  content: /* @__PURE__ */ jsxs("div", { children: [
73
67
  header ? /* @__PURE__ */ jsxs("div", {
74
68
  className: classNames.headerWrapper,
@@ -89,9 +83,15 @@ const Tooltip$1 = ({ children, className: _className = void 0, closeDelay = 500,
89
83
  })]
90
84
  }) : null
91
85
  ] }),
86
+ defaultOpen,
87
+ delay,
92
88
  onClick: (e) => {
93
89
  e.preventDefault();
94
90
  },
91
+ onOpenChange,
92
+ placement,
93
+ shouldFlip: true,
94
+ showArrow: true,
95
95
  children: /* @__PURE__ */ jsx("span", {
96
96
  className: classNames.trigger,
97
97
  children
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","names":["Tooltip","HeroTooltip","ScrollShadow"],"sources":["../../src/Tooltip/Tooltip.tsx"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { TooltipPlacement as HeroTooltipPlacement } from '@heroui/tooltip';\nimport type { ReactNode } from 'react';\n\nimport { Tooltip as HeroTooltip } from '@heroui/tooltip';\n\nimport { tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport ScrollShadow from '../ScrollShadow/ScrollShadow';\n\n// tooltip variants\nexport const tooltipVariants = tv({\n slots: {\n base: '',\n body: 'w-full px-4 py-2',\n content: 'flex max-h-[80vh] flex-col p-0',\n divider: 'm-0 w-full border-divider p-0',\n footer: 'w-full px-4 py-2',\n footerWrapper: 'w-full',\n header: 'w-full px-4 pb-1 pt-2 font-semibold',\n headerWrapper: 'w-full',\n trigger: 'cursor-pointer',\n },\n variants: {\n size: {\n xs: {\n // base: 'max-w-xs',\n body: 'max-w-xs',\n footer: 'max-w-xs',\n header: 'max-w-xs',\n },\n sm: {\n // base: 'max-w-sm',\n body: 'max-w-sm',\n footer: 'max-w-sm',\n header: 'max-w-sm',\n },\n md: {\n // base: 'max-w-md',\n body: 'max-w-md',\n footer: 'max-w-md',\n header: 'max-w-md',\n },\n lg: {\n // base: 'max-w-lg',\n body: 'max-w-lg',\n footer: 'max-w-lg',\n header: 'max-w-lg',\n },\n xl: {\n // base: 'max-w-xl',\n body: 'max-w-xl',\n footer: 'max-w-xl',\n header: 'max-w-xl',\n },\n '2xl': {\n // base: 'max-w-2xl',\n body: 'max-w-2xl',\n footer: 'max-w-2xl',\n header: 'max-w-2xl',\n },\n '3xl': {\n // base: 'max-w-3xl',\n body: 'max-w-3xl',\n footer: 'max-w-3xl',\n header: 'max-w-3xl',\n },\n full: { base: '' },\n },\n },\n});\n\ntype VariantProps = TVProps<typeof tooltipVariants>;\ntype ClassName = TVClassName<typeof tooltipVariants>;\n\nexport type TooltipPlacement = HeroTooltipPlacement;\n\nexport interface TooltipProps extends VariantProps {\n /** trigger child components */\n children: ReactNode;\n /** CSS class name */\n className?: ClassName;\n /** delay in milliseconds before the tooltip opens. */\n closeDelay?: number;\n /** placement padding in px */\n containerPadding?: number;\n /** content displayed in the tooltip */\n content: ReactNode;\n /** open overlay initially when uncontrolled */\n defaultOpen?: boolean;\n /** delay in milliseconds before the tooltip opens. */\n delay?: number;\n /** tooltip footer */\n footer?: ReactNode;\n /** tooltip header */\n header?: ReactNode;\n /** handler that is called when the overlay's open state changes */\n onOpenChange?: (isOpen: boolean) => void;\n /** placement if the tooltip */\n placement?: TooltipPlacement;\n /** size of the tooltip */\n size?: VariantProps['size'];\n}\n\n/**\n * Tooltip component based on [HeroUI Tooltip](https://www.heroui.com//docs/components/tooltip)\n */\nconst Tooltip = ({\n children,\n className: _className = undefined,\n closeDelay = 500,\n containerPadding = 0,\n content,\n defaultOpen = false,\n delay = 0,\n footer = undefined,\n header = undefined,\n onOpenChange = undefined,\n placement = 'top',\n size = 'full',\n}: TooltipProps) => {\n // classNames from slots\n const variants = tooltipVariants({ size });\n const classNames = variantsToClassNames(variants, _className, 'base');\n\n return (\n <HeroTooltip\n shouldFlip\n showArrow\n classNames={classNames}\n closeDelay={closeDelay}\n containerPadding={containerPadding}\n defaultOpen={defaultOpen}\n delay={delay}\n onOpenChange={onOpenChange}\n placement={placement}\n content={\n <div>\n {header ? (\n <div className={classNames.headerWrapper}>\n <div className={classNames.header}>{header}</div>\n <hr className={classNames.divider} />\n </div>\n ) : null}\n <ScrollShadow className={classNames.body}>{content}</ScrollShadow>\n {footer ? (\n <div className={classNames.footerWrapper}>\n <hr className={classNames.divider} />\n <div className={classNames.footer}>{footer}</div>\n </div>\n ) : null}\n </div>\n }\n onClick={(e) => {\n e.preventDefault();\n }}\n >\n <span className={classNames.trigger}>{children}</span>\n </HeroTooltip>\n );\n};\n\nexport default Tooltip;\n"],"mappings":";;;;;AAWA,MAAa,kBAAkB,GAAG;CAChC,OAAO;EACL,MAAM;EACN,MAAM;EACN,SAAS;EACT,SAAS;EACT,QAAQ;EACR,eAAe;EACf,QAAQ;EACR,eAAe;EACf,SAAS;CACX;CACA,UAAU,EACR,MAAM;EACJ,IAAI;GAEF,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,IAAI;GAEF,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,IAAI;GAEF,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,IAAI;GAEF,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,IAAI;GAEF,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,OAAO;GAEL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,OAAO;GAEL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,MAAM,EAAE,MAAM,GAAG;CACnB,EACF;AACF,CAAC;;;;AAqCD,MAAMA,aAAW,EACf,UACA,WAAW,aAAa,KAAA,GACxB,aAAa,KACb,mBAAmB,GACnB,SACA,cAAc,OACd,QAAQ,GACR,SAAS,KAAA,GACT,SAAS,KAAA,GACT,eAAe,KAAA,GACf,YAAY,OACZ,OAAO,aACW;CAGlB,MAAM,aAAa,qBADF,gBAAgB,EAAE,KAAK,CACO,GAAG,YAAY,MAAM;CAEpE,OACE,oBAACC,SAAD;EACE,YAAA;EACA,WAAA;EACY;EACA;EACM;EACL;EACN;EACO;EACH;EACX,SACE,qBAAC,OAAD,EAAA,UAAA;GACG,SACC,qBAAC,OAAD;IAAK,WAAW,WAAW;cAA3B,CACE,oBAAC,OAAD;KAAK,WAAW,WAAW;eAAS;IAAY,CAAA,GAChD,oBAAC,MAAD,EAAI,WAAW,WAAW,QAAU,CAAA,CACjC;QACH;GACJ,oBAACC,sBAAD;IAAc,WAAW,WAAW;cAAO;GAAsB,CAAA;GAChE,SACC,qBAAC,OAAD;IAAK,WAAW,WAAW;cAA3B,CACE,oBAAC,MAAD,EAAI,WAAW,WAAW,QAAU,CAAA,GACpC,oBAAC,OAAD;KAAK,WAAW,WAAW;eAAS;IAAY,CAAA,CAC7C;QACH;EACD,EAAA,CAAA;EAEP,UAAU,MAAM;GACd,EAAE,eAAe;EACnB;YAEA,oBAAC,QAAD;GAAM,WAAW,WAAW;GAAU;EAAe,CAAA;CAC1C,CAAA;AAEjB"}
1
+ {"version":3,"file":"Tooltip.js","names":["Tooltip","HeroTooltip","ScrollShadow"],"sources":["../../src/Tooltip/Tooltip.tsx"],"sourcesContent":["import type { TVClassName, TVProps } from '@fuf-stack/pixel-utils';\nimport type { TooltipPlacement as HeroTooltipPlacement } from '@heroui/tooltip';\nimport type { ReactNode } from 'react';\n\nimport { Tooltip as HeroTooltip } from '@heroui/tooltip';\n\nimport { tv, variantsToClassNames } from '@fuf-stack/pixel-utils';\n\nimport ScrollShadow from '../ScrollShadow/ScrollShadow';\n\n// tooltip variants\nexport const tooltipVariants = tv({\n slots: {\n base: '',\n body: 'w-full px-4 py-2',\n content: 'flex max-h-[80vh] flex-col p-0',\n divider: 'm-0 w-full border-divider p-0',\n footer: 'w-full px-4 py-2',\n footerWrapper: 'w-full',\n header: 'w-full px-4 pb-1 pt-2 font-semibold',\n headerWrapper: 'w-full',\n trigger: 'cursor-pointer',\n },\n variants: {\n size: {\n xs: {\n // base: 'max-w-xs',\n body: 'max-w-xs',\n footer: 'max-w-xs',\n header: 'max-w-xs',\n },\n sm: {\n // base: 'max-w-sm',\n body: 'max-w-sm',\n footer: 'max-w-sm',\n header: 'max-w-sm',\n },\n md: {\n // base: 'max-w-md',\n body: 'max-w-md',\n footer: 'max-w-md',\n header: 'max-w-md',\n },\n lg: {\n // base: 'max-w-lg',\n body: 'max-w-lg',\n footer: 'max-w-lg',\n header: 'max-w-lg',\n },\n xl: {\n // base: 'max-w-xl',\n body: 'max-w-xl',\n footer: 'max-w-xl',\n header: 'max-w-xl',\n },\n '2xl': {\n // base: 'max-w-2xl',\n body: 'max-w-2xl',\n footer: 'max-w-2xl',\n header: 'max-w-2xl',\n },\n '3xl': {\n // base: 'max-w-3xl',\n body: 'max-w-3xl',\n footer: 'max-w-3xl',\n header: 'max-w-3xl',\n },\n full: { base: '' },\n },\n },\n});\n\ntype VariantProps = TVProps<typeof tooltipVariants>;\ntype ClassName = TVClassName<typeof tooltipVariants>;\n\nexport type TooltipPlacement = HeroTooltipPlacement;\n\nexport interface TooltipProps extends VariantProps {\n /** trigger child components */\n children: ReactNode;\n /** CSS class name */\n className?: ClassName;\n /** delay in milliseconds before the tooltip opens. */\n closeDelay?: number;\n /** placement padding in px */\n containerPadding?: number;\n /** content displayed in the tooltip */\n content: ReactNode;\n /** open overlay initially when uncontrolled */\n defaultOpen?: boolean;\n /** delay in milliseconds before the tooltip opens. */\n delay?: number;\n /** tooltip footer */\n footer?: ReactNode;\n /** tooltip header */\n header?: ReactNode;\n /** handler that is called when the overlay's open state changes */\n onOpenChange?: (isOpen: boolean) => void;\n /** placement if the tooltip */\n placement?: TooltipPlacement;\n /** size of the tooltip */\n size?: VariantProps['size'];\n}\n\n/**\n * Tooltip component based on [HeroUI Tooltip](https://www.heroui.com//docs/components/tooltip)\n */\nconst Tooltip = ({\n children,\n className: _className = undefined,\n closeDelay = 500,\n containerPadding = 0,\n content,\n defaultOpen = false,\n delay = 0,\n footer = undefined,\n header = undefined,\n onOpenChange = undefined,\n placement = 'top',\n size = 'full',\n}: TooltipProps) => {\n // classNames from slots\n const variants = tooltipVariants({ size });\n const classNames = variantsToClassNames(variants, _className, 'base');\n\n return (\n <HeroTooltip\n classNames={classNames}\n closeDelay={closeDelay}\n containerPadding={containerPadding}\n content={\n <div>\n {header ? (\n <div className={classNames.headerWrapper}>\n <div className={classNames.header}>{header}</div>\n <hr className={classNames.divider} />\n </div>\n ) : null}\n <ScrollShadow className={classNames.body}>{content}</ScrollShadow>\n {footer ? (\n <div className={classNames.footerWrapper}>\n <hr className={classNames.divider} />\n <div className={classNames.footer}>{footer}</div>\n </div>\n ) : null}\n </div>\n }\n defaultOpen={defaultOpen}\n delay={delay}\n onClick={(e) => {\n e.preventDefault();\n }}\n onOpenChange={onOpenChange}\n placement={placement}\n shouldFlip\n showArrow\n >\n <span className={classNames.trigger}>{children}</span>\n </HeroTooltip>\n );\n};\n\nexport default Tooltip;\n"],"mappings":";;;;;AAWA,MAAa,kBAAkB,GAAG;CAChC,OAAO;EACL,MAAM;EACN,MAAM;EACN,SAAS;EACT,SAAS;EACT,QAAQ;EACR,eAAe;EACf,QAAQ;EACR,eAAe;EACf,SAAS;CACX;CACA,UAAU,EACR,MAAM;EACJ,IAAI;GAEF,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,IAAI;GAEF,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,IAAI;GAEF,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,IAAI;GAEF,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,IAAI;GAEF,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,OAAO;GAEL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,OAAO;GAEL,MAAM;GACN,QAAQ;GACR,QAAQ;EACV;EACA,MAAM,EAAE,MAAM,GAAG;CACnB,EACF;AACF,CAAC;;;;AAqCD,MAAMA,aAAW,EACf,UACA,WAAW,aAAa,KAAA,GACxB,aAAa,KACb,mBAAmB,GACnB,SACA,cAAc,OACd,QAAQ,GACR,SAAS,KAAA,GACT,SAAS,KAAA,GACT,eAAe,KAAA,GACf,YAAY,OACZ,OAAO,aACW;CAGlB,MAAM,aAAa,qBADF,gBAAgB,EAAE,KAAK,CACO,GAAG,YAAY,MAAM;CAEpE,OACE,oBAACC,SAAD;EACc;EACA;EACM;EAClB,SACE,qBAAC,OAAD,EAAA,UAAA;GACG,SACC,qBAAC,OAAD;IAAK,WAAW,WAAW;cAA3B,CACE,oBAAC,OAAD;KAAK,WAAW,WAAW;eAAS;IAAY,CAAA,GAChD,oBAAC,MAAD,EAAI,WAAW,WAAW,QAAU,CAAA,CACjC;QACH;GACJ,oBAACC,sBAAD;IAAc,WAAW,WAAW;cAAO;GAAsB,CAAA;GAChE,SACC,qBAAC,OAAD;IAAK,WAAW,WAAW;cAA3B,CACE,oBAAC,MAAD,EAAI,WAAW,WAAW,QAAU,CAAA,GACpC,oBAAC,OAAD;KAAK,WAAW,WAAW;eAAS;IAAY,CAAA,CAC7C;QACH;EACD,EAAA,CAAA;EAEM;EACN;EACP,UAAU,MAAM;GACd,EAAE,eAAe;EACnB;EACc;EACH;EACX,YAAA;EACA,WAAA;YAEA,oBAAC,QAAD;GAAM,WAAW,WAAW;GAAU;EAAe,CAAA;CAC1C,CAAA;AAEjB"}
@@ -1,4 +1,3 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");
2
1
  let _fuf_stack_pixel_utils = require("@fuf-stack/pixel-utils");
3
2
  let react = require("react");
4
3
  //#region src/hooks/useDebounce/useDebounce.ts
@@ -1 +1 @@
1
- {"version":3,"file":"useDebounce.cjs","names":[],"sources":["../../../src/hooks/useDebounce/useDebounce.ts"],"sourcesContent":["/* eslint-disable import-x/prefer-default-export */\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { isTestEnvironment } from '@fuf-stack/pixel-utils';\n\n/**\n * Hook that debounces a value\n * @param value - The value to debounce\n * @param delay - Delay in milliseconds\n * @returns The debounced value\n */\nexport const useDebounce = <Value>(value: Value, delay: number) => {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n // Track if component is mounted to prevent setState on unmounted component\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n // Mark as mounted\n isMountedRef.current = true;\n return () => {\n // Mark as unmounted on cleanup\n isMountedRef.current = false;\n };\n }, []);\n\n useEffect(\n () => {\n // In test environments, skip debouncing for immediate snapshots\n if (isTestEnvironment()) {\n setDebouncedValue(value);\n return;\n }\n\n // Update debounced value after delay\n const handler = setTimeout(() => {\n // Only update state if component is still mounted\n if (isMountedRef.current) {\n setDebouncedValue(value);\n }\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n // eslint-disable-next-line consistent-return\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay], // Only re-call effect if value or delay changes\n );\n\n return debouncedValue;\n};\n"],"mappings":";;;;;;;;;;AAYA,MAAa,eAAsB,OAAc,UAAkB;CAEjE,MAAM,CAAC,gBAAgB,sBAAA,GAAA,MAAA,UAA8B,KAAK;CAE1D,MAAM,gBAAA,GAAA,MAAA,QAAsB,IAAI;CAEhC,CAAA,GAAA,MAAA,iBAAgB;EAEd,aAAa,UAAU;EACvB,aAAa;GAEX,aAAa,UAAU;EACzB;CACF,GAAG,CAAC,CAAC;CAEL,CAAA,GAAA,MAAA,iBACQ;EAEJ,KAAA,GAAA,uBAAA,mBAAsB,GAAG;GACvB,kBAAkB,KAAK;GACvB;EACF;EAGA,MAAM,UAAU,iBAAiB;GAE/B,IAAI,aAAa,SACf,kBAAkB,KAAK;EAE3B,GAAG,KAAK;EAMR,aAAa;GACX,aAAa,OAAO;EACtB;CACF,GACA,CAAC,OAAO,KAAK,CACf;CAEA,OAAO;AACT"}
1
+ {"version":3,"file":"useDebounce.cjs","names":[],"sources":["../../../src/hooks/useDebounce/useDebounce.ts"],"sourcesContent":["/* eslint-disable import-x/prefer-default-export */\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { isTestEnvironment } from '@fuf-stack/pixel-utils';\n\n/**\n * Hook that debounces a value\n * @param value - The value to debounce\n * @param delay - Delay in milliseconds\n * @returns The debounced value\n */\nexport const useDebounce = <Value>(value: Value, delay: number) => {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n // Track if component is mounted to prevent setState on unmounted component\n const isMountedRef = useRef(true);\n\n useEffect(() => {\n // Mark as mounted\n isMountedRef.current = true;\n return () => {\n // Mark as unmounted on cleanup\n isMountedRef.current = false;\n };\n }, []);\n\n useEffect(\n () => {\n // In test environments, skip debouncing for immediate snapshots\n if (isTestEnvironment()) {\n setDebouncedValue(value);\n return;\n }\n\n // Update debounced value after delay\n const handler = setTimeout(() => {\n // Only update state if component is still mounted\n if (isMountedRef.current) {\n setDebouncedValue(value);\n }\n }, delay);\n\n // Cancel the timeout if value changes (also on delay change or unmount)\n // This is how we prevent debounced value from updating if value is changed ...\n // .. within the delay period. Timeout gets cleared and restarted.\n // eslint-disable-next-line consistent-return\n return () => {\n clearTimeout(handler);\n };\n },\n [value, delay], // Only re-call effect if value or delay changes\n );\n\n return debouncedValue;\n};\n"],"mappings":";;;;;;;;;AAYA,MAAa,eAAsB,OAAc,UAAkB;CAEjE,MAAM,CAAC,gBAAgB,sBAAA,GAAA,MAAA,UAA8B,KAAK;CAE1D,MAAM,gBAAA,GAAA,MAAA,QAAsB,IAAI;CAEhC,CAAA,GAAA,MAAA,iBAAgB;EAEd,aAAa,UAAU;EACvB,aAAa;GAEX,aAAa,UAAU;EACzB;CACF,GAAG,CAAC,CAAC;CAEL,CAAA,GAAA,MAAA,iBACQ;EAEJ,KAAA,GAAA,uBAAA,mBAAsB,GAAG;GACvB,kBAAkB,KAAK;GACvB;EACF;EAGA,MAAM,UAAU,iBAAiB;GAE/B,IAAI,aAAa,SACf,kBAAkB,KAAK;EAE3B,GAAG,KAAK;EAMR,aAAa;GACX,aAAa,OAAO;EACtB;CACF,GACA,CAAC,OAAO,KAAK,CACf;CAEA,OAAO;AACT"}
@@ -1,4 +1,3 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");
2
1
  let react = require("react");
3
2
  //#region src/hooks/useIsInitialRenderCycle/useIsInitialRenderCycle.ts
4
3
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useIsInitialRenderCycle.cjs","names":[],"sources":["../../../src/hooks/useIsInitialRenderCycle/useIsInitialRenderCycle.ts"],"sourcesContent":["/* eslint-disable import-x/prefer-default-export */\n\nimport { useEffect, useRef } from 'react';\n\n/**\n * A hook that returns true on initial render and false afterward.\n *\n * @returns {boolean} - True on initial render, false afterward\n */\nexport const useIsInitialRenderCycle = (): boolean => {\n // Use ref to avoid re-renders\n const isInitialRender = useRef(true);\n\n // Update ref after first render\n useEffect(() => {\n // Set to false after component mounts\n isInitialRender.current = false;\n\n // No cleanup needed for this effect\n }, []);\n\n return isInitialRender.current;\n};\n"],"mappings":";;;;;;;;AASA,MAAa,gCAAyC;CAEpD,MAAM,mBAAA,GAAA,MAAA,QAAyB,IAAI;CAGnC,CAAA,GAAA,MAAA,iBAAgB;EAEd,gBAAgB,UAAU;CAG5B,GAAG,CAAC,CAAC;CAEL,OAAO,gBAAgB;AACzB"}
1
+ {"version":3,"file":"useIsInitialRenderCycle.cjs","names":[],"sources":["../../../src/hooks/useIsInitialRenderCycle/useIsInitialRenderCycle.ts"],"sourcesContent":["/* eslint-disable import-x/prefer-default-export */\n\nimport { useEffect, useRef } from 'react';\n\n/**\n * A hook that returns true on initial render and false afterward.\n *\n * @returns {boolean} - True on initial render, false afterward\n */\nexport const useIsInitialRenderCycle = (): boolean => {\n // Use ref to avoid re-renders\n const isInitialRender = useRef(true);\n\n // Update ref after first render\n useEffect(() => {\n // Set to false after component mounts\n isInitialRender.current = false;\n\n // No cleanup needed for this effect\n }, []);\n\n return isInitialRender.current;\n};\n"],"mappings":";;;;;;;AASA,MAAa,gCAAyC;CAEpD,MAAM,mBAAA,GAAA,MAAA,QAAyB,IAAI;CAGnC,CAAA,GAAA,MAAA,iBAAgB;EAEd,gBAAgB,UAAU;CAG5B,GAAG,CAAC,CAAC;CAEL,OAAO,gBAAgB;AACzB"}
@@ -1,4 +1,3 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");
2
1
  let react = require("react");
3
2
  //#region src/hooks/useLocalStorage/useLocalStorage.ts
4
3
  const useLocalStorage = (key, initialValue) => {
@@ -1 +1 @@
1
- {"version":3,"file":"useLocalStorage.cjs","names":[],"sources":["../../../src/hooks/useLocalStorage/useLocalStorage.ts"],"sourcesContent":["/* eslint-disable import-x/prefer-default-export */\n\nimport type { Dispatch, SetStateAction } from 'react';\n\nimport { useEffect, useState } from 'react';\n\nexport const useLocalStorage = <T>(\n key: string,\n initialValue: T | (() => T),\n): [T, Dispatch<SetStateAction<T>>] => {\n // Get from local storage then\n // parse stored json or return initialValue\n const readValue = (): T => {\n // Helper to resolve initial value (handle function or direct value)\n const resolveInitialValue = (): T => {\n return typeof initialValue === 'function'\n ? (initialValue as () => T)()\n : initialValue;\n };\n\n // Prevent build error \"window is undefined\" but keep keep working\n if (typeof window === 'undefined') {\n return resolveInitialValue();\n }\n\n try {\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n const item = window.localStorage.getItem(key);\n if (item) {\n return JSON.parse(item) as T;\n }\n return resolveInitialValue();\n } catch (error) {\n console.warn(`Error reading localStorage key \"${key}\":`, error);\n return resolveInitialValue();\n }\n };\n\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(readValue);\n\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue: Dispatch<SetStateAction<T>> = (value) => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === 'undefined') {\n console.warn(\n `Tried setting localStorage key \"${key}\" even though environment is not a client`,\n );\n return;\n }\n\n try {\n // Allow value to be a function so we have the same API as useState\n const newValue = value instanceof Function ? value(storedValue) : value;\n\n // Save to local storage\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n window.localStorage.setItem(key, JSON.stringify(newValue));\n\n // Save state\n setStoredValue(newValue);\n\n // We dispatch a custom event so every useLocalStorage hook are notified\n window.dispatchEvent(new Event('local-storage'));\n } catch (error) {\n console.warn(`Error setting localStorage key \"${key}\":`, error);\n }\n };\n\n useEffect(() => {\n setStoredValue(readValue());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n // Skip event listeners in SSR environment\n if (typeof window === 'undefined') {\n return undefined;\n }\n\n const handleStorageChange = () => {\n setStoredValue(readValue());\n };\n\n // this only works for other documents, not the current one\n window.addEventListener('storage', handleStorageChange);\n\n // this is a custom event, triggered in writeValueToLocalStorage\n window.addEventListener('local-storage', handleStorageChange);\n\n return () => {\n window.removeEventListener('storage', handleStorageChange);\n window.removeEventListener('local-storage', handleStorageChange);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return [storedValue, setValue];\n};\n"],"mappings":";;;AAMA,MAAa,mBACX,KACA,iBACqC;CAGrC,MAAM,kBAAqB;EAEzB,MAAM,4BAA+B;GACnC,OAAO,OAAO,iBAAiB,aAC1B,aAAyB,IAC1B;EACN;EAGA,IAAI,OAAO,WAAW,aACpB,OAAO,oBAAoB;EAG7B,IAAI;GAEF,MAAM,OAAO,OAAO,aAAa,QAAQ,GAAG;GAC5C,IAAI,MACF,OAAO,KAAK,MAAM,IAAI;GAExB,OAAO,oBAAoB;EAC7B,SAAS,OAAO;GACd,QAAQ,KAAK,mCAAmC,IAAI,KAAK,KAAK;GAC9D,OAAO,oBAAoB;EAC7B;CACF;CAIA,MAAM,CAAC,aAAa,mBAAA,GAAA,MAAA,UAA8B,SAAS;CAI3D,MAAM,YAAyC,UAAU;EAEvD,IAAI,OAAO,WAAW,aAAa;GACjC,QAAQ,KACN,mCAAmC,IAAI,0CACzC;GACA;EACF;EAEA,IAAI;GAEF,MAAM,WAAW,iBAAiB,WAAW,MAAM,WAAW,IAAI;GAIlE,OAAO,aAAa,QAAQ,KAAK,KAAK,UAAU,QAAQ,CAAC;GAGzD,eAAe,QAAQ;GAGvB,OAAO,cAAc,IAAI,MAAM,eAAe,CAAC;EACjD,SAAS,OAAO;GACd,QAAQ,KAAK,mCAAmC,IAAI,KAAK,KAAK;EAChE;CACF;CAEA,CAAA,GAAA,MAAA,iBAAgB;EACd,eAAe,UAAU,CAAC;CAE5B,GAAG,CAAC,CAAC;CAEL,CAAA,GAAA,MAAA,iBAAgB;EAEd,IAAI,OAAO,WAAW,aACpB;EAGF,MAAM,4BAA4B;GAChC,eAAe,UAAU,CAAC;EAC5B;EAGA,OAAO,iBAAiB,WAAW,mBAAmB;EAGtD,OAAO,iBAAiB,iBAAiB,mBAAmB;EAE5D,aAAa;GACX,OAAO,oBAAoB,WAAW,mBAAmB;GACzD,OAAO,oBAAoB,iBAAiB,mBAAmB;EACjE;CAEF,GAAG,CAAC,CAAC;CAEL,OAAO,CAAC,aAAa,QAAQ;AAC/B"}
1
+ {"version":3,"file":"useLocalStorage.cjs","names":[],"sources":["../../../src/hooks/useLocalStorage/useLocalStorage.ts"],"sourcesContent":["/* eslint-disable import-x/prefer-default-export */\n\nimport type { Dispatch, SetStateAction } from 'react';\n\nimport { useEffect, useState } from 'react';\n\nexport const useLocalStorage = <T>(\n key: string,\n initialValue: T | (() => T),\n): [T, Dispatch<SetStateAction<T>>] => {\n // Get from local storage then\n // parse stored json or return initialValue\n const readValue = (): T => {\n // Helper to resolve initial value (handle function or direct value)\n const resolveInitialValue = (): T => {\n return typeof initialValue === 'function'\n ? (initialValue as () => T)()\n : initialValue;\n };\n\n // Prevent build error \"window is undefined\" but keep keep working\n if (typeof window === 'undefined') {\n return resolveInitialValue();\n }\n\n try {\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n const item = window.localStorage.getItem(key);\n if (item) {\n return JSON.parse(item) as T;\n }\n return resolveInitialValue();\n } catch (error) {\n console.warn(`Error reading localStorage key \"${key}\":`, error);\n return resolveInitialValue();\n }\n };\n\n // State to store our value\n // Pass initial state function to useState so logic is only executed once\n const [storedValue, setStoredValue] = useState<T>(readValue);\n\n // Return a wrapped version of useState's setter function that ...\n // ... persists the new value to localStorage.\n const setValue: Dispatch<SetStateAction<T>> = (value) => {\n // Prevent build error \"window is undefined\" but keeps working\n if (typeof window === 'undefined') {\n console.warn(\n `Tried setting localStorage key \"${key}\" even though environment is not a client`,\n );\n return;\n }\n\n try {\n // Allow value to be a function so we have the same API as useState\n const newValue = value instanceof Function ? value(storedValue) : value;\n\n // Save to local storage\n // eslint-disable-next-line n/no-unsupported-features/node-builtins\n window.localStorage.setItem(key, JSON.stringify(newValue));\n\n // Save state\n setStoredValue(newValue);\n\n // We dispatch a custom event so every useLocalStorage hook are notified\n window.dispatchEvent(new Event('local-storage'));\n } catch (error) {\n console.warn(`Error setting localStorage key \"${key}\":`, error);\n }\n };\n\n useEffect(() => {\n setStoredValue(readValue());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n // Skip event listeners in SSR environment\n if (typeof window === 'undefined') {\n return undefined;\n }\n\n const handleStorageChange = () => {\n setStoredValue(readValue());\n };\n\n // this only works for other documents, not the current one\n window.addEventListener('storage', handleStorageChange);\n\n // this is a custom event, triggered in writeValueToLocalStorage\n window.addEventListener('local-storage', handleStorageChange);\n\n return () => {\n window.removeEventListener('storage', handleStorageChange);\n window.removeEventListener('local-storage', handleStorageChange);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return [storedValue, setValue];\n};\n"],"mappings":";;AAMA,MAAa,mBACX,KACA,iBACqC;CAGrC,MAAM,kBAAqB;EAEzB,MAAM,4BAA+B;GACnC,OAAO,OAAO,iBAAiB,aAC1B,aAAyB,IAC1B;EACN;EAGA,IAAI,OAAO,WAAW,aACpB,OAAO,oBAAoB;EAG7B,IAAI;GAEF,MAAM,OAAO,OAAO,aAAa,QAAQ,GAAG;GAC5C,IAAI,MACF,OAAO,KAAK,MAAM,IAAI;GAExB,OAAO,oBAAoB;EAC7B,SAAS,OAAO;GACd,QAAQ,KAAK,mCAAmC,IAAI,KAAK,KAAK;GAC9D,OAAO,oBAAoB;EAC7B;CACF;CAIA,MAAM,CAAC,aAAa,mBAAA,GAAA,MAAA,UAA8B,SAAS;CAI3D,MAAM,YAAyC,UAAU;EAEvD,IAAI,OAAO,WAAW,aAAa;GACjC,QAAQ,KACN,mCAAmC,IAAI,0CACzC;GACA;EACF;EAEA,IAAI;GAEF,MAAM,WAAW,iBAAiB,WAAW,MAAM,WAAW,IAAI;GAIlE,OAAO,aAAa,QAAQ,KAAK,KAAK,UAAU,QAAQ,CAAC;GAGzD,eAAe,QAAQ;GAGvB,OAAO,cAAc,IAAI,MAAM,eAAe,CAAC;EACjD,SAAS,OAAO;GACd,QAAQ,KAAK,mCAAmC,IAAI,KAAK,KAAK;EAChE;CACF;CAEA,CAAA,GAAA,MAAA,iBAAgB;EACd,eAAe,UAAU,CAAC;CAE5B,GAAG,CAAC,CAAC;CAEL,CAAA,GAAA,MAAA,iBAAgB;EAEd,IAAI,OAAO,WAAW,aACpB;EAGF,MAAM,4BAA4B;GAChC,eAAe,UAAU,CAAC;EAC5B;EAGA,OAAO,iBAAiB,WAAW,mBAAmB;EAGtD,OAAO,iBAAiB,iBAAiB,mBAAmB;EAE5D,aAAa;GACX,OAAO,oBAAoB,WAAW,mBAAmB;GACzD,OAAO,oBAAoB,iBAAiB,mBAAmB;EACjE;CAEF,GAAG,CAAC,CAAC;CAEL,OAAO,CAAC,aAAa,QAAQ;AAC/B"}
@@ -1,4 +1,3 @@
1
- require("../../../../../../../../_virtual/_rolldown/runtime.cjs");
2
1
  let react = require("react");
3
2
  //#region ../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.43_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/useIdCompat.js
4
3
  function useIdCompat() {
@@ -1 +1 @@
1
- {"version":3,"file":"useIdCompat.cjs","names":[],"sources":["../../../../../../../../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.43_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/useIdCompat.js"],"sourcesContent":["import { useRef } from 'react';\nexport function useIdCompat() {\n var idRef = useRef(null);\n if (idRef.current === null) {\n idRef.current = 'custom-id-' + Math.random().toString(36).substr(2, 9);\n }\n return idRef.current;\n}"],"x_google_ignoreList":[0],"mappings":";;;AACA,SAAgB,cAAc;CAC5B,IAAI,SAAA,GAAA,MAAA,QAAe,IAAI;CACvB,IAAI,MAAM,YAAY,MACpB,MAAM,UAAU,eAAe,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;CAEvE,OAAO,MAAM;AACf"}
1
+ {"version":3,"file":"useIdCompat.cjs","names":[],"sources":["../../../../../../../../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.43_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/comps/useIdCompat.js"],"sourcesContent":["import { useRef } from 'react';\nexport function useIdCompat() {\n var idRef = useRef(null);\n if (idRef.current === null) {\n idRef.current = 'custom-id-' + Math.random().toString(36).substr(2, 9);\n }\n return idRef.current;\n}"],"x_google_ignoreList":[0],"mappings":";;AACA,SAAgB,cAAc;CAC5B,IAAI,SAAA,GAAA,MAAA,QAAe,IAAI;CACvB,IAAI,MAAM,YAAY,MACpB,MAAM,UAAU,eAAe,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC;CAEvE,OAAO,MAAM;AACf"}
@@ -1,4 +1,3 @@
1
- require("../../../../../../../../_virtual/_rolldown/runtime.cjs");
2
1
  let react = require("react");
3
2
  //#region ../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.43_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/utils/useHighlight.js
4
3
  function usePrevious(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"useHighlight.cjs","names":[],"sources":["../../../../../../../../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.43_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/utils/useHighlight.js"],"sourcesContent":["import { useMemo, useRef, useEffect } from 'react';\nexport function usePrevious(value) {\n var ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\nexport function useHighlight(_ref) {\n var value = _ref.value,\n highlightUpdates = _ref.highlightUpdates,\n highlightContainer = _ref.highlightContainer;\n var prevValue = usePrevious(value);\n var isHighlight = useMemo(() => {\n if (!highlightUpdates || prevValue === undefined) return false;\n // highlight if value type changed\n if (typeof value !== typeof prevValue) {\n return true;\n }\n if (typeof value === 'number') {\n // notice: NaN !== NaN\n if (isNaN(value) && isNaN(prevValue)) return false;\n return value !== prevValue;\n }\n // highlight if isArray changed\n if (Array.isArray(value) !== Array.isArray(prevValue)) {\n return true;\n }\n // not highlight object/function\n // deep compare they will be slow\n if (typeof value === 'object' || typeof value === 'function') {\n return false;\n }\n\n // highlight if not equal\n if (value !== prevValue) {\n return true;\n }\n }, [highlightUpdates, value]);\n useEffect(() => {\n if (highlightContainer && highlightContainer.current && isHighlight && 'animate' in highlightContainer.current) {\n highlightContainer.current.animate([{\n backgroundColor: 'var(--w-rjv-update-color, #ebcb8b)'\n }, {\n backgroundColor: ''\n }], {\n duration: 1000,\n easing: 'ease-in'\n });\n }\n }, [isHighlight, value, highlightContainer]);\n}"],"x_google_ignoreList":[0],"mappings":";;;AACA,SAAgB,YAAY,OAAO;CACjC,IAAI,OAAA,GAAA,MAAA,QAAa;CACjB,CAAA,GAAA,MAAA,iBAAgB;EACd,IAAI,UAAU;CAChB,CAAC;CACD,OAAO,IAAI;AACb;AACA,SAAgB,aAAa,MAAM;CACjC,IAAI,QAAQ,KAAK,OACf,mBAAmB,KAAK,kBACxB,qBAAqB,KAAK;CAC5B,IAAI,YAAY,YAAY,KAAK;CACjC,IAAI,eAAA,GAAA,MAAA,eAA4B;EAC9B,IAAI,CAAC,oBAAoB,cAAc,KAAA,GAAW,OAAO;EAEzD,IAAI,OAAO,UAAU,OAAO,WAC1B,OAAO;EAET,IAAI,OAAO,UAAU,UAAU;GAE7B,IAAI,MAAM,KAAK,KAAK,MAAM,SAAS,GAAG,OAAO;GAC7C,OAAO,UAAU;EACnB;EAEA,IAAI,MAAM,QAAQ,KAAK,MAAM,MAAM,QAAQ,SAAS,GAClD,OAAO;EAIT,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAChD,OAAO;EAIT,IAAI,UAAU,WACZ,OAAO;CAEX,GAAG,CAAC,kBAAkB,KAAK,CAAC;CAC5B,CAAA,GAAA,MAAA,iBAAgB;EACd,IAAI,sBAAsB,mBAAmB,WAAW,eAAe,aAAa,mBAAmB,SACrG,mBAAmB,QAAQ,QAAQ,CAAC,EAClC,iBAAiB,qCACnB,GAAG,EACD,iBAAiB,GACnB,CAAC,GAAG;GACF,UAAU;GACV,QAAQ;EACV,CAAC;CAEL,GAAG;EAAC;EAAa;EAAO;CAAkB,CAAC;AAC7C"}
1
+ {"version":3,"file":"useHighlight.cjs","names":[],"sources":["../../../../../../../../../../../node_modules/.pnpm/@uiw+react-json-view@2.0.0-alpha.43_@babel+runtime@7.29.2_react-dom@19.2.6_react@19.2.6__react@19.2.6/node_modules/@uiw/react-json-view/esm/utils/useHighlight.js"],"sourcesContent":["import { useMemo, useRef, useEffect } from 'react';\nexport function usePrevious(value) {\n var ref = useRef();\n useEffect(() => {\n ref.current = value;\n });\n return ref.current;\n}\nexport function useHighlight(_ref) {\n var value = _ref.value,\n highlightUpdates = _ref.highlightUpdates,\n highlightContainer = _ref.highlightContainer;\n var prevValue = usePrevious(value);\n var isHighlight = useMemo(() => {\n if (!highlightUpdates || prevValue === undefined) return false;\n // highlight if value type changed\n if (typeof value !== typeof prevValue) {\n return true;\n }\n if (typeof value === 'number') {\n // notice: NaN !== NaN\n if (isNaN(value) && isNaN(prevValue)) return false;\n return value !== prevValue;\n }\n // highlight if isArray changed\n if (Array.isArray(value) !== Array.isArray(prevValue)) {\n return true;\n }\n // not highlight object/function\n // deep compare they will be slow\n if (typeof value === 'object' || typeof value === 'function') {\n return false;\n }\n\n // highlight if not equal\n if (value !== prevValue) {\n return true;\n }\n }, [highlightUpdates, value]);\n useEffect(() => {\n if (highlightContainer && highlightContainer.current && isHighlight && 'animate' in highlightContainer.current) {\n highlightContainer.current.animate([{\n backgroundColor: 'var(--w-rjv-update-color, #ebcb8b)'\n }, {\n backgroundColor: ''\n }], {\n duration: 1000,\n easing: 'ease-in'\n });\n }\n }, [isHighlight, value, highlightContainer]);\n}"],"x_google_ignoreList":[0],"mappings":";;AACA,SAAgB,YAAY,OAAO;CACjC,IAAI,OAAA,GAAA,MAAA,QAAa;CACjB,CAAA,GAAA,MAAA,iBAAgB;EACd,IAAI,UAAU;CAChB,CAAC;CACD,OAAO,IAAI;AACb;AACA,SAAgB,aAAa,MAAM;CACjC,IAAI,QAAQ,KAAK,OACf,mBAAmB,KAAK,kBACxB,qBAAqB,KAAK;CAC5B,IAAI,YAAY,YAAY,KAAK;CACjC,IAAI,eAAA,GAAA,MAAA,eAA4B;EAC9B,IAAI,CAAC,oBAAoB,cAAc,KAAA,GAAW,OAAO;EAEzD,IAAI,OAAO,UAAU,OAAO,WAC1B,OAAO;EAET,IAAI,OAAO,UAAU,UAAU;GAE7B,IAAI,MAAM,KAAK,KAAK,MAAM,SAAS,GAAG,OAAO;GAC7C,OAAO,UAAU;EACnB;EAEA,IAAI,MAAM,QAAQ,KAAK,MAAM,MAAM,QAAQ,SAAS,GAClD,OAAO;EAIT,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAChD,OAAO;EAIT,IAAI,UAAU,WACZ,OAAO;CAEX,GAAG,CAAC,kBAAkB,KAAK,CAAC;CAC5B,CAAA,GAAA,MAAA,iBAAgB;EACd,IAAI,sBAAsB,mBAAmB,WAAW,eAAe,aAAa,mBAAmB,SACrG,mBAAmB,QAAQ,QAAQ,CAAC,EAClC,iBAAiB,qCACnB,GAAG,EACD,iBAAiB,GACnB,CAAC,GAAG;GACF,UAAU;GACV,QAAQ;EACV,CAAC;CAEL,GAAG;EAAC;EAAa;EAAO;CAAkB,CAAC;AAC7C"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@fuf-stack/pixels",
3
3
  "description": "fuf core react component library",
4
4
  "author": "Fröhlich ∧ Frei",
5
- "version": "1.11.0",
5
+ "version": "1.11.2",
6
6
  "type": "module",
7
7
  "main": "./dist/index.cjs",
8
8
  "module": "./dist/index.js",
@@ -184,8 +184,8 @@
184
184
  "react-dom": ">=18"
185
185
  },
186
186
  "dependencies": {
187
- "@fuf-stack/pixel-motion": "1.2.1",
188
- "@fuf-stack/pixel-utils": "1.3.0",
187
+ "@fuf-stack/pixel-motion": "1.2.2",
188
+ "@fuf-stack/pixel-utils": "1.3.2",
189
189
  "@heroui/accordion": "2.2.29",
190
190
  "@heroui/alert": "2.2.32",
191
191
  "@heroui/avatar": "2.2.26",
@@ -214,7 +214,7 @@
214
214
  "sonner": "2.0.7"
215
215
  },
216
216
  "devDependencies": {
217
- "@tsdown/css": "0.22.0",
217
+ "@tsdown/css": "0.22.1",
218
218
  "@types/debug": "4.1.13",
219
219
  "@types/react": "19.2.15",
220
220
  "@types/react-dom": "19.2.3",
@@ -222,5 +222,5 @@
222
222
  "react": "19.2.6",
223
223
  "react-dom": "19.2.6"
224
224
  },
225
- "gitHead": "82edd2bb8457b9794d5d6cfa55e9d2a7c2589e1c"
225
+ "gitHead": "92bdba62f9d7284ad73a2837122ebd324ca57adc"
226
226
  }