@clicktap/ui 0.43.4 → 0.43.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/components/Input/Input.js +1 -1
  2. package/docs/migrations/2026/01/{2026-01-14-external-link-detection.md → ui-2026-01-14-external-link-detection.md} +1 -0
  3. package/docs/migrations/2026/01/{2026-01-14-use-route-hook.md → ui-2026-01-14-use-route-hook.md} +1 -0
  4. package/docs/migrations/2026/01/{2026-01-15-input-disable-skeleton.md → ui-2026-01-15-input-disable-skeleton.md} +1 -0
  5. package/docs/migrations/2026/02/ui-2026-02-16-env-utils-from-clicktap-ui.md +1 -1
  6. 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
  7. package/docs/migrations/2026/03/{2026-03-24-image-dimmed-hidden-onready.md → ui-2026-03-24-image-dimmed-hidden-onready.md} +1 -0
  8. package/docs/migrations/2026/03/{2026-03-24-modal-overlay-backdrop-dismiss.md → ui-2026-03-24-modal-overlay-backdrop-dismiss.md} +1 -0
  9. 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
  10. package/docs/migrations/2026/05/{2026-05-01-build-pdp-url-util.md → ui-2026-05-01-build-pdp-url-util.md} +1 -0
  11. package/docs/migrations/2026/05/{2026-05-03-auth-aware-graphql-client.md → ui-2026-05-03-auth-aware-graphql-client.md} +1 -0
  12. package/docs/migrations/2026/05/{2026-05-20-framer-motion-11-idioms.md → ui-2026-05-20-framer-motion-11-idioms.md} +1 -0
  13. package/docs/migrations/2026/05/{2026-05-21-button-loading-content.md → ui-2026-05-21-button-loading-content.md} +1 -0
  14. 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
  15. package/docs/migrations/2026/05/{2026-05-29-password-check-requirements-variant.md → ui-2026-05-29-password-check-requirements-variant.md} +3 -2
  16. package/docs/migrations/2026/06/{2026-06-17-select-standardization.md → ui-2026-06-17-select-standardization.md} +2 -1
  17. package/docs/migrations/2026/06/{2026-06-18-select-hiddenselect-setvalue-crash.md → ui-2026-06-18-select-hiddenselect-setvalue-crash.md} +1 -0
  18. package/docs/migrations/2026/07/{2026-07-31-ui-exports-bundler-resolution.md → ui-2026-07-31-ui-exports-bundler-resolution.md} +1 -0
  19. package/docs/migrations/2026/08/{2026-08-02-nextui-to-heroui.md → ui-2026-08-02-nextui-to-heroui.md} +1 -0
  20. package/docs/migrations/2026/08/{2026-08-04-password-reveal-press-and-hold.md → ui-2026-08-04-password-reveal-press-and-hold.md} +3 -0
  21. package/docs/migrations/2026/08/{2026-08-04-resend-code-control.md → ui-2026-08-04-resend-code-control.md} +1 -0
  22. 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
  23. 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
  24. package/docs/migrations/2026/08/{2026-08-06-clicktap-ui-semantic-tokens.md → ui-2026-08-06-clicktap-ui-semantic-tokens.md} +1 -0
  25. 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
  26. package/docs/migrations/2026/08/ui-2026-08-11-password-reveal-toggle.md +75 -0
  27. package/docs/migrations/README.md +19 -18
  28. package/docs/migrations/index.json +33 -23
  29. package/package.json +1 -1
@@ -1 +1 @@
1
- "use client";import{jsxs as s,jsx as e}from"react/jsx-runtime";import{Label as p,TextField as v,Input as k,Text as L,FieldError as C}from"react-aria-components";import{forwardRef as I,useState as N}from"react";import{cn as r}from"../../utils/cn.js";import{Skeleton as P}from"../Skeleton/Skeleton.js";import M from"../../hooks/useIsClient.js";function S({className:t}){return s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:t,children:[e("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.64 0 8.577 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.64 0-8.577-3.007-9.963-7.178Z"}),e("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}function j({className:t}){return e("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:t,children:e("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3.98 8.223A10.477 10.477 0 0 0 1.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.451 10.451 0 0 1 12 4.5c4.756 0 8.773 3.162 10.065 7.498a10.522 10.522 0 0 1-4.293 5.774M6.228 6.228 3 3m3.228 3.228 3.65 3.65m7.894 7.894L21 21m-3.228-3.228-3.65-3.65m0 0a3 3 0 1 0-4.243-4.243m4.242 4.242L9.88 9.88"})})}function y({className:t}){return e(P,{className:r("w-full h-10 rounded-md z-20 relative",t)})}const W=I(({inputProps:t,label:l,description:d,errorMessage:x,placeholder:m,className:u,classNames:o,disableSkeleton:h,type:c,...b},w)=>{const g=M(),i=c==="password",[f,n]=N(!1);return!g&&!h?s("div",{className:r("flex flex-col w-full text-fg",u),children:[l?e(p,{className:r("flex text-fg-muted text-xs",o?.label),children:l}):null,e(y,{className:o?.skeleton})]}):s(v,{className:r("flex flex-col w-full text-fg",u),type:i?f?"text":"password":c,...b,children:[e(p,{className:r("flex text-fg-muted text-xs",o?.label),children:l}),s("div",{className:"relative",children:[e(k,{ref:w,placeholder:m,className:r("border-solid border border-border rounded-md","text-sm text-fg placeholder-fg-subtle","h-10 px-2 py-0 m-0 w-full","bg-white","transition-all duration-200 ease-in-out","hover:border-border-emphasis","focus:outline-2 focus:outline focus:outline-border-subtle focus:border-border-emphasis","disabled:border-border-subtle disabled:bg-surface-subtle","invalid:border-danger-soft invalid:bg-danger-surface invalid:text-danger","invalid:hover:border-danger invalid:focus:border-danger invalid:focus:outline-danger-ring",i&&"pr-10",o?.input),...t}),i&&e("button",{type:"button",className:"absolute right-2 top-1/2 -translate-y-1/2 p-1 text-fg-subtle hover:text-slate-600 bg-transparent border-none cursor-pointer select-none",onPointerDown:a=>{a.preventDefault(),n(!0)},onPointerUp:()=>n(!1),onPointerLeave:()=>n(!1),onPointerCancel:()=>n(!1),onContextMenu:a=>a.preventDefault(),"aria-label":"Show password while pressed",tabIndex:-1,children:f?e(j,{className:"w-5 h-5"}):e(S,{className:"w-5 h-5"})})]}),d&&e(L,{className:r("flex text-fg-muted text-sm",o?.description),slot:"description",children:d}),e(C,{className:r("flex text-danger-soft text-sm",o?.error),children:x})]})});export{W as Input,W as default};
1
+ "use client";import{jsxs as s,jsx as e}from"react/jsx-runtime";import{Label as f,TextField as v,Input as k,Text as L,FieldError as C}from"react-aria-components";import{forwardRef as I,useState as N}from"react";import{cn as r}from"../../utils/cn.js";import{Skeleton as M}from"../Skeleton/Skeleton.js";import S from"../../hooks/useIsClient.js";function j({className:t}){return s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:t,children:[e("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.64 0 8.577 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.64 0-8.577-3.007-9.963-7.178Z"}),e("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z"})]})}function y({className:t}){return e("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:1.5,stroke:"currentColor",className:t,children:e("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3.98 8.223A10.477 10.477 0 0 0 1.934 12C3.226 16.338 7.244 19.5 12 19.5c.993 0 1.953-.138 2.863-.395M6.228 6.228A10.451 10.451 0 0 1 12 4.5c4.756 0 8.773 3.162 10.065 7.498a10.522 10.522 0 0 1-4.293 5.774M6.228 6.228 3 3m3.228 3.228 3.65 3.65m7.894 7.894L21 21m-3.228-3.228-3.65-3.65m0 0a3 3 0 1 0-4.243-4.243m4.242 4.242L9.88 9.88"})})}function E({className:t}){return e(M,{className:r("w-full h-10 rounded-md z-20 relative",t)})}const W=I(({inputProps:t,label:l,description:a,errorMessage:p,placeholder:m,className:u,classNames:o,disableSkeleton:x,type:c,...h},b)=>{const w=S(),i=c==="password",[n,g]=N(!1);return!w&&!x?s("div",{className:r("flex flex-col w-full text-fg",u),children:[l?e(f,{className:r("flex text-fg-muted text-xs",o?.label),children:l}):null,e(E,{className:o?.skeleton})]}):s(v,{className:r("flex flex-col w-full text-fg",u),type:i?n?"text":"password":c,...h,children:[e(f,{className:r("flex text-fg-muted text-xs",o?.label),children:l}),s("div",{className:"relative",children:[e(k,{ref:b,placeholder:m,className:r("border-solid border border-border rounded-md","text-sm text-fg placeholder-fg-subtle","h-10 px-2 py-0 m-0 w-full","bg-white","transition-all duration-200 ease-in-out","hover:border-border-emphasis","focus:outline-2 focus:outline focus:outline-border-subtle focus:border-border-emphasis","disabled:border-border-subtle disabled:bg-surface-subtle","invalid:border-danger-soft invalid:bg-danger-surface invalid:text-danger","invalid:hover:border-danger invalid:focus:border-danger invalid:focus:outline-danger-ring",i&&"pr-10",o?.input),...t}),i&&e("button",{type:"button",className:"absolute right-2 top-1/2 -translate-y-1/2 p-1 text-fg-subtle hover:text-slate-600 bg-transparent border-none cursor-pointer select-none",onMouseDown:d=>d.preventDefault(),onClick:()=>g(d=>!d),"aria-label":n?"Hide password":"Show password","aria-pressed":n,children:n?e(y,{className:"w-5 h-5"}):e(j,{className:"w-5 h-5"})})]}),a&&e(L,{className:r("flex text-fg-muted text-sm",o?.description),slot:"description",children:a}),e(C,{className:r("flex text-danger-soft text-sm",o?.error),children:p})]})});export{W as Input,W as default};
@@ -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
@@ -56,10 +56,10 @@ import { isDevelopment } from '../../../../../utils/env';
56
56
  ```
57
57
 
58
58
  **After:**
59
- **Formerly named:** `2026-02-16-env-utils-from-clicktap-ui.md` — renamed 2026-08-07 (CTAP-1143) for global filename uniqueness; an identically-named guide exists in another tree and mirrored folders overwrote each other. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
60
59
  ```ts
61
60
  import { isDevelopment } from '@clicktap/ui/utils/env';
62
61
  ```
62
+ **Formerly named:** `2026-02-16-env-utils-from-clicktap-ui.md` — renamed 2026-08-07 (CTAP-1143) for global filename uniqueness; an identically-named guide exists in another tree and mirrored folders overwrote each other. **If you carry a `-applied` sibling under the old name, rename it to match — do NOT re-apply.**
63
63
 
64
64
  ### Files changed
65
65
 
@@ -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
 
@@ -7,6 +7,7 @@
7
7
  consumers are unaffected (that resolver ignores `exports`); this only *adds* working resolution under
8
8
  `bundler` / `node16` / `nodenext`.
9
9
  **Classification:** BUGFIX (packaging) — unblocks `moduleResolution: bundler`, and with it TypeScript 7
10
+ **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.**
10
11
 
11
12
  ## What was wrong
12
13
 
@@ -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
 
@@ -7,6 +7,9 @@
7
7
  **Breaking:** Behavioural only — the reveal changed from a click-toggle to press-and-hold. No API/prop
8
8
  change; adoption is automatic.
9
9
  **Ticket:** CTAP-1128
10
+ **Status:** ⚠️ **Superseded — do not adopt.** (CTAP-1240)
11
+ **Superseded by:** [`ui-2026-08-11-password-reveal-toggle.md`](./ui-2026-08-11-password-reveal-toggle.md) — press-and-hold made a revealed password impossible to copy into a password manager, so the reveal went back to a click toggle. If you have not applied this guide yet, skip it and apply that one. If you have, that guide tells you how to reverse it.
12
+ **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.**
10
13
 
11
14
  ## Summary
12
15
 
@@ -7,6 +7,7 @@
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
9
  GraphQL contract — [resend mutations](../../../../../../libs/mezzio-modules/user/docs/migrations/2026/08/2026-08-04-otp-resend-mutations.md)
10
+ **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.**
10
11
 
11
12
  ## Summary
12
13
 
@@ -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,8 +5,9 @@
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
+ ([tokens guide](./ui-2026-08-06-clicktap-ui-semantic-tokens.md))
9
9
  **Classification:** IMPROVEMENT
10
+ **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.**
10
11
 
11
12
  ## What changed
12
13
 
@@ -7,6 +7,7 @@
7
7
  **Requires:** Tailwind v4 (`@import 'tailwindcss'` in your CSS entry). See
8
8
  [the v4 upgrade guide](../../../../../../apps/frontend/docs/migrations/2026/07/2026-07-31-tailwind-3-to-4.md).
9
9
  **Classification:** COMPATIBILITY
10
+ **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.**
10
11
 
11
12
  ## Do this
12
13
 
@@ -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
 
@@ -0,0 +1,75 @@
1
+ # Password reveal is a toggle again, not press-and-hold
2
+
3
+ **Date:** 2026-08-11
4
+ **Package:** `@clicktap/ui`
5
+ **Affects:** `@clicktap/ui` — `Input` with `type="password"`.
6
+ **Classification:** IMPROVEMENT (UX / accessibility)
7
+ **Breaking:** Behavioural only — the reveal changed from press-and-hold back to a click toggle, and the
8
+ control entered the tab order. No API/prop change; adoption is automatic.
9
+ **Ticket:** CTAP-1240
10
+ **Supersedes:** [`ui-2026-08-04-password-reveal-press-and-hold.md`](./ui-2026-08-04-password-reveal-press-and-hold.md) (CTAP-1128).
11
+ If you have not applied that guide yet, **skip it** and apply this one instead — the end state is the
12
+ same either way.
13
+
14
+ ## Summary
15
+
16
+ The password-field reveal (the eye button in `Input`) is a **toggle** again: one click shows the value
17
+ and it stays shown until you click again. CTAP-1128 had made it press-and-hold — visible only while the
18
+ control was physically held — to shrink the shoulder-surfing window. That traded away more than it
19
+ bought:
20
+
21
+ - **You cannot copy a password you cannot release.** Revealing a password so you can select it and
22
+ paste it into a password manager is a routine thing to do, and press-and-hold makes it impossible.
23
+ - **You cannot watch yourself type.** Holding the button with one hand while typing a long password
24
+ with the other is not a real workflow.
25
+ - **A toggle is the control users already know.** Edge's own built-in password reveal is a toggle, as
26
+ are the Chrome and Safari password managers and effectively every major sign-in form.
27
+
28
+ The reveal is still user-initiated and still resets to hidden on every mount, so a revealed password
29
+ never survives a page load.
30
+
31
+ ## What changed
32
+
33
+ The reveal button swapped its pointer press-and-hold handlers back for a click toggle, and picked up
34
+ proper toggle-button semantics:
35
+
36
+ ```tsx
37
+ // before (CTAP-1128) // after (CTAP-1240)
38
+ onPointerDown={(e) => { onMouseDown={(e) => e.preventDefault()}
39
+ e.preventDefault(); onClick={() => setShowPassword((shown) => !shown)}
40
+ setShowPassword(true); aria-label={showPassword ? 'Hide password' : 'Show password'}
41
+ }} aria-pressed={showPassword}
42
+ onPointerUp={() => setShowPassword(false)}
43
+ onPointerLeave={() => setShowPassword(false)}
44
+ onPointerCancel={() => setShowPassword(false)}
45
+ onContextMenu={(e) => e.preventDefault()}
46
+ aria-label="Show password while pressed"
47
+ tabIndex={-1}
48
+ ```
49
+
50
+ - **`preventDefault()` on mousedown** keeps the caret in the input when you click the eye, so you can
51
+ toggle visibility mid-typing without losing your place.
52
+ - **`tabIndex={-1}` is gone** — the button is now in the tab order and operable with Enter/Space. This
53
+ is the one behavioural change a consumer might notice beyond the reveal itself: **a password field
54
+ now has one extra tab stop between it and the next control.** If you have a test that tabs through a
55
+ sign-in form by counting stops, update it.
56
+ - **`aria-pressed`** exposes the on/off state to assistive tech, and the label swaps between
57
+ `Show password` and `Hide password` instead of the static "Show password while pressed".
58
+ - Press-and-hold was **not** kept as an opt-in mode — there is one reveal behaviour, no new prop.
59
+
60
+ Shipped in `@clicktap/ui` **0.43.6**.
61
+
62
+ ## Action required (consumer)
63
+
64
+ - **Using `@clicktap/ui` `Input`:** nothing — the behaviour ships with the component. Re-check any
65
+ keyboard-navigation test that asserts an exact tab order around a password field.
66
+ - **Rolled your own password reveal:** swap the pointer handlers back for the `onClick` toggle above,
67
+ and add `aria-pressed` + the state-dependent `aria-label` while you are in there. The reference
68
+ frontend also updated its one bespoke reveal (`UpdateEmailForm`) to match.
69
+ - **Applied the CTAP-1128 guide:** this reverses it. Nothing to un-install beyond the handler swap.
70
+
71
+ ## Verify
72
+
73
+ Click the eye control → the characters show and **stay** shown. Select the revealed text and copy it —
74
+ it lands on the clipboard. Click again → hidden. Tab to the control and press Enter → it toggles.
75
+ Reload the page → the field is hidden again.
@@ -8,27 +8,28 @@ 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) ⚠️ superseded | 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
+ | 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 |
33
34
 
34
35
  ↔ = cross-app migration (has counterpart in frontend app)
@@ -1,6 +1,16 @@
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-11-password-reveal-toggle.md",
4
+ "module": "libs/frontend-modules/ui",
5
+ "package": "@clicktap/ui",
6
+ "date": "2026-08-11",
7
+ "title": "Password reveal is a toggle again, not press-and-hold",
8
+ "classification": "IMPROVEMENT (UX / accessibility)",
9
+ "breaking": "Behavioural only — the reveal changed from press-and-hold back to a click toggle, and the",
10
+ "affects": "`@clicktap/ui` — `Input` with `type=\"password\"`."
11
+ },
12
+ {
13
+ "path": "2026/08/ui-2026-08-07-ui-peer-contract-form-graphql-optional-peers.md",
4
14
  "module": "libs/frontend-modules/ui",
5
15
  "package": "@clicktap/ui",
6
16
  "date": "2026-08-07",
@@ -10,7 +20,7 @@
10
20
  "affects": ""
11
21
  },
12
22
  {
13
- "path": "2026/08/2026-08-06-clicktap-ui-semantic-tokens.md",
23
+ "path": "2026/08/ui-2026-08-06-clicktap-ui-semantic-tokens.md",
14
24
  "module": "libs/frontend-modules/ui",
15
25
  "package": "@clicktap/ui",
16
26
  "date": "2026-08-06",
@@ -20,7 +30,7 @@
20
30
  "affects": "`@clicktap/ui`, every app that renders its components"
21
31
  },
22
32
  {
23
- "path": "2026/08/2026-08-06-clicktap-ui-loaders-drop-framer-motion.md",
33
+ "path": "2026/08/ui-2026-08-06-clicktap-ui-loaders-drop-framer-motion.md",
24
34
  "module": "libs/frontend-modules/ui",
25
35
  "package": "@clicktap/ui",
26
36
  "date": "2026-08-06",
@@ -30,7 +40,7 @@
30
40
  "affects": "`@clicktap/ui` — `Button`, `ButtonLoadingContent`, `Loader/CircularEasing`, `Loader/Pulse`"
31
41
  },
32
42
  {
33
- "path": "2026/08/2026-08-06-clicktap-ui-image-next-subpath.md",
43
+ "path": "2026/08/ui-2026-08-06-clicktap-ui-image-next-subpath.md",
34
44
  "module": "libs/frontend-modules/ui",
35
45
  "package": "@clicktap/ui",
36
46
  "date": "2026-08-06",
@@ -40,7 +50,7 @@
40
50
  "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
51
  },
42
52
  {
43
- "path": "2026/08/2026-08-04-resend-code-control.md",
53
+ "path": "2026/08/ui-2026-08-04-resend-code-control.md",
44
54
  "module": "libs/frontend-modules/ui",
45
55
  "package": "@clicktap/ui",
46
56
  "date": "2026-08-04",
@@ -50,7 +60,7 @@
50
60
  "affects": "`@clicktap/ui` — new `components/ResendCode` and `hooks/useCooldown` exports."
51
61
  },
52
62
  {
53
- "path": "2026/08/2026-08-04-password-reveal-press-and-hold.md",
63
+ "path": "2026/08/ui-2026-08-04-password-reveal-press-and-hold.md",
54
64
  "module": "libs/frontend-modules/ui",
55
65
  "package": "@clicktap/ui",
56
66
  "date": "2026-08-04",
@@ -60,7 +70,7 @@
60
70
  "affects": "`@clicktap/ui` — `Input` with `type=\"password\"`."
61
71
  },
62
72
  {
63
- "path": "2026/08/2026-08-02-nextui-to-heroui.md",
73
+ "path": "2026/08/ui-2026-08-02-nextui-to-heroui.md",
64
74
  "module": "libs/frontend-modules/ui",
65
75
  "package": "@clicktap/ui",
66
76
  "date": "2026-08-02",
@@ -70,7 +80,7 @@
70
80
  "affects": "`@clicktap/ui` peer dependencies — `Accordion`, `Badge`, `Pagination`, `Tooltip`"
71
81
  },
72
82
  {
73
- "path": "2026/07/2026-07-31-ui-exports-bundler-resolution.md",
83
+ "path": "2026/07/ui-2026-07-31-ui-exports-bundler-resolution.md",
74
84
  "module": "libs/frontend-modules/ui",
75
85
  "package": "@clicktap/ui",
76
86
  "date": "2026-07-31",
@@ -80,7 +90,7 @@
80
90
  "affects": ""
81
91
  },
82
92
  {
83
- "path": "2026/06/2026-06-18-select-hiddenselect-setvalue-crash.md",
93
+ "path": "2026/06/ui-2026-06-18-select-hiddenselect-setvalue-crash.md",
84
94
  "module": "libs/frontend-modules/ui",
85
95
  "package": "@clicktap/ui",
86
96
  "date": "2026-06-18",
@@ -90,7 +100,7 @@
90
100
  "affects": "`@clicktap/ui` `Select` — the **searchable** (ComboBox) variant (`ComboBoxSelect`)"
91
101
  },
92
102
  {
93
- "path": "2026/06/2026-06-17-select-standardization.md",
103
+ "path": "2026/06/ui-2026-06-17-select-standardization.md",
94
104
  "module": "libs/frontend-modules/ui",
95
105
  "package": "@clicktap/ui",
96
106
  "date": "2026-06-17",
@@ -100,7 +110,7 @@
100
110
  "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
111
  },
102
112
  {
103
- "path": "2026/05/2026-05-29-password-check-requirements-variant.md",
113
+ "path": "2026/05/ui-2026-05-29-password-check-requirements-variant.md",
104
114
  "module": "libs/frontend-modules/ui",
105
115
  "package": "@clicktap/ui",
106
116
  "date": "2026-05-29",
@@ -110,7 +120,7 @@
110
120
  "affects": "`libs/ui/src/components/PasswordCheck/PasswordCheck.tsx`, `libs/ui/src/components/PasswordCheck/PasswordCheck.types.ts`"
111
121
  },
112
122
  {
113
- "path": "2026/05/2026-05-21-password-check-hide-on-empty.md",
123
+ "path": "2026/05/ui-2026-05-21-password-check-hide-on-empty.md",
114
124
  "module": "libs/frontend-modules/ui",
115
125
  "package": "@clicktap/ui",
116
126
  "date": "2026-05-21",
@@ -120,7 +130,7 @@
120
130
  "affects": "`libs/ui/src/components/PasswordCheck/PasswordCheck.tsx`"
121
131
  },
122
132
  {
123
- "path": "2026/05/2026-05-21-button-loading-content.md",
133
+ "path": "2026/05/ui-2026-05-21-button-loading-content.md",
124
134
  "module": "libs/frontend-modules/ui",
125
135
  "package": "@clicktap/ui",
126
136
  "date": "2026-05-21",
@@ -130,7 +140,7 @@
130
140
  "affects": "`@clicktap/ui/components/Button` (new `ButtonLoadingContent` export) and every submit-style button in the frontend app."
131
141
  },
132
142
  {
133
- "path": "2026/05/2026-05-20-framer-motion-11-idioms.md",
143
+ "path": "2026/05/ui-2026-05-20-framer-motion-11-idioms.md",
134
144
  "module": "libs/frontend-modules/ui",
135
145
  "package": "@clicktap/ui",
136
146
  "date": "2026-05-20",
@@ -140,7 +150,7 @@
140
150
  "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
151
  },
142
152
  {
143
- "path": "2026/05/2026-05-03-auth-aware-graphql-client.md",
153
+ "path": "2026/05/ui-2026-05-03-auth-aware-graphql-client.md",
144
154
  "module": "libs/frontend-modules/ui",
145
155
  "package": "@clicktap/ui",
146
156
  "date": "2026-05-03",
@@ -150,7 +160,7 @@
150
160
  "affects": "`@clicktap/ui/utils/createAuthAwareGraphqlClient` — new export"
151
161
  },
152
162
  {
153
- "path": "2026/05/2026-05-01-build-pdp-url-util.md",
163
+ "path": "2026/05/ui-2026-05-01-build-pdp-url-util.md",
154
164
  "module": "libs/frontend-modules/ui",
155
165
  "package": "@clicktap/ui",
156
166
  "date": "2026-05-01",
@@ -190,7 +200,7 @@
190
200
  "affects": "`@clicktap/ui` consumers that render product/category images"
191
201
  },
192
202
  {
193
- "path": "2026/04/2026-04-17-select-address-input-onchange-key-or-item.md",
203
+ "path": "2026/04/ui-2026-04-17-select-address-input-onchange-key-or-item.md",
194
204
  "module": "libs/frontend-modules/ui",
195
205
  "package": "@clicktap/ui",
196
206
  "date": "2026-04-17",
@@ -200,7 +210,7 @@
200
210
  "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
211
  },
202
212
  {
203
- "path": "2026/03/2026-03-24-modal-overlay-backdrop-dismiss.md",
213
+ "path": "2026/03/ui-2026-03-24-modal-overlay-backdrop-dismiss.md",
204
214
  "module": "libs/frontend-modules/ui",
205
215
  "package": "@clicktap/ui",
206
216
  "date": "2026-03-24",
@@ -210,7 +220,7 @@
210
220
  "affects": "`@clicktap/ui` — `ModalOverlay` component"
211
221
  },
212
222
  {
213
- "path": "2026/03/2026-03-24-image-dimmed-hidden-onready.md",
223
+ "path": "2026/03/ui-2026-03-24-image-dimmed-hidden-onready.md",
214
224
  "module": "libs/frontend-modules/ui",
215
225
  "package": "@clicktap/ui",
216
226
  "date": "2026-03-24",
@@ -220,7 +230,7 @@
220
230
  "affects": "`@clicktap/ui` — `Image` component"
221
231
  },
222
232
  {
223
- "path": "2026/02/2026-02-17-select-popover-portal-container-restored.md",
233
+ "path": "2026/02/ui-2026-02-17-select-popover-portal-container-restored.md",
224
234
  "module": "libs/frontend-modules/ui",
225
235
  "package": "@clicktap/ui",
226
236
  "date": "2026-02-17",
@@ -240,7 +250,7 @@
240
250
  "affects": "All files importing `isDevelopment` / `isProduction` from local `utils/env`"
241
251
  },
242
252
  {
243
- "path": "2026/01/2026-01-15-input-disable-skeleton.md",
253
+ "path": "2026/01/ui-2026-01-15-input-disable-skeleton.md",
244
254
  "module": "libs/frontend-modules/ui",
245
255
  "package": "@clicktap/ui",
246
256
  "date": "2026-01-15",
@@ -250,7 +260,7 @@
250
260
  "affects": "`@clicktap/ui`, `apps/frontend`"
251
261
  },
252
262
  {
253
- "path": "2026/01/2026-01-14-use-route-hook.md",
263
+ "path": "2026/01/ui-2026-01-14-use-route-hook.md",
254
264
  "module": "libs/frontend-modules/ui",
255
265
  "package": "@clicktap/ui",
256
266
  "date": "2026-01-14",
@@ -260,7 +270,7 @@
260
270
  "affects": "`@clicktap/ui`, `apps/frontend`"
261
271
  },
262
272
  {
263
- "path": "2026/01/2026-01-14-external-link-detection.md",
273
+ "path": "2026/01/ui-2026-01-14-external-link-detection.md",
264
274
  "module": "libs/frontend-modules/ui",
265
275
  "package": "@clicktap/ui",
266
276
  "date": "2026-01-14",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clicktap/ui",
3
- "version": "0.43.4",
3
+ "version": "0.43.6",
4
4
  "private": false,
5
5
  "author": "Clicktap",
6
6
  "description": "A library of React UI components and low-level hooks.",