@handamade/psi-react 0.12.0 → 0.13.0

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @handamade/psi-react
2
2
 
3
- 28 React 19 components consuming @handamade/psi-tokens. Zero runtime dependencies, CSS Modules, full TypeScript support.
3
+ 32 React 19 components consuming @handamade/psi-tokens. Zero runtime dependencies, CSS Modules, full TypeScript support.
4
4
 
5
5
  ## Installation
6
6
 
@@ -0,0 +1,19 @@
1
+ import type { ReactNode, Ref } from "react";
2
+ export interface TabProps {
3
+ /** Pairs this tab with the `TabPanel` of the same value. */
4
+ value: string;
5
+ /** Label — keep it to one or two words. */
6
+ children: ReactNode;
7
+ /** Skipped by arrow navigation and not selectable, but still announced. */
8
+ disabled?: boolean;
9
+ className?: string;
10
+ /** Forwarded ref to the underlying `<button>`. */
11
+ ref?: Ref<HTMLButtonElement>;
12
+ }
13
+ /** One `role="tab"` (D67). Renders a real `<button>`.
14
+ *
15
+ * `disabled` sets `aria-disabled` rather than the `disabled` attribute, so the
16
+ * tab stays discoverable to assistive tech while being skipped by roving
17
+ * navigation — the same choice MenuItem made in D53. */
18
+ export declare function Tab({ value, children, disabled, className, ref }: TabProps): import("react").JSX.Element;
19
+ //# sourceMappingURL=Tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../src/Tabs/Tab.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAI5C,MAAM,WAAW,QAAQ;IACvB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,QAAQ,EAAE,SAAS,CAAC;IACpB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,GAAG,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;CAC9B;AAED;;;;wDAIwD;AACxD,wBAAgB,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAgB,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,QAAQ,+BAyBlF"}
@@ -0,0 +1,19 @@
1
+ import type { ReactNode, Ref } from "react";
2
+ export interface TabListProps {
3
+ /**
4
+ * Accessible name for the tab set. Declared here rather than inherited so
5
+ * docgen keeps it in the manifest (D60) — a tablist without a name is
6
+ * announced as an unlabelled group, and the prop would otherwise be
7
+ * invisible to an agent reading the manifest.
8
+ */
9
+ "aria-label"?: string;
10
+ /** One `Tab` per view. */
11
+ children: ReactNode;
12
+ className?: string;
13
+ /** Forwarded ref to the tablist element. */
14
+ ref?: Ref<HTMLDivElement>;
15
+ }
16
+ /** The `role="tablist"` container (D67). Owns the roving tabindex: the whole
17
+ * list is one Tab stop, and the arrow keys move between tabs inside it. */
18
+ export declare function TabList({ "aria-label": ariaLabel, children, className, ref }: TabListProps): import("react").JSX.Element;
19
+ //# sourceMappingURL=TabList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabList.d.ts","sourceRoot":"","sources":["../../src/Tabs/TabList.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAK5C,MAAM,WAAW,YAAY;IAC3B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0BAA0B;IAC1B,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED;2EAC2E;AAC3E,wBAAgB,OAAO,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,YAAY,+BAwB1F"}
@@ -0,0 +1,23 @@
1
+ import type { ReactNode, Ref } from "react";
2
+ export interface TabPanelProps {
3
+ /** Pairs this panel with the `Tab` of the same value. */
4
+ value: string;
5
+ /** The view for this tab. Rendered even when unselected, then `hidden`. */
6
+ children: ReactNode;
7
+ className?: string;
8
+ /** Forwarded ref to the panel element. */
9
+ ref?: Ref<HTMLDivElement>;
10
+ }
11
+ /** One `role="tabpanel"` (D67).
12
+ *
13
+ * Every panel renders; unselected ones carry `hidden`. Returning null instead
14
+ * would leave `aria-controls` on every unselected tab pointing at an element
15
+ * that does not exist, and would throw away DOM state — a half-filled form in
16
+ * a panel would lose its values on each tab switch. The cost is a heavier DOM
17
+ * when panels are large; the answer to that is rendering less inside the
18
+ * panel, not unmounting it behind the consumer's back.
19
+ *
20
+ * `tabIndex={0}` because a panel whose content has no focusable element would
21
+ * otherwise be unreachable by keyboard. */
22
+ export declare function TabPanel({ value, children, className, ref }: TabPanelProps): import("react").JSX.Element;
23
+ //# sourceMappingURL=TabPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TabPanel.d.ts","sourceRoot":"","sources":["../../src/Tabs/TabPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAI5C,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0CAA0C;IAC1C,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED;;;;;;;;;;2CAU2C;AAC3C,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,aAAa,+BAiB1E"}
@@ -0,0 +1,45 @@
1
+ import type { ReactNode, Ref } from "react";
2
+ export type TabsOrientation = "horizontal" | "vertical";
3
+ export interface TabsContextValue {
4
+ value: string;
5
+ onValueChange: (value: string) => void;
6
+ orientation: TabsOrientation;
7
+ /** Stable per-instance prefix, so two tab sets on one page never collide. */
8
+ idPrefix: string;
9
+ }
10
+ export declare const TabsContext: import("react").Context<TabsContextValue | null>;
11
+ /** Throws rather than returning a default: a `Tab` outside `Tabs` would
12
+ * silently render an unwired, unselectable button, and the failure would
13
+ * surface far from its cause. */
14
+ export declare function useTabsContext(component: string): TabsContextValue;
15
+ export interface TabsProps {
16
+ /** Controlled selected tab, matched against each `Tab`/`TabPanel` value. */
17
+ value: string;
18
+ /** Fires with the newly selected value; the consumer flips `value`. */
19
+ onValueChange: (value: string) => void;
20
+ /** Axis of the tab list, which also picks the arrow keys. @default "horizontal" */
21
+ orientation?: TabsOrientation;
22
+ /** A `TabList` and one `TabPanel` per tab. */
23
+ children: ReactNode;
24
+ className?: string;
25
+ /** Forwarded ref to the wrapper `<div>`. */
26
+ ref?: Ref<HTMLDivElement>;
27
+ }
28
+ /** Tab set root (D67) — holds no selection state of its own, following D50,
29
+ * D53 and D62: `value` and `onValueChange` are required and there is no
30
+ * `defaultValue`.
31
+ *
32
+ * Values are strings rather than indices because an index breaks the moment a
33
+ * tab is inserted, and real tab sets map to ids. `Tab` and `TabPanel` pair by
34
+ * value, so their source order need not match.
35
+ *
36
+ * Activation is automatic: arrow keys move focus and selection together. That
37
+ * is the APG default where panel content is already available, and manual
38
+ * activation is deliberately not offered as a mode — a consumer for whom
39
+ * activating a panel is expensive already controls what the panel renders. */
40
+ export declare function Tabs({ value, onValueChange, orientation, children, className, ref, }: TabsProps): import("react").JSX.Element;
41
+ /** Ids are derived from the value so a tab and its panel find each other
42
+ * without the consumer wiring anything, and stay unique across tab sets. */
43
+ export declare function tabId(prefix: string, value: string): string;
44
+ export declare function panelId(prefix: string, value: string): string;
45
+ //# sourceMappingURL=Tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../src/Tabs/Tabs.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAG5C,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,EAAE,eAAe,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,WAAW,kDAA+C,CAAC;AAExE;;iCAEiC;AACjC,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAUlE;AAED,MAAM,WAAW,SAAS;IACxB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,mFAAmF;IACnF,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,8CAA8C;IAC9C,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED;;;;;;;;;;;8EAW8E;AAC9E,wBAAgB,IAAI,CAAC,EACnB,KAAK,EACL,aAAa,EACb,WAA0B,EAC1B,QAAQ,EACR,SAAS,EACT,GAAG,GACJ,EAAE,SAAS,+BAmBX;AAED;4EAC4E;AAC5E,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7D"}
@@ -0,0 +1,21 @@
1
+ import type { KeyboardEvent, RefObject } from "react";
2
+ import type { TabsOrientation } from "./Tabs.js";
3
+ interface Options {
4
+ listRef: RefObject<HTMLDivElement | null>;
5
+ orientation: TabsOrientation;
6
+ onValueChange: (value: string) => void;
7
+ }
8
+ /** Roving-tabindex keyboard navigation for Tabs (D67): arrow keys along the
9
+ * orientation's axis with wrap, Home/End, disabled tabs skipped, and selection
10
+ * following focus (automatic activation).
11
+ *
12
+ * Deliberately separate from useMenuKeyboard rather than abstracted with it.
13
+ * They share "roving tabindex with wrap and Home/End" and diverge on
14
+ * everything else: Menu is vertical-only, adds character typeahead, handles
15
+ * Esc, and returns focus to a trigger; Tabs is bi-axial, has none of those, and
16
+ * moves selection as it moves focus. A shared hook would take an options object
17
+ * with more branches than either caller uses. If a third caller appears, that
18
+ * is the signal to abstract. */
19
+ export declare function useTabsKeyboard({ listRef, orientation, onValueChange }: Options): (e: KeyboardEvent<HTMLDivElement>) => void;
20
+ export {};
21
+ //# sourceMappingURL=useTabsKeyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTabsKeyboard.d.ts","sourceRoot":"","sources":["../../src/Tabs/useTabsKeyboard.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,UAAU,OAAO;IACf,OAAO,EAAE,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC1C,WAAW,EAAE,eAAe,CAAC;IAC7B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAED;;;;;;;;;;gCAUgC;AAChC,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE,OAAO,OAwBxE,aAAa,CAAC,cAAc,CAAC,UAoCpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"a11y-meta.d.ts","sourceRoot":"","sources":["../src/a11y-meta.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAoH9C,CAAC"}
1
+ {"version":3,"file":"a11y-meta.d.ts","sourceRoot":"","sources":["../src/a11y-meta.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAgJ9C,CAAC"}
package/dist/index.d.ts CHANGED
@@ -53,6 +53,14 @@ export { ToastRegion } from "./Toast/ToastRegion.js";
53
53
  export type { ToastRegionProps, ToastPlacement } from "./Toast/ToastRegion.js";
54
54
  export { ToastProvider } from "./Toast/ToastProvider.js";
55
55
  export type { ToastProviderProps } from "./Toast/ToastProvider.js";
56
+ export { Tabs, TabsContext } from "./Tabs/Tabs.js";
57
+ export type { TabsProps, TabsOrientation, TabsContextValue } from "./Tabs/Tabs.js";
58
+ export { TabList } from "./Tabs/TabList.js";
59
+ export type { TabListProps } from "./Tabs/TabList.js";
60
+ export { Tab } from "./Tabs/Tab.js";
61
+ export type { TabProps } from "./Tabs/Tab.js";
62
+ export { TabPanel } from "./Tabs/TabPanel.js";
63
+ export type { TabPanelProps } from "./Tabs/TabPanel.js";
56
64
  export { useToast, ToastContext } from "./Toast/useToast.js";
57
65
  export type { ToastHandle, ToastOptions } from "./Toast/useToast.js";
58
66
  export { IconPlus, IconMinus, IconClose, IconCheck, IconChevronDown, IconChevronRight, IconSearch, IconSettings, IconUser, IconEdit, IconTrash, IconCopy, IconExternalLink, IconEye, IconEyeOff, IconLoader, IconArrowDown, IconArrowUpRight, IconLinkedIn, IconGitHub, IconX, IconInstagram, IconInfo, IconAlertTriangle, IconAlertCircle, } from "./icons/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}