@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.
- package/components/Input/Input.js +1 -1
- package/docs/migrations/2026/01/{2026-01-14-external-link-detection.md → ui-2026-01-14-external-link-detection.md} +1 -0
- package/docs/migrations/2026/01/{2026-01-14-use-route-hook.md → ui-2026-01-14-use-route-hook.md} +1 -0
- package/docs/migrations/2026/01/{2026-01-15-input-disable-skeleton.md → ui-2026-01-15-input-disable-skeleton.md} +1 -0
- package/docs/migrations/2026/02/ui-2026-02-16-env-utils-from-clicktap-ui.md +1 -1
- 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
- package/docs/migrations/2026/03/{2026-03-24-image-dimmed-hidden-onready.md → ui-2026-03-24-image-dimmed-hidden-onready.md} +1 -0
- package/docs/migrations/2026/03/{2026-03-24-modal-overlay-backdrop-dismiss.md → ui-2026-03-24-modal-overlay-backdrop-dismiss.md} +1 -0
- 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
- package/docs/migrations/2026/05/{2026-05-01-build-pdp-url-util.md → ui-2026-05-01-build-pdp-url-util.md} +1 -0
- package/docs/migrations/2026/05/{2026-05-03-auth-aware-graphql-client.md → ui-2026-05-03-auth-aware-graphql-client.md} +1 -0
- package/docs/migrations/2026/05/{2026-05-20-framer-motion-11-idioms.md → ui-2026-05-20-framer-motion-11-idioms.md} +1 -0
- package/docs/migrations/2026/05/{2026-05-21-button-loading-content.md → ui-2026-05-21-button-loading-content.md} +1 -0
- 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
- package/docs/migrations/2026/05/{2026-05-29-password-check-requirements-variant.md → ui-2026-05-29-password-check-requirements-variant.md} +3 -2
- package/docs/migrations/2026/06/{2026-06-17-select-standardization.md → ui-2026-06-17-select-standardization.md} +2 -1
- package/docs/migrations/2026/06/{2026-06-18-select-hiddenselect-setvalue-crash.md → ui-2026-06-18-select-hiddenselect-setvalue-crash.md} +1 -0
- package/docs/migrations/2026/07/{2026-07-31-ui-exports-bundler-resolution.md → ui-2026-07-31-ui-exports-bundler-resolution.md} +1 -0
- package/docs/migrations/2026/08/{2026-08-02-nextui-to-heroui.md → ui-2026-08-02-nextui-to-heroui.md} +1 -0
- 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
- package/docs/migrations/2026/08/{2026-08-04-resend-code-control.md → ui-2026-08-04-resend-code-control.md} +1 -0
- 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
- 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
- package/docs/migrations/2026/08/{2026-08-06-clicktap-ui-semantic-tokens.md → ui-2026-08-06-clicktap-ui-semantic-tokens.md} +1 -0
- 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
- package/docs/migrations/2026/08/ui-2026-08-11-password-reveal-toggle.md +75 -0
- package/docs/migrations/README.md +19 -18
- package/docs/migrations/index.json +33 -23
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{jsxs as s,jsx as e}from"react/jsx-runtime";import{Label as
|
|
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
|
package/docs/migrations/2026/01/{2026-01-14-use-route-hook.md → ui-2026-01-14-use-route-hook.md}
RENAMED
|
@@ -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
|
|
package/docs/migrations/2026/08/{2026-08-02-nextui-to-heroui.md → ui-2026-08-02-nextui-to-heroui.md}
RENAMED
|
@@ -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-
|
|
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",
|