@clicktap/ui 2.0.4 → 2.0.6

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 (77) hide show
  1. package/components/Accordion/index.js +1 -0
  2. package/components/AssetRenderer/index.js +1 -0
  3. package/components/AssetRenderer/renderers/index.js +1 -0
  4. package/components/Avatar/index.js +1 -0
  5. package/components/Badge/index.js +1 -0
  6. package/components/Breadcrumbs/index.js +1 -0
  7. package/components/Button/index.js +1 -0
  8. package/components/Card/index.js +1 -0
  9. package/components/Checkbox/Checkbox.js +1 -1
  10. package/components/Checkbox/index.js +1 -0
  11. package/components/Collapsible/index.js +1 -0
  12. package/components/Collection/AttributeDataProvider/index.js +1 -0
  13. package/components/Collection/CollectionFilterChips/index.js +1 -0
  14. package/components/Collection/CollectionFilters/index.js +1 -0
  15. package/components/Collection/CollectionToolbar/index.js +1 -0
  16. package/components/Collection/EmptyResults/index.js +1 -0
  17. package/components/Collection/FilterAccordionTitle/index.js +1 -0
  18. package/components/Collection/FilterRenderer/Renderer/Swatch/index.js +1 -0
  19. package/components/Collection/FilterRenderer/Renderer/index.js +1 -0
  20. package/components/Collection/FilterRenderer/index.js +1 -0
  21. package/components/Collection/ProductCardSwatches/index.js +1 -0
  22. package/components/Collection/ProductPrice/index.js +1 -0
  23. package/components/Collection/index.js +1 -0
  24. package/components/Container/index.js +1 -0
  25. package/components/ContextMenu/index.js +1 -0
  26. package/components/CreditCardExpirationInput/index.js +1 -0
  27. package/components/CreditCardInput/index.js +1 -0
  28. package/components/DateInput/index.js +1 -0
  29. package/components/DateTimeFormat/index.js +1 -0
  30. package/components/Dialog/index.js +1 -0
  31. package/components/DialogTrigger/index.js +1 -0
  32. package/components/Divider/index.js +1 -0
  33. package/components/DobInput/index.js +1 -0
  34. package/components/Drawer/index.js +1 -0
  35. package/components/Icon/index.js +1 -0
  36. package/components/Image/index.js +1 -0
  37. package/components/Input/index.js +1 -0
  38. package/components/Link/index.js +1 -0
  39. package/components/LinkAsButton/index.js +1 -0
  40. package/components/Loader/index.js +1 -0
  41. package/components/Menu/index.js +1 -0
  42. package/components/Meter/index.js +1 -0
  43. package/components/Modal/index.js +1 -0
  44. package/components/ModalOverlay/index.js +1 -0
  45. package/components/NumberFormat/index.js +1 -0
  46. package/components/NumberInput/index.js +1 -0
  47. package/components/NumberTicker/index.js +1 -0
  48. package/components/Pagination/index.js +1 -0
  49. package/components/PasswordCheck/index.js +1 -0
  50. package/components/PhoneInput/index.js +1 -0
  51. package/components/PinInput/index.js +1 -0
  52. package/components/Progressbar/index.js +1 -0
  53. package/components/Radio/index.js +1 -0
  54. package/components/RadioGroup/RadioGroup.js +1 -1
  55. package/components/RadioGroup/index.js +1 -0
  56. package/components/ResendCode/index.js +1 -0
  57. package/components/Select/Option.js +1 -0
  58. package/components/Select/index.js +1 -0
  59. package/components/Slider/index.js +1 -0
  60. package/components/Switch/index.js +1 -0
  61. package/components/Table/index.js +1 -0
  62. package/components/Tabs/index.js +1 -0
  63. package/components/Time/index.js +1 -0
  64. package/components/TimeInput/index.js +1 -0
  65. package/components/Timezone/index.js +1 -0
  66. package/components/ToggleButton/index.js +1 -0
  67. package/components/Tooltip/index.js +1 -0
  68. package/components/UploadImage/index.js +1 -0
  69. package/docs/migrations/2026/08/ui-2026-08-21-graphql-client-string-documents.md +31 -4
  70. package/docs/migrations/2026/08/ui-2026-08-21-heroui-removed.md +15 -3
  71. package/docs/migrations/2026/08/ui-2026-08-22-react-aria-moves-as-one-version-set.md +19 -0
  72. package/docs/migrations/2026/08/ui-2026-08-23-use-client-propagates-to-barrels.md +101 -0
  73. package/hooks/useAttributeData.js +1 -0
  74. package/hooks/useCollectionState/index.js +1 -0
  75. package/hooks/useRoute/index.js +1 -0
  76. package/next/index.js +1 -0
  77. package/package.json +1 -1
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Accordion as A,AccordionItem as d,AccordionItemArrow as e}from"./Accordion.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"../../utils/cn.js";import"../Icon/DownArrow.js";export{A as Accordion,d as AccordionItem,e as AccordionItemArrow};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{AssetRenderer as m}from"./AssetRenderer.js";import{AudioRenderer as p}from"./renderers/AudioRenderer.js";import{DownloadLink as n}from"./renderers/DownloadLink.js";import{ImageRenderer as i}from"./renderers/ImageRenderer.js";import{PdfRenderer as a}from"./renderers/PdfRenderer.js";import{VideoRenderer as A}from"./renderers/VideoRenderer.js";import"react/jsx-runtime";import"../../utils/asset-url.js";export{m as AssetRenderer,p as AudioRenderer,n as DownloadLink,i as ImageRenderer,a as PdfRenderer,A as VideoRenderer};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{AudioRenderer as m}from"./AudioRenderer.js";import{DownloadLink as t}from"./DownloadLink.js";import{ImageRenderer as n}from"./ImageRenderer.js";import{PdfRenderer as x}from"./PdfRenderer.js";import{VideoRenderer as a}from"./VideoRenderer.js";import"react/jsx-runtime";import"../../../utils/asset-url.js";export{m as AudioRenderer,t as DownloadLink,n as ImageRenderer,x as PdfRenderer,a as VideoRenderer};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Avatar as a}from"./Avatar.js";import{AvatarGroup as e}from"./AvatarGroup/AvatarGroup.js";import"react/jsx-runtime";import"../../utils/cn.js";export{a as Avatar,e as AvatarGroup};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Badge as e}from"./Badge.js";import"react/jsx-runtime";import"react";import"framer-motion";import"../../utils/cn.js";export{e as Badge};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{BreadcrumbEllipsis as t}from"./BreadcrumbEllipsis.js";import{BreadcrumbItem as i}from"./BreadcrumbItem.js";import{BreadcrumbLink as c}from"./BreadcrumbLink.js";import{BreadcrumbSeparator as f}from"./BreadcrumbSeparator.js";import{Breadcrumbs as x}from"./Breadcrumbs.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{t as BreadcrumbEllipsis,i as BreadcrumbItem,c as BreadcrumbLink,f as BreadcrumbSeparator,x as Breadcrumbs};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Button as e,resolveVariant as a}from"./Button.js";import{ButtonLoadingContent as u}from"./ButtonLoadingContent.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"../../utils/cn.js";import"../Loader/CircularEasing.js";export{e as Button,u as ButtonLoadingContent,a as resolveVariant};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Card as t}from"./Card.js";import"react/jsx-runtime";import"../../utils/cn.js";export{t as Card};
@@ -1 +1 @@
1
- import{jsx as n,jsxs as c,Fragment as h}from"react/jsx-runtime";import{Checkbox as s}from"react-aria-components";import{cn as f}from"../../utils/cn.js";function x({control:t,isHovered:a,isFocused:l,isDisabled:e,isIndeterminate:r,isInvalid:o,isSelected:b,isPressed:u,classNames:g,...d}){return t?typeof t=="function"?t({isHovered:a,isFocused:l,isDisabled:e,isIndeterminate:r,isInvalid:o,isSelected:b,isPressed:u,...d}):t:n("div",{className:f("flex items-center justify-center","w-6 h-6","border border-solid border-border rounded","transition-all duration-200 ease-in-out","checkbox-control",a&&["border-border-emphasis"],l&&["border-border-emphasis outline-2 outline outline-border-subtle"],(e||e&&r)&&["border-border-subtle bg-surface-subtle"],o&&["bg-surface-subtle text-danger border-danger-soft"],o&&a&&["border-danger"],o&&l&&["border-danger outline-danger-ring"],o&&b&&r&&["bg-danger-soft border-danger-soft"],o&&b&&r&&u&&["bg-danger border-danger"],(b||r)&&["border-border bg-slate-300"],(b||r)&&u&&["border-border-emphasis bg-slate-400"],g?.control),children:n("svg",{viewBox:"0 0 18 18","aria-hidden":"true",style:{strokeDasharray:"22px",strokeDashoffset:b||r?44:66},className:f("w-4 h-4 fill-none","stroke-white stroke-[3px]","transition-all duration-200 ease-in-out",e&&r&&["stroke-none fill-slate-300"],r&&["stroke-none fill-white"]),children:r?n("rect",{x:1,y:7.5,width:15,height:3}):n("polyline",{points:"1 9 7 14 15 4"})})})}function w({children:t,slots:a,className:l,classNames:e,...r}){return n(s,{className:f("flex items-center gap-2 cursor-pointer","text-xs text-fg-muted forced-color-adjust-none disabled:text-fg-subtle disabled:cursor-not-allowed group","invalid:text-danger-soft",l),...r,children:o=>c(h,{children:[n(x,{control:a?.control,classNames:e,...o}),typeof t=="function"?t(o):t]})})}export{w as Checkbox,w as default};
1
+ "use client";import{jsx as b,jsxs as c,Fragment as s}from"react/jsx-runtime";import{Checkbox as h}from"react-aria-components";import{cn as f}from"../../utils/cn.js";function x({control:e,isHovered:a,isFocused:l,isDisabled:t,isIndeterminate:r,isInvalid:o,isSelected:n,isPressed:u,classNames:g,...d}){return e?typeof e=="function"?e({isHovered:a,isFocused:l,isDisabled:t,isIndeterminate:r,isInvalid:o,isSelected:n,isPressed:u,...d}):e:b("div",{className:f("flex items-center justify-center","w-6 h-6","border border-solid border-border rounded","transition-all duration-200 ease-in-out","checkbox-control",a&&["border-border-emphasis"],l&&["border-border-emphasis outline-2 outline outline-border-subtle"],(t||t&&r)&&["border-border-subtle bg-surface-subtle"],o&&["bg-surface-subtle text-danger border-danger-soft"],o&&a&&["border-danger"],o&&l&&["border-danger outline-danger-ring"],o&&n&&r&&["bg-danger-soft border-danger-soft"],o&&n&&r&&u&&["bg-danger border-danger"],(n||r)&&["border-border bg-slate-300"],(n||r)&&u&&["border-border-emphasis bg-slate-400"],g?.control),children:b("svg",{viewBox:"0 0 18 18","aria-hidden":"true",style:{strokeDasharray:"22px",strokeDashoffset:n||r?44:66},className:f("w-4 h-4 fill-none","stroke-white stroke-[3px]","transition-all duration-200 ease-in-out",t&&r&&["stroke-none fill-slate-300"],r&&["stroke-none fill-white"]),children:r?b("rect",{x:1,y:7.5,width:15,height:3}):b("polyline",{points:"1 9 7 14 15 4"})})})}function w({children:e,slots:a,className:l,classNames:t,...r}){return b(h,{className:f("flex items-center gap-2 cursor-pointer","text-xs text-fg-muted forced-color-adjust-none disabled:text-fg-subtle disabled:cursor-not-allowed group","invalid:text-danger-soft",l),...r,children:o=>c(s,{children:[b(x,{control:a?.control,classNames:t,...o}),typeof e=="function"?e(o):e]})})}export{w as Checkbox,w as default};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Checkbox as i}from"./Checkbox.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{i as Checkbox};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Collapsible as g}from"./Collapsible.js";import{CollapsibleTrigger as b,CollapsibleTriggerStateContext as s}from"./CollapsibleTrigger.js";import"react/jsx-runtime";import"react";import"framer-motion";import"../../utils/cn.js";import"react-aria-components";import"@react-stately/utils";import"@react-aria/interactions";export{g as Collapsible,b as CollapsibleTrigger,s as CollapsibleTriggerStateContext};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{AttributeDataProvider as o,useAttributeData as a}from"./AttributeDataProvider.js";import"react/jsx-runtime";import"react";export{o as AttributeDataProvider,a as useAttributeData};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{CollectionFilterChips as f}from"./CollectionFilterChips.js";import"react/jsx-runtime";import"react";import"../../Button/Button.js";import"react-aria-components";import"../../../utils/cn.js";import"../../Icon/CrossSmall.js";import"../../../utils/collection/getAppliedFilterChips.js";import"../../../utils/collection/removeFilterChip.js";export{f as CollectionFilterChips};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{CollectionFilters as J}from"./CollectionFilters.js";import"react/jsx-runtime";import"react";import"../../Accordion/Accordion.js";import"react-aria-components";import"../../../utils/cn.js";import"../../Icon/DownArrow.js";import"../../Button/Button.js";import"../../ModalOverlay/ModalOverlay.js";import"framer-motion";import"../../Modal/Modal.js";import"../../Drawer/Drawer.js";import"../../Icon/Cross.js";import"../../Icon/CrossSmall.js";import"../../Icon/Search.js";import"../FilterRenderer/FilterRenderer.js";import"../../../utils/env.js";import"../../../utils/swatch.js";import"../FilterRenderer/Renderer/Option.js";import"../../Checkbox/Checkbox.js";import"../FilterRenderer/Renderer/useOptionFilterToggle.js";import"../FilterRenderer/Renderer/Swatch.js";import"../FilterRenderer/Renderer/Swatch/SwatchColor.js";import"../../Icon/CheckIcon.js";import"../../../utils/color.js";import"../FilterRenderer/Renderer/Swatch/SwatchImage.js";import"../FilterRenderer/Renderer/Swatch/SwatchText.js";import"../FilterRenderer/Renderer/Boolean.js";import"../../RadioGroup/RadioGroup.js";import"../../Radio/Radio.js";import"../FilterRenderer/Renderer/Range.js";import"../../../utils/collection/mergeFilters.js";import"../FilterAccordionTitle/FilterAccordionTitle.js";import"../EmptyResults/EmptyResults.js";export{J as CollectionFilters};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{CollectionToolbar as h}from"./CollectionToolbar.js";import"react/jsx-runtime";import"../../Select/Option.js";import"react-stately";import"../../Select/Select.js";import"react";import"../../Select/ButtonSelect.js";import"react-aria";import"@react-aria/interactions";import"../../../utils/cn.js";import"../../Select/parts.js";import"react-aria-components";import"../../Select/ComboBoxSelect.js";import"../../Loader/Pulse.js";import"../../Select/MultiButtonSelect.js";import"../../Button/Button.js";import"../../Icon/FilterIcon.js";export{h as CollectionToolbar};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{EmptyResults as p}from"./EmptyResults.js";import"react/jsx-runtime";export{p as EmptyResults};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{FilterAccordionTitle as p}from"./FilterAccordionTitle.js";import"react/jsx-runtime";import"../../Icon/CrossSmall.js";import"../../../utils/cn.js";export{p as FilterAccordionTitle};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{SwatchColor as h}from"./SwatchColor.js";import{SwatchImage as S}from"./SwatchImage.js";import{SwatchText as l}from"./SwatchText.js";import"react/jsx-runtime";import"../../../../Checkbox/Checkbox.js";import"react-aria-components";import"../../../../../utils/cn.js";import"../../../../Icon/CheckIcon.js";import"../../../../../utils/env.js";import"../../../../../utils/color.js";import"../../../../../utils/swatch.js";import"../useOptionFilterToggle.js";export{h as SwatchColor,S as SwatchImage,l as SwatchText};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{FilterRendererOption as g}from"./Option.js";import{FilterRendererSwatch as w}from"./Swatch.js";import{FilterRendererBoolean as O}from"./Boolean.js";import{FilterRendererRange as b}from"./Range.js";import"react/jsx-runtime";import"../../../Checkbox/Checkbox.js";import"react-aria-components";import"../../../../utils/cn.js";import"./useOptionFilterToggle.js";import"../../../../utils/swatch.js";import"./Swatch/SwatchColor.js";import"../../../Icon/CheckIcon.js";import"../../../../utils/env.js";import"../../../../utils/color.js";import"./Swatch/SwatchImage.js";import"./Swatch/SwatchText.js";import"../../../RadioGroup/RadioGroup.js";import"../../../Radio/Radio.js";export{O as FilterRendererBoolean,g as FilterRendererOption,b as FilterRendererRange,w as FilterRendererSwatch};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{FilterRenderer as k}from"./FilterRenderer.js";import"react/jsx-runtime";import"../../../utils/env.js";import"../../../utils/swatch.js";import"./Renderer/Option.js";import"../../Checkbox/Checkbox.js";import"react-aria-components";import"../../../utils/cn.js";import"./Renderer/useOptionFilterToggle.js";import"./Renderer/Swatch.js";import"./Renderer/Swatch/SwatchColor.js";import"../../Icon/CheckIcon.js";import"../../../utils/color.js";import"./Renderer/Swatch/SwatchImage.js";import"./Renderer/Swatch/SwatchText.js";import"./Renderer/Boolean.js";import"../../RadioGroup/RadioGroup.js";import"../../Radio/Radio.js";import"./Renderer/Range.js";export{k as FilterRenderer};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{ProductCardSwatches as e}from"./ProductCardSwatches.js";import"react/jsx-runtime";import"react-aria-components";import"../../../utils/cn.js";import"../../Icon/CheckIcon.js";import"../../../utils/env.js";import"../../../utils/color.js";import"../../../utils/swatch.js";export{e as ProductCardSwatches};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{ProductPrice as c}from"./ProductPrice.js";import"react/jsx-runtime";export{c as ProductPrice};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{AttributeDataProvider as Q,useAttributeData as U}from"./AttributeDataProvider/AttributeDataProvider.js";import{EmptyResults as W}from"./EmptyResults/EmptyResults.js";import{ProductPrice as Y}from"./ProductPrice/ProductPrice.js";import{FilterRenderer as _}from"./FilterRenderer/FilterRenderer.js";import{CollectionFilterChips as rr}from"./CollectionFilterChips/CollectionFilterChips.js";import{FilterAccordionTitle as tr}from"./FilterAccordionTitle/FilterAccordionTitle.js";import{ProductCardSwatches as pr}from"./ProductCardSwatches/ProductCardSwatches.js";import{CollectionFilters as er}from"./CollectionFilters/CollectionFilters.js";import{CollectionToolbar as cr}from"./CollectionToolbar/CollectionToolbar.js";import"react/jsx-runtime";import"react";import"../../utils/env.js";import"../../utils/swatch.js";import"./FilterRenderer/Renderer/Option.js";import"../Checkbox/Checkbox.js";import"react-aria-components";import"../../utils/cn.js";import"./FilterRenderer/Renderer/useOptionFilterToggle.js";import"./FilterRenderer/Renderer/Swatch.js";import"./FilterRenderer/Renderer/Swatch/SwatchColor.js";import"../Icon/CheckIcon.js";import"../../utils/color.js";import"./FilterRenderer/Renderer/Swatch/SwatchImage.js";import"./FilterRenderer/Renderer/Swatch/SwatchText.js";import"./FilterRenderer/Renderer/Boolean.js";import"../RadioGroup/RadioGroup.js";import"../Radio/Radio.js";import"./FilterRenderer/Renderer/Range.js";import"../Button/Button.js";import"../Icon/CrossSmall.js";import"../../utils/collection/getAppliedFilterChips.js";import"../../utils/collection/removeFilterChip.js";import"../Accordion/Accordion.js";import"../Icon/DownArrow.js";import"../ModalOverlay/ModalOverlay.js";import"framer-motion";import"../Modal/Modal.js";import"../Drawer/Drawer.js";import"../Icon/Cross.js";import"../Icon/Search.js";import"../../utils/collection/mergeFilters.js";import"../Select/Option.js";import"react-stately";import"../Select/Select.js";import"../Select/ButtonSelect.js";import"react-aria";import"@react-aria/interactions";import"../Select/parts.js";import"../Select/ComboBoxSelect.js";import"../Loader/Pulse.js";import"../Select/MultiButtonSelect.js";import"../Icon/FilterIcon.js";export{Q as AttributeDataProvider,rr as CollectionFilterChips,er as CollectionFilters,cr as CollectionToolbar,W as EmptyResults,tr as FilterAccordionTitle,_ as FilterRenderer,pr as ProductCardSwatches,Y as ProductPrice,U as useAttributeData};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Container as p}from"./Container.js";import"react/jsx-runtime";import"react";import"../../utils/cn.js";export{p as Container};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{ContextMenu as n}from"./ContextMenu.js";import"react/jsx-runtime";import"react-aria-components";import"react";import"framer-motion";import"../../utils/cn.js";export{n as ContextMenu};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{CreditCardExpirationInput as d}from"./CreditCardExpirationInput.js";import"react/jsx-runtime";import"../../assets/react-number-format.es-LSEUnuG5.js";import"react";import"react-aria-components";import"../../utils/cn.js";export{d as CreditCardExpirationInput};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{CreditCardInput as e}from"./CreditCardInput.js";import"react/jsx-runtime";import"react";import"../../assets/react-number-format.es-LSEUnuG5.js";import"react-aria-components";import"../../utils/cn.js";export{e as CreditCardInput};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{DateInput as i}from"./DateInput.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{i as DateInput};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{DateTimeFormat as o}from"./DateTimeFormat.js";export{o as DateTimeFormat};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Dialog as e}from"./Dialog.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"framer-motion";import"../../utils/cn.js";export{e as Dialog};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{DialogTrigger as t,useDialogTrigger as e}from"./DialogTrigger.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"react-stately";export{t as DialogTrigger,e as useDialogTrigger};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Divider as t}from"./Divider.js";import"react/jsx-runtime";import"react-aria";import"../../utils/cn.js";export{t as Divider};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{DobInput as e}from"./DobInput.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"../../assets/react-number-format.es-LSEUnuG5.js";import"../../utils/cn.js";export{e as DobInput};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Drawer as a}from"./Drawer.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"framer-motion";import"../../utils/cn.js";export{a as Drawer};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Account as m}from"./Account.js";import{Cart as p}from"./Cart.js";import{Checkmark as c}from"./Checkmark.js";import{Cross as I}from"./Cross.js";import{DownArrow as i}from"./DownArrow.js";import{Hamburger as d}from"./Hamburger.js";import{LinkArrow as u}from"./LinkArrow.js";import{Minus as w}from"./Minus.js";import{Plus as h}from"./Plus.js";import{Search as A}from"./Search.js";import{Trash as U}from"./Trash.js";import{Verified as y}from"./Verified.js";import{ArrowLeftIcon as E}from"./ArrowLeftIcon.js";import{CloseIcon as R}from"./CloseIcon.js";import{CreateIcon as g}from"./CreateIcon.js";import{DeleteIcon as B}from"./DeleteIcon.js";import{FilterIcon as G}from"./FilterIcon.js";import{GemIcon as M}from"./GemIcon.js";import{IncludedIcon as T}from"./IncludedIcon.js";import{InfoIcon as j}from"./InfoIcon.js";import{InvoiceIcon as z}from"./InvoiceIcon.js";import{LockIcon as K}from"./LockIcon.js";import{NoEntryIcon as W}from"./NoEntryIcon.js";import{NoteIcon as Y}from"./NoteIcon.js";import{PencilIcon as _}from"./PencilIcon.js";import{PermissionIcon as oo}from"./PermissionIcon.js";import{ProductBoxIcon as eo}from"./ProductBoxIcon.js";import{ProductIcon as mo}from"./ProductIcon.js";import{QuoteIcon as po}from"./QuoteIcon.js";import{ResetPasswordIcon as co}from"./ResetPasswordIcon.js";import{RoleIcon as Io}from"./RoleIcon.js";import{ShieldUserIcon as io}from"./ShieldUserIcon.js";import{StarIcon as lo}from"./StarIcon.js";import{SyncIcon as Po}from"./SyncIcon.js";import{UpdateIcon as Co}from"./UpdateIcon.js";import{UserEditIcon as ko}from"./UserEditIcon.js";import{UserIcon as So}from"./UserIcon.js";import"react/jsx-runtime";import"../../utils/cn.js";export{m as Account,E as ArrowLeftIcon,p as Cart,c as Checkmark,R as CloseIcon,g as CreateIcon,I as Cross,B as DeleteIcon,i as DownArrow,G as FilterIcon,M as GemIcon,d as Hamburger,T as IncludedIcon,j as InfoIcon,z as InvoiceIcon,u as LinkArrow,K as LockIcon,w as Minus,W as NoEntryIcon,Y as NoteIcon,_ as PencilIcon,oo as PermissionIcon,h as Plus,eo as ProductBoxIcon,mo as ProductIcon,po as QuoteIcon,co as ResetPasswordIcon,Io as RoleIcon,A as Search,io as ShieldUserIcon,lo as StarIcon,Po as SyncIcon,U as Trash,Co as UpdateIcon,ko as UserEditIcon,So as UserIcon,y as Verified};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Image as i}from"./Image.js";import{ImageProvider as I,useImageConfig as f}from"./ImageContext.js";import{DEFAULT_IMAGE_WIDTHS as S,buildSrcSet as a,resolveSrc as x}from"./imageShared.js";import"react/jsx-runtime";import"../../utils/cn.js";import"react";export{S as DEFAULT_IMAGE_WIDTHS,i as Image,I as ImageProvider,a as buildSrcSet,x as resolveSrc,f as useImageConfig};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Input as n}from"./Input.js";import"react/jsx-runtime";import"react-aria-components";import"react";import"../../utils/cn.js";import"../Skeleton/Skeleton.js";import"../../hooks/useIsClient.js";export{n as Input};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Link as e}from"./Link.js";import{LinkProvider as f,useLinkConfig as x}from"./LinkContext.js";import{isExternalUrl as L}from"./utils.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"../../utils/cn.js";export{e as Link,f as LinkProvider,L as isExternalUrl,x as useLinkConfig};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{LinkAsButton as s}from"./LinkAsButton.js";import"react/jsx-runtime";import"react";import"../../utils/cn.js";import"../Link/Link.js";import"react-aria-components";import"../Link/LinkContext.js";import"../Link/utils.js";import"../Button/Button.js";export{s as LinkAsButton};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{CircularEasing as p}from"./CircularEasing.js";import{Pulse as e}from"./Pulse.js";import"react/jsx-runtime";import"../../utils/cn.js";export{p as CircularEasing,e as Pulse};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{ContextMenu as n}from"./ContextMenu.js";import{Menu as f}from"./Menu.js";import"react/jsx-runtime";import"react";import"framer-motion";import"../../utils/cn.js";import"react-dom";export{n as ContextMenu,f as Menu};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Meter as e}from"./Meter.js";import"react/jsx-runtime";import"react-aria-components";import"framer-motion";import"../../utils/cn.js";export{e as Meter};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Modal as i}from"./Modal.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{i as Modal};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{ModalOverlay as e}from"./ModalOverlay.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"framer-motion";import"../../utils/cn.js";export{e as ModalOverlay};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{NumberFormat as o}from"./NumberFormat.js";export{o as NumberFormat};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{NumberInput as i}from"./NumberInput.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{i as NumberInput};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{DigitResolver as b}from"./DigitResolver.js";import{NumberTicker as g}from"./NumberTicker.js";import"react/jsx-runtime";import"react";import"framer-motion";import"./hooks/useColumnTransition.js";import"../../utils/cn.js";import"./hooks/useNumberDelta.js";import"./hooks/useNumberTicker.js";export{b as DigitResolver,g as NumberTicker};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Pagination as a}from"./Pagination.js";import"react/jsx-runtime";import"react";import"../../utils/cn.js";import"../Icon/DownArrow.js";export{a as Pagination};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{PasswordCheck as i}from"./PasswordCheck.js";import"react/jsx-runtime";import"../../utils/cn.js";import"./PasswordCheck.utils.js";export{i as PasswordCheck};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{PhoneInput as u}from"./PhoneInput.js";import"react/jsx-runtime";import"react-aria";import"react";import"react-aria-components";import"../../utils/cn.js";import"../Input/Input.js";import"../Skeleton/Skeleton.js";import"../../hooks/useIsClient.js";export{u as PhoneInput};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{PinInput as n}from"./PinInput.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"../../utils/cn.js";export{n as PinInput};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{CircularProgressbar as e}from"./CircularProgressbar.js";import{LinearProgressbar as s}from"./LinearProgressbar.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";import"framer-motion";export{e as CircularProgressbar,s as LinearProgressbar};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Radio as t}from"./Radio.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{t as Radio};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as r,Fragment as c}from"react/jsx-runtime";import{RadioGroup as p,Label as d}from"react-aria-components";import{cn as o}from"../../utils/cn.js";function g({label:a,errorMessage:l,description:f,orientation:m,children:t,className:x,...s}){return e(p,{className:o("flex flex-col gap-4",x),orientation:m,...s,children:typeof t=="function"?t:r(c,{children:[a&&e(d,{className:"flex text-fg-muted text-xs",children:a}),e("div",{className:o("flex flex-col gap-2",m==="horizontal"&&"flex-row items-center gap-4"),children:t}),f&&e("p",{className:"flex mt-1 text-fg-muted text-sm",children:f}),l&&e("p",{className:"flex pl-6 text-danger-soft text-sm",children:l})]})})}export{g as RadioGroup,g as default};
1
+ "use client";import{jsx as e,jsxs as r,Fragment as c}from"react/jsx-runtime";import{RadioGroup as p,Label as i}from"react-aria-components";import{cn as o}from"../../utils/cn.js";function g({label:l,errorMessage:a,description:f,orientation:m,children:t,className:s,...x}){return e(p,{className:o("flex flex-col gap-4",s),orientation:m,...x,children:typeof t=="function"?t:r(c,{children:[l&&e(i,{className:"flex text-fg-muted text-xs",children:l}),e("div",{className:o("flex flex-col gap-2",m==="horizontal"&&"flex-row items-center gap-4"),children:t}),f&&e("p",{className:"flex mt-1 text-fg-muted text-sm",children:f}),a&&e("p",{className:"flex pl-6 text-danger-soft text-sm",children:a})]})})}export{g as RadioGroup,g as default};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{RadioGroup as t}from"./RadioGroup.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{t as RadioGroup};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{ResendCode as p}from"./ResendCode.js";import"react/jsx-runtime";import"../../utils/cn.js";export{p as ResendCode};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Item as o}from"react-stately";import{Section as p}from"react-stately";const e=o;export{e as Option,p as Section,e as default};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Option as O}from"./Option.js";import{Select as b}from"./Select.js";import{Section as g}from"react-stately";import"react/jsx-runtime";import"react";import"./ButtonSelect.js";import"react-aria";import"@react-aria/interactions";import"../../utils/cn.js";import"./parts.js";import"react-aria-components";import"./ComboBoxSelect.js";import"../Loader/Pulse.js";import"./MultiButtonSelect.js";export{O as Option,g as Section,b as Select};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Slider as t}from"./Slider.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{t as Slider};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Switch as p}from"./Switch.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{p as Switch};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Table as t}from"./Table.js";import"react/jsx-runtime";import"../../utils/cn.js";export{t as Table};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{BaseTab as i,Tab as b}from"./Tab.js";import{TabList as T}from"./TabList.js";import{TabPanel as n}from"./TabPanel.js";import{Tabs as l}from"./Tabs.js";import{TabsOrientationContext as C}from"./Tabs.context.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"framer-motion";import"../../utils/cn.js";export{i as BaseTab,b as Tab,T as TabList,n as TabPanel,l as Tabs,C as TabsOrientationContext};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Time as t}from"./Time.js";import"react/jsx-runtime";import"../Timezone/TimezoneContext.js";import"react";export{t as Time};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{TimeInput as i}from"./TimeInput.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{i as TimeInput};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{TimezoneProvider as m,useTimezone as n}from"./TimezoneContext.js";import{TIMEZONE_COOKIE_NAME as t,TimezoneCookieSync as E}from"./TimezoneCookieSync.js";import"react/jsx-runtime";import"react";export{t as TIMEZONE_COOKIE_NAME,E as TimezoneCookieSync,m as TimezoneProvider,n as useTimezone};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{ToggleButton as i}from"./ToggleButton.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{i as ToggleButton};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Tooltip as m}from"./Tooltip.js";import"react/jsx-runtime";import"react-aria-components";import"../../utils/cn.js";export{m as Tooltip};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{UploadImage as f}from"./UploadImage.js";import"react/jsx-runtime";import"react";import"framer-motion";import"react-aria-components";import"../../utils/cn.js";import"../../hooks/useIsClient.js";import"../Skeleton/Skeleton.js";export{f as UploadImage};
@@ -35,11 +35,38 @@ query text codegen started from.
35
35
 
36
36
  ## Migration
37
37
 
38
- 1. Switch codegen to string documents: `presetConfig`/`config` → `documentMode:
39
- 'string'` (client-preset ≥ 4 for `TypedDocumentString`), regenerate.
38
+ 1. Switch codegen to string documents. `documentMode: 'string'` goes under **`config`**, NOT
39
+ `presetConfig` — verified against `@graphql-codegen/client-preset` 4.8.3 and 6.1.3. Requires
40
+ client-preset >= 4 for `TypedDocumentString`. Regenerate.
41
+
42
+ ```ts
43
+ './generated/': {
44
+ preset: 'client',
45
+ presetConfig: { fragmentMasking: false },
46
+ config: { documentMode: 'string' }, // <- here
47
+ }
48
+ ```
49
+
50
+ **Verify the regeneration, because the wrong placement fails silently.** Under
51
+ `presetConfig`, codegen reports success and still emits AST documents — and since the new
52
+ client rejects an AST at runtime rather than at build time, both the build and the
53
+ typecheck stay green while every query goes out as the string `"[object Object]"`. A
54
+ consumer shipped exactly that and only caught it by counting emitted documents. After
55
+ regenerating, confirm the output contains `TypedDocumentString` and **zero**
56
+ `as unknown as DocumentNode`:
57
+
58
+ ```bash
59
+ grep -c 'TypedDocumentString' generated/graphql.ts # expect > 0
60
+ grep -c 'as unknown as DocumentNode' generated/graphql.ts # expect 0
61
+ ```
40
62
  2. Replace `TypedDocumentNode`/`RequestDocument` types at wrapper boundaries with
41
63
  `GraphqlDocument` / `GraphqlVariables` from this module; `GraphQLClientRequestHeaders`
42
64
  with the platform `HeadersInit`.
43
65
  3. Sites that imported `ClientError` from `graphql-request` import it from here.
44
- 4. A call that must send `FormData` or custom cors/credentials keeps using
45
- `createAuthAwareFetch()` (unchanged) and `String(document)` for the query text.
66
+ 4. Audit every site that turns a document into text itself, not just the `FormData` ones.
67
+ `createAuthAwareFetch()` is unchanged, and `String(document)` replaces `print(document)` —
68
+ but the class to search for is broader than uploads: **any hand-rolled
69
+ `fetch(url, { body: JSON.stringify({ query: print(Doc) }) })`**. A consumer found two
70
+ (`getCompanyCollection.ts`, `setCurrentCompanyCookie.ts`) that an inventory of upload call
71
+ sites did not anticipate, and they surfaced only after the codegen switch. Grep for
72
+ `print(` and for `from 'graphql'` across the app, not only for `FormData`.
@@ -22,16 +22,28 @@ base is react-aria-components; the rewrites cost nothing new:
22
22
  - **Pagination** → native boundary/sibling windowing.
23
23
  - **Badge** → the two wrapper elements, inline.
24
24
 
25
- ## Preserved API surface (inventoried from real call sites)
25
+ ## Same name, CHANGED signature — read this first
26
+
27
+ These kept their names, so a call site compiles, but the contract moved. A consumer had four
28
+ call sites break on props this document previously listed as simply preserved.
29
+
30
+ | Prop | Was (heroui) | Now |
31
+ | --- | --- | --- |
32
+ | `AccordionItem.onPress` | received a `PressEvent` | receives **no arguments**. A handler reading `e.target` type-checks anyway, because an extra declared parameter is accepted in some positions — it just gets `undefined` at runtime. |
33
+ | `Accordion.onSelectionChange` | could emit the string `'all'` | always emits `Set<string>`. A branch testing `keys === 'all'` is now dead code. |
34
+ | `Tooltip` `classNames.arrow` | slot existed | **removed** — the arrow is `OverlayArrow`; style it via `content`/`base` or the arrow element itself. |
35
+ | `Tooltip` `isOpen` | controlled open state | **not supported** — the RAC `TooltipTrigger` owns open state. Use `delay`/`isDisabled`, or drive visibility from the trigger. |
36
+
37
+ ## Same name, same behavior
26
38
 
27
39
  - Accordion: `selectionMode`, `defaultSelectedKeys` (incl. `"all"`),
28
- `defaultExpandedKeys`, controlled `selectedKeys` + `onSelectionChange`,
40
+ `defaultExpandedKeys`, controlled `selectedKeys`,
29
41
  `disallowEmptySelection`, `hideIndicator` (group and per-item),
30
42
  `showDivider`/`dividerProps` (an `<hr>` between items — `[&_hr]:hidden`
31
43
  keeps working), `itemClasses`/per-item `classNames` slots, per-item
32
44
  `title`/`subtitle`/`startContent`/`indicator` (a component still receives
33
45
  `{ isOpen }` — import `AccordionItemIndicatorProps` from HERE now),
34
- `disableIndicatorAnimation`, `onPress`, and the `data-open` attribute on
46
+ `disableIndicatorAnimation`, and the `data-open` attribute on
35
47
  heading/trigger/indicator that `data-[open=true]:` selectors style.
36
48
  - Tooltip: `content`, `offset`, `placement`, `showArrow`, `delay`,
37
49
  `isDisabled`, `classNames.base/content`, arbitrary child as trigger.
@@ -38,6 +38,25 @@ reference app pins the identical versions. When bumping, take the trio from the
38
38
  react-aria release announcement and re-run the production-bundle checks below —
39
39
  aligning to the coherent set fixed the Table failure outright with no code change.
40
40
 
41
+ ## If you still depend on `@heroui/*`, pinning is not enough
42
+
43
+ `@clicktap/ui` 2.x dropped heroui, so this case is invisible upstream — but a fork still carrying
44
+ it will install **both** trios no matter what it pins. heroui drags the old set in transitively:
45
+
46
+ ```
47
+ @heroui/badge -> @heroui/system -> @react-spectrum/provider -> @adobe/react-spectrum
48
+ -> react-aria-components (old)
49
+ ```
50
+
51
+ A consumer pinned one release *above* the verified set and ended up with two full trios and six
52
+ `@react-aria/*` subpackages at two versions each — precisely the skew this guide warns is invisible
53
+ outside production bundles. Aligning **down** to the verified set unified them.
54
+
55
+ So: pin to the verified set exactly (not "at least"), and if the duplicate persists, the remaining
56
+ copy is being pulled by a heroui/react-spectrum branch. Check with the instance-directory diff
57
+ below — and note that removing heroui is the only complete fix, since its transitive floor is not
58
+ something a pin can override.
59
+
41
60
  ## How to verify (jsdom cannot)
42
61
 
43
62
  Probe a production build in a real browser: open an uncontrolled DialogTrigger modal
@@ -0,0 +1,101 @@
1
+ # 'use client' now reaches the re-export barrels
2
+
3
+ **Date:** 2026-08-23
4
+ **Package:** `@clicktap/ui`
5
+ **Affects:** every emitted `components/**/index.js`; `Checkbox` and `RadioGroup` sources; the build's directive verification
6
+ **Classification:** BUGFIX (packaging)
7
+ **Breaking:** No.
8
+ **Ticket:** CTAP-1392
9
+
10
+ A Server Component could not import **any** `@clicktap/ui` barrel. The leaves carried
11
+ `"use client"`, but the `index.js` re-export layer consumers actually import did not — while
12
+ still holding side-effect imports of client-only packages:
13
+
14
+ ```js
15
+ // components/Modal/index.js as published in 2.0.5
16
+ import{Modal as i}from"./Modal.js";import"react/jsx-runtime";
17
+ import"react-aria-components";import"../../utils/cn.js";export{i as Modal};
18
+ ```
19
+
20
+ Next evaluates that on the server and the consumer's build dies:
21
+
22
+ ```
23
+ The error was caused by importing '@clicktap/ui/components/DialogTrigger.js' in './app/page.jsx'.
24
+ > Build failed because of webpack errors
25
+ ```
26
+
27
+ The real cost was not Modal. A consumer barrel that re-exports anything from `@clicktap/ui`
28
+ became unusable from the server, which transitively blocked converting *any* component
29
+ importing through it into a Server Component.
30
+
31
+ ## Why the existing guard missed it
32
+
33
+ `verifyUseClientDirectives` has caught directive stripping since CTAP-712, and it passed on
34
+ every one of these files. It keyed solely on `import { … } from 'react'` containing a
35
+ client-only React API. A barrel imports `react-aria-components` and `react/jsx-runtime` but
36
+ never `react` by name, so the regex did not match and the file was skipped outright.
37
+
38
+ The guard could only see modules that are client-only **directly**. It was blind to modules
39
+ that are client-only **transitively** — which is the entire barrel layer. The same blind
40
+ spot hid two source-level omissions: `Checkbox.tsx` and `RadioGroup.tsx` both import
41
+ `react-aria-components` with no directive of their own.
42
+
43
+ ## The fix
44
+
45
+ **Propagation.** A new `propagateUseClientDirectives` build plugin walks the emitted output,
46
+ seeds from files that already carry the directive or import a wholly client-only package
47
+ (`react-aria-components`, `react-aria`, `react-stately`, `framer-motion`), then closes over
48
+ local imports to a fixpoint and stamps what it reaches. 70 modules get stamped; 34 that
49
+ reach nothing client-only are deliberately left alone, which is the point — they stay
50
+ server-safe rather than being blanket-marked.
51
+
52
+ **Two source fixes.** `Checkbox` and `RadioGroup` now declare `'use client'`.
53
+
54
+ **The guard now sees transitive clients.** It flags any emitted module importing a
55
+ client-only package without a directive, so this class cannot ship again.
56
+
57
+ ## `export *` cannot be a client boundary
58
+
59
+ The flat subpath stubs (`components/Modal.js` → `export * from './Modal/index.js'`) are
60
+ **deliberately left undirectived**. Stamping them was tried first, because `components/Modal.js`
61
+ is the exact path a consumer imports, and Next rejects it outright:
62
+
63
+ ```
64
+ Error: It's currently unsupported to use "export *" in a client boundary.
65
+ Please use named exports instead.
66
+ ```
67
+
68
+ A plain server-side re-export of a client module is the supported shape: the boundary belongs
69
+ on the barrel, and the server follows the stub through to it. The propagation plugin skips
70
+ any `export * from` module for the same reason, so this cannot be reintroduced by a future
71
+ module that happens to re-export.
72
+
73
+ Note the ordering this depends on: `emitFlatSubpathStubs` runs *after* propagation, so the
74
+ stubs do not exist when it walks. Do not reorder them expecting the stubs to be stamped —
75
+ they must not be.
76
+
77
+ ## Verified
78
+
79
+ An acceptance harness outside the repo: a minimal Next 14.2.35 App Router project with a
80
+ Server Component (no `'use client'`) importing `@clicktap/ui/components/Modal` and
81
+ `@clicktap/ui/components/DialogTrigger`.
82
+
83
+ - **Published 2.0.5** — fails, reproducing the reported error exactly.
84
+ - **This build** — compiles and prerenders the route as static.
85
+
86
+ Worth keeping that shape for anything RSC-related: the structural assertion (every module
87
+ either carries the directive or imports nothing client-only) is necessary but *not*
88
+ sufficient, and it passed at a point when the package still failed to build in a consumer.
89
+ Only the real consumer build caught the `export *` constraint.
90
+
91
+ ## Unrelated hazard noticed while verifying
92
+
93
+ The build **intermittently** emits the development JSX runtime — `jsxDEV` calls and a
94
+ bundled `assets/jsx-dev-runtime-*.js` — instead of the external `react/jsx-runtime`. It
95
+ appeared twice during this work and then did not reproduce across five consecutive clean
96
+ builds, with and without `NODE_ENV=production`, on both the original and the new config.
97
+ Published 2.0.5 is clean, so it has not shipped.
98
+
99
+ It matters because a consumer's production React has no `jsxDEV`, so it fails at prerender
100
+ with `TypeError: r.j.jsxDEV is not a function` — and nothing in the build would catch it.
101
+ Filed separately; if you are cutting a release, grep the artifact for `jsxDEV` first.
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{useAttributeData as i}from"../components/Collection/AttributeDataProvider/AttributeDataProvider.js";import"react/jsx-runtime";import"react";export{i as useAttributeData};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{useCollectionState as i}from"./useCollectionState.js";import"react";import"../../utils/collection/filterSearchParams.js";export{i as useCollectionState};
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{buildPath as u,resolveParams as i,useRoute as m}from"./useRoute.js";import{RouteProvider as s,useRouteConfig as a}from"./RouteContext.js";import"react";import"react/jsx-runtime";export{s as RouteProvider,u as buildPath,i as resolveParams,m as useRoute,a as useRouteConfig};
package/next/index.js CHANGED
@@ -1 +1,2 @@
1
+ "use client";
1
2
  import{Image as a}from"./Image.js";import"react/jsx-runtime";import"next/image";import"react";import"../utils/cn.js";import"../components/Image/imageShared.js";export{a as Image};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clicktap/ui",
3
- "version": "2.0.4",
3
+ "version": "2.0.6",
4
4
  "private": false,
5
5
  "author": "Clicktap",
6
6
  "description": "A library of React UI components and low-level hooks.",