@hjmds/react 1.40.0 → 1.41.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/dist/choice-row.d.ts +22 -0
- package/dist/choice-row.d.ts.map +1 -0
- package/dist/choice-row.js +31 -0
- package/dist/choice-row.js.map +1 -0
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/evidence.js.map +1 -1
- package/dist/public-exports.generated.d.ts +1 -0
- package/dist/public-exports.generated.d.ts.map +1 -1
- package/dist/public-exports.generated.js +3 -0
- package/dist/public-exports.generated.js.map +1 -1
- package/dist/reaction-picker.d.ts.map +1 -1
- package/dist/reaction-picker.js +2 -4
- package/dist/reaction-picker.js.map +1 -1
- package/dist/styles.css +40 -30
- package/dist/styles.layered.css +40 -30
- package/dist/time-picker.d.ts.map +1 -1
- package/dist/time-picker.js +96 -32
- package/dist/time-picker.js.map +1 -1
- package/package.json +8 -3
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type ChoiceRowItem } from "@hjmds/design-contracts/choice-row";
|
|
3
|
+
export type { ChoiceRowItem } from "@hjmds/design-contracts/choice-row";
|
|
4
|
+
export type ChoiceRowProps<Value extends string = string> = Readonly<{
|
|
5
|
+
title: string;
|
|
6
|
+
items: readonly ChoiceRowItem<Value>[];
|
|
7
|
+
/** The product-confirmed value; update it only after the save succeeds. */
|
|
8
|
+
value: Value | null;
|
|
9
|
+
/** A returned promise keeps the sheet open and busy; rejection keeps it open with `errorLabel`. */
|
|
10
|
+
onValueChange: (value: Value) => void | Promise<void>;
|
|
11
|
+
closeLabel: string;
|
|
12
|
+
errorLabel: string;
|
|
13
|
+
sheetTitle?: string;
|
|
14
|
+
sheetDescription?: string;
|
|
15
|
+
placeholder?: string;
|
|
16
|
+
leading?: ReactNode;
|
|
17
|
+
trailing?: ReactNode;
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
loading?: boolean;
|
|
20
|
+
}>;
|
|
21
|
+
export declare function ChoiceRow<Value extends string = string>({ title, items, value, onValueChange, closeLabel, errorLabel, sheetTitle, sheetDescription, placeholder, leading, trailing, disabled, loading }: ChoiceRowProps<Value>): import("react").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=choice-row.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choice-row.d.ts","sourceRoot":"","sources":["../src/choice-row.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAK1F,YAAY,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACxE,MAAM,MAAM,cAAc,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAAC;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;IACvC,2EAA2E;IAC3E,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,mGAAmG;IACnG,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,wBAAgB,SAAS,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAgB,EAAE,OAAe,EAAE,EAAE,cAAc,CAAC,KAAK,CAAC,+BAyB9O"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { resolveChoiceRow } from "@hjmds/design-contracts/choice-row";
|
|
4
|
+
import { ListRow } from "./display.js";
|
|
5
|
+
import { Sheet } from "./overlays.js";
|
|
6
|
+
import { RadioGroup } from "./selection.js";
|
|
7
|
+
export function ChoiceRow({ title, items, value, onValueChange, closeLabel, errorLabel, sheetTitle, sheetDescription, placeholder, leading, trailing, disabled = false, loading = false }) {
|
|
8
|
+
const { valueLabel } = resolveChoiceRow({ title, items, value, ...(placeholder === undefined ? {} : { placeholder }) });
|
|
9
|
+
if (!closeLabel.trim() || !errorLabel.trim())
|
|
10
|
+
throw new TypeError("ChoiceRow text must not be empty");
|
|
11
|
+
const [open, setOpen] = useState(false);
|
|
12
|
+
const [pending, setPending] = useState(false);
|
|
13
|
+
const [failed, setFailed] = useState(false);
|
|
14
|
+
const choose = (raw) => {
|
|
15
|
+
// RadioGroup only offers the values passed in `items`, so the string is one of `Value`.
|
|
16
|
+
const next = raw;
|
|
17
|
+
if (next === value || pending)
|
|
18
|
+
return;
|
|
19
|
+
setFailed(false);
|
|
20
|
+
const result = onValueChange(next);
|
|
21
|
+
if (!result) {
|
|
22
|
+
setOpen(false);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
setPending(true);
|
|
26
|
+
result.then(() => { setPending(false); setOpen(false); }, () => { setPending(false); setFailed(true); });
|
|
27
|
+
};
|
|
28
|
+
return _jsxs(_Fragment, { children: [_jsx(ListRow, { title: title, description: valueLabel, ...(leading === undefined ? {} : { leading }), ...(trailing === undefined ? {} : { trailing }), disabled: disabled, loading: loading, onClick: () => { setFailed(false); setOpen(true); } }), _jsx(Sheet, { open: open, onOpenChange: (next) => { if (!pending)
|
|
29
|
+
setOpen(next); }, title: sheetTitle ?? title, closeLabel: closeLabel, busy: pending, ...(sheetDescription === undefined ? {} : { description: sheetDescription }), children: _jsx(RadioGroup, { accessibilityLabel: sheetTitle ?? title, orientation: "vertical", value: value, items: items, disabled: pending, ...(failed ? { error: errorLabel } : {}), onValueChange: choose }) })] });
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=choice-row.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choice-row.js","sourceRoot":"","sources":["../src/choice-row.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useState, type ReactNode } from \"react\";\nimport { resolveChoiceRow, type ChoiceRowItem } from \"@hjmds/design-contracts/choice-row\";\nimport { ListRow } from \"./display.js\";\nimport { Sheet } from \"./overlays.js\";\nimport { RadioGroup } from \"./selection.js\";\n\nexport type { ChoiceRowItem } from \"@hjmds/design-contracts/choice-row\";\nexport type ChoiceRowProps<Value extends string = string> = Readonly<{\n title: string;\n items: readonly ChoiceRowItem<Value>[];\n /** The product-confirmed value; update it only after the save succeeds. */\n value: Value | null;\n /** A returned promise keeps the sheet open and busy; rejection keeps it open with `errorLabel`. */\n onValueChange: (value: Value) => void | Promise<void>;\n closeLabel: string;\n errorLabel: string;\n sheetTitle?: string;\n sheetDescription?: string;\n placeholder?: string;\n leading?: ReactNode;\n trailing?: ReactNode;\n disabled?: boolean;\n loading?: boolean;\n}>;\n\nexport function ChoiceRow<Value extends string = string>({ title, items, value, onValueChange, closeLabel, errorLabel, sheetTitle, sheetDescription, placeholder, leading, trailing, disabled = false, loading = false }: ChoiceRowProps<Value>) {\n const { valueLabel } = resolveChoiceRow({ title, items, value, ...(placeholder === undefined ? {} : { placeholder }) });\n if (!closeLabel.trim() || !errorLabel.trim()) throw new TypeError(\"ChoiceRow text must not be empty\");\n const [open, setOpen] = useState(false);\n const [pending, setPending] = useState(false);\n const [failed, setFailed] = useState(false);\n const choose = (raw: string) => {\n // RadioGroup only offers the values passed in `items`, so the string is one of `Value`.\n const next = raw as Value;\n if (next === value || pending) return;\n setFailed(false);\n const result = onValueChange(next);\n if (!result) { setOpen(false); return; }\n setPending(true);\n result.then(() => { setPending(false); setOpen(false); }, () => { setPending(false); setFailed(true); });\n };\n return <>\n <ListRow title={title} description={valueLabel} {...(leading === undefined ? {} : { leading })} {...(trailing === undefined ? {} : { trailing })} disabled={disabled} loading={loading}\n onClick={() => { setFailed(false); setOpen(true); }} />\n <Sheet open={open} onOpenChange={(next) => { if (!pending) setOpen(next); }} title={sheetTitle ?? title} closeLabel={closeLabel} busy={pending}\n {...(sheetDescription === undefined ? {} : { description: sheetDescription })}>\n <RadioGroup accessibilityLabel={sheetTitle ?? title} orientation=\"vertical\" value={value} items={items} disabled={pending}\n {...(failed ? { error: errorLabel } : {})} onValueChange={choose} />\n </Sheet>\n </>;\n}\n"]}
|
package/dist/evidence.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export type ReactRendererEvidenceManifest = Readonly<{
|
|
|
34
34
|
export declare const reactRendererEvidence: {
|
|
35
35
|
readonly schemaVersion: 2;
|
|
36
36
|
readonly packageName: "@hjmds/react";
|
|
37
|
-
readonly packageVersion: "1.
|
|
37
|
+
readonly packageVersion: "1.41.0";
|
|
38
38
|
readonly surface: "web";
|
|
39
39
|
readonly components: Readonly<{
|
|
40
40
|
/** Canonical component id from the design-contracts catalog. */
|
package/dist/evidence.js
CHANGED
|
@@ -135,7 +135,7 @@ const activeWebEntries = componentCatalog.filter((entry) => {
|
|
|
135
135
|
export const reactRendererEvidence = {
|
|
136
136
|
schemaVersion: reactRendererEvidenceSchemaVersion,
|
|
137
137
|
packageName: "@hjmds/react",
|
|
138
|
-
packageVersion: "1.
|
|
138
|
+
packageVersion: "1.41.0",
|
|
139
139
|
surface: "web",
|
|
140
140
|
components: activeWebEntries.map(derivedClaim),
|
|
141
141
|
};
|
package/dist/evidence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ShowcaseScenarioId } from \"@hjmds/design-contracts/showcase\";\nimport { getRequiredShowcaseEvidence } from \"@hjmds/design-contracts/showcase\";\nimport { componentCatalog, componentIdOf, getComponentSurfaceStatus, type ComponentCatalogEntry } from \"@hjmds/design-contracts/catalog\";\nimport { publicExportEntries } from \"./public-exports.generated.js\";\n\nexport const reactRendererEvidenceSchemaVersion = 2 as const;\n\nexport type ReactRendererEvidenceScenario = Exclude<ShowcaseScenarioId, \"contract\" | \"native-actions\">;\n\nexport type ReactRendererEvidenceComponent = Readonly<{\n /** Canonical component id from the design-contracts catalog. */\n componentId: string;\n /** Public symbols that implement this contract on the declared subpath. */\n exportNames: readonly string[];\n /** Granular @hjmds/react export used by consumers. */\n subpath: `./${string}`;\n /** Scenarios supported by automated first-party renderer evidence. */\n scenarios: readonly ReactRendererEvidenceScenario[];\n /** Repository-local executable proof for every claimed scenario. */\n proofs: readonly Readonly<{\n scenarios: readonly ReactRendererEvidenceScenario[];\n file: `test/${string}.test.tsx`;\n caseId: string;\n }>[];\n}>;\n\nexport type ReactRendererEvidenceManifest = Readonly<{\n schemaVersion: typeof reactRendererEvidenceSchemaVersion;\n packageName: \"@hjmds/react\";\n packageVersion: string;\n surface: \"web\";\n components: readonly ReactRendererEvidenceComponent[];\n}>;\n\nconst defaultProofFile = \"test/default-render.ssr.test.tsx\" as const;\nconst matrixProofFile = \"test/scenario-matrix.browser.test.tsx\" as const;\nconst stableCoreProofFile = \"test/stable-core.browser.test.tsx\" as const;\n\ntype ProofFile = `test/${string}.test.tsx`;\n\n/**\n * Scenarios a component does not pass yet. Each entry is promotion debt that\n * the generated evidence projection reports; remove it when the component is\n * fixed and the matrix case passes. Stable surfaces cannot carry a gap\n * (scripts/check-workspace-sync.mjs).\n */\nconst webScenarioGaps: Readonly<Record<string, readonly ReactRendererEvidenceScenario[]>> = {};\n\n/**\n * Proofs that live outside the shared default/matrix files: keyboard behavior in a dedicated browser test,\n * long copy proven inside a portal by the component's own test, or a whole matrix run in a component file.\n * Everything else about a claim derives from the catalog row (2026-10-18 registration input).\n */\ntype ClaimExtras = Readonly<{\n /** Extra proofs; their scenarios are removed from the shared matrix proof. */\n proofs?: readonly Readonly<{ scenarios: readonly ReactRendererEvidenceScenario[]; file: ProofFile }>[];\n /** Hooks or helpers published beside the component symbols on the same subpath. */\n exportNames?: readonly string[];\n}>;\n\nconst keyboard = (file: ProofFile = stableCoreProofFile): ClaimExtras => ({ proofs: [{ scenarios: [\"keyboard\"], file }] });\nconst keyboardAndLongCopy = (file: ProofFile): ClaimExtras => ({ proofs: [{ scenarios: [\"keyboard\", \"long-copy\"], file }] });\n\nconst claimExtras: Readonly<Record<string, ClaimExtras>> = {\n \"time-picker\": keyboard(\"test/time-picker.browser.test.tsx\"),\n \"design-system-provider\": { exportNames: [\"useHjmTheme\"] },\n layout: keyboard(),\n link: keyboard(),\n field: keyboard(),\n \"search-field\": keyboard(),\n \"password-field\": keyboard(),\n \"otp-field\": keyboard(),\n \"number-field\": keyboard(),\n slider: keyboard(),\n form: keyboard(\"test/form.keyboard.browser.test.tsx\"),\n \"date-picker\": keyboard(),\n calendar: keyboard(\"test/calendar.browser.test.tsx\"),\n \"file-picker\": keyboard(\"test/file-picker.keyboard.browser.test.tsx\"),\n checkbox: keyboard(),\n \"checkbox-group\": keyboard(),\n \"radio-group\": keyboard(),\n switch: keyboard(),\n \"segmented-control\": keyboard(),\n chip: keyboard(),\n tabs: keyboard(\"test/tabs.keyboard.browser.test.tsx\"),\n breadcrumb: keyboard(\"test/page-navigation.browser.test.tsx\"),\n pagination: keyboard(\"test/pagination.keyboard.browser.test.tsx\"),\n popover: keyboardAndLongCopy(\"test/popover.browser.test.tsx\"),\n \"side-panel\": keyboardAndLongCopy(\"test/side-panel.browser.test.tsx\"),\n splitter: keyboard(\"test/splitter.browser.test.tsx\"),\n tour: keyboardAndLongCopy(\"test/tour.browser.test.tsx\"),\n tree: keyboard(\"test/tree.browser.test.tsx\"),\n \"transfer-list\": keyboard(\"test/transfer-list.browser.test.tsx\"),\n mentions: keyboard(\"test/mentions.browser.test.tsx\"),\n \"command-palette\": keyboardAndLongCopy(\"test/command-palette.browser.test.tsx\"),\n agreement: keyboard(\"test/agreement.keyboard.browser.test.tsx\"),\n \"toggle-group\": keyboard(),\n \"tags-input\": keyboard(),\n \"skip-nav\": keyboardAndLongCopy(\"test/skip-nav.browser.test.tsx\"),\n sidebar: keyboard(\"test/sidebar.browser.test.tsx\"),\n \"date-range-picker\": keyboard(\"test/date-range.keyboard.browser.test.tsx\"),\n \"auth-provider-button\": keyboard(),\n \"data-table\": keyboard(\"test/data-table.keyboard.browser.test.tsx\"),\n collapsible: keyboard(\"test/collapsible.keyboard.browser.test.tsx\"),\n \"context-menu\": keyboardAndLongCopy(\"test/context-menu.interactions.browser.test.tsx\"),\n menubar: keyboard(\"test/menubar.keyboard.browser.test.tsx\"),\n anchor: keyboard(\"test/anchor.browser.test.tsx\"),\n \"bottom-navigation\": keyboard(\"test/bottom-navigation.keyboard.browser.test.tsx\"),\n \"load-more\": keyboard(\"test/load-more.interactions.browser.test.tsx\"),\n carousel: keyboard(\"test/carousel.browser.test.tsx\"),\n \"floating-action-button\": keyboard(),\n accordion: keyboard(\"test/accordion.keyboard.browser.test.tsx\"),\n \"upload-item\": keyboard(\"test/upload-item.browser.test.tsx\"),\n // ThinkingOrb runs its whole environment matrix in its own file (canvas timing), not in scenario-matrix.\n \"thinking-orb\": { proofs: [{ scenarios: [\"dark\", \"large-text\", \"rtl\", \"reduced-motion\", \"accessibility\"], file: \"test/thinking-orb.browser.test.tsx\" }] },\n \"color-picker\": keyboard(\"test/web-additions.browser.test.tsx\"),\n // SSR proves semantics but cannot catch the close-only row seen in BurnTok.\n // Keep real geometry evidence attached without promoting catalog maturity.\n toast: {\n exportNames: [\"useToast\"],\n proofs: [\n { scenarios: [\"keyboard\"], file: stableCoreProofFile },\n { scenarios: [\"dark\", \"long-copy\", \"large-text\", \"rtl\"], file: \"test/toast-layout.browser.test.tsx\" },\n ],\n },\n select: keyboard(),\n combobox: keyboard(),\n dialog: keyboard(\"test/advanced.browser.test.tsx\"),\n \"alert-dialog\": keyboardAndLongCopy(\"test/alert-dialog.keyboard.browser.test.tsx\"),\n sheet: keyboardAndLongCopy(\"test/sheet-layout.browser.test.tsx\"),\n tooltip: keyboard(\"test/tooltip.browser.test.tsx\"),\n menu: keyboardAndLongCopy(\"test/menu.keyboard.browser.test.tsx\"),\n};\n\nconst exportEntries: Readonly<Record<string, readonly `./${string}`[] | undefined>> = publicExportEntries;\n\n/**\n * One claim per active Web row of the catalog. The subpath is the symbol's canonical granular entry, the export\n * names are the row's own symbol plus the companions published on that entry, and the scenarios are the row's\n * required Web evidence minus recorded gaps. Keyboard is never implied: it comes only from a dedicated proof.\n */\nfunction derivedClaim(entry: ComponentCatalogEntry): ReactRendererEvidenceComponent {\n const componentId = componentIdOf(entry);\n const extras = claimExtras[componentId] ?? {};\n const symbols = entry.name === \"DesignSystemProvider\" ? [\"HjmProvider\"] : [entry.name, ...(entry.companions ?? [])];\n // A row whose own name is not a symbol (Chart) claims through its first published companion.\n const subpath = symbols.map((symbol) => exportEntries[symbol]?.[0]).find((entry) => entry !== undefined);\n if (!subpath) throw new Error(`${entry.name} has no granular @hjmds/react export to claim evidence on`);\n const exportNames = [\n ...symbols.filter((symbol) => exportEntries[symbol]?.includes(subpath)),\n ...(extras.exportNames ?? []),\n ];\n const required = getRequiredShowcaseEvidence(entry).find((evidence) => evidence.surface === \"web\")?.scenarios ?? [];\n const gaps = webScenarioGaps[componentId] ?? [];\n const extraProofs = extras.proofs ?? [];\n const proven = new Set(extraProofs.flatMap((proof) => proof.scenarios));\n const matrix = required.filter((scenario): scenario is ReactRendererEvidenceScenario =>\n scenario !== \"default\" && scenario !== \"keyboard\" && scenario !== \"native-actions\" && scenario !== \"contract\"\n && !gaps.includes(scenario as ReactRendererEvidenceScenario) && !proven.has(scenario as ReactRendererEvidenceScenario));\n const proofs = [\n { scenarios: [\"default\" as const], file: defaultProofFile, caseId: componentId },\n ...(matrix.length === 0 ? [] : [{ scenarios: matrix, file: matrixProofFile, caseId: componentId }]),\n ...extraProofs.map((proof) => ({ ...proof, caseId: componentId })),\n ];\n return {\n componentId,\n exportNames,\n subpath,\n scenarios: proofs.flatMap((proof) => proof.scenarios),\n proofs,\n };\n}\n\nconst activeWebEntries: readonly ComponentCatalogEntry[] = componentCatalog.filter((entry) => {\n const status = getComponentSurfaceStatus(entry, \"web\");\n return status === \"stable\" || status === \"beta\";\n});\n\n/**\n * First-party Web renderer claims. Scenario axes remain fail-closed: the\n * default scenario is an SSR render, the environment and accessibility\n * scenarios are computed-style assertions in scenario-matrix.browser.\n * Keyboard and cross-platform parity remain fail-closed until dedicated\n * interaction or paired-renderer proofs are mapped one-to-one.\n */\nexport const reactRendererEvidence = {\n schemaVersion: reactRendererEvidenceSchemaVersion,\n packageName: \"@hjmds/react\",\n packageVersion: \"1.40.0\",\n surface: \"web\",\n components: activeWebEntries.map(derivedClaim),\n} as const satisfies ReactRendererEvidenceManifest;\n"]}
|
|
1
|
+
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ShowcaseScenarioId } from \"@hjmds/design-contracts/showcase\";\nimport { getRequiredShowcaseEvidence } from \"@hjmds/design-contracts/showcase\";\nimport { componentCatalog, componentIdOf, getComponentSurfaceStatus, type ComponentCatalogEntry } from \"@hjmds/design-contracts/catalog\";\nimport { publicExportEntries } from \"./public-exports.generated.js\";\n\nexport const reactRendererEvidenceSchemaVersion = 2 as const;\n\nexport type ReactRendererEvidenceScenario = Exclude<ShowcaseScenarioId, \"contract\" | \"native-actions\">;\n\nexport type ReactRendererEvidenceComponent = Readonly<{\n /** Canonical component id from the design-contracts catalog. */\n componentId: string;\n /** Public symbols that implement this contract on the declared subpath. */\n exportNames: readonly string[];\n /** Granular @hjmds/react export used by consumers. */\n subpath: `./${string}`;\n /** Scenarios supported by automated first-party renderer evidence. */\n scenarios: readonly ReactRendererEvidenceScenario[];\n /** Repository-local executable proof for every claimed scenario. */\n proofs: readonly Readonly<{\n scenarios: readonly ReactRendererEvidenceScenario[];\n file: `test/${string}.test.tsx`;\n caseId: string;\n }>[];\n}>;\n\nexport type ReactRendererEvidenceManifest = Readonly<{\n schemaVersion: typeof reactRendererEvidenceSchemaVersion;\n packageName: \"@hjmds/react\";\n packageVersion: string;\n surface: \"web\";\n components: readonly ReactRendererEvidenceComponent[];\n}>;\n\nconst defaultProofFile = \"test/default-render.ssr.test.tsx\" as const;\nconst matrixProofFile = \"test/scenario-matrix.browser.test.tsx\" as const;\nconst stableCoreProofFile = \"test/stable-core.browser.test.tsx\" as const;\n\ntype ProofFile = `test/${string}.test.tsx`;\n\n/**\n * Scenarios a component does not pass yet. Each entry is promotion debt that\n * the generated evidence projection reports; remove it when the component is\n * fixed and the matrix case passes. Stable surfaces cannot carry a gap\n * (scripts/check-workspace-sync.mjs).\n */\nconst webScenarioGaps: Readonly<Record<string, readonly ReactRendererEvidenceScenario[]>> = {};\n\n/**\n * Proofs that live outside the shared default/matrix files: keyboard behavior in a dedicated browser test,\n * long copy proven inside a portal by the component's own test, or a whole matrix run in a component file.\n * Everything else about a claim derives from the catalog row (2026-10-18 registration input).\n */\ntype ClaimExtras = Readonly<{\n /** Extra proofs; their scenarios are removed from the shared matrix proof. */\n proofs?: readonly Readonly<{ scenarios: readonly ReactRendererEvidenceScenario[]; file: ProofFile }>[];\n /** Hooks or helpers published beside the component symbols on the same subpath. */\n exportNames?: readonly string[];\n}>;\n\nconst keyboard = (file: ProofFile = stableCoreProofFile): ClaimExtras => ({ proofs: [{ scenarios: [\"keyboard\"], file }] });\nconst keyboardAndLongCopy = (file: ProofFile): ClaimExtras => ({ proofs: [{ scenarios: [\"keyboard\", \"long-copy\"], file }] });\n\nconst claimExtras: Readonly<Record<string, ClaimExtras>> = {\n \"time-picker\": keyboard(\"test/time-picker.browser.test.tsx\"),\n \"design-system-provider\": { exportNames: [\"useHjmTheme\"] },\n layout: keyboard(),\n link: keyboard(),\n field: keyboard(),\n \"search-field\": keyboard(),\n \"password-field\": keyboard(),\n \"otp-field\": keyboard(),\n \"number-field\": keyboard(),\n slider: keyboard(),\n form: keyboard(\"test/form.keyboard.browser.test.tsx\"),\n \"date-picker\": keyboard(),\n calendar: keyboard(\"test/calendar.browser.test.tsx\"),\n \"file-picker\": keyboard(\"test/file-picker.keyboard.browser.test.tsx\"),\n checkbox: keyboard(),\n \"checkbox-group\": keyboard(),\n \"radio-group\": keyboard(),\n switch: keyboard(),\n \"segmented-control\": keyboard(),\n chip: keyboard(),\n tabs: keyboard(\"test/tabs.keyboard.browser.test.tsx\"),\n breadcrumb: keyboard(\"test/page-navigation.browser.test.tsx\"),\n pagination: keyboard(\"test/pagination.keyboard.browser.test.tsx\"),\n popover: keyboardAndLongCopy(\"test/popover.browser.test.tsx\"),\n \"side-panel\": keyboardAndLongCopy(\"test/side-panel.browser.test.tsx\"),\n splitter: keyboard(\"test/splitter.browser.test.tsx\"),\n tour: keyboardAndLongCopy(\"test/tour.browser.test.tsx\"),\n tree: keyboard(\"test/tree.browser.test.tsx\"),\n \"transfer-list\": keyboard(\"test/transfer-list.browser.test.tsx\"),\n mentions: keyboard(\"test/mentions.browser.test.tsx\"),\n \"command-palette\": keyboardAndLongCopy(\"test/command-palette.browser.test.tsx\"),\n agreement: keyboard(\"test/agreement.keyboard.browser.test.tsx\"),\n \"toggle-group\": keyboard(),\n \"tags-input\": keyboard(),\n \"skip-nav\": keyboardAndLongCopy(\"test/skip-nav.browser.test.tsx\"),\n sidebar: keyboard(\"test/sidebar.browser.test.tsx\"),\n \"date-range-picker\": keyboard(\"test/date-range.keyboard.browser.test.tsx\"),\n \"auth-provider-button\": keyboard(),\n \"data-table\": keyboard(\"test/data-table.keyboard.browser.test.tsx\"),\n collapsible: keyboard(\"test/collapsible.keyboard.browser.test.tsx\"),\n \"context-menu\": keyboardAndLongCopy(\"test/context-menu.interactions.browser.test.tsx\"),\n menubar: keyboard(\"test/menubar.keyboard.browser.test.tsx\"),\n anchor: keyboard(\"test/anchor.browser.test.tsx\"),\n \"bottom-navigation\": keyboard(\"test/bottom-navigation.keyboard.browser.test.tsx\"),\n \"load-more\": keyboard(\"test/load-more.interactions.browser.test.tsx\"),\n carousel: keyboard(\"test/carousel.browser.test.tsx\"),\n \"floating-action-button\": keyboard(),\n accordion: keyboard(\"test/accordion.keyboard.browser.test.tsx\"),\n \"upload-item\": keyboard(\"test/upload-item.browser.test.tsx\"),\n // ThinkingOrb runs its whole environment matrix in its own file (canvas timing), not in scenario-matrix.\n \"thinking-orb\": { proofs: [{ scenarios: [\"dark\", \"large-text\", \"rtl\", \"reduced-motion\", \"accessibility\"], file: \"test/thinking-orb.browser.test.tsx\" }] },\n \"color-picker\": keyboard(\"test/web-additions.browser.test.tsx\"),\n // SSR proves semantics but cannot catch the close-only row seen in BurnTok.\n // Keep real geometry evidence attached without promoting catalog maturity.\n toast: {\n exportNames: [\"useToast\"],\n proofs: [\n { scenarios: [\"keyboard\"], file: stableCoreProofFile },\n { scenarios: [\"dark\", \"long-copy\", \"large-text\", \"rtl\"], file: \"test/toast-layout.browser.test.tsx\" },\n ],\n },\n select: keyboard(),\n combobox: keyboard(),\n dialog: keyboard(\"test/advanced.browser.test.tsx\"),\n \"alert-dialog\": keyboardAndLongCopy(\"test/alert-dialog.keyboard.browser.test.tsx\"),\n sheet: keyboardAndLongCopy(\"test/sheet-layout.browser.test.tsx\"),\n tooltip: keyboard(\"test/tooltip.browser.test.tsx\"),\n menu: keyboardAndLongCopy(\"test/menu.keyboard.browser.test.tsx\"),\n};\n\nconst exportEntries: Readonly<Record<string, readonly `./${string}`[] | undefined>> = publicExportEntries;\n\n/**\n * One claim per active Web row of the catalog. The subpath is the symbol's canonical granular entry, the export\n * names are the row's own symbol plus the companions published on that entry, and the scenarios are the row's\n * required Web evidence minus recorded gaps. Keyboard is never implied: it comes only from a dedicated proof.\n */\nfunction derivedClaim(entry: ComponentCatalogEntry): ReactRendererEvidenceComponent {\n const componentId = componentIdOf(entry);\n const extras = claimExtras[componentId] ?? {};\n const symbols = entry.name === \"DesignSystemProvider\" ? [\"HjmProvider\"] : [entry.name, ...(entry.companions ?? [])];\n // A row whose own name is not a symbol (Chart) claims through its first published companion.\n const subpath = symbols.map((symbol) => exportEntries[symbol]?.[0]).find((entry) => entry !== undefined);\n if (!subpath) throw new Error(`${entry.name} has no granular @hjmds/react export to claim evidence on`);\n const exportNames = [\n ...symbols.filter((symbol) => exportEntries[symbol]?.includes(subpath)),\n ...(extras.exportNames ?? []),\n ];\n const required = getRequiredShowcaseEvidence(entry).find((evidence) => evidence.surface === \"web\")?.scenarios ?? [];\n const gaps = webScenarioGaps[componentId] ?? [];\n const extraProofs = extras.proofs ?? [];\n const proven = new Set(extraProofs.flatMap((proof) => proof.scenarios));\n const matrix = required.filter((scenario): scenario is ReactRendererEvidenceScenario =>\n scenario !== \"default\" && scenario !== \"keyboard\" && scenario !== \"native-actions\" && scenario !== \"contract\"\n && !gaps.includes(scenario as ReactRendererEvidenceScenario) && !proven.has(scenario as ReactRendererEvidenceScenario));\n const proofs = [\n { scenarios: [\"default\" as const], file: defaultProofFile, caseId: componentId },\n ...(matrix.length === 0 ? [] : [{ scenarios: matrix, file: matrixProofFile, caseId: componentId }]),\n ...extraProofs.map((proof) => ({ ...proof, caseId: componentId })),\n ];\n return {\n componentId,\n exportNames,\n subpath,\n scenarios: proofs.flatMap((proof) => proof.scenarios),\n proofs,\n };\n}\n\nconst activeWebEntries: readonly ComponentCatalogEntry[] = componentCatalog.filter((entry) => {\n const status = getComponentSurfaceStatus(entry, \"web\");\n return status === \"stable\" || status === \"beta\";\n});\n\n/**\n * First-party Web renderer claims. Scenario axes remain fail-closed: the\n * default scenario is an SSR render, the environment and accessibility\n * scenarios are computed-style assertions in scenario-matrix.browser.\n * Keyboard and cross-platform parity remain fail-closed until dedicated\n * interaction or paired-renderer proofs are mapped one-to-one.\n */\nexport const reactRendererEvidence = {\n schemaVersion: reactRendererEvidenceSchemaVersion,\n packageName: \"@hjmds/react\",\n packageVersion: \"1.41.0\",\n surface: \"web\",\n components: activeWebEntries.map(derivedClaim),\n} as const satisfies ReactRendererEvidenceManifest;\n"]}
|
|
@@ -39,6 +39,7 @@ export declare const publicExportEntries: {
|
|
|
39
39
|
readonly Checkbox: readonly ["./selection"];
|
|
40
40
|
readonly CheckboxGroup: readonly ["./selection"];
|
|
41
41
|
readonly Chip: readonly ["./selection"];
|
|
42
|
+
readonly ChoiceRow: readonly ["./choice-row"];
|
|
42
43
|
readonly ClipboardButton: readonly ["./clipboard"];
|
|
43
44
|
readonly ClipboardIconButton: readonly ["./clipboard"];
|
|
44
45
|
readonly CodeBlock: readonly ["./code-block"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-exports.generated.d.ts","sourceRoot":"","sources":["../src/public-exports.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"public-exports.generated.d.ts","sourceRoot":"","sources":["../src/public-exports.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqrBuC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-exports.generated.js","sourceRoot":"","sources":["../src/public-exports.generated.ts"],"names":[],"mappings":"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","sourcesContent":["// Generated by scripts/sync-public-component-map.mjs --write. Do not edit by hand.\n// Public value exports per symbol, canonical granular entry first (the root entry is omitted).\nexport const publicExportEntries = {\n Accordion: [\n \"./display\"\n ],\n AccountSwitcher: [\n \"./task-controls\"\n ],\n ActivityChip: [\n \"./activity-chip\",\n \"./feedback\"\n ],\n ActivityHeatmap: [\n \"./activity-heatmap\"\n ],\n Affix: [\n \"./affix\"\n ],\n Agreement: [\n \"./agreement\"\n ],\n AlertDialog: [\n \"./overlays\"\n ],\n Anchor: [\n \"./anchor\"\n ],\n AnimatedStatistic: [\n \"./statistic-motion\"\n ],\n AspectRatio: [\n \"./layout\"\n ],\n Asset: [\n \"./asset\"\n ],\n AssetGroup: [\n \"./asset\"\n ],\n AuthProviderButton: [\n \"./provider-button\"\n ],\n AuthScreenFooter: [\n \"./auth-screen\"\n ],\n AuthScreenHero: [\n \"./auth-screen\"\n ],\n AuthScreenLayout: [\n \"./auth-screen\"\n ],\n Avatar: [\n \"./display\"\n ],\n AvatarGroup: [\n \"./display\"\n ],\n Badge: [\n \"./display\"\n ],\n BarChart: [\n \"./chart\"\n ],\n BezierEditor: [\n \"./authoring-tools\"\n ],\n BottomCTA: [\n \"./bottom-cta\"\n ],\n BottomInfo: [\n \"./bottom-info\"\n ],\n BottomNavigation: [\n \"./navigation\"\n ],\n BottomNavigationInsetProvider: [\n \"./navigation\"\n ],\n Breadcrumb: [\n \"./breadcrumb\",\n \"./navigation\"\n ],\n Button: [\n \"./actions\"\n ],\n ButtonLink: [\n \"./actions\"\n ],\n Calendar: [\n \"./calendar\"\n ],\n Card: [\n \"./display\"\n ],\n Carousel: [\n \"./carousel\"\n ],\n CarouselMotion: [\n \"./carousel-motion\"\n ],\n Celebration: [\n \"./celebration\"\n ],\n ChartLegend: [\n \"./chart\"\n ],\n ChatDateSeparator: [\n \"./screens\"\n ],\n ChatMessage: [\n \"./screens\"\n ],\n ChatScreen: [\n \"./screens\"\n ],\n Checkbox: [\n \"./selection\"\n ],\n CheckboxGroup: [\n \"./selection\"\n ],\n Chip: [\n \"./selection\"\n ],\n ClipboardButton: [\n \"./clipboard\"\n ],\n ClipboardIconButton: [\n \"./clipboard\"\n ],\n CodeBlock: [\n \"./code-block\"\n ],\n CohortRetentionTable: [\n \"./data-workflows\"\n ],\n Collapsible: [\n \"./collapsible\"\n ],\n CollapsibleMarker: [\n \"./collapsible\"\n ],\n CollectionRail: [\n \"./collection-rail\"\n ],\n ColorPicker: [\n \"./color-picker\"\n ],\n Combobox: [\n \"./forms\"\n ],\n CommandPalette: [\n \"./command-palette\"\n ],\n CommentThreadRow: [\n \"./screen-flows\"\n ],\n CommentThreadScreen: [\n \"./screen-flows\"\n ],\n ComparisonTable: [\n \"./data-table\"\n ],\n CompositionLayout: [\n \"./screens\"\n ],\n Container: [\n \"./layout\"\n ],\n ContentTransition: [\n \"./content-transition\"\n ],\n ContextMenu: [\n \"./context-menu\"\n ],\n ConversationRow: [\n \"./conversation-row\"\n ],\n ConversionFunnel: [\n \"./data-workflows\"\n ],\n CorrelationMatrix: [\n \"./data-workflows\"\n ],\n CounterBadge: [\n \"./display\"\n ],\n DataTable: [\n \"./data-table\"\n ],\n DateEntry: [\n \"./date-entry\"\n ],\n DatePicker: [\n \"./date-picker\",\n \"./forms\"\n ],\n DateRangePicker: [\n \"./date-range\"\n ],\n DescriptionList: [\n \"./display\"\n ],\n Dialog: [\n \"./overlays\"\n ],\n Divider: [\n \"./display\"\n ],\n DocumentResource: [\n \"./document-resource\"\n ],\n DurationField: [\n \"./duration-field\"\n ],\n EditorScreen: [\n \"./screen-flows\"\n ],\n EffectSurface: [\n \"./effect-surface\"\n ],\n EmptyState: [\n \"./feedback\"\n ],\n EventAttendanceCard: [\n \"./social-compositions\"\n ],\n ExpandableSearch: [\n \"./communication\"\n ],\n Field: [\n \"./forms\"\n ],\n FieldGroup: [\n \"./field-group\"\n ],\n FilePicker: [\n \"./file-picker\",\n \"./forms\"\n ],\n FilterRecovery: [\n \"./collection-editing\"\n ],\n FloatingActionButton: [\n \"./floating-action-button\"\n ],\n FolderPreview: [\n \"./folder-preview\"\n ],\n FollowProfileCard: [\n \"./social-compositions\"\n ],\n Form: [\n \"./forms\"\n ],\n GravityLetters: [\n \"./gravity-letters\"\n ],\n Grid: [\n \"./layout\"\n ],\n GridReveal: [\n \"./grid-reveal\"\n ],\n Heading: [\n \"./heading\"\n ],\n HistogramExplorer: [\n \"./data-workflows\"\n ],\n HjmProvider: [\n \"./provider\"\n ],\n Icon: [\n \"./display\"\n ],\n IconButton: [\n \"./actions\"\n ],\n IconTile: [\n \"./screens\"\n ],\n Image: [\n \"./display\"\n ],\n ImageChoiceGroup: [\n \"./image-choice\"\n ],\n ImageComparison: [\n \"./image-comparison\"\n ],\n ImageViewer: [\n \"./image-viewer\"\n ],\n ImmersiveOverlay: [\n \"./overlays\"\n ],\n ImportFieldMapping: [\n \"./data-workflows\"\n ],\n InlineConfirm: [\n \"./inline-confirm\"\n ],\n InlineEdit: [\n \"./collection-editing\"\n ],\n Layout: [\n \"./layout\"\n ],\n LineChart: [\n \"./chart\"\n ],\n LineScore: [\n \"./data-table\"\n ],\n Link: [\n \"./actions\"\n ],\n List: [\n \"./display\"\n ],\n ListDetailScreen: [\n \"./screen-flows\"\n ],\n ListRow: [\n \"./display\"\n ],\n ListSeparator: [\n \"./display\"\n ],\n LoadMore: [\n \"./navigation\"\n ],\n Masonry: [\n \"./masonry\"\n ],\n MatrixTable: [\n \"./data-table\"\n ],\n MediaAlbumPageStatus: [\n \"./screens\"\n ],\n MediaSelectionCell: [\n \"./screen-flows\"\n ],\n MediaSelectionScreen: [\n \"./screen-flows\"\n ],\n MediaTransport: [\n \"./media-transport\"\n ],\n Mentions: [\n \"./mentions\"\n ],\n Menu: [\n \"./overlays\"\n ],\n Menubar: [\n \"./menubar\"\n ],\n MessageComposer: [\n \"./screens\"\n ],\n ModerationForm: [\n \"./screen-flows\"\n ],\n ModerationScreen: [\n \"./screen-flows\"\n ],\n MorphingMenu: [\n \"./menu-morph\"\n ],\n NativeSelect: [\n \"./forms\"\n ],\n NavigationBar: [\n \"./navigation-bar\"\n ],\n Notice: [\n \"./feedback\"\n ],\n NotificationBell: [\n \"./notification-bell\"\n ],\n NotificationInboxScreen: [\n \"./screens\"\n ],\n NotificationItem: [\n \"./screens\"\n ],\n NotificationRow: [\n \"./screens\"\n ],\n NumberField: [\n \"./number-field\",\n \"./forms\"\n ],\n OnboardingScreen: [\n \"./screen-flows\"\n ],\n OtpField: [\n \"./otp-field\",\n \"./forms\"\n ],\n OverlayStackProvider: [\n \"./overlay-stack\"\n ],\n OverviewScreen: [\n \"./design-profile\"\n ],\n PageIndicator: [\n \"./carousel\"\n ],\n Pagination: [\n \"./pagination\",\n \"./navigation\"\n ],\n PasswordField: [\n \"./password-field\",\n \"./forms\"\n ],\n PasswordRulesField: [\n \"./task-controls\"\n ],\n PendingContent: [\n \"./feedback\"\n ],\n PermissionScreen: [\n \"./screen-flows\"\n ],\n PhotoSourceSheet: [\n \"./screen-flows\"\n ],\n PieChart: [\n \"./chart\"\n ],\n Popover: [\n \"./popover\"\n ],\n PricingChoice: [\n \"./task-controls\"\n ],\n ProfileScreen: [\n \"./screen-flows\"\n ],\n ProfileSummary: [\n \"./screen-flows\"\n ],\n Progress: [\n \"./feedback\"\n ],\n ProgressiveBlur: [\n \"./progressive-blur\"\n ],\n QRCode: [\n \"./qr-code\"\n ],\n QuoteCard: [\n \"./display\"\n ],\n RadarChart: [\n \"./chart\"\n ],\n Radio: [\n \"./selection\"\n ],\n RadioGroup: [\n \"./selection\"\n ],\n Rating: [\n \"./rating\"\n ],\n ReactionPicker: [\n \"./reaction-picker\"\n ],\n RepeatableFieldGroup: [\n \"./collection-editing\"\n ],\n ReplyComposer: [\n \"./communication\"\n ],\n ReplyMessage: [\n \"./communication\"\n ],\n Result: [\n \"./feedback\"\n ],\n SavedItemsScreen: [\n \"./saved-items\"\n ],\n ScatterChart: [\n \"./chart\"\n ],\n ScreenLayout: [\n \"./screens\"\n ],\n ScrollProgress: [\n \"./scroll-progress\"\n ],\n SearchField: [\n \"./forms\"\n ],\n SearchScreen: [\n \"./screen-flows\"\n ],\n Section: [\n \"./layout\"\n ],\n SegmentedControl: [\n \"./selection\"\n ],\n Select: [\n \"./forms\"\n ],\n SelectionActionBar: [\n \"./collection-editing\"\n ],\n SettingsScreen: [\n \"./screens\"\n ],\n Sheet: [\n \"./overlays\"\n ],\n ShortcutRail: [\n \"./shortcut-rail\"\n ],\n ShortcutRecorder: [\n \"./authoring-tools\"\n ],\n Sidebar: [\n \"./sidebar\"\n ],\n SidePanel: [\n \"./side-panel\"\n ],\n Skeleton: [\n \"./feedback\"\n ],\n SkipNav: [\n \"./skip-nav\"\n ],\n Slider: [\n \"./slider\",\n \"./forms\"\n ],\n SortableCollection: [\n \"./sortable\"\n ],\n Sparkline: [\n \"./chart\"\n ],\n Spinner: [\n \"./feedback\"\n ],\n SplitAction: [\n \"./task-controls\"\n ],\n Splitter: [\n \"./splitter\"\n ],\n Stack: [\n \"./layout\"\n ],\n Statistic: [\n \"./display\"\n ],\n StatisticGroup: [\n \"./display\"\n ],\n StatusText: [\n \"./status-text\"\n ],\n StepPlayer: [\n \"./step-player\"\n ],\n Steps: [\n \"./steps\",\n \"./navigation\"\n ],\n StreamingAnswer: [\n \"./streaming-answer\"\n ],\n Surface: [\n \"./layout\"\n ],\n SwipeActions: [\n \"./swipe-actions\"\n ],\n Switch: [\n \"./selection\"\n ],\n Table: [\n \"./display\"\n ],\n TableColumnSettings: [\n \"./collection-editing\"\n ],\n TabPanel: [\n \"./navigation\"\n ],\n Tabs: [\n \"./navigation\"\n ],\n Tag: [\n \"./display\"\n ],\n TagsInput: [\n \"./tags-input\"\n ],\n TargetSummary: [\n \"./data-workflows\"\n ],\n TaskList: [\n \"./task-list\"\n ],\n Text: [\n \"./layout\"\n ],\n TextArea: [\n \"./forms\"\n ],\n TextField: [\n \"./forms\"\n ],\n TextFormat: [\n \"./text-formats\"\n ],\n TextTransition: [\n \"./content-transition\"\n ],\n ThinkingOrb: [\n \"./thinking-orb\"\n ],\n Timeline: [\n \"./display\"\n ],\n TimePicker: [\n \"./time-picker\"\n ],\n Toast: [\n \"./toast\"\n ],\n ToastProvider: [\n \"./toast\"\n ],\n ToggleFeedbackButton: [\n \"./toggle-feedback\"\n ],\n ToggleGroup: [\n \"./toggle-group\"\n ],\n Tooltip: [\n \"./overlays\"\n ],\n Top: [\n \"./top\"\n ],\n TopBar: [\n \"./top-bar\"\n ],\n Tour: [\n \"./tour\"\n ],\n TransferList: [\n \"./transfer-list\"\n ],\n TransferTask: [\n \"./transfer-task\"\n ],\n Tree: [\n \"./tree\"\n ],\n TypingIndicator: [\n \"./screens\"\n ],\n UploadItem: [\n \"./upload-item\",\n \"./display\"\n ],\n VirtualList: [\n \"./virtual-list\"\n ],\n VisuallyHidden: [\n \"./layout\"\n ],\n VoiceNote: [\n \"./voice-note\"\n ],\n Watermark: [\n \"./watermark\"\n ]\n} as const satisfies Readonly<Record<string, readonly `./${string}`[]>>;\n"]}
|
|
1
|
+
{"version":3,"file":"public-exports.generated.js","sourceRoot":"","sources":["../src/public-exports.generated.ts"],"names":[],"mappings":"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","sourcesContent":["// Generated by scripts/sync-public-component-map.mjs --write. Do not edit by hand.\n// Public value exports per symbol, canonical granular entry first (the root entry is omitted).\nexport const publicExportEntries = {\n Accordion: [\n \"./display\"\n ],\n AccountSwitcher: [\n \"./task-controls\"\n ],\n ActivityChip: [\n \"./activity-chip\",\n \"./feedback\"\n ],\n ActivityHeatmap: [\n \"./activity-heatmap\"\n ],\n Affix: [\n \"./affix\"\n ],\n Agreement: [\n \"./agreement\"\n ],\n AlertDialog: [\n \"./overlays\"\n ],\n Anchor: [\n \"./anchor\"\n ],\n AnimatedStatistic: [\n \"./statistic-motion\"\n ],\n AspectRatio: [\n \"./layout\"\n ],\n Asset: [\n \"./asset\"\n ],\n AssetGroup: [\n \"./asset\"\n ],\n AuthProviderButton: [\n \"./provider-button\"\n ],\n AuthScreenFooter: [\n \"./auth-screen\"\n ],\n AuthScreenHero: [\n \"./auth-screen\"\n ],\n AuthScreenLayout: [\n \"./auth-screen\"\n ],\n Avatar: [\n \"./display\"\n ],\n AvatarGroup: [\n \"./display\"\n ],\n Badge: [\n \"./display\"\n ],\n BarChart: [\n \"./chart\"\n ],\n BezierEditor: [\n \"./authoring-tools\"\n ],\n BottomCTA: [\n \"./bottom-cta\"\n ],\n BottomInfo: [\n \"./bottom-info\"\n ],\n BottomNavigation: [\n \"./navigation\"\n ],\n BottomNavigationInsetProvider: [\n \"./navigation\"\n ],\n Breadcrumb: [\n \"./breadcrumb\",\n \"./navigation\"\n ],\n Button: [\n \"./actions\"\n ],\n ButtonLink: [\n \"./actions\"\n ],\n Calendar: [\n \"./calendar\"\n ],\n Card: [\n \"./display\"\n ],\n Carousel: [\n \"./carousel\"\n ],\n CarouselMotion: [\n \"./carousel-motion\"\n ],\n Celebration: [\n \"./celebration\"\n ],\n ChartLegend: [\n \"./chart\"\n ],\n ChatDateSeparator: [\n \"./screens\"\n ],\n ChatMessage: [\n \"./screens\"\n ],\n ChatScreen: [\n \"./screens\"\n ],\n Checkbox: [\n \"./selection\"\n ],\n CheckboxGroup: [\n \"./selection\"\n ],\n Chip: [\n \"./selection\"\n ],\n ChoiceRow: [\n \"./choice-row\"\n ],\n ClipboardButton: [\n \"./clipboard\"\n ],\n ClipboardIconButton: [\n \"./clipboard\"\n ],\n CodeBlock: [\n \"./code-block\"\n ],\n CohortRetentionTable: [\n \"./data-workflows\"\n ],\n Collapsible: [\n \"./collapsible\"\n ],\n CollapsibleMarker: [\n \"./collapsible\"\n ],\n CollectionRail: [\n \"./collection-rail\"\n ],\n ColorPicker: [\n \"./color-picker\"\n ],\n Combobox: [\n \"./forms\"\n ],\n CommandPalette: [\n \"./command-palette\"\n ],\n CommentThreadRow: [\n \"./screen-flows\"\n ],\n CommentThreadScreen: [\n \"./screen-flows\"\n ],\n ComparisonTable: [\n \"./data-table\"\n ],\n CompositionLayout: [\n \"./screens\"\n ],\n Container: [\n \"./layout\"\n ],\n ContentTransition: [\n \"./content-transition\"\n ],\n ContextMenu: [\n \"./context-menu\"\n ],\n ConversationRow: [\n \"./conversation-row\"\n ],\n ConversionFunnel: [\n \"./data-workflows\"\n ],\n CorrelationMatrix: [\n \"./data-workflows\"\n ],\n CounterBadge: [\n \"./display\"\n ],\n DataTable: [\n \"./data-table\"\n ],\n DateEntry: [\n \"./date-entry\"\n ],\n DatePicker: [\n \"./date-picker\",\n \"./forms\"\n ],\n DateRangePicker: [\n \"./date-range\"\n ],\n DescriptionList: [\n \"./display\"\n ],\n Dialog: [\n \"./overlays\"\n ],\n Divider: [\n \"./display\"\n ],\n DocumentResource: [\n \"./document-resource\"\n ],\n DurationField: [\n \"./duration-field\"\n ],\n EditorScreen: [\n \"./screen-flows\"\n ],\n EffectSurface: [\n \"./effect-surface\"\n ],\n EmptyState: [\n \"./feedback\"\n ],\n EventAttendanceCard: [\n \"./social-compositions\"\n ],\n ExpandableSearch: [\n \"./communication\"\n ],\n Field: [\n \"./forms\"\n ],\n FieldGroup: [\n \"./field-group\"\n ],\n FilePicker: [\n \"./file-picker\",\n \"./forms\"\n ],\n FilterRecovery: [\n \"./collection-editing\"\n ],\n FloatingActionButton: [\n \"./floating-action-button\"\n ],\n FolderPreview: [\n \"./folder-preview\"\n ],\n FollowProfileCard: [\n \"./social-compositions\"\n ],\n Form: [\n \"./forms\"\n ],\n GravityLetters: [\n \"./gravity-letters\"\n ],\n Grid: [\n \"./layout\"\n ],\n GridReveal: [\n \"./grid-reveal\"\n ],\n Heading: [\n \"./heading\"\n ],\n HistogramExplorer: [\n \"./data-workflows\"\n ],\n HjmProvider: [\n \"./provider\"\n ],\n Icon: [\n \"./display\"\n ],\n IconButton: [\n \"./actions\"\n ],\n IconTile: [\n \"./screens\"\n ],\n Image: [\n \"./display\"\n ],\n ImageChoiceGroup: [\n \"./image-choice\"\n ],\n ImageComparison: [\n \"./image-comparison\"\n ],\n ImageViewer: [\n \"./image-viewer\"\n ],\n ImmersiveOverlay: [\n \"./overlays\"\n ],\n ImportFieldMapping: [\n \"./data-workflows\"\n ],\n InlineConfirm: [\n \"./inline-confirm\"\n ],\n InlineEdit: [\n \"./collection-editing\"\n ],\n Layout: [\n \"./layout\"\n ],\n LineChart: [\n \"./chart\"\n ],\n LineScore: [\n \"./data-table\"\n ],\n Link: [\n \"./actions\"\n ],\n List: [\n \"./display\"\n ],\n ListDetailScreen: [\n \"./screen-flows\"\n ],\n ListRow: [\n \"./display\"\n ],\n ListSeparator: [\n \"./display\"\n ],\n LoadMore: [\n \"./navigation\"\n ],\n Masonry: [\n \"./masonry\"\n ],\n MatrixTable: [\n \"./data-table\"\n ],\n MediaAlbumPageStatus: [\n \"./screens\"\n ],\n MediaSelectionCell: [\n \"./screen-flows\"\n ],\n MediaSelectionScreen: [\n \"./screen-flows\"\n ],\n MediaTransport: [\n \"./media-transport\"\n ],\n Mentions: [\n \"./mentions\"\n ],\n Menu: [\n \"./overlays\"\n ],\n Menubar: [\n \"./menubar\"\n ],\n MessageComposer: [\n \"./screens\"\n ],\n ModerationForm: [\n \"./screen-flows\"\n ],\n ModerationScreen: [\n \"./screen-flows\"\n ],\n MorphingMenu: [\n \"./menu-morph\"\n ],\n NativeSelect: [\n \"./forms\"\n ],\n NavigationBar: [\n \"./navigation-bar\"\n ],\n Notice: [\n \"./feedback\"\n ],\n NotificationBell: [\n \"./notification-bell\"\n ],\n NotificationInboxScreen: [\n \"./screens\"\n ],\n NotificationItem: [\n \"./screens\"\n ],\n NotificationRow: [\n \"./screens\"\n ],\n NumberField: [\n \"./number-field\",\n \"./forms\"\n ],\n OnboardingScreen: [\n \"./screen-flows\"\n ],\n OtpField: [\n \"./otp-field\",\n \"./forms\"\n ],\n OverlayStackProvider: [\n \"./overlay-stack\"\n ],\n OverviewScreen: [\n \"./design-profile\"\n ],\n PageIndicator: [\n \"./carousel\"\n ],\n Pagination: [\n \"./pagination\",\n \"./navigation\"\n ],\n PasswordField: [\n \"./password-field\",\n \"./forms\"\n ],\n PasswordRulesField: [\n \"./task-controls\"\n ],\n PendingContent: [\n \"./feedback\"\n ],\n PermissionScreen: [\n \"./screen-flows\"\n ],\n PhotoSourceSheet: [\n \"./screen-flows\"\n ],\n PieChart: [\n \"./chart\"\n ],\n Popover: [\n \"./popover\"\n ],\n PricingChoice: [\n \"./task-controls\"\n ],\n ProfileScreen: [\n \"./screen-flows\"\n ],\n ProfileSummary: [\n \"./screen-flows\"\n ],\n Progress: [\n \"./feedback\"\n ],\n ProgressiveBlur: [\n \"./progressive-blur\"\n ],\n QRCode: [\n \"./qr-code\"\n ],\n QuoteCard: [\n \"./display\"\n ],\n RadarChart: [\n \"./chart\"\n ],\n Radio: [\n \"./selection\"\n ],\n RadioGroup: [\n \"./selection\"\n ],\n Rating: [\n \"./rating\"\n ],\n ReactionPicker: [\n \"./reaction-picker\"\n ],\n RepeatableFieldGroup: [\n \"./collection-editing\"\n ],\n ReplyComposer: [\n \"./communication\"\n ],\n ReplyMessage: [\n \"./communication\"\n ],\n Result: [\n \"./feedback\"\n ],\n SavedItemsScreen: [\n \"./saved-items\"\n ],\n ScatterChart: [\n \"./chart\"\n ],\n ScreenLayout: [\n \"./screens\"\n ],\n ScrollProgress: [\n \"./scroll-progress\"\n ],\n SearchField: [\n \"./forms\"\n ],\n SearchScreen: [\n \"./screen-flows\"\n ],\n Section: [\n \"./layout\"\n ],\n SegmentedControl: [\n \"./selection\"\n ],\n Select: [\n \"./forms\"\n ],\n SelectionActionBar: [\n \"./collection-editing\"\n ],\n SettingsScreen: [\n \"./screens\"\n ],\n Sheet: [\n \"./overlays\"\n ],\n ShortcutRail: [\n \"./shortcut-rail\"\n ],\n ShortcutRecorder: [\n \"./authoring-tools\"\n ],\n Sidebar: [\n \"./sidebar\"\n ],\n SidePanel: [\n \"./side-panel\"\n ],\n Skeleton: [\n \"./feedback\"\n ],\n SkipNav: [\n \"./skip-nav\"\n ],\n Slider: [\n \"./slider\",\n \"./forms\"\n ],\n SortableCollection: [\n \"./sortable\"\n ],\n Sparkline: [\n \"./chart\"\n ],\n Spinner: [\n \"./feedback\"\n ],\n SplitAction: [\n \"./task-controls\"\n ],\n Splitter: [\n \"./splitter\"\n ],\n Stack: [\n \"./layout\"\n ],\n Statistic: [\n \"./display\"\n ],\n StatisticGroup: [\n \"./display\"\n ],\n StatusText: [\n \"./status-text\"\n ],\n StepPlayer: [\n \"./step-player\"\n ],\n Steps: [\n \"./steps\",\n \"./navigation\"\n ],\n StreamingAnswer: [\n \"./streaming-answer\"\n ],\n Surface: [\n \"./layout\"\n ],\n SwipeActions: [\n \"./swipe-actions\"\n ],\n Switch: [\n \"./selection\"\n ],\n Table: [\n \"./display\"\n ],\n TableColumnSettings: [\n \"./collection-editing\"\n ],\n TabPanel: [\n \"./navigation\"\n ],\n Tabs: [\n \"./navigation\"\n ],\n Tag: [\n \"./display\"\n ],\n TagsInput: [\n \"./tags-input\"\n ],\n TargetSummary: [\n \"./data-workflows\"\n ],\n TaskList: [\n \"./task-list\"\n ],\n Text: [\n \"./layout\"\n ],\n TextArea: [\n \"./forms\"\n ],\n TextField: [\n \"./forms\"\n ],\n TextFormat: [\n \"./text-formats\"\n ],\n TextTransition: [\n \"./content-transition\"\n ],\n ThinkingOrb: [\n \"./thinking-orb\"\n ],\n Timeline: [\n \"./display\"\n ],\n TimePicker: [\n \"./time-picker\"\n ],\n Toast: [\n \"./toast\"\n ],\n ToastProvider: [\n \"./toast\"\n ],\n ToggleFeedbackButton: [\n \"./toggle-feedback\"\n ],\n ToggleGroup: [\n \"./toggle-group\"\n ],\n Tooltip: [\n \"./overlays\"\n ],\n Top: [\n \"./top\"\n ],\n TopBar: [\n \"./top-bar\"\n ],\n Tour: [\n \"./tour\"\n ],\n TransferList: [\n \"./transfer-list\"\n ],\n TransferTask: [\n \"./transfer-task\"\n ],\n Tree: [\n \"./tree\"\n ],\n TypingIndicator: [\n \"./screens\"\n ],\n UploadItem: [\n \"./upload-item\",\n \"./display\"\n ],\n VirtualList: [\n \"./virtual-list\"\n ],\n VisuallyHidden: [\n \"./layout\"\n ],\n VoiceNote: [\n \"./voice-note\"\n ],\n Watermark: [\n \"./watermark\"\n ]\n} as const satisfies Readonly<Record<string, readonly `./${string}`[]>>;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reaction-picker.d.ts","sourceRoot":"","sources":["../src/reaction-picker.tsx"],"names":[],"mappings":"AACA,OAAO,EAA2D,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAE3J,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAAC,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAAC;AACzR,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAgB,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,mBAAmB,+
|
|
1
|
+
{"version":3,"file":"reaction-picker.d.ts","sourceRoot":"","sources":["../src/reaction-picker.tsx"],"names":[],"mappings":"AACA,OAAO,EAA2D,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAE3J,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAAC,IAAI,CAAC,EAAE,mBAAmB,CAAA;CAAE,CAAC,CAAC;AACzR,gFAAgF;AAChF,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAgB,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,mBAAmB,+BA6BjJ"}
|
package/dist/reaction-picker.js
CHANGED
|
@@ -11,10 +11,8 @@ export function ReactionPicker({ label, options, value, onValueChange, disabled
|
|
|
11
11
|
const all = resolveReactionOptions(options, more);
|
|
12
12
|
validateReactions(all, value);
|
|
13
13
|
const showingAll = expanded && !!more;
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
// border and accent fill when chosen — with toggle-button semantics (aria-pressed), matching Native. The strip
|
|
17
|
-
// layout keeps ghost Buttons because the message bubble supplies its surface (2026-10-17 review).
|
|
14
|
+
// Wrap reactions keep Chip's compact frame for counted emoji; strip reactions use ghost Buttons.
|
|
15
|
+
// Both resolve the same neutral selected surface because emoji cannot communicate a text-color change.
|
|
18
16
|
const chips = layout === "wrap";
|
|
19
17
|
const visible = showingAll ? all : options;
|
|
20
18
|
const choose = (id) => { if (!disabled) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reaction-picker.js","sourceRoot":"","sources":["../src/reaction-picker.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAiD,MAAM,mCAAmC,CAAC;AAC3J,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,GAAG,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,WAAW,EAAuB;IAChJ,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,sBAAsB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC9B,MAAM,UAAU,GAAG,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC;IACtC
|
|
1
|
+
{"version":3,"file":"reaction-picker.js","sourceRoot":"","sources":["../src/reaction-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useLayoutEffect, useRef, useState } from \"react\";\nimport { nextReaction, validateReactions, resolveReactionOptions, type ReactionMoreOptions, type ReactionOption } from \"@hjmds/design-contracts/reactions\";\nimport { Button } from \"./actions.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nexport type ReactionPickerProps = Readonly<{ label: string; options: readonly ReactionOption[]; value: string | null; onValueChange: (value: string | null) => void; disabled?: boolean; layout?: \"wrap\" | \"strip\"; layoutStyle?: HjmCompositionStyleProp; more?: ReactionMoreOptions }>;\n/** Controlled single reaction; counts and persistence belong to the product. */\nexport function ReactionPicker({ label, options, value, onValueChange, disabled = false, layout = \"wrap\", more, layoutStyle }: ReactionPickerProps) {\n const [expanded, setExpanded] = useState(false);\n const root = useRef<HTMLDivElement>(null);\n const toggle = useRef<HTMLButtonElement>(null);\n const refocus = useRef(false);\n const all = resolveReactionOptions(options, more);\n validateReactions(all, value);\n const showingAll = expanded && !!more;\n // Wrap reactions keep Chip's compact frame for counted emoji; strip reactions use ghost Buttons.\n // Both resolve the same neutral selected surface because emoji cannot communicate a text-color change.\n const chips = layout === \"wrap\";\n const visible = showingAll ? all : options;\n const choose = (id: string) => { if (!disabled) { refocus.current = !!root.current?.contains(document.activeElement); onValueChange(nextReaction(all, value, id)); setExpanded(false); } };\n // A catalog-only button unmounts on collapse: refocus the toggle, not <body>. Inert hosts restore their own trigger.\n useLayoutEffect(() => { const node = root.current; if (refocus.current && !showingAll && node && !node.closest(\"[inert]\") && !node.contains(document.activeElement)) toggle.current?.focus(); refocus.current = false; });\n return <div ref={root} role=\"group\" aria-label={label} className=\"hjm-reaction-picker\" data-layout={layout} data-expanded={showingAll || undefined} style={layoutStyle}>\n <div className=\"hjm-reaction-picker__options\">\n {visible.map(option => {\n const glyph = <span aria-hidden=\"true\" className=\"hjm-reaction-picker__glyph\">{option.emoji}{option.count === undefined ? null : ` ${option.count}`}</span>;\n const selected = value === option.id;\n return chips\n ? <button key={option.id} type=\"button\" className=\"hjm-chip hjm-reaction-picker__chip\" data-size=\"small\" data-selected={selected || undefined} aria-pressed={selected} disabled={disabled || option.disabled} aria-label={option.label} onClick={() => choose(option.id)}>{glyph}</button>\n : <Button key={option.id} tone=\"ghost\" shape=\"pill\" selected={selected} disabled={disabled || option.disabled} aria-label={option.label} onClick={() => choose(option.id)}>{glyph}</Button>;\n })}\n </div>\n <div>{more ? chips\n ? <button ref={toggle} type=\"button\" className=\"hjm-chip hjm-reaction-picker__chip\" data-size=\"small\" aria-label={more.label} aria-expanded={showingAll} disabled={disabled} onClick={() => setExpanded(current => !current)}><span aria-hidden=\"true\" className=\"hjm-reaction-picker__glyph\">{showingAll ? \"−\" : \"+\"}</span></button>\n : <Button ref={toggle} tone=\"ghost\" shape=\"pill\" aria-label={more.label} aria-expanded={showingAll} disabled={disabled} onClick={() => setExpanded(current => !current)}><span aria-hidden=\"true\" className=\"hjm-reaction-picker__glyph\">{showingAll ? \"−\" : \"+\"}</span></Button> : null}</div>\n </div>;\n}\n"]}
|
package/dist/styles.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*
|
|
1
|
+
/* Persistent selection uses its neutral surface. Focus, primary actions and compact value marks retain their distinct semantic roles; see theme-palette.md. */
|
|
2
2
|
.hjm-root,
|
|
3
3
|
.hjm-root *,
|
|
4
4
|
.hjm-root *::before,
|
|
@@ -268,7 +268,7 @@
|
|
|
268
268
|
/* Toggle treatment: aria-pressed already carried the state, so without a paired
|
|
269
269
|
visual every consumer painted the selected background in product styles.
|
|
270
270
|
Selection uses content color without an added border (2026-10-10 user request); focus stays separate. */
|
|
271
|
-
.hjm-button[data-selected="true"], .hjm-icon-button[data-selected="true"] { color: var(--hjm-color-
|
|
271
|
+
.hjm-button[data-selected="true"], .hjm-icon-button[data-selected="true"] { color: var(--hjm-color-text); background: var(--hjm-color-surface-selected); border-color: transparent; }
|
|
272
272
|
.hjm-button:active:not(:disabled):not([aria-disabled="true"]), .hjm-icon-button:active:not(:disabled):not([aria-disabled="true"]) { opacity: var(--hjm-button-pressed-opacity); }
|
|
273
273
|
/* data-state="disabled" also covers focusable boundaries (aria-disabled, e.g. Carousel previous on the first slide),
|
|
274
274
|
which looked enabled while Native dimmed them (2026-10-17 review E9). */
|
|
@@ -287,7 +287,7 @@
|
|
|
287
287
|
.hjm-button[data-tone="primary"] { --hjm-button-face-fill: var(--hjm-color-primary); }
|
|
288
288
|
.hjm-button[data-tone="secondary"] { --hjm-button-face-fill: var(--hjm-color-bg); --hjm-button-face-border: var(--hjm-color-border-control); }
|
|
289
289
|
.hjm-button[data-tone="danger"] { --hjm-button-face-fill: var(--hjm-color-danger-fill); }
|
|
290
|
-
.hjm-button[data-selected="true"] { --hjm-button-face-fill: var(--hjm-color-
|
|
290
|
+
.hjm-button[data-selected="true"] { --hjm-button-face-fill: var(--hjm-color-surface-selected); --hjm-button-face-border: transparent; }
|
|
291
291
|
.hjm-button[data-raised="true"] { padding: 0 0 var(--hjm-button-depth); border: 0; gap: 0; flex-direction: column; background: color-mix(in srgb, var(--hjm-button-side), #000 var(--hjm-button-side-shade)); }
|
|
292
292
|
.hjm-button__face { position: relative; display: flex; box-sizing: border-box; inline-size: 100%; min-block-size: inherit; flex: 1; align-items: center; justify-content: inherit; gap: var(--hjm-space-xs); padding: var(--hjm-space-xs) var(--hjm-button-face-padding); border: 1px solid var(--hjm-button-face-border, transparent); border-radius: inherit; background: var(--hjm-button-face-fill); transition: transform var(--hjm-button-settle) ease-out; }
|
|
293
293
|
.hjm-button[data-raised="true"]:active:not(:disabled):not([aria-disabled="true"]) { opacity: 1; }
|
|
@@ -813,7 +813,7 @@
|
|
|
813
813
|
.hjm-choice[data-presentation="card"][data-state="checked"],
|
|
814
814
|
.hjm-choice[data-presentation="card"][data-state="mixed"],
|
|
815
815
|
.hjm-choice[data-presentation="grouped"][data-state="checked"],
|
|
816
|
-
.hjm-choice[data-presentation="grouped"][data-state="mixed"] { border-color: var(--hjm-color-
|
|
816
|
+
.hjm-choice[data-presentation="grouped"][data-state="mixed"] { border-color: var(--hjm-color-border-control); background: var(--hjm-color-surface-selected); }
|
|
817
817
|
.hjm-choice[data-size="small"] { min-block-size: 44px; gap: var(--hjm-space-xs); padding: var(--hjm-space-xs) var(--hjm-space-sm); }
|
|
818
818
|
.hjm-choice[data-size="small"][data-presentation="plain"] { padding: 0; }
|
|
819
819
|
.hjm-choice__input { position: absolute; opacity: 0; inline-size: 1px; block-size: 1px; }
|
|
@@ -881,7 +881,7 @@
|
|
|
881
881
|
.hjm-choice[data-presentation="chips"] .hjm-choice__indicator { display: none; }
|
|
882
882
|
.hjm-choice[data-presentation="chips"] .hjm-choice__leading { color: inherit; }
|
|
883
883
|
.hjm-choice[data-presentation="chips"] .hjm-choice__copy { min-inline-size: 0; overflow-wrap: anywhere; padding-block: 0; }
|
|
884
|
-
.hjm-choice[data-presentation="chips"][data-state="checked"], .hjm-choice[data-presentation="chips"][data-state="mixed"] { color: var(--hjm-color-
|
|
884
|
+
.hjm-choice[data-presentation="chips"][data-state="checked"], .hjm-choice[data-presentation="chips"][data-state="mixed"] { color: var(--hjm-color-text); border-color: var(--hjm-color-border-control); background: var(--hjm-color-surface-selected); }
|
|
885
885
|
.hjm-choice[data-presentation="chips"]:has(.hjm-choice__input:focus-visible) { outline: var(--hjm-focus-width) solid var(--hjm-color-focus); outline-offset: var(--hjm-focus-offset); }
|
|
886
886
|
/* A described switch: copy + switchRecipe.rowPaddingVertical 8 on both sides, min rowTwoLineMinHeight 56, same as Native.
|
|
887
887
|
Stacked switch rows carry this spacing themselves; containers add no gap between them (2026-10-17). */
|
|
@@ -923,7 +923,7 @@
|
|
|
923
923
|
/* Vertical only: neighbours are 4px apart, so a horizontal slop would overlap the next option's target. */
|
|
924
924
|
.hjm-segmented:where(:not([data-presentation="pills"]):not([data-presentation="text"])) .hjm-segmented__item::after { content: ""; position: absolute; inset: calc((var(--hjm-segmented-height) - 2 * (var(--hjm-space-xxs) + 1px) - var(--hjm-control-min-touch-target)) / 2) 0; }
|
|
925
925
|
.hjm-segmented__item input { position: absolute; opacity: 0; }
|
|
926
|
-
.hjm-segmented__item[data-state="checked"] { box-shadow: inset 0 0 0 2px var(--hjm-color-focus); color: var(--hjm-color-
|
|
926
|
+
.hjm-segmented__item[data-state="checked"] { box-shadow: inset 0 0 0 2px var(--hjm-color-focus); color: var(--hjm-color-text); background: var(--hjm-color-surface-selected); font-weight: var(--hjm-font-weight-semibold); }
|
|
927
927
|
.hjm-segmented__item[data-disabled="true"] { opacity: 0.5; cursor: not-allowed; }
|
|
928
928
|
|
|
929
929
|
/* segmentedControlRecipe.adaptive.largeTextLayout stacks oversized labels, matching RN.
|
|
@@ -1037,7 +1037,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1037
1037
|
.hjm-list-row[data-density="relaxed"][data-lines="two"] { min-block-size: var(--hjm-list-row-relaxed-two-line); }
|
|
1038
1038
|
.hjm-list-row[data-density="spacious"] { --hjm-list-row-inline: var(--hjm-list-row-spacious-padding-inline); min-block-size: var(--hjm-list-row-spacious-one-line); padding-block: var(--hjm-list-row-spacious-padding-block); }
|
|
1039
1039
|
.hjm-list-row[data-density="spacious"][data-lines="two"] { min-block-size: var(--hjm-list-row-spacious-two-line); }
|
|
1040
|
-
.hjm-list-row[data-state="selected"] { background: var(--hjm-color-
|
|
1040
|
+
.hjm-list-row[data-state="selected"] { background: var(--hjm-color-surface-selected); box-shadow: inset 0 0 0 1px var(--hjm-color-border-control); }
|
|
1041
1041
|
.hjm-list-row[data-state="disabled"] { opacity: 0.5; cursor: not-allowed; }
|
|
1042
1042
|
/* trailingAction: one surface for the row command and its separate action, as Native. The frame takes the bleed; the
|
|
1043
1043
|
command keeps the start padding and the action the end padding, so the action box ends on the content edge (an
|
|
@@ -1046,7 +1046,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1046
1046
|
.hjm-list-row-frame[data-density="compact"] { --hjm-list-row-inline: var(--hjm-list-row-compact-padding-inline); }
|
|
1047
1047
|
.hjm-list-row-frame[data-density="relaxed"] { --hjm-list-row-inline: var(--hjm-list-row-relaxed-padding-inline); }
|
|
1048
1048
|
.hjm-list-row-frame[data-density="spacious"] { --hjm-list-row-inline: var(--hjm-list-row-spacious-padding-inline); }
|
|
1049
|
-
.hjm-list-row-frame[data-state="selected"] { background: var(--hjm-color-
|
|
1049
|
+
.hjm-list-row-frame[data-state="selected"] { background: var(--hjm-color-surface-selected); box-shadow: inset 0 0 0 1px var(--hjm-color-border-control); }
|
|
1050
1050
|
.hjm-list-row-frame[data-state="disabled"] { opacity: 0.5; }
|
|
1051
1051
|
.hjm-list-row-frame > .hjm-list-row { flex: 1 1 auto; min-inline-size: 0; inline-size: auto; margin-inline: 0; padding-inline-end: 0; }
|
|
1052
1052
|
.hjm-list-row-frame > .hjm-list-row[data-state] { background: transparent; box-shadow: none; opacity: 1; }
|
|
@@ -1104,7 +1104,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1104
1104
|
.hjm-chip { position: relative; min-block-size: var(--hjm-control-min-touch-target); display: inline-flex; align-items: center; gap: var(--hjm-space-xs); padding-inline: var(--hjm-space-md); border: 1px solid var(--hjm-color-border); border-radius: 999px; background: var(--hjm-color-bg); color: var(--hjm-color-text-body); font: inherit; font-weight: var(--hjm-text-emphasis-medium); cursor: pointer; }
|
|
1105
1105
|
.hjm-chip[data-size="small"] { min-block-size: 36px; padding-inline: var(--hjm-space-sm); gap: var(--hjm-space-xxs); }
|
|
1106
1106
|
.hjm-chip[data-size="small"]::after { content: ""; position: absolute; inset: -4px 0; }
|
|
1107
|
-
.hjm-chip[data-selected] { border-color: var(--hjm-color-
|
|
1107
|
+
.hjm-chip[data-selected] { border-color: var(--hjm-color-border-control); background: var(--hjm-color-surface-selected); color: var(--hjm-color-text); }
|
|
1108
1108
|
.hjm-chip:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
1109
1109
|
.hjm-chip:focus-visible { outline: var(--hjm-focus-width) solid var(--hjm-color-focus); outline-offset: var(--hjm-focus-offset); }
|
|
1110
1110
|
.hjm-chip__indicator, .hjm-chip__leading, .hjm-chip__trailing { display: inline-flex; flex: 0 0 auto; }
|
|
@@ -1611,7 +1611,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1611
1611
|
/* Panel headings and empty-state copy share the same narrow column as rows. */
|
|
1612
1612
|
.hjm-transfer-list__title,
|
|
1613
1613
|
.hjm-transfer-list__empty { min-inline-size: 0; overflow-wrap: anywhere; }
|
|
1614
|
-
.hjm-transfer-list__option[aria-selected="true"] { background: var(--hjm-color-
|
|
1614
|
+
.hjm-transfer-list__option[aria-selected="true"] { background: var(--hjm-color-surface-selected); box-shadow: inset 0 0 0 1px var(--hjm-color-border-control); }
|
|
1615
1615
|
.hjm-transfer-list__option[aria-disabled="true"] { color: var(--hjm-color-text-weak); }
|
|
1616
1616
|
.hjm-transfer-list__option:focus-visible,
|
|
1617
1617
|
.hjm-transfer-list__empty:focus-visible,
|
|
@@ -1973,9 +1973,9 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1973
1973
|
}
|
|
1974
1974
|
/* The pressed state is announced by aria-pressed; color only reinforces it. */
|
|
1975
1975
|
.hjm-toggle-group__item[aria-pressed="true"] {
|
|
1976
|
-
border-color: var(--hjm-color-
|
|
1977
|
-
background: var(--hjm-color-
|
|
1978
|
-
color: var(--hjm-color-
|
|
1976
|
+
border-color: var(--hjm-color-border-control);
|
|
1977
|
+
background: var(--hjm-color-surface-selected);
|
|
1978
|
+
color: var(--hjm-color-text);
|
|
1979
1979
|
font-weight: var(--hjm-text-emphasis-strong);
|
|
1980
1980
|
}
|
|
1981
1981
|
.hjm-toggle-group__item:disabled { cursor: default; color: var(--hjm-color-text-weak); }
|
|
@@ -2208,7 +2208,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2208
2208
|
color: var(--hjm-color-text);
|
|
2209
2209
|
cursor: default;
|
|
2210
2210
|
}
|
|
2211
|
-
.hjm-tree__node[aria-selected="true"] { background: var(--hjm-color-
|
|
2211
|
+
.hjm-tree__node[aria-selected="true"] { background: var(--hjm-color-surface-selected); box-shadow: inset 0 0 0 1px var(--hjm-color-border-control); }
|
|
2212
2212
|
.hjm-tree__node[aria-disabled="true"] { color: var(--hjm-color-text-weak); }
|
|
2213
2213
|
.hjm-tree__node:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: -2px; }
|
|
2214
2214
|
.hjm-tree__indent { flex: 0 0 auto; inline-size: calc(var(--hjm-tree-depth) * var(--hjm-tree-indent)); }
|
|
@@ -2674,7 +2674,8 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2674
2674
|
.hjm-menu__item:hover,
|
|
2675
2675
|
.hjm-menu__item[data-focus="true"] { background: var(--hjm-color-bg); box-shadow: inset 0 0 0 1px var(--hjm-color-content-brand); }
|
|
2676
2676
|
.hjm-menu__item[data-tone="danger"] { color: var(--hjm-color-danger); }
|
|
2677
|
-
.hjm-menu__item[data-state="selected"] {
|
|
2677
|
+
.hjm-menu__item[data-state="selected"] { background: var(--hjm-color-surface-selected); color: var(--hjm-color-text); font-weight: var(--hjm-text-emphasis-strong); }
|
|
2678
|
+
.hjm-menu__item[data-state="selected"][data-tone="danger"] { color: var(--hjm-color-danger); }
|
|
2678
2679
|
.hjm-menu__item:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
2679
2680
|
.hjm-menu__state-message { min-block-size: var(--hjm-control-min-touch-target); display: flex; align-items: center; padding: var(--hjm-space-xs) var(--hjm-space-sm); color: var(--hjm-color-text-muted); overflow-wrap: anywhere; }
|
|
2680
2681
|
.hjm-menu__section-label { padding: var(--hjm-space-xs) var(--hjm-space-sm); color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); font-weight: var(--hjm-text-emphasis-medium); }
|
|
@@ -2728,7 +2729,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2728
2729
|
.hjm-select__listbox[data-density="comfortable"] .hjm-select__option { min-block-size: 3.5rem; }
|
|
2729
2730
|
.hjm-select__option { cursor: pointer; }
|
|
2730
2731
|
.hjm-select__option[data-active="true"] { box-shadow: inset 0 0 0 1px var(--hjm-color-content-brand); background: var(--hjm-color-bg); }
|
|
2731
|
-
.hjm-select__option[data-state="selected"] {
|
|
2732
|
+
.hjm-select__option[data-state="selected"] { background: var(--hjm-color-surface-selected); color: var(--hjm-color-text); font-weight: var(--hjm-font-weight-semibold); }
|
|
2732
2733
|
.hjm-select__option[data-state="disabled"] { opacity: 0.5; cursor: not-allowed; }
|
|
2733
2734
|
.hjm-select__option-copy { min-inline-size: 0; flex: 1 1 auto; display: grid; gap: var(--hjm-space-xxs); }
|
|
2734
2735
|
.hjm-select__option-description, .hjm-select__message { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); }
|
|
@@ -2769,7 +2770,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2769
2770
|
.hjm-combobox__listbox[data-density="comfortable"] .hjm-combobox__option { min-block-size: 3.5rem; }
|
|
2770
2771
|
.hjm-combobox__option { cursor: pointer; }
|
|
2771
2772
|
.hjm-combobox__option[data-state="active"] { box-shadow: inset 0 0 0 1px var(--hjm-color-content-brand); background: var(--hjm-color-bg); }
|
|
2772
|
-
.hjm-combobox__option[
|
|
2773
|
+
.hjm-combobox__option[aria-selected="true"] { background: var(--hjm-color-surface-selected); color: var(--hjm-color-text); font-weight: var(--hjm-font-weight-semibold); }
|
|
2773
2774
|
.hjm-combobox__option[data-state="disabled"] { opacity: 0.5; cursor: not-allowed; }
|
|
2774
2775
|
.hjm-combobox__message { color: var(--hjm-color-text-muted); }
|
|
2775
2776
|
.hjm-form__fieldset { min-inline-size: 0; margin: 0; padding: 0; border: 0; }
|
|
@@ -3302,14 +3303,14 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
3302
3303
|
.hjm-tabs:is([data-appearance="gooey"], [data-appearance="slide"]) .hjm-tabs__list { position: relative; }
|
|
3303
3304
|
.hjm-tabs:is([data-appearance="gooey"], [data-appearance="slide"]) .hjm-tabs__tab[data-state="selected"]::after { display: none; }
|
|
3304
3305
|
.hjm-tabs__indicator { position: absolute; bottom: 0; height: 2px; border-radius: var(--hjm-radius-full); background: var(--hjm-color-content-brand); pointer-events: none; }
|
|
3305
|
-
/* indicator="filled" (tabsRecipe.indicators.filled): a
|
|
3306
|
+
/* indicator="filled" (tabsRecipe.indicators.filled): a neutral selection pill behind the selected tab, no list divider.
|
|
3306
3307
|
The moving pill spans the tab height and sits under the labels. */
|
|
3307
3308
|
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__list { border: 0; }
|
|
3308
3309
|
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__tab { border-radius: var(--hjm-radius-full); }
|
|
3309
|
-
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__tab[data-state="selected"] { color: var(--hjm-color-
|
|
3310
|
+
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__tab[data-state="selected"] { color: var(--hjm-color-text); }
|
|
3310
3311
|
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__tab[data-state="selected"]::after { display: none; }
|
|
3311
|
-
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]):not([data-indicator-motion="moving"]) .hjm-tabs__tab[data-state="selected"] { background: var(--hjm-color-surface-
|
|
3312
|
-
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__indicator { top: 0; bottom: 0; height: auto; border-radius: var(--hjm-radius-full); background: var(--hjm-color-surface-
|
|
3312
|
+
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]):not([data-indicator-motion="moving"]) .hjm-tabs__tab[data-state="selected"] { background: var(--hjm-color-surface-selected); }
|
|
3313
|
+
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__indicator { top: 0; bottom: 0; height: auto; border-radius: var(--hjm-radius-full); background: var(--hjm-color-surface-selected); z-index: 0; }
|
|
3313
3314
|
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__list { position: relative; }
|
|
3314
3315
|
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__tab { z-index: 1; }
|
|
3315
3316
|
.hjm-tabs__gooey { height: 6px; }
|
|
@@ -3332,7 +3333,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
3332
3333
|
}
|
|
3333
3334
|
.hjm-bottom-navigation[data-presentation="capsule"][data-expanded-labels="false"] .hjm-bottom-navigation__item { flex-direction: row; }
|
|
3334
3335
|
.hjm-bottom-navigation[data-presentation="capsule"][data-expanded-labels="false"] .hjm-bottom-navigation__item:not([data-state="selected"]) .hjm-bottom-navigation__label { display: none; }
|
|
3335
|
-
.hjm-bottom-navigation[data-presentation="capsule"] .hjm-bottom-navigation__item[data-state="selected"] { background: var(--hjm-color-surface-
|
|
3336
|
+
.hjm-bottom-navigation[data-presentation="capsule"]:not([data-selection="tile"]) .hjm-bottom-navigation__item[data-state="selected"] { background: var(--hjm-color-surface-selected); color: var(--hjm-color-text); }
|
|
3336
3337
|
.hjm-bottom-navigation[data-presentation="capsule"] .hjm-bottom-navigation__primary-action { position: static; translate: none; flex-shrink: 0; }
|
|
3337
3338
|
@media (prefers-reduced-motion: reduce) { .hjm-bottom-navigation[data-presentation="capsule"] .hjm-bottom-navigation__item { transition: none; } }
|
|
3338
3339
|
|
|
@@ -3607,9 +3608,8 @@ button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm
|
|
|
3607
3608
|
/* Only the chat strip enlarges glyphs, to the title type step Native's strip uses. The default
|
|
3608
3609
|
wrap layout keeps the button's own size, as published before the strip existed. */
|
|
3609
3610
|
.hjm-reaction-picker[data-layout="strip"] .hjm-reaction-picker__glyph { font-size: var(--hjm-type-title-size); line-height: var(--hjm-type-title-line-height); }
|
|
3610
|
-
/*
|
|
3611
|
-
|
|
3612
|
-
.hjm-reaction-picker__chip[data-selected] { background: var(--hjm-color-surface-accent); }
|
|
3611
|
+
/* Emoji ignore text color; wrap and strip both retain the shared neutral selection fill. */
|
|
3612
|
+
.hjm-reaction-picker__chip[data-selected] { background: var(--hjm-color-surface-selected); }
|
|
3613
3613
|
|
|
3614
3614
|
/* The embedded circle uses the small 36px recipe; centre it in the field rather than on the text baseline.
|
|
3615
3615
|
Reduce only its trailing inset to 8px, preserving the text's 16px leading padding. */
|
|
@@ -3637,8 +3637,8 @@ button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm
|
|
|
3637
3637
|
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item::before { content:""; position:absolute; inset:var(--hjm-space-xxs) 0; border-radius:var(--hjm-radius-full); background:var(--hjm-color-bg); border:1px solid var(--hjm-color-border-control); }
|
|
3638
3638
|
.hjm-segmented[data-presentation="pills"][data-size="small"] .hjm-segmented__item { padding-inline:var(--hjm-space-sm); }
|
|
3639
3639
|
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item > span { position:relative; overflow-wrap:anywhere; }
|
|
3640
|
-
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item[data-state="checked"] { color:var(--hjm-color-
|
|
3641
|
-
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item[data-state="checked"]::before { background:var(--hjm-color-
|
|
3640
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item[data-state="checked"] { color:var(--hjm-color-text); font-weight:var(--hjm-font-weight-semibold); }
|
|
3641
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item[data-state="checked"]::before { background:var(--hjm-color-surface-selected); border-color:var(--hjm-color-surface-selected); }
|
|
3642
3642
|
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item:focus-within { outline:2px solid var(--hjm-color-focus); outline-offset:2px; }
|
|
3643
3643
|
|
|
3644
3644
|
/* Reference rating: real radios preserve browser keyboard and form behavior. */
|
|
@@ -3651,11 +3651,11 @@ button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm
|
|
|
3651
3651
|
/* Selection artwork moves independently; radios, labels and focus stay in place.
|
|
3652
3652
|
An opt-in avoids changing existing connected/pill consumers before review. */
|
|
3653
3653
|
.hjm-segmented__items:has(> .hjm-segmented__highlight) { position: relative; isolation: isolate; }
|
|
3654
|
-
.hjm-segmented__highlight { position: absolute; pointer-events: none; z-index: 1; border-radius: var(--hjm-radius-md); background: var(--hjm-color-
|
|
3654
|
+
.hjm-segmented__highlight { position: absolute; pointer-events: none; z-index: 1; border-radius: var(--hjm-radius-md); background: var(--hjm-color-surface-selected); box-shadow: inset 0 0 0 2px var(--hjm-color-focus); }
|
|
3655
3655
|
.hjm-segmented__highlight[data-moving="true"] { transition: left var(--hjm-motion-normal) ease-out, top var(--hjm-motion-normal) ease-out, width var(--hjm-motion-normal) ease-out, height var(--hjm-motion-normal) ease-out; }
|
|
3656
3656
|
.hjm-segmented__items[data-highlight-ready="true"] > .hjm-segmented__item[data-state="checked"] { background: transparent; box-shadow: none; }
|
|
3657
3657
|
.hjm-segmented__items[data-highlight-ready="true"] > .hjm-segmented__item > span { position: relative; z-index: 2; pointer-events: none; }
|
|
3658
|
-
.hjm-segmented[data-presentation="pills"] .hjm-segmented__highlight { border-radius: var(--hjm-radius-full); background: var(--hjm-color-
|
|
3658
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__highlight { border-radius: var(--hjm-radius-full); background: var(--hjm-color-surface-selected); box-shadow: none; }
|
|
3659
3659
|
.hjm-segmented[data-presentation="pills"] .hjm-segmented__items[data-highlight-ready="true"] > .hjm-segmented__item[data-state="checked"]::before { background: transparent; }
|
|
3660
3660
|
[data-motion="reduced"] .hjm-segmented__highlight { transition: none; }
|
|
3661
3661
|
@media (prefers-reduced-motion: reduce) { .hjm-segmented__highlight { transition: none; } }
|
|
@@ -3805,11 +3805,16 @@ button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm
|
|
|
3805
3805
|
.hjm-time-picker__caption { text-align:center; color:var(--hjm-color-text-muted); margin-block-end:var(--hjm-space-xs); }
|
|
3806
3806
|
.hjm-time-picker__list { position:relative; block-size:var(--hjm-time-height); overflow-y:auto; overscroll-behavior:contain; scrollbar-width:thin; }
|
|
3807
3807
|
.hjm-time-picker__list button { display:block; inline-size:100%; min-block-size:var(--hjm-time-row); border:0; border-radius:var(--hjm-radius-md); background:transparent; color:var(--hjm-color-text); font:inherit; font-variant-numeric:tabular-nums; cursor:pointer; }
|
|
3808
|
-
.hjm-time-picker__list button[aria-selected=true] { background:var(--hjm-color-surface-
|
|
3808
|
+
.hjm-time-picker__list button[aria-selected=true] { background:var(--hjm-color-surface-selected); color:var(--hjm-color-text); font-weight:500; }
|
|
3809
3809
|
.hjm-time-picker__list button:disabled { opacity:.4; cursor:default; }
|
|
3810
3810
|
.hjm-time-picker__list button:focus-visible,.hjm-time-picker__trigger:focus-visible { outline:2px solid var(--hjm-color-content-brand); outline-offset:-2px; }
|
|
3811
3811
|
.hjm-time-picker__description { color:var(--hjm-color-text-muted); }
|
|
3812
3812
|
.hjm-time-picker__error { color:var(--hjm-color-danger); }
|
|
3813
|
+
.hjm-time-picker__viewport { position:relative; }
|
|
3814
|
+
.hjm-time-picker__center { position:absolute; inset-inline:0; inset-block-start:calc((var(--hjm-time-height) - var(--hjm-time-row)) / 2); block-size:var(--hjm-time-row); border:var(--hjm-stroke-default) solid var(--hjm-color-border-control); border-radius:var(--hjm-radius-md); pointer-events:none; z-index:1; }
|
|
3815
|
+
.hjm-time-picker__list[data-wheel] { box-sizing:border-box; padding-block:calc((var(--hjm-time-height) - var(--hjm-time-row)) / 2); scroll-snap-type:y mandatory; overflow-anchor:none; scrollbar-width:none; }
|
|
3816
|
+
.hjm-time-picker__list[data-wheel] button { block-size:var(--hjm-time-row); scroll-snap-align:center; }
|
|
3817
|
+
.hjm-time-picker__list[data-wheel][aria-disabled=true] { overflow-y:hidden; }
|
|
3813
3818
|
|
|
3814
3819
|
/* IconTile's own target keeps the full artwork width; Button's face padding would squeeze narrow grid cells. */
|
|
3815
3820
|
.hjm-icon-tile-action { display: block; box-sizing: border-box; width: 100%; margin: 0; padding: 0; border: 0; border-radius: var(--hjm-radius-md); background: transparent; color: inherit; font: inherit; cursor: pointer; }
|
|
@@ -3848,3 +3853,8 @@ button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm
|
|
|
3848
3853
|
.hjm-image-viewer .hjm-icon-button { color: #fff; background: #222; }
|
|
3849
3854
|
|
|
3850
3855
|
.hjm-image-viewer__actions { margin-inline-start: auto; }
|
|
3856
|
+
|
|
3857
|
+
/* Persistent selection uses a neutral surface; active-descendant focus keeps its own treatment. */
|
|
3858
|
+
.hjm-surface[data-tone="selected"] { background: var(--hjm-color-surface-selected); }
|
|
3859
|
+
.hjm-surface[data-tone="selected"][data-bordered="true"] { border-color: var(--hjm-color-border-control); }
|
|
3860
|
+
.hjm-data-table__table tr[aria-selected="true"] > :is(td, th) { background-color: var(--hjm-color-surface-selected); }
|
package/dist/styles.layered.css
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
@layer hjm {
|
|
2
|
-
/*
|
|
2
|
+
/* Persistent selection uses its neutral surface. Focus, primary actions and compact value marks retain their distinct semantic roles; see theme-palette.md. */
|
|
3
3
|
.hjm-root,
|
|
4
4
|
.hjm-root *,
|
|
5
5
|
.hjm-root *::before,
|
|
@@ -269,7 +269,7 @@
|
|
|
269
269
|
/* Toggle treatment: aria-pressed already carried the state, so without a paired
|
|
270
270
|
visual every consumer painted the selected background in product styles.
|
|
271
271
|
Selection uses content color without an added border (2026-10-10 user request); focus stays separate. */
|
|
272
|
-
.hjm-button[data-selected="true"], .hjm-icon-button[data-selected="true"] { color: var(--hjm-color-
|
|
272
|
+
.hjm-button[data-selected="true"], .hjm-icon-button[data-selected="true"] { color: var(--hjm-color-text); background: var(--hjm-color-surface-selected); border-color: transparent; }
|
|
273
273
|
.hjm-button:active:not(:disabled):not([aria-disabled="true"]), .hjm-icon-button:active:not(:disabled):not([aria-disabled="true"]) { opacity: var(--hjm-button-pressed-opacity); }
|
|
274
274
|
/* data-state="disabled" also covers focusable boundaries (aria-disabled, e.g. Carousel previous on the first slide),
|
|
275
275
|
which looked enabled while Native dimmed them (2026-10-17 review E9). */
|
|
@@ -288,7 +288,7 @@
|
|
|
288
288
|
.hjm-button[data-tone="primary"] { --hjm-button-face-fill: var(--hjm-color-primary); }
|
|
289
289
|
.hjm-button[data-tone="secondary"] { --hjm-button-face-fill: var(--hjm-color-bg); --hjm-button-face-border: var(--hjm-color-border-control); }
|
|
290
290
|
.hjm-button[data-tone="danger"] { --hjm-button-face-fill: var(--hjm-color-danger-fill); }
|
|
291
|
-
.hjm-button[data-selected="true"] { --hjm-button-face-fill: var(--hjm-color-
|
|
291
|
+
.hjm-button[data-selected="true"] { --hjm-button-face-fill: var(--hjm-color-surface-selected); --hjm-button-face-border: transparent; }
|
|
292
292
|
.hjm-button[data-raised="true"] { padding: 0 0 var(--hjm-button-depth); border: 0; gap: 0; flex-direction: column; background: color-mix(in srgb, var(--hjm-button-side), #000 var(--hjm-button-side-shade)); }
|
|
293
293
|
.hjm-button__face { position: relative; display: flex; box-sizing: border-box; inline-size: 100%; min-block-size: inherit; flex: 1; align-items: center; justify-content: inherit; gap: var(--hjm-space-xs); padding: var(--hjm-space-xs) var(--hjm-button-face-padding); border: 1px solid var(--hjm-button-face-border, transparent); border-radius: inherit; background: var(--hjm-button-face-fill); transition: transform var(--hjm-button-settle) ease-out; }
|
|
294
294
|
.hjm-button[data-raised="true"]:active:not(:disabled):not([aria-disabled="true"]) { opacity: 1; }
|
|
@@ -814,7 +814,7 @@
|
|
|
814
814
|
.hjm-choice[data-presentation="card"][data-state="checked"],
|
|
815
815
|
.hjm-choice[data-presentation="card"][data-state="mixed"],
|
|
816
816
|
.hjm-choice[data-presentation="grouped"][data-state="checked"],
|
|
817
|
-
.hjm-choice[data-presentation="grouped"][data-state="mixed"] { border-color: var(--hjm-color-
|
|
817
|
+
.hjm-choice[data-presentation="grouped"][data-state="mixed"] { border-color: var(--hjm-color-border-control); background: var(--hjm-color-surface-selected); }
|
|
818
818
|
.hjm-choice[data-size="small"] { min-block-size: 44px; gap: var(--hjm-space-xs); padding: var(--hjm-space-xs) var(--hjm-space-sm); }
|
|
819
819
|
.hjm-choice[data-size="small"][data-presentation="plain"] { padding: 0; }
|
|
820
820
|
.hjm-choice__input { position: absolute; opacity: 0; inline-size: 1px; block-size: 1px; }
|
|
@@ -882,7 +882,7 @@
|
|
|
882
882
|
.hjm-choice[data-presentation="chips"] .hjm-choice__indicator { display: none; }
|
|
883
883
|
.hjm-choice[data-presentation="chips"] .hjm-choice__leading { color: inherit; }
|
|
884
884
|
.hjm-choice[data-presentation="chips"] .hjm-choice__copy { min-inline-size: 0; overflow-wrap: anywhere; padding-block: 0; }
|
|
885
|
-
.hjm-choice[data-presentation="chips"][data-state="checked"], .hjm-choice[data-presentation="chips"][data-state="mixed"] { color: var(--hjm-color-
|
|
885
|
+
.hjm-choice[data-presentation="chips"][data-state="checked"], .hjm-choice[data-presentation="chips"][data-state="mixed"] { color: var(--hjm-color-text); border-color: var(--hjm-color-border-control); background: var(--hjm-color-surface-selected); }
|
|
886
886
|
.hjm-choice[data-presentation="chips"]:has(.hjm-choice__input:focus-visible) { outline: var(--hjm-focus-width) solid var(--hjm-color-focus); outline-offset: var(--hjm-focus-offset); }
|
|
887
887
|
/* A described switch: copy + switchRecipe.rowPaddingVertical 8 on both sides, min rowTwoLineMinHeight 56, same as Native.
|
|
888
888
|
Stacked switch rows carry this spacing themselves; containers add no gap between them (2026-10-17). */
|
|
@@ -924,7 +924,7 @@
|
|
|
924
924
|
/* Vertical only: neighbours are 4px apart, so a horizontal slop would overlap the next option's target. */
|
|
925
925
|
.hjm-segmented:where(:not([data-presentation="pills"]):not([data-presentation="text"])) .hjm-segmented__item::after { content: ""; position: absolute; inset: calc((var(--hjm-segmented-height) - 2 * (var(--hjm-space-xxs) + 1px) - var(--hjm-control-min-touch-target)) / 2) 0; }
|
|
926
926
|
.hjm-segmented__item input { position: absolute; opacity: 0; }
|
|
927
|
-
.hjm-segmented__item[data-state="checked"] { box-shadow: inset 0 0 0 2px var(--hjm-color-focus); color: var(--hjm-color-
|
|
927
|
+
.hjm-segmented__item[data-state="checked"] { box-shadow: inset 0 0 0 2px var(--hjm-color-focus); color: var(--hjm-color-text); background: var(--hjm-color-surface-selected); font-weight: var(--hjm-font-weight-semibold); }
|
|
928
928
|
.hjm-segmented__item[data-disabled="true"] { opacity: 0.5; cursor: not-allowed; }
|
|
929
929
|
|
|
930
930
|
/* segmentedControlRecipe.adaptive.largeTextLayout stacks oversized labels, matching RN.
|
|
@@ -1038,7 +1038,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1038
1038
|
.hjm-list-row[data-density="relaxed"][data-lines="two"] { min-block-size: var(--hjm-list-row-relaxed-two-line); }
|
|
1039
1039
|
.hjm-list-row[data-density="spacious"] { --hjm-list-row-inline: var(--hjm-list-row-spacious-padding-inline); min-block-size: var(--hjm-list-row-spacious-one-line); padding-block: var(--hjm-list-row-spacious-padding-block); }
|
|
1040
1040
|
.hjm-list-row[data-density="spacious"][data-lines="two"] { min-block-size: var(--hjm-list-row-spacious-two-line); }
|
|
1041
|
-
.hjm-list-row[data-state="selected"] { background: var(--hjm-color-
|
|
1041
|
+
.hjm-list-row[data-state="selected"] { background: var(--hjm-color-surface-selected); box-shadow: inset 0 0 0 1px var(--hjm-color-border-control); }
|
|
1042
1042
|
.hjm-list-row[data-state="disabled"] { opacity: 0.5; cursor: not-allowed; }
|
|
1043
1043
|
/* trailingAction: one surface for the row command and its separate action, as Native. The frame takes the bleed; the
|
|
1044
1044
|
command keeps the start padding and the action the end padding, so the action box ends on the content edge (an
|
|
@@ -1047,7 +1047,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1047
1047
|
.hjm-list-row-frame[data-density="compact"] { --hjm-list-row-inline: var(--hjm-list-row-compact-padding-inline); }
|
|
1048
1048
|
.hjm-list-row-frame[data-density="relaxed"] { --hjm-list-row-inline: var(--hjm-list-row-relaxed-padding-inline); }
|
|
1049
1049
|
.hjm-list-row-frame[data-density="spacious"] { --hjm-list-row-inline: var(--hjm-list-row-spacious-padding-inline); }
|
|
1050
|
-
.hjm-list-row-frame[data-state="selected"] { background: var(--hjm-color-
|
|
1050
|
+
.hjm-list-row-frame[data-state="selected"] { background: var(--hjm-color-surface-selected); box-shadow: inset 0 0 0 1px var(--hjm-color-border-control); }
|
|
1051
1051
|
.hjm-list-row-frame[data-state="disabled"] { opacity: 0.5; }
|
|
1052
1052
|
.hjm-list-row-frame > .hjm-list-row { flex: 1 1 auto; min-inline-size: 0; inline-size: auto; margin-inline: 0; padding-inline-end: 0; }
|
|
1053
1053
|
.hjm-list-row-frame > .hjm-list-row[data-state] { background: transparent; box-shadow: none; opacity: 1; }
|
|
@@ -1105,7 +1105,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1105
1105
|
.hjm-chip { position: relative; min-block-size: var(--hjm-control-min-touch-target); display: inline-flex; align-items: center; gap: var(--hjm-space-xs); padding-inline: var(--hjm-space-md); border: 1px solid var(--hjm-color-border); border-radius: 999px; background: var(--hjm-color-bg); color: var(--hjm-color-text-body); font: inherit; font-weight: var(--hjm-text-emphasis-medium); cursor: pointer; }
|
|
1106
1106
|
.hjm-chip[data-size="small"] { min-block-size: 36px; padding-inline: var(--hjm-space-sm); gap: var(--hjm-space-xxs); }
|
|
1107
1107
|
.hjm-chip[data-size="small"]::after { content: ""; position: absolute; inset: -4px 0; }
|
|
1108
|
-
.hjm-chip[data-selected] { border-color: var(--hjm-color-
|
|
1108
|
+
.hjm-chip[data-selected] { border-color: var(--hjm-color-border-control); background: var(--hjm-color-surface-selected); color: var(--hjm-color-text); }
|
|
1109
1109
|
.hjm-chip:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
1110
1110
|
.hjm-chip:focus-visible { outline: var(--hjm-focus-width) solid var(--hjm-color-focus); outline-offset: var(--hjm-focus-offset); }
|
|
1111
1111
|
.hjm-chip__indicator, .hjm-chip__leading, .hjm-chip__trailing { display: inline-flex; flex: 0 0 auto; }
|
|
@@ -1612,7 +1612,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1612
1612
|
/* Panel headings and empty-state copy share the same narrow column as rows. */
|
|
1613
1613
|
.hjm-transfer-list__title,
|
|
1614
1614
|
.hjm-transfer-list__empty { min-inline-size: 0; overflow-wrap: anywhere; }
|
|
1615
|
-
.hjm-transfer-list__option[aria-selected="true"] { background: var(--hjm-color-
|
|
1615
|
+
.hjm-transfer-list__option[aria-selected="true"] { background: var(--hjm-color-surface-selected); box-shadow: inset 0 0 0 1px var(--hjm-color-border-control); }
|
|
1616
1616
|
.hjm-transfer-list__option[aria-disabled="true"] { color: var(--hjm-color-text-weak); }
|
|
1617
1617
|
.hjm-transfer-list__option:focus-visible,
|
|
1618
1618
|
.hjm-transfer-list__empty:focus-visible,
|
|
@@ -1974,9 +1974,9 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1974
1974
|
}
|
|
1975
1975
|
/* The pressed state is announced by aria-pressed; color only reinforces it. */
|
|
1976
1976
|
.hjm-toggle-group__item[aria-pressed="true"] {
|
|
1977
|
-
border-color: var(--hjm-color-
|
|
1978
|
-
background: var(--hjm-color-
|
|
1979
|
-
color: var(--hjm-color-
|
|
1977
|
+
border-color: var(--hjm-color-border-control);
|
|
1978
|
+
background: var(--hjm-color-surface-selected);
|
|
1979
|
+
color: var(--hjm-color-text);
|
|
1980
1980
|
font-weight: var(--hjm-text-emphasis-strong);
|
|
1981
1981
|
}
|
|
1982
1982
|
.hjm-toggle-group__item:disabled { cursor: default; color: var(--hjm-color-text-weak); }
|
|
@@ -2209,7 +2209,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2209
2209
|
color: var(--hjm-color-text);
|
|
2210
2210
|
cursor: default;
|
|
2211
2211
|
}
|
|
2212
|
-
.hjm-tree__node[aria-selected="true"] { background: var(--hjm-color-
|
|
2212
|
+
.hjm-tree__node[aria-selected="true"] { background: var(--hjm-color-surface-selected); box-shadow: inset 0 0 0 1px var(--hjm-color-border-control); }
|
|
2213
2213
|
.hjm-tree__node[aria-disabled="true"] { color: var(--hjm-color-text-weak); }
|
|
2214
2214
|
.hjm-tree__node:focus-visible { outline: 2px solid var(--hjm-color-focus); outline-offset: -2px; }
|
|
2215
2215
|
.hjm-tree__indent { flex: 0 0 auto; inline-size: calc(var(--hjm-tree-depth) * var(--hjm-tree-indent)); }
|
|
@@ -2675,7 +2675,8 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2675
2675
|
.hjm-menu__item:hover,
|
|
2676
2676
|
.hjm-menu__item[data-focus="true"] { background: var(--hjm-color-bg); box-shadow: inset 0 0 0 1px var(--hjm-color-content-brand); }
|
|
2677
2677
|
.hjm-menu__item[data-tone="danger"] { color: var(--hjm-color-danger); }
|
|
2678
|
-
.hjm-menu__item[data-state="selected"] {
|
|
2678
|
+
.hjm-menu__item[data-state="selected"] { background: var(--hjm-color-surface-selected); color: var(--hjm-color-text); font-weight: var(--hjm-text-emphasis-strong); }
|
|
2679
|
+
.hjm-menu__item[data-state="selected"][data-tone="danger"] { color: var(--hjm-color-danger); }
|
|
2679
2680
|
.hjm-menu__item:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
2680
2681
|
.hjm-menu__state-message { min-block-size: var(--hjm-control-min-touch-target); display: flex; align-items: center; padding: var(--hjm-space-xs) var(--hjm-space-sm); color: var(--hjm-color-text-muted); overflow-wrap: anywhere; }
|
|
2681
2682
|
.hjm-menu__section-label { padding: var(--hjm-space-xs) var(--hjm-space-sm); color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); font-weight: var(--hjm-text-emphasis-medium); }
|
|
@@ -2729,7 +2730,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2729
2730
|
.hjm-select__listbox[data-density="comfortable"] .hjm-select__option { min-block-size: 3.5rem; }
|
|
2730
2731
|
.hjm-select__option { cursor: pointer; }
|
|
2731
2732
|
.hjm-select__option[data-active="true"] { box-shadow: inset 0 0 0 1px var(--hjm-color-content-brand); background: var(--hjm-color-bg); }
|
|
2732
|
-
.hjm-select__option[data-state="selected"] {
|
|
2733
|
+
.hjm-select__option[data-state="selected"] { background: var(--hjm-color-surface-selected); color: var(--hjm-color-text); font-weight: var(--hjm-font-weight-semibold); }
|
|
2733
2734
|
.hjm-select__option[data-state="disabled"] { opacity: 0.5; cursor: not-allowed; }
|
|
2734
2735
|
.hjm-select__option-copy { min-inline-size: 0; flex: 1 1 auto; display: grid; gap: var(--hjm-space-xxs); }
|
|
2735
2736
|
.hjm-select__option-description, .hjm-select__message { color: var(--hjm-color-text-muted); font-size: var(--hjm-type-label-size); }
|
|
@@ -2770,7 +2771,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2770
2771
|
.hjm-combobox__listbox[data-density="comfortable"] .hjm-combobox__option { min-block-size: 3.5rem; }
|
|
2771
2772
|
.hjm-combobox__option { cursor: pointer; }
|
|
2772
2773
|
.hjm-combobox__option[data-state="active"] { box-shadow: inset 0 0 0 1px var(--hjm-color-content-brand); background: var(--hjm-color-bg); }
|
|
2773
|
-
.hjm-combobox__option[
|
|
2774
|
+
.hjm-combobox__option[aria-selected="true"] { background: var(--hjm-color-surface-selected); color: var(--hjm-color-text); font-weight: var(--hjm-font-weight-semibold); }
|
|
2774
2775
|
.hjm-combobox__option[data-state="disabled"] { opacity: 0.5; cursor: not-allowed; }
|
|
2775
2776
|
.hjm-combobox__message { color: var(--hjm-color-text-muted); }
|
|
2776
2777
|
.hjm-form__fieldset { min-inline-size: 0; margin: 0; padding: 0; border: 0; }
|
|
@@ -3303,14 +3304,14 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
3303
3304
|
.hjm-tabs:is([data-appearance="gooey"], [data-appearance="slide"]) .hjm-tabs__list { position: relative; }
|
|
3304
3305
|
.hjm-tabs:is([data-appearance="gooey"], [data-appearance="slide"]) .hjm-tabs__tab[data-state="selected"]::after { display: none; }
|
|
3305
3306
|
.hjm-tabs__indicator { position: absolute; bottom: 0; height: 2px; border-radius: var(--hjm-radius-full); background: var(--hjm-color-content-brand); pointer-events: none; }
|
|
3306
|
-
/* indicator="filled" (tabsRecipe.indicators.filled): a
|
|
3307
|
+
/* indicator="filled" (tabsRecipe.indicators.filled): a neutral selection pill behind the selected tab, no list divider.
|
|
3307
3308
|
The moving pill spans the tab height and sits under the labels. */
|
|
3308
3309
|
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__list { border: 0; }
|
|
3309
3310
|
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__tab { border-radius: var(--hjm-radius-full); }
|
|
3310
|
-
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__tab[data-state="selected"] { color: var(--hjm-color-
|
|
3311
|
+
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__tab[data-state="selected"] { color: var(--hjm-color-text); }
|
|
3311
3312
|
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__tab[data-state="selected"]::after { display: none; }
|
|
3312
|
-
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]):not([data-indicator-motion="moving"]) .hjm-tabs__tab[data-state="selected"] { background: var(--hjm-color-surface-
|
|
3313
|
-
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__indicator { top: 0; bottom: 0; height: auto; border-radius: var(--hjm-radius-full); background: var(--hjm-color-surface-
|
|
3313
|
+
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]):not([data-indicator-motion="moving"]) .hjm-tabs__tab[data-state="selected"] { background: var(--hjm-color-surface-selected); }
|
|
3314
|
+
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__indicator { top: 0; bottom: 0; height: auto; border-radius: var(--hjm-radius-full); background: var(--hjm-color-surface-selected); z-index: 0; }
|
|
3314
3315
|
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__list { position: relative; }
|
|
3315
3316
|
.hjm-tabs:is([data-indicator="filled"],[data-indicator="solid"]) .hjm-tabs__tab { z-index: 1; }
|
|
3316
3317
|
.hjm-tabs__gooey { height: 6px; }
|
|
@@ -3333,7 +3334,7 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
3333
3334
|
}
|
|
3334
3335
|
.hjm-bottom-navigation[data-presentation="capsule"][data-expanded-labels="false"] .hjm-bottom-navigation__item { flex-direction: row; }
|
|
3335
3336
|
.hjm-bottom-navigation[data-presentation="capsule"][data-expanded-labels="false"] .hjm-bottom-navigation__item:not([data-state="selected"]) .hjm-bottom-navigation__label { display: none; }
|
|
3336
|
-
.hjm-bottom-navigation[data-presentation="capsule"] .hjm-bottom-navigation__item[data-state="selected"] { background: var(--hjm-color-surface-
|
|
3337
|
+
.hjm-bottom-navigation[data-presentation="capsule"]:not([data-selection="tile"]) .hjm-bottom-navigation__item[data-state="selected"] { background: var(--hjm-color-surface-selected); color: var(--hjm-color-text); }
|
|
3337
3338
|
.hjm-bottom-navigation[data-presentation="capsule"] .hjm-bottom-navigation__primary-action { position: static; translate: none; flex-shrink: 0; }
|
|
3338
3339
|
@media (prefers-reduced-motion: reduce) { .hjm-bottom-navigation[data-presentation="capsule"] .hjm-bottom-navigation__item { transition: none; } }
|
|
3339
3340
|
|
|
@@ -3608,9 +3609,8 @@ button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm
|
|
|
3608
3609
|
/* Only the chat strip enlarges glyphs, to the title type step Native's strip uses. The default
|
|
3609
3610
|
wrap layout keeps the button's own size, as published before the strip existed. */
|
|
3610
3611
|
.hjm-reaction-picker[data-layout="strip"] .hjm-reaction-picker__glyph { font-size: var(--hjm-type-title-size); line-height: var(--hjm-type-title-line-height); }
|
|
3611
|
-
/*
|
|
3612
|
-
|
|
3613
|
-
.hjm-reaction-picker__chip[data-selected] { background: var(--hjm-color-surface-accent); }
|
|
3612
|
+
/* Emoji ignore text color; wrap and strip both retain the shared neutral selection fill. */
|
|
3613
|
+
.hjm-reaction-picker__chip[data-selected] { background: var(--hjm-color-surface-selected); }
|
|
3614
3614
|
|
|
3615
3615
|
/* The embedded circle uses the small 36px recipe; centre it in the field rather than on the text baseline.
|
|
3616
3616
|
Reduce only its trailing inset to 8px, preserving the text's 16px leading padding. */
|
|
@@ -3638,8 +3638,8 @@ button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm
|
|
|
3638
3638
|
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item::before { content:""; position:absolute; inset:var(--hjm-space-xxs) 0; border-radius:var(--hjm-radius-full); background:var(--hjm-color-bg); border:1px solid var(--hjm-color-border-control); }
|
|
3639
3639
|
.hjm-segmented[data-presentation="pills"][data-size="small"] .hjm-segmented__item { padding-inline:var(--hjm-space-sm); }
|
|
3640
3640
|
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item > span { position:relative; overflow-wrap:anywhere; }
|
|
3641
|
-
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item[data-state="checked"] { color:var(--hjm-color-
|
|
3642
|
-
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item[data-state="checked"]::before { background:var(--hjm-color-
|
|
3641
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item[data-state="checked"] { color:var(--hjm-color-text); font-weight:var(--hjm-font-weight-semibold); }
|
|
3642
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item[data-state="checked"]::before { background:var(--hjm-color-surface-selected); border-color:var(--hjm-color-surface-selected); }
|
|
3643
3643
|
.hjm-segmented[data-presentation="pills"] .hjm-segmented__item:focus-within { outline:2px solid var(--hjm-color-focus); outline-offset:2px; }
|
|
3644
3644
|
|
|
3645
3645
|
/* Reference rating: real radios preserve browser keyboard and form behavior. */
|
|
@@ -3652,11 +3652,11 @@ button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm
|
|
|
3652
3652
|
/* Selection artwork moves independently; radios, labels and focus stay in place.
|
|
3653
3653
|
An opt-in avoids changing existing connected/pill consumers before review. */
|
|
3654
3654
|
.hjm-segmented__items:has(> .hjm-segmented__highlight) { position: relative; isolation: isolate; }
|
|
3655
|
-
.hjm-segmented__highlight { position: absolute; pointer-events: none; z-index: 1; border-radius: var(--hjm-radius-md); background: var(--hjm-color-
|
|
3655
|
+
.hjm-segmented__highlight { position: absolute; pointer-events: none; z-index: 1; border-radius: var(--hjm-radius-md); background: var(--hjm-color-surface-selected); box-shadow: inset 0 0 0 2px var(--hjm-color-focus); }
|
|
3656
3656
|
.hjm-segmented__highlight[data-moving="true"] { transition: left var(--hjm-motion-normal) ease-out, top var(--hjm-motion-normal) ease-out, width var(--hjm-motion-normal) ease-out, height var(--hjm-motion-normal) ease-out; }
|
|
3657
3657
|
.hjm-segmented__items[data-highlight-ready="true"] > .hjm-segmented__item[data-state="checked"] { background: transparent; box-shadow: none; }
|
|
3658
3658
|
.hjm-segmented__items[data-highlight-ready="true"] > .hjm-segmented__item > span { position: relative; z-index: 2; pointer-events: none; }
|
|
3659
|
-
.hjm-segmented[data-presentation="pills"] .hjm-segmented__highlight { border-radius: var(--hjm-radius-full); background: var(--hjm-color-
|
|
3659
|
+
.hjm-segmented[data-presentation="pills"] .hjm-segmented__highlight { border-radius: var(--hjm-radius-full); background: var(--hjm-color-surface-selected); box-shadow: none; }
|
|
3660
3660
|
.hjm-segmented[data-presentation="pills"] .hjm-segmented__items[data-highlight-ready="true"] > .hjm-segmented__item[data-state="checked"]::before { background: transparent; }
|
|
3661
3661
|
[data-motion="reduced"] .hjm-segmented__highlight { transition: none; }
|
|
3662
3662
|
@media (prefers-reduced-motion: reduce) { .hjm-segmented__highlight { transition: none; } }
|
|
@@ -3806,11 +3806,16 @@ button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm
|
|
|
3806
3806
|
.hjm-time-picker__caption { text-align:center; color:var(--hjm-color-text-muted); margin-block-end:var(--hjm-space-xs); }
|
|
3807
3807
|
.hjm-time-picker__list { position:relative; block-size:var(--hjm-time-height); overflow-y:auto; overscroll-behavior:contain; scrollbar-width:thin; }
|
|
3808
3808
|
.hjm-time-picker__list button { display:block; inline-size:100%; min-block-size:var(--hjm-time-row); border:0; border-radius:var(--hjm-radius-md); background:transparent; color:var(--hjm-color-text); font:inherit; font-variant-numeric:tabular-nums; cursor:pointer; }
|
|
3809
|
-
.hjm-time-picker__list button[aria-selected=true] { background:var(--hjm-color-surface-
|
|
3809
|
+
.hjm-time-picker__list button[aria-selected=true] { background:var(--hjm-color-surface-selected); color:var(--hjm-color-text); font-weight:500; }
|
|
3810
3810
|
.hjm-time-picker__list button:disabled { opacity:.4; cursor:default; }
|
|
3811
3811
|
.hjm-time-picker__list button:focus-visible,.hjm-time-picker__trigger:focus-visible { outline:2px solid var(--hjm-color-content-brand); outline-offset:-2px; }
|
|
3812
3812
|
.hjm-time-picker__description { color:var(--hjm-color-text-muted); }
|
|
3813
3813
|
.hjm-time-picker__error { color:var(--hjm-color-danger); }
|
|
3814
|
+
.hjm-time-picker__viewport { position:relative; }
|
|
3815
|
+
.hjm-time-picker__center { position:absolute; inset-inline:0; inset-block-start:calc((var(--hjm-time-height) - var(--hjm-time-row)) / 2); block-size:var(--hjm-time-row); border:var(--hjm-stroke-default) solid var(--hjm-color-border-control); border-radius:var(--hjm-radius-md); pointer-events:none; z-index:1; }
|
|
3816
|
+
.hjm-time-picker__list[data-wheel] { box-sizing:border-box; padding-block:calc((var(--hjm-time-height) - var(--hjm-time-row)) / 2); scroll-snap-type:y mandatory; overflow-anchor:none; scrollbar-width:none; }
|
|
3817
|
+
.hjm-time-picker__list[data-wheel] button { block-size:var(--hjm-time-row); scroll-snap-align:center; }
|
|
3818
|
+
.hjm-time-picker__list[data-wheel][aria-disabled=true] { overflow-y:hidden; }
|
|
3814
3819
|
|
|
3815
3820
|
/* IconTile's own target keeps the full artwork width; Button's face padding would squeeze narrow grid cells. */
|
|
3816
3821
|
.hjm-icon-tile-action { display: block; box-sizing: border-box; width: 100%; margin: 0; padding: 0; border: 0; border-radius: var(--hjm-radius-md); background: transparent; color: inherit; font: inherit; cursor: pointer; }
|
|
@@ -3850,4 +3855,9 @@ button.hjm-chat-message__media-item:focus-visible { outline: 2px solid var(--hjm
|
|
|
3850
3855
|
|
|
3851
3856
|
.hjm-image-viewer__actions { margin-inline-start: auto; }
|
|
3852
3857
|
|
|
3858
|
+
/* Persistent selection uses a neutral surface; active-descendant focus keeps its own treatment. */
|
|
3859
|
+
.hjm-surface[data-tone="selected"] { background: var(--hjm-color-surface-selected); }
|
|
3860
|
+
.hjm-surface[data-tone="selected"][data-bordered="true"] { border-color: var(--hjm-color-border-control); }
|
|
3861
|
+
.hjm-data-table__table tr[aria-selected="true"] > :is(td, th) { background-color: var(--hjm-color-surface-selected); }
|
|
3862
|
+
|
|
3853
3863
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-picker.d.ts","sourceRoot":"","sources":["../src/time-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"time-picker.d.ts","sourceRoot":"","sources":["../src/time-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA+H,KAAK,iBAAiB,EAAuB,MAAM,gDAAgD,CAAC;AAI1O,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAGtE,MAAM,MAAM,eAAe,GAAG,iBAAiB,GAAG,QAAQ,CAAC;IAAE,WAAW,CAAC,EAAE,uBAAuB,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE1H,uGAAuG;AACvG,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,+BAmChD"}
|
package/dist/time-picker.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
3
|
import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
4
|
-
import { timePickerDraft, timePickerItems, resolveTimePickerValue, validateTimePicker, timePickerRecipe } from "@hjmds/design-contracts/components/time-picker";
|
|
4
|
+
import { timePickerDraft, timePickerItems, resolveTimePickerValue, resolveTimePickerWheelIndex, validateTimePicker, timePickerRecipe } from "@hjmds/design-contracts/components/time-picker";
|
|
5
5
|
import { Button } from "./actions.js";
|
|
6
6
|
import { Icon } from "./supplemental-display.js";
|
|
7
7
|
import { Popover } from "./popover.js";
|
|
8
|
+
import { useHjmTheme } from "./provider.js";
|
|
8
9
|
/** One draft and one confirmation for both columns. Inline mode delegates confirmation to its form. */
|
|
9
10
|
export function TimePicker(props) {
|
|
10
11
|
validateTimePicker(props);
|
|
11
12
|
const { value, onValueChange, labels, disabled, readOnly, description, error, presentation = "field", layoutStyle, className } = props;
|
|
12
13
|
const [open, setOpen] = useState(false), [draft, setDraft] = useState(() => timePickerDraft(value));
|
|
13
14
|
const locked = !!(disabled || readOnly);
|
|
14
|
-
const
|
|
15
|
+
const firstRef = useRef(null);
|
|
16
|
+
const [moving, setMoving] = useState({ hour: false, minute: false });
|
|
15
17
|
const emitted = useRef(null);
|
|
16
18
|
useEffect(() => {
|
|
17
19
|
// Preserve an incomplete inline draft when the parent echoes its null validity value.
|
|
@@ -25,13 +27,6 @@ export function TimePicker(props) {
|
|
|
25
27
|
useEffect(() => { if (locked)
|
|
26
28
|
setOpen(false); }, [locked]);
|
|
27
29
|
const resolved = resolveTimePickerValue(draft, props);
|
|
28
|
-
useLayoutEffect(() => {
|
|
29
|
-
panelRef.current?.querySelectorAll('[role="listbox"]').forEach(list => {
|
|
30
|
-
const selected = list.querySelector('[aria-selected="true"]');
|
|
31
|
-
if (selected)
|
|
32
|
-
list.scrollTop = Math.max(0, selected.offsetTop - (list.clientHeight - selected.offsetHeight) / 2);
|
|
33
|
-
});
|
|
34
|
-
}, [draft.hour, draft.minute, open]);
|
|
35
30
|
function select(part, next) {
|
|
36
31
|
if (locked)
|
|
37
32
|
return;
|
|
@@ -43,32 +38,101 @@ export function TimePicker(props) {
|
|
|
43
38
|
onValueChange(result);
|
|
44
39
|
}
|
|
45
40
|
}
|
|
46
|
-
const panel = _jsxs("div", { style: { "--hjm-time-row": `${timePickerRecipe.rowHeight}px`, "--hjm-time-height": `${timePickerRecipe.rowHeight * timePickerRecipe.visibleRows}px`, "--hjm-time-summary": `${timePickerRecipe.readoutSize}px`, "--hjm-time-summary-line-height": `${timePickerRecipe.readoutLineHeight}px`, maxWidth: timePickerRecipe.panelWidth },
|
|
47
|
-
const items = timePickerItems(part, draft, props);
|
|
48
|
-
const active = items.find(item => item.value === draft[part] && !item.disabled)?.value ?? items.find(item => !item.disabled)?.value;
|
|
49
|
-
return _jsxs("div", { className: "hjm-time-picker__column", children: [_jsx("div", { className: "hjm-time-picker__caption", children: labels[part] }), _jsx("div", { role: "listbox", "aria-label": labels[part], "aria-disabled": locked, className: "hjm-time-picker__list", children: items.map(item => _jsx("button", { ref: part === "hour" && item.value === active ? firstRef : undefined, type: "button", role: "option", "aria-selected": draft[part] === item.value, "aria-label": `${item.value} ${labels[part]}`, disabled: locked || item.disabled, tabIndex: item.value === active ? 0 : -1, onClick: () => select(part, item.value), onFocus: e => {
|
|
50
|
-
const list = e.currentTarget.parentElement;
|
|
51
|
-
const row = e.currentTarget;
|
|
52
|
-
if (row.offsetTop < list.scrollTop)
|
|
53
|
-
list.scrollTop = row.offsetTop;
|
|
54
|
-
else if (row.offsetTop + row.offsetHeight > list.scrollTop + list.clientHeight)
|
|
55
|
-
list.scrollTop = row.offsetTop + row.offsetHeight - list.clientHeight;
|
|
56
|
-
}, onKeyDown: e => {
|
|
57
|
-
if (!["ArrowDown", "ArrowUp", "Home", "End"].includes(e.key))
|
|
58
|
-
return;
|
|
59
|
-
e.preventDefault();
|
|
60
|
-
const enabled = Array.from(e.currentTarget.parentElement.querySelectorAll('button:not(:disabled)'));
|
|
61
|
-
const index = enabled.indexOf(e.currentTarget);
|
|
62
|
-
const target = e.key === "Home" ? enabled[0] : e.key === "End" ? enabled.at(-1) : enabled[index + (e.key === "ArrowDown" ? 1 : -1)];
|
|
63
|
-
if (target) {
|
|
64
|
-
target.focus();
|
|
65
|
-
select(part, target.textContent);
|
|
66
|
-
}
|
|
67
|
-
}, children: item.value }, item.value)) })] }, part);
|
|
68
|
-
}) }), presentation === "field" ? _jsx(Button, { disabled: locked || resolved === null, onClick: () => { const current = resolveTimePickerValue(draft, props); if (!locked && current !== null) {
|
|
41
|
+
const panel = _jsxs("div", { style: { "--hjm-time-row": `${timePickerRecipe.rowHeight}px`, "--hjm-time-height": `${timePickerRecipe.rowHeight * timePickerRecipe.visibleRows}px`, "--hjm-time-summary": `${timePickerRecipe.readoutSize}px`, "--hjm-time-summary-line-height": `${timePickerRecipe.readoutLineHeight}px`, maxWidth: timePickerRecipe.panelWidth }, className: "hjm-time-picker__panel", role: "group", "aria-label": labels.label, children: [_jsxs("div", { className: "hjm-time-picker__readout", "aria-live": "polite", "aria-atomic": "true", children: [draft.hour ?? "--", _jsx("span", { children: ":" }), draft.minute ?? "--"] }), _jsx("div", { className: "hjm-time-picker__columns", children: ["hour", "minute"].map(part => _jsx(TimeColumn, { part: part, draft: draft, options: props, locked: locked, firstRef: firstRef, onSelect: next => select(part, next), onMoving: next => setMoving(current => current[part] === next ? current : { ...current, [part]: next }) }, part)) }), presentation === "field" ? _jsx(Button, { disabled: locked || resolved === null || moving.hour || moving.minute, onClick: () => { const current = resolveTimePickerValue(draft, props); if (!locked && current !== null) {
|
|
69
42
|
onValueChange(current);
|
|
70
43
|
setOpen(false);
|
|
71
44
|
} }, children: labels.confirm }) : null] });
|
|
72
45
|
return _jsxs("div", { className: `hjm-time-picker ${className ?? ""}`, style: layoutStyle, "data-disabled": disabled || undefined, children: [presentation === "inline" ? panel : _jsxs(_Fragment, { children: [_jsx("span", { className: "hjm-time-picker__label", children: labels.label }), _jsx(Popover, { title: labels.label, closeLabel: labels.cancel, closeIcon: _jsx(Icon, { name: "close" }), open: open, onOpenChange: setOpen, initialFocusRef: firstRef, trigger: _jsx("button", { type: "button", className: "hjm-time-picker__trigger", disabled: locked, "aria-label": `${labels.label}, ${value ?? labels.placeholder}`, "aria-invalid": !!error, children: _jsx("span", { children: value ?? labels.placeholder }) }), children: panel })] }), description ? _jsx("span", { className: "hjm-time-picker__description", children: description }) : null, error ? _jsx("span", { role: "alert", className: "hjm-time-picker__error", children: error }) : null] });
|
|
73
46
|
}
|
|
47
|
+
function TimeColumn({ part, draft, options, locked, firstRef, onSelect, onMoving }) {
|
|
48
|
+
const { environment } = useHjmTheme();
|
|
49
|
+
const wheel = options.selectionStyle === "wheel";
|
|
50
|
+
const listRef = useRef(null);
|
|
51
|
+
const interacting = useRef(false);
|
|
52
|
+
const emitted = useRef(null);
|
|
53
|
+
const items = timePickerItems(part, draft, options);
|
|
54
|
+
const active = items.find(item => item.value === draft[part] && !item.disabled)?.value ?? items.find(item => !item.disabled)?.value;
|
|
55
|
+
const index = items.findIndex(item => item.value === draft[part]);
|
|
56
|
+
const rowHeight = timePickerRecipe.rowHeight;
|
|
57
|
+
const label = options.labels[part];
|
|
58
|
+
useLayoutEffect(() => {
|
|
59
|
+
const list = listRef.current;
|
|
60
|
+
if (!list)
|
|
61
|
+
return;
|
|
62
|
+
// Our own scroll edits must not interrupt momentum when a controlled parent echoes the draft.
|
|
63
|
+
if (wheel && emitted.current === draft[part] && draft[part] !== null) {
|
|
64
|
+
emitted.current = null;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
interacting.current = false;
|
|
68
|
+
onMoving(false);
|
|
69
|
+
list.scrollTop = wheel ? Math.max(0, index) * rowHeight : Math.max(0, (index - 2) * rowHeight);
|
|
70
|
+
}, [draft[part], wheel, locked, options.minuteStep]);
|
|
71
|
+
function emit(index) {
|
|
72
|
+
const item = items[index];
|
|
73
|
+
if (!item || item.disabled || locked || (wheel && item.value === draft[part]))
|
|
74
|
+
return;
|
|
75
|
+
emitted.current = wheel ? item.value : null;
|
|
76
|
+
onSelect(item.value);
|
|
77
|
+
}
|
|
78
|
+
function choose(index) {
|
|
79
|
+
interacting.current = false;
|
|
80
|
+
onMoving(false);
|
|
81
|
+
emit(index);
|
|
82
|
+
if (wheel) {
|
|
83
|
+
const list = listRef.current;
|
|
84
|
+
if (list?.contains(document.activeElement))
|
|
85
|
+
list.querySelectorAll("button")[index]?.focus({ preventScroll: true });
|
|
86
|
+
list?.scrollTo({ top: index * rowHeight, behavior: environment.reducedMotion ? "instant" : "smooth" });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
const list = listRef.current;
|
|
91
|
+
if (!wheel || !list)
|
|
92
|
+
return;
|
|
93
|
+
// scrollend includes CSS snapping and waits for touch/trackpad release; no timeout guesses.
|
|
94
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollend_event
|
|
95
|
+
const finish = () => {
|
|
96
|
+
if (!interacting.current || locked)
|
|
97
|
+
return;
|
|
98
|
+
interacting.current = false;
|
|
99
|
+
onMoving(false);
|
|
100
|
+
const target = resolveTimePickerWheelIndex(items, list.scrollTop);
|
|
101
|
+
if (target !== null)
|
|
102
|
+
choose(target);
|
|
103
|
+
};
|
|
104
|
+
list.addEventListener("scrollend", finish);
|
|
105
|
+
return () => list.removeEventListener("scrollend", finish);
|
|
106
|
+
});
|
|
107
|
+
return _jsxs("div", { className: "hjm-time-picker__column", children: [_jsx("div", { className: "hjm-time-picker__caption", children: label }), _jsxs("div", { className: "hjm-time-picker__viewport", "data-wheel": wheel || undefined, children: [wheel && _jsx("div", { "aria-hidden": "true", className: "hjm-time-picker__center" }), _jsx("div", { ref: listRef, role: "listbox", "aria-label": label, "aria-disabled": locked, className: "hjm-time-picker__list", "data-wheel": wheel || undefined, onWheel: () => { if (wheel && !locked)
|
|
108
|
+
interacting.current = true; }, onPointerDown: () => { if (wheel && !locked)
|
|
109
|
+
interacting.current = true; }, onScroll: e => {
|
|
110
|
+
if (!wheel || !interacting.current || locked)
|
|
111
|
+
return;
|
|
112
|
+
onMoving(true);
|
|
113
|
+
const target = resolveTimePickerWheelIndex(items, e.currentTarget.scrollTop);
|
|
114
|
+
if (target !== null)
|
|
115
|
+
emit(target);
|
|
116
|
+
}, children: items.map((item, itemIndex) => _jsx("button", { ref: part === "hour" && item.value === active ? firstRef : undefined, type: "button", role: "option", "aria-selected": draft[part] === item.value, "aria-label": `${item.value} ${label}`, disabled: locked || item.disabled, tabIndex: item.value === active ? 0 : -1, onClick: () => choose(itemIndex), onFocus: e => {
|
|
117
|
+
if (wheel)
|
|
118
|
+
return;
|
|
119
|
+
const list = e.currentTarget.parentElement;
|
|
120
|
+
const row = e.currentTarget;
|
|
121
|
+
if (row.offsetTop < list.scrollTop)
|
|
122
|
+
list.scrollTop = row.offsetTop;
|
|
123
|
+
else if (row.offsetTop + row.offsetHeight > list.scrollTop + list.clientHeight)
|
|
124
|
+
list.scrollTop = row.offsetTop + row.offsetHeight - list.clientHeight;
|
|
125
|
+
}, onKeyDown: e => {
|
|
126
|
+
if (!["ArrowDown", "ArrowUp", "Home", "End"].includes(e.key))
|
|
127
|
+
return;
|
|
128
|
+
e.preventDefault();
|
|
129
|
+
const enabled = items.map((entry, index) => ({ ...entry, index })).filter(entry => !entry.disabled);
|
|
130
|
+
const position = enabled.findIndex(entry => entry.value === item.value);
|
|
131
|
+
const target = e.key === "Home" ? enabled[0] : e.key === "End" ? enabled.at(-1) : enabled[position + (e.key === "ArrowDown" ? 1 : -1)];
|
|
132
|
+
if (target) {
|
|
133
|
+
listRef.current?.querySelectorAll("button")[target.index]?.focus({ preventScroll: wheel });
|
|
134
|
+
choose(target.index);
|
|
135
|
+
}
|
|
136
|
+
}, children: item.value }, item.value)) })] })] });
|
|
137
|
+
}
|
|
74
138
|
//# sourceMappingURL=time-picker.js.map
|
package/dist/time-picker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"time-picker.js","sourceRoot":"","sources":["../src/time-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\nimport { useEffect, useLayoutEffect, useRef, useState, type CSSProperties } from \"react\";\nimport { timePickerDraft, timePickerItems, resolveTimePickerValue, validateTimePicker, timePickerRecipe, type TimePickerOptions, type TimePickerPart } from \"@hjmds/design-contracts/components/time-picker\";\nimport { Button } from \"./actions.js\";\nimport { Icon } from \"./supplemental-display.js\";\nimport { Popover } from \"./popover.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type TimePickerProps = TimePickerOptions & Readonly<{ layoutStyle?: HjmCompositionStyleProp; className?: string }>;\n\n/** One draft and one confirmation for both columns. Inline mode delegates confirmation to its form. */\nexport function TimePicker(props: TimePickerProps) {\n validateTimePicker(props);\n const { value, onValueChange, labels, disabled, readOnly, description, error, presentation = \"field\", layoutStyle, className } = props;\n const [open, setOpen] = useState(false), [draft, setDraft] = useState(() => timePickerDraft(value));\n const locked = !!(disabled || readOnly);\n const panelRef = useRef<HTMLDivElement>(null), firstRef = useRef<HTMLButtonElement>(null);\n const emitted = useRef<{ value: string | null } | null>(null);\n useEffect(() => {\n // Preserve an incomplete inline draft when the parent echoes its null validity value.\n if (presentation === \"inline\" && emitted.current?.value === value) { emitted.current = null; return; }\n emitted.current = null; setDraft(timePickerDraft(value));\n }, [value, open, presentation]);\n useEffect(() => { if (locked) setOpen(false); }, [locked]);\n const resolved = resolveTimePickerValue(draft, props);\n useLayoutEffect(() => {\n panelRef.current?.querySelectorAll<HTMLElement>('[role=\"listbox\"]').forEach(list => {\n const selected = list.querySelector<HTMLElement>('[aria-selected=\"true\"]');\n if (selected) list.scrollTop = Math.max(0, selected.offsetTop - (list.clientHeight - selected.offsetHeight) / 2);\n });\n }, [draft.hour, draft.minute, open]);\n function select(part: TimePickerPart, next: string) {\n if (locked) return;\n const updated = { ...draft, [part]: next }; setDraft(updated);\n const result = resolveTimePickerValue(updated, props);\n if (presentation === \"inline\") { emitted.current = { value: result }; onValueChange(result); }\n }\n const panel = <div style={{ \"--hjm-time-row\": `${timePickerRecipe.rowHeight}px`, \"--hjm-time-height\": `${timePickerRecipe.rowHeight * timePickerRecipe.visibleRows}px`, \"--hjm-time-summary\": `${timePickerRecipe.readoutSize}px`, \"--hjm-time-summary-line-height\": `${timePickerRecipe.readoutLineHeight}px`, maxWidth: timePickerRecipe.panelWidth } as CSSProperties} ref={panelRef} className=\"hjm-time-picker__panel\" role=\"group\" aria-label={labels.label}>\n <div className=\"hjm-time-picker__readout\" aria-live=\"polite\" aria-atomic=\"true\">{draft.hour ?? \"--\"}<span>:</span>{draft.minute ?? \"--\"}</div>\n <div className=\"hjm-time-picker__columns\">\n {([\"hour\", \"minute\"] as const).map(part => {\n const items = timePickerItems(part, draft, props);\n const active = items.find(item => item.value === draft[part] && !item.disabled)?.value ?? items.find(item => !item.disabled)?.value;\n return <div key={part} className=\"hjm-time-picker__column\"><div className=\"hjm-time-picker__caption\">{labels[part]}</div>\n <div role=\"listbox\" aria-label={labels[part]} aria-disabled={locked} className=\"hjm-time-picker__list\">\n {items.map(item => <button key={item.value} ref={part === \"hour\" && item.value === active ? firstRef : undefined} type=\"button\" role=\"option\"\n aria-selected={draft[part] === item.value} aria-label={`${item.value} ${labels[part]}`} disabled={locked || item.disabled} tabIndex={item.value === active ? 0 : -1}\n onClick={() => select(part, item.value)} onFocus={e => {\n const list = e.currentTarget.parentElement!; const row = e.currentTarget;\n if (row.offsetTop < list.scrollTop) list.scrollTop = row.offsetTop;\n else if (row.offsetTop + row.offsetHeight > list.scrollTop + list.clientHeight) list.scrollTop = row.offsetTop + row.offsetHeight - list.clientHeight;\n }}\n onKeyDown={e => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(e.key)) return;\n e.preventDefault();\n const enabled = Array.from(e.currentTarget.parentElement!.querySelectorAll<HTMLButtonElement>('button:not(:disabled)'));\n const index = enabled.indexOf(e.currentTarget);\n const target = e.key === \"Home\" ? enabled[0] : e.key === \"End\" ? enabled.at(-1) : enabled[index + (e.key === \"ArrowDown\" ? 1 : -1)];\n if (target) { target.focus(); select(part, target.textContent!); }\n }}>{item.value}</button>)}\n </div></div>;\n })}\n </div>\n {presentation === \"field\" ? <Button disabled={locked || resolved === null} onClick={() => { const current = resolveTimePickerValue(draft, props); if (!locked && current !== null) { onValueChange(current); setOpen(false); } }}>{labels.confirm}</Button> : null}\n </div>;\n return <div className={`hjm-time-picker ${className ?? \"\"}`} style={layoutStyle} data-disabled={disabled || undefined}>\n {presentation === \"inline\" ? panel : <><span className=\"hjm-time-picker__label\">{labels.label}</span><Popover title={labels.label} closeLabel={labels.cancel} closeIcon={<Icon name=\"close\" />} open={open} onOpenChange={setOpen} initialFocusRef={firstRef}\n trigger={<button type=\"button\" className=\"hjm-time-picker__trigger\" disabled={locked} aria-label={`${labels.label}, ${value ?? labels.placeholder}`} aria-invalid={!!error}><span>{value ?? labels.placeholder}</span></button>}>{panel}</Popover></>}\n {description ? <span className=\"hjm-time-picker__description\">{description}</span> : null}\n {error ? <span role=\"alert\" className=\"hjm-time-picker__error\">{error}</span> : null}\n </div>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"time-picker.js","sourceRoot":"","sources":["../src/time-picker.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\nimport { useEffect, useLayoutEffect, useRef, useState, type CSSProperties, type RefObject } from \"react\";\nimport { timePickerDraft, timePickerItems, resolveTimePickerValue, resolveTimePickerWheelIndex, validateTimePicker, timePickerRecipe, type TimePickerOptions, type TimePickerPart } from \"@hjmds/design-contracts/components/time-picker\";\nimport { Button } from \"./actions.js\";\nimport { Icon } from \"./supplemental-display.js\";\nimport { Popover } from \"./popover.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\nimport { useHjmTheme } from \"./provider.js\";\n\nexport type TimePickerProps = TimePickerOptions & Readonly<{ layoutStyle?: HjmCompositionStyleProp; className?: string }>;\n\n/** One draft and one confirmation for both columns. Inline mode delegates confirmation to its form. */\nexport function TimePicker(props: TimePickerProps) {\n validateTimePicker(props);\n const { value, onValueChange, labels, disabled, readOnly, description, error, presentation = \"field\", layoutStyle, className } = props;\n const [open, setOpen] = useState(false), [draft, setDraft] = useState(() => timePickerDraft(value));\n const locked = !!(disabled || readOnly);\n const firstRef = useRef<HTMLButtonElement>(null);\n const [moving, setMoving] = useState({ hour: false, minute: false });\n const emitted = useRef<{ value: string | null } | null>(null);\n useEffect(() => {\n // Preserve an incomplete inline draft when the parent echoes its null validity value.\n if (presentation === \"inline\" && emitted.current?.value === value) { emitted.current = null; return; }\n emitted.current = null; setDraft(timePickerDraft(value));\n }, [value, open, presentation]);\n useEffect(() => { if (locked) setOpen(false); }, [locked]);\n const resolved = resolveTimePickerValue(draft, props);\n function select(part: TimePickerPart, next: string) {\n if (locked) return;\n const updated = { ...draft, [part]: next }; setDraft(updated);\n const result = resolveTimePickerValue(updated, props);\n if (presentation === \"inline\") { emitted.current = { value: result }; onValueChange(result); }\n }\n const panel = <div style={{ \"--hjm-time-row\": `${timePickerRecipe.rowHeight}px`, \"--hjm-time-height\": `${timePickerRecipe.rowHeight * timePickerRecipe.visibleRows}px`, \"--hjm-time-summary\": `${timePickerRecipe.readoutSize}px`, \"--hjm-time-summary-line-height\": `${timePickerRecipe.readoutLineHeight}px`, maxWidth: timePickerRecipe.panelWidth } as CSSProperties} className=\"hjm-time-picker__panel\" role=\"group\" aria-label={labels.label}>\n <div className=\"hjm-time-picker__readout\" aria-live=\"polite\" aria-atomic=\"true\">{draft.hour ?? \"--\"}<span>:</span>{draft.minute ?? \"--\"}</div>\n <div className=\"hjm-time-picker__columns\">\n {([\"hour\", \"minute\"] as const).map(part => <TimeColumn key={part} part={part} draft={draft} options={props} locked={locked} firstRef={firstRef}\n onSelect={next => select(part, next)} onMoving={next => setMoving(current => current[part] === next ? current : { ...current, [part]: next })} />)}\n </div>\n {presentation === \"field\" ? <Button disabled={locked || resolved === null || moving.hour || moving.minute} onClick={() => { const current = resolveTimePickerValue(draft, props); if (!locked && current !== null) { onValueChange(current); setOpen(false); } }}>{labels.confirm}</Button> : null}\n </div>;\n return <div className={`hjm-time-picker ${className ?? \"\"}`} style={layoutStyle} data-disabled={disabled || undefined}>\n {presentation === \"inline\" ? panel : <><span className=\"hjm-time-picker__label\">{labels.label}</span><Popover title={labels.label} closeLabel={labels.cancel} closeIcon={<Icon name=\"close\" />} open={open} onOpenChange={setOpen} initialFocusRef={firstRef}\n trigger={<button type=\"button\" className=\"hjm-time-picker__trigger\" disabled={locked} aria-label={`${labels.label}, ${value ?? labels.placeholder}`} aria-invalid={!!error}><span>{value ?? labels.placeholder}</span></button>}>{panel}</Popover></>}\n {description ? <span className=\"hjm-time-picker__description\">{description}</span> : null}\n {error ? <span role=\"alert\" className=\"hjm-time-picker__error\">{error}</span> : null}\n </div>;\n}\n\nfunction TimeColumn({ part, draft, options, locked, firstRef, onSelect, onMoving }: {\n part: TimePickerPart; draft: ReturnType<typeof timePickerDraft>; options: TimePickerOptions; locked: boolean;\n firstRef: RefObject<HTMLButtonElement | null>; onSelect(value: string): void; onMoving(moving: boolean): void;\n}) {\n const { environment } = useHjmTheme();\n const wheel = options.selectionStyle === \"wheel\";\n const listRef = useRef<HTMLDivElement>(null);\n const interacting = useRef(false);\n const emitted = useRef<string | null>(null);\n const items = timePickerItems(part, draft, options);\n const active = items.find(item => item.value === draft[part] && !item.disabled)?.value ?? items.find(item => !item.disabled)?.value;\n const index = items.findIndex(item => item.value === draft[part]);\n const rowHeight = timePickerRecipe.rowHeight;\n const label = options.labels[part];\n\n useLayoutEffect(() => {\n const list = listRef.current;\n if (!list) return;\n // Our own scroll edits must not interrupt momentum when a controlled parent echoes the draft.\n if (wheel && emitted.current === draft[part] && draft[part] !== null) { emitted.current = null; return; }\n interacting.current = false;\n onMoving(false);\n list.scrollTop = wheel ? Math.max(0, index) * rowHeight : Math.max(0, (index - 2) * rowHeight);\n }, [draft[part], wheel, locked, options.minuteStep]);\n\n function emit(index: number) {\n const item = items[index];\n if (!item || item.disabled || locked || (wheel && item.value === draft[part])) return;\n emitted.current = wheel ? item.value : null;\n onSelect(item.value);\n }\n function choose(index: number) {\n interacting.current = false;\n onMoving(false);\n emit(index);\n if (wheel) {\n const list = listRef.current;\n if (list?.contains(document.activeElement)) list.querySelectorAll<HTMLButtonElement>(\"button\")[index]?.focus({ preventScroll: true });\n list?.scrollTo({ top: index * rowHeight, behavior: environment.reducedMotion ? \"instant\" : \"smooth\" });\n }\n }\n useEffect(() => {\n const list = listRef.current;\n if (!wheel || !list) return;\n // scrollend includes CSS snapping and waits for touch/trackpad release; no timeout guesses.\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollend_event\n const finish = () => {\n if (!interacting.current || locked) return;\n interacting.current = false;\n onMoving(false);\n const target = resolveTimePickerWheelIndex(items, list.scrollTop);\n if (target !== null) choose(target);\n };\n list.addEventListener(\"scrollend\", finish);\n return () => list.removeEventListener(\"scrollend\", finish);\n });\n\n return <div className=\"hjm-time-picker__column\">\n <div className=\"hjm-time-picker__caption\">{label}</div>\n <div className=\"hjm-time-picker__viewport\" data-wheel={wheel || undefined}>\n {wheel && <div aria-hidden=\"true\" className=\"hjm-time-picker__center\" />}\n <div ref={listRef} role=\"listbox\" aria-label={label} aria-disabled={locked} className=\"hjm-time-picker__list\" data-wheel={wheel || undefined}\n onWheel={() => { if (wheel && !locked) interacting.current = true; }}\n onPointerDown={() => { if (wheel && !locked) interacting.current = true; }}\n onScroll={e => {\n if (!wheel || !interacting.current || locked) return;\n onMoving(true);\n const target = resolveTimePickerWheelIndex(items, e.currentTarget.scrollTop);\n if (target !== null) emit(target);\n }}>\n {items.map((item, itemIndex) => <button key={item.value} ref={part === \"hour\" && item.value === active ? firstRef : undefined} type=\"button\" role=\"option\"\n aria-selected={draft[part] === item.value} aria-label={`${item.value} ${label}`} disabled={locked || item.disabled} tabIndex={item.value === active ? 0 : -1}\n onClick={() => choose(itemIndex)} onFocus={e => {\n if (wheel) return;\n const list = e.currentTarget.parentElement!; const row = e.currentTarget;\n if (row.offsetTop < list.scrollTop) list.scrollTop = row.offsetTop;\n else if (row.offsetTop + row.offsetHeight > list.scrollTop + list.clientHeight) list.scrollTop = row.offsetTop + row.offsetHeight - list.clientHeight;\n }} onKeyDown={e => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"].includes(e.key)) return;\n e.preventDefault();\n const enabled = items.map((entry, index) => ({ ...entry, index })).filter(entry => !entry.disabled);\n const position = enabled.findIndex(entry => entry.value === item.value);\n const target = e.key === \"Home\" ? enabled[0] : e.key === \"End\" ? enabled.at(-1) : enabled[position + (e.key === \"ArrowDown\" ? 1 : -1)];\n if (target) {\n listRef.current?.querySelectorAll<HTMLButtonElement>(\"button\")[target.index]?.focus({ preventScroll: wheel });\n choose(target.index);\n }\n }}>{item.value}</button>)}\n </div>\n </div>\n </div>;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hjmds/react",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.41.0",
|
|
4
4
|
"description": "Accessible React 19 renderers for HJM design contracts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -371,6 +371,11 @@
|
|
|
371
371
|
"import": "./dist/rating.js",
|
|
372
372
|
"default": "./dist/rating.js"
|
|
373
373
|
},
|
|
374
|
+
"./choice-row": {
|
|
375
|
+
"types": "./dist/choice-row.d.ts",
|
|
376
|
+
"import": "./dist/choice-row.js",
|
|
377
|
+
"default": "./dist/choice-row.js"
|
|
378
|
+
},
|
|
374
379
|
"./image-comparison": {
|
|
375
380
|
"types": "./dist/image-comparison.d.ts",
|
|
376
381
|
"import": "./dist/image-comparison.js",
|
|
@@ -613,7 +618,7 @@
|
|
|
613
618
|
"THIRD_PARTY_NOTICES.md"
|
|
614
619
|
],
|
|
615
620
|
"peerDependencies": {
|
|
616
|
-
"@hjmds/design-contracts": ">=1.
|
|
621
|
+
"@hjmds/design-contracts": ">=1.41.0 <1.42.0",
|
|
617
622
|
"react": ">=19.0.0",
|
|
618
623
|
"react-dom": ">=19.0.0",
|
|
619
624
|
"@number-flow/react": "0.6.2",
|
|
@@ -651,7 +656,7 @@
|
|
|
651
656
|
"@blobatar/react": "2.7.0",
|
|
652
657
|
"lucide-react": "1.59.0",
|
|
653
658
|
"vite": "8.3.4",
|
|
654
|
-
"@hjmds/design-contracts": "1.
|
|
659
|
+
"@hjmds/design-contracts": "1.41.0"
|
|
655
660
|
},
|
|
656
661
|
"peerDependenciesMeta": {
|
|
657
662
|
"@number-flow/react": {
|