@clicktap/ui 0.43.3 → 0.43.5

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 (34) hide show
  1. package/components/Collection/CollectionFilters/CollectionFilters.js +1 -1
  2. package/components/Collection/CollectionFilters/index.js +1 -1
  3. package/components/Collection/index.js +1 -1
  4. package/components/DialogTrigger/DialogTrigger.d.ts +21 -2
  5. package/components/DialogTrigger/DialogTrigger.js +1 -1
  6. package/components/ModalOverlay/ModalOverlay.d.ts +20 -0
  7. package/components/ModalOverlay/ModalOverlay.js +1 -1
  8. package/components/ModalOverlay/index.js +1 -1
  9. package/docs/migrations/2026/01/{2026-01-14-external-link-detection.md → ui-2026-01-14-external-link-detection.md} +1 -0
  10. package/docs/migrations/2026/01/{2026-01-14-use-route-hook.md → ui-2026-01-14-use-route-hook.md} +1 -0
  11. package/docs/migrations/2026/01/{2026-01-15-input-disable-skeleton.md → ui-2026-01-15-input-disable-skeleton.md} +1 -0
  12. package/docs/migrations/2026/02/{2026-02-17-select-popover-portal-container-restored.md → ui-2026-02-17-select-popover-portal-container-restored.md} +1 -0
  13. package/docs/migrations/2026/03/{2026-03-24-image-dimmed-hidden-onready.md → ui-2026-03-24-image-dimmed-hidden-onready.md} +1 -0
  14. package/docs/migrations/2026/03/{2026-03-24-modal-overlay-backdrop-dismiss.md → ui-2026-03-24-modal-overlay-backdrop-dismiss.md} +1 -0
  15. package/docs/migrations/2026/04/{2026-04-17-select-address-input-onchange-key-or-item.md → ui-2026-04-17-select-address-input-onchange-key-or-item.md} +1 -0
  16. package/docs/migrations/2026/05/{2026-05-01-build-pdp-url-util.md → ui-2026-05-01-build-pdp-url-util.md} +1 -0
  17. package/docs/migrations/2026/05/{2026-05-03-auth-aware-graphql-client.md → ui-2026-05-03-auth-aware-graphql-client.md} +1 -0
  18. package/docs/migrations/2026/05/{2026-05-20-framer-motion-11-idioms.md → ui-2026-05-20-framer-motion-11-idioms.md} +1 -0
  19. package/docs/migrations/2026/05/{2026-05-21-button-loading-content.md → ui-2026-05-21-button-loading-content.md} +1 -0
  20. package/docs/migrations/2026/05/{2026-05-21-password-check-hide-on-empty.md → ui-2026-05-21-password-check-hide-on-empty.md} +1 -0
  21. package/docs/migrations/2026/05/{2026-05-29-password-check-requirements-variant.md → ui-2026-05-29-password-check-requirements-variant.md} +3 -2
  22. package/docs/migrations/2026/06/{2026-06-17-select-standardization.md → ui-2026-06-17-select-standardization.md} +2 -1
  23. package/docs/migrations/2026/06/{2026-06-18-select-hiddenselect-setvalue-crash.md → ui-2026-06-18-select-hiddenselect-setvalue-crash.md} +1 -0
  24. package/docs/migrations/2026/07/{2026-07-31-ui-exports-bundler-resolution.md → ui-2026-07-31-ui-exports-bundler-resolution.md} +1 -0
  25. package/docs/migrations/2026/08/{2026-08-02-nextui-to-heroui.md → ui-2026-08-02-nextui-to-heroui.md} +1 -0
  26. package/docs/migrations/2026/08/{2026-08-04-password-reveal-press-and-hold.md → ui-2026-08-04-password-reveal-press-and-hold.md} +1 -0
  27. package/docs/migrations/2026/08/{2026-08-04-resend-code-control.md → ui-2026-08-04-resend-code-control.md} +1 -0
  28. package/docs/migrations/2026/08/{2026-08-06-clicktap-ui-image-next-subpath.md → ui-2026-08-06-clicktap-ui-image-next-subpath.md} +1 -0
  29. package/docs/migrations/2026/08/{2026-08-06-clicktap-ui-loaders-drop-framer-motion.md → ui-2026-08-06-clicktap-ui-loaders-drop-framer-motion.md} +2 -1
  30. package/docs/migrations/2026/08/{2026-08-06-clicktap-ui-semantic-tokens.md → ui-2026-08-06-clicktap-ui-semantic-tokens.md} +1 -0
  31. package/docs/migrations/2026/08/{2026-08-07-ui-peer-contract-form-graphql-optional-peers.md → ui-2026-08-07-ui-peer-contract-form-graphql-optional-peers.md} +1 -0
  32. package/docs/migrations/README.md +18 -18
  33. package/docs/migrations/index.json +23 -23
  34. package/package.json +1 -1
@@ -1 +1 @@
1
- "use client";import{jsxs as l,Fragment as h,jsx as e}from"react/jsx-runtime";import{useMemo as b,Suspense as x,useState as v}from"react";import{Accordion as g}from"../../Accordion/Accordion.js";import{AccordionItem as w}from"@heroui/accordion";import{Button as f}from"../../Button/Button.js";import"../../../utils/cn.js";import{ModalOverlay as y}from"../../ModalOverlay/ModalOverlay.js";import{Modal as N}from"../../Modal/Modal.js";import{Drawer as k}from"../../Drawer/Drawer.js";import{Cross as C}from"../../Icon/Cross.js";import{CrossSmall as A}from"../../Icon/CrossSmall.js";import{Search as D}from"../../Icon/Search.js";import{FilterRenderer as I}from"../FilterRenderer/FilterRenderer.js";import{mergeFilters as S}from"../../../utils/collection/mergeFilters.js";import{FilterAccordionTitle as j}from"../FilterAccordionTitle/FilterAccordionTitle.js";import{EmptyResults as L}from"../EmptyResults/EmptyResults.js";import"../../Icon/DownArrow.js";import"react-aria-components";import"framer-motion";import"../../DialogTrigger/DialogTrigger.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";function M(){return e("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e("path",{d:"M4 6L8 10L12 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function V({value:a,onChange:r}){const[o,c]=v(a),m=()=>{r(o.trim())};return l("div",{className:"relative",children:[e("input",{type:"search",value:o,onChange:i=>c(i.target.value),onKeyDown:i=>{i.key==="Enter"&&(i.preventDefault(),m())},onBlur:m,placeholder:"Search products...","aria-label":"Search products",autoComplete:"off",className:"w-full h-9 pl-8 pr-8 rounded-md border border-border bg-white text-sm text-fg placeholder:text-fg-subtle focus:outline-none focus:border-border-emphasis [&::-webkit-search-cancel-button]:hidden"}),o&&e("button",{type:"button",onClick:()=>{c(""),r("")},"aria-label":"Clear search",className:"absolute right-2 top-1/2 -translate-y-1/2 p-0.5 rounded-full hover:bg-surface-subtle transition-colors",children:e(A,{})}),e("span",{className:"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 [&>svg]:w-full [&>svg]:h-full text-fg-subtle",children:e(D,{})})]})}function fe({availableFilters:a,appliedFilters:r,onFilterChange:o,showMobileFilters:c,setShowMobileFilters:m,searchQuery:s,onSearchChange:n,totalItems:i}){const u=b(()=>S(r,a).filter(t=>t.includeInFilters!==!1),[r,a]),d=n&&e(V,{value:s??"",onChange:n},s),p=()=>u.length>0&&e(g,{selectionMode:"multiple",defaultSelectedKeys:"all",className:"pt-2 mt-3",showDivider:!1,itemClasses:{base:"py-1",title:"text-sm font-medium leading-7",trigger:"py-2 border-b border-gray-200",indicator:'data-[open="true"]:rotate-180',content:"pt-2 pb-3"},children:u.map(t=>e(w,{textValue:t.label,title:e(j,{filter:t,appliedFilters:r,onFilterChange:o}),disableIndicatorAnimation:!0,indicator:M,children:e("div",{className:"pt-2",children:e(I,{filter:t,onFilterChange:o,appliedFilters:r,variant:"sidebar"})})},t.code))});return l(h,{children:[l("div",{className:"hidden lg:flex lg:flex-col lg:basis-[16.5rem] lg:shrink-0",children:[d,p(),r.length>0&&e("button",{type:"button",className:"text-sm text-fg-muted hover:text-slate-700 transition-colors mt-4 mb-8",onClick:()=>o([]),children:"Clear all filters"})]}),e("div",{className:"lg:hidden",children:e(x,{children:e(y,{isOpen:c,onOpenChange:t=>m(t),isDismissable:!0,children:e(N,{children:e(k,{size:"30rem",direction:"left","aria-label":"Filters",className:"p-5",children:({close:t})=>l("div",{className:"flex flex-col w-full h-full overflow-hidden",children:[l("div",{className:"flex items-center w-full justify-between",children:[e("span",{className:"text-xl font-bold text-slate-800",children:"Filters"}),e(f,{variant:"ghost","aria-label":"Close",onPress:()=>t(),className:"justify-start size-auto p-0",children:e(C,{})})]}),l("div",{className:"flex flex-col flex-1 overflow-x-hidden overflow-y-auto [scrollbar-width:none] [-webkit-overflow-scrolling:touch] [&::-webkit-scrollbar]:hidden",children:[d&&e("div",{className:"mt-3",children:d}),p(),i===0&&e(L,{searchQuery:s,hasFilters:r.length>0,onClearFilters:()=>o([]),onClearSearch:s&&n?()=>n(""):void 0})]}),l("div",{className:"shrink-0 pt-3 flex flex-col gap-3 border-t border-gray-200",children:[r.length>0&&e("button",{type:"button",className:"text-sm py-2 text-fg-muted hover:text-slate-700 transition-colors",onClick:()=>o([]),children:"Clear all"}),e(f,{className:"w-full py-6 text-base rounded-xl",variant:"primary",onPress:()=>t(),children:"View Results"})]})]})})})})})})]})}export{fe as CollectionFilters};
1
+ "use client";import{jsxs as l,Fragment as h,jsx as e}from"react/jsx-runtime";import{useMemo as b,Suspense as x,useState as v}from"react";import{Accordion as g}from"../../Accordion/Accordion.js";import{AccordionItem as w}from"@heroui/accordion";import{Button as f}from"../../Button/Button.js";import"../../../utils/cn.js";import{ModalOverlay as y}from"../../ModalOverlay/ModalOverlay.js";import{Modal as N}from"../../Modal/Modal.js";import{Drawer as k}from"../../Drawer/Drawer.js";import{Cross as C}from"../../Icon/Cross.js";import{CrossSmall as A}from"../../Icon/CrossSmall.js";import{Search as D}from"../../Icon/Search.js";import{FilterRenderer as I}from"../FilterRenderer/FilterRenderer.js";import{mergeFilters as S}from"../../../utils/collection/mergeFilters.js";import{FilterAccordionTitle as j}from"../FilterAccordionTitle/FilterAccordionTitle.js";import{EmptyResults as L}from"../EmptyResults/EmptyResults.js";import"../../Icon/DownArrow.js";import"react-aria-components";import"framer-motion";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";function M(){return e("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:e("path",{d:"M4 6L8 10L12 6",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function V({value:a,onChange:r}){const[o,c]=v(a),m=()=>{r(o.trim())};return l("div",{className:"relative",children:[e("input",{type:"search",value:o,onChange:i=>c(i.target.value),onKeyDown:i=>{i.key==="Enter"&&(i.preventDefault(),m())},onBlur:m,placeholder:"Search products...","aria-label":"Search products",autoComplete:"off",className:"w-full h-9 pl-8 pr-8 rounded-md border border-border bg-white text-sm text-fg placeholder:text-fg-subtle focus:outline-none focus:border-border-emphasis [&::-webkit-search-cancel-button]:hidden"}),o&&e("button",{type:"button",onClick:()=>{c(""),r("")},"aria-label":"Clear search",className:"absolute right-2 top-1/2 -translate-y-1/2 p-0.5 rounded-full hover:bg-surface-subtle transition-colors",children:e(A,{})}),e("span",{className:"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 [&>svg]:w-full [&>svg]:h-full text-fg-subtle",children:e(D,{})})]})}function pe({availableFilters:a,appliedFilters:r,onFilterChange:o,showMobileFilters:c,setShowMobileFilters:m,searchQuery:s,onSearchChange:n,totalItems:i}){const u=b(()=>S(r,a).filter(t=>t.includeInFilters!==!1),[r,a]),d=n&&e(V,{value:s??"",onChange:n},s),p=()=>u.length>0&&e(g,{selectionMode:"multiple",defaultSelectedKeys:"all",className:"pt-2 mt-3",showDivider:!1,itemClasses:{base:"py-1",title:"text-sm font-medium leading-7",trigger:"py-2 border-b border-gray-200",indicator:'data-[open="true"]:rotate-180',content:"pt-2 pb-3"},children:u.map(t=>e(w,{textValue:t.label,title:e(j,{filter:t,appliedFilters:r,onFilterChange:o}),disableIndicatorAnimation:!0,indicator:M,children:e("div",{className:"pt-2",children:e(I,{filter:t,onFilterChange:o,appliedFilters:r,variant:"sidebar"})})},t.code))});return l(h,{children:[l("div",{className:"hidden lg:flex lg:flex-col lg:basis-[16.5rem] lg:shrink-0",children:[d,p(),r.length>0&&e("button",{type:"button",className:"text-sm text-fg-muted hover:text-slate-700 transition-colors mt-4 mb-8",onClick:()=>o([]),children:"Clear all filters"})]}),e("div",{className:"lg:hidden",children:e(x,{children:e(y,{isOpen:c,onOpenChange:t=>m(t),isDismissable:!0,children:e(N,{children:e(k,{size:"30rem",direction:"left","aria-label":"Filters",className:"p-5",children:({close:t})=>l("div",{className:"flex flex-col w-full h-full overflow-hidden",children:[l("div",{className:"flex items-center w-full justify-between",children:[e("span",{className:"text-xl font-bold text-slate-800",children:"Filters"}),e(f,{variant:"ghost","aria-label":"Close",onPress:()=>t(),className:"justify-start size-auto p-0",children:e(C,{})})]}),l("div",{className:"flex flex-col flex-1 overflow-x-hidden overflow-y-auto [scrollbar-width:none] [-webkit-overflow-scrolling:touch] [&::-webkit-scrollbar]:hidden",children:[d&&e("div",{className:"mt-3",children:d}),p(),i===0&&e(L,{searchQuery:s,hasFilters:r.length>0,onClearFilters:()=>o([]),onClearSearch:s&&n?()=>n(""):void 0})]}),l("div",{className:"shrink-0 pt-3 flex flex-col gap-3 border-t border-gray-200",children:[r.length>0&&e("button",{type:"button",className:"text-sm py-2 text-fg-muted hover:text-slate-700 transition-colors",onClick:()=>o([]),children:"Clear all"}),e(f,{className:"w-full py-6 text-base rounded-xl",variant:"primary",onPress:()=>t(),children:"View Results"})]})]})})})})})})]})}export{pe as CollectionFilters};
@@ -1 +1 @@
1
- import{CollectionFilters as L}from"./CollectionFilters.js";import"react/jsx-runtime";import"react";import"../../Accordion/Accordion.js";import"@heroui/accordion";import"../../../utils/cn.js";import"../../Icon/DownArrow.js";import"../../Button/Button.js";import"react-aria-components";import"../../ModalOverlay/ModalOverlay.js";import"framer-motion";import"../../DialogTrigger/DialogTrigger.js";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{L as CollectionFilters};
1
+ import{CollectionFilters as K}from"./CollectionFilters.js";import"react/jsx-runtime";import"react";import"../../Accordion/Accordion.js";import"@heroui/accordion";import"../../../utils/cn.js";import"../../Icon/DownArrow.js";import"../../Button/Button.js";import"react-aria-components";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{K as CollectionFilters};
@@ -1 +1 @@
1
- import{AttributeDataProvider as V,useAttributeData as W}from"./AttributeDataProvider/AttributeDataProvider.js";import{EmptyResults as Y}from"./EmptyResults/EmptyResults.js";import{ProductPrice as _}from"./ProductPrice/ProductPrice.js";import{FilterRenderer as rr}from"./FilterRenderer/FilterRenderer.js";import{CollectionFilterChips as tr}from"./CollectionFilterChips/CollectionFilterChips.js";import{FilterAccordionTitle as pr}from"./FilterAccordionTitle/FilterAccordionTitle.js";import{ProductCardSwatches as er}from"./ProductCardSwatches/ProductCardSwatches.js";import{CollectionFilters as cr}from"./CollectionFilters/CollectionFilters.js";import{CollectionToolbar as xr}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"@heroui/accordion";import"../Icon/DownArrow.js";import"../ModalOverlay/ModalOverlay.js";import"framer-motion";import"../DialogTrigger/DialogTrigger.js";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{V as AttributeDataProvider,tr as CollectionFilterChips,cr as CollectionFilters,xr as CollectionToolbar,Y as EmptyResults,pr as FilterAccordionTitle,rr as FilterRenderer,er as ProductCardSwatches,_ as ProductPrice,W as useAttributeData};
1
+ import{AttributeDataProvider as U,useAttributeData as V}from"./AttributeDataProvider/AttributeDataProvider.js";import{EmptyResults as X}from"./EmptyResults/EmptyResults.js";import{ProductPrice as Z}from"./ProductPrice/ProductPrice.js";import{FilterRenderer as $}from"./FilterRenderer/FilterRenderer.js";import{CollectionFilterChips as or}from"./CollectionFilterChips/CollectionFilterChips.js";import{FilterAccordionTitle as ir}from"./FilterAccordionTitle/FilterAccordionTitle.js";import{ProductCardSwatches as mr}from"./ProductCardSwatches/ProductCardSwatches.js";import{CollectionFilters as lr}from"./CollectionFilters/CollectionFilters.js";import{CollectionToolbar as fr}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"@heroui/accordion";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{U as AttributeDataProvider,or as CollectionFilterChips,lr as CollectionFilters,fr as CollectionToolbar,X as EmptyResults,ir as FilterAccordionTitle,$ as FilterRenderer,mr as ProductCardSwatches,Z as ProductPrice,V as useAttributeData};
@@ -1,10 +1,29 @@
1
- import { Dispatch, SetStateAction } from 'react';
2
1
  import { DialogTriggerProps } from 'react-aria-components';
3
2
  import { DriverAnimationState } from './DialogTrigger.types';
3
+ /**
4
+ * @deprecated The overlay animation state now lives in ModalOverlay, derived from react-aria's
5
+ * `OverlayTriggerStateContext` (CTAP-1210) — read that context directly instead. This shim keeps
6
+ * the old shape working: `animation` reflects the settled open state only (the transient `hidden`
7
+ * exit phase is overlay-internal), `setAnimation` is a no-op, and `onOpenChange` drives the
8
+ * react-aria state.
9
+ */
4
10
  export declare const useDialogTrigger: () => {
5
11
  animation: DriverAnimationState;
6
- setAnimation: Dispatch<SetStateAction<DriverAnimationState>>;
12
+ setAnimation: (animation: DriverAnimationState) => void;
7
13
  onOpenChange: (isOpen: boolean) => void;
8
14
  };
15
+ /**
16
+ * Thin wrapper over react-aria's DialogTrigger, kept as the package's stable import point.
17
+ *
18
+ * Deliberately NO module-scoped context here. The previous version mirrored the open state into
19
+ * its own `createContext` for the overlay's enter/exit animation — and a module-scoped context
20
+ * only works when every consumer resolves the SAME package instance. With two @clicktap/ui copies
21
+ * installed (an ordinary pnpm-workspace version skew), the trigger wrote into one context copy
22
+ * while the overlay read the other's default, so every trigger-driven modal mounted at
23
+ * `opacity: 0` with zero errors (CTAP-1210, reported by noco). The animation state now lives in
24
+ * ModalOverlay itself, derived from react-aria's `OverlayTriggerStateContext` — the one context
25
+ * that is reliably shared, because everything fails loudly if react-aria-components itself is
26
+ * duplicated.
27
+ */
9
28
  export declare function DialogTrigger(props: DialogTriggerProps): import("react/jsx-runtime").JSX.Element;
10
29
  export default DialogTrigger;
@@ -1 +1 @@
1
- "use client";import{jsx as r}from"react/jsx-runtime";import{createContext as u,useState as c,useMemo as l,useContext as p}from"react";import{DialogTrigger as d}from"react-aria-components";const a=u({animation:"unmounted",setAnimation:()=>{},onOpenChange:()=>{}}),x=()=>p(a);function D(g){const{onOpenChange:e,...s}=g,[n,o]=c("unmounted"),t=i=>{o(i?"visible":"hidden"),e?.(i)},m=l(()=>({animation:n,setAnimation:o,onOpenChange:t}),[n,e]);return r(a.Provider,{value:m,children:r(d,{...s,onOpenChange:t})})}export{D as DialogTrigger,D as default,x as useDialogTrigger};
1
+ "use client";import{jsx as r}from"react/jsx-runtime";import{useContext as i}from"react";import{DialogTrigger as n,OverlayTriggerStateContext as o}from"react-aria-components";const m=()=>{const e=i(o);return{animation:e?.isOpen?"visible":"unmounted",setAnimation:()=>{},onOpenChange:t=>e?.setOpen(t)}};function u(e){return r(n,{...e})}export{u as DialogTrigger,u as default,m as useDialogTrigger};
@@ -1,3 +1,23 @@
1
+ import { Dispatch, SetStateAction } from 'react';
2
+ import { OverlayTriggerState } from 'react-stately';
3
+ import { DriverAnimationState } from '../DialogTrigger/DialogTrigger.types';
1
4
  import { ModalOverlayProps } from './ModalOverlay.types';
5
+ /**
6
+ * The overlay's enter/exit animation tri-state, derived from react-aria's own trigger state:
7
+ * open → `visible`; close-while-visible → `hidden` (the exit phase — `isExiting` keeps the
8
+ * react-aria overlay mounted while framer-motion plays it); `onAnimationComplete` then settles
9
+ * `hidden` → `unmounted`, letting react-aria unmount the portal.
10
+ *
11
+ * Derived HERE, from `OverlayTriggerStateContext`, and not mirrored through a package-owned
12
+ * context on DialogTrigger: a module-scoped context exists once PER PACKAGE INSTANCE, so with two
13
+ * @clicktap/ui copies installed (ordinary pnpm version skew) the trigger wrote `visible` into one
14
+ * copy while the overlay read the other's `unmounted` default — `animate="unmounted"` names no
15
+ * variant, framer-motion holds `initial: "hidden"`, and every trigger-driven modal sat mounted at
16
+ * `opacity: 0` with zero errors (CTAP-1210, noco). react-aria's context is the safe dependency:
17
+ * if react-aria-components itself is duplicated, everything breaks loudly.
18
+ *
19
+ * Exported for unit tests only.
20
+ */
21
+ export declare function useOverlayAnimationState(overlayState: OverlayTriggerState | null | undefined): [DriverAnimationState, Dispatch<SetStateAction<DriverAnimationState>>];
2
22
  export declare function ModalOverlay(props: ModalOverlayProps): import("react/jsx-runtime").JSX.Element;
3
23
  export default ModalOverlay;
@@ -1 +1 @@
1
- "use client";import{jsx as i}from"react/jsx-runtime";import{forwardRef as P,useId as I,useEffect as N,useCallback as p,useContext as S}from"react";import{ModalOverlay as M,OverlayTriggerStateContext as k}from"react-aria-components";import{motion as T,AnimatePresence as R}from"framer-motion";import{useDialogTrigger as F}from"../DialogTrigger/DialogTrigger.js";import{cn as j}from"../../utils/cn.js";const q="body > [inert]:not(#__next):not([data-overlay-container])";function z(e){return Object.keys(e).some(n=>n.startsWith("__react"))}function O(){document.querySelectorAll(q).forEach(e=>e.removeAttribute("inert"))}function D(e){return!!(e.closest("[data-overlay-container]")||e.closest("#__next"))}const L=P(({style:e,children:n,...o},r)=>{const l=typeof e=="function"?e(o):e;return i(M,{...o,ref:r,style:l,children:n})});let m=null;function W(){return typeof window>"u"?null:(m||(m=T.create(L)),m)}const h=W();function g({animate:e,animation:n,setAnimation:o,className:r,animationVariants:l,isDismissable:u=!0,children:v,...E}){const w=I();N(()=>{O();const t=new MutationObserver(s=>{for(const d of s)if(d.type==="attributes"&&d.attributeName==="inert"){const f=d.target;f.parentElement===document.body?O():z(f)||f.removeAttribute("inert")}});return t.observe(document.body,{attributes:!0,attributeFilter:["inert"],subtree:!0}),()=>t.disconnect()},[]);const{key:x,shouldCloseOnInteractOutside:c,onOpenChange:a,...C}=E,_=p(t=>c?c(t):D(t),[c]),y=S(k),A=p(t=>{!u||t.target!==t.currentTarget||(a?a(!1):y?.close())},[u,a,y]),b={isDismissable:u,shouldCloseOnInteractOutside:_,onOpenChange:a,onPointerDown:A,className:j("bg-black/30 backdrop-blur-sm","fixed top-0 left-0","z-[1000]","w-screen h-[var(--visual-viewport-height)]",r),...C};return h?i(h,{isExiting:n==="hidden",onAnimationComplete:t=>{o(s=>t==="hidden"&&s==="hidden"?"unmounted":s)},variants:l||{hidden:{opacity:0,transition:{delay:.08}},visible:{opacity:1}},initial:"hidden",animate:e,exit:"hidden",...b,children:v},x||w):i(M,{...b,children:v})}function Q(e){const{isOpen:n}=e,{animation:o,setAnimation:r}=F();return n!==void 0?i(R,{children:n&&i(g,{...e,animate:"visible",animation:o,setAnimation:r})}):i(g,{...e,animate:o,animation:o,setAnimation:r})}export{Q as ModalOverlay,Q as default};
1
+ "use client";import{jsx as a}from"react/jsx-runtime";import{forwardRef as N,useContext as M,useState as k,useEffect as A,useId as R,useCallback as O}from"react";import{ModalOverlay as E,OverlayTriggerStateContext as w}from"react-aria-components";import{motion as T,AnimatePresence as F}from"framer-motion";import{cn as j}from"../../utils/cn.js";const q="body > [inert]:not(#__next):not([data-overlay-container])";function z(e){return Object.keys(e).some(t=>t.startsWith("__react"))}function p(){document.querySelectorAll(q).forEach(e=>e.removeAttribute("inert"))}function L(e){return!!(e.closest("[data-overlay-container]")||e.closest("#__next"))}const W=N(({style:e,children:t,...i},n)=>{const r=typeof e=="function"?e(i):e;return a(E,{...i,ref:n,style:r,children:t})});let m=null;function $(){return typeof window>"u"?null:(m||(m=T.create(W)),m)}const h=$();function g({animate:e,animation:t,setAnimation:i,className:n,animationVariants:r,isDismissable:u=!0,children:v,...x}){const C=R();A(()=>{p();const o=new MutationObserver(l=>{for(const d of l)if(d.type==="attributes"&&d.attributeName==="inert"){const f=d.target;f.parentElement===document.body?p():z(f)||f.removeAttribute("inert")}});return o.observe(document.body,{attributes:!0,attributeFilter:["inert"],subtree:!0}),()=>o.disconnect()},[]);const{key:S,shouldCloseOnInteractOutside:c,onOpenChange:s,..._}=x,P=O(o=>c?c(o):L(o),[c]),y=M(w),I=O(o=>{!u||o.target!==o.currentTarget||(s?s(!1):y?.close())},[u,s,y]),b={isDismissable:u,shouldCloseOnInteractOutside:P,onOpenChange:s,onPointerDown:I,className:j("bg-black/30 backdrop-blur-sm","fixed top-0 left-0","z-[1000]","w-screen h-[var(--visual-viewport-height)]",n),..._};return h?a(h,{isExiting:t==="hidden",onAnimationComplete:o=>{i(l=>o==="hidden"&&l==="hidden"?"unmounted":l)},variants:r||{hidden:{opacity:0,transition:{delay:.08}},visible:{opacity:1}},initial:"hidden",animate:e,exit:"hidden",...b,children:v},S||C):a(E,{...b,children:v})}function B(e){const t=e?.isOpen??!1,[i,n]=k(t?"visible":"unmounted");return A(()=>{n(t?"visible":r=>r==="visible"?"hidden":r)},[t]),[i,n]}function Q(e){const{isOpen:t}=e,i=M(w),[n,r]=B(i);return t!==void 0?a(F,{children:t&&a(g,{...e,animate:"visible",animation:n,setAnimation:r})}):a(g,{...e,animate:n,animation:n,setAnimation:r})}export{Q as ModalOverlay,Q as default,B as useOverlayAnimationState};
@@ -1 +1 @@
1
- import{ModalOverlay as l}from"./ModalOverlay.js";import"react/jsx-runtime";import"react";import"react-aria-components";import"framer-motion";import"../DialogTrigger/DialogTrigger.js";import"../../utils/cn.js";export{l as ModalOverlay};
1
+ 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};
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui`, `apps/frontend`
6
6
  **Breaking:** No (additive, but requires provider setup for SSR)
7
7
  **Classification:** IMPROVEMENT
8
+ **Formerly named:** `2026-01-14-external-link-detection.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
 
10
11
  ## Dependencies
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui`, `apps/frontend`
6
6
  **Breaking:** No (additive, but recommended migration)
7
7
  **Classification:** IMPROVEMENT
8
+ **Formerly named:** `2026-01-14-use-route-hook.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
 
10
11
  ## Dependencies
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui`, `apps/frontend`
6
6
  **Breaking:** No
7
7
  **Classification:** IMPROVEMENT
8
+ **Formerly named:** `2026-01-15-input-disable-skeleton.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
 
10
11
  ## Dependencies
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui` Select component, any consumer using Select inside Dialog or Modal
6
6
  **Classification:** BUGFIX
7
7
  **Breaking:** No
8
+ **Formerly named:** `2026-02-17-select-popover-portal-container-restored.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Dependencies
10
11
 
@@ -6,6 +6,7 @@
6
6
  **Classification:** IMPROVEMENT
7
7
  **Breaking:** No
8
8
  **Group:** plp-image-transitions
9
+ **Formerly named:** `2026-03-24-image-dimmed-hidden-onready.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
9
10
 
10
11
  ## Dependencies
11
12
 
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui` — `ModalOverlay` component
6
6
  **Classification:** BUGFIX
7
7
  **Breaking:** No
8
+ **Formerly named:** `2026-03-24-modal-overlay-backdrop-dismiss.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Dependencies
10
11
 
@@ -5,6 +5,7 @@
5
5
  **Affects:** Frontend apps consuming `@clicktap/ui`'s `Select` and components that re-export its types (`AddressInput`, etc.). Any handler typed as `(value: Key) => void` breaks after the update.
6
6
  **Classification:** COMPATIBILITY
7
7
  **Breaking:** Yes — TypeScript-only. No runtime change; existing handlers still receive the same value at runtime, but strict TS setups fail to compile.
8
+ **Formerly named:** `2026-04-17-select-address-input-onchange-key-or-item.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Dependencies
10
11
 
@@ -7,6 +7,7 @@
7
7
  **Breaking:** No (additive)
8
8
  **Status:** ⚠️ **Superseded — never shipped. Do not adopt.** (CTAP-1077)
9
9
  **Superseded by:** the backend line-item `productUrl` fields — `QuoteItem.productUrl` / `OrderItem.productUrl` (see `2026-06-08-quote-item-product-url.md` and `2026-06-08-order-item-product-url.md` in the `quote-graphql` / `order-graphql` modules).
10
+ **Formerly named:** `2026-05-01-build-pdp-url-util.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
10
11
 
11
12
  > ⚠️ **This export was never published.** As of `@clicktap/ui` **0.40.9** there is no
12
13
  > `@clicktap/ui/utils/buildPdpUrl` — do not try to import it (there is no "shipped in X" version to check
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui/utils/createAuthAwareGraphqlClient` — new export
6
6
  **Classification:** IMPROVEMENT
7
7
  **Breaking:** No (additive)
8
+ **Formerly named:** `2026-05-03-auth-aware-graphql-client.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Dependencies
10
11
 
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui/components/Dialog`, `@clicktap/ui/components/ModalOverlay`, `@clicktap/ui/components/Badge`, `@clicktap/ui/components/Loader/CircularEasing`, `@clicktap/ui/components/Loader/Pulse`, and any consumer-side `motion.*` usage on framer-motion 11.x.
6
6
  **Classification:** COMPATIBILITY
7
7
  **Breaking:** Yes (for consumers passing custom `animationVariants` containing multi-function `transform` strings, transform/scale primitives in modal variants, calc-with-mixed-units in animate targets, or who copy-paste the affected motion patterns into their own components — see Consumer Impact)
8
+ **Formerly named:** `2026-05-20-framer-motion-11-idioms.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Dependencies
10
11
 
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui/components/Button` (new `ButtonLoadingContent` export) and every submit-style button in the frontend app.
6
6
  **Classification:** IMPROVEMENT
7
7
  **Breaking:** No
8
+ **Formerly named:** `2026-05-21-button-loading-content.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Dependencies
10
11
 
@@ -5,6 +5,7 @@
5
5
  **Affects:** `libs/ui/src/components/PasswordCheck/PasswordCheck.tsx`
6
6
  **Classification:** IMPROVEMENT
7
7
  **Breaking:** No
8
+ **Formerly named:** `2026-05-21-password-check-hide-on-empty.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Dependencies
10
11
 
@@ -5,10 +5,11 @@
5
5
  **Affects:** `libs/ui/src/components/PasswordCheck/PasswordCheck.tsx`, `libs/ui/src/components/PasswordCheck/PasswordCheck.types.ts`
6
6
  **Classification:** IMPROVEMENT
7
7
  **Breaking:** No (the variant is additive; `default` is unchanged)
8
+ **Formerly named:** `2026-05-29-password-check-requirements-variant.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Dependencies
10
11
 
11
- - [`PasswordCheck` `requirements` variant hides until the visitor types](./2026-05-21-password-check-hide-on-empty.md) — the hide-on-empty refinement to this same variant.
12
+ - [`PasswordCheck` `requirements` variant hides until the visitor types](./ui-2026-05-21-password-check-hide-on-empty.md) — the hide-on-empty refinement to this same variant.
12
13
 
13
14
  ## Summary
14
15
 
@@ -26,7 +27,7 @@ This guide documents the `requirements` variant of `PasswordCheck` so forked UI
26
27
 
27
28
  ## Behavior
28
29
 
29
- - **Hides when `value` is empty** — showing four unchecked bullets before any input reads as a list of demands rather than live feedback. (See the [hide-on-empty guide](./2026-05-21-password-check-hide-on-empty.md).)
30
+ - **Hides when `value` is empty** — showing four unchecked bullets before any input reads as a list of demands rather than live feedback. (See the [hide-on-empty guide](./ui-2026-05-21-password-check-hide-on-empty.md).)
30
31
  - Each rule transitions from `○` (slate) to `✓` (green) as it's met.
31
32
  - The 5-bar strength meter colors match the `default` variant's meter (red → yellow → green → blue by strength).
32
33
  - The component is stateless and pure — strength is derived from `value` via `checkStrength`.
@@ -5,6 +5,7 @@
5
5
  **Affects:** Any app consuming `@clicktap/ui`'s `Select` / `DropdownSelect` (Crispi, FFL, and any fork that renders pickers, sort controls, country/region selects, or configurable-product options).
6
6
  **Classification:** FEATURE + BREAKING
7
7
  **Breaking:** Yes — (1) `DropdownSelect` removed, (2) the bare `<Select>` is now a **button picker**, not a combobox, (3) `DropdownSelect`'s `classNames.trigger` is now `classNames.input`, (4) the root is `w-full` by default, (5) `<Option>` is react-stately's `Item` — keyed by `key` (no `id`) and **cannot be wrapped**.
8
+ **Formerly named:** `2026-06-17-select-standardization.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Dependencies
10
11
 
@@ -284,4 +285,4 @@ Safe — presentation-layer only, no persistent state.
284
285
  - Types: `libs/ui/src/components/Select/Select.types.ts`
285
286
  - Stories: `libs/ui/src/components/Select/Select.stories.tsx` (`Picker`, `Searchable`, `SearchableAuto`, `AsyncDataSource`, `ServerSideSearch`, `ThemedOptions`, `Grouped`, `Multiple`, `GroupedMultiple`, `ButtonMultiple`)
286
287
  - In-repo consumer examples: `apps/frontend/components/AddressForm/AddressForm.tsx` (country/region, autofill, aliases), `apps/frontend/components/Collection/CollectionToolbar.tsx` (toolbar width), `apps/frontend/components/Product/components/ConfigurableOptions/ConfigurableOptions.tsx`
287
- - Related: [`Select` `onSelectionChange` widened to `Key | T`](../04/2026-04-17-select-address-input-onchange-key-or-item.md), [`Select` `popoverPortalContainer` restored](../02/2026-02-17-select-popover-portal-container-restored.md)
288
+ - Related: [`Select` `onSelectionChange` widened to `Key | T`](../04/ui-2026-04-17-select-address-input-onchange-key-or-item.md), [`Select` `popoverPortalContainer` restored](../02/ui-2026-02-17-select-popover-portal-container-restored.md)
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui` `Select` — the **searchable** (ComboBox) variant (`ComboBoxSelect`)
6
6
  **Classification:** BUGFIX
7
7
  **Breaking:** No
8
+ **Formerly named:** `2026-06-18-select-hiddenselect-setvalue-crash.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Why
10
11
 
@@ -4,6 +4,7 @@
4
4
  **Revised:** 2026-08-08 — the test-runner half (CTAP-1195): every runtime subpath entry gains a `default` condition, so CJS resolvers (Jest) stop falling through to the `.d.ts`. See "Test runners (Jest)" below; reported by noco.
5
5
  **Package:** `@clicktap/ui`
6
6
  **Breaking:** No — additive to the `exports` map. Existing `moduleResolution: node` / `node10`
7
+ **Formerly named:** `2026-07-31-ui-exports-bundler-resolution.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
7
8
  consumers are unaffected (that resolver ignores `exports`); this only *adds* working resolution under
8
9
  `bundler` / `node16` / `nodenext`.
9
10
  **Classification:** BUGFIX (packaging) — unblocks `moduleResolution: bundler`, and with it TypeScript 7
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui` peer dependencies — `Accordion`, `Badge`, `Pagination`, `Tooltip`
6
6
  **Classification:** DEPENDENCY
7
7
  **Breaking:** Yes (peer dependencies change; requires Tailwind 4 — see below)
8
+ **Formerly named:** `2026-08-02-nextui-to-heroui.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Dependencies
10
11
 
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui` — `Input` with `type="password"`.
6
6
  **Classification:** IMPROVEMENT (security / UX)
7
7
  **Breaking:** Behavioural only — the reveal changed from a click-toggle to press-and-hold. No API/prop
8
+ **Formerly named:** `2026-08-04-password-reveal-press-and-hold.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
  change; adoption is automatic.
9
10
  **Ticket:** CTAP-1128
10
11
 
@@ -6,6 +6,7 @@
6
6
  **Classification:** IMPROVEMENT (new capability)
7
7
  **Breaking:** No — additive exports.
8
8
  **Consumers:** the OTP resend timer — [wire it everywhere](../../../../../../apps/frontend/docs/migrations/2026/08/2026-08-04-otp-resend-timer.md) ·
9
+ **Formerly named:** `2026-08-04-resend-code-control.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
9
10
  GraphQL contract — [resend mutations](../../../../../../libs/mezzio-modules/user/docs/migrations/2026/08/2026-08-04-otp-resend-mutations.md)
10
11
 
11
12
  ## Summary
@@ -7,6 +7,7 @@
7
7
  **Requires:** `@clicktap/ui` at the release bundling CTAP-1125. Next consumers additionally need `next >= 14` installed — it is now an **optional peer**, so your package manager will not add it for you.
8
8
  **Classification:** IMPROVEMENT
9
9
  **Breaking:** Yes, for Next consumers — one import path per call site. See "If you are a Next app" below.
10
+ **Formerly named:** `2026-08-06-clicktap-ui-image-next-subpath.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
10
11
 
11
12
  ## What changed and why
12
13
 
@@ -5,7 +5,8 @@
5
5
  **Affects:** `@clicktap/ui` — `Button`, `ButtonLoadingContent`, `Loader/CircularEasing`, `Loader/Pulse`
6
6
  **Breaking:** No API change. **One requirement to be aware of** — see below.
7
7
  **Requires:** `@import '@clicktap/ui/theme.css'` in your CSS entry
8
- ([tokens guide](./2026-08-06-clicktap-ui-semantic-tokens.md))
8
+ **Formerly named:** `2026-08-06-clicktap-ui-loaders-drop-framer-motion.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
9
+ ([tokens guide](./ui-2026-08-06-clicktap-ui-semantic-tokens.md))
9
10
  **Classification:** IMPROVEMENT
10
11
 
11
12
  ## What changed
@@ -5,6 +5,7 @@
5
5
  **Affects:** `@clicktap/ui`, every app that renders its components
6
6
  **Breaking:** **Yes — one required import.** Components render *unstyled* without it.
7
7
  **Requires:** Tailwind v4 (`@import 'tailwindcss'` in your CSS entry). See
8
+ **Formerly named:** `2026-08-06-clicktap-ui-semantic-tokens.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
  [the v4 upgrade guide](../../../../../../apps/frontend/docs/migrations/2026/07/2026-07-31-tailwind-3-to-4.md).
9
10
  **Classification:** COMPATIBILITY
10
11
 
@@ -5,6 +5,7 @@
5
5
  **Requires:** `@clicktap/ui` at the first release after 0.42.0
6
6
  **Classification:** COMPATIBILITY
7
7
  **Breaking:** No for minimal consumers; action needed only if you use the form or GraphQL-aware components
8
+ **Formerly named:** `2026-08-07-ui-peer-contract-form-graphql-optional-peers.md` — renamed 2026-08-10 (CTAP-1214) for global filename uniqueness; library guides carry their package slug so they can never collide with an app-level guide in a consumer's aggregated working set. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
8
9
 
9
10
  ## Why this exists
10
11
 
@@ -8,27 +8,27 @@ For migrations affecting the frontend app, see [frontend migrations](../../../..
8
8
 
9
9
  | Date | Migration | Breaking | Dependencies |
10
10
  |------|-----------|----------|--------------|
11
- | 2026-01-14 | [External link detection + `LinkProvider`](./2026/01/2026-01-14-external-link-detection.md) | No | *None* |
12
- | 2026-01-14 | [`useRoute` hook + `RouteProvider`](./2026/01/2026-01-14-use-route-hook.md) | No | *None* |
13
- | 2026-01-15 | [`Input` `disableSkeleton` prop](./2026/01/2026-01-15-input-disable-skeleton.md) | No | *None* |
11
+ | 2026-01-14 | [External link detection + `LinkProvider`](./2026/01/ui-2026-01-14-external-link-detection.md) | No | *None* |
12
+ | 2026-01-14 | [`useRoute` hook + `RouteProvider`](./2026/01/ui-2026-01-14-use-route-hook.md) | No | *None* |
13
+ | 2026-01-15 | [`Input` `disableSkeleton` prop](./2026/01/ui-2026-01-15-input-disable-skeleton.md) | No | *None* |
14
14
  | 2026-02-16 | [Environment utilities — `@clicktap/ui/utils/env`](./2026/02/ui-2026-02-16-env-utils-from-clicktap-ui.md) | No | *None* |
15
- | 2026-02-17 | [`Select` `popoverPortalContainer` restored](./2026/02/2026-02-17-select-popover-portal-container-restored.md) | No | *None* |
16
- | 2026-03-24 | [Image: dimmed, hidden, and onReady Props](./2026/03/2026-03-24-image-dimmed-hidden-onready.md) ↔ | No | *None* |
17
- | 2026-03-24 | [ModalOverlay: fix dismiss on backdrop click](./2026/03/2026-03-24-modal-overlay-backdrop-dismiss.md) | No | *None* |
18
- | 2026-04-17 | [`Select`/`AddressInput` `onChange` widened to `Key \| T`](./2026/04/2026-04-17-select-address-input-onchange-key-or-item.md) | Yes | *None* |
15
+ | 2026-02-17 | [`Select` `popoverPortalContainer` restored](./2026/02/ui-2026-02-17-select-popover-portal-container-restored.md) | No | *None* |
16
+ | 2026-03-24 | [Image: dimmed, hidden, and onReady Props](./2026/03/ui-2026-03-24-image-dimmed-hidden-onready.md) ↔ | No | *None* |
17
+ | 2026-03-24 | [ModalOverlay: fix dismiss on backdrop click](./2026/03/ui-2026-03-24-modal-overlay-backdrop-dismiss.md) | No | *None* |
18
+ | 2026-04-17 | [`Select`/`AddressInput` `onChange` widened to `Key \| T`](./2026/04/ui-2026-04-17-select-address-input-onchange-key-or-item.md) | Yes | *None* |
19
19
  | 2026-04-24 | [`PLACEHOLDER_IMAGE` Export from `@clicktap/ui/utils/placeholder`](./2026/04/ui-2026-04-24-image-placeholder-frontend-fallback.md) ↔ | No | *None* |
20
20
  | 2026-04-30 | [Top-Down PDP Option Dependency — `@clicktap/ui/utils/variantOptions`](./2026/04/ui-2026-04-30-top-down-pdp-option-dependency.md) ↔ | No | *None* |
21
21
  | 2026-04-30 | [PDP Option Selection — Conservative Prune Helper (`pruneInvalidSelections`)](./2026/04/ui-2026-04-30-prune-invalid-pdp-selections.md) ↔ | No | Top-Down PDP Option Dependency |
22
- | 2026-05-01 | [`buildPdpUrl` Utility — `@clicktap/ui/utils/buildPdpUrl`](./2026/05/2026-05-01-build-pdp-url-util.md) | No | *None* |
23
- | 2026-05-03 | [Auth-aware GraphQL client — `@clicktap/ui/utils/createAuthAwareGraphqlClient`](./2026/05/2026-05-03-auth-aware-graphql-client.md) | No | *None* |
24
- | 2026-05-20 | [framer-motion 11.x idioms — opacity-only for modals, primitives elsewhere, matched keyframe shapes](./2026/05/2026-05-20-framer-motion-11-idioms.md) ↔ | Yes (custom `animationVariants` only) | *None* |
25
- | 2026-05-21 | [`ButtonLoadingContent` helper — right-side spinner for all submit buttons](./2026/05/2026-05-21-button-loading-content.md) ↔ | No | *None* |
26
- | 2026-05-21 | [`PasswordCheck` `requirements` variant hides until the visitor types](./2026/05/2026-05-21-password-check-hide-on-empty.md) | No | *None* |
27
- | 2026-05-29 | [`PasswordCheck` — the `requirements` variant (adoption guide for forks)](./2026/05/2026-05-29-password-check-requirements-variant.md) | No | PasswordCheck hide-on-empty |
28
- | 2026-06-17 | [Select standardization — one `<Select searchable>`, `DropdownSelect` removed](./2026/06/2026-06-17-select-standardization.md) ↔ | Yes | *None* |
29
- | 2026-06-18 | [Select (searchable): fix "setValue is not a function" crash on browser autofill](./2026/06/2026-06-18-select-hiddenselect-setvalue-crash.md) | No | Select standardization |
30
- | 2026-08-04 | [`ResendCode` control + `useCooldown` hook](./2026/08/2026-08-04-resend-code-control.md) ↔ | No | OTP resend timer (CTAP-1114) |
31
- | 2026-08-04 | [Password reveal is press-and-hold, not a toggle](./2026/08/2026-08-04-password-reveal-press-and-hold.md) | Behavioural | *None* (CTAP-1128) |
32
- | 2026-08-06 | [`Image` is framework-free; Next's optimizer moves to `@clicktap/ui/next`](./2026/08/2026-08-06-clicktap-ui-image-next-subpath.md) ↔ | Yes (Next consumers) | *None* |
22
+ | 2026-05-01 | [`buildPdpUrl` Utility — `@clicktap/ui/utils/buildPdpUrl`](./2026/05/ui-2026-05-01-build-pdp-url-util.md) | No | *None* |
23
+ | 2026-05-03 | [Auth-aware GraphQL client — `@clicktap/ui/utils/createAuthAwareGraphqlClient`](./2026/05/ui-2026-05-03-auth-aware-graphql-client.md) | No | *None* |
24
+ | 2026-05-20 | [framer-motion 11.x idioms — opacity-only for modals, primitives elsewhere, matched keyframe shapes](./2026/05/ui-2026-05-20-framer-motion-11-idioms.md) ↔ | Yes (custom `animationVariants` only) | *None* |
25
+ | 2026-05-21 | [`ButtonLoadingContent` helper — right-side spinner for all submit buttons](./2026/05/ui-2026-05-21-button-loading-content.md) ↔ | No | *None* |
26
+ | 2026-05-21 | [`PasswordCheck` `requirements` variant hides until the visitor types](./2026/05/ui-2026-05-21-password-check-hide-on-empty.md) | No | *None* |
27
+ | 2026-05-29 | [`PasswordCheck` — the `requirements` variant (adoption guide for forks)](./2026/05/ui-2026-05-29-password-check-requirements-variant.md) | No | PasswordCheck hide-on-empty |
28
+ | 2026-06-17 | [Select standardization — one `<Select searchable>`, `DropdownSelect` removed](./2026/06/ui-2026-06-17-select-standardization.md) ↔ | Yes | *None* |
29
+ | 2026-06-18 | [Select (searchable): fix "setValue is not a function" crash on browser autofill](./2026/06/ui-2026-06-18-select-hiddenselect-setvalue-crash.md) | No | Select standardization |
30
+ | 2026-08-04 | [`ResendCode` control + `useCooldown` hook](./2026/08/ui-2026-08-04-resend-code-control.md) ↔ | No | OTP resend timer (CTAP-1114) |
31
+ | 2026-08-04 | [Password reveal is press-and-hold, not a toggle](./2026/08/ui-2026-08-04-password-reveal-press-and-hold.md) | Behavioural | *None* (CTAP-1128) |
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
 
34
34
  ↔ = cross-app migration (has counterpart in frontend app)
@@ -1,6 +1,6 @@
1
1
  [
2
2
  {
3
- "path": "2026/08/2026-08-07-ui-peer-contract-form-graphql-optional-peers.md",
3
+ "path": "2026/08/ui-2026-08-07-ui-peer-contract-form-graphql-optional-peers.md",
4
4
  "module": "libs/frontend-modules/ui",
5
5
  "package": "@clicktap/ui",
6
6
  "date": "2026-08-07",
@@ -10,7 +10,7 @@
10
10
  "affects": ""
11
11
  },
12
12
  {
13
- "path": "2026/08/2026-08-06-clicktap-ui-semantic-tokens.md",
13
+ "path": "2026/08/ui-2026-08-06-clicktap-ui-semantic-tokens.md",
14
14
  "module": "libs/frontend-modules/ui",
15
15
  "package": "@clicktap/ui",
16
16
  "date": "2026-08-06",
@@ -20,7 +20,7 @@
20
20
  "affects": "`@clicktap/ui`, every app that renders its components"
21
21
  },
22
22
  {
23
- "path": "2026/08/2026-08-06-clicktap-ui-loaders-drop-framer-motion.md",
23
+ "path": "2026/08/ui-2026-08-06-clicktap-ui-loaders-drop-framer-motion.md",
24
24
  "module": "libs/frontend-modules/ui",
25
25
  "package": "@clicktap/ui",
26
26
  "date": "2026-08-06",
@@ -30,7 +30,7 @@
30
30
  "affects": "`@clicktap/ui` — `Button`, `ButtonLoadingContent`, `Loader/CircularEasing`, `Loader/Pulse`"
31
31
  },
32
32
  {
33
- "path": "2026/08/2026-08-06-clicktap-ui-image-next-subpath.md",
33
+ "path": "2026/08/ui-2026-08-06-clicktap-ui-image-next-subpath.md",
34
34
  "module": "libs/frontend-modules/ui",
35
35
  "package": "@clicktap/ui",
36
36
  "date": "2026-08-06",
@@ -40,7 +40,7 @@
40
40
  "affects": "Any consumer importing `@clicktap/ui/components/Image` or `@clicktap/ui/components/UploadImage`. Consumer counterpart: [`apps/frontend/docs/migrations/2026/08/2026-08-06-image-from-clicktap-ui-next.md`](../../../../../../apps/frontend/docs/migrations/2026/08/2026-08-06-image-from-clicktap-ui-next.md)"
41
41
  },
42
42
  {
43
- "path": "2026/08/2026-08-04-resend-code-control.md",
43
+ "path": "2026/08/ui-2026-08-04-resend-code-control.md",
44
44
  "module": "libs/frontend-modules/ui",
45
45
  "package": "@clicktap/ui",
46
46
  "date": "2026-08-04",
@@ -50,7 +50,7 @@
50
50
  "affects": "`@clicktap/ui` — new `components/ResendCode` and `hooks/useCooldown` exports."
51
51
  },
52
52
  {
53
- "path": "2026/08/2026-08-04-password-reveal-press-and-hold.md",
53
+ "path": "2026/08/ui-2026-08-04-password-reveal-press-and-hold.md",
54
54
  "module": "libs/frontend-modules/ui",
55
55
  "package": "@clicktap/ui",
56
56
  "date": "2026-08-04",
@@ -60,7 +60,7 @@
60
60
  "affects": "`@clicktap/ui` — `Input` with `type=\"password\"`."
61
61
  },
62
62
  {
63
- "path": "2026/08/2026-08-02-nextui-to-heroui.md",
63
+ "path": "2026/08/ui-2026-08-02-nextui-to-heroui.md",
64
64
  "module": "libs/frontend-modules/ui",
65
65
  "package": "@clicktap/ui",
66
66
  "date": "2026-08-02",
@@ -70,7 +70,7 @@
70
70
  "affects": "`@clicktap/ui` peer dependencies — `Accordion`, `Badge`, `Pagination`, `Tooltip`"
71
71
  },
72
72
  {
73
- "path": "2026/07/2026-07-31-ui-exports-bundler-resolution.md",
73
+ "path": "2026/07/ui-2026-07-31-ui-exports-bundler-resolution.md",
74
74
  "module": "libs/frontend-modules/ui",
75
75
  "package": "@clicktap/ui",
76
76
  "date": "2026-07-31",
@@ -80,7 +80,7 @@
80
80
  "affects": ""
81
81
  },
82
82
  {
83
- "path": "2026/06/2026-06-18-select-hiddenselect-setvalue-crash.md",
83
+ "path": "2026/06/ui-2026-06-18-select-hiddenselect-setvalue-crash.md",
84
84
  "module": "libs/frontend-modules/ui",
85
85
  "package": "@clicktap/ui",
86
86
  "date": "2026-06-18",
@@ -90,7 +90,7 @@
90
90
  "affects": "`@clicktap/ui` `Select` — the **searchable** (ComboBox) variant (`ComboBoxSelect`)"
91
91
  },
92
92
  {
93
- "path": "2026/06/2026-06-17-select-standardization.md",
93
+ "path": "2026/06/ui-2026-06-17-select-standardization.md",
94
94
  "module": "libs/frontend-modules/ui",
95
95
  "package": "@clicktap/ui",
96
96
  "date": "2026-06-17",
@@ -100,7 +100,7 @@
100
100
  "affects": "Any app consuming `@clicktap/ui`'s `Select` / `DropdownSelect` (Crispi, FFL, and any fork that renders pickers, sort controls, country/region selects, or configurable-product options)."
101
101
  },
102
102
  {
103
- "path": "2026/05/2026-05-29-password-check-requirements-variant.md",
103
+ "path": "2026/05/ui-2026-05-29-password-check-requirements-variant.md",
104
104
  "module": "libs/frontend-modules/ui",
105
105
  "package": "@clicktap/ui",
106
106
  "date": "2026-05-29",
@@ -110,7 +110,7 @@
110
110
  "affects": "`libs/ui/src/components/PasswordCheck/PasswordCheck.tsx`, `libs/ui/src/components/PasswordCheck/PasswordCheck.types.ts`"
111
111
  },
112
112
  {
113
- "path": "2026/05/2026-05-21-password-check-hide-on-empty.md",
113
+ "path": "2026/05/ui-2026-05-21-password-check-hide-on-empty.md",
114
114
  "module": "libs/frontend-modules/ui",
115
115
  "package": "@clicktap/ui",
116
116
  "date": "2026-05-21",
@@ -120,7 +120,7 @@
120
120
  "affects": "`libs/ui/src/components/PasswordCheck/PasswordCheck.tsx`"
121
121
  },
122
122
  {
123
- "path": "2026/05/2026-05-21-button-loading-content.md",
123
+ "path": "2026/05/ui-2026-05-21-button-loading-content.md",
124
124
  "module": "libs/frontend-modules/ui",
125
125
  "package": "@clicktap/ui",
126
126
  "date": "2026-05-21",
@@ -130,7 +130,7 @@
130
130
  "affects": "`@clicktap/ui/components/Button` (new `ButtonLoadingContent` export) and every submit-style button in the frontend app."
131
131
  },
132
132
  {
133
- "path": "2026/05/2026-05-20-framer-motion-11-idioms.md",
133
+ "path": "2026/05/ui-2026-05-20-framer-motion-11-idioms.md",
134
134
  "module": "libs/frontend-modules/ui",
135
135
  "package": "@clicktap/ui",
136
136
  "date": "2026-05-20",
@@ -140,7 +140,7 @@
140
140
  "affects": "`@clicktap/ui/components/Dialog`, `@clicktap/ui/components/ModalOverlay`, `@clicktap/ui/components/Badge`, `@clicktap/ui/components/Loader/CircularEasing`, `@clicktap/ui/components/Loader/Pulse`, and any consumer-side `motion.*` usage on framer-motion 11.x."
141
141
  },
142
142
  {
143
- "path": "2026/05/2026-05-03-auth-aware-graphql-client.md",
143
+ "path": "2026/05/ui-2026-05-03-auth-aware-graphql-client.md",
144
144
  "module": "libs/frontend-modules/ui",
145
145
  "package": "@clicktap/ui",
146
146
  "date": "2026-05-03",
@@ -150,7 +150,7 @@
150
150
  "affects": "`@clicktap/ui/utils/createAuthAwareGraphqlClient` — new export"
151
151
  },
152
152
  {
153
- "path": "2026/05/2026-05-01-build-pdp-url-util.md",
153
+ "path": "2026/05/ui-2026-05-01-build-pdp-url-util.md",
154
154
  "module": "libs/frontend-modules/ui",
155
155
  "package": "@clicktap/ui",
156
156
  "date": "2026-05-01",
@@ -190,7 +190,7 @@
190
190
  "affects": "`@clicktap/ui` consumers that render product/category images"
191
191
  },
192
192
  {
193
- "path": "2026/04/2026-04-17-select-address-input-onchange-key-or-item.md",
193
+ "path": "2026/04/ui-2026-04-17-select-address-input-onchange-key-or-item.md",
194
194
  "module": "libs/frontend-modules/ui",
195
195
  "package": "@clicktap/ui",
196
196
  "date": "2026-04-17",
@@ -200,7 +200,7 @@
200
200
  "affects": "Frontend apps consuming `@clicktap/ui`'s `Select` and components that re-export its types (`AddressInput`, etc.). Any handler typed as `(value: Key) => void` breaks after the update."
201
201
  },
202
202
  {
203
- "path": "2026/03/2026-03-24-modal-overlay-backdrop-dismiss.md",
203
+ "path": "2026/03/ui-2026-03-24-modal-overlay-backdrop-dismiss.md",
204
204
  "module": "libs/frontend-modules/ui",
205
205
  "package": "@clicktap/ui",
206
206
  "date": "2026-03-24",
@@ -210,7 +210,7 @@
210
210
  "affects": "`@clicktap/ui` — `ModalOverlay` component"
211
211
  },
212
212
  {
213
- "path": "2026/03/2026-03-24-image-dimmed-hidden-onready.md",
213
+ "path": "2026/03/ui-2026-03-24-image-dimmed-hidden-onready.md",
214
214
  "module": "libs/frontend-modules/ui",
215
215
  "package": "@clicktap/ui",
216
216
  "date": "2026-03-24",
@@ -220,7 +220,7 @@
220
220
  "affects": "`@clicktap/ui` — `Image` component"
221
221
  },
222
222
  {
223
- "path": "2026/02/2026-02-17-select-popover-portal-container-restored.md",
223
+ "path": "2026/02/ui-2026-02-17-select-popover-portal-container-restored.md",
224
224
  "module": "libs/frontend-modules/ui",
225
225
  "package": "@clicktap/ui",
226
226
  "date": "2026-02-17",
@@ -240,7 +240,7 @@
240
240
  "affects": "All files importing `isDevelopment` / `isProduction` from local `utils/env`"
241
241
  },
242
242
  {
243
- "path": "2026/01/2026-01-15-input-disable-skeleton.md",
243
+ "path": "2026/01/ui-2026-01-15-input-disable-skeleton.md",
244
244
  "module": "libs/frontend-modules/ui",
245
245
  "package": "@clicktap/ui",
246
246
  "date": "2026-01-15",
@@ -250,7 +250,7 @@
250
250
  "affects": "`@clicktap/ui`, `apps/frontend`"
251
251
  },
252
252
  {
253
- "path": "2026/01/2026-01-14-use-route-hook.md",
253
+ "path": "2026/01/ui-2026-01-14-use-route-hook.md",
254
254
  "module": "libs/frontend-modules/ui",
255
255
  "package": "@clicktap/ui",
256
256
  "date": "2026-01-14",
@@ -260,7 +260,7 @@
260
260
  "affects": "`@clicktap/ui`, `apps/frontend`"
261
261
  },
262
262
  {
263
- "path": "2026/01/2026-01-14-external-link-detection.md",
263
+ "path": "2026/01/ui-2026-01-14-external-link-detection.md",
264
264
  "module": "libs/frontend-modules/ui",
265
265
  "package": "@clicktap/ui",
266
266
  "date": "2026-01-14",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clicktap/ui",
3
- "version": "0.43.3",
3
+ "version": "0.43.5",
4
4
  "private": false,
5
5
  "author": "Clicktap",
6
6
  "description": "A library of React UI components and low-level hooks.",