@clicktap/ui 2.0.5 → 2.0.7
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.
- package/components/Accordion/Accordion.js +1 -1
- package/components/Accordion/index.js +1 -0
- package/components/AssetRenderer/index.js +1 -0
- package/components/AssetRenderer/renderers/index.js +1 -0
- package/components/Avatar/index.js +1 -0
- package/components/Badge/index.js +1 -0
- package/components/Breadcrumbs/index.js +1 -0
- package/components/Button/index.js +1 -0
- package/components/Card/index.js +1 -0
- package/components/Checkbox/Checkbox.js +1 -1
- package/components/Checkbox/index.js +1 -0
- package/components/Collapsible/index.js +1 -0
- package/components/Collection/AttributeDataProvider/index.js +1 -0
- package/components/Collection/CollectionFilterChips/index.js +1 -0
- package/components/Collection/CollectionFilters/index.js +1 -0
- package/components/Collection/CollectionToolbar/index.js +1 -0
- package/components/Collection/EmptyResults/index.js +1 -0
- package/components/Collection/FilterAccordionTitle/index.js +1 -0
- package/components/Collection/FilterRenderer/Renderer/Swatch/index.js +1 -0
- package/components/Collection/FilterRenderer/Renderer/index.js +1 -0
- package/components/Collection/FilterRenderer/index.js +1 -0
- package/components/Collection/ProductCardSwatches/index.js +1 -0
- package/components/Collection/ProductPrice/index.js +1 -0
- package/components/Collection/index.js +1 -0
- package/components/Container/index.js +1 -0
- package/components/ContextMenu/index.js +1 -0
- package/components/CreditCardExpirationInput/index.js +1 -0
- package/components/CreditCardInput/index.js +1 -0
- package/components/DateInput/index.js +1 -0
- package/components/DateTimeFormat/index.js +1 -0
- package/components/Dialog/index.js +1 -0
- package/components/DialogTrigger/index.js +1 -0
- package/components/Divider/index.js +1 -0
- package/components/DobInput/index.js +1 -0
- package/components/Drawer/index.js +1 -0
- package/components/Icon/index.js +1 -0
- package/components/Image/index.js +1 -0
- package/components/Input/index.js +1 -0
- package/components/Link/index.js +1 -0
- package/components/LinkAsButton/index.js +1 -0
- package/components/Loader/index.js +1 -0
- package/components/Menu/index.js +1 -0
- package/components/Meter/index.js +1 -0
- package/components/Modal/index.js +1 -0
- package/components/ModalOverlay/index.js +1 -0
- package/components/NumberFormat/index.js +1 -0
- package/components/NumberInput/index.js +1 -0
- package/components/NumberTicker/index.js +1 -0
- package/components/Pagination/index.js +1 -0
- package/components/PasswordCheck/index.js +1 -0
- package/components/PhoneInput/index.js +1 -0
- package/components/PinInput/index.js +1 -0
- package/components/Progressbar/index.js +1 -0
- package/components/Radio/index.js +1 -0
- package/components/RadioGroup/RadioGroup.js +1 -1
- package/components/RadioGroup/index.js +1 -0
- package/components/ResendCode/index.js +1 -0
- package/components/Select/Option.js +1 -0
- package/components/Select/index.js +1 -0
- package/components/Slider/index.js +1 -0
- package/components/Switch/index.js +1 -0
- package/components/Table/index.js +1 -0
- package/components/Tabs/index.js +1 -0
- package/components/Time/index.js +1 -0
- package/components/TimeInput/index.js +1 -0
- package/components/Timezone/index.js +1 -0
- package/components/ToggleButton/index.js +1 -0
- package/components/Tooltip/index.js +1 -0
- package/components/UploadImage/index.js +1 -0
- package/docs/migrations/2026/08/ui-2026-08-23-use-client-propagates-to-barrels.md +101 -0
- package/docs/migrations/2026/08/ui-2026-08-24-accordion-author-key-space.md +50 -0
- package/docs/migrations/README.md +1 -0
- package/docs/migrations/index.json +10 -0
- package/hooks/useAttributeData.js +1 -0
- package/hooks/useCollectionState/index.js +1 -0
- package/hooks/useRoute/index.js +1 -0
- package/next/index.js +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsx as e,jsxs as d,Fragment as O}from"react/jsx-runtime";import{Children as V,isValidElement as _,Fragment as
|
|
1
|
+
"use client";import{jsx as e,jsxs as d,Fragment as O}from"react/jsx-runtime";import{Children as V,isValidElement as _,Fragment as q}from"react";import{DisclosureGroup as H,Disclosure as J,Button as L,DisclosurePanel as Q}from"react-aria-components";import{cn as r}from"../../utils/cn.js";import{DownArrow as y}from"../Icon/DownArrow.js";function E(p){return null}function C({children:p,selectionMode:N="single",defaultSelectedKeys:w,defaultExpandedKeys:k,selectedKeys:A,onSelectionChange:I,disallowEmptySelection:v=!1,hideIndicator:D=!1,showDivider:S=!0,dividerProps:K,variant:s,isCompact:i,className:F,itemClasses:n}){const c=V.toArray(p).filter(_),b=(t,l)=>String(t.key??l).replace(/^\.\$/,"").replace(/=2/g,":").replace(/=0/g,"="),j=c.map(b),h=t=>t==="all"?j:t?[...t].map(String):void 0,P=h(w??k)??[],W=h(A);return e(H,{allowsMultipleExpanded:N==="multiple",defaultExpandedKeys:P,expandedKeys:W,onExpandedChange:t=>{const l=new Set([...t].map(String));v&&l.size===0||I?.(l)},className:r("px-0",s==="bordered"&&["px-4 py-4 rounded-xl border-2 border-border-subtle"],s==="shadow"&&["px-4 py-4 rounded-xl bg-surface-subtle shadow-slate-200 border border-border-subtle"],F),children:c.map((t,l)=>{const f=b(t,l),{title:$,subtitle:m,startContent:g,indicator:u,hideIndicator:z,disableIndicatorAnimation:x,isDisabled:B,classNames:o,onPress:G,children:M}=t.props;return d(q,{children:[e(J,{id:f,isDisabled:B,className:r("w-full py-2","data-disabled:pointer-events-none data-disabled:opacity-50",s==="bordered"&&["rounded-xl py-0"],s==="splitted"&&["flex flex-col bg-surface-subtle rounded-xl border border-border-subtle"],i&&"py-0",n?.base,o?.base),children:({isExpanded:a})=>d(O,{children:[e("h2",{"data-open":a||void 0,className:r(n?.heading,o?.heading),children:d(L,{slot:"trigger","data-open":a||void 0,onPress:G,"aria-label":t.props["aria-label"],className:r("w-full h-full flex items-center gap-3 py-0 appearance-none cursor-pointer select-none","border-0 focus-visible:outline-2 focus-visible:outline focus-visible:outline-slate-100","bg-transparent text-inherit",i&&["py-2"],n?.trigger,o?.trigger),children:[g!=null&&e("span",{className:r("shrink-0",n?.startContent,o?.startContent),children:g}),d("span",{className:r("flex-1 text-left",n?.titleWrapper,o?.titleWrapper),children:[e("span",{className:r("block text-xl font-semibold",i&&"text-base",n?.title,o?.title),children:$}),m!=null&&e("span",{className:r("block text-base",i&&"text-sm",n?.subtitle,o?.subtitle),children:m})]}),z||D?null:e("span",{"aria-hidden":"true","data-open":a||void 0,className:r("shrink-0",!x&&"transition-transform duration-200",!x&&a&&"-rotate-180",n?.indicator,o?.indicator),children:typeof u=="function"?e(u,{isOpen:a}):u??e(y,{className:"w-4 h-4"})})]})}),e("div",{className:r("grid transition-[grid-template-rows] duration-200 ease-in-out",a?"grid-rows-[1fr]":"grid-rows-[0fr]"),children:e("div",{className:"overflow-hidden min-h-0",children:e(Q,{className:r(i?"py-1":"py-2",n?.content,o?.content),children:M})})})]})}),S&&l<c.length-1&&e("hr",{className:r("border-solid border-b-0 border-x-0",K?.className??["my-2 border-border-subtle",s==="shadow"&&"border-border"])})]},f)})})}function ee(){return e(y,{className:"w-4 h-4"})}export{C as Accordion,E as AccordionItem,ee as AccordionItemArrow,C as default};
|
|
@@ -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{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};
|
package/components/Card/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as
|
|
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{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{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{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{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{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};
|
package/components/Icon/index.js
CHANGED
|
@@ -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};
|
package/components/Link/index.js
CHANGED
|
@@ -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};
|
package/components/Menu/index.js
CHANGED
|
@@ -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{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{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 @@
|
|
|
1
|
-
import{jsx as e,jsxs as r,Fragment as c}from"react/jsx-runtime";import{RadioGroup as p,Label as
|
|
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{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};
|
package/components/Tabs/index.js
CHANGED
|
@@ -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};
|
package/components/Time/index.js
CHANGED
|
@@ -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};
|
|
@@ -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.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Accordion controlled selection matches authored keys again
|
|
2
|
+
|
|
3
|
+
**Date:** 2026-08-24
|
|
4
|
+
**Package:** `@clicktap/ui`
|
|
5
|
+
**Affects:** every controlled or default-expanded `Accordion` — checkout payment method selection, checkout's `defaultExpandedKeys={['cart']}`, totals/discount panel, PDP mobile overview, filter groups.
|
|
6
|
+
**Classification:** BUGFIX
|
|
7
|
+
**Breaking:** No — unless you shipped a workaround that pre-prefixes keys (see crispi note).
|
|
8
|
+
**Ticket:** CTAP-1404
|
|
9
|
+
|
|
10
|
+
## The defect (2.0.x regression from the CTAP-1383 react-aria rewrite)
|
|
11
|
+
|
|
12
|
+
The component derived internal item ids from `Children.toArray(children)`, whose
|
|
13
|
+
keys are NOT the author's keys: React prefixes them (`key="CYBERSOURCE"` arrives
|
|
14
|
+
as `".$CYBERSOURCE"`) and escapes them (`:` → `=2`, `=` → `=0`). Consumer keys
|
|
15
|
+
were only `String()`ed, so:
|
|
16
|
+
|
|
17
|
+
1. `selectedKeys` / `defaultSelectedKeys` / `defaultExpandedKeys` never matched
|
|
18
|
+
any item — nothing opened, nothing highlighted. The checkout payment step's
|
|
19
|
+
method selection "not working" was this.
|
|
20
|
+
2. `onSelectionChange` handed the PREFIXED id back out — crispi's checkout
|
|
21
|
+
dispatched `".$CYBERSOURCE"` as a payment method code to the backend.
|
|
22
|
+
|
|
23
|
+
The heroui accordion this replaced handled keys correctly. Diagnosed by the
|
|
24
|
+
crispi session against the installed 2.0.6 bundle.
|
|
25
|
+
|
|
26
|
+
## The fix
|
|
27
|
+
|
|
28
|
+
Internal ids now live in the author's key space: the `.$` prefix is stripped AND
|
|
29
|
+
React's key escaping is reversed (`=2` → `:`, `=0` → `=` — without the unescape,
|
|
30
|
+
`Module:Entity`-style keys would still mangle). The same author-space id is used
|
|
31
|
+
as the `Disclosure` id, so what react-aria reports through `onExpandedChange`
|
|
32
|
+
round-trips with no output translation. `"all"` and unkeyed children (positional
|
|
33
|
+
`".0"` ids) behave as before.
|
|
34
|
+
|
|
35
|
+
## Consumer checklist
|
|
36
|
+
|
|
37
|
+
1. Take the release; no call-site changes needed — controlled accordions start
|
|
38
|
+
working as written.
|
|
39
|
+
2. **Delete compensating shims.** crispi: `libs/crispi-ui/.../Accordion.tsx`
|
|
40
|
+
wrapper (crispi-monorepo `7a44704f0`) must be REMOVED when taking this
|
|
41
|
+
release — it translates keys into the prefixed space, which no longer
|
|
42
|
+
exists, so keeping it reintroduces the bug in the other direction. Check the
|
|
43
|
+
shim's own escape handling is not needed elsewhere (this fix also covers
|
|
44
|
+
escaped keys, which a bare `.$`-strip shim does not).
|
|
45
|
+
3. If any code path stored or transmitted a prefixed id (`.$…`) — crispi saw
|
|
46
|
+
them reach the backend as payment codes — check persisted data for the
|
|
47
|
+
`.$` prefix.
|
|
48
|
+
|
|
49
|
+
Regression tests ship with the component (`Accordion.test.tsx`), proven to fail
|
|
50
|
+
4/6 against the unfixed 2.0.6 behavior.
|
|
@@ -32,5 +32,6 @@ For migrations affecting the frontend app, see [frontend migrations](../../../..
|
|
|
32
32
|
| 2026-08-06 | [`Image` is framework-free; Next's optimizer moves to `@clicktap/ui/next`](./2026/08/ui-2026-08-06-clicktap-ui-image-next-subpath.md) ↔ | Yes (Next consumers) | *None* |
|
|
33
33
|
| 2026-08-11 | [Password reveal is a toggle again, not press-and-hold](./2026/08/ui-2026-08-11-password-reveal-toggle.md) | Behavioural | Supersedes CTAP-1128 |
|
|
34
34
|
| 2026-08-11 | [`next` / `@heroui/*` peers capped; `react-stately` pinned](./2026/08/ui-2026-08-11-peer-ranges-capped.md) | Yes (consumers past a ceiling) | *None* |
|
|
35
|
+
| 2026-08-24 | [Accordion controlled selection matches authored keys again](./2026/08/ui-2026-08-24-accordion-author-key-space.md) | No | CTAP-1383 regression (CTAP-1404) |
|
|
35
36
|
|
|
36
37
|
↔ = cross-app migration (has counterpart in frontend app)
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
[
|
|
2
|
+
{
|
|
3
|
+
"path": "2026/08/ui-2026-08-23-use-client-propagates-to-barrels.md",
|
|
4
|
+
"module": "libs/frontend-modules/ui",
|
|
5
|
+
"package": "@clicktap/ui",
|
|
6
|
+
"date": "2026-08-23",
|
|
7
|
+
"title": "'use client' now reaches the re-export barrels",
|
|
8
|
+
"classification": "BUGFIX (packaging)",
|
|
9
|
+
"breaking": "No.",
|
|
10
|
+
"affects": "every emitted `components/**/index.js`; `Checkbox` and `RadioGroup` sources; the build's directive verification"
|
|
11
|
+
},
|
|
2
12
|
{
|
|
3
13
|
"path": "2026/08/ui-2026-08-22-react-aria-moves-as-one-version-set.md",
|
|
4
14
|
"module": "libs/frontend-modules/ui",
|
package/hooks/useRoute/index.js
CHANGED
|
@@ -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