@hjmds/react 1.13.0 → 1.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/evidence.js.map +1 -1
- package/dist/screen-flows.d.ts +4 -1
- package/dist/screen-flows.d.ts.map +1 -1
- package/dist/screen-flows.js +16 -6
- package/dist/screen-flows.js.map +1 -1
- package/dist/styles.css +13 -7
- package/dist/styles.layered.css +13 -7
- package/package.json +2 -2
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.13.
|
|
37
|
+
readonly packageVersion: "1.13.1";
|
|
38
38
|
readonly surface: "web";
|
|
39
39
|
readonly components: readonly [Readonly<{
|
|
40
40
|
/** Canonical component id from the design-contracts catalog. */
|
package/dist/evidence.js
CHANGED
|
@@ -155,7 +155,7 @@ function toastClaim() {
|
|
|
155
155
|
export const reactRendererEvidence = {
|
|
156
156
|
schemaVersion: reactRendererEvidenceSchemaVersion,
|
|
157
157
|
packageName: "@hjmds/react",
|
|
158
|
-
packageVersion: "1.13.
|
|
158
|
+
packageVersion: "1.13.1",
|
|
159
159
|
surface: "web",
|
|
160
160
|
components: [
|
|
161
161
|
defaultClaim("top-bar", ["TopBar"], "./top-bar"),
|
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\";\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;\n\n/**\n * Environment scenarios proven in a real browser by scenario-matrix.browser.\n * Until 1.5.0 every component claimed all seven scenarios from one SSR test\n * that only checked the provider wrapper's attributes. A component now claims\n * a matrix scenario only if the matrix assertion for it passes.\n */\nconst matrixScenarios = [\"accessibility\", \"dark\", \"large-text\", \"rtl\", \"reduced-motion\"] as const;\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.\n */\nconst webScenarioGaps: Readonly<Record<string, readonly ReactRendererEvidenceScenario[]>> = {};\n\n/** Fixtures that render long copy inside the component (renderLongCopy). */\nconst webLongCopyFixtures: ReadonlySet<string> = new Set<string>([\n \"masonry\", \"virtual-list\", \"qr-code\", \"color-picker\", \"watermark\", \"affix\",\n \"design-system-provider\",\n \"text-format\",\n \"aspect-ratio\",\n \"grid\",\n \"splitter\",\n \"layout\",\n \"steps\",\n \"breadcrumb\",\n \"auth-screen\",\n \"radio\",\n \"list\",\n \"timeline\",\n \"bottom-info\",\n \"stack\",\n \"container\",\n \"text\",\n \"surface\",\n \"button\",\n \"field\",\n \"text-area\",\n \"card\",\n \"notice\",\n \"list-row\",\n \"tag\",\n \"accordion\",\n \"file-picker\",\n \"agreement\",\n \"bottom-navigation\",\n \"load-more\",\n \"tabs\",\n \"badge\",\n \"chip\",\n \"link\",\n \"select\",\n \"combobox\",\n \"heading\",\n \"empty-state\",\n \"top\",\n \"section\",\n \"segmented-control\",\n \"top-bar\",\n \"mentions\",\n \"bottom-cta\",\n \"result\",\n \"progress\",\n \"description-list\",\n \"toast\",\n \"statistic\",\n \"radio-group\",\n \"checkbox-group\",\n \"auth-provider-button\",\n \"password-field\",\n \"search-field\",\n \"number-field\",\n \"floating-action-button\",\n \"checkbox\",\n \"switch\",\n \"toggle-group\",\n \"slider\",\n \"otp-field\",\n \"date-picker\",\n \"menubar\",\n \"sidebar\",\n \"transfer-list\",\n \"upload-item\",\n \"tags-input\",\n \"data-table\",\n \"collapsible\",\n \"anchor\",\n \"tree\",\n \"carousel\",\n \"calendar\",\n \"dialog\",\n \"tooltip\",\n]);\n\nfunction defaultClaim(\n componentId: string,\n exportNames: readonly string[],\n subpath: `./${string}`,\n): ReactRendererEvidenceComponent {\n const gaps = webScenarioGaps[componentId] ?? [];\n const matrix: ReactRendererEvidenceScenario[] = [\n ...matrixScenarios.filter((scenario) => !gaps.includes(scenario)),\n ...(webLongCopyFixtures.has(componentId) && !gaps.includes(\"long-copy\") ? [\"long-copy\" as const] : []),\n ];\n return {\n componentId,\n exportNames,\n subpath,\n scenarios: [\"default\", ...matrix],\n proofs: [\n { scenarios: [\"default\"], file: defaultProofFile, caseId: componentId },\n ...(matrix.length === 0 ? [] : [{ scenarios: matrix, file: matrixProofFile, caseId: componentId }]),\n ],\n };\n}\n\nfunction keyboardClaim(\n componentId: string,\n exportNames: readonly string[],\n subpath: `./${string}`,\n proofFile: `test/${string}.test.tsx` = \"test/stable-core.browser.test.tsx\",\n): ReactRendererEvidenceComponent {\n const base = defaultClaim(componentId, exportNames, subpath);\n return {\n ...base,\n scenarios: [...base.scenarios, \"keyboard\"],\n proofs: [\n ...base.proofs,\n {\n scenarios: [\"keyboard\"],\n file: proofFile,\n caseId: componentId,\n },\n ],\n };\n}\n\nfunction keyboardAndLongCopyClaim(\n componentId: string,\n exportNames: readonly string[],\n subpath: `./${string}`,\n proofFile: `test/${string}.test.tsx`,\n): ReactRendererEvidenceComponent {\n const base = defaultClaim(componentId, exportNames, subpath);\n return {\n ...base,\n scenarios: [...base.scenarios, \"keyboard\", \"long-copy\"],\n proofs: [...base.proofs, { scenarios: [\"keyboard\", \"long-copy\"], file: proofFile, caseId: componentId }],\n };\n}\n\nfunction toastClaim(): ReactRendererEvidenceComponent {\n const base = defaultClaim(\"toast\", [\"Toast\", \"ToastProvider\", \"useToast\"], \"./toast\");\n return {\n ...base,\n scenarios: [...base.scenarios, \"keyboard\"],\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 proofs: [...base.proofs,\n { scenarios: [\"keyboard\"], file: \"test/stable-core.browser.test.tsx\", caseId: \"toast\" },\n { scenarios: [\"dark\", \"long-copy\", \"large-text\", \"rtl\"], file: \"test/toast-layout.browser.test.tsx\", caseId: \"toast\" },\n ],\n };\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.13.0\",\n surface: \"web\",\n components: [\n defaultClaim(\"top-bar\", [\"TopBar\"], \"./top-bar\"),\n defaultClaim(\"bottom-cta\", [\"BottomCTA\"], \"./bottom-cta\"),\n defaultClaim(\"design-system-provider\", [\"HjmProvider\", \"useHjmTheme\"], \"./provider\"),\n defaultClaim(\"text\", [\"Text\"], \"./layout\"),\n defaultClaim(\"surface\", [\"Surface\"], \"./layout\"),\n defaultClaim(\"icon\", [\"Icon\"], \"./display\"),\n defaultClaim(\"stack\", [\"Stack\"], \"./layout\"),\n defaultClaim(\"container\", [\"Container\"], \"./layout\"),\n defaultClaim(\"aspect-ratio\", [\"AspectRatio\"], \"./layout\"),\n defaultClaim(\"grid\", [\"Grid\"], \"./layout\"),\n keyboardClaim(\"layout\", [\"Layout\"], \"./layout\"),\n defaultClaim(\"button\", [\"Button\"], \"./actions\"),\n defaultClaim(\"icon-button\", [\"IconButton\"], \"./actions\"),\n keyboardClaim(\"link\", [\"Link\"], \"./actions\"),\n keyboardClaim(\"field\", [\"Field\", \"TextField\"], \"./forms\"),\n keyboardClaim(\"search-field\", [\"SearchField\"], \"./forms\"),\n defaultClaim(\"text-area\", [\"TextArea\"], \"./forms\"),\n keyboardClaim(\"password-field\", [\"PasswordField\"], \"./password-field\"),\n keyboardClaim(\"otp-field\", [\"OtpField\"], \"./otp-field\"),\n keyboardClaim(\"number-field\", [\"NumberField\"], \"./number-field\"),\n keyboardClaim(\"slider\", [\"Slider\"], \"./slider\"),\n keyboardClaim(\"form\", [\"Form\"], \"./forms\", \"test/form.keyboard.browser.test.tsx\"),\n keyboardClaim(\"date-picker\", [\"DatePicker\"], \"./date-picker\"),\n keyboardClaim(\"calendar\", [\"Calendar\"], \"./calendar\", \"test/calendar.browser.test.tsx\"),\n keyboardClaim(\"file-picker\", [\"FilePicker\"], \"./file-picker\", \"test/file-picker.keyboard.browser.test.tsx\"),\n keyboardClaim(\"checkbox\", [\"Checkbox\"], \"./selection\"),\n defaultClaim(\"radio\", [\"Radio\"], \"./selection\"),\n keyboardClaim(\"checkbox-group\", [\"CheckboxGroup\"], \"./selection\"),\n keyboardClaim(\"radio-group\", [\"RadioGroup\"], \"./selection\"),\n keyboardClaim(\"switch\", [\"Switch\"], \"./selection\"),\n keyboardClaim(\"segmented-control\", [\"SegmentedControl\"], \"./selection\"),\n keyboardClaim(\"chip\", [\"Chip\"], \"./selection\"),\n keyboardClaim(\"tabs\", [\"Tabs\"], \"./navigation\", \"test/tabs.keyboard.browser.test.tsx\"),\n keyboardClaim(\"breadcrumb\", [\"Breadcrumb\"], \"./breadcrumb\", \"test/page-navigation.browser.test.tsx\"),\n keyboardClaim(\"pagination\", [\"Pagination\"], \"./pagination\", \"test/pagination.keyboard.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"popover\", [\"Popover\"], \"./popover\", \"test/popover.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"side-panel\", [\"SidePanel\"], \"./side-panel\", \"test/side-panel.browser.test.tsx\"),\n keyboardClaim(\"splitter\", [\"Splitter\"], \"./splitter\", \"test/splitter.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"tour\", [\"Tour\"], \"./tour\", \"test/tour.browser.test.tsx\"),\n keyboardClaim(\"tree\", [\"Tree\"], \"./tree\", \"test/tree.browser.test.tsx\"),\n keyboardClaim(\"transfer-list\", [\"TransferList\"], \"./transfer-list\", \"test/transfer-list.browser.test.tsx\"),\n keyboardClaim(\"mentions\", [\"Mentions\"], \"./mentions\", \"test/mentions.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"command-palette\", [\"CommandPalette\"], \"./command-palette\", \"test/command-palette.browser.test.tsx\"),\n keyboardClaim(\"agreement\", [\"Agreement\"], \"./agreement\", \"test/agreement.keyboard.browser.test.tsx\"),\n defaultClaim(\"top\", [\"Top\"], \"./top\"),\n defaultClaim(\"heading\", [\"Heading\"], \"./heading\"),\n defaultClaim(\"text-format\", [\"TextFormat\"], \"./text-formats\"),\n keyboardClaim(\"toggle-group\", [\"ToggleGroup\"], \"./toggle-group\"),\n keyboardClaim(\"tags-input\", [\"TagsInput\"], \"./tags-input\"),\n keyboardAndLongCopyClaim(\"skip-nav\", [\"SkipNav\"], \"./skip-nav\", \"test/skip-nav.browser.test.tsx\"),\n defaultClaim(\"bottom-info\", [\"BottomInfo\"], \"./bottom-info\"),\n keyboardClaim(\"sidebar\", [\"Sidebar\"], \"./sidebar\", \"test/sidebar.browser.test.tsx\"),\n keyboardClaim(\"date-range-picker\", [\"DateRangePicker\"], \"./date-range\", \"test/date-range.keyboard.browser.test.tsx\"),\n keyboardClaim(\"auth-provider-button\", [\"AuthProviderButton\"], \"./provider-button\"),\n defaultClaim(\"auth-screen\", [\"AuthScreenLayout\"], \"./auth-screen\"),\n keyboardClaim(\"data-table\", [\"DataTable\"], \"./data-table\", \"test/data-table.keyboard.browser.test.tsx\"),\n keyboardClaim(\"collapsible\", [\"Collapsible\"], \"./collapsible\", \"test/collapsible.keyboard.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"context-menu\", [\"ContextMenu\"], \"./context-menu\", \"test/context-menu.interactions.browser.test.tsx\"),\n keyboardClaim(\"menubar\", [\"Menubar\"], \"./menubar\", \"test/menubar.keyboard.browser.test.tsx\"),\n defaultClaim(\"asset\", [\"Asset\", \"AssetGroup\"], \"./asset\"),\n keyboardClaim(\"anchor\", [\"Anchor\"], \"./anchor\", \"test/anchor.browser.test.tsx\"),\n keyboardClaim(\"bottom-navigation\", [\"BottomNavigation\"], \"./navigation\", \"test/bottom-navigation.keyboard.browser.test.tsx\"),\n keyboardClaim(\"load-more\", [\"LoadMore\"], \"./navigation\", \"test/load-more.interactions.browser.test.tsx\"),\n keyboardClaim(\"carousel\", [\"Carousel\"], \"./carousel\", \"test/carousel.browser.test.tsx\"),\n keyboardClaim(\"floating-action-button\", [\"FloatingActionButton\"], \"./floating-action-button\"),\n defaultClaim(\"steps\", [\"Steps\"], \"./steps\"),\n defaultClaim(\"badge\", [\"Badge\"], \"./display\"),\n defaultClaim(\"avatar\", [\"Avatar\"], \"./display\"),\n defaultClaim(\"counter-badge\", [\"CounterBadge\"], \"./display\"),\n defaultClaim(\"card\", [\"Card\"], \"./display\"),\n defaultClaim(\"list\", [\"List\"], \"./display\"),\n defaultClaim(\"list-row\", [\"ListRow\"], \"./display\"),\n defaultClaim(\"tag\", [\"Tag\"], \"./display\"),\n keyboardClaim(\"accordion\", [\"Accordion\"], \"./display\", \"test/accordion.keyboard.browser.test.tsx\"),\n defaultClaim(\"divider\", [\"Divider\"], \"./display\"),\n defaultClaim(\"statistic\", [\"Statistic\", \"StatisticGroup\"], \"./display\"),\n defaultClaim(\"section\", [\"Section\"], \"./layout\"),\n keyboardClaim(\"upload-item\", [\"UploadItem\"], \"./upload-item\", \"test/upload-item.browser.test.tsx\"),\n defaultClaim(\"timeline\", [\"Timeline\"], \"./display\"),\n defaultClaim(\"description-list\", [\"DescriptionList\"], \"./display\"),\n defaultClaim(\"image\", [\"Image\"], \"./display\"),\n defaultClaim(\"empty-state\", [\"EmptyState\"], \"./feedback\"),\n defaultClaim(\"notice\", [\"Notice\"], \"./feedback\"),\n defaultClaim(\"progress\", [\"Progress\"], \"./feedback\"),\n {\n componentId: \"thinking-orb\",\n exportNames: [\"ThinkingOrb\"],\n subpath: \"./thinking-orb\",\n scenarios: [\"default\", \"dark\", \"large-text\", \"rtl\", \"reduced-motion\", \"accessibility\"],\n proofs: [\n { scenarios: [\"default\"], file: defaultProofFile, caseId: \"thinking-orb\" },\n {\n scenarios: [\"dark\", \"large-text\", \"rtl\", \"reduced-motion\", \"accessibility\"],\n file: \"test/thinking-orb.browser.test.tsx\",\n caseId: \"thinking-orb\",\n },\n ],\n },\n keyboardClaim(\"color-picker\", [\"ColorPicker\"], \"./color-picker\", \"test/web-additions.browser.test.tsx\"),\n defaultClaim(\"watermark\", [\"Watermark\"], \"./watermark\"),\n defaultClaim(\"affix\", [\"Affix\"], \"./affix\"),\n defaultClaim(\"masonry\", [\"Masonry\"], \"./masonry\"),\n defaultClaim(\"virtual-list\", [\"VirtualList\"], \"./virtual-list\"),\n defaultClaim(\"qr-code\", [\"QRCode\"], \"./qr-code\"),\n defaultClaim(\"spinner\", [\"Spinner\"], \"./feedback\"),\n defaultClaim(\"skeleton\", [\"Skeleton\"], \"./feedback\"),\n defaultClaim(\"result\", [\"Result\"], \"./feedback\"),\n toastClaim(),\n keyboardClaim(\"select\", [\"Select\"], \"./forms\"),\n keyboardClaim(\"combobox\", [\"Combobox\"], \"./forms\"),\n keyboardClaim(\"dialog\", [\"Dialog\"], \"./overlays\", \"test/advanced.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"alert-dialog\", [\"AlertDialog\"], \"./overlays\", \"test/alert-dialog.keyboard.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"sheet\", [\"Sheet\"], \"./overlays\", \"test/sheet-layout.browser.test.tsx\"),\n keyboardClaim(\"tooltip\", [\"Tooltip\"], \"./overlays\", \"test/tooltip.browser.test.tsx\"),\n defaultClaim(\"visually-hidden\", [\"VisuallyHidden\"], \"./layout\"),\n keyboardAndLongCopyClaim(\"menu\", [\"Menu\"], \"./overlays\", \"test/menu.keyboard.browser.test.tsx\"),\n ],\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\";\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;\n\n/**\n * Environment scenarios proven in a real browser by scenario-matrix.browser.\n * Until 1.5.0 every component claimed all seven scenarios from one SSR test\n * that only checked the provider wrapper's attributes. A component now claims\n * a matrix scenario only if the matrix assertion for it passes.\n */\nconst matrixScenarios = [\"accessibility\", \"dark\", \"large-text\", \"rtl\", \"reduced-motion\"] as const;\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.\n */\nconst webScenarioGaps: Readonly<Record<string, readonly ReactRendererEvidenceScenario[]>> = {};\n\n/** Fixtures that render long copy inside the component (renderLongCopy). */\nconst webLongCopyFixtures: ReadonlySet<string> = new Set<string>([\n \"masonry\", \"virtual-list\", \"qr-code\", \"color-picker\", \"watermark\", \"affix\",\n \"design-system-provider\",\n \"text-format\",\n \"aspect-ratio\",\n \"grid\",\n \"splitter\",\n \"layout\",\n \"steps\",\n \"breadcrumb\",\n \"auth-screen\",\n \"radio\",\n \"list\",\n \"timeline\",\n \"bottom-info\",\n \"stack\",\n \"container\",\n \"text\",\n \"surface\",\n \"button\",\n \"field\",\n \"text-area\",\n \"card\",\n \"notice\",\n \"list-row\",\n \"tag\",\n \"accordion\",\n \"file-picker\",\n \"agreement\",\n \"bottom-navigation\",\n \"load-more\",\n \"tabs\",\n \"badge\",\n \"chip\",\n \"link\",\n \"select\",\n \"combobox\",\n \"heading\",\n \"empty-state\",\n \"top\",\n \"section\",\n \"segmented-control\",\n \"top-bar\",\n \"mentions\",\n \"bottom-cta\",\n \"result\",\n \"progress\",\n \"description-list\",\n \"toast\",\n \"statistic\",\n \"radio-group\",\n \"checkbox-group\",\n \"auth-provider-button\",\n \"password-field\",\n \"search-field\",\n \"number-field\",\n \"floating-action-button\",\n \"checkbox\",\n \"switch\",\n \"toggle-group\",\n \"slider\",\n \"otp-field\",\n \"date-picker\",\n \"menubar\",\n \"sidebar\",\n \"transfer-list\",\n \"upload-item\",\n \"tags-input\",\n \"data-table\",\n \"collapsible\",\n \"anchor\",\n \"tree\",\n \"carousel\",\n \"calendar\",\n \"dialog\",\n \"tooltip\",\n]);\n\nfunction defaultClaim(\n componentId: string,\n exportNames: readonly string[],\n subpath: `./${string}`,\n): ReactRendererEvidenceComponent {\n const gaps = webScenarioGaps[componentId] ?? [];\n const matrix: ReactRendererEvidenceScenario[] = [\n ...matrixScenarios.filter((scenario) => !gaps.includes(scenario)),\n ...(webLongCopyFixtures.has(componentId) && !gaps.includes(\"long-copy\") ? [\"long-copy\" as const] : []),\n ];\n return {\n componentId,\n exportNames,\n subpath,\n scenarios: [\"default\", ...matrix],\n proofs: [\n { scenarios: [\"default\"], file: defaultProofFile, caseId: componentId },\n ...(matrix.length === 0 ? [] : [{ scenarios: matrix, file: matrixProofFile, caseId: componentId }]),\n ],\n };\n}\n\nfunction keyboardClaim(\n componentId: string,\n exportNames: readonly string[],\n subpath: `./${string}`,\n proofFile: `test/${string}.test.tsx` = \"test/stable-core.browser.test.tsx\",\n): ReactRendererEvidenceComponent {\n const base = defaultClaim(componentId, exportNames, subpath);\n return {\n ...base,\n scenarios: [...base.scenarios, \"keyboard\"],\n proofs: [\n ...base.proofs,\n {\n scenarios: [\"keyboard\"],\n file: proofFile,\n caseId: componentId,\n },\n ],\n };\n}\n\nfunction keyboardAndLongCopyClaim(\n componentId: string,\n exportNames: readonly string[],\n subpath: `./${string}`,\n proofFile: `test/${string}.test.tsx`,\n): ReactRendererEvidenceComponent {\n const base = defaultClaim(componentId, exportNames, subpath);\n return {\n ...base,\n scenarios: [...base.scenarios, \"keyboard\", \"long-copy\"],\n proofs: [...base.proofs, { scenarios: [\"keyboard\", \"long-copy\"], file: proofFile, caseId: componentId }],\n };\n}\n\nfunction toastClaim(): ReactRendererEvidenceComponent {\n const base = defaultClaim(\"toast\", [\"Toast\", \"ToastProvider\", \"useToast\"], \"./toast\");\n return {\n ...base,\n scenarios: [...base.scenarios, \"keyboard\"],\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 proofs: [...base.proofs,\n { scenarios: [\"keyboard\"], file: \"test/stable-core.browser.test.tsx\", caseId: \"toast\" },\n { scenarios: [\"dark\", \"long-copy\", \"large-text\", \"rtl\"], file: \"test/toast-layout.browser.test.tsx\", caseId: \"toast\" },\n ],\n };\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.13.1\",\n surface: \"web\",\n components: [\n defaultClaim(\"top-bar\", [\"TopBar\"], \"./top-bar\"),\n defaultClaim(\"bottom-cta\", [\"BottomCTA\"], \"./bottom-cta\"),\n defaultClaim(\"design-system-provider\", [\"HjmProvider\", \"useHjmTheme\"], \"./provider\"),\n defaultClaim(\"text\", [\"Text\"], \"./layout\"),\n defaultClaim(\"surface\", [\"Surface\"], \"./layout\"),\n defaultClaim(\"icon\", [\"Icon\"], \"./display\"),\n defaultClaim(\"stack\", [\"Stack\"], \"./layout\"),\n defaultClaim(\"container\", [\"Container\"], \"./layout\"),\n defaultClaim(\"aspect-ratio\", [\"AspectRatio\"], \"./layout\"),\n defaultClaim(\"grid\", [\"Grid\"], \"./layout\"),\n keyboardClaim(\"layout\", [\"Layout\"], \"./layout\"),\n defaultClaim(\"button\", [\"Button\"], \"./actions\"),\n defaultClaim(\"icon-button\", [\"IconButton\"], \"./actions\"),\n keyboardClaim(\"link\", [\"Link\"], \"./actions\"),\n keyboardClaim(\"field\", [\"Field\", \"TextField\"], \"./forms\"),\n keyboardClaim(\"search-field\", [\"SearchField\"], \"./forms\"),\n defaultClaim(\"text-area\", [\"TextArea\"], \"./forms\"),\n keyboardClaim(\"password-field\", [\"PasswordField\"], \"./password-field\"),\n keyboardClaim(\"otp-field\", [\"OtpField\"], \"./otp-field\"),\n keyboardClaim(\"number-field\", [\"NumberField\"], \"./number-field\"),\n keyboardClaim(\"slider\", [\"Slider\"], \"./slider\"),\n keyboardClaim(\"form\", [\"Form\"], \"./forms\", \"test/form.keyboard.browser.test.tsx\"),\n keyboardClaim(\"date-picker\", [\"DatePicker\"], \"./date-picker\"),\n keyboardClaim(\"calendar\", [\"Calendar\"], \"./calendar\", \"test/calendar.browser.test.tsx\"),\n keyboardClaim(\"file-picker\", [\"FilePicker\"], \"./file-picker\", \"test/file-picker.keyboard.browser.test.tsx\"),\n keyboardClaim(\"checkbox\", [\"Checkbox\"], \"./selection\"),\n defaultClaim(\"radio\", [\"Radio\"], \"./selection\"),\n keyboardClaim(\"checkbox-group\", [\"CheckboxGroup\"], \"./selection\"),\n keyboardClaim(\"radio-group\", [\"RadioGroup\"], \"./selection\"),\n keyboardClaim(\"switch\", [\"Switch\"], \"./selection\"),\n keyboardClaim(\"segmented-control\", [\"SegmentedControl\"], \"./selection\"),\n keyboardClaim(\"chip\", [\"Chip\"], \"./selection\"),\n keyboardClaim(\"tabs\", [\"Tabs\"], \"./navigation\", \"test/tabs.keyboard.browser.test.tsx\"),\n keyboardClaim(\"breadcrumb\", [\"Breadcrumb\"], \"./breadcrumb\", \"test/page-navigation.browser.test.tsx\"),\n keyboardClaim(\"pagination\", [\"Pagination\"], \"./pagination\", \"test/pagination.keyboard.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"popover\", [\"Popover\"], \"./popover\", \"test/popover.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"side-panel\", [\"SidePanel\"], \"./side-panel\", \"test/side-panel.browser.test.tsx\"),\n keyboardClaim(\"splitter\", [\"Splitter\"], \"./splitter\", \"test/splitter.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"tour\", [\"Tour\"], \"./tour\", \"test/tour.browser.test.tsx\"),\n keyboardClaim(\"tree\", [\"Tree\"], \"./tree\", \"test/tree.browser.test.tsx\"),\n keyboardClaim(\"transfer-list\", [\"TransferList\"], \"./transfer-list\", \"test/transfer-list.browser.test.tsx\"),\n keyboardClaim(\"mentions\", [\"Mentions\"], \"./mentions\", \"test/mentions.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"command-palette\", [\"CommandPalette\"], \"./command-palette\", \"test/command-palette.browser.test.tsx\"),\n keyboardClaim(\"agreement\", [\"Agreement\"], \"./agreement\", \"test/agreement.keyboard.browser.test.tsx\"),\n defaultClaim(\"top\", [\"Top\"], \"./top\"),\n defaultClaim(\"heading\", [\"Heading\"], \"./heading\"),\n defaultClaim(\"text-format\", [\"TextFormat\"], \"./text-formats\"),\n keyboardClaim(\"toggle-group\", [\"ToggleGroup\"], \"./toggle-group\"),\n keyboardClaim(\"tags-input\", [\"TagsInput\"], \"./tags-input\"),\n keyboardAndLongCopyClaim(\"skip-nav\", [\"SkipNav\"], \"./skip-nav\", \"test/skip-nav.browser.test.tsx\"),\n defaultClaim(\"bottom-info\", [\"BottomInfo\"], \"./bottom-info\"),\n keyboardClaim(\"sidebar\", [\"Sidebar\"], \"./sidebar\", \"test/sidebar.browser.test.tsx\"),\n keyboardClaim(\"date-range-picker\", [\"DateRangePicker\"], \"./date-range\", \"test/date-range.keyboard.browser.test.tsx\"),\n keyboardClaim(\"auth-provider-button\", [\"AuthProviderButton\"], \"./provider-button\"),\n defaultClaim(\"auth-screen\", [\"AuthScreenLayout\"], \"./auth-screen\"),\n keyboardClaim(\"data-table\", [\"DataTable\"], \"./data-table\", \"test/data-table.keyboard.browser.test.tsx\"),\n keyboardClaim(\"collapsible\", [\"Collapsible\"], \"./collapsible\", \"test/collapsible.keyboard.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"context-menu\", [\"ContextMenu\"], \"./context-menu\", \"test/context-menu.interactions.browser.test.tsx\"),\n keyboardClaim(\"menubar\", [\"Menubar\"], \"./menubar\", \"test/menubar.keyboard.browser.test.tsx\"),\n defaultClaim(\"asset\", [\"Asset\", \"AssetGroup\"], \"./asset\"),\n keyboardClaim(\"anchor\", [\"Anchor\"], \"./anchor\", \"test/anchor.browser.test.tsx\"),\n keyboardClaim(\"bottom-navigation\", [\"BottomNavigation\"], \"./navigation\", \"test/bottom-navigation.keyboard.browser.test.tsx\"),\n keyboardClaim(\"load-more\", [\"LoadMore\"], \"./navigation\", \"test/load-more.interactions.browser.test.tsx\"),\n keyboardClaim(\"carousel\", [\"Carousel\"], \"./carousel\", \"test/carousel.browser.test.tsx\"),\n keyboardClaim(\"floating-action-button\", [\"FloatingActionButton\"], \"./floating-action-button\"),\n defaultClaim(\"steps\", [\"Steps\"], \"./steps\"),\n defaultClaim(\"badge\", [\"Badge\"], \"./display\"),\n defaultClaim(\"avatar\", [\"Avatar\"], \"./display\"),\n defaultClaim(\"counter-badge\", [\"CounterBadge\"], \"./display\"),\n defaultClaim(\"card\", [\"Card\"], \"./display\"),\n defaultClaim(\"list\", [\"List\"], \"./display\"),\n defaultClaim(\"list-row\", [\"ListRow\"], \"./display\"),\n defaultClaim(\"tag\", [\"Tag\"], \"./display\"),\n keyboardClaim(\"accordion\", [\"Accordion\"], \"./display\", \"test/accordion.keyboard.browser.test.tsx\"),\n defaultClaim(\"divider\", [\"Divider\"], \"./display\"),\n defaultClaim(\"statistic\", [\"Statistic\", \"StatisticGroup\"], \"./display\"),\n defaultClaim(\"section\", [\"Section\"], \"./layout\"),\n keyboardClaim(\"upload-item\", [\"UploadItem\"], \"./upload-item\", \"test/upload-item.browser.test.tsx\"),\n defaultClaim(\"timeline\", [\"Timeline\"], \"./display\"),\n defaultClaim(\"description-list\", [\"DescriptionList\"], \"./display\"),\n defaultClaim(\"image\", [\"Image\"], \"./display\"),\n defaultClaim(\"empty-state\", [\"EmptyState\"], \"./feedback\"),\n defaultClaim(\"notice\", [\"Notice\"], \"./feedback\"),\n defaultClaim(\"progress\", [\"Progress\"], \"./feedback\"),\n {\n componentId: \"thinking-orb\",\n exportNames: [\"ThinkingOrb\"],\n subpath: \"./thinking-orb\",\n scenarios: [\"default\", \"dark\", \"large-text\", \"rtl\", \"reduced-motion\", \"accessibility\"],\n proofs: [\n { scenarios: [\"default\"], file: defaultProofFile, caseId: \"thinking-orb\" },\n {\n scenarios: [\"dark\", \"large-text\", \"rtl\", \"reduced-motion\", \"accessibility\"],\n file: \"test/thinking-orb.browser.test.tsx\",\n caseId: \"thinking-orb\",\n },\n ],\n },\n keyboardClaim(\"color-picker\", [\"ColorPicker\"], \"./color-picker\", \"test/web-additions.browser.test.tsx\"),\n defaultClaim(\"watermark\", [\"Watermark\"], \"./watermark\"),\n defaultClaim(\"affix\", [\"Affix\"], \"./affix\"),\n defaultClaim(\"masonry\", [\"Masonry\"], \"./masonry\"),\n defaultClaim(\"virtual-list\", [\"VirtualList\"], \"./virtual-list\"),\n defaultClaim(\"qr-code\", [\"QRCode\"], \"./qr-code\"),\n defaultClaim(\"spinner\", [\"Spinner\"], \"./feedback\"),\n defaultClaim(\"skeleton\", [\"Skeleton\"], \"./feedback\"),\n defaultClaim(\"result\", [\"Result\"], \"./feedback\"),\n toastClaim(),\n keyboardClaim(\"select\", [\"Select\"], \"./forms\"),\n keyboardClaim(\"combobox\", [\"Combobox\"], \"./forms\"),\n keyboardClaim(\"dialog\", [\"Dialog\"], \"./overlays\", \"test/advanced.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"alert-dialog\", [\"AlertDialog\"], \"./overlays\", \"test/alert-dialog.keyboard.browser.test.tsx\"),\n keyboardAndLongCopyClaim(\"sheet\", [\"Sheet\"], \"./overlays\", \"test/sheet-layout.browser.test.tsx\"),\n keyboardClaim(\"tooltip\", [\"Tooltip\"], \"./overlays\", \"test/tooltip.browser.test.tsx\"),\n defaultClaim(\"visually-hidden\", [\"VisuallyHidden\"], \"./layout\"),\n keyboardAndLongCopyClaim(\"menu\", [\"Menu\"], \"./overlays\", \"test/menu.keyboard.browser.test.tsx\"),\n ],\n} as const satisfies ReactRendererEvidenceManifest;\n"]}
|
package/dist/screen-flows.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { type SheetProps } from "./overlays.js";
|
|
|
4
4
|
import { type UploadItemDescriptor, type UploadItemLabels } from "@hjmds/design-contracts/components/upload-item";
|
|
5
5
|
import { type AlertDialogRequest } from "@hjmds/design-contracts/components/alert-dialog";
|
|
6
6
|
import { type PermissionScreenStatus, type PhotoSource, type PhotoSourceLabels } from "@hjmds/design-contracts/screen-patterns";
|
|
7
|
+
import { type ContainerGutter } from "@hjmds/design-contracts/components/container";
|
|
7
8
|
/** Copy, pending state and mutations are controlled by the consuming product. */
|
|
8
9
|
export type ScreenFlowAction = Readonly<{
|
|
9
10
|
label: string;
|
|
@@ -251,6 +252,8 @@ export type SearchScreenProps<F = unknown> = Base & SearchInputSlot & SearchComm
|
|
|
251
252
|
children: ReactNode;
|
|
252
253
|
/** `scroll` keeps `filters` on one horizontally scrolling line that bleeds to the screen edges. */
|
|
253
254
|
filtersOverflow?: "wrap" | "scroll";
|
|
255
|
+
/** Gutter the host (Container `gutter`, Sheet = `regular`) already applies around this screen; the scroll rail bleeds over it too. */
|
|
256
|
+
hostGutter?: ContainerGutter;
|
|
254
257
|
/** `hidden` drops the visible label (the field keeps `queryLabel` as its accessible name and placeholder). */
|
|
255
258
|
queryLabelVisibility?: "visible" | "hidden";
|
|
256
259
|
recentQueries?: SearchRecentQueries;
|
|
@@ -261,7 +264,7 @@ export type SearchScreenProps<F = unknown> = Base & SearchInputSlot & SearchComm
|
|
|
261
264
|
filterSheet?: SearchFilterSheet<F>;
|
|
262
265
|
};
|
|
263
266
|
/** Abort is supplied to the host request; the host must ignore aborted responses before committing results. */
|
|
264
|
-
export declare function SearchScreen<F = unknown>({ query, queryLabel, queryField, queryClearLabel, onQueryChange, onSearch, debounceMs, filters, recentSearches, children, onSubmit, committedQuery, filtersOverflow, queryLabelVisibility, searching, searchingLabel, recentQueries, suggestedQueries, suggestions, resultSummary, appliedFilters, filterSheet, ...screen }: SearchScreenProps<F>): import("react").JSX.Element;
|
|
267
|
+
export declare function SearchScreen<F = unknown>({ query, queryLabel, queryField, queryClearLabel, onQueryChange, onSearch, debounceMs, filters, recentSearches, children, onSubmit, committedQuery, filtersOverflow, hostGutter, queryLabelVisibility, searching, searchingLabel, recentQueries, suggestedQueries, suggestions, resultSummary, appliedFilters, filterSheet, ...screen }: SearchScreenProps<F>): import("react").JSX.Element;
|
|
265
268
|
export type PermissionScreenProps = Base & {
|
|
266
269
|
status: PermissionScreenStatus;
|
|
267
270
|
illustration?: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-flows.d.ts","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"screen-flows.d.ts","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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"}
|
package/dist/screen-flows.js
CHANGED
|
@@ -11,6 +11,7 @@ import {} from "@hjmds/design-contracts/components/upload-item";
|
|
|
11
11
|
import {} from "@hjmds/design-contracts/components/alert-dialog";
|
|
12
12
|
import { validateCommentThread, resolvePermissionAction, resolveOnboardingStep, resolveSearchCommit, resolveSearchEmptyCause, resolveSearchScreenPhase, resolveFocusAfterRemoval, screenPatternRecipe, searchScreenRecipe } from "@hjmds/design-contracts/screen-patterns";
|
|
13
13
|
import { resolveWindowClass } from "@hjmds/design-contracts/responsive";
|
|
14
|
+
import { containerRecipe } from "@hjmds/design-contracts/components/container";
|
|
14
15
|
import { ListRow } from "./display.js";
|
|
15
16
|
import { Heading } from "./heading.js";
|
|
16
17
|
import { EmptyState, Skeleton } from "./feedback.js";
|
|
@@ -147,7 +148,7 @@ function SearchFilterSheetView({ sheet }) {
|
|
|
147
148
|
return _jsx(Sheet, { open: sheet.open, onOpenChange: open => sheet.onOpenChange(open), title: sheet.title, closeLabel: sheet.labels.close, placement: session?.side ? "end" : "bottom", size: sheet.size ?? "large", footer: footer, children: sheet.renderContent(draft, setDraft) });
|
|
148
149
|
}
|
|
149
150
|
/** Abort is supplied to the host request; the host must ignore aborted responses before committing results. */
|
|
150
|
-
export function SearchScreen({ query, queryLabel, queryField, queryClearLabel, onQueryChange, onSearch, debounceMs = 300, filters, recentSearches, children, onSubmit, committedQuery, filtersOverflow = "wrap", queryLabelVisibility = "visible", searching, searchingLabel, recentQueries, suggestedQueries, suggestions, resultSummary, appliedFilters, filterSheet, ...screen }) {
|
|
151
|
+
export function SearchScreen({ query, queryLabel, queryField, queryClearLabel, onQueryChange, onSearch, debounceMs = 300, filters, recentSearches, children, onSubmit, committedQuery, filtersOverflow = "wrap", hostGutter = "none", queryLabelVisibility = "visible", searching, searchingLabel, recentQueries, suggestedQueries, suggestions, resultSummary, appliedFilters, filterSheet, ...screen }) {
|
|
151
152
|
// The host owns localized copy. A custom queryField owns its own clear affordance.
|
|
152
153
|
if (queryField == null && !queryClearLabel?.trim())
|
|
153
154
|
throw new TypeError("SearchScreen requires a localized queryClearLabel for its default search field");
|
|
@@ -162,6 +163,13 @@ export function SearchScreen({ query, queryLabel, queryField, queryClearLabel, o
|
|
|
162
163
|
const commit = (value) => { const next = resolveSearchCommit(value); if (next === null)
|
|
163
164
|
return; if (next !== query)
|
|
164
165
|
onQueryChange(next); onSubmit?.(next); };
|
|
166
|
+
// A picked suggestion/recent/suggested query unmounts with its phase, which dropped focus to <body>; move it to the
|
|
167
|
+
// results region first (1.13.1, utilverse adoption 2026-10-06, Native twin: Keyboard.dismiss on every commit).
|
|
168
|
+
// Leaving the field also closes a mobile browser's keyboard. Enter keeps focus in the field instead: it is still on
|
|
169
|
+
// screen with the committed text, and moving it would make keyboard users Shift+Tab back to refine. Rejected: blur()
|
|
170
|
+
// without a target, which leaves focus on <body> and loses the reading position for screen readers.
|
|
171
|
+
const pick = (value) => { if (resolveSearchCommit(value) !== null)
|
|
172
|
+
bodyHost.current?.focus({ preventScroll: true }); commit(value); };
|
|
165
173
|
// onSubmit separates "typing" from "committed" (recent-search writes, suggestion → results) without making
|
|
166
174
|
// products rebuild the default field through queryField (2026-10-06 search redesign, usage/components/search-screen.md).
|
|
167
175
|
// Enter while an IME is composing (Korean/Japanese) only confirms the syllable, so it must not commit.
|
|
@@ -181,7 +189,9 @@ export function SearchScreen({ query, queryLabel, queryField, queryClearLabel, o
|
|
|
181
189
|
const rail = !showRail ? null : trigger && filters != null ? _jsxs(Stack, { axis: "inline", gap: "xs", wrap: filtersOverflow === "wrap", children: [trigger, filters] }) : trigger ?? filters;
|
|
182
190
|
// Wrapping chips grow the pinned area line by line at large text; the scroll rail caps it at one row.
|
|
183
191
|
// A product-owned CSS/ScrollView rail would re-derive bleed, scroll padding and RTL per app.
|
|
184
|
-
|
|
192
|
+
// contentInset="none" leaves the gutter to the host, which CSS cannot see; hostGutter names it (Native twin).
|
|
193
|
+
const bleed = (screen.contentInset === "none" ? 0 : screenPatternRecipe.padding) + containerRecipe.gutters[hostGutter];
|
|
194
|
+
const filterSlot = rail != null && filtersOverflow === "scroll" ? _jsx("div", { className: "hjm-search-screen__filters", "data-overflow": "scroll", style: { "--hjm-search-filters-bleed": `${bleed}px` }, children: rail }) : rail;
|
|
185
195
|
const visibleSuggestions = suggestions?.items.slice(0, Math.max(0, suggestions.maxVisible ?? searchScreenRecipe.suggestionVisible)).length ?? 0;
|
|
186
196
|
const countAnnouncement = phase === "typing" && suggestions ? suggestions.countLabel(visibleSuggestions) : phase === "results" && resultSummary && resultSummary.count !== null ? resultSummary.countLabel(resultSummary.count) : "";
|
|
187
197
|
// 2026-10-06 utilverse adoption: products swapped the whole field just to show progress. The Web spinner is
|
|
@@ -193,11 +203,11 @@ export function SearchScreen({ query, queryLabel, queryField, queryClearLabel, o
|
|
|
193
203
|
const clearApplied = () => { focus.schedule({ list: "clearApplied", index: -1, from: appliedCount }); appliedFilters.onClearAll(); };
|
|
194
204
|
// A new order starts at the top; the previous offset would land mid-list in unrelated results.
|
|
195
205
|
const changeSort = (id) => { resultSummary?.sort?.onChange(id); bodyHost.current?.closest(".hjm-screen__body")?.scrollTo?.({ top: 0 }); };
|
|
196
|
-
const idle = _jsx(SearchIdleSections, { recent: recentQueries, suggested: suggestedQueries, legacy: recentSearches, onCommit:
|
|
206
|
+
const idle = _jsx(SearchIdleSections, { recent: recentQueries, suggested: suggestedQueries, legacy: recentSearches, onCommit: pick, hostRef: focus.recentHost, onRemove: removeRecent, onClearAll: clearRecent });
|
|
197
207
|
const body = phase === "idle" ? _jsxs(_Fragment, { children: [idle, committedQuery === undefined ? children : null] })
|
|
198
|
-
: phase === "typing" ? (suggestions ? _jsx(SearchSuggestionList, { query: query, suggestions: suggestions, onCommit:
|
|
199
|
-
: _jsxs(_Fragment, { children: [_jsx(SearchResultsHeader, { summary: resultSummary, applied: appliedFilters, cause: cause, appliedHost: focus.appliedHost, onRemove: removeApplied, onClearAll: clearApplied, onSortChange: changeSort }), _jsx(SearchResultsBody, { summary: resultSummary, applied: appliedFilters, suggested: suggestedQueries, cause: cause, onCommit:
|
|
200
|
-
return _jsxs(_Fragment, { children: [_jsx(ScreenLayout, { ...screen, notice: _jsxs(Stack, { gap: "sm", ref: fieldHost, children: [queryField ?? _jsx(SearchField, { ...labelProps, clearLabel: queryClearLabel, value: query, onValueChange: onQueryChange, loading: searching ?? false, ...submitProps }), filterSlot, screen.notice] }), children: _jsxs(Stack, { gap: "lg", ref: bodyHost, children: [suggestions || resultSummary || searchingLabel ? _jsx(SearchAnnouncement, { text: announcement }) : null, body] }) }), filterSheet ? _jsx(SearchFilterSheetView, { sheet: filterSheet }) : null] });
|
|
208
|
+
: phase === "typing" ? (suggestions ? _jsx(SearchSuggestionList, { query: query, suggestions: suggestions, onCommit: pick }) : null)
|
|
209
|
+
: _jsxs(_Fragment, { children: [_jsx(SearchResultsHeader, { summary: resultSummary, applied: appliedFilters, cause: cause, appliedHost: focus.appliedHost, onRemove: removeApplied, onClearAll: clearApplied, onSortChange: changeSort }), _jsx(SearchResultsBody, { summary: resultSummary, applied: appliedFilters, suggested: suggestedQueries, cause: cause, onCommit: pick, onClearAll: clearApplied, children: children })] });
|
|
210
|
+
return _jsxs(_Fragment, { children: [_jsx(ScreenLayout, { ...screen, notice: _jsxs(Stack, { gap: "sm", ref: fieldHost, children: [queryField ?? _jsx(SearchField, { ...labelProps, clearLabel: queryClearLabel, value: query, onValueChange: onQueryChange, loading: searching ?? false, ...submitProps }), filterSlot, screen.notice] }), children: _jsxs(Stack, { gap: "lg", ref: bodyHost, className: "hjm-search-screen__results", tabIndex: -1, children: [suggestions || resultSummary || searchingLabel ? _jsx(SearchAnnouncement, { text: announcement }) : null, body] }) }), filterSheet ? _jsx(SearchFilterSheetView, { sheet: filterSheet }) : null] });
|
|
201
211
|
}
|
|
202
212
|
export function PermissionScreen({ status, illustration, explanation, request, settings, continueAction, skip, ...screen }) { const kind = resolvePermissionAction(status); const primary = kind === "request" ? request : kind === "settings" ? settings : kind === "continue" ? continueAction : null; return _jsx(ScreenLayout, { ...screen, footer: _jsxs(Stack, { gap: "sm", children: [primary ? _jsx(Action, { action: primary }) : null, skip ? _jsx(Action, { action: skip, secondary: true }) : null] }), children: _jsxs(Stack, { gap: "xl", align: "center", children: [illustration, explanation] }) }); }
|
|
203
213
|
export function OnboardingScreen({ steps, index, onIndexChange, nextLabel, backLabel, complete, skip, progressLabel, layoutStyle }) { const position = resolveOnboardingStep(steps.length, index); const step = steps[index]; return _jsx(ScreenLayout, { ...(layoutStyle === undefined ? {} : { layoutStyle }), title: step.title, description: step.description, actions: skip ? _jsx(Action, { action: skip, secondary: true }) : null, notice: _jsx(Text, { variant: "caption", tone: "muted", children: progressLabel(index + 1, steps.length) }), footer: _jsxs(Stack, { gap: "sm", children: [_jsx(Action, { action: position.last ? complete : { label: nextLabel, onAction: () => onIndexChange(index + 1) } }), !position.first ? _jsx(Action, { action: { label: backLabel, onAction: () => onIndexChange(index - 1) }, secondary: true }) : null] }), children: step.content }); }
|
package/dist/screen-flows.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-flows.js","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState, type KeyboardEvent, type ReactNode, type RefObject } from \"react\";\nimport { ScreenLayout, type ScreenLayoutProps } from \"./screens.js\";\nimport { Button, IconButton } from \"./actions.js\";\nimport { Stack, Text, Grid, VisuallyHidden } from \"./layout.js\";\nimport { SearchField } from \"./forms.js\";\nimport { Chip, RadioGroup } from \"./selection.js\";\nimport { AlertDialog, Menu, Sheet, type SheetProps } from \"./overlays.js\";\nimport { UploadItem } from \"./upload-item.js\";\nimport { type UploadItemDescriptor, type UploadItemLabels } from \"@hjmds/design-contracts/components/upload-item\";\nimport { type AlertDialogRequest } from \"@hjmds/design-contracts/components/alert-dialog\";\nimport { validateCommentThread, resolvePermissionAction, resolveOnboardingStep, resolveSearchCommit, resolveSearchEmptyCause, resolveSearchScreenPhase, resolveFocusAfterRemoval, screenPatternRecipe, searchScreenRecipe, type SearchEmptyCause, type PermissionScreenStatus, type PhotoSource, type PhotoSourceLabels } from \"@hjmds/design-contracts/screen-patterns\";\nimport { resolveWindowClass } from \"@hjmds/design-contracts/responsive\";\nimport { ListRow } from \"./display.js\";\nimport { Heading } from \"./heading.js\";\nimport { EmptyState, Skeleton } from \"./feedback.js\";\n\n/** Copy, pending state and mutations are controlled by the consuming product. */\nexport type ScreenFlowAction = Readonly<{label:string; onAction():void; disabled?:boolean; pending?:boolean}>;\nfunction Action({action,secondary=false}:{action:ScreenFlowAction;secondary?:boolean}){return <Button tone={secondary?\"ghost\":\"primary\"} disabled={!!(action.disabled||action.pending)} loading={action.pending??false} onClick={action.onAction}>{action.label}</Button>;}\ntype Base = Omit<ScreenLayoutProps,\"children\"|\"footer\">;\n\nexport type ListDetailScreenProps = Base & { list:ReactNode; detail?:{title:string;content:ReactNode}; back:ScreenFlowAction; refresh?:ScreenFlowAction; loadMore?:ScreenFlowAction };\n/** Keep the list mounted so input and scroll survive a detail visit. Routers may instead restore host scroll state. */\nexport function ListDetailScreen({list,detail,back,refresh,loadMore,layoutStyle,...screen}:ListDetailScreenProps){\n const open=!!detail;\n // Seed with the first render: a deep link that mounts with detail open is not a user transition,\n // so it must not pull focus from wherever the host left it (address bar, router focus target).\n const listHost=useRef<HTMLDivElement>(null),detailHost=useRef<HTMLDivElement>(null),returnFocus=useRef<HTMLElement|null>(null),wasOpen=useRef(open);\n // Hidden lists preserve scroll but drop browser focus; retain the trigger and move into the\n // detail once, then restore it (or the list body if the item was removed). See usage/ListDetailScreen.\n useLayoutEffect(()=>{\n if(open&&!wasOpen.current)detailHost.current?.querySelector<HTMLElement>(\"button\")?.focus({preventScroll:true});\n if(!open&&wasOpen.current){const target=returnFocus.current; if(target?.isConnected&&!target.closest(\"[hidden]\"))target.focus({preventScroll:true});else listHost.current?.querySelector<HTMLElement>('[tabindex=\"0\"]')?.focus({preventScroll:true});}\n wasOpen.current=open;\n },[open]);\n // layoutStyle places the outer host that owns both panes, not the inner list ScreenLayout.\n return <div style={{height:\"100%\",...layoutStyle}}>\n <div ref={listHost} hidden={open} style={{height:\"100%\"}} onFocusCapture={event=>{returnFocus.current=event.target as HTMLElement;}}><ScreenLayout {...screen} actions={refresh?<Action action={refresh} secondary/>:screen.actions} footer={loadMore?<Action action={loadMore} secondary/>:null}>{list}</ScreenLayout></div>\n {detail?<div ref={detailHost} style={{height:\"100%\"}}><ScreenLayout title={detail.title} leading={<Action action={back} secondary/>}>{detail.content}</ScreenLayout></div>:null}\n </div>;\n}\n\nexport type EditorScreenProps = Base & {children:ReactNode;submitPlacement?:\"header\"|\"footer\";dirty:boolean;submit:ScreenFlowAction;cancel:ScreenFlowAction;discard:Omit<Extract<AlertDialogRequest,{mode:\"confirm\"}>,\"onConfirm\"|\"fallbackErrorMessage\"> & {fallbackErrorMessage:string};draftStatus?:ReactNode};\nexport function EditorScreen({children,dirty,submitPlacement=\"footer\",submit,cancel,discard,draftStatus,...screen}:EditorScreenProps){\n const [confirm,setConfirm]=useState(false);\n return <><ScreenLayout {...screen} leading={<Action action={{...cancel,disabled:!!(cancel.disabled||submit.pending),onAction:()=>{if(dirty)setConfirm(true);else cancel.onAction();}}} secondary/>} actions={submitPlacement===\"header\"?<Action action={submit}/>:screen.actions} footer={submitPlacement===\"header\"?draftStatus:<Stack gap=\"sm\">{draftStatus}<Action action={submit}/></Stack>}>{children}</ScreenLayout><AlertDialog open={confirm} onOpenChange={setConfirm} request={{...discard,mode:\"confirm\",onConfirm:()=>cancel.onAction()}}/></>;\n}\n\nexport type ProfileScreenProps = Base & {summary:ReactNode;edit:ScreenFlowAction;children?:ReactNode;accountActions?:ReactNode};\nexport function ProfileScreen({summary,edit,children,accountActions,...screen}:ProfileScreenProps){return <ScreenLayout {...screen}><Stack gap=\"xl\"><Stack gap=\"md\">{summary}<Action action={edit} secondary/></Stack>{children}{accountActions}</Stack></ScreenLayout>;}\n\nexport type ModerationScreenProps = Base & {reasonPicker?:ReactNode;reasons:readonly {value:string;label:string}[];reason:string|null;onReasonChange(value:string):void;reasonLabel:string;children?:ReactNode;submit:ScreenFlowAction;block?:{action:ScreenFlowAction;confirmation:Extract<AlertDialogRequest,{mode:\"confirm\"}>}};\nexport function ModerationScreen({reasonPicker,reasons,reason,onReasonChange,reasonLabel,children,submit,block,...screen}:ModerationScreenProps){const [confirm,setConfirm]=useState(false);return <><ScreenLayout {...screen} footer={<Stack gap=\"sm\"><Action action={{...submit,disabled:submit.disabled||!!screen.state&&screen.state.kind!==\"ready\"||!reasons.some(item=>item.value===reason)}}/>{block?<Action action={{...block.action,onAction:()=>setConfirm(true)}} secondary/>:null}</Stack>}><Stack gap=\"lg\">{reasonPicker??(reasons.length?<RadioGroup accessibilityLabel={reasonLabel} orientation=\"vertical\" items={reasons} value={reason} onValueChange={value=>{if(value)onReasonChange(value);}}/>:null)}{children}</Stack></ScreenLayout>{block?<AlertDialog open={confirm} onOpenChange={setConfirm} request={block.confirmation}/>:null}</>;}\n\n\n/** Source choice only: permission, capture, decoding and draft persistence belong to the host. */\nexport type PhotoSourceSheetProps = Readonly<{\n open:boolean;onOpenChange(open:boolean):void;onSelect(source:PhotoSource):void;\n labels:PhotoSourceLabels;disabled?:boolean;cameraAvailable?:boolean;\n}>;\nexport function PhotoSourceSheet({open,onOpenChange,onSelect,labels,disabled=false,cameraAvailable=true}:PhotoSourceSheetProps){\n // File-input click must stay in the user's activation stack. Deferring until the\n // sheet animation ends can cause browsers to reject camera/album selection.\n const select=(source:PhotoSource)=>{if(disabled)return;onOpenChange(false);onSelect(source);};\n return <Sheet open={open} onOpenChange={onOpenChange} title={labels.title} closeLabel={labels.cancel}><Stack gap=\"sm\">\n <Button tone=\"secondary\" disabled={disabled} onClick={()=>select(\"library\")}>{labels.library}</Button>\n {cameraAvailable?<Button tone=\"secondary\" disabled={disabled} onClick={()=>select(\"camera\")}>{labels.camera}</Button>:null}\n </Stack></Sheet>;\n}\n\nexport type MediaSelectionItem = {descriptor:UploadItemDescriptor;preview?:ReactNode};\nexport type MediaSelectionScreenProps = Base & {library?:ReactNode;selectionSummary?:ReactNode;items:readonly MediaSelectionItem[];add:ScreenFlowAction;done:ScreenFlowAction;labels:UploadItemLabels;actionLabels:{remove:string;moveUp:string;moveDown:string};removeLabel(item:MediaSelectionItem):string;moveUpLabel(item:MediaSelectionItem):string;moveDownLabel(item:MediaSelectionItem):string;onRemove(id:string):void;onMove(id:string,direction:-1|1):void;onRetry(id:string):void;onCancel(id:string):void};\n/** A photo is the primary content; upload status stays below it instead of replacing the thumbnail. */\nexport function MediaSelectionScreen({library,selectionSummary,items,add,done,labels,actionLabels,removeLabel,moveUpLabel,moveDownLabel,onRemove,onMove,onRetry,onCancel,...screen}:MediaSelectionScreenProps){return <ScreenLayout {...screen} actions={<Action action={add} secondary/>} footer={<Stack gap=\"sm\">{selectionSummary}<Action action={done}/></Stack>}>{library??<Grid columns={{compact:2,expanded:3}} gap={{compact:\"md\"}}>{items.map((item,index)=><Stack key={item.descriptor.id} gap=\"xs\">{item.preview}<UploadItem descriptor={item.descriptor} labels={labels} onRetry={onRetry} onCancel={onCancel}/><Stack axis=\"inline\" gap=\"xxs\" layoutStyle={{flexWrap:\"wrap\"}}><Button aria-label={moveUpLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===0} onClick={()=>onMove(item.descriptor.id,-1)}>{actionLabels.moveUp}</Button><Button aria-label={moveDownLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===items.length-1} onClick={()=>onMove(item.descriptor.id,1)}>{actionLabels.moveDown}</Button><Button aria-label={removeLabel(item)} size=\"small\" tone=\"ghost\" onClick={()=>onRemove(item.descriptor.id)}>{actionLabels.remove}</Button></Stack></Stack>)}</Grid>}</ScreenLayout>;}\n\n\n/*\n * SearchScreen phase sections (2026-10-06, user-delegated decision to lift the search preview logic into\n * the public API; design: packages/design-contracts/docs/screen-patterns.md, SearchScreen two-step section).\n * Products supply data, copy, icons and requests; HJM owns placement, commit routing, focus after removal\n * and count announcements. Before this, every product had to rebuild these from Showcase preview code,\n * which AGENTS.md rules out as an adoption path. Kept in this file, not an internal module: a new module\n * edge would push ./screen-flows past its reviewed module-count budget (scripts/check-renderer-budgets.mjs).\n */\n\n/** Recent searches before typing. Rows commit; the trailing button removes one. */\nexport type SearchRecentQueries = Readonly<{\n items: readonly string[];\n title: string;\n clearAllLabel: string;\n onClearAll(): void;\n removeLabel(query: string): string;\n onRemove(query: string): void;\n /** Decorative leading glyph (for example a history icon). */\n icon?: ReactNode;\n /** Glyph inside the remove button; defaults to \"×\". */\n removeIcon?: ReactNode;\n /** Rows shown; default `searchScreenRecipe.recentVisible` (5). */\n maxVisible?: number;\n}>;\n/** Product-chosen queries shown before typing and after a query-caused zero result. */\nexport type SearchSuggestedQueries = Readonly<{ title: string; items: readonly string[] }>;\n/** A typed-ahead completion. `match` bolds the matched range (weight, not color, so it survives dark mode). */\nexport type SearchSuggestion = Readonly<{ query: string; match?: Readonly<{ start: number; end: number }> }>;\nexport type SearchSuggestions = Readonly<{\n items: readonly SearchSuggestion[];\n /** First row that commits the typed text as is, e.g. \"Search ‘q’\". */\n commitLabel(query: string): string;\n /** Polite announcement of the suggestion count. */\n countLabel(count: number): string;\n icon?: ReactNode;\n /** Rows shown under the commit row; default `searchScreenRecipe.suggestionVisible` (6). */\n maxVisible?: number;\n}>;\nexport type SearchSortOption = Readonly<{ id: string; label: string }>;\nexport type SearchSort = Readonly<{\n /** Accessible name of the sort menu. */\n label: string;\n /** Visible trigger text, usually the current option (\"Sort: Newest\"). */\n triggerLabel: string;\n value: string;\n options: readonly SearchSortOption[];\n onChange(id: string): void;\n /** Trailing glyph of the trigger (for example a chevron). */\n icon?: ReactNode;\n}>;\nexport type SearchResultSummary = Readonly<{\n /** Result total for the committed query; `null` while it loads (skeleton rows replace `children`). */\n count: number | null;\n countLabel(count: number): string;\n /** Announced while loading. */\n loadingLabel: string;\n sort?: SearchSort;\n /** Above the count, e.g. a retained-results error Notice with retry. */\n notice?: ReactNode;\n /** Zero-result copy. Filters as the cause add \"clear all\"; the query as the cause adds suggested queries. */\n empty?: Readonly<{ title: string; description?: string }>;\n}>;\nexport type SearchAppliedFilter = Readonly<{ key: string; label: string }>;\nexport type SearchAppliedFilters = Readonly<{\n items: readonly SearchAppliedFilter[];\n removeLabel(label: string): string;\n onRemove(key: string): void;\n clearAllLabel: string;\n onClearAll(): void;\n removeIcon?: ReactNode;\n}>;\nexport type SearchFilterSheetLabels = Readonly<{\n close: string;\n reset: string;\n /** Primary action text for a live draft count, e.g. \"Show 12 results\"; `null` while counting. */\n apply(count: number | null): string;\n}>;\n/**\n * Draft/applied filter sheet. HJM copies `value` into a draft when the sheet opens, discards the draft\n * on any dismissal, and calls `onApply(draft)` only from the primary action.\n */\nexport type SearchFilterSheet<F> = Readonly<{\n open: boolean;\n onOpenChange(open: boolean): void;\n /** Sheet title; products that open one section from a facet chip pass that section's name. */\n title: string;\n /** Applied filters. */\n value: F;\n onApply(next: F): void;\n /** Live count for a draft. Return `null` while an async count is pending; `0` disables apply. */\n count(draft: F): number | null;\n /** Draft after \"reset\" (the open section, or everything). */\n reset(draft: F): F;\n /** Disables \"reset\" when the draft already equals its reset value. */\n isDefault(draft: F): boolean;\n renderContent(draft: F, setDraft: (next: F) => void): ReactNode;\n labels: SearchFilterSheetLabels;\n /** Default `large`; section sheets usually pass `auto`. */\n size?: SheetProps[\"size\"];\n /** First item of the filter rail that opens the sheet, named with the applied count. */\n trigger?: Readonly<{ label(appliedCount: number): string; accessibilityLabel(appliedCount: number): string; icon?: ReactNode }>;\n}>;\n\ntype Removal = { list: \"recent\" | \"applied\" | \"clearRecent\" | \"clearApplied\"; index: number; from: number };\n\nfunction Highlighted({ text, match }: { text: string; match: SearchSuggestion[\"match\"] }): ReactNode {\n if (!match || match.start < 0 || match.end <= match.start || match.end > text.length) return text;\n return <>{text.slice(0, match.start)}<Text as=\"span\" emphasis=\"strong\">{text.slice(match.start, match.end)}</Text>{text.slice(match.end)}</>;\n}\n\n/** Focus targets after removing a chip or row; returns refs and a scheduler the screen calls from its handlers. */\nfunction useSearchRemovalFocus(recentCount: number, appliedCount: number, input: () => HTMLElement | null | undefined) {\n const pending = useRef<Removal | null>(null);\n const recentHost = useRef<HTMLDivElement>(null);\n const appliedHost = useRef<HTMLDivElement>(null);\n const filterTrigger = useRef<HTMLButtonElement>(null);\n // Wait for the product to actually shrink the list: an async onRemove would otherwise focus the\n // chip that is about to disappear.\n useLayoutEffect(() => {\n const removal = pending.current;\n if (!removal) return;\n const recent = removal.list === \"recent\" || removal.list === \"clearRecent\";\n const now = recent ? recentCount : appliedCount;\n if (now >= removal.from) return;\n pending.current = null;\n const host = recent ? recentHost.current : appliedHost.current;\n const selector = recent ? \"[data-search-recent-remove]\" : \"[data-search-applied-filter]\";\n const items = Array.from(host?.querySelectorAll<HTMLElement>(selector) ?? []);\n const index = removal.list.startsWith(\"clear\") ? -1 : resolveFocusAfterRemoval(removal.index, items.length);\n const fallback = recent ? input() : filterTrigger.current ?? input();\n (index >= 0 ? items[index] : fallback)?.focus();\n }, [recentCount, appliedCount, input]);\n return { recentHost, appliedHost, filterTrigger, schedule: (removal: Removal) => { pending.current = removal; } };\n}\n\nfunction SearchAnnouncement({ text }: { text: string }) {\n // Only the text changes the live region, so the same count is not re-read on every render.\n return <VisuallyHidden role=\"status\">{text}</VisuallyHidden>;\n}\n\nfunction SearchIdleSections({ recent, suggested, legacy, onCommit, hostRef, onRemove, onClearAll }: {\n recent: SearchRecentQueries | undefined; suggested: SearchSuggestedQueries | undefined; legacy: ReactNode;\n onCommit(query: string): void; hostRef: RefObject<HTMLDivElement | null>;\n onRemove(query: string, index: number): void; onClearAll(): void;\n}) {\n const visible = recent?.items.slice(0, Math.max(0, recent.maxVisible ?? searchScreenRecipe.recentVisible)) ?? [];\n // Without the structured sections the legacy `recentSearches` slot renders exactly as before 2026-10-06.\n if (!visible.length && !suggested?.items.length) return <>{legacy}</>;\n return <Stack gap=\"xl\">\n {legacy}\n {recent && visible.length ? <Stack gap=\"sm\" ref={hostRef}>\n <Stack axis=\"inline\" justify=\"between\" align=\"center\" gap=\"sm\">\n <Heading level=\"level5\" semanticLevel={2}>{recent.title}</Heading>\n <Button tone=\"ghost\" size=\"small\" onClick={onClearAll}>{recent.clearAllLabel}</Button>\n </Stack>\n <Stack gap=\"xxs\">{visible.map((item, index) => <Stack key={item} axis=\"inline\" align=\"center\" gap=\"xxs\">\n <ListRow density=\"compact\" leading={recent.icon} title={item} onClick={() => onCommit(item)} layoutStyle={{ flex: 1, minWidth: 0 }} />\n <IconButton data-search-recent-remove=\"\" label={recent.removeLabel(item)} tone=\"ghost\" onClick={() => onRemove(item, index)}>{recent.removeIcon ?? \"×\"}</IconButton>\n </Stack>)}</Stack>\n </Stack> : null}\n {suggested?.items.length ? <SearchSuggestedChips suggested={suggested} onCommit={onCommit} /> : null}\n </Stack>;\n}\n\nfunction SearchSuggestedChips({ suggested, onCommit }: { suggested: SearchSuggestedQueries; onCommit(query: string): void }) {\n return <Stack gap=\"sm\">\n <Heading level=\"level5\" semanticLevel={2}>{suggested.title}</Heading>\n <Stack axis=\"inline\" wrap gap=\"xs\">{suggested.items.map(item => <Chip key={item} label={item} onPress={() => onCommit(item)} />)}</Stack>\n </Stack>;\n}\n\nfunction SearchSuggestionList({ query, suggestions, onCommit }: { query: string; suggestions: SearchSuggestions; onCommit(query: string): void }) {\n const typed = query.trim();\n const items = suggestions.items.slice(0, Math.max(0, suggestions.maxVisible ?? searchScreenRecipe.suggestionVisible));\n return <Stack gap=\"xxs\">\n <ListRow density=\"compact\" leading={suggestions.icon} title={suggestions.commitLabel(typed)} onClick={() => onCommit(typed)} />\n {items.map(item => <ListRow key={item.query} density=\"compact\" leading={suggestions.icon} title={<Highlighted text={item.query} match={item.match} />} onClick={() => onCommit(item.query)} />)}\n </Stack>;\n}\n\nfunction SearchResultsHeader({ summary, applied, cause, appliedHost, onRemove, onClearAll, onSortChange }: {\n summary: SearchResultSummary | undefined; applied: SearchAppliedFilters | undefined; cause: SearchEmptyCause;\n appliedHost: RefObject<HTMLDivElement | null>; onRemove(key: string, index: number): void; onClearAll(): void; onSortChange(id: string): void;\n}) {\n const sort = summary?.sort;\n const showCount = summary && cause === \"none\";\n if (!summary?.notice && !showCount && !applied?.items.length) return null;\n return <Stack gap=\"sm\">\n {summary?.notice}\n {showCount ? <Stack axis=\"inline\" justify=\"between\" align=\"center\" gap=\"sm\" wrap>\n {summary.count === null ? <Skeleton shape=\"text\" width=\"30%\" /> : <Text tone=\"muted\">{summary.countLabel(summary.count)}</Text>}\n {sort ? <Menu label={sort.label} align=\"end\" selectionMode=\"single\" value={sort.value} onValueChange={onSortChange}\n items={sort.options.map(option => ({ id: option.id, label: option.label }))}\n trigger={<Button size=\"small\" tone=\"ghost\" {...(sort.icon === undefined ? {} : { trailing: sort.icon })}>{sort.triggerLabel}</Button>} /> : null}\n </Stack> : null}\n {applied?.items.length ? <Stack ref={appliedHost} axis=\"inline\" wrap gap=\"xs\" align=\"center\">\n {applied.items.map((item, index) => <Chip key={item.key} data-search-applied-filter=\"\" label={item.label} aria-label={applied.removeLabel(item.label)}\n trailing={applied.removeIcon ?? <span aria-hidden=\"true\">×</span>} onPress={() => onRemove(item.key, index)} />)}\n <Button tone=\"ghost\" size=\"small\" onClick={onClearAll}>{applied.clearAllLabel}</Button>\n </Stack> : null}\n </Stack>;\n}\n\nfunction SearchResultsBody({ summary, applied, suggested, cause, onCommit, onClearAll, children }: {\n summary: SearchResultSummary | undefined; applied: SearchAppliedFilters | undefined; suggested: SearchSuggestedQueries | undefined;\n cause: SearchEmptyCause; onCommit(query: string): void; onClearAll(): void; children: ReactNode;\n}) {\n // Loading keeps each row's own height (ListRow `loading`), so the list does not jump when results land.\n if (summary?.count === null) return <Stack gap=\"xxs\">{Array.from({ length: searchScreenRecipe.loadingRows }, (_, index) =>\n <ListRow key={index} loading title=\"\" description=\"\" {...(index === 0 ? { loadingLabel: summary.loadingLabel } : {})} />)}</Stack>;\n if (cause === \"none\" || !summary?.empty) return <>{children}</>;\n return <Stack gap=\"lg\">\n <EmptyState density=\"compact\" title={summary.empty.title} {...(summary.empty.description === undefined ? {} : { description: summary.empty.description })}\n {...(cause === \"filters\" && applied ? { action: <Button tone=\"secondary\" onClick={onClearAll}>{applied.clearAllLabel}</Button> } : {})} />\n {cause === \"query\" && suggested?.items.length ? <SearchSuggestedChips suggested={suggested} onCommit={onCommit} /> : null}\n {children}\n </Stack>;\n}\n\nfunction SearchFilterTrigger<F>({ sheet, appliedCount, triggerRef }: { sheet: SearchFilterSheet<F>; appliedCount: number; triggerRef: RefObject<HTMLButtonElement | null> }) {\n const trigger = sheet.trigger!;\n return <Chip ref={triggerRef} label={trigger.label(appliedCount)} aria-label={trigger.accessibilityLabel(appliedCount)} aria-haspopup=\"dialog\"\n {...(trigger.icon === undefined ? {} : { leading: trigger.icon })} onPress={() => sheet.onOpenChange(true)} />;\n}\n\n/** Wide windows get a side sheet so results stay visible beside the conditions (expanded = 960+). */\nfunction sidePlacement() {\n return typeof window !== \"undefined\" && [\"expanded\", \"wide\"].includes(resolveWindowClass(window.innerWidth));\n}\n\nfunction SearchFilterSheetView<F>({ sheet }: { sheet: SearchFilterSheet<F> }) {\n // The draft lives only while the sheet is open: seeded from `value` on open, dropped on every close,\n // so closing (×, scrim, back, Escape) never leaks half-edited conditions into the next opening.\n const [session, setSession] = useState<{ draft: F; side: boolean } | null>(null);\n if (sheet.open && !session) setSession({ draft: sheet.value, side: sidePlacement() });\n if (!sheet.open && session) setSession(null);\n const draft = session ? session.draft : sheet.value;\n const setDraft = (next: F) => setSession(current => current ? { ...current, draft: next } : current);\n const count = sheet.count(draft);\n // Reset sits left of the primary action on Web (sheet.md [secondary][primary]) and is always present,\n // disabled at the default, so the primary action does not jump when the draft changes.\n const footer = <Stack axis=\"inline\" justify=\"end\" gap=\"sm\" wrap>\n <Button tone=\"secondary\" disabled={sheet.isDefault(draft)} onClick={() => setDraft(sheet.reset(draft))}>{sheet.labels.reset}</Button>\n <Button disabled={count === 0} onClick={() => { sheet.onApply(draft); sheet.onOpenChange(false); }}>{sheet.labels.apply(count)}</Button>\n </Stack>;\n return <Sheet open={sheet.open} onOpenChange={open => sheet.onOpenChange(open)} title={sheet.title} closeLabel={sheet.labels.close}\n placement={session?.side ? \"end\" : \"bottom\"} size={sheet.size ?? \"large\"} footer={footer}>\n {sheet.renderContent(draft, setDraft)}\n </Sheet>;\n}\n\ntype SearchInputSlot = {queryField: ReactNode; queryClearLabel?: string} | {queryField?: never; queryClearLabel: string};\n/** `committedQuery` turns on two-step search; every commit (Enter, suggestion, recent, suggested query) then goes through `onSubmit`. */\n/** One name for the default field's progress on both platforms (Web SearchField `loading`, Native `busy`+`busyLabel`). */\ntype SearchProgressSlot = {searching?: never; searchingLabel?: never} | {searching: boolean; searchingLabel: string};\ntype SearchCommitSlot = {committedQuery?: never; onSubmit?: (query:string)=>void} | {committedQuery: string; onSubmit:(query:string)=>void};\nexport type SearchScreenProps<F = unknown> = Base & SearchInputSlot & SearchCommitSlot & SearchProgressSlot & {query:string;queryLabel:string;onQueryChange(value:string):void;onSearch(query:string,context:{signal:AbortSignal}):void;debounceMs?:number;filters?:ReactNode;recentSearches?:ReactNode;children:ReactNode;\n /** `scroll` keeps `filters` on one horizontally scrolling line that bleeds to the screen edges. */\n filtersOverflow?:\"wrap\"|\"scroll\";\n /** `hidden` drops the visible label (the field keeps `queryLabel` as its accessible name and placeholder). */\n queryLabelVisibility?:\"visible\"|\"hidden\";\n recentQueries?:SearchRecentQueries;suggestedQueries?:SearchSuggestedQueries;suggestions?:SearchSuggestions;\n resultSummary?:SearchResultSummary;appliedFilters?:SearchAppliedFilters;filterSheet?:SearchFilterSheet<F>};\n/** Abort is supplied to the host request; the host must ignore aborted responses before committing results. */\nexport function SearchScreen<F = unknown>({query,queryLabel,queryField,queryClearLabel,onQueryChange,onSearch,debounceMs=300,filters,recentSearches,children,onSubmit,committedQuery,filtersOverflow=\"wrap\",queryLabelVisibility=\"visible\",searching,searchingLabel,recentQueries,suggestedQueries,suggestions,resultSummary,appliedFilters,filterSheet,...screen}:SearchScreenProps<F>){\n // The host owns localized copy. A custom queryField owns its own clear affordance.\n if (queryField == null && !queryClearLabel?.trim()) throw new TypeError(\"SearchScreen requires a localized queryClearLabel for its default search field\");\n const callback=useRef(onSearch);callback.current=onSearch;\n useEffect(()=>{const controller=new AbortController();const timer=setTimeout(()=>callback.current(query,{signal:controller.signal}),Math.max(0,debounceMs));return()=>{clearTimeout(timer);controller.abort();};},[query,debounceMs]);\n const fieldHost=useRef<HTMLDivElement>(null),bodyHost=useRef<HTMLDivElement>(null);\n const input=useCallback(()=>fieldHost.current?.querySelector<HTMLElement>(\"input\"),[]);\n const focus=useSearchRemovalFocus(recentQueries?.items.length??0,appliedFilters?.items.length??0,input);\n // Every commit path funnels through here so \"only committed searches are recorded\" holds at the API:\n // onSearch (debounced typing) never reaches onSubmit. Without onSubmit (one-step search) a pick only fills the field.\n const commit=(value:string)=>{const next=resolveSearchCommit(value);if(next===null)return;if(next!==query)onQueryChange(next);onSubmit?.(next);};\n // onSubmit separates \"typing\" from \"committed\" (recent-search writes, suggestion → results) without making\n // products rebuild the default field through queryField (2026-10-06 search redesign, usage/components/search-screen.md).\n // Enter while an IME is composing (Korean/Japanese) only confirms the syllable, so it must not commit.\n // The pending debounce is left alone: products decide whether submit should also flush a request.\n const submitProps=onSubmit?{enterKeyHint:\"search\" as const,onKeyDown:(event:KeyboardEvent<HTMLInputElement>)=>{if(event.key!==\"Enter\"||event.nativeEvent.isComposing||event.keyCode===229)return;commit(event.currentTarget.value);}}:{};\n // Reference services hide the label behind a placeholder; the placeholder names the search target (Apple HIG\n // search fields) and aria-label keeps the accessible name, so hiding never leaves an unnamed field.\n const labelProps=queryLabelVisibility===\"hidden\"?{\"aria-label\":queryLabel,placeholder:queryLabel}:{label:queryLabel};\n const phase=resolveSearchScreenPhase(query,committedQuery);\n const appliedCount=appliedFilters?.items.length??0;\n const cause=phase===\"results\"&&resultSummary?resolveSearchEmptyCause(resultSummary.count,appliedCount):\"none\";\n // Two-step search shows the rail only beside results (typing keeps the pinned area short), and a\n // query-caused zero hides it because no filter can fix that; a filter-caused zero keeps it to undo the filter.\n const showRail=(committedQuery===undefined||phase===\"results\")&&cause!==\"query\";\n const trigger=filterSheet?.trigger?<SearchFilterTrigger sheet={filterSheet} appliedCount={appliedCount} triggerRef={focus.filterTrigger}/>:null;\n const rail=!showRail?null:trigger&&filters!=null?<Stack axis=\"inline\" gap=\"xs\" wrap={filtersOverflow===\"wrap\"}>{trigger}{filters}</Stack>:trigger??filters;\n // Wrapping chips grow the pinned area line by line at large text; the scroll rail caps it at one row.\n // A product-owned CSS/ScrollView rail would re-derive bleed, scroll padding and RTL per app.\n const filterSlot=rail!=null&&filtersOverflow===\"scroll\"?<div className=\"hjm-search-screen__filters\" data-overflow=\"scroll\">{rail}</div>:rail;\n const visibleSuggestions=suggestions?.items.slice(0,Math.max(0,suggestions.maxVisible??searchScreenRecipe.suggestionVisible)).length??0;\n const countAnnouncement=phase===\"typing\"&&suggestions?suggestions.countLabel(visibleSuggestions):phase===\"results\"&&resultSummary&&resultSummary.count!==null?resultSummary.countLabel(resultSummary.count):\"\";\n // 2026-10-06 utilverse adoption: products swapped the whole field just to show progress. The Web spinner is\n // aria-hidden, so the localized searching label goes through the same status region as the counts.\n const announcement=searching&&searchingLabel?searchingLabel:countAnnouncement;\n const removeRecent=(item:string,index:number)=>{focus.schedule({list:\"recent\",index,from:recentQueries!.items.length});recentQueries!.onRemove(item);};\n const clearRecent=()=>{focus.schedule({list:\"clearRecent\",index:-1,from:recentQueries!.items.length});recentQueries!.onClearAll();};\n const removeApplied=(key:string,index:number)=>{focus.schedule({list:\"applied\",index,from:appliedCount});appliedFilters!.onRemove(key);};\n const clearApplied=()=>{focus.schedule({list:\"clearApplied\",index:-1,from:appliedCount});appliedFilters!.onClearAll();};\n // A new order starts at the top; the previous offset would land mid-list in unrelated results.\n const changeSort=(id:string)=>{resultSummary?.sort?.onChange(id);bodyHost.current?.closest(\".hjm-screen__body\")?.scrollTo?.({top:0});};\n const idle=<SearchIdleSections recent={recentQueries} suggested={suggestedQueries} legacy={recentSearches} onCommit={commit} hostRef={focus.recentHost} onRemove={removeRecent} onClearAll={clearRecent}/>;\n const body=phase===\"idle\"?<>{idle}{committedQuery===undefined?children:null}</>\n :phase===\"typing\"?(suggestions?<SearchSuggestionList query={query} suggestions={suggestions} onCommit={commit}/>:null)\n :<><SearchResultsHeader summary={resultSummary} applied={appliedFilters} cause={cause} appliedHost={focus.appliedHost} onRemove={removeApplied} onClearAll={clearApplied} onSortChange={changeSort}/>\n <SearchResultsBody summary={resultSummary} applied={appliedFilters} suggested={suggestedQueries} cause={cause} onCommit={commit} onClearAll={clearApplied}>{children}</SearchResultsBody></>;\n return <><ScreenLayout {...screen} notice={<Stack gap=\"sm\" ref={fieldHost}>{queryField ?? <SearchField {...labelProps} clearLabel={queryClearLabel!} value={query} onValueChange={onQueryChange} loading={searching??false} {...submitProps}/>}{filterSlot}{screen.notice}</Stack>}><Stack gap=\"lg\" ref={bodyHost}>{suggestions||resultSummary||searchingLabel?<SearchAnnouncement text={announcement}/>:null}{body}</Stack></ScreenLayout>\n {filterSheet?<SearchFilterSheetView sheet={filterSheet}/>:null}</>;\n}\n\nexport type PermissionScreenProps = Base & {status:PermissionScreenStatus;illustration?:ReactNode;explanation:ReactNode;request:ScreenFlowAction;settings:ScreenFlowAction;continueAction:ScreenFlowAction;skip?:ScreenFlowAction};\nexport function PermissionScreen({status,illustration,explanation,request,settings,continueAction,skip,...screen}:PermissionScreenProps){const kind=resolvePermissionAction(status);const primary=kind===\"request\"?request:kind===\"settings\"?settings:kind===\"continue\"?continueAction:null;return <ScreenLayout {...screen} footer={<Stack gap=\"sm\">{primary?<Action action={primary}/>:null}{skip?<Action action={skip} secondary/>:null}</Stack>}><Stack gap=\"xl\" align=\"center\">{illustration}{explanation}</Stack></ScreenLayout>;}\n\nexport type OnboardingStep = {id:string;title:string;description:string;content:ReactNode};\nexport type OnboardingScreenProps = {steps:readonly OnboardingStep[];index:number;onIndexChange(index:number):void;nextLabel:string;backLabel:string;complete:ScreenFlowAction;skip?:ScreenFlowAction;progressLabel(index:number,total:number):string;layoutStyle?:ScreenLayoutProps[\"layoutStyle\"]};\nexport function OnboardingScreen({steps,index,onIndexChange,nextLabel,backLabel,complete,skip,progressLabel,layoutStyle}:OnboardingScreenProps){const position=resolveOnboardingStep(steps.length,index);const step=steps[index]!;return <ScreenLayout {...(layoutStyle===undefined?{}:{layoutStyle})} title={step.title} description={step.description} actions={skip?<Action action={skip} secondary/>:null} notice={<Text variant=\"caption\" tone=\"muted\">{progressLabel(index+1,steps.length)}</Text>} footer={<Stack gap=\"sm\"><Action action={position.last?complete:{label:nextLabel,onAction:()=>onIndexChange(index+1)}}/>{!position.first?<Action action={{label:backLabel,onAction:()=>onIndexChange(index-1)}} secondary/>:null}</Stack>}>{step.content}</ScreenLayout>;}\n\nexport type CommentThreadItem = Readonly<{id:string;parentId:string|null;author:string;body:ReactNode;bodyText?:string;timeLabel:string;likeCountLabel:string;avatar?:ReactNode;likeIcon:ReactNode;likeLabel:string;likeAction?:ReactNode;actions?:ReactNode;canReply?:boolean;replyDisabled?:boolean}>;\nexport type CommentThreadScreenProps = Base & {items:readonly CommentThreadItem[];expandedIds:readonly string[];onExpandedChange(id:string):void;onLike(id:string):void;onReply(id:string):void;replyLabel:string;repliesLabel(count:number,expanded:boolean):string;composer?:ReactNode;threadFooter?:ReactNode};\n/** Controlled thread: server ordering, permission checks and receipt-based draft clearing belong to the product. */\nexport function CommentThreadScreen({items,expandedIds,onExpandedChange,onLike,onReply,replyLabel,repliesLabel,composer,threadFooter,...screen}:CommentThreadScreenProps){\n validateCommentThread(items);\n // The supplied reference joins the author to the first body line and reserves the right edge\n // for one reaction target. Keep legacy rich bodies intact; bodyText opts into that compact flow.\n const row=(item:CommentThreadItem)=><Stack key={item.id} axis=\"inline\" align=\"start\" gap=\"sm\">{item.avatar}<Stack gap=\"xxs\" layoutStyle={{flex:1,minWidth:0}}>\n {item.bodyText!==undefined?<Text><Text emphasis=\"strong\">{item.author}</Text>{\" \"}{item.bodyText}</Text>:<Stack axis=\"inline\" gap=\"sm\" align=\"center\" layoutStyle={{flexWrap:\"wrap\"}}><Text emphasis=\"strong\">{item.author}</Text><Text variant=\"caption\" tone=\"muted\">{item.timeLabel}</Text></Stack>}\n {item.body}<Stack axis=\"inline\" gap=\"sm\" align=\"center\" layoutStyle={{flexWrap:\"wrap\"}}>{item.bodyText!==undefined&&item.timeLabel?<Text variant=\"caption\" tone=\"muted\">{item.timeLabel}</Text>:null}{item.likeCountLabel?<Text variant=\"caption\" tone=\"muted\">{item.likeCountLabel}</Text>:null}{(item.canReply??item.parentId===null)?<Button size=\"small\" tone=\"ghost\" disabled={item.replyDisabled??false} onClick={()=>onReply(item.id)}>{replyLabel}</Button>:null}</Stack>{item.actions}</Stack>{item.likeAction!==undefined?item.likeAction:<IconButton label={item.likeLabel} tone=\"ghost\" onClick={()=>onLike(item.id)}>{item.likeIcon}</IconButton>}</Stack>;\n return <ScreenLayout {...screen} footer={!screen.state||screen.state.kind===\"ready\"||screen.state.kind===\"empty\"?composer:null}><Stack gap=\"lg\">{items.filter(item=>item.parentId===null).map(item=>{const replies=items.filter(reply=>reply.parentId===item.id);return <Stack key={item.id} gap=\"xs\">{row(item)}{replies.length?<Stack gap=\"md\" layoutStyle={{marginInlineStart:screenPatternRecipe.sectionGap}}><Button layoutStyle={{alignSelf:\"flex-start\"}} tone=\"ghost\" size=\"small\" aria-expanded={expandedIds.includes(item.id)} onClick={()=>onExpandedChange(item.id)}>{repliesLabel(replies.length,expandedIds.includes(item.id))}</Button>{expandedIds.includes(item.id)?replies.map(row):null}</Stack>:null}</Stack>;})}{threadFooter}</Stack></ScreenLayout>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"screen-flows.js","sourceRoot":"","sources":["../src/screen-flows.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useLayoutEffect, useRef, useState, type CSSProperties, type KeyboardEvent, type ReactNode, type RefObject } from \"react\";\nimport { ScreenLayout, type ScreenLayoutProps } from \"./screens.js\";\nimport { Button, IconButton } from \"./actions.js\";\nimport { Stack, Text, Grid, VisuallyHidden } from \"./layout.js\";\nimport { SearchField } from \"./forms.js\";\nimport { Chip, RadioGroup } from \"./selection.js\";\nimport { AlertDialog, Menu, Sheet, type SheetProps } from \"./overlays.js\";\nimport { UploadItem } from \"./upload-item.js\";\nimport { type UploadItemDescriptor, type UploadItemLabels } from \"@hjmds/design-contracts/components/upload-item\";\nimport { type AlertDialogRequest } from \"@hjmds/design-contracts/components/alert-dialog\";\nimport { validateCommentThread, resolvePermissionAction, resolveOnboardingStep, resolveSearchCommit, resolveSearchEmptyCause, resolveSearchScreenPhase, resolveFocusAfterRemoval, screenPatternRecipe, searchScreenRecipe, type SearchEmptyCause, type PermissionScreenStatus, type PhotoSource, type PhotoSourceLabels } from \"@hjmds/design-contracts/screen-patterns\";\nimport { resolveWindowClass } from \"@hjmds/design-contracts/responsive\";\nimport { containerRecipe, type ContainerGutter } from \"@hjmds/design-contracts/components/container\";\nimport { ListRow } from \"./display.js\";\nimport { Heading } from \"./heading.js\";\nimport { EmptyState, Skeleton } from \"./feedback.js\";\n\n/** Copy, pending state and mutations are controlled by the consuming product. */\nexport type ScreenFlowAction = Readonly<{label:string; onAction():void; disabled?:boolean; pending?:boolean}>;\nfunction Action({action,secondary=false}:{action:ScreenFlowAction;secondary?:boolean}){return <Button tone={secondary?\"ghost\":\"primary\"} disabled={!!(action.disabled||action.pending)} loading={action.pending??false} onClick={action.onAction}>{action.label}</Button>;}\ntype Base = Omit<ScreenLayoutProps,\"children\"|\"footer\">;\n\nexport type ListDetailScreenProps = Base & { list:ReactNode; detail?:{title:string;content:ReactNode}; back:ScreenFlowAction; refresh?:ScreenFlowAction; loadMore?:ScreenFlowAction };\n/** Keep the list mounted so input and scroll survive a detail visit. Routers may instead restore host scroll state. */\nexport function ListDetailScreen({list,detail,back,refresh,loadMore,layoutStyle,...screen}:ListDetailScreenProps){\n const open=!!detail;\n // Seed with the first render: a deep link that mounts with detail open is not a user transition,\n // so it must not pull focus from wherever the host left it (address bar, router focus target).\n const listHost=useRef<HTMLDivElement>(null),detailHost=useRef<HTMLDivElement>(null),returnFocus=useRef<HTMLElement|null>(null),wasOpen=useRef(open);\n // Hidden lists preserve scroll but drop browser focus; retain the trigger and move into the\n // detail once, then restore it (or the list body if the item was removed). See usage/ListDetailScreen.\n useLayoutEffect(()=>{\n if(open&&!wasOpen.current)detailHost.current?.querySelector<HTMLElement>(\"button\")?.focus({preventScroll:true});\n if(!open&&wasOpen.current){const target=returnFocus.current; if(target?.isConnected&&!target.closest(\"[hidden]\"))target.focus({preventScroll:true});else listHost.current?.querySelector<HTMLElement>('[tabindex=\"0\"]')?.focus({preventScroll:true});}\n wasOpen.current=open;\n },[open]);\n // layoutStyle places the outer host that owns both panes, not the inner list ScreenLayout.\n return <div style={{height:\"100%\",...layoutStyle}}>\n <div ref={listHost} hidden={open} style={{height:\"100%\"}} onFocusCapture={event=>{returnFocus.current=event.target as HTMLElement;}}><ScreenLayout {...screen} actions={refresh?<Action action={refresh} secondary/>:screen.actions} footer={loadMore?<Action action={loadMore} secondary/>:null}>{list}</ScreenLayout></div>\n {detail?<div ref={detailHost} style={{height:\"100%\"}}><ScreenLayout title={detail.title} leading={<Action action={back} secondary/>}>{detail.content}</ScreenLayout></div>:null}\n </div>;\n}\n\nexport type EditorScreenProps = Base & {children:ReactNode;submitPlacement?:\"header\"|\"footer\";dirty:boolean;submit:ScreenFlowAction;cancel:ScreenFlowAction;discard:Omit<Extract<AlertDialogRequest,{mode:\"confirm\"}>,\"onConfirm\"|\"fallbackErrorMessage\"> & {fallbackErrorMessage:string};draftStatus?:ReactNode};\nexport function EditorScreen({children,dirty,submitPlacement=\"footer\",submit,cancel,discard,draftStatus,...screen}:EditorScreenProps){\n const [confirm,setConfirm]=useState(false);\n return <><ScreenLayout {...screen} leading={<Action action={{...cancel,disabled:!!(cancel.disabled||submit.pending),onAction:()=>{if(dirty)setConfirm(true);else cancel.onAction();}}} secondary/>} actions={submitPlacement===\"header\"?<Action action={submit}/>:screen.actions} footer={submitPlacement===\"header\"?draftStatus:<Stack gap=\"sm\">{draftStatus}<Action action={submit}/></Stack>}>{children}</ScreenLayout><AlertDialog open={confirm} onOpenChange={setConfirm} request={{...discard,mode:\"confirm\",onConfirm:()=>cancel.onAction()}}/></>;\n}\n\nexport type ProfileScreenProps = Base & {summary:ReactNode;edit:ScreenFlowAction;children?:ReactNode;accountActions?:ReactNode};\nexport function ProfileScreen({summary,edit,children,accountActions,...screen}:ProfileScreenProps){return <ScreenLayout {...screen}><Stack gap=\"xl\"><Stack gap=\"md\">{summary}<Action action={edit} secondary/></Stack>{children}{accountActions}</Stack></ScreenLayout>;}\n\nexport type ModerationScreenProps = Base & {reasonPicker?:ReactNode;reasons:readonly {value:string;label:string}[];reason:string|null;onReasonChange(value:string):void;reasonLabel:string;children?:ReactNode;submit:ScreenFlowAction;block?:{action:ScreenFlowAction;confirmation:Extract<AlertDialogRequest,{mode:\"confirm\"}>}};\nexport function ModerationScreen({reasonPicker,reasons,reason,onReasonChange,reasonLabel,children,submit,block,...screen}:ModerationScreenProps){const [confirm,setConfirm]=useState(false);return <><ScreenLayout {...screen} footer={<Stack gap=\"sm\"><Action action={{...submit,disabled:submit.disabled||!!screen.state&&screen.state.kind!==\"ready\"||!reasons.some(item=>item.value===reason)}}/>{block?<Action action={{...block.action,onAction:()=>setConfirm(true)}} secondary/>:null}</Stack>}><Stack gap=\"lg\">{reasonPicker??(reasons.length?<RadioGroup accessibilityLabel={reasonLabel} orientation=\"vertical\" items={reasons} value={reason} onValueChange={value=>{if(value)onReasonChange(value);}}/>:null)}{children}</Stack></ScreenLayout>{block?<AlertDialog open={confirm} onOpenChange={setConfirm} request={block.confirmation}/>:null}</>;}\n\n\n/** Source choice only: permission, capture, decoding and draft persistence belong to the host. */\nexport type PhotoSourceSheetProps = Readonly<{\n open:boolean;onOpenChange(open:boolean):void;onSelect(source:PhotoSource):void;\n labels:PhotoSourceLabels;disabled?:boolean;cameraAvailable?:boolean;\n}>;\nexport function PhotoSourceSheet({open,onOpenChange,onSelect,labels,disabled=false,cameraAvailable=true}:PhotoSourceSheetProps){\n // File-input click must stay in the user's activation stack. Deferring until the\n // sheet animation ends can cause browsers to reject camera/album selection.\n const select=(source:PhotoSource)=>{if(disabled)return;onOpenChange(false);onSelect(source);};\n return <Sheet open={open} onOpenChange={onOpenChange} title={labels.title} closeLabel={labels.cancel}><Stack gap=\"sm\">\n <Button tone=\"secondary\" disabled={disabled} onClick={()=>select(\"library\")}>{labels.library}</Button>\n {cameraAvailable?<Button tone=\"secondary\" disabled={disabled} onClick={()=>select(\"camera\")}>{labels.camera}</Button>:null}\n </Stack></Sheet>;\n}\n\nexport type MediaSelectionItem = {descriptor:UploadItemDescriptor;preview?:ReactNode};\nexport type MediaSelectionScreenProps = Base & {library?:ReactNode;selectionSummary?:ReactNode;items:readonly MediaSelectionItem[];add:ScreenFlowAction;done:ScreenFlowAction;labels:UploadItemLabels;actionLabels:{remove:string;moveUp:string;moveDown:string};removeLabel(item:MediaSelectionItem):string;moveUpLabel(item:MediaSelectionItem):string;moveDownLabel(item:MediaSelectionItem):string;onRemove(id:string):void;onMove(id:string,direction:-1|1):void;onRetry(id:string):void;onCancel(id:string):void};\n/** A photo is the primary content; upload status stays below it instead of replacing the thumbnail. */\nexport function MediaSelectionScreen({library,selectionSummary,items,add,done,labels,actionLabels,removeLabel,moveUpLabel,moveDownLabel,onRemove,onMove,onRetry,onCancel,...screen}:MediaSelectionScreenProps){return <ScreenLayout {...screen} actions={<Action action={add} secondary/>} footer={<Stack gap=\"sm\">{selectionSummary}<Action action={done}/></Stack>}>{library??<Grid columns={{compact:2,expanded:3}} gap={{compact:\"md\"}}>{items.map((item,index)=><Stack key={item.descriptor.id} gap=\"xs\">{item.preview}<UploadItem descriptor={item.descriptor} labels={labels} onRetry={onRetry} onCancel={onCancel}/><Stack axis=\"inline\" gap=\"xxs\" layoutStyle={{flexWrap:\"wrap\"}}><Button aria-label={moveUpLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===0} onClick={()=>onMove(item.descriptor.id,-1)}>{actionLabels.moveUp}</Button><Button aria-label={moveDownLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===items.length-1} onClick={()=>onMove(item.descriptor.id,1)}>{actionLabels.moveDown}</Button><Button aria-label={removeLabel(item)} size=\"small\" tone=\"ghost\" onClick={()=>onRemove(item.descriptor.id)}>{actionLabels.remove}</Button></Stack></Stack>)}</Grid>}</ScreenLayout>;}\n\n\n/*\n * SearchScreen phase sections (2026-10-06, user-delegated decision to lift the search preview logic into\n * the public API; design: packages/design-contracts/docs/screen-patterns.md, SearchScreen two-step section).\n * Products supply data, copy, icons and requests; HJM owns placement, commit routing, focus after removal\n * and count announcements. Before this, every product had to rebuild these from Showcase preview code,\n * which AGENTS.md rules out as an adoption path. Kept in this file, not an internal module: a new module\n * edge would push ./screen-flows past its reviewed module-count budget (scripts/check-renderer-budgets.mjs).\n */\n\n/** Recent searches before typing. Rows commit; the trailing button removes one. */\nexport type SearchRecentQueries = Readonly<{\n items: readonly string[];\n title: string;\n clearAllLabel: string;\n onClearAll(): void;\n removeLabel(query: string): string;\n onRemove(query: string): void;\n /** Decorative leading glyph (for example a history icon). */\n icon?: ReactNode;\n /** Glyph inside the remove button; defaults to \"×\". */\n removeIcon?: ReactNode;\n /** Rows shown; default `searchScreenRecipe.recentVisible` (5). */\n maxVisible?: number;\n}>;\n/** Product-chosen queries shown before typing and after a query-caused zero result. */\nexport type SearchSuggestedQueries = Readonly<{ title: string; items: readonly string[] }>;\n/** A typed-ahead completion. `match` bolds the matched range (weight, not color, so it survives dark mode). */\nexport type SearchSuggestion = Readonly<{ query: string; match?: Readonly<{ start: number; end: number }> }>;\nexport type SearchSuggestions = Readonly<{\n items: readonly SearchSuggestion[];\n /** First row that commits the typed text as is, e.g. \"Search ‘q’\". */\n commitLabel(query: string): string;\n /** Polite announcement of the suggestion count. */\n countLabel(count: number): string;\n icon?: ReactNode;\n /** Rows shown under the commit row; default `searchScreenRecipe.suggestionVisible` (6). */\n maxVisible?: number;\n}>;\nexport type SearchSortOption = Readonly<{ id: string; label: string }>;\nexport type SearchSort = Readonly<{\n /** Accessible name of the sort menu. */\n label: string;\n /** Visible trigger text, usually the current option (\"Sort: Newest\"). */\n triggerLabel: string;\n value: string;\n options: readonly SearchSortOption[];\n onChange(id: string): void;\n /** Trailing glyph of the trigger (for example a chevron). */\n icon?: ReactNode;\n}>;\nexport type SearchResultSummary = Readonly<{\n /** Result total for the committed query; `null` while it loads (skeleton rows replace `children`). */\n count: number | null;\n countLabel(count: number): string;\n /** Announced while loading. */\n loadingLabel: string;\n sort?: SearchSort;\n /** Above the count, e.g. a retained-results error Notice with retry. */\n notice?: ReactNode;\n /** Zero-result copy. Filters as the cause add \"clear all\"; the query as the cause adds suggested queries. */\n empty?: Readonly<{ title: string; description?: string }>;\n}>;\nexport type SearchAppliedFilter = Readonly<{ key: string; label: string }>;\nexport type SearchAppliedFilters = Readonly<{\n items: readonly SearchAppliedFilter[];\n removeLabel(label: string): string;\n onRemove(key: string): void;\n clearAllLabel: string;\n onClearAll(): void;\n removeIcon?: ReactNode;\n}>;\nexport type SearchFilterSheetLabels = Readonly<{\n close: string;\n reset: string;\n /** Primary action text for a live draft count, e.g. \"Show 12 results\"; `null` while counting. */\n apply(count: number | null): string;\n}>;\n/**\n * Draft/applied filter sheet. HJM copies `value` into a draft when the sheet opens, discards the draft\n * on any dismissal, and calls `onApply(draft)` only from the primary action.\n */\nexport type SearchFilterSheet<F> = Readonly<{\n open: boolean;\n onOpenChange(open: boolean): void;\n /** Sheet title; products that open one section from a facet chip pass that section's name. */\n title: string;\n /** Applied filters. */\n value: F;\n onApply(next: F): void;\n /** Live count for a draft. Return `null` while an async count is pending; `0` disables apply. */\n count(draft: F): number | null;\n /** Draft after \"reset\" (the open section, or everything). */\n reset(draft: F): F;\n /** Disables \"reset\" when the draft already equals its reset value. */\n isDefault(draft: F): boolean;\n renderContent(draft: F, setDraft: (next: F) => void): ReactNode;\n labels: SearchFilterSheetLabels;\n /** Default `large`; section sheets usually pass `auto`. */\n size?: SheetProps[\"size\"];\n /** First item of the filter rail that opens the sheet, named with the applied count. */\n trigger?: Readonly<{ label(appliedCount: number): string; accessibilityLabel(appliedCount: number): string; icon?: ReactNode }>;\n}>;\n\ntype Removal = { list: \"recent\" | \"applied\" | \"clearRecent\" | \"clearApplied\"; index: number; from: number };\n\nfunction Highlighted({ text, match }: { text: string; match: SearchSuggestion[\"match\"] }): ReactNode {\n if (!match || match.start < 0 || match.end <= match.start || match.end > text.length) return text;\n return <>{text.slice(0, match.start)}<Text as=\"span\" emphasis=\"strong\">{text.slice(match.start, match.end)}</Text>{text.slice(match.end)}</>;\n}\n\n/** Focus targets after removing a chip or row; returns refs and a scheduler the screen calls from its handlers. */\nfunction useSearchRemovalFocus(recentCount: number, appliedCount: number, input: () => HTMLElement | null | undefined) {\n const pending = useRef<Removal | null>(null);\n const recentHost = useRef<HTMLDivElement>(null);\n const appliedHost = useRef<HTMLDivElement>(null);\n const filterTrigger = useRef<HTMLButtonElement>(null);\n // Wait for the product to actually shrink the list: an async onRemove would otherwise focus the\n // chip that is about to disappear.\n useLayoutEffect(() => {\n const removal = pending.current;\n if (!removal) return;\n const recent = removal.list === \"recent\" || removal.list === \"clearRecent\";\n const now = recent ? recentCount : appliedCount;\n if (now >= removal.from) return;\n pending.current = null;\n const host = recent ? recentHost.current : appliedHost.current;\n const selector = recent ? \"[data-search-recent-remove]\" : \"[data-search-applied-filter]\";\n const items = Array.from(host?.querySelectorAll<HTMLElement>(selector) ?? []);\n const index = removal.list.startsWith(\"clear\") ? -1 : resolveFocusAfterRemoval(removal.index, items.length);\n const fallback = recent ? input() : filterTrigger.current ?? input();\n (index >= 0 ? items[index] : fallback)?.focus();\n }, [recentCount, appliedCount, input]);\n return { recentHost, appliedHost, filterTrigger, schedule: (removal: Removal) => { pending.current = removal; } };\n}\n\nfunction SearchAnnouncement({ text }: { text: string }) {\n // Only the text changes the live region, so the same count is not re-read on every render.\n return <VisuallyHidden role=\"status\">{text}</VisuallyHidden>;\n}\n\nfunction SearchIdleSections({ recent, suggested, legacy, onCommit, hostRef, onRemove, onClearAll }: {\n recent: SearchRecentQueries | undefined; suggested: SearchSuggestedQueries | undefined; legacy: ReactNode;\n onCommit(query: string): void; hostRef: RefObject<HTMLDivElement | null>;\n onRemove(query: string, index: number): void; onClearAll(): void;\n}) {\n const visible = recent?.items.slice(0, Math.max(0, recent.maxVisible ?? searchScreenRecipe.recentVisible)) ?? [];\n // Without the structured sections the legacy `recentSearches` slot renders exactly as before 2026-10-06.\n if (!visible.length && !suggested?.items.length) return <>{legacy}</>;\n return <Stack gap=\"xl\">\n {legacy}\n {recent && visible.length ? <Stack gap=\"sm\" ref={hostRef}>\n <Stack axis=\"inline\" justify=\"between\" align=\"center\" gap=\"sm\">\n <Heading level=\"level5\" semanticLevel={2}>{recent.title}</Heading>\n <Button tone=\"ghost\" size=\"small\" onClick={onClearAll}>{recent.clearAllLabel}</Button>\n </Stack>\n <Stack gap=\"xxs\">{visible.map((item, index) => <Stack key={item} axis=\"inline\" align=\"center\" gap=\"xxs\">\n <ListRow density=\"compact\" leading={recent.icon} title={item} onClick={() => onCommit(item)} layoutStyle={{ flex: 1, minWidth: 0 }} />\n <IconButton data-search-recent-remove=\"\" label={recent.removeLabel(item)} tone=\"ghost\" onClick={() => onRemove(item, index)}>{recent.removeIcon ?? \"×\"}</IconButton>\n </Stack>)}</Stack>\n </Stack> : null}\n {suggested?.items.length ? <SearchSuggestedChips suggested={suggested} onCommit={onCommit} /> : null}\n </Stack>;\n}\n\nfunction SearchSuggestedChips({ suggested, onCommit }: { suggested: SearchSuggestedQueries; onCommit(query: string): void }) {\n return <Stack gap=\"sm\">\n <Heading level=\"level5\" semanticLevel={2}>{suggested.title}</Heading>\n <Stack axis=\"inline\" wrap gap=\"xs\">{suggested.items.map(item => <Chip key={item} label={item} onPress={() => onCommit(item)} />)}</Stack>\n </Stack>;\n}\n\nfunction SearchSuggestionList({ query, suggestions, onCommit }: { query: string; suggestions: SearchSuggestions; onCommit(query: string): void }) {\n const typed = query.trim();\n const items = suggestions.items.slice(0, Math.max(0, suggestions.maxVisible ?? searchScreenRecipe.suggestionVisible));\n return <Stack gap=\"xxs\">\n <ListRow density=\"compact\" leading={suggestions.icon} title={suggestions.commitLabel(typed)} onClick={() => onCommit(typed)} />\n {items.map(item => <ListRow key={item.query} density=\"compact\" leading={suggestions.icon} title={<Highlighted text={item.query} match={item.match} />} onClick={() => onCommit(item.query)} />)}\n </Stack>;\n}\n\nfunction SearchResultsHeader({ summary, applied, cause, appliedHost, onRemove, onClearAll, onSortChange }: {\n summary: SearchResultSummary | undefined; applied: SearchAppliedFilters | undefined; cause: SearchEmptyCause;\n appliedHost: RefObject<HTMLDivElement | null>; onRemove(key: string, index: number): void; onClearAll(): void; onSortChange(id: string): void;\n}) {\n const sort = summary?.sort;\n const showCount = summary && cause === \"none\";\n if (!summary?.notice && !showCount && !applied?.items.length) return null;\n return <Stack gap=\"sm\">\n {summary?.notice}\n {showCount ? <Stack axis=\"inline\" justify=\"between\" align=\"center\" gap=\"sm\" wrap>\n {summary.count === null ? <Skeleton shape=\"text\" width=\"30%\" /> : <Text tone=\"muted\">{summary.countLabel(summary.count)}</Text>}\n {sort ? <Menu label={sort.label} align=\"end\" selectionMode=\"single\" value={sort.value} onValueChange={onSortChange}\n items={sort.options.map(option => ({ id: option.id, label: option.label }))}\n trigger={<Button size=\"small\" tone=\"ghost\" {...(sort.icon === undefined ? {} : { trailing: sort.icon })}>{sort.triggerLabel}</Button>} /> : null}\n </Stack> : null}\n {applied?.items.length ? <Stack ref={appliedHost} axis=\"inline\" wrap gap=\"xs\" align=\"center\">\n {applied.items.map((item, index) => <Chip key={item.key} data-search-applied-filter=\"\" label={item.label} aria-label={applied.removeLabel(item.label)}\n trailing={applied.removeIcon ?? <span aria-hidden=\"true\">×</span>} onPress={() => onRemove(item.key, index)} />)}\n <Button tone=\"ghost\" size=\"small\" onClick={onClearAll}>{applied.clearAllLabel}</Button>\n </Stack> : null}\n </Stack>;\n}\n\nfunction SearchResultsBody({ summary, applied, suggested, cause, onCommit, onClearAll, children }: {\n summary: SearchResultSummary | undefined; applied: SearchAppliedFilters | undefined; suggested: SearchSuggestedQueries | undefined;\n cause: SearchEmptyCause; onCommit(query: string): void; onClearAll(): void; children: ReactNode;\n}) {\n // Loading keeps each row's own height (ListRow `loading`), so the list does not jump when results land.\n if (summary?.count === null) return <Stack gap=\"xxs\">{Array.from({ length: searchScreenRecipe.loadingRows }, (_, index) =>\n <ListRow key={index} loading title=\"\" description=\"\" {...(index === 0 ? { loadingLabel: summary.loadingLabel } : {})} />)}</Stack>;\n if (cause === \"none\" || !summary?.empty) return <>{children}</>;\n return <Stack gap=\"lg\">\n <EmptyState density=\"compact\" title={summary.empty.title} {...(summary.empty.description === undefined ? {} : { description: summary.empty.description })}\n {...(cause === \"filters\" && applied ? { action: <Button tone=\"secondary\" onClick={onClearAll}>{applied.clearAllLabel}</Button> } : {})} />\n {cause === \"query\" && suggested?.items.length ? <SearchSuggestedChips suggested={suggested} onCommit={onCommit} /> : null}\n {children}\n </Stack>;\n}\n\nfunction SearchFilterTrigger<F>({ sheet, appliedCount, triggerRef }: { sheet: SearchFilterSheet<F>; appliedCount: number; triggerRef: RefObject<HTMLButtonElement | null> }) {\n const trigger = sheet.trigger!;\n return <Chip ref={triggerRef} label={trigger.label(appliedCount)} aria-label={trigger.accessibilityLabel(appliedCount)} aria-haspopup=\"dialog\"\n {...(trigger.icon === undefined ? {} : { leading: trigger.icon })} onPress={() => sheet.onOpenChange(true)} />;\n}\n\n/** Wide windows get a side sheet so results stay visible beside the conditions (expanded = 960+). */\nfunction sidePlacement() {\n return typeof window !== \"undefined\" && [\"expanded\", \"wide\"].includes(resolveWindowClass(window.innerWidth));\n}\n\nfunction SearchFilterSheetView<F>({ sheet }: { sheet: SearchFilterSheet<F> }) {\n // The draft lives only while the sheet is open: seeded from `value` on open, dropped on every close,\n // so closing (×, scrim, back, Escape) never leaks half-edited conditions into the next opening.\n const [session, setSession] = useState<{ draft: F; side: boolean } | null>(null);\n if (sheet.open && !session) setSession({ draft: sheet.value, side: sidePlacement() });\n if (!sheet.open && session) setSession(null);\n const draft = session ? session.draft : sheet.value;\n const setDraft = (next: F) => setSession(current => current ? { ...current, draft: next } : current);\n const count = sheet.count(draft);\n // Reset sits left of the primary action on Web (sheet.md [secondary][primary]) and is always present,\n // disabled at the default, so the primary action does not jump when the draft changes.\n const footer = <Stack axis=\"inline\" justify=\"end\" gap=\"sm\" wrap>\n <Button tone=\"secondary\" disabled={sheet.isDefault(draft)} onClick={() => setDraft(sheet.reset(draft))}>{sheet.labels.reset}</Button>\n <Button disabled={count === 0} onClick={() => { sheet.onApply(draft); sheet.onOpenChange(false); }}>{sheet.labels.apply(count)}</Button>\n </Stack>;\n return <Sheet open={sheet.open} onOpenChange={open => sheet.onOpenChange(open)} title={sheet.title} closeLabel={sheet.labels.close}\n placement={session?.side ? \"end\" : \"bottom\"} size={sheet.size ?? \"large\"} footer={footer}>\n {sheet.renderContent(draft, setDraft)}\n </Sheet>;\n}\n\ntype SearchInputSlot = {queryField: ReactNode; queryClearLabel?: string} | {queryField?: never; queryClearLabel: string};\n/** `committedQuery` turns on two-step search; every commit (Enter, suggestion, recent, suggested query) then goes through `onSubmit`. */\n/** One name for the default field's progress on both platforms (Web SearchField `loading`, Native `busy`+`busyLabel`). */\ntype SearchProgressSlot = {searching?: never; searchingLabel?: never} | {searching: boolean; searchingLabel: string};\ntype SearchCommitSlot = {committedQuery?: never; onSubmit?: (query:string)=>void} | {committedQuery: string; onSubmit:(query:string)=>void};\nexport type SearchScreenProps<F = unknown> = Base & SearchInputSlot & SearchCommitSlot & SearchProgressSlot & {query:string;queryLabel:string;onQueryChange(value:string):void;onSearch(query:string,context:{signal:AbortSignal}):void;debounceMs?:number;filters?:ReactNode;recentSearches?:ReactNode;children:ReactNode;\n /** `scroll` keeps `filters` on one horizontally scrolling line that bleeds to the screen edges. */\n filtersOverflow?:\"wrap\"|\"scroll\";\n /** Gutter the host (Container `gutter`, Sheet = `regular`) already applies around this screen; the scroll rail bleeds over it too. */\n hostGutter?:ContainerGutter;\n /** `hidden` drops the visible label (the field keeps `queryLabel` as its accessible name and placeholder). */\n queryLabelVisibility?:\"visible\"|\"hidden\";\n recentQueries?:SearchRecentQueries;suggestedQueries?:SearchSuggestedQueries;suggestions?:SearchSuggestions;\n resultSummary?:SearchResultSummary;appliedFilters?:SearchAppliedFilters;filterSheet?:SearchFilterSheet<F>};\n/** Abort is supplied to the host request; the host must ignore aborted responses before committing results. */\nexport function SearchScreen<F = unknown>({query,queryLabel,queryField,queryClearLabel,onQueryChange,onSearch,debounceMs=300,filters,recentSearches,children,onSubmit,committedQuery,filtersOverflow=\"wrap\",hostGutter=\"none\",queryLabelVisibility=\"visible\",searching,searchingLabel,recentQueries,suggestedQueries,suggestions,resultSummary,appliedFilters,filterSheet,...screen}:SearchScreenProps<F>){\n // The host owns localized copy. A custom queryField owns its own clear affordance.\n if (queryField == null && !queryClearLabel?.trim()) throw new TypeError(\"SearchScreen requires a localized queryClearLabel for its default search field\");\n const callback=useRef(onSearch);callback.current=onSearch;\n useEffect(()=>{const controller=new AbortController();const timer=setTimeout(()=>callback.current(query,{signal:controller.signal}),Math.max(0,debounceMs));return()=>{clearTimeout(timer);controller.abort();};},[query,debounceMs]);\n const fieldHost=useRef<HTMLDivElement>(null),bodyHost=useRef<HTMLDivElement>(null);\n const input=useCallback(()=>fieldHost.current?.querySelector<HTMLElement>(\"input\"),[]);\n const focus=useSearchRemovalFocus(recentQueries?.items.length??0,appliedFilters?.items.length??0,input);\n // Every commit path funnels through here so \"only committed searches are recorded\" holds at the API:\n // onSearch (debounced typing) never reaches onSubmit. Without onSubmit (one-step search) a pick only fills the field.\n const commit=(value:string)=>{const next=resolveSearchCommit(value);if(next===null)return;if(next!==query)onQueryChange(next);onSubmit?.(next);};\n // A picked suggestion/recent/suggested query unmounts with its phase, which dropped focus to <body>; move it to the\n // results region first (1.13.1, utilverse adoption 2026-10-06, Native twin: Keyboard.dismiss on every commit).\n // Leaving the field also closes a mobile browser's keyboard. Enter keeps focus in the field instead: it is still on\n // screen with the committed text, and moving it would make keyboard users Shift+Tab back to refine. Rejected: blur()\n // without a target, which leaves focus on <body> and loses the reading position for screen readers.\n const pick=(value:string)=>{if(resolveSearchCommit(value)!==null)bodyHost.current?.focus({preventScroll:true});commit(value);};\n // onSubmit separates \"typing\" from \"committed\" (recent-search writes, suggestion → results) without making\n // products rebuild the default field through queryField (2026-10-06 search redesign, usage/components/search-screen.md).\n // Enter while an IME is composing (Korean/Japanese) only confirms the syllable, so it must not commit.\n // The pending debounce is left alone: products decide whether submit should also flush a request.\n const submitProps=onSubmit?{enterKeyHint:\"search\" as const,onKeyDown:(event:KeyboardEvent<HTMLInputElement>)=>{if(event.key!==\"Enter\"||event.nativeEvent.isComposing||event.keyCode===229)return;commit(event.currentTarget.value);}}:{};\n // Reference services hide the label behind a placeholder; the placeholder names the search target (Apple HIG\n // search fields) and aria-label keeps the accessible name, so hiding never leaves an unnamed field.\n const labelProps=queryLabelVisibility===\"hidden\"?{\"aria-label\":queryLabel,placeholder:queryLabel}:{label:queryLabel};\n const phase=resolveSearchScreenPhase(query,committedQuery);\n const appliedCount=appliedFilters?.items.length??0;\n const cause=phase===\"results\"&&resultSummary?resolveSearchEmptyCause(resultSummary.count,appliedCount):\"none\";\n // Two-step search shows the rail only beside results (typing keeps the pinned area short), and a\n // query-caused zero hides it because no filter can fix that; a filter-caused zero keeps it to undo the filter.\n const showRail=(committedQuery===undefined||phase===\"results\")&&cause!==\"query\";\n const trigger=filterSheet?.trigger?<SearchFilterTrigger sheet={filterSheet} appliedCount={appliedCount} triggerRef={focus.filterTrigger}/>:null;\n const rail=!showRail?null:trigger&&filters!=null?<Stack axis=\"inline\" gap=\"xs\" wrap={filtersOverflow===\"wrap\"}>{trigger}{filters}</Stack>:trigger??filters;\n // Wrapping chips grow the pinned area line by line at large text; the scroll rail caps it at one row.\n // A product-owned CSS/ScrollView rail would re-derive bleed, scroll padding and RTL per app.\n // contentInset=\"none\" leaves the gutter to the host, which CSS cannot see; hostGutter names it (Native twin).\n const bleed=(screen.contentInset===\"none\"?0:screenPatternRecipe.padding)+containerRecipe.gutters[hostGutter];\n const filterSlot=rail!=null&&filtersOverflow===\"scroll\"?<div className=\"hjm-search-screen__filters\" data-overflow=\"scroll\" style={{\"--hjm-search-filters-bleed\":`${bleed}px`} as CSSProperties}>{rail}</div>:rail;\n const visibleSuggestions=suggestions?.items.slice(0,Math.max(0,suggestions.maxVisible??searchScreenRecipe.suggestionVisible)).length??0;\n const countAnnouncement=phase===\"typing\"&&suggestions?suggestions.countLabel(visibleSuggestions):phase===\"results\"&&resultSummary&&resultSummary.count!==null?resultSummary.countLabel(resultSummary.count):\"\";\n // 2026-10-06 utilverse adoption: products swapped the whole field just to show progress. The Web spinner is\n // aria-hidden, so the localized searching label goes through the same status region as the counts.\n const announcement=searching&&searchingLabel?searchingLabel:countAnnouncement;\n const removeRecent=(item:string,index:number)=>{focus.schedule({list:\"recent\",index,from:recentQueries!.items.length});recentQueries!.onRemove(item);};\n const clearRecent=()=>{focus.schedule({list:\"clearRecent\",index:-1,from:recentQueries!.items.length});recentQueries!.onClearAll();};\n const removeApplied=(key:string,index:number)=>{focus.schedule({list:\"applied\",index,from:appliedCount});appliedFilters!.onRemove(key);};\n const clearApplied=()=>{focus.schedule({list:\"clearApplied\",index:-1,from:appliedCount});appliedFilters!.onClearAll();};\n // A new order starts at the top; the previous offset would land mid-list in unrelated results.\n const changeSort=(id:string)=>{resultSummary?.sort?.onChange(id);bodyHost.current?.closest(\".hjm-screen__body\")?.scrollTo?.({top:0});};\n const idle=<SearchIdleSections recent={recentQueries} suggested={suggestedQueries} legacy={recentSearches} onCommit={pick} hostRef={focus.recentHost} onRemove={removeRecent} onClearAll={clearRecent}/>;\n const body=phase===\"idle\"?<>{idle}{committedQuery===undefined?children:null}</>\n :phase===\"typing\"?(suggestions?<SearchSuggestionList query={query} suggestions={suggestions} onCommit={pick}/>:null)\n :<><SearchResultsHeader summary={resultSummary} applied={appliedFilters} cause={cause} appliedHost={focus.appliedHost} onRemove={removeApplied} onClearAll={clearApplied} onSortChange={changeSort}/>\n <SearchResultsBody summary={resultSummary} applied={appliedFilters} suggested={suggestedQueries} cause={cause} onCommit={pick} onClearAll={clearApplied}>{children}</SearchResultsBody></>;\n return <><ScreenLayout {...screen} notice={<Stack gap=\"sm\" ref={fieldHost}>{queryField ?? <SearchField {...labelProps} clearLabel={queryClearLabel!} value={query} onValueChange={onQueryChange} loading={searching??false} {...submitProps}/>}{filterSlot}{screen.notice}</Stack>}><Stack gap=\"lg\" ref={bodyHost} className=\"hjm-search-screen__results\" tabIndex={-1}>{suggestions||resultSummary||searchingLabel?<SearchAnnouncement text={announcement}/>:null}{body}</Stack></ScreenLayout>\n {filterSheet?<SearchFilterSheetView sheet={filterSheet}/>:null}</>;\n}\n\nexport type PermissionScreenProps = Base & {status:PermissionScreenStatus;illustration?:ReactNode;explanation:ReactNode;request:ScreenFlowAction;settings:ScreenFlowAction;continueAction:ScreenFlowAction;skip?:ScreenFlowAction};\nexport function PermissionScreen({status,illustration,explanation,request,settings,continueAction,skip,...screen}:PermissionScreenProps){const kind=resolvePermissionAction(status);const primary=kind===\"request\"?request:kind===\"settings\"?settings:kind===\"continue\"?continueAction:null;return <ScreenLayout {...screen} footer={<Stack gap=\"sm\">{primary?<Action action={primary}/>:null}{skip?<Action action={skip} secondary/>:null}</Stack>}><Stack gap=\"xl\" align=\"center\">{illustration}{explanation}</Stack></ScreenLayout>;}\n\nexport type OnboardingStep = {id:string;title:string;description:string;content:ReactNode};\nexport type OnboardingScreenProps = {steps:readonly OnboardingStep[];index:number;onIndexChange(index:number):void;nextLabel:string;backLabel:string;complete:ScreenFlowAction;skip?:ScreenFlowAction;progressLabel(index:number,total:number):string;layoutStyle?:ScreenLayoutProps[\"layoutStyle\"]};\nexport function OnboardingScreen({steps,index,onIndexChange,nextLabel,backLabel,complete,skip,progressLabel,layoutStyle}:OnboardingScreenProps){const position=resolveOnboardingStep(steps.length,index);const step=steps[index]!;return <ScreenLayout {...(layoutStyle===undefined?{}:{layoutStyle})} title={step.title} description={step.description} actions={skip?<Action action={skip} secondary/>:null} notice={<Text variant=\"caption\" tone=\"muted\">{progressLabel(index+1,steps.length)}</Text>} footer={<Stack gap=\"sm\"><Action action={position.last?complete:{label:nextLabel,onAction:()=>onIndexChange(index+1)}}/>{!position.first?<Action action={{label:backLabel,onAction:()=>onIndexChange(index-1)}} secondary/>:null}</Stack>}>{step.content}</ScreenLayout>;}\n\nexport type CommentThreadItem = Readonly<{id:string;parentId:string|null;author:string;body:ReactNode;bodyText?:string;timeLabel:string;likeCountLabel:string;avatar?:ReactNode;likeIcon:ReactNode;likeLabel:string;likeAction?:ReactNode;actions?:ReactNode;canReply?:boolean;replyDisabled?:boolean}>;\nexport type CommentThreadScreenProps = Base & {items:readonly CommentThreadItem[];expandedIds:readonly string[];onExpandedChange(id:string):void;onLike(id:string):void;onReply(id:string):void;replyLabel:string;repliesLabel(count:number,expanded:boolean):string;composer?:ReactNode;threadFooter?:ReactNode};\n/** Controlled thread: server ordering, permission checks and receipt-based draft clearing belong to the product. */\nexport function CommentThreadScreen({items,expandedIds,onExpandedChange,onLike,onReply,replyLabel,repliesLabel,composer,threadFooter,...screen}:CommentThreadScreenProps){\n validateCommentThread(items);\n // The supplied reference joins the author to the first body line and reserves the right edge\n // for one reaction target. Keep legacy rich bodies intact; bodyText opts into that compact flow.\n const row=(item:CommentThreadItem)=><Stack key={item.id} axis=\"inline\" align=\"start\" gap=\"sm\">{item.avatar}<Stack gap=\"xxs\" layoutStyle={{flex:1,minWidth:0}}>\n {item.bodyText!==undefined?<Text><Text emphasis=\"strong\">{item.author}</Text>{\" \"}{item.bodyText}</Text>:<Stack axis=\"inline\" gap=\"sm\" align=\"center\" layoutStyle={{flexWrap:\"wrap\"}}><Text emphasis=\"strong\">{item.author}</Text><Text variant=\"caption\" tone=\"muted\">{item.timeLabel}</Text></Stack>}\n {item.body}<Stack axis=\"inline\" gap=\"sm\" align=\"center\" layoutStyle={{flexWrap:\"wrap\"}}>{item.bodyText!==undefined&&item.timeLabel?<Text variant=\"caption\" tone=\"muted\">{item.timeLabel}</Text>:null}{item.likeCountLabel?<Text variant=\"caption\" tone=\"muted\">{item.likeCountLabel}</Text>:null}{(item.canReply??item.parentId===null)?<Button size=\"small\" tone=\"ghost\" disabled={item.replyDisabled??false} onClick={()=>onReply(item.id)}>{replyLabel}</Button>:null}</Stack>{item.actions}</Stack>{item.likeAction!==undefined?item.likeAction:<IconButton label={item.likeLabel} tone=\"ghost\" onClick={()=>onLike(item.id)}>{item.likeIcon}</IconButton>}</Stack>;\n return <ScreenLayout {...screen} footer={!screen.state||screen.state.kind===\"ready\"||screen.state.kind===\"empty\"?composer:null}><Stack gap=\"lg\">{items.filter(item=>item.parentId===null).map(item=>{const replies=items.filter(reply=>reply.parentId===item.id);return <Stack key={item.id} gap=\"xs\">{row(item)}{replies.length?<Stack gap=\"md\" layoutStyle={{marginInlineStart:screenPatternRecipe.sectionGap}}><Button layoutStyle={{alignSelf:\"flex-start\"}} tone=\"ghost\" size=\"small\" aria-expanded={expandedIds.includes(item.id)} onClick={()=>onExpandedChange(item.id)}>{repliesLabel(replies.length,expandedIds.includes(item.id))}</Button>{expandedIds.includes(item.id)?replies.map(row):null}</Stack>:null}</Stack>;})}{threadFooter}</Stack></ScreenLayout>;\n}\n"]}
|
package/dist/styles.css
CHANGED
|
@@ -817,13 +817,15 @@
|
|
|
817
817
|
Both browser font size (em query) and provider data-large-text must trigger it (#20).
|
|
818
818
|
11em = 176px at100%, 352px at200%: measured row333px fits360px but overflows320px.
|
|
819
819
|
Reset flex and max-content in columns to avoid collapsed height and unwrapped labels.
|
|
820
|
-
renderers.ssr.test.tsx checks that the recipe still declares stacked.
|
|
820
|
+
renderers.ssr.test.tsx checks that the recipe still declares stacked.
|
|
821
|
+
Pills are excluded (segmentedControlRecipe.pills.largeTextLayout "wrap", 1.13.1): they wrap in a block and
|
|
822
|
+
stay one line in a scroll rail. Stacking them turned a filter rail into a tall column (utilverse, 2026-10-06). */
|
|
821
823
|
@media (max-width: 11em) {
|
|
822
|
-
.hjm-segmented__items { flex-direction: column; overflow-x: visible; }
|
|
823
|
-
.hjm-segmented__item { flex: 0 0 auto; min-inline-size: 0; }
|
|
824
|
+
.hjm-segmented:not([data-presentation="pills"]) .hjm-segmented__items { flex-direction: column; overflow-x: visible; }
|
|
825
|
+
.hjm-segmented:not([data-presentation="pills"]) .hjm-segmented__item { flex: 0 0 auto; min-inline-size: 0; }
|
|
824
826
|
}
|
|
825
|
-
[data-large-text="true"] .hjm-segmented__items { flex-direction: column; overflow-x: visible; }
|
|
826
|
-
[data-large-text="true"] .hjm-segmented__item { flex: 0 0 auto; min-inline-size: 0; }
|
|
827
|
+
[data-large-text="true"] .hjm-segmented:not([data-presentation="pills"]) .hjm-segmented__items { flex-direction: column; overflow-x: visible; }
|
|
828
|
+
[data-large-text="true"] .hjm-segmented:not([data-presentation="pills"]) .hjm-segmented__item { flex: 0 0 auto; min-inline-size: 0; }
|
|
827
829
|
|
|
828
830
|
.hjm-tabs { min-inline-size: 0; }
|
|
829
831
|
.hjm-tabs__list { display: flex; gap: var(--hjm-space-xs); min-inline-size: 0; overflow-x: auto; border-block-end: 1px solid var(--hjm-color-border); }
|
|
@@ -2812,8 +2814,12 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2812
2814
|
.hjm-screen__body[data-replacement="true"] { display: flex; flex-direction: column; }
|
|
2813
2815
|
.hjm-screen__state { margin-block: auto; flex-shrink: 0; display: flex; flex-direction: column; align-items: center; gap: var(--hjm-screen-state-gap, var(--hjm-space-md)); padding-block: var(--hjm-screen-gap); text-align: center; }
|
|
2814
2816
|
.hjm-screen__footer { flex: 0 0 auto; padding: var(--hjm-screen-padding); padding-block-end: max(var(--hjm-screen-padding), env(safe-area-inset-bottom)); border-block-start: 1px solid var(--hjm-color-border); }
|
|
2815
|
-
/* SearchScreen filtersOverflow=scroll; why: screen-flows.tsx. Block padding keeps focus rings unclipped.
|
|
2816
|
-
|
|
2817
|
+
/* SearchScreen filtersOverflow=scroll; why: screen-flows.tsx. Block padding keeps focus rings unclipped.
|
|
2818
|
+
--hjm-search-filters-bleed = screen padding + hostGutter (1.13.1), set inline by SearchScreen. */
|
|
2819
|
+
.hjm-search-screen__filters { --f: calc(var(--hjm-focus-width) + var(--hjm-focus-offset)); --b: var(--hjm-search-filters-bleed, var(--hjm-screen-padding)); overflow-x: auto; margin: calc(-1 * var(--f)) calc(-1 * var(--b)); padding: var(--f) var(--b); scroll-padding-inline: var(--b); scrollbar-width: none; }
|
|
2820
|
+
/* Landing target after a picked query commits (1.13.1). It is not a control, so it draws no focus ring;
|
|
2821
|
+
the polite count announcement says what arrived. */
|
|
2822
|
+
.hjm-search-screen__results:focus { outline: none; }
|
|
2817
2823
|
.hjm-search-screen__filters > * { inline-size: max-content; }
|
|
2818
2824
|
|
|
2819
2825
|
/* Settings use spacing and rules, not shaded cards, per the 2026-10-05 product direction. */
|
package/dist/styles.layered.css
CHANGED
|
@@ -818,13 +818,15 @@
|
|
|
818
818
|
Both browser font size (em query) and provider data-large-text must trigger it (#20).
|
|
819
819
|
11em = 176px at100%, 352px at200%: measured row333px fits360px but overflows320px.
|
|
820
820
|
Reset flex and max-content in columns to avoid collapsed height and unwrapped labels.
|
|
821
|
-
renderers.ssr.test.tsx checks that the recipe still declares stacked.
|
|
821
|
+
renderers.ssr.test.tsx checks that the recipe still declares stacked.
|
|
822
|
+
Pills are excluded (segmentedControlRecipe.pills.largeTextLayout "wrap", 1.13.1): they wrap in a block and
|
|
823
|
+
stay one line in a scroll rail. Stacking them turned a filter rail into a tall column (utilverse, 2026-10-06). */
|
|
822
824
|
@media (max-width: 11em) {
|
|
823
|
-
.hjm-segmented__items { flex-direction: column; overflow-x: visible; }
|
|
824
|
-
.hjm-segmented__item { flex: 0 0 auto; min-inline-size: 0; }
|
|
825
|
+
.hjm-segmented:not([data-presentation="pills"]) .hjm-segmented__items { flex-direction: column; overflow-x: visible; }
|
|
826
|
+
.hjm-segmented:not([data-presentation="pills"]) .hjm-segmented__item { flex: 0 0 auto; min-inline-size: 0; }
|
|
825
827
|
}
|
|
826
|
-
[data-large-text="true"] .hjm-segmented__items { flex-direction: column; overflow-x: visible; }
|
|
827
|
-
[data-large-text="true"] .hjm-segmented__item { flex: 0 0 auto; min-inline-size: 0; }
|
|
828
|
+
[data-large-text="true"] .hjm-segmented:not([data-presentation="pills"]) .hjm-segmented__items { flex-direction: column; overflow-x: visible; }
|
|
829
|
+
[data-large-text="true"] .hjm-segmented:not([data-presentation="pills"]) .hjm-segmented__item { flex: 0 0 auto; min-inline-size: 0; }
|
|
828
830
|
|
|
829
831
|
.hjm-tabs { min-inline-size: 0; }
|
|
830
832
|
.hjm-tabs__list { display: flex; gap: var(--hjm-space-xs); min-inline-size: 0; overflow-x: auto; border-block-end: 1px solid var(--hjm-color-border); }
|
|
@@ -2813,8 +2815,12 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
2813
2815
|
.hjm-screen__body[data-replacement="true"] { display: flex; flex-direction: column; }
|
|
2814
2816
|
.hjm-screen__state { margin-block: auto; flex-shrink: 0; display: flex; flex-direction: column; align-items: center; gap: var(--hjm-screen-state-gap, var(--hjm-space-md)); padding-block: var(--hjm-screen-gap); text-align: center; }
|
|
2815
2817
|
.hjm-screen__footer { flex: 0 0 auto; padding: var(--hjm-screen-padding); padding-block-end: max(var(--hjm-screen-padding), env(safe-area-inset-bottom)); border-block-start: 1px solid var(--hjm-color-border); }
|
|
2816
|
-
/* SearchScreen filtersOverflow=scroll; why: screen-flows.tsx. Block padding keeps focus rings unclipped.
|
|
2817
|
-
|
|
2818
|
+
/* SearchScreen filtersOverflow=scroll; why: screen-flows.tsx. Block padding keeps focus rings unclipped.
|
|
2819
|
+
--hjm-search-filters-bleed = screen padding + hostGutter (1.13.1), set inline by SearchScreen. */
|
|
2820
|
+
.hjm-search-screen__filters { --f: calc(var(--hjm-focus-width) + var(--hjm-focus-offset)); --b: var(--hjm-search-filters-bleed, var(--hjm-screen-padding)); overflow-x: auto; margin: calc(-1 * var(--f)) calc(-1 * var(--b)); padding: var(--f) var(--b); scroll-padding-inline: var(--b); scrollbar-width: none; }
|
|
2821
|
+
/* Landing target after a picked query commits (1.13.1). It is not a control, so it draws no focus ring;
|
|
2822
|
+
the polite count announcement says what arrived. */
|
|
2823
|
+
.hjm-search-screen__results:focus { outline: none; }
|
|
2818
2824
|
.hjm-search-screen__filters > * { inline-size: max-content; }
|
|
2819
2825
|
|
|
2820
2826
|
/* Settings use spacing and rules, not shaded cards, per the 2026-10-05 product direction. */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hjmds/react",
|
|
3
|
-
"version": "1.13.
|
|
3
|
+
"version": "1.13.1",
|
|
4
4
|
"description": "Accessible React 19 renderers for HJM design contracts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -518,7 +518,7 @@
|
|
|
518
518
|
"blobatar": "2.7.0",
|
|
519
519
|
"@blobatar/react": "2.7.0",
|
|
520
520
|
"lucide-react": "1.49.0",
|
|
521
|
-
"@hjmds/design-contracts": "1.13.
|
|
521
|
+
"@hjmds/design-contracts": "1.13.1"
|
|
522
522
|
},
|
|
523
523
|
"peerDependenciesMeta": {
|
|
524
524
|
"@number-flow/react": {
|