@alfadocs/ui-kit-debug 0.24.0 → 0.25.1
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/dist/_chunks/{card-CWzuTLYE.js → card-C353dU-H.js} +21 -13
- package/dist/_chunks/{card-CWzuTLYE.js.map → card-C353dU-H.js.map} +1 -1
- package/dist/_chunks/carousel.agent-DnPiqijR.js +1733 -0
- package/dist/_chunks/carousel.agent-DnPiqijR.js.map +1 -0
- package/dist/_chunks/{contact-card-DTQUMetD.js → contact-card-CjG7c-1q.js} +2 -2
- package/dist/_chunks/{contact-card-DTQUMetD.js.map → contact-card-CjG7c-1q.js.map} +1 -1
- package/dist/_chunks/description-list-Bsga4IW8.js +309 -0
- package/dist/_chunks/description-list-Bsga4IW8.js.map +1 -0
- package/dist/_chunks/{locale-picker-CYBhgSHR.js → locale-picker-BxEUUPW7.js} +212 -149
- package/dist/_chunks/locale-picker-BxEUUPW7.js.map +1 -0
- package/dist/_chunks/{timeline-Czeqr3HF.js → timeline-jmd7lfDf.js} +19 -12
- package/dist/_chunks/{timeline-Czeqr3HF.js.map → timeline-jmd7lfDf.js.map} +1 -1
- package/dist/_chunks/{workflow-map-712GL-8u.js → workflow-map-BR6txfFX.js} +2 -2
- package/dist/_chunks/{workflow-map-712GL-8u.js.map → workflow-map-BR6txfFX.js.map} +1 -1
- package/dist/agent-catalog.json +1 -1
- package/dist/components/card/card.d.ts.map +1 -1
- package/dist/components/card/index.js +1 -1
- package/dist/components/carousel/carousel.d.ts +21 -0
- package/dist/components/carousel/carousel.d.ts.map +1 -1
- package/dist/components/carousel/index.js +1 -1
- package/dist/components/contact-card/index.js +1 -1
- package/dist/components/description-list/description-list.d.ts +40 -0
- package/dist/components/description-list/description-list.d.ts.map +1 -1
- package/dist/components/description-list/index.d.ts +1 -1
- package/dist/components/description-list/index.d.ts.map +1 -1
- package/dist/components/description-list/index.js +1 -1
- package/dist/components/header-settings/index.js +140 -102
- package/dist/components/header-settings/index.js.map +1 -1
- package/dist/components/locale-picker/index.js +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/timeline/timeline.d.ts.map +1 -1
- package/dist/components/workflow/index.js +1 -1
- package/dist/index.js +6 -6
- package/dist/tokens.css +1 -1
- package/package.json +1 -1
- package/dist/_chunks/carousel.agent-CQPFfppK.js +0 -1696
- package/dist/_chunks/carousel.agent-CQPFfppK.js.map +0 -1
- package/dist/_chunks/description-list-y7Hk51KI.js +0 -191
- package/dist/_chunks/description-list-y7Hk51KI.js.map +0 -1
- package/dist/_chunks/locale-picker-CYBhgSHR.js.map +0 -1
package/dist/agent-catalog.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../src/components/card/card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAsBlE,QAAA,MAAM,YAAY;;;;8EAwCjB,CAAC;AAMF,MAAM,WAAW,SACf,SACE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EACzC,YAAY,CAAC,OAAO,YAAY,CAAC;IACnC,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../src/components/card/card.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,cAAc,EAEnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAEf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAsBlE,QAAA,MAAM,YAAY;;;;8EAwCjB,CAAC;AAMF,MAAM,WAAW,SACf,SACE,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EACzC,YAAY,CAAC,OAAO,YAAY,CAAC;IACnC,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAqLD,eAAO,MAAM,IAAI;;;;;CAKf,CAAC;AAEH,YAAY,EAAE,YAAY,IAAI,gBAAgB,EAAE,CAAC"}
|
|
@@ -26,6 +26,27 @@ export interface CarouselProps extends Omit<ComponentPropsWithoutRef<'section'>,
|
|
|
26
26
|
snap?: 'mandatory' | 'proximity';
|
|
27
27
|
/** Consumer-supplied instance id, surfaced as `data-component-id`. */
|
|
28
28
|
id?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Fade the inline edges of the viewport so offscreen slides on the
|
|
31
|
+
* leading and trailing edges appear to dissolve into the surrounding
|
|
32
|
+
* surface instead of being clipped abruptly. Defaults to `true`.
|
|
33
|
+
*
|
|
34
|
+
* The fade is conditionally suppressed when the carousel is at the
|
|
35
|
+
* start of the strip (leading edge stays solid) or at the end
|
|
36
|
+
* (trailing edge stays solid) — there is no offscreen content to
|
|
37
|
+
* hint at in those positions, and a fade would just look like a
|
|
38
|
+
* decorative haze.
|
|
39
|
+
*
|
|
40
|
+
* The gradient width is controlled by `--carousel-fade-distance`,
|
|
41
|
+
* which defaults to `var(--spacing-xl)`. Consumers can override it
|
|
42
|
+
* by setting the variable on the Carousel root via className, e.g.
|
|
43
|
+
* `<Carousel className="ds:[--carousel-fade-distance:5rem]" …>`.
|
|
44
|
+
*
|
|
45
|
+
* Automatically disabled under `prefers-reduced-motion`, the
|
|
46
|
+
* `theme-accessible` palette, and Windows High Contrast Mode so the
|
|
47
|
+
* mask never strips information from users who need it.
|
|
48
|
+
*/
|
|
49
|
+
fadeEdges?: boolean;
|
|
29
50
|
}
|
|
30
51
|
export interface CarouselItemProps extends ComponentPropsWithoutRef<'div'> {
|
|
31
52
|
children: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../../../src/components/carousel/carousel.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAaL,KAAK,wBAAwB,EAE7B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAWlE,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,8CAA8C;IAC9C,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,yBAAyB;IACzB,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,kDAAkD;IAClD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,aACf,SACE,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,EACrD,YAAY,CAAC,OAAO,YAAY,CAAC;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iFAAiF;IACjF,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,yEAAyE;IACzE,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACjC,sEAAsE;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"carousel.d.ts","sourceRoot":"","sources":["../../../src/components/carousel/carousel.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAaL,KAAK,wBAAwB,EAE7B,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAWlE,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,8CAA8C;IAC9C,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,yBAAyB;IACzB,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,kDAAkD;IAClD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,aACf,SACE,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,EACrD,YAAY,CAAC,OAAO,YAAY,CAAC;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iFAAiF;IACjF,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,yEAAyE;IACzE,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACjC,sEAAsE;IACtE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB,CAAC,KAAK,CAAC;IACxE,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,mBAAoB,SAAQ,wBAAwB,CAAC,KAAK,CAAC;IAC1E,QAAQ,EAAE,SAAS,CAAC;CACrB;AAMD,QAAA,MAAM,YAAY;;8EAYjB,CAAC;AAgrBF,eAAO,MAAM,QAAQ;;;;CAInB,CAAC"}
|
|
@@ -1,7 +1,29 @@
|
|
|
1
|
+
type LabelWidthPreset = 'auto' | 'fixed';
|
|
2
|
+
export type DescriptionListLabelWidth = LabelWidthPreset | (string & {});
|
|
1
3
|
export interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {
|
|
2
4
|
layout?: 'inline' | 'stacked' | 'responsive';
|
|
3
5
|
density?: 'default' | 'compact';
|
|
4
6
|
divider?: 'none' | 'between' | 'bordered';
|
|
7
|
+
/**
|
|
8
|
+
* Width of the term column in `inline` and `responsive` layouts.
|
|
9
|
+
*
|
|
10
|
+
* - `'auto'` (default): the term column sizes to its intrinsic content
|
|
11
|
+
* per row, so labels wrap at word boundaries in narrow contexts (carousel
|
|
12
|
+
* cards, sidebar panels) and the detail column takes the remaining inline
|
|
13
|
+
* space. **Sibling rows do NOT share column widths under this preset** —
|
|
14
|
+
* each row's columns size to its own content. Use this when intrinsic
|
|
15
|
+
* per-row sizing matters more than vertical alignment of values.
|
|
16
|
+
* - `'fixed'`: ⅓ / ⅔ split — term column is `minmax(0, 1fr)` and detail
|
|
17
|
+
* column is `minmax(0, 2fr)`. Sibling rows share the same proportional
|
|
18
|
+
* widths, so values align vertically across rows. Use this when shared
|
|
19
|
+
* value-column alignment matters (the typical use case for a list of
|
|
20
|
+
* contact rows, profile fields, or any tabular-feeling metadata).
|
|
21
|
+
* - any CSS track size (`'8rem'`, `'min-content'`, `'40%'`, …): pins the
|
|
22
|
+
* term column to that width and lets the detail column take the rest.
|
|
23
|
+
*
|
|
24
|
+
* Ignored when `layout="stacked"` (single content column).
|
|
25
|
+
*/
|
|
26
|
+
labelWidth?: DescriptionListLabelWidth;
|
|
5
27
|
}
|
|
6
28
|
export interface DescriptionListRowProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
7
29
|
/** When true, shows a copy-to-clipboard button using KeyValuePair's established mechanism */
|
|
@@ -10,6 +32,23 @@ export interface DescriptionListRowProps extends React.HTMLAttributes<HTMLDivEle
|
|
|
10
32
|
copyText?: string;
|
|
11
33
|
/** Label used in the copy button's aria-label: "Copy {copyLabel}". Falls back to copyText. */
|
|
12
34
|
copyLabel?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Optional decorative icon rendered at the leading edge of the row.
|
|
37
|
+
* Pass a `lucide-react` icon (or any single React element) for visual
|
|
38
|
+
* consistency. The wrapper applies `aria-hidden="true"` and paints
|
|
39
|
+
* the icon with `var(--description-list-icon-color)` (defaults to
|
|
40
|
+
* `--muted-foreground`); consumers can recolour the slot via that
|
|
41
|
+
* token without forking the component.
|
|
42
|
+
*
|
|
43
|
+
* When any row in the list passes an `icon`, every row reserves a
|
|
44
|
+
* leading icon column so values align across siblings — including
|
|
45
|
+
* rows that did not pass an icon.
|
|
46
|
+
*
|
|
47
|
+
* Type is `ReactElement` (not the broader `ReactNode`) so the intent
|
|
48
|
+
* is clear at the call site: this slot is for a single SVG/icon,
|
|
49
|
+
* not arbitrary fragments, strings, or numbers.
|
|
50
|
+
*/
|
|
51
|
+
icon?: React.ReactElement | null;
|
|
13
52
|
}
|
|
14
53
|
export type DescriptionListTermProps = React.HTMLAttributes<HTMLElement>;
|
|
15
54
|
export interface DescriptionListDetailProps extends React.HTMLAttributes<HTMLElement> {
|
|
@@ -21,4 +60,5 @@ export declare const DescriptionList: import("react").ForwardRefExoticComponent<
|
|
|
21
60
|
Term: import("react").ForwardRefExoticComponent<DescriptionListTermProps & import("react").RefAttributes<HTMLElement>>;
|
|
22
61
|
Detail: import("react").ForwardRefExoticComponent<DescriptionListDetailProps & import("react").RefAttributes<HTMLElement>>;
|
|
23
62
|
};
|
|
63
|
+
export {};
|
|
24
64
|
//# sourceMappingURL=description-list.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"description-list.d.ts","sourceRoot":"","sources":["../../../src/components/description-list/description-list.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"description-list.d.ts","sourceRoot":"","sources":["../../../src/components/description-list/description-list.tsx"],"names":[],"mappings":"AAuCA,KAAK,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;AACzC,MAAM,MAAM,yBAAyB,GAAG,gBAAgB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAmOzE,MAAM,WAAW,oBAAqB,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IAClF,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;IAC7C,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;IAC1C;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,CAAC,EAAE,yBAAyB,CAAC;CACxC;AAED,MAAM,WAAW,uBAAwB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACnF,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uDAAuD;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;;;;;OAeG;IACH,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,MAAM,wBAAwB,GAAG,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;AAEzE,MAAM,WAAW,0BAA2B,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IACnF,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAsPD,eAAO,MAAM,eAAe;;;;CAI1B,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { DescriptionList } from './description-list';
|
|
2
|
-
export type { DescriptionListProps, DescriptionListRowProps, DescriptionListTermProps, DescriptionListDetailProps, } from './description-list';
|
|
2
|
+
export type { DescriptionListProps, DescriptionListRowProps, DescriptionListTermProps, DescriptionListDetailProps, DescriptionListLabelWidth, } from './description-list';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/description-list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EACV,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/description-list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EACV,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
import { c as
|
|
4
|
-
import { useTranslation as
|
|
5
|
-
import { I } from "../../_chunks/icon-button-C4CGcYuz.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { u as O } from "../../_chunks/use-
|
|
11
|
-
import { u as P } from "../../_chunks/
|
|
12
|
-
import {
|
|
13
|
-
import { S as K
|
|
14
|
-
|
|
1
|
+
import { jsx as e, jsxs as d } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef as A, useRef as p, useImperativeHandle as C, useCallback as x, useMemo as I } from "react";
|
|
3
|
+
import { c as N } from "../../_chunks/index-D2ZczOXr.js";
|
|
4
|
+
import { useTranslation as E } from "react-i18next";
|
|
5
|
+
import { I as o } from "../../_chunks/icon-button-C4CGcYuz.js";
|
|
6
|
+
import { I as R } from "../../_chunks/icon-button-group-DeV3FpNY.js";
|
|
7
|
+
import { D as r } from "../../_chunks/dropdown-menu-DZxwF23X.js";
|
|
8
|
+
import { S as M } from "../../_chunks/switch-D916VW86.js";
|
|
9
|
+
import { c as v, a as _, L as H } from "../../_chunks/locale-picker-BxEUUPW7.js";
|
|
10
|
+
import { u as O } from "../../_chunks/use-locale-BkCIHujH.js";
|
|
11
|
+
import { u as P } from "../../_chunks/use-theme-B1cwAXJR.js";
|
|
12
|
+
import { u as j } from "../../_chunks/registry-C9nwlNyL.js";
|
|
13
|
+
import { S as K } from "../../_chunks/settings-ca2Yi9R8.js";
|
|
14
|
+
import { S as D, M as z, a as V } from "../../_chunks/sun-Eweh5fvi.js";
|
|
15
|
+
const B = {
|
|
15
16
|
id: "header-settings",
|
|
16
17
|
capabilities: ["view_change"],
|
|
17
18
|
state: {},
|
|
@@ -21,8 +22,8 @@ const D = {
|
|
|
21
22
|
argsType: "{ locale: string }",
|
|
22
23
|
descriptionKey: "ui.agent.headerSettings.actions.setLocale",
|
|
23
24
|
description: "Switch the active locale to the given IETF tag.",
|
|
24
|
-
invoke: (t,
|
|
25
|
-
t.setLocale(
|
|
25
|
+
invoke: (t, i) => {
|
|
26
|
+
t.setLocale(i.locale);
|
|
26
27
|
}
|
|
27
28
|
},
|
|
28
29
|
set_theme: {
|
|
@@ -30,8 +31,8 @@ const D = {
|
|
|
30
31
|
argsType: '{ theme: "light" | "dark" | "system" }',
|
|
31
32
|
descriptionKey: "ui.agent.headerSettings.actions.setTheme",
|
|
32
33
|
description: "Switch the theme preference.",
|
|
33
|
-
invoke: (t,
|
|
34
|
-
t.setTheme(
|
|
34
|
+
invoke: (t, i) => {
|
|
35
|
+
t.setTheme(i.theme);
|
|
35
36
|
}
|
|
36
37
|
},
|
|
37
38
|
set_accessibility: {
|
|
@@ -39,8 +40,8 @@ const D = {
|
|
|
39
40
|
argsType: '{ accessibility: "default" | "accessible" }',
|
|
40
41
|
descriptionKey: "ui.agent.headerSettings.actions.setAccessibility",
|
|
41
42
|
description: "Switch the accessibility preference.",
|
|
42
|
-
invoke: (t,
|
|
43
|
-
t.setAccessibility(
|
|
43
|
+
invoke: (t, i) => {
|
|
44
|
+
t.setAccessibility(i.accessibility);
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
47
|
},
|
|
@@ -52,19 +53,19 @@ const D = {
|
|
|
52
53
|
}
|
|
53
54
|
}
|
|
54
55
|
};
|
|
55
|
-
function
|
|
56
|
+
function G(t, i) {
|
|
56
57
|
if (!(typeof window > "u"))
|
|
57
58
|
try {
|
|
58
|
-
window.localStorage.setItem(t,
|
|
59
|
+
window.localStorage.setItem(t, i);
|
|
59
60
|
} catch {
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
|
-
function
|
|
63
|
+
function W(t) {
|
|
63
64
|
if (typeof document > "u") return;
|
|
64
|
-
const
|
|
65
|
-
|
|
65
|
+
const i = document.documentElement;
|
|
66
|
+
i.lang = t, i.dir = v[t].dir;
|
|
66
67
|
}
|
|
67
|
-
const
|
|
68
|
+
const F = N("ds:inline-flex ds:items-center", {
|
|
68
69
|
variants: {
|
|
69
70
|
align: {
|
|
70
71
|
start: "",
|
|
@@ -72,120 +73,157 @@ const W = R("ds:inline-flex ds:items-center", {
|
|
|
72
73
|
}
|
|
73
74
|
},
|
|
74
75
|
defaultVariants: { align: "end" }
|
|
75
|
-
}),
|
|
76
|
+
}), U = [
|
|
76
77
|
"ds:w-[20rem] ds:p-[var(--spacing-xs)]",
|
|
77
78
|
"ds:rounded-[var(--radius-md)] ds:border ds:border-border",
|
|
78
79
|
"ds:bg-background ds:text-foreground ds:shadow-[var(--shadow-lg)]"
|
|
79
|
-
].join(" "),
|
|
80
|
-
(t,
|
|
80
|
+
].join(" "), Y = A(
|
|
81
|
+
(t, i) => {
|
|
81
82
|
const {
|
|
82
83
|
align: g = "end",
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
84
|
+
size: y = "md",
|
|
85
|
+
disabled: S = !1,
|
|
86
|
+
className: w,
|
|
87
|
+
id: m,
|
|
88
|
+
...L
|
|
89
|
+
} = t, { t: s } = E(), n = P(), { setLocale: h } = O(), u = p(null);
|
|
90
|
+
C(i, () => u.current, []);
|
|
91
|
+
const f = x(
|
|
92
|
+
(a) => {
|
|
93
|
+
h(a), W(a), G(H, a);
|
|
92
94
|
},
|
|
93
|
-
[
|
|
94
|
-
),
|
|
95
|
-
|
|
96
|
-
const c =
|
|
95
|
+
[h]
|
|
96
|
+
), b = p(f);
|
|
97
|
+
b.current = f;
|
|
98
|
+
const c = p(n);
|
|
97
99
|
c.current = n;
|
|
98
|
-
const
|
|
100
|
+
const k = I(
|
|
99
101
|
() => ({
|
|
100
|
-
setLocale: (
|
|
101
|
-
Object.prototype.hasOwnProperty.call(
|
|
102
|
+
setLocale: (a) => {
|
|
103
|
+
Object.prototype.hasOwnProperty.call(v, a) && b.current(a);
|
|
102
104
|
},
|
|
103
|
-
setTheme: (
|
|
104
|
-
setAccessibility: (
|
|
105
|
+
setTheme: (a) => c.current.setTheme(a),
|
|
106
|
+
setAccessibility: (a) => c.current.setAccessibility(a)
|
|
105
107
|
}),
|
|
106
108
|
[]
|
|
107
109
|
);
|
|
108
|
-
|
|
109
|
-
const
|
|
110
|
-
return /* @__PURE__ */
|
|
110
|
+
j(B, k, m);
|
|
111
|
+
const T = n.accessibility === "accessible";
|
|
112
|
+
return /* @__PURE__ */ e(
|
|
111
113
|
"div",
|
|
112
114
|
{
|
|
113
|
-
ref:
|
|
115
|
+
ref: u,
|
|
114
116
|
"data-component": "header-settings",
|
|
115
|
-
"data-component-id":
|
|
116
|
-
className:
|
|
117
|
-
...
|
|
118
|
-
children: /* @__PURE__ */
|
|
119
|
-
/* @__PURE__ */
|
|
120
|
-
|
|
117
|
+
"data-component-id": m,
|
|
118
|
+
className: F({ align: g, className: w }),
|
|
119
|
+
...L,
|
|
120
|
+
children: /* @__PURE__ */ d(r.Root, { children: [
|
|
121
|
+
/* @__PURE__ */ e(r.Trigger, { asChild: !0, children: /* @__PURE__ */ e(
|
|
122
|
+
o,
|
|
121
123
|
{
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
"aria-
|
|
124
|
+
size: y,
|
|
125
|
+
disabled: S,
|
|
126
|
+
icon: /* @__PURE__ */ e(K, { "aria-hidden": !0 }),
|
|
127
|
+
"aria-label": s("navigation.headerSettings.trigger")
|
|
125
128
|
}
|
|
126
129
|
) }),
|
|
127
|
-
/* @__PURE__ */
|
|
128
|
-
|
|
130
|
+
/* @__PURE__ */ e(r.Portal, { children: /* @__PURE__ */ d(
|
|
131
|
+
r.Content,
|
|
129
132
|
{
|
|
130
133
|
align: g,
|
|
131
134
|
sideOffset: 8,
|
|
132
|
-
className:
|
|
133
|
-
onKeyDownCapture: (
|
|
134
|
-
const
|
|
135
|
-
(
|
|
136
|
-
|
|
135
|
+
className: U,
|
|
136
|
+
onKeyDownCapture: (a) => {
|
|
137
|
+
const l = a.target;
|
|
138
|
+
(l == null ? void 0 : l.tagName) === "INPUT" && // Always allow Escape so the menu can close.
|
|
139
|
+
a.key !== "Escape" && a.stopPropagation();
|
|
137
140
|
},
|
|
138
141
|
children: [
|
|
139
|
-
/* @__PURE__ */
|
|
140
|
-
/* @__PURE__ */
|
|
142
|
+
/* @__PURE__ */ e(r.Label, { children: s("navigation.headerSettings.language.label") }),
|
|
143
|
+
/* @__PURE__ */ e(
|
|
141
144
|
"div",
|
|
142
145
|
{
|
|
143
146
|
role: "group",
|
|
144
|
-
"aria-label":
|
|
145
|
-
className:
|
|
146
|
-
|
|
147
|
+
"aria-label": s("navigation.headerSettings.language.label"),
|
|
148
|
+
className: [
|
|
149
|
+
"ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]",
|
|
150
|
+
// Stretch the compact LocalePicker to the full menu
|
|
151
|
+
// width so it reads as a single row affordance (not
|
|
152
|
+
// a centred pill). The picker's root is
|
|
153
|
+
// inline-flex; the `*:` child selector + `flex-1`
|
|
154
|
+
// gives it `flex: 1 1 0%` once it's a child of the
|
|
155
|
+
// flex container we make this div into.
|
|
156
|
+
"ds:flex ds:[&>*]:flex-1"
|
|
157
|
+
].join(" "),
|
|
158
|
+
children: /* @__PURE__ */ e(_, { variant: "compact" })
|
|
147
159
|
}
|
|
148
160
|
),
|
|
149
|
-
/* @__PURE__ */
|
|
150
|
-
/* @__PURE__ */
|
|
151
|
-
/* @__PURE__ */
|
|
152
|
-
|
|
161
|
+
/* @__PURE__ */ e(r.Separator, {}),
|
|
162
|
+
/* @__PURE__ */ e(r.Label, { children: s("navigation.headerSettings.appearance.label") }),
|
|
163
|
+
/* @__PURE__ */ e(
|
|
164
|
+
"div",
|
|
153
165
|
{
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
166
|
+
role: "group",
|
|
167
|
+
"aria-label": s("navigation.headerSettings.appearance.label"),
|
|
168
|
+
className: "ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]",
|
|
169
|
+
children: /* @__PURE__ */ d(
|
|
170
|
+
R,
|
|
171
|
+
{
|
|
172
|
+
role: "radiogroup",
|
|
173
|
+
mode: "toggle-single",
|
|
174
|
+
size: "sm",
|
|
175
|
+
"aria-label": s("navigation.headerSettings.appearance.label"),
|
|
176
|
+
value: n.theme,
|
|
177
|
+
onValueChange: (a) => n.setTheme(a),
|
|
178
|
+
children: [
|
|
179
|
+
/* @__PURE__ */ e(
|
|
180
|
+
o,
|
|
181
|
+
{
|
|
182
|
+
icon: /* @__PURE__ */ e(D, { "aria-hidden": !0 }),
|
|
183
|
+
"aria-label": s("navigation.headerSettings.appearance.light"),
|
|
184
|
+
value: "light"
|
|
185
|
+
}
|
|
186
|
+
),
|
|
187
|
+
/* @__PURE__ */ e(
|
|
188
|
+
o,
|
|
189
|
+
{
|
|
190
|
+
icon: /* @__PURE__ */ e(z, { "aria-hidden": !0 }),
|
|
191
|
+
"aria-label": s("navigation.headerSettings.appearance.dark"),
|
|
192
|
+
value: "dark"
|
|
193
|
+
}
|
|
194
|
+
),
|
|
195
|
+
/* @__PURE__ */ e(
|
|
196
|
+
o,
|
|
197
|
+
{
|
|
198
|
+
icon: /* @__PURE__ */ e(V, { "aria-hidden": !0 }),
|
|
199
|
+
"aria-label": s(
|
|
200
|
+
"navigation.headerSettings.appearance.system"
|
|
201
|
+
),
|
|
202
|
+
value: "system"
|
|
203
|
+
}
|
|
204
|
+
)
|
|
205
|
+
]
|
|
206
|
+
}
|
|
207
|
+
)
|
|
170
208
|
}
|
|
171
209
|
),
|
|
172
|
-
/* @__PURE__ */
|
|
173
|
-
/* @__PURE__ */
|
|
210
|
+
/* @__PURE__ */ e(r.Separator, {}),
|
|
211
|
+
/* @__PURE__ */ e(
|
|
174
212
|
"div",
|
|
175
213
|
{
|
|
176
214
|
role: "group",
|
|
177
|
-
"aria-label":
|
|
215
|
+
"aria-label": s(
|
|
178
216
|
"navigation.headerSettings.appearance.accessible"
|
|
179
217
|
),
|
|
180
218
|
className: "ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-sm)]",
|
|
181
|
-
children: /* @__PURE__ */
|
|
182
|
-
|
|
219
|
+
children: /* @__PURE__ */ e(
|
|
220
|
+
M,
|
|
183
221
|
{
|
|
184
|
-
label:
|
|
222
|
+
label: s("navigation.headerSettings.appearance.accessible"),
|
|
185
223
|
labelSide: "start",
|
|
186
224
|
size: "sm",
|
|
187
|
-
checked:
|
|
188
|
-
onCheckedChange: (
|
|
225
|
+
checked: T,
|
|
226
|
+
onCheckedChange: (a) => n.setAccessibility(a ? "accessible" : "default")
|
|
189
227
|
}
|
|
190
228
|
)
|
|
191
229
|
}
|
|
@@ -198,8 +236,8 @@ const W = R("ds:inline-flex ds:items-center", {
|
|
|
198
236
|
);
|
|
199
237
|
}
|
|
200
238
|
);
|
|
201
|
-
|
|
239
|
+
Y.displayName = "HeaderSettings";
|
|
202
240
|
export {
|
|
203
|
-
|
|
241
|
+
Y as HeaderSettings
|
|
204
242
|
};
|
|
205
243
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/header-settings/header-settings.agent.ts","../../../src/components/header-settings/header-settings.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — HeaderSettings. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { HeaderSettingsHandle } from './header-settings';\n\nexport const headerSettingsAgent: AgentAdapter<HeaderSettingsHandle> = {\n id: 'header-settings',\n capabilities: ['view_change'],\n state: {},\n actions: {\n set_locale: {\n safety: 'write',\n argsType: '{ locale: string }',\n descriptionKey: 'ui.agent.headerSettings.actions.setLocale',\n description: 'Switch the active locale to the given IETF tag.',\n invoke: (handle, args: { locale: string }) => {\n // Validation happens inside the handle so the agent surface\n // accepts arbitrary tags and silently drops unknown ones.\n handle.setLocale(args.locale);\n },\n },\n set_theme: {\n safety: 'write',\n argsType: '{ theme: \"light\" | \"dark\" | \"system\" }',\n descriptionKey: 'ui.agent.headerSettings.actions.setTheme',\n description: 'Switch the theme preference.',\n invoke: (handle, args: { theme: 'light' | 'dark' | 'system' }) => {\n handle.setTheme(args.theme);\n },\n },\n set_accessibility: {\n safety: 'write',\n argsType: '{ accessibility: \"default\" | \"accessible\" }',\n descriptionKey: 'ui.agent.headerSettings.actions.setAccessibility',\n description: 'Switch the accessibility preference.',\n invoke: (handle, args: { accessibility: 'default' | 'accessible' }) => {\n handle.setAccessibility(args.accessibility);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'header-settings',\n description: 'Marks the HeaderSettings wrapper.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Monitor, Moon, Settings, Sun } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { DropdownMenu } from '../dropdown-menu/dropdown-menu';\nimport { Switch } from '../switch/switch';\nimport {\n LocalePicker,\n LOCALE_STORAGE_KEY,\n} from '../locale-picker/locale-picker';\nimport {\n useTheme,\n type AccessibilityPreference,\n type ThemePreference,\n} from '../../hooks';\nimport { useLocale } from '../../hooks/use-locale';\nimport { LOCALE_META, type Locale } from '../../i18n/locale-meta';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { headerSettingsAgent } from './header-settings.agent';\n\nfunction safeWriteStorage(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, value);\n } catch {\n /* Storage can throw in private mode — silent-fail per use-theme.ts. */\n }\n}\n\nfunction applyDocumentAttrs(locale: Locale): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n root.lang = locale;\n root.dir = LOCALE_META[locale].dir;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva('ds:inline-flex ds:items-center', {\n variants: {\n align: {\n start: '',\n end: '',\n },\n },\n defaultVariants: { align: 'end' },\n});\n\nconst dropdownContentClasses = [\n 'ds:w-[20rem] ds:p-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:bg-background ds:text-foreground ds:shadow-[var(--shadow-lg)]',\n].join(' ');\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface HeaderSettingsProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>,\n VariantProps<typeof wrapperVariants> {\n /** Anchor side for the dropdown. Defaults to `end` (matches LTR + RTL). */\n align?: 'start' | 'end';\n /** Disable the trigger entirely. */\n disabled?: boolean;\n}\n\nexport interface HeaderSettingsHandle {\n /**\n * Switch the active locale. Widened to `string` (vs. `Locale`) so\n * agent surfaces with untyped inputs can call through without\n * extra casting — invalid tags no-op silently.\n */\n setLocale: (next: string) => void;\n setTheme: (next: ThemePreference) => void;\n setAccessibility: (next: AccessibilityPreference) => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* HeaderSettings */\n/* */\n/* Single button → single DropdownMenu surface. Inside the menu, the */\n/* \"Language\" section embeds `LocalePicker.SearchList` (the kit's */\n/* searchable list without its own trigger / popover) and the */\n/* \"Appearance\" section mirrors `ThemeToggle`'s menu-variant internals */\n/* using `DropdownMenu.RadioGroup` + `CheckboxItem`. Both sections */\n/* read/write the same hooks (`useLocale`, `useTheme`) that the */\n/* standalone components use, so there's no state duplication. */\n/* ------------------------------------------------------------------ */\n\nexport const HeaderSettings = forwardRef<HTMLDivElement, HeaderSettingsProps>(\n (props, ref) => {\n const {\n align = 'end',\n disabled = false,\n className,\n id,\n ...rest\n } = props as HeaderSettingsProps & { id?: string };\n\n const { t } = useTranslation();\n const theme = useTheme();\n const { setLocale: setLocaleI18n } = useLocale();\n\n const forwardedRef = useRef<HTMLDivElement | null>(null);\n useImperativeHandle(ref, () => forwardedRef.current as HTMLDivElement, []);\n\n // Same side-effect chain as LocalePicker's internal helper:\n // i18next.changeLanguage → document.dir/lang → persist.\n // Inlined here (rather than exported from locale-picker) because\n // it's three small calls; the LocalePicker.SearchList component\n // continues to own its own copy for inline use, and both apply\n // the same persistence key (`alfadocs-ui.locale`) so a write from\n // either path is visible to the other on next mount.\n const setLocaleWithPersistence = useCallback(\n (next: Locale) => {\n void setLocaleI18n(next);\n applyDocumentAttrs(next);\n safeWriteStorage(LOCALE_STORAGE_KEY, next);\n },\n [setLocaleI18n],\n );\n const setLocaleRef = useRef(setLocaleWithPersistence);\n setLocaleRef.current = setLocaleWithPersistence;\n\n const themeRef = useRef(theme);\n themeRef.current = theme;\n const agentHandle = useMemo<HeaderSettingsHandle>(\n () => ({\n setLocale: (next: string) => {\n // Mirrors LocalePicker's gating — silently drop unknown tags\n // rather than crash mid-cascade. `LOCALES_WITH_BUNDLES` is\n // re-imported via the LOCALE_META keys so this file doesn't\n // need the resources module on the build-agent-catalog path.\n if (Object.prototype.hasOwnProperty.call(LOCALE_META, next)) {\n setLocaleRef.current(next as Locale);\n }\n },\n setTheme: (next) => themeRef.current.setTheme(next),\n setAccessibility: (next) => themeRef.current.setAccessibility(next),\n }),\n [],\n );\n useAgentRegistration(headerSettingsAgent, agentHandle, id);\n\n const accessibleChecked = theme.accessibility === 'accessible';\n\n return (\n <div\n ref={forwardedRef}\n data-component=\"header-settings\"\n data-component-id={id}\n className={wrapperVariants({ align, className })}\n {...rest}\n >\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n disabled={disabled}\n icon={<Settings aria-hidden />}\n aria-label={t('navigation.headerSettings.trigger')}\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align={align}\n sideOffset={8}\n className={dropdownContentClasses}\n // Search input inside the menu owns its own keyboard\n // capture (cmdk). Stop Radix Menu's typeahead from\n // intercepting letters typed into the search field —\n // `onKeyDownCapture` runs before the menu's listener.\n onKeyDownCapture={(event) => {\n const target = event.target as HTMLElement | null;\n if (\n target?.tagName === 'INPUT' &&\n // Always allow Escape so the menu can close.\n event.key !== 'Escape'\n ) {\n event.stopPropagation();\n }\n }}\n >\n <DropdownMenu.Label>\n {t('navigation.headerSettings.language.label')}\n </DropdownMenu.Label>\n {/* The searchable list owns its own keyboard nav (cmdk).\n Wrap in `role=\"group\"` (vs. `role=\"presentation\"`)\n so the menu's `aria-required-children` rule sees a\n permitted child role, not the cmdk input/listbox\n leaking up as direct children of `role=\"menu\"`. */}\n <div\n role=\"group\"\n aria-label={t('navigation.headerSettings.language.label')}\n className=\"ds:py-[var(--spacing-xs)]\"\n >\n <LocalePicker.SearchList />\n </div>\n\n <DropdownMenu.Separator />\n\n <DropdownMenu.Label>\n {t('navigation.headerSettings.appearance.label')}\n </DropdownMenu.Label>\n <DropdownMenu.RadioGroup\n value={theme.theme}\n onValueChange={(next) =>\n theme.setTheme(next as ThemePreference)\n }\n >\n <DropdownMenu.RadioItem value=\"light\">\n <Sun aria-hidden className=\"ds:size-4\" />\n {t('navigation.headerSettings.appearance.light')}\n </DropdownMenu.RadioItem>\n <DropdownMenu.RadioItem value=\"dark\">\n <Moon aria-hidden className=\"ds:size-4\" />\n {t('navigation.headerSettings.appearance.dark')}\n </DropdownMenu.RadioItem>\n <DropdownMenu.RadioItem value=\"system\">\n <Monitor aria-hidden className=\"ds:size-4\" />\n {t('navigation.headerSettings.appearance.system')}\n </DropdownMenu.RadioItem>\n </DropdownMenu.RadioGroup>\n\n <DropdownMenu.Separator />\n\n {/* Accessible-mode toggle uses the kit's Switch primitive\n for a clearer visual affordance than a checkbox tick.\n Rendered inside a `presentation` row (not a\n DropdownMenu.CheckboxItem) — the Switch is focusable\n via Tab while the menu is open, so keyboard users\n still reach it; arrow keys keep moving between the\n three theme radios above without falling into the\n switch's roving collection.\n\n When the switch flips, `setAccessibility` writes\n through useTheme (the same store the standalone\n ThemeToggle uses) so document.documentElement gets\n the `theme-accessible` class instantly — including\n swapping `--font-sans` to Lexend for Latin scripts\n (see src/tokens/index.css). */}\n {/* `role=\"group\"` so the menu's `aria-required-children`\n (which only permits menuitem* / group / separator /\n menu inside `role=\"menu\"`) is satisfied — the Switch's\n `role=\"switch\"` would be a forbidden direct child of\n the menu. `aria-label` names the group so SR users\n hear \"Accessibility toggle, group\". */}\n <div\n role=\"group\"\n aria-label={t(\n 'navigation.headerSettings.appearance.accessible',\n )}\n className=\"ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-sm)]\"\n >\n <Switch\n label={t('navigation.headerSettings.appearance.accessible')}\n labelSide=\"start\"\n size=\"sm\"\n checked={accessibleChecked}\n onCheckedChange={(next) =>\n theme.setAccessibility(next ? 'accessible' : 'default')\n }\n />\n </div>\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </div>\n );\n },\n);\n\nHeaderSettings.displayName = 'HeaderSettings';\n"],"names":["headerSettingsAgent","handle","args","safeWriteStorage","key","value","applyDocumentAttrs","locale","root","LOCALE_META","wrapperVariants","cva","dropdownContentClasses","HeaderSettings","forwardRef","props","ref","align","disabled","className","id","rest","t","useTranslation","theme","useTheme","setLocaleI18n","useLocale","forwardedRef","useRef","useImperativeHandle","setLocaleWithPersistence","useCallback","next","LOCALE_STORAGE_KEY","setLocaleRef","themeRef","agentHandle","useMemo","useAgentRegistration","accessibleChecked","jsx","jsxs","DropdownMenu","IconButton","Settings","event","target","LocalePicker","Sun","Moon","Monitor","Switch"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/components/header-settings/header-settings.agent.ts","../../../src/components/header-settings/header-settings.tsx"],"sourcesContent":["/* -------------------------------------------------------------------- */\n/* Agent adapter — HeaderSettings. */\n/* -------------------------------------------------------------------- */\n\nimport type { AgentAdapter } from '../../agent/types';\nimport type { HeaderSettingsHandle } from './header-settings';\n\nexport const headerSettingsAgent: AgentAdapter<HeaderSettingsHandle> = {\n id: 'header-settings',\n capabilities: ['view_change'],\n state: {},\n actions: {\n set_locale: {\n safety: 'write',\n argsType: '{ locale: string }',\n descriptionKey: 'ui.agent.headerSettings.actions.setLocale',\n description: 'Switch the active locale to the given IETF tag.',\n invoke: (handle, args: { locale: string }) => {\n // Validation happens inside the handle so the agent surface\n // accepts arbitrary tags and silently drops unknown ones.\n handle.setLocale(args.locale);\n },\n },\n set_theme: {\n safety: 'write',\n argsType: '{ theme: \"light\" | \"dark\" | \"system\" }',\n descriptionKey: 'ui.agent.headerSettings.actions.setTheme',\n description: 'Switch the theme preference.',\n invoke: (handle, args: { theme: 'light' | 'dark' | 'system' }) => {\n handle.setTheme(args.theme);\n },\n },\n set_accessibility: {\n safety: 'write',\n argsType: '{ accessibility: \"default\" | \"accessible\" }',\n descriptionKey: 'ui.agent.headerSettings.actions.setAccessibility',\n description: 'Switch the accessibility preference.',\n invoke: (handle, args: { accessibility: 'default' | 'accessible' }) => {\n handle.setAccessibility(args.accessibility);\n },\n },\n },\n domHooks: {\n root: {\n attr: 'data-component',\n value: 'header-settings',\n description: 'Marks the HeaderSettings wrapper.',\n },\n },\n};\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n type HTMLAttributes,\n} from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { useTranslation } from 'react-i18next';\nimport { Monitor, Moon, Settings, Sun } from 'lucide-react';\nimport { IconButton } from '../button/icon-button';\nimport { IconButtonGroup } from '../icon-button-group/icon-button-group';\nimport { DropdownMenu } from '../dropdown-menu/dropdown-menu';\nimport { Switch } from '../switch/switch';\nimport {\n LocalePicker,\n LOCALE_STORAGE_KEY,\n} from '../locale-picker/locale-picker';\nimport {\n useTheme,\n type AccessibilityPreference,\n type ThemePreference,\n} from '../../hooks';\nimport { useLocale } from '../../hooks/use-locale';\nimport { LOCALE_META, type Locale } from '../../i18n/locale-meta';\nimport { useAgentRegistration } from '../../agent/registry';\nimport { headerSettingsAgent } from './header-settings.agent';\n\nfunction safeWriteStorage(key: string, value: string): void {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, value);\n } catch {\n /* Storage can throw in private mode — silent-fail per use-theme.ts. */\n }\n}\n\nfunction applyDocumentAttrs(locale: Locale): void {\n if (typeof document === 'undefined') return;\n const root = document.documentElement;\n root.lang = locale;\n root.dir = LOCALE_META[locale].dir;\n}\n\n/* ------------------------------------------------------------------ */\n/* CVA */\n/* ------------------------------------------------------------------ */\n\nconst wrapperVariants = cva('ds:inline-flex ds:items-center', {\n variants: {\n align: {\n start: '',\n end: '',\n },\n },\n defaultVariants: { align: 'end' },\n});\n\nconst dropdownContentClasses = [\n 'ds:w-[20rem] ds:p-[var(--spacing-xs)]',\n 'ds:rounded-[var(--radius-md)] ds:border ds:border-border',\n 'ds:bg-background ds:text-foreground ds:shadow-[var(--shadow-lg)]',\n].join(' ');\n\n/* ------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------ */\n\nexport interface HeaderSettingsProps\n extends\n Omit<HTMLAttributes<HTMLDivElement>, 'onChange'>,\n VariantProps<typeof wrapperVariants> {\n /** Anchor side for the dropdown. Defaults to `end` (matches LTR + RTL). */\n align?: 'start' | 'end';\n /**\n * Size of the cog trigger only. Forwards to the underlying\n * `IconButton`. Defaults to `md` to preserve the existing visual.\n * Use `sm` when composing alongside other `<Button size=\"sm\">`\n * actions in a header row — keeps the visual rhythm consistent.\n *\n * The internal dropdown chrome (Appearance toggle group, locale\n * picker, accessibility switch) stays at kit defaults regardless\n * — this prop only sizes the trigger.\n */\n size?: 'sm' | 'md' | 'lg';\n /** Disable the trigger entirely. */\n disabled?: boolean;\n}\n\nexport interface HeaderSettingsHandle {\n /**\n * Switch the active locale. Widened to `string` (vs. `Locale`) so\n * agent surfaces with untyped inputs can call through without\n * extra casting — invalid tags no-op silently.\n */\n setLocale: (next: string) => void;\n setTheme: (next: ThemePreference) => void;\n setAccessibility: (next: AccessibilityPreference) => void;\n}\n\n/* ------------------------------------------------------------------ */\n/* HeaderSettings */\n/* */\n/* Single button → single DropdownMenu surface. Inside the menu, the */\n/* \"Language\" section embeds `LocalePicker.SearchList` (the kit's */\n/* searchable list without its own trigger / popover) and the */\n/* \"Appearance\" section mirrors `ThemeToggle`'s menu-variant internals */\n/* using `DropdownMenu.RadioGroup` + `CheckboxItem`. Both sections */\n/* read/write the same hooks (`useLocale`, `useTheme`) that the */\n/* standalone components use, so there's no state duplication. */\n/* ------------------------------------------------------------------ */\n\nexport const HeaderSettings = forwardRef<HTMLDivElement, HeaderSettingsProps>(\n (props, ref) => {\n const {\n align = 'end',\n size = 'md',\n disabled = false,\n className,\n id,\n ...rest\n } = props as HeaderSettingsProps & { id?: string };\n\n const { t } = useTranslation();\n const theme = useTheme();\n const { setLocale: setLocaleI18n } = useLocale();\n\n const forwardedRef = useRef<HTMLDivElement | null>(null);\n useImperativeHandle(ref, () => forwardedRef.current as HTMLDivElement, []);\n\n // Same side-effect chain as LocalePicker's internal helper:\n // i18next.changeLanguage → document.dir/lang → persist.\n // Inlined here (rather than exported from locale-picker) because\n // it's three small calls; the LocalePicker.SearchList component\n // continues to own its own copy for inline use, and both apply\n // the same persistence key (`alfadocs-ui.locale`) so a write from\n // either path is visible to the other on next mount.\n const setLocaleWithPersistence = useCallback(\n (next: Locale) => {\n void setLocaleI18n(next);\n applyDocumentAttrs(next);\n safeWriteStorage(LOCALE_STORAGE_KEY, next);\n },\n [setLocaleI18n],\n );\n const setLocaleRef = useRef(setLocaleWithPersistence);\n setLocaleRef.current = setLocaleWithPersistence;\n\n const themeRef = useRef(theme);\n themeRef.current = theme;\n const agentHandle = useMemo<HeaderSettingsHandle>(\n () => ({\n setLocale: (next: string) => {\n // Mirrors LocalePicker's gating — silently drop unknown tags\n // rather than crash mid-cascade. `LOCALES_WITH_BUNDLES` is\n // re-imported via the LOCALE_META keys so this file doesn't\n // need the resources module on the build-agent-catalog path.\n if (Object.prototype.hasOwnProperty.call(LOCALE_META, next)) {\n setLocaleRef.current(next as Locale);\n }\n },\n setTheme: (next) => themeRef.current.setTheme(next),\n setAccessibility: (next) => themeRef.current.setAccessibility(next),\n }),\n [],\n );\n useAgentRegistration(headerSettingsAgent, agentHandle, id);\n\n const accessibleChecked = theme.accessibility === 'accessible';\n\n return (\n <div\n ref={forwardedRef}\n data-component=\"header-settings\"\n data-component-id={id}\n className={wrapperVariants({ align, className })}\n {...rest}\n >\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <IconButton\n size={size}\n disabled={disabled}\n icon={<Settings aria-hidden />}\n aria-label={t('navigation.headerSettings.trigger')}\n />\n </DropdownMenu.Trigger>\n <DropdownMenu.Portal>\n <DropdownMenu.Content\n align={align}\n sideOffset={8}\n className={dropdownContentClasses}\n // Search input inside the menu owns its own keyboard\n // capture (cmdk). Stop Radix Menu's typeahead from\n // intercepting letters typed into the search field —\n // `onKeyDownCapture` runs before the menu's listener.\n onKeyDownCapture={(event) => {\n const target = event.target as HTMLElement | null;\n if (\n target?.tagName === 'INPUT' &&\n // Always allow Escape so the menu can close.\n event.key !== 'Escape'\n ) {\n event.stopPropagation();\n }\n }}\n >\n <DropdownMenu.Label>\n {t('navigation.headerSettings.language.label')}\n </DropdownMenu.Label>\n {/* Render the kit's compact LocalePicker (its own\n Popover trigger + content). Clicking the trigger\n opens a nested popover containing the full\n searchable list — the HeaderSettings menu stays\n open behind it so the user can return to Appearance\n / Accessibility without re-opening.\n\n Wrapped in `role=\"group\"` so the menu's\n `aria-required-children` rule sees a permitted child\n role (the LocalePicker compact button alone would\n appear as a raw button child of `role=\"menu\"`). */}\n <div\n role=\"group\"\n aria-label={t('navigation.headerSettings.language.label')}\n className={[\n 'ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]',\n // Stretch the compact LocalePicker to the full menu\n // width so it reads as a single row affordance (not\n // a centred pill). The picker's root is\n // inline-flex; the `*:` child selector + `flex-1`\n // gives it `flex: 1 1 0%` once it's a child of the\n // flex container we make this div into.\n 'ds:flex ds:[&>*]:flex-1',\n ].join(' ')}\n >\n <LocalePicker variant=\"compact\" />\n </div>\n\n <DropdownMenu.Separator />\n\n <DropdownMenu.Label>\n {t('navigation.headerSettings.appearance.label')}\n </DropdownMenu.Label>\n {/* Horizontal segmented toggle (mirrors ThemeToggle's\n `split` variant) instead of stacked radio rows — uses\n fewer rows of menu real estate and reads as a single\n control. `role=\"radiogroup\"` keeps the screen-reader\n semantics correct, and the group is wrapped in\n `role=\"group\"` for the same reason the language\n search-list wrapper is — the menu's\n aria-required-children doesn't permit raw IconButtons\n as direct menu descendants. */}\n <div\n role=\"group\"\n aria-label={t('navigation.headerSettings.appearance.label')}\n className=\"ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-xs)]\"\n >\n <IconButtonGroup\n role=\"radiogroup\"\n mode=\"toggle-single\"\n size=\"sm\"\n aria-label={t('navigation.headerSettings.appearance.label')}\n value={theme.theme}\n onValueChange={(next) =>\n theme.setTheme(next as ThemePreference)\n }\n >\n <IconButton\n icon={<Sun aria-hidden />}\n aria-label={t('navigation.headerSettings.appearance.light')}\n value=\"light\"\n />\n <IconButton\n icon={<Moon aria-hidden />}\n aria-label={t('navigation.headerSettings.appearance.dark')}\n value=\"dark\"\n />\n <IconButton\n icon={<Monitor aria-hidden />}\n aria-label={t(\n 'navigation.headerSettings.appearance.system',\n )}\n value=\"system\"\n />\n </IconButtonGroup>\n </div>\n\n <DropdownMenu.Separator />\n\n {/* Accessible-mode toggle uses the kit's Switch primitive\n for a clearer visual affordance than a checkbox tick.\n Rendered inside a `presentation` row (not a\n DropdownMenu.CheckboxItem) — the Switch is focusable\n via Tab while the menu is open, so keyboard users\n still reach it; arrow keys keep moving between the\n three theme radios above without falling into the\n switch's roving collection.\n\n When the switch flips, `setAccessibility` writes\n through useTheme (the same store the standalone\n ThemeToggle uses) so document.documentElement gets\n the `theme-accessible` class instantly — including\n swapping `--font-sans` to Lexend for Latin scripts\n (see src/tokens/index.css). */}\n {/* `role=\"group\"` so the menu's `aria-required-children`\n (which only permits menuitem* / group / separator /\n menu inside `role=\"menu\"`) is satisfied — the Switch's\n `role=\"switch\"` would be a forbidden direct child of\n the menu. `aria-label` names the group so SR users\n hear \"Accessibility toggle, group\". */}\n <div\n role=\"group\"\n aria-label={t(\n 'navigation.headerSettings.appearance.accessible',\n )}\n className=\"ds:px-[var(--spacing-sm)] ds:py-[var(--spacing-sm)]\"\n >\n <Switch\n label={t('navigation.headerSettings.appearance.accessible')}\n labelSide=\"start\"\n size=\"sm\"\n checked={accessibleChecked}\n onCheckedChange={(next) =>\n theme.setAccessibility(next ? 'accessible' : 'default')\n }\n />\n </div>\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </div>\n );\n },\n);\n\nHeaderSettings.displayName = 'HeaderSettings';\n"],"names":["headerSettingsAgent","handle","args","safeWriteStorage","key","value","applyDocumentAttrs","locale","root","LOCALE_META","wrapperVariants","cva","dropdownContentClasses","HeaderSettings","forwardRef","props","ref","align","size","disabled","className","id","rest","t","useTranslation","theme","useTheme","setLocaleI18n","useLocale","forwardedRef","useRef","useImperativeHandle","setLocaleWithPersistence","useCallback","next","LOCALE_STORAGE_KEY","setLocaleRef","themeRef","agentHandle","useMemo","useAgentRegistration","accessibleChecked","jsx","jsxs","DropdownMenu","IconButton","Settings","event","target","LocalePicker","IconButtonGroup","Sun","Moon","Monitor","Switch"],"mappings":"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"}
|