@hjmds/react 1.22.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/evidence.d.ts +1 -1
- package/dist/evidence.js +1 -1
- package/dist/evidence.js.map +1 -1
- package/dist/screen-flows.d.ts +9 -0
- package/dist/screen-flows.d.ts.map +1 -1
- package/dist/screen-flows.js +7 -7
- package/dist/screen-flows.js.map +1 -1
- package/dist/screens.d.ts +18 -1
- package/dist/screens.d.ts.map +1 -1
- package/dist/screens.js +6 -2
- package/dist/screens.js.map +1 -1
- package/package.json +3 -3
package/dist/evidence.d.ts
CHANGED
|
@@ -34,7 +34,7 @@ export type ReactRendererEvidenceManifest = Readonly<{
|
|
|
34
34
|
export declare const reactRendererEvidence: {
|
|
35
35
|
readonly schemaVersion: 2;
|
|
36
36
|
readonly packageName: "@hjmds/react";
|
|
37
|
-
readonly packageVersion: "1.
|
|
37
|
+
readonly packageVersion: "1.23.0";
|
|
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.
|
|
158
|
+
packageVersion: "1.23.0",
|
|
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.22.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":"AAEA,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAU,CAAC;AA6B7D,MAAM,gBAAgB,GAAG,kCAA2C,CAAC;AACrE,MAAM,eAAe,GAAG,uCAAgD,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,eAAe,GAAG,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,CAAU,CAAC;AAElG;;;;GAIG;AACH,MAAM,eAAe,GAAuE,EAAE,CAAC;AAE/F,4EAA4E;AAC5E,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAS;IAC/D,SAAS,EAAE,cAAc,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO;IAC1E,wBAAwB;IACxB,aAAa;IACb,cAAc;IACd,MAAM;IACN,UAAU;IACV,QAAQ;IACR,OAAO;IACP,YAAY;IACZ,aAAa;IACb,OAAO;IACP,MAAM;IACN,UAAU;IACV,aAAa;IACb,OAAO;IACP,WAAW;IACX,MAAM;IACN,SAAS;IACT,QAAQ;IACR,OAAO;IACP,WAAW;IACX,MAAM;IACN,QAAQ;IACR,UAAU;IACV,KAAK;IACL,WAAW;IACX,aAAa;IACb,WAAW;IACX,mBAAmB;IACnB,WAAW;IACX,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,UAAU;IACV,SAAS;IACT,aAAa;IACb,KAAK;IACL,SAAS;IACT,mBAAmB;IACnB,SAAS;IACT,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,kBAAkB;IAClB,OAAO;IACP,WAAW;IACX,aAAa;IACb,gBAAgB;IAChB,sBAAsB;IACtB,gBAAgB;IAChB,cAAc;IACd,cAAc;IACd,wBAAwB;IACxB,UAAU;IACV,QAAQ;IACR,cAAc;IACd,QAAQ;IACR,WAAW;IACX,aAAa;IACb,SAAS;IACT,SAAS;IACT,eAAe;IACf,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,aAAa;IACb,QAAQ;IACR,MAAM;IACN,UAAU;IACV,UAAU;IACV,QAAQ;IACR,SAAS;CACV,CAAC,CAAC;AAEH,SAAS,YAAY,CACnB,WAAmB,EACnB,WAA8B,EAC9B,OAAsB;IAEtB,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAChD,MAAM,MAAM,GAAoC;QAC9C,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjE,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACvG,CAAC;IACF,OAAO;QACL,WAAW;QACX,WAAW;QACX,OAAO;QACP,SAAS,EAAE,CAAC,SAAS,EAAE,GAAG,MAAM,CAAC;QACjC,MAAM,EAAE;YACN,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE;YACvE,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;SACpG;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,WAAmB,EACnB,WAA8B,EAC9B,OAAsB,EACtB,YAAuC,mCAAmC;IAE1E,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;QAC1C,MAAM,EAAE;YACN,GAAG,IAAI,CAAC,MAAM;YACd;gBACE,SAAS,EAAE,CAAC,UAAU,CAAC;gBACvB,IAAI,EAAE,SAAS;gBACf,MAAM,EAAE,WAAW;aACpB;SACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,WAAmB,EACnB,WAA8B,EAC9B,OAAsB,EACtB,SAAoC;IAEpC,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;IAC7D,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC;QACvD,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;KACzG,CAAC;AACJ,CAAC;AAED,SAAS,UAAU;IACjB,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;IACtF,OAAO;QACL,GAAG,IAAI;QACP,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;QAC1C,4EAA4E;QAC5E,2EAA2E;QAC3E,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM;YACrB,EAAE,SAAS,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,mCAAmC,EAAE,MAAM,EAAE,OAAO,EAAE;YACvF,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,oCAAoC,EAAE,MAAM,EAAE,OAAO,EAAE;SACvH;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,aAAa,EAAE,kCAAkC;IACjD,WAAW,EAAE,cAAc;IAC3B,cAAc,EAAE,QAAQ;IACxB,OAAO,EAAE,KAAK;IACd,UAAU,EAAE;QACV,YAAY,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;QAChD,YAAY,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;QACzD,YAAY,CAAC,wBAAwB,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,YAAY,CAAC;QACpF,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;QAC1C,YAAY,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;QAChD,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAC3C,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;QAC5C,YAAY,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;QACpD,YAAY,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC;QACzD,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;QAC1C,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;QAC/C,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;QAC/C,YAAY,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,WAAW,CAAC;QACxD,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAC5C,aAAa,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC;QACzD,aAAa,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC;QACzD,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;QAClD,aAAa,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,EAAE,kBAAkB,CAAC;QACtE,aAAa,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;QACvD,aAAa,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC;QAChE,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC;QAC/C,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,qCAAqC,CAAC;QACjF,aAAa,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC;QAC7D,aAAa,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,gCAAgC,CAAC;QACvF,aAAa,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,4CAA4C,CAAC;QAC3G,aAAa,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC;QACtD,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;QAC/C,aAAa,CAAC,gBAAgB,EAAE,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC;QACjE,aAAa,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,aAAa,CAAC;QAC3D,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;QAClD,aAAa,CAAC,mBAAmB,EAAE,CAAC,kBAAkB,CAAC,EAAE,aAAa,CAAC;QACvE,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAC9C,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,qCAAqC,CAAC;QACtF,aAAa,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,EAAE,cAAc,EAAE,uCAAuC,CAAC;QACpG,aAAa,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,EAAE,cAAc,EAAE,2CAA2C,CAAC;QACxG,wBAAwB,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,+BAA+B,CAAC;QAC9F,wBAAwB,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,kCAAkC,CAAC;QACzG,aAAa,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,gCAAgC,CAAC;QACvF,wBAAwB,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,4BAA4B,CAAC;QAClF,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,4BAA4B,CAAC;QACvE,aAAa,CAAC,eAAe,EAAE,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE,qCAAqC,CAAC;QAC1G,aAAa,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,gCAAgC,CAAC;QACvF,wBAAwB,CAAC,iBAAiB,EAAE,CAAC,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,uCAAuC,CAAC;QAC7H,aAAa,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,0CAA0C,CAAC;QACpG,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QACrC,YAAY,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;QACjD,YAAY,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC;QAC7D,aAAa,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC;QAChE,aAAa,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;QAC1D,wBAAwB,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,gCAAgC,CAAC;QACjG,YAAY,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC;QAC5D,aAAa,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,+BAA+B,CAAC;QACnF,aAAa,CAAC,mBAAmB,EAAE,CAAC,iBAAiB,CAAC,EAAE,cAAc,EAAE,2CAA2C,CAAC;QACpH,aAAa,CAAC,sBAAsB,EAAE,CAAC,oBAAoB,CAAC,EAAE,mBAAmB,CAAC;QAClF,YAAY,CAAC,aAAa,EAAE,CAAC,kBAAkB,CAAC,EAAE,eAAe,CAAC;QAClE,aAAa,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,EAAE,cAAc,EAAE,2CAA2C,CAAC;QACvG,aAAa,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,EAAE,eAAe,EAAE,4CAA4C,CAAC;QAC5G,wBAAwB,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE,gBAAgB,EAAE,iDAAiD,CAAC;QAC9H,aAAa,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,wCAAwC,CAAC;QAC5F,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,SAAS,CAAC;QACzD,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,8BAA8B,CAAC;QAC/E,aAAa,CAAC,mBAAmB,EAAE,CAAC,kBAAkB,CAAC,EAAE,cAAc,EAAE,kDAAkD,CAAC;QAC5H,aAAa,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,8CAA8C,CAAC;QACxG,aAAa,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,gCAAgC,CAAC;QACvF,aAAa,CAAC,wBAAwB,EAAE,CAAC,sBAAsB,CAAC,EAAE,0BAA0B,CAAC;QAC7F,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAC3C,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;QAC7C,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;QAC/C,YAAY,CAAC,eAAe,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC;QAC5D,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAC3C,YAAY,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;QAC3C,YAAY,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;QAClD,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;QACzC,aAAa,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,0CAA0C,CAAC;QAClG,YAAY,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;QACjD,YAAY,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,WAAW,CAAC;QACvE,YAAY,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC;QAChD,aAAa,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,mCAAmC,CAAC;QAClG,YAAY,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;QACnD,YAAY,CAAC,kBAAkB,EAAE,CAAC,iBAAiB,CAAC,EAAE,WAAW,CAAC;QAClE,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;QAC7C,YAAY,CAAC,aAAa,EAAE,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;QACzD,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;QAChD,YAAY,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC;QACpD;YACE,WAAW,EAAE,cAAc;YAC3B,WAAW,EAAE,CAAC,aAAa,CAAC;YAC5B,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,eAAe,CAAC;YACtF,MAAM,EAAE;gBACN,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,EAAE;gBAC1E;oBACE,SAAS,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,eAAe,CAAC;oBAC3E,IAAI,EAAE,oCAAoC;oBAC1C,MAAM,EAAE,cAAc;iBACvB;aACF;SACF;QACD,aAAa,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE,gBAAgB,EAAE,qCAAqC,CAAC;QACvG,YAAY,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,CAAC;QACvD,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;QAC3C,YAAY,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;QACjD,YAAY,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE,gBAAgB,CAAC;QAC/D,YAAY,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;QAChD,YAAY,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC;QAClD,YAAY,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC;QACpD,YAAY,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;QAChD,UAAU,EAAE;QACZ,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;QAC9C,aAAa,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC;QAClD,aAAa,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,gCAAgC,CAAC;QACnF,wBAAwB,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,EAAE,YAAY,EAAE,6CAA6C,CAAC;QACtH,wBAAwB,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,EAAE,oCAAoC,CAAC;QAChG,aAAa,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,+BAA+B,CAAC;QACpF,YAAY,CAAC,iBAAiB,EAAE,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC;QAC/D,wBAAwB,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,qCAAqC,CAAC;KAChG;CAC+C,CAAC","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.23.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"]}
|
package/dist/screen-flows.d.ts
CHANGED
|
@@ -322,6 +322,15 @@ export type CommentThreadScreenProps = Base & {
|
|
|
322
322
|
threadHeader?: ReactNode;
|
|
323
323
|
threadFooter?: ReactNode;
|
|
324
324
|
};
|
|
325
|
+
export type CommentThreadRowProps = Readonly<{
|
|
326
|
+
layoutStyle?: ScreenLayoutProps["layoutStyle"];
|
|
327
|
+
item: CommentThreadItem;
|
|
328
|
+
onLike(id: string): void;
|
|
329
|
+
onReply(id: string): void;
|
|
330
|
+
replyLabel: string;
|
|
331
|
+
}>;
|
|
332
|
+
/** Virtualized hosts reuse the same row as CommentThreadScreen; product slots add content, not a second layout. */
|
|
333
|
+
export declare function CommentThreadRow({ item, onLike, onReply, replyLabel, layoutStyle }: CommentThreadRowProps): import("react").JSX.Element;
|
|
325
334
|
/** Controlled thread: server ordering, permission checks and receipt-based draft clearing belong to the product. */
|
|
326
335
|
export declare function CommentThreadScreen({ items, expandedIds, onExpandedChange, onLike, onReply, replyLabel, repliesLabel, composer, threadHeader, threadFooter, ...screen }: CommentThreadScreenProps): import("react").JSX.Element;
|
|
327
336
|
export {};
|
|
@@ -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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
3
|
-
import { ScreenLayout } from "./screens.js";
|
|
3
|
+
import { CompositionLayout, ScreenLayout } from "./screens.js";
|
|
4
4
|
import { Button, IconButton } from "./actions.js";
|
|
5
5
|
import { Stack, Text, Grid, VisuallyHidden } from "./layout.js";
|
|
6
6
|
import { SearchField } from "./forms.js";
|
|
@@ -58,7 +58,7 @@ export function EditorScreen({ children, dirty, submitPlacement = "footer", subm
|
|
|
58
58
|
else
|
|
59
59
|
leave(); } }, secondary: true }), actions: submitPlacement === "header" ? _jsx(Action, { action: submitAction }) : screen.actions, footer: submitPlacement === "header" ? draftStatus : _jsxs(Stack, { gap: "sm", children: [draftStatus, _jsx(Action, { action: submitAction })] }), children: children }), _jsx(AlertDialog, { open: confirm && !cancelLocked, onOpenChange: setConfirm, request: { ...discard, mode: "confirm", onConfirm: leave } })] });
|
|
60
60
|
}
|
|
61
|
-
export function ProfileScreen({ summary, edit, children, accountActions, ...screen }) { return _jsx(ScreenLayout, { ...screen, children: _jsxs(Stack, { gap: "xl", children: [
|
|
61
|
+
export function ProfileScreen({ summary, edit, children, accountActions, ...screen }) { return _jsx(ScreenLayout, { ...screen, children: _jsxs(Stack, { gap: "xl", children: [_jsx(CompositionLayout, { footer: _jsx(Action, { action: edit, secondary: true }), children: summary }), children, accountActions] }) }); }
|
|
62
62
|
export function ModerationScreen({ reasonPicker, reasons, reason, onReasonChange, reasonLabel, children, submit, block, ...screen }) {
|
|
63
63
|
const [confirm, setConfirm] = useState(false);
|
|
64
64
|
const hasBlock = !!block;
|
|
@@ -302,6 +302,10 @@ export function OnboardingScreen({ steps, index, onIndexChange, nextLabel, backL
|
|
|
302
302
|
const pending = !!(complete.pending || skip?.pending);
|
|
303
303
|
return _jsx(ScreenLayout, { ...(layoutStyle === undefined ? {} : { layoutStyle }), title: step.title, description: step.description, actions: skip ? _jsx(Action, { action: { ...skip, disabled: !!(skip.disabled || pending) }, 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, disabled: !!(complete.disabled || pending) } : { label: nextLabel, disabled: pending, onAction: () => onIndexChange(index + 1) } }), !position.first ? _jsx(Action, { action: { label: backLabel, disabled: pending, onAction: () => onIndexChange(index - 1) }, secondary: true }) : null] }), children: step.content });
|
|
304
304
|
}
|
|
305
|
+
/** Virtualized hosts reuse the same row as CommentThreadScreen; product slots add content, not a second layout. */
|
|
306
|
+
export function CommentThreadRow({ item, onLike, onReply, replyLabel, layoutStyle }) {
|
|
307
|
+
return _jsxs(Stack, { axis: "inline", align: "start", gap: "sm", ...(layoutStyle === undefined ? {} : { layoutStyle }), children: [item.avatar, _jsxs(Stack, { gap: "xxs", layoutStyle: { flex: 1, minWidth: 0 }, children: [item.bodyText !== undefined ? _jsxs(Text, { children: [_jsx(Text, { emphasis: "strong", children: item.author }), " ", item.bodyText] }) : (item.author || item.timeLabel) ? _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [item.author ? _jsx(Text, { emphasis: "strong", children: item.author }) : null, item.timeLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: item.timeLabel }) : null] }) : null, item.body, _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [item.bodyText !== undefined && item.timeLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: item.timeLabel }) : null, item.likeCountLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: item.likeCountLabel }) : null, (item.canReply ?? item.parentId === null) ? _jsx(Button, { size: "small", tone: "ghost", disabled: item.replyDisabled ?? false, onClick: () => onReply(item.id), children: replyLabel }) : null] })] }), _jsxs(Stack, { axis: "inline", gap: "xxs", align: "center", layoutStyle: { flexShrink: 0 }, children: [item.likeAction !== undefined ? item.likeAction : _jsx(IconButton, { label: item.likeLabel, tone: "ghost", onClick: () => onLike(item.id), children: item.likeIcon }), item.actions] })] }, item.id);
|
|
308
|
+
}
|
|
305
309
|
/** Controlled thread: server ordering, permission checks and receipt-based draft clearing belong to the product. */
|
|
306
310
|
export function CommentThreadScreen({ items, expandedIds, onExpandedChange, onLike, onReply, replyLabel, repliesLabel, composer, threadHeader, threadFooter, ...screen }) {
|
|
307
311
|
validateCommentThread(items);
|
|
@@ -319,11 +323,7 @@ export function CommentThreadScreen({ items, expandedIds, onExpandedChange, onLi
|
|
|
319
323
|
repliesByParent.set(item.parentId, [item]);
|
|
320
324
|
}
|
|
321
325
|
}
|
|
322
|
-
|
|
323
|
-
// for reaction and its adjacent overflow action (Oct 7 user request). Keep
|
|
324
|
-
// legacy rich bodies intact; bodyText opts into that compact flow.
|
|
325
|
-
// Empty metadata must not reserve a line above the body: anonymous comments align with their avatar.
|
|
326
|
-
const row = (item) => _jsxs(Stack, { axis: "inline", align: "start", gap: "sm", children: [item.avatar, _jsxs(Stack, { gap: "xxs", layoutStyle: { flex: 1, minWidth: 0 }, children: [item.bodyText !== undefined ? _jsxs(Text, { children: [_jsx(Text, { emphasis: "strong", children: item.author }), " ", item.bodyText] }) : (item.author || item.timeLabel) ? _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [item.author ? _jsx(Text, { emphasis: "strong", children: item.author }) : null, item.timeLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: item.timeLabel }) : null] }) : null, item.body, _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [item.bodyText !== undefined && item.timeLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: item.timeLabel }) : null, item.likeCountLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: item.likeCountLabel }) : null, (item.canReply ?? item.parentId === null) ? _jsx(Button, { size: "small", tone: "ghost", disabled: item.replyDisabled ?? false, onClick: () => onReply(item.id), children: replyLabel }) : null] })] }), _jsxs(Stack, { axis: "inline", gap: "xxs", align: "center", layoutStyle: { flexShrink: 0 }, children: [item.likeAction !== undefined ? item.likeAction : _jsx(IconButton, { label: item.likeLabel, tone: "ghost", onClick: () => onLike(item.id), children: item.likeIcon }), item.actions] })] }, item.id);
|
|
326
|
+
const row = (item) => _jsx(CommentThreadRow, { item: item, onLike: onLike, onReply: onReply, replyLabel: replyLabel }, item.id);
|
|
327
327
|
// Product context belongs in the same scroll body as comments. Putting a tall
|
|
328
328
|
// overview in the fixed header forced a second scroll region in Spint (2026-10-08).
|
|
329
329
|
return _jsx(ScreenLayout, { ...screen, footer: !screen.state || screen.state.kind === "ready" || screen.state.kind === "empty" ? composer : null, children: _jsxs(Stack, { gap: "lg", children: [threadHeader, roots.map(item => { const replies = repliesByParent.get(item.id) ?? []; return _jsxs(Stack, { gap: "xs", children: [row(item), replies.length ? _jsxs(Stack, { gap: "md", layoutStyle: { marginInlineStart: screenPatternRecipe.sectionGap }, children: [_jsx(Button, { layoutStyle: { alignSelf: "flex-start" }, tone: "ghost", size: "small", "aria-expanded": expanded.has(item.id), onClick: () => onExpandedChange(item.id), children: repliesLabel(replies.length, expanded.has(item.id)) }), expanded.has(item.id) ? replies.map(row) : null] }) : null] }, item.id); }), threadFooter] }) });
|
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 CSSProperties, type KeyboardEvent, type ReactNode, type Ref, 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, resolveSearchDebounceMs, 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,buttonRef}:{action:ScreenFlowAction;secondary?:boolean;buttonRef?:Ref<HTMLButtonElement>}){return <Button ref={buttonRef} 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?:Pick<ScreenLayoutProps,\"title\"|\"state\"|\"stateAction\"|\"notice\"|\"titleVisibility\"|\"headerAlignment\"> & {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 // The retained host is a fallback when a virtualized list removes its focused item.\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){\n const target=returnFocus.current;\n if(target?.isConnected&&!target.closest(\"[hidden]\"))target.focus({preventScroll:true});\n // A retained trigger can also become disabled while detail is open.\n if(document.activeElement!==target)(listHost.current?.querySelector<HTMLElement>('[tabindex=\"0\"]')??listHost.current)?.focus({preventScroll:true});\n }\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} tabIndex={-1} 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} {...(detail.titleVisibility === undefined ? {} : { titleVisibility: detail.titleVisibility })} {...(detail.headerAlignment === undefined ? {} : { headerAlignment: detail.headerAlignment })} {...(detail.state === undefined ? {} : {state:detail.state})} stateAction={detail.stateAction} notice={detail.notice} 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 const cancelLocked=!!(cancel.disabled||cancel.pending||submit.pending);\n const submitAction={...submit,disabled:!!(submit.disabled||screen.state&&screen.state.kind!==\"ready\")};\n // A prompt opened before an external save must not bypass the current leave lock\n // or reappear once the save finishes. Keep the draft mounted throughout.\n useEffect(()=>{if(cancelLocked)setConfirm(false);},[cancelLocked]);\n // Preserve an async host result so AlertDialog can retain failure and retry.\n const leave=()=>{if(!cancelLocked)return cancel.onAction();};\n return <><ScreenLayout {...screen}\n leading={<Action action={{...cancel,disabled:cancelLocked,onAction:()=>{if(cancelLocked)return;if(dirty)setConfirm(true);else leave();}}} secondary/>}\n actions={submitPlacement===\"header\"?<Action action={submitAction}/>:screen.actions}\n footer={submitPlacement===\"header\"?draftStatus:<Stack gap=\"sm\">{draftStatus}<Action action={submitAction}/></Stack>}\n >{children}</ScreenLayout><AlertDialog open={confirm&&!cancelLocked} onOpenChange={setConfirm} request={{...discard,mode:\"confirm\",onConfirm:leave}}/></>;\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){\n const [confirm,setConfirm]=useState(false);\n const hasBlock=!!block;\n // Withdrawing the action ends that confirmation session; a later action needs\n // a new explicit press even if the screen itself stays mounted.\n useEffect(()=>{if(!hasBlock)setConfirm(false);},[hasBlock]);\n 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){\n const grid = useRef<HTMLDivElement>(null), addButton = useRef<HTMLButtonElement>(null);\n const focusedItem = useRef<{node:HTMLElement;id:string;index:number;body:HTMLElement|null}|null>(null);\n useLayoutEffect(() => {\n const previous = focusedItem.current, host = grid.current;\n if (!previous) return;\n const active = document.activeElement;\n if (!host) {\n focusedItem.current = null;\n // Empty-state replacement unmounts the grid; the ordinary last-removal\n // destination still applies. Other state/library replacements own their focus.\n if (!previous.node.isConnected && !items.length && screen.state?.kind === \"empty\" && library == null\n && (active === document.body || active === previous.body) && !addButton.current?.disabled) addButton.current?.focus({preventScroll:true});\n return;\n }\n const index = items.findIndex(item => item.descriptor.id === previous.id), moved = index >= 0 && index !== previous.index;\n if (index >= 0) previous.index = index;\n const reveal = (node:HTMLElement) => {\n const body = previous.body;\n if (!body?.contains(node) || body.dataset.scroll !== \"screen\") return;\n const bounds = node.getBoundingClientRect(), clip = body.getBoundingClientRect();\n // Scroll only the owned body, by the minimum needed to keep the action visible.\n if (bounds.top < clip.top) body.scrollTop += Math.floor(bounds.top - clip.top);\n else if (bounds.bottom > clip.bottom) body.scrollTop += Math.ceil(bounds.bottom - clip.bottom);\n };\n const disabled = previous.node.matches(\":disabled\");\n if (active !== document.body && active !== previous.body && !(active === previous.node && disabled)) {\n if (active === previous.node && moved) reveal(previous.node);\n return;\n }\n // A keyed reorder may detach a focused node; a boundary move may disable it.\n // Recover only focus owned by this grid, after the product accepts the change.\n const id = index < 0 ? items[Math.min(previous.index, items.length - 1)]?.descriptor.id : previous.id;\n const row = Array.from(host.querySelectorAll<HTMLElement>(\"[data-hjm-media-item]\")).find(node => node.dataset.hjmMediaItem === id);\n const target = index >= 0 && previous.node.isConnected && !disabled ? previous.node\n : row?.querySelector<HTMLButtonElement>(index < 0 ? '[data-media-action=\"remove\"]' : 'button[data-media-action]:not(:disabled)')\n ?? (!addButton.current?.disabled ? addButton.current : null);\n focusedItem.current = null;\n if (target) { target.focus({preventScroll:true}); reveal(target); }\n });\n return <ScreenLayout {...screen} actions={<Action action={add} secondary buttonRef={addButton}/>} footer={<Stack gap=\"sm\">{selectionSummary}<Action action={done}/></Stack>}>\n {library??<Grid ref={grid} columns={{compact:2,expanded:3}} gap={{compact:\"md\"}}\n onFocusCapture={event => {\n const node = event.target as HTMLElement, row = node.closest<HTMLElement>(\"[data-hjm-media-item]\");\n const id = row?.dataset.hjmMediaItem;\n if (id !== undefined) focusedItem.current = {node,id,index:items.findIndex(item => item.descriptor.id === id),body:node.closest<HTMLElement>(\".hjm-screen__body\")};\n }}\n onBlurCapture={event => {\n const node = event.target as HTMLElement;\n // Explicit blur/outside focus relinquishes ownership; DOM removal and a newly\n // disabled move button retain it until the layout effect chooses a successor.\n if (event.relatedTarget ? !event.currentTarget.contains(event.relatedTarget as Node) : node.isConnected && !node.matches(\":disabled\")) focusedItem.current = null;\n }}>\n {items.map((item,index)=><Stack key={item.descriptor.id} data-hjm-media-item={item.descriptor.id} gap=\"xs\">\n {item.preview}<UploadItem descriptor={item.descriptor} labels={labels} onRetry={onRetry} onCancel={onCancel}/>\n <Stack axis=\"inline\" gap=\"xxs\" layoutStyle={{flexWrap:\"wrap\"}}>\n <Button data-media-action=\"up\" aria-label={moveUpLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===0} onClick={()=>onMove(item.descriptor.id,-1)}>{actionLabels.moveUp}</Button>\n <Button data-media-action=\"down\" aria-label={moveDownLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===items.length-1} onClick={()=>onMove(item.descriptor.id,1)}>{actionLabels.moveDown}</Button>\n <Button data-media-action=\"remove\" aria-label={removeLabel(item)} size=\"small\" tone=\"ghost\" onClick={()=>onRemove(item.descriptor.id)}>{actionLabels.remove}</Button>\n </Stack>\n </Stack>)}\n </Grid>}\n </ScreenLayout>;\n}\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 /** Hide the visual total without losing loading, empty-state or announcement behavior. */\n countVisibility?: \"visible\" | \"hidden\";\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\" && summary.countVisibility !== \"hidden\";\n // A count-free search still owns its sorting action; do not hide it with the total.\n const showSort = summary && cause === \"none\" && sort;\n if (!summary?.notice && !showCount && !showSort && !applied?.items.length) return null;\n return <Stack gap=\"sm\">\n {summary?.notice}\n {showCount || showSort ? <Stack axis=\"inline\" justify={showCount ? \"between\" : \"end\"} align=\"center\" gap=\"sm\" wrap>\n {showCount ? (summary!.count === null ? <Skeleton shape=\"text\" width=\"30%\" /> : <Text tone=\"muted\">{summary!.countLabel(summary!.count)}</Text>) : null}\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={summary.loadingLabel} {...(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,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 searchDelay=resolveSearchDebounceMs(debounceMs);\n const callback=useRef(onSearch);callback.current=onSearch;\n useEffect(()=>{const controller=new AbortController();const timer=setTimeout(()=>callback.current(query,{signal:controller.signal}),searchDelay);return()=>{clearTimeout(timer);controller.abort();};},[query,searchDelay]);\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]!;\n // Completion and skip persist the same flow: keep navigation stable until the receipt.\n const pending=!!(complete.pending||skip?.pending);\n return <ScreenLayout {...(layoutStyle===undefined?{}:{layoutStyle})} title={step.title} description={step.description} actions={skip?<Action action={{...skip,disabled:!!(skip.disabled||pending)}} secondary/>:null} notice={<Text variant=\"caption\" tone=\"muted\">{progressLabel(index+1,steps.length)}</Text>} footer={<Stack gap=\"sm\"><Action action={position.last?{...complete,disabled:!!(complete.disabled||pending)}:{label:nextLabel,disabled:pending,onAction:()=>onIndexChange(index+1)}}/>{!position.first?<Action action={{label:backLabel,disabled:pending,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;threadHeader?: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,threadHeader,threadFooter,...screen}:CommentThreadScreenProps){\n validateCommentThread(items);\n // Index replies once; rescanning every item for each root makes long threads quadratic.\n const roots:CommentThreadItem[]=[], repliesByParent=new Map<string,CommentThreadItem[]>();\n const expanded=new Set(expandedIds);\n for(const item of items){\n if(item.parentId===null)roots.push(item);\n else {const siblings=repliesByParent.get(item.parentId);if(siblings)siblings.push(item);else repliesByParent.set(item.parentId,[item]);}\n }\n // The supplied reference joins the author to the first body line and reserves the right edge\n // for reaction and its adjacent overflow action (Oct 7 user request). Keep\n // legacy rich bodies intact; bodyText opts into that compact flow.\n // Empty metadata must not reserve a line above the body: anonymous comments align with their avatar.\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>:(item.author||item.timeLabel)?<Stack axis=\"inline\" gap=\"sm\" align=\"center\" layoutStyle={{flexWrap:\"wrap\"}}>{item.author?<Text emphasis=\"strong\">{item.author}</Text>:null}{item.timeLabel?<Text variant=\"caption\" tone=\"muted\">{item.timeLabel}</Text>:null}</Stack>:null}\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></Stack><Stack axis=\"inline\" gap=\"xxs\" align=\"center\" layoutStyle={{flexShrink:0}}>{item.likeAction!==undefined?item.likeAction:<IconButton label={item.likeLabel} tone=\"ghost\" onClick={()=>onLike(item.id)}>{item.likeIcon}</IconButton>}{item.actions}</Stack></Stack>;\n // Product context belongs in the same scroll body as comments. Putting a tall\n // overview in the fixed header forced a second scroll region in Spint (2026-10-08).\n return <ScreenLayout {...screen} footer={!screen.state||screen.state.kind===\"ready\"||screen.state.kind===\"empty\"?composer:null}><Stack gap=\"lg\">{threadHeader}{roots.map(item=>{const replies=repliesByParent.get(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={expanded.has(item.id)} onClick={()=>onExpandedChange(item.id)}>{repliesLabel(replies.length,expanded.has(item.id))}</Button>{expanded.has(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 Ref, type RefObject } from \"react\";\nimport { CompositionLayout, 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, resolveSearchDebounceMs, 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,buttonRef}:{action:ScreenFlowAction;secondary?:boolean;buttonRef?:Ref<HTMLButtonElement>}){return <Button ref={buttonRef} 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?:Pick<ScreenLayoutProps,\"title\"|\"state\"|\"stateAction\"|\"notice\"|\"titleVisibility\"|\"headerAlignment\"> & {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 // The retained host is a fallback when a virtualized list removes its focused item.\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){\n const target=returnFocus.current;\n if(target?.isConnected&&!target.closest(\"[hidden]\"))target.focus({preventScroll:true});\n // A retained trigger can also become disabled while detail is open.\n if(document.activeElement!==target)(listHost.current?.querySelector<HTMLElement>('[tabindex=\"0\"]')??listHost.current)?.focus({preventScroll:true});\n }\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} tabIndex={-1} 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} {...(detail.titleVisibility === undefined ? {} : { titleVisibility: detail.titleVisibility })} {...(detail.headerAlignment === undefined ? {} : { headerAlignment: detail.headerAlignment })} {...(detail.state === undefined ? {} : {state:detail.state})} stateAction={detail.stateAction} notice={detail.notice} 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 const cancelLocked=!!(cancel.disabled||cancel.pending||submit.pending);\n const submitAction={...submit,disabled:!!(submit.disabled||screen.state&&screen.state.kind!==\"ready\")};\n // A prompt opened before an external save must not bypass the current leave lock\n // or reappear once the save finishes. Keep the draft mounted throughout.\n useEffect(()=>{if(cancelLocked)setConfirm(false);},[cancelLocked]);\n // Preserve an async host result so AlertDialog can retain failure and retry.\n const leave=()=>{if(!cancelLocked)return cancel.onAction();};\n return <><ScreenLayout {...screen}\n leading={<Action action={{...cancel,disabled:cancelLocked,onAction:()=>{if(cancelLocked)return;if(dirty)setConfirm(true);else leave();}}} secondary/>}\n actions={submitPlacement===\"header\"?<Action action={submitAction}/>:screen.actions}\n footer={submitPlacement===\"header\"?draftStatus:<Stack gap=\"sm\">{draftStatus}<Action action={submitAction}/></Stack>}\n >{children}</ScreenLayout><AlertDialog open={confirm&&!cancelLocked} onOpenChange={setConfirm} request={{...discard,mode:\"confirm\",onConfirm:leave}}/></>;\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\"><CompositionLayout footer={<Action action={edit} secondary/>}>{summary}</CompositionLayout>{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){\n const [confirm,setConfirm]=useState(false);\n const hasBlock=!!block;\n // Withdrawing the action ends that confirmation session; a later action needs\n // a new explicit press even if the screen itself stays mounted.\n useEffect(()=>{if(!hasBlock)setConfirm(false);},[hasBlock]);\n 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){\n const grid = useRef<HTMLDivElement>(null), addButton = useRef<HTMLButtonElement>(null);\n const focusedItem = useRef<{node:HTMLElement;id:string;index:number;body:HTMLElement|null}|null>(null);\n useLayoutEffect(() => {\n const previous = focusedItem.current, host = grid.current;\n if (!previous) return;\n const active = document.activeElement;\n if (!host) {\n focusedItem.current = null;\n // Empty-state replacement unmounts the grid; the ordinary last-removal\n // destination still applies. Other state/library replacements own their focus.\n if (!previous.node.isConnected && !items.length && screen.state?.kind === \"empty\" && library == null\n && (active === document.body || active === previous.body) && !addButton.current?.disabled) addButton.current?.focus({preventScroll:true});\n return;\n }\n const index = items.findIndex(item => item.descriptor.id === previous.id), moved = index >= 0 && index !== previous.index;\n if (index >= 0) previous.index = index;\n const reveal = (node:HTMLElement) => {\n const body = previous.body;\n if (!body?.contains(node) || body.dataset.scroll !== \"screen\") return;\n const bounds = node.getBoundingClientRect(), clip = body.getBoundingClientRect();\n // Scroll only the owned body, by the minimum needed to keep the action visible.\n if (bounds.top < clip.top) body.scrollTop += Math.floor(bounds.top - clip.top);\n else if (bounds.bottom > clip.bottom) body.scrollTop += Math.ceil(bounds.bottom - clip.bottom);\n };\n const disabled = previous.node.matches(\":disabled\");\n if (active !== document.body && active !== previous.body && !(active === previous.node && disabled)) {\n if (active === previous.node && moved) reveal(previous.node);\n return;\n }\n // A keyed reorder may detach a focused node; a boundary move may disable it.\n // Recover only focus owned by this grid, after the product accepts the change.\n const id = index < 0 ? items[Math.min(previous.index, items.length - 1)]?.descriptor.id : previous.id;\n const row = Array.from(host.querySelectorAll<HTMLElement>(\"[data-hjm-media-item]\")).find(node => node.dataset.hjmMediaItem === id);\n const target = index >= 0 && previous.node.isConnected && !disabled ? previous.node\n : row?.querySelector<HTMLButtonElement>(index < 0 ? '[data-media-action=\"remove\"]' : 'button[data-media-action]:not(:disabled)')\n ?? (!addButton.current?.disabled ? addButton.current : null);\n focusedItem.current = null;\n if (target) { target.focus({preventScroll:true}); reveal(target); }\n });\n return <ScreenLayout {...screen} actions={<Action action={add} secondary buttonRef={addButton}/>} footer={<Stack gap=\"sm\">{selectionSummary}<Action action={done}/></Stack>}>\n {library??<Grid ref={grid} columns={{compact:2,expanded:3}} gap={{compact:\"md\"}}\n onFocusCapture={event => {\n const node = event.target as HTMLElement, row = node.closest<HTMLElement>(\"[data-hjm-media-item]\");\n const id = row?.dataset.hjmMediaItem;\n if (id !== undefined) focusedItem.current = {node,id,index:items.findIndex(item => item.descriptor.id === id),body:node.closest<HTMLElement>(\".hjm-screen__body\")};\n }}\n onBlurCapture={event => {\n const node = event.target as HTMLElement;\n // Explicit blur/outside focus relinquishes ownership; DOM removal and a newly\n // disabled move button retain it until the layout effect chooses a successor.\n if (event.relatedTarget ? !event.currentTarget.contains(event.relatedTarget as Node) : node.isConnected && !node.matches(\":disabled\")) focusedItem.current = null;\n }}>\n {items.map((item,index)=><Stack key={item.descriptor.id} data-hjm-media-item={item.descriptor.id} gap=\"xs\">\n {item.preview}<UploadItem descriptor={item.descriptor} labels={labels} onRetry={onRetry} onCancel={onCancel}/>\n <Stack axis=\"inline\" gap=\"xxs\" layoutStyle={{flexWrap:\"wrap\"}}>\n <Button data-media-action=\"up\" aria-label={moveUpLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===0} onClick={()=>onMove(item.descriptor.id,-1)}>{actionLabels.moveUp}</Button>\n <Button data-media-action=\"down\" aria-label={moveDownLabel(item)} size=\"small\" tone=\"ghost\" disabled={index===items.length-1} onClick={()=>onMove(item.descriptor.id,1)}>{actionLabels.moveDown}</Button>\n <Button data-media-action=\"remove\" aria-label={removeLabel(item)} size=\"small\" tone=\"ghost\" onClick={()=>onRemove(item.descriptor.id)}>{actionLabels.remove}</Button>\n </Stack>\n </Stack>)}\n </Grid>}\n </ScreenLayout>;\n}\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 /** Hide the visual total without losing loading, empty-state or announcement behavior. */\n countVisibility?: \"visible\" | \"hidden\";\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\" && summary.countVisibility !== \"hidden\";\n // A count-free search still owns its sorting action; do not hide it with the total.\n const showSort = summary && cause === \"none\" && sort;\n if (!summary?.notice && !showCount && !showSort && !applied?.items.length) return null;\n return <Stack gap=\"sm\">\n {summary?.notice}\n {showCount || showSort ? <Stack axis=\"inline\" justify={showCount ? \"between\" : \"end\"} align=\"center\" gap=\"sm\" wrap>\n {showCount ? (summary!.count === null ? <Skeleton shape=\"text\" width=\"30%\" /> : <Text tone=\"muted\">{summary!.countLabel(summary!.count)}</Text>) : null}\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={summary.loadingLabel} {...(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,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 searchDelay=resolveSearchDebounceMs(debounceMs);\n const callback=useRef(onSearch);callback.current=onSearch;\n useEffect(()=>{const controller=new AbortController();const timer=setTimeout(()=>callback.current(query,{signal:controller.signal}),searchDelay);return()=>{clearTimeout(timer);controller.abort();};},[query,searchDelay]);\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]!;\n // Completion and skip persist the same flow: keep navigation stable until the receipt.\n const pending=!!(complete.pending||skip?.pending);\n return <ScreenLayout {...(layoutStyle===undefined?{}:{layoutStyle})} title={step.title} description={step.description} actions={skip?<Action action={{...skip,disabled:!!(skip.disabled||pending)}} secondary/>:null} notice={<Text variant=\"caption\" tone=\"muted\">{progressLabel(index+1,steps.length)}</Text>} footer={<Stack gap=\"sm\"><Action action={position.last?{...complete,disabled:!!(complete.disabled||pending)}:{label:nextLabel,disabled:pending,onAction:()=>onIndexChange(index+1)}}/>{!position.first?<Action action={{label:backLabel,disabled:pending,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;threadHeader?:ReactNode;threadFooter?:ReactNode};\nexport type CommentThreadRowProps = Readonly<{ layoutStyle?: ScreenLayoutProps[\"layoutStyle\"]; item: CommentThreadItem; onLike(id: string): void; onReply(id: string): void; replyLabel: string }>;\n/** Virtualized hosts reuse the same row as CommentThreadScreen; product slots add content, not a second layout. */\nexport function CommentThreadRow({ item, onLike, onReply, replyLabel, layoutStyle }: CommentThreadRowProps) {\n return <Stack key={item.id} axis=\"inline\" align=\"start\" gap=\"sm\" {...(layoutStyle === undefined ? {} : {layoutStyle})}>{item.avatar}<Stack gap=\"xxs\" layoutStyle={{flex:1,minWidth:0}}>\n {item.bodyText!==undefined?<Text><Text emphasis=\"strong\">{item.author}</Text>{\" \"}{item.bodyText}</Text>:(item.author||item.timeLabel)?<Stack axis=\"inline\" gap=\"sm\" align=\"center\" layoutStyle={{flexWrap:\"wrap\"}}>{item.author?<Text emphasis=\"strong\">{item.author}</Text>:null}{item.timeLabel?<Text variant=\"caption\" tone=\"muted\">{item.timeLabel}</Text>:null}</Stack>:null}\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></Stack><Stack axis=\"inline\" gap=\"xxs\" align=\"center\" layoutStyle={{flexShrink:0}}>{item.likeAction!==undefined?item.likeAction:<IconButton label={item.likeLabel} tone=\"ghost\" onClick={()=>onLike(item.id)}>{item.likeIcon}</IconButton>}{item.actions}</Stack></Stack>;\n}\n\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,threadHeader,threadFooter,...screen}:CommentThreadScreenProps){\n validateCommentThread(items);\n // Index replies once; rescanning every item for each root makes long threads quadratic.\n const roots:CommentThreadItem[]=[], repliesByParent=new Map<string,CommentThreadItem[]>();\n const expanded=new Set(expandedIds);\n for(const item of items){\n if(item.parentId===null)roots.push(item);\n else {const siblings=repliesByParent.get(item.parentId);if(siblings)siblings.push(item);else repliesByParent.set(item.parentId,[item]);}\n }\n const row=(item:CommentThreadItem)=><CommentThreadRow key={item.id} item={item} onLike={onLike} onReply={onReply} replyLabel={replyLabel}/>;\n // Product context belongs in the same scroll body as comments. Putting a tall\n // overview in the fixed header forced a second scroll region in Spint (2026-10-08).\n return <ScreenLayout {...screen} footer={!screen.state||screen.state.kind===\"ready\"||screen.state.kind===\"empty\"?composer:null}><Stack gap=\"lg\">{threadHeader}{roots.map(item=>{const replies=repliesByParent.get(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={expanded.has(item.id)} onClick={()=>onExpandedChange(item.id)}>{repliesLabel(replies.length,expanded.has(item.id))}</Button>{expanded.has(item.id)?replies.map(row):null}</Stack>:null}</Stack>;})}{threadFooter}</Stack></ScreenLayout>;\n}\n"]}
|
package/dist/screens.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ import { type ListRowProps } from "./display.js";
|
|
|
7
7
|
import type { HjmCompositionStyleProp } from "./composition-style.js";
|
|
8
8
|
export type ScreenLayoutProps = Readonly<{
|
|
9
9
|
title: string;
|
|
10
|
+
/** The shared header owns badge placement; the product supplies its meaning and label. */
|
|
11
|
+
titleBadge?: ReactNode;
|
|
10
12
|
/** Hide redundant route names while retaining descriptions and a named screen. */
|
|
11
13
|
titleVisibility?: "visible" | "hidden";
|
|
12
14
|
headerAlignment?: "start" | "center";
|
|
@@ -34,7 +36,7 @@ export type ScreenLayoutProps = Readonly<{
|
|
|
34
36
|
layoutStyle?: HjmCompositionStyleProp;
|
|
35
37
|
}>;
|
|
36
38
|
/** Shared screen shell. Routing, data, permission checks and mutation state remain product-owned. */
|
|
37
|
-
export declare function ScreenLayout({ title, titleVisibility, headerAlignment, header, contentInset, presentation: suppliedPresentation, description, leading, actions, notice, footer, state, stateAction, children, scroll, as: Element, className, layoutStyle }: ScreenLayoutProps): import("react").JSX.Element;
|
|
39
|
+
export declare function ScreenLayout({ title, titleBadge, titleVisibility, headerAlignment, header, contentInset, presentation: suppliedPresentation, description, leading, actions, notice, footer, state, stateAction, children, scroll, as: Element, className, layoutStyle }: ScreenLayoutProps): import("react").JSX.Element;
|
|
38
40
|
export type SettingsScreenSection = Readonly<{
|
|
39
41
|
id: string;
|
|
40
42
|
title: string;
|
|
@@ -128,4 +130,19 @@ export type ChatMessageProps = ChatMessageDescriptor & Readonly<{
|
|
|
128
130
|
layoutStyle?: HjmCompositionStyleProp;
|
|
129
131
|
}>;
|
|
130
132
|
export declare function ChatMessage({ direction, author, timestamp, timestampPresentation, bubbleTail, deliveryLabel, avatar, reply, actions, replyAction, replyLink, reactions, children, interactiveContent, layoutStyle }: ChatMessageProps): import("react").JSX.Element;
|
|
133
|
+
/** Shared structure for embedded compositions. The parent supplies size; this never creates a second scroller. */
|
|
134
|
+
export type CompositionLayoutProps = Readonly<{
|
|
135
|
+
title?: string;
|
|
136
|
+
description?: string;
|
|
137
|
+
badge?: ReactNode;
|
|
138
|
+
leading?: ReactNode;
|
|
139
|
+
actions?: ReactNode;
|
|
140
|
+
notice?: ReactNode;
|
|
141
|
+
children?: ReactNode;
|
|
142
|
+
footer?: ReactNode;
|
|
143
|
+
state?: ScreenContentState;
|
|
144
|
+
stateAction?: ReactNode;
|
|
145
|
+
layoutStyle?: HjmCompositionStyleProp;
|
|
146
|
+
}>;
|
|
147
|
+
export declare function CompositionLayout({ title, description, badge, leading, actions, notice, children, footer, state, stateAction, layoutStyle }: CompositionLayoutProps): import("react").JSX.Element;
|
|
131
148
|
//# sourceMappingURL=screens.d.ts.map
|
package/dist/screens.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../src/screens.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE1G,OAAO,EAA8B,KAAK,+BAA+B,EAAE,MAAM,+CAA+C,CAAC;AAEjI,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAIhE,OAAO,EAA4C,KAAK,GAAG,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC3F,OAAO,EAA6G,KAAK,2BAA2B,EAAkD,KAAK,qBAAqB,EAAE,KAAK,yBAAyB,EAAE,KAAK,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAI3U,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,eAAe,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACvC,eAAe,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACrC,8EAA8E;IAC9E,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAClC,4DAA4D;IAC5D,YAAY,CAAC,EAAE,+BAA+B,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC,CAAC;AAEH,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,eAA2B,EAAE,eAAyB,EAAE,MAAM,EAAE,YAAwB,EAAE,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAyB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAiB,EAAE,EAAE,EAAE,OAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,iBAAiB,+
|
|
1
|
+
{"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../src/screens.tsx"],"names":[],"mappings":"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"}
|
package/dist/screens.js
CHANGED
|
@@ -14,7 +14,7 @@ import { Section, Stack, Text } from "./layout.js";
|
|
|
14
14
|
import { ListRow } from "./display.js";
|
|
15
15
|
import { classNames, useDesignProfileDefaults } from "./internal.js";
|
|
16
16
|
/** Shared screen shell. Routing, data, permission checks and mutation state remain product-owned. */
|
|
17
|
-
export function ScreenLayout({ title, titleVisibility = "visible", headerAlignment = "start", header, contentInset = "default", presentation: suppliedPresentation, description, leading, actions, notice, footer, state = { kind: "ready" }, stateAction, children, scroll = "screen", as: Element = "main", className, layoutStyle }) {
|
|
17
|
+
export function ScreenLayout({ title, titleBadge, titleVisibility = "visible", headerAlignment = "start", header, contentInset = "default", presentation: suppliedPresentation, description, leading, actions, notice, footer, state = { kind: "ready" }, stateAction, children, scroll = "screen", as: Element = "main", className, layoutStyle }) {
|
|
18
18
|
const id = useId();
|
|
19
19
|
const showHeader = titleVisibility === "visible" || !!description || !!leading || !!actions;
|
|
20
20
|
// Screens historically work with the stylesheet alone. Optional context keeps
|
|
@@ -39,7 +39,7 @@ export function ScreenLayout({ title, titleVisibility = "visible", headerAlignme
|
|
|
39
39
|
lastBodyFocus.current = null;
|
|
40
40
|
});
|
|
41
41
|
const recipe = screenPatternRecipe;
|
|
42
|
-
return _jsxs(Element, { "aria-labelledby": header || titleVisibility === "hidden" ? undefined : id, "aria-label": header || titleVisibility === "hidden" ? title : undefined, "data-content-inset": contentInset, "data-presentation": presentation, className: classNames("hjm-screen", className), style: { backgroundColor: designProfile?.material.canvas ? "transparent" : undefined, "--hjm-screen-width": `${profileLayout?.maxWidth ?? recipe.maxWidth}px`, "--hjm-screen-padding": `${contentInset === "none" ? 0 : recipe.padding}px`, "--hjm-screen-gap": `${profileLayout?.gap ?? recipe.sectionGap}px`, "--hjm-screen-item-gap": `${recipe.itemGap}px`, "--hjm-screen-state-gap": `${recipe.stateGap}px`, "--hjm-screen-header-min": `${recipe.headerMinWidth}px`, ...layoutStyle }, children: [header ?? (showHeader ? headerAlignment === "center" ? _jsxs("header", { className: "hjm-screen__header", style: { display: "grid", gridTemplateColumns: "minmax(0, 1fr) minmax(0, 2fr) minmax(0, 1fr)", alignItems: "center" }, children: [_jsx("div", { children: leading }), _jsxs("div", { className: "hjm-screen__heading", style: { textAlign: "center", minWidth: 0 }, children: [titleVisibility === "visible" && _jsx(Heading, { level: "level3", semanticLevel: 1, id: id, children: title }), description ? _jsx(Text, { as: "p", tone: "muted", children: description }) : null] }), _jsx("div", { style: { justifySelf: "end" }, children: actions })] }) : _jsxs("header", { className: "hjm-screen__header", style: profileLayout ? { flexDirection: profileLayout.headerAxis, alignItems: profileLayout.centered ? "center" : undefined, textAlign: profileLayout.centered ? "center" : undefined } : undefined, children: [leading, _jsxs("div", { className: "hjm-screen__heading", children: [titleVisibility === "visible" && _jsx(Heading, { level: "level3", semanticLevel: 1, id: id, children: title }), description ? _jsx(Text, { as: "p", tone: "muted", children: description }) : null] }), actions] }) : null), notice ? _jsx("div", { className: "hjm-screen__notice", children: notice }) : null, _jsx("div", { ref: bodyRef, tabIndex: bodyScroll === "content" ? -1 : 0, onFocusCapture: event => { lastBodyFocus.current = event.target; }, onBlurCapture: event => {
|
|
42
|
+
return _jsxs(Element, { "aria-labelledby": header || titleVisibility === "hidden" ? undefined : id, "aria-label": header || titleVisibility === "hidden" ? title : undefined, "data-content-inset": contentInset, "data-presentation": presentation, className: classNames("hjm-screen", className), style: { backgroundColor: designProfile?.material.canvas ? "transparent" : undefined, "--hjm-screen-width": `${profileLayout?.maxWidth ?? recipe.maxWidth}px`, "--hjm-screen-padding": `${contentInset === "none" ? 0 : recipe.padding}px`, "--hjm-screen-gap": `${profileLayout?.gap ?? recipe.sectionGap}px`, "--hjm-screen-item-gap": `${recipe.itemGap}px`, "--hjm-screen-state-gap": `${recipe.stateGap}px`, "--hjm-screen-header-min": `${recipe.headerMinWidth}px`, ...layoutStyle }, children: [header ?? (showHeader ? headerAlignment === "center" ? _jsxs("header", { className: "hjm-screen__header", style: { display: "grid", gridTemplateColumns: "minmax(0, 1fr) minmax(0, 2fr) minmax(0, 1fr)", alignItems: "center" }, children: [_jsx("div", { children: leading }), _jsxs("div", { className: "hjm-screen__heading", style: { textAlign: "center", minWidth: 0 }, children: [titleVisibility === "visible" && _jsxs(Stack, { axis: "inline", gap: "xs", align: "center", justify: "center", wrap: true, children: [_jsx(Heading, { level: "level3", semanticLevel: 1, id: id, children: title }), titleBadge] }), description ? _jsx(Text, { as: "p", tone: "muted", children: description }) : null] }), _jsx("div", { style: { justifySelf: "end" }, children: actions })] }) : _jsxs("header", { className: "hjm-screen__header", style: profileLayout ? { flexDirection: profileLayout.headerAxis, alignItems: profileLayout.centered ? "center" : undefined, textAlign: profileLayout.centered ? "center" : undefined } : undefined, children: [leading, _jsxs("div", { className: "hjm-screen__heading", children: [titleVisibility === "visible" && _jsxs(Stack, { axis: "inline", gap: "xs", align: "center", justify: profileLayout?.centered ? "center" : "start", wrap: true, children: [_jsx(Heading, { level: "level3", semanticLevel: 1, id: id, children: title }), titleBadge] }), description ? _jsx(Text, { as: "p", tone: "muted", children: description }) : null] }), actions] }) : null), notice ? _jsx("div", { className: "hjm-screen__notice", children: notice }) : null, _jsx("div", { ref: bodyRef, tabIndex: bodyScroll === "content" ? -1 : 0, onFocusCapture: event => { lastBodyFocus.current = event.target; }, onBlurCapture: event => {
|
|
43
43
|
// A connected input blurred to the document intentionally relinquishes
|
|
44
44
|
// focus too; only removal of the currently focused node needs recovery.
|
|
45
45
|
if (event.relatedTarget ? !event.currentTarget.contains(event.relatedTarget) : event.target.isConnected) {
|
|
@@ -111,4 +111,8 @@ export function ChatMessage({ direction, author, timestamp, timestampPresentatio
|
|
|
111
111
|
finish(); }, onPointerLeave: event => { if (start.current?.pointerId === event.pointerId)
|
|
112
112
|
finish(); }, style: { ...layoutStyle, position: "relative", overflow: "hidden", paddingInline: bubbleTail ? "var(--hjm-space-xs)" : undefined, touchAction: revealTime || replyAction ? "pan-y" : undefined }, "aria-label": author, children: [revealTime ? _jsx("time", { style: { position: "absolute", ...(direction === "outgoing" ? { right: 0, justifyContent: "flex-end" } : { left: 0 }), top: 0, bottom: 0, width: 80, display: "flex", alignItems: "center", opacity: offset !== 0 ? 1 : 0, pointerEvents: "none" }, children: _jsx(Text, { variant: "caption", tone: "muted", children: timestamp }) }) : null, _jsxs("div", { className: "hjm-chat-message", style: { transform: `translateX(${offset}px)`, transition: start.current || theme?.environment.reducedMotion ? "none" : "transform var(--hjm-motion-normal, 200ms) ease-out", "--hjm-message-max-width": screenPatternRecipe.messageMaxWidth }, "data-direction": direction, "data-tail": bubbleTail || undefined, children: [avatar ? _jsx("div", { className: "hjm-chat-message__avatar", children: avatar }) : null, _jsxs("div", { className: "hjm-chat-message__content", children: [author ? _jsx(Text, { variant: "caption", tone: "muted", children: author }) : null, reply && replyLink ? _jsx(Button, { tone: "ghost", "aria-label": replyLink.label, onClick: replyLink.onPress, children: reply }) : null, reactions ? _jsxs(MessageReactions, { ...reactions, interactiveContent: interactiveContent, children: [reply && !replyLink ? _jsx("div", { className: "hjm-chat-message__reply", children: reply }) : null, children] }) : _jsxs("div", { className: "hjm-chat-message__bubble", children: [reply && !replyLink ? _jsx("div", { className: "hjm-chat-message__reply", children: reply }) : null, children] }), (!revealTime && timestamp) || deliveryLabel || actions ? _jsxs("div", { className: "hjm-chat-message__meta", children: [(!revealTime && timestamp) || deliveryLabel ? _jsx(Text, { variant: "caption", tone: "muted", children: [revealTime ? "" : timestamp, deliveryLabel].filter(Boolean).join(" · ") }) : null, actions] }) : null] })] })] });
|
|
113
113
|
}
|
|
114
|
+
export function CompositionLayout({ title, description, badge, leading, actions, notice, children, footer, state = { kind: "ready" }, stateAction, layoutStyle }) {
|
|
115
|
+
const resolved = resolveScreenContentState(state);
|
|
116
|
+
return _jsxs(Stack, { gap: "md", ...(layoutStyle === undefined ? {} : { layoutStyle }), children: [title || description || badge || leading || actions ? _jsxs(Stack, { axis: "inline", gap: "sm", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [leading, _jsxs(Stack, { gap: "xxs", layoutStyle: { flex: 1, minWidth: 0 }, children: [_jsxs(Stack, { axis: "inline", gap: "xs", align: "center", layoutStyle: { flexWrap: "wrap" }, children: [title ? _jsx(Heading, { level: "level3", children: title }) : null, badge] }), description ? _jsx(Text, { tone: "muted", children: description }) : null] }), actions] }) : null, notice, state.kind === "ready" ? children : _jsxs(Stack, { gap: "sm", align: "center", justify: "center", layoutStyle: { flex: 1 }, children: [resolved.busy ? _jsx(Spinner, { label: [state.title, state.description].filter(Boolean).join(". ") }) : _jsxs("div", { role: state.kind === "error" ? "alert" : "status", children: [_jsx(Text, { variant: "title", children: state.title }), state.description ? _jsx(Text, { tone: "muted", children: state.description }) : null] }), stateAction] }), footer] });
|
|
117
|
+
}
|
|
114
118
|
//# sourceMappingURL=screens.js.map
|
package/dist/screens.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screens.js","sourceRoot":"","sources":["../src/screens.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAA+B,MAAM,uCAAuC,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAwC,MAAM,+CAA+C,CAAC;AACjI,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAA4B,MAAM,OAAO,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,0BAA0B,EAAoC,yBAAyB,EAAE,mBAAmB,EAAuF,MAAM,yCAAyC,CAAC;AAC3U,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,EAAqB,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAgCrE,qGAAqG;AACrG,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,eAAe,GAAG,SAAS,EAAE,eAAe,GAAG,OAAO,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,QAAQ,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,EAAE,SAAS,EAAE,WAAW,EAAqB;IACvV,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;IACnB,MAAM,UAAU,GAAG,eAAe,KAAK,SAAS,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC;IAC5F,8EAA8E;IAC9E,+EAA+E;IAC/E,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAC;IACjD,MAAM,YAAY,GAAG,oBAAoB,IAAI,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC;IAC7E,MAAM,aAAa,GAAG,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;IACxG,MAAM,QAAQ,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;IAClD,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAChE,MAAM,OAAO,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IACvD,eAAe,CAAC,GAAG,EAAE;QACnB,4EAA4E;QAC5E,8EAA8E;QAC9E,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC;QACvC,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,QAAQ,CAAC,aAAa,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAClF,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW;YAAE,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,mBAAmB,CAAC;IACnC,OAAO,MAAC,OAAO,uBAAkB,MAAM,IAAI,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAc,MAAM,IAAI,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,wBAAsB,YAAY,uBAAqB,YAAY,EAAE,SAAS,EAAE,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,EACjR,KAAK,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,oBAAoB,EAAE,GAAG,aAAa,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,sBAAsB,EAAE,GAAG,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,kBAAkB,EAAE,GAAG,aAAa,EAAE,GAAG,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,uBAAuB,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,wBAAwB,EAAE,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,yBAAyB,EAAE,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE,GAAG,WAAW,EAAyB,aACjf,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAQ,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,8CAA8C,EAAE,UAAU,EAAE,QAAQ,EAAE,aAClN,wBAAM,OAAO,GAAO,EAAA,eAAK,SAAS,EAAC,qBAAqB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,EAAE,aACjG,eAAe,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,QAAQ,EAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,YAAG,KAAK,GAAW,EACpG,WAAW,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,OAAO,YAAE,WAAW,GAAQ,CAAC,CAAC,CAAC,IAAI,IAAO,EAAA,cAAK,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,YAAG,OAAO,GAAO,IACzH,CAAC,CAAC,CAAC,kBAAQ,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,aACnP,OAAO,EAAC,eAAK,SAAS,EAAC,qBAAqB,aAAE,eAAe,KAAK,SAAS,IAAI,KAAC,OAAO,IAAC,KAAK,EAAC,QAAQ,EAAC,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,YAAG,KAAK,GAAW,EAChJ,WAAW,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,OAAO,YAAE,WAAW,GAAQ,CAAC,CAAC,CAAC,IAAI,IAAO,EAAC,OAAO,IAC9E,CAAC,CAAC,CAAC,IAAI,CAAC,EAChB,MAAM,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,oBAAoB,YAAE,MAAM,GAAO,CAAC,CAAC,CAAC,IAAI,EAEnE,cAAK,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5D,cAAc,EAAE,KAAK,CAAC,EAAE,GAAG,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC,MAAqB,CAAC,CAAC,CAAC,EACjF,aAAa,EAAE,KAAK,CAAC,EAAE;oBACrB,uEAAuE;oBACvE,wEAAwE;oBACxE,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAqB,CAAC,CAAC,CAAC,CAAE,KAAK,CAAC,MAAsB,CAAC,WAAW,EAAE,CAAC;wBACjI,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC;oBAC/B,CAAC;gBACH,CAAC,EACD,SAAS,EAAC,kBAAkB,iBAAc,UAAU,sBAAoB,QAAQ,CAAC,eAAe,IAAI,SAAS,eAAa,QAAQ,CAAC,IAAI,IAAI,SAAS,YACnJ,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAK,SAAS,EAAC,mBAAmB,aAGpE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,OAAO,IAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAI,CAAC,CAAC,CAAC,cAAK,IAAI,EAAE,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,YACvJ,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,aAAC,KAAC,IAAI,IAAC,OAAO,EAAC,OAAO,YAAE,KAAK,CAAC,KAAK,GAAQ,EACtE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,YAAE,KAAK,CAAC,WAAW,GAAQ,CAAC,CAAC,CAAC,IAAI,IAAS,GAChF,EACL,WAAW,IACR,GACF,EACL,MAAM,CAAC,CAAC,CAAC,iBAAQ,SAAS,EAAC,oBAAoB,YAAE,MAAM,GAAU,CAAC,CAAC,CAAC,IAAI,IACjE,CAAC;AACb,CAAC;AAID,MAAM,UAAU,cAAc,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAuB;IACjF,8EAA8E;IAC9E,OAAO,KAAC,YAAY,OAAK,KAAK,YAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAC/E,KAAC,OAAO,IAAC,SAAS,EAAC,sBAAsB,EAAkB,KAAK,EAAE,KAAC,IAAI,IAAC,OAAO,EAAC,OAAO,EAAC,QAAQ,EAAC,QAAQ,EAAC,IAAI,EAAC,OAAO,YAAE,OAAO,CAAC,KAAK,GAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,YAAG,OAAO,CAAC,QAAQ,IAAnJ,OAAO,CAAC,EAAE,CAAoJ,CAAC,IAAS,GAAe,CAAC;AAC3O,CAAC;AAMD,MAAM,UAAU,uBAAuB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,EAAgC;IAC3G,OAAO,KAAC,YAAY,OAAK,KAAK,EAAE,MAAM,EAAE,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aAAE,MAAM,EAAE,OAAO,IAAS,YAAG,QAAQ,GAAgB,CAAC;AAC/G,CAAC;AASD,MAAM,UAAU,gBAAgB,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,EAAyB;IAC/H,OAAO,KAAC,OAAO,OAAK,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,uBAAuB,EAAE,SAAS,CAAC,iBAAe,CAAC,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,KAAC,IAAI,IAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,YAAG,KAAK,GAAQ,EACvL,WAAW,EAAE,MAAC,KAAK,IAAC,GAAG,EAAC,KAAK,aAAE,WAAW,EAAC,MAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,aAAE,WAAW,cAAK,SAAS,IAAQ,IAAQ,GAAI,CAAC;AACnI,CAAC;AAGD,2GAA2G;AAC3G,MAAM,UAAU,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,KAAK,EAAmB;IACpF,2FAA2F;IAC3F,OAAO,KAAC,YAAY,OAAK,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAI,CAAC;AAC7J,CAAC;AA0BD,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,GAAG,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,MAAM,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,GAAG,KAAK,EAAE,iBAAiB,GAAG,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,GAAG,QAAQ,EAAE,gBAAgB,EAAE,WAAW,GAAG,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAwB;IACtc,0BAA0B,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,kBAAkB;QAAE,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;IAC7G,IAAI,cAAc,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;IAClH,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAU,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;IACzG,MAAM,OAAO,GAAG,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,QAAQ,IAAI,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzL,MAAM,MAAM,GAAG,QAAQ,IAAI,OAAO,CAAC;IACnC,sGAAsG;IACtG,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC;IACjF,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAE,MAAM,IAAI,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,gBAAgB,CAAC,OAAO,YAAG,gBAAgB,CAAC,IAAI,GAAc,CAAC,CAAC,CAAC,IAAI,CAAC;IACxN,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAC,UAAU,IAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAC,QAAQ,EAAC,IAAI,EAAE,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,OAAO;YAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAG,QAAQ,GAAc,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,OAAO;YAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAG,SAAS,GAAU,CAAC;IAC7Z,0HAA0H;IAC1H,qGAAqG;IACrG,OAAO,eAAK,SAAS,EAAC,sBAAsB,4BAAyB,gBAAgB,EAAE,KAAK,EAAE,EAAC,4BAA4B,EAAE,GAAG,mBAAmB,CAAC,OAAO,IAAI,EAAE,uBAAuB,EAAE,GAAG,mBAAmB,CAAC,cAAc,IAAI,EAAE,8BAA8B,EAAE,GAAG,mBAAmB,CAAC,oBAAoB,IAAI,EAAE,GAAG,WAAW,EAAwB,aAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,MAAC,KAAK,IAAC,IAAI,EAAC,QAAQ,EAAC,GAAG,EAAC,IAAI,EAAC,KAAK,EAAC,QAAQ,aAAC,MAAC,KAAK,IAAC,GAAG,EAAC,KAAK,aAAC,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAC,QAAQ,YAAE,OAAO,CAAC,MAAM,GAAQ,EAAA,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,YAAE,OAAO,CAAC,OAAO,GAAQ,IAAQ,EAAA,KAAC,UAAU,IAAC,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,YAAE,KAAC,IAAI,yBAAS,GAAa,IAAQ,CAAC,CAAC,CAAC,IAAI,EAC/rB,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,eAAK,SAAS,EAAC,mCAAmC,aAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAmB,SAAS,EAAC,kCAAkC,aAAC,cAAK,SAAS,EAAC,+BAA+B,YAAE,IAAI,CAAC,OAAO,GAAO,EAAA,eAAM,SAAS,EAAC,8BAA8B,YAAC,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAC,OAAO,EAAC,IAAI,EAAC,OAAO,EAAC,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ;wCAAE,kBAAkB,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAE,eAAM,SAAS,EAAC,oCAAoC,iBAAa,MAAM,uBAAS,GAAa,GAAO,KAAhc,IAAI,CAAC,EAAE,CAA+b,CAAC,EAAE,MAAM,IAAO,CAAC,CAAC,CAAC,IAAI,EACzkB,eAAK,SAAS,EAAC,2BAA2B,aAAC,KAAC,QAAQ,IAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAC,OAAO,EAAC,IAAI,EAAE,mBAAmB,CAAC,gBAAgB,gBAAc,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,kBAAgB,OAAO,IAAI,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,eAAa,OAAO,IAAI,SAAS,EAC7Y,SAAS,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,sBAAsB,CAAC,EAAC,GAAG,EAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,OAAO,EAAC,KAAK,CAAC,WAAW,CAAC,OAAO,EAAC,EAAE,UAAU,CAAC,EAAE,CAAC;4BAAC,KAAK,CAAC,cAAc,EAAE,CAAC;4BAAC,IAAI,OAAO;gCAAE,MAAM,CAAC,KAAK,CAAC,CAAC;wBAAC,CAAC,CAAC,CAAC,EAC/O,QAAQ,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM;4BAAE,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,mBAAmB,CAAC,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,CAAC,gBAAgB,KACvL,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAI,EAC5E,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IACnB,EAAC,cAAc,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,KAAK,EAAC,UAAU,EAAC,KAAK,EAAE,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,SAAS,EAAE,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,YAAE,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,YAAE,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,GAAQ,GAAW,CAAC,CAAC,CAAC,IAAI,IAAO,CAAC;AACrU,CAAC;AAKD,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,GAAG,QAAQ,EAAE,UAAU,GAAG,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,GAAC,KAAK,EAAE,WAAW,EAAoB;IAC7P,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,qBAAqB,KAAK,OAAO,IAAI,CAAC,CAAC,SAAS,CAAC;IACpE,+FAA+F;IAC/F,MAAM,KAAK,GAAG,MAAM,CAA8C,IAAI,CAAC,CAAC;IACxE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,GAAG,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,mBAAS,QAAQ,EAAE,WAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,uBACzD,WAAW,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,SAAS,sBAAoB,WAAW,EAAE,KAAK,EACjH,SAAS,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,CAAC,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAAC,CAAC,CAAC,CAAC,EACzO,aAAa,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAK,KAAK,CAAC,MAAsB,CAAC,OAAO,CAAC,yBAAyB,CAAC;YAAE,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAC,CAAC,EAAC,KAAK,CAAC,OAAO,EAAC,CAAC,EAAC,KAAK,CAAC,OAAO,EAAC,SAAS,EAAC,KAAK,CAAC,SAAS,EAAC,CAAC,CAAC,CAAC,EACxR,aAAa,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS;YAAE,OAAO,CAAC,MAAM,EAAE,GAAC,KAAK,CAAC,OAAO,GAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAC,EAAE,GAAC,KAAK,CAAC,OAAO,GAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAAA,MAAM,EAAE,CAAC;YAAA,OAAO;QAAA,CAAC,CAAC,IAAI,UAAU;YAAE,SAAS,CAAC,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;aAAM,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACpc,WAAW,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,CAAC,OAAO,GAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAC,KAAK,CAAC,OAAO,GAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS;YAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,SAAS,KAAK,KAAK,CAAC,SAAS;YAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAChc,KAAK,EAAE,EAAE,GAAG,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,gBAAc,MAAM,aACnN,UAAU,CAAC,CAAC,CAAC,eAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,YAAE,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,YAAE,SAAS,GAAQ,GAAO,CAAC,CAAC,CAAC,IAAI,EAC7U,eAAK,SAAS,EAAC,kBAAkB,EAAC,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,MAAM,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,oDAAoD,EAAE,yBAAyB,EAAE,mBAAmB,CAAC,eAAe,EAAyB,oBAAkB,SAAS,eAAa,UAAU,IAAI,SAAS,aACrW,MAAM,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,0BAA0B,YAAE,MAAM,GAAO,CAAC,CAAC,CAAC,IAAI,EACzE,eAAK,SAAS,EAAC,2BAA2B,aAAE,MAAM,CAAA,CAAC,CAAA,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,YAAE,MAAM,GAAQ,CAAA,CAAC,CAAA,IAAI,EACzG,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,KAAC,MAAM,IAAC,IAAI,EAAC,OAAO,gBAAa,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,YAAG,KAAK,GAAU,CAAC,CAAC,CAAC,IAAI,EAC1H,SAAS,CAAC,CAAC,CAAC,MAAC,gBAAgB,OAAK,SAAS,EAAE,kBAAkB,EAAE,kBAAkB,aAAG,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAO,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAoB,CAAC,CAAC,CAAC,eAAK,SAAS,EAAC,0BAA0B,aAAE,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,yBAAyB,YAAE,KAAK,GAAO,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,IAAO,EACzV,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,IAAE,aAAa,IAAE,OAAO,CAAA,CAAC,CAAA,eAAK,SAAS,EAAC,wBAAwB,aAAE,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,IAAE,aAAa,CAAA,CAAC,CAAA,KAAC,IAAI,IAAC,OAAO,EAAC,SAAS,EAAC,IAAI,EAAC,OAAO,YAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAQ,CAAA,CAAC,CAAA,IAAI,EAAE,OAAO,IAAO,CAAA,CAAC,CAAA,IAAI,IACnR,IACA,IACE,CAAC;AACb,CAAC","sourcesContent":["import { resolveComposerLimit, type ComposerLengthFeedback } from \"@hjmds/design-contracts/communication\";\nimport { Progress } from \"./feedback.js\";\nimport { resolveDesignProfileScreen, type DesignProfileScreenPresentation } from \"@hjmds/design-contracts/design-profile-layout\";\nimport { MessageReactions } from \"./internal/message-reactions.js\";\nimport type { ReactionPickerProps } from \"./reaction-picker.js\";\nimport { Button, IconButton } from \"./actions.js\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport { TextArea } from \"./forms.js\";\nimport { useId, useLayoutEffect, useRef, useState, type Ref, type ReactNode } from \"react\";\nimport { isReplySwipe, timestampRevealOffset, shouldSubmitMessageKey, canSubmitMessage, validateMessageAttachments, type MessageAttachmentDescriptor, resolveScreenContentState, screenPatternRecipe, type ChatMessageDescriptor, type MessageComposerDescriptor, type ScreenContentState } from \"@hjmds/design-contracts/screen-patterns\";\nimport { Heading } from \"./heading.js\";\nimport { Spinner } from \"./internal/spinner.js\";\nimport { Section, Stack, Text } from \"./layout.js\";\nimport { ListRow, type ListRowProps } from \"./display.js\";\nimport { classNames, useDesignProfileDefaults } from \"./internal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type ScreenLayoutProps = Readonly<{\n title: string;\n /** Hide redundant route names while retaining descriptions and a named screen. */\n titleVisibility?: \"visible\" | \"hidden\";\n headerAlignment?: \"start\" | \"center\";\n /** Preserve host navigation while the shared shell owns content and state. */\n header?: ReactNode;\n contentInset?: \"default\" | \"none\";\n /** Explicit layout wins over the nearest design profile. */\n presentation?: DesignProfileScreenPresentation;\n description?: string;\n leading?: ReactNode;\n actions?: ReactNode;\n notice?: ReactNode;\n footer?: ReactNode;\n state?: ScreenContentState;\n stateAction?: ReactNode;\n children?: ReactNode;\n /** A virtualized list must own scrolling; never nest it inside a second scroll container. */\n scroll?: \"screen\" | \"content\";\n as?: \"main\" | \"section\";\n className?: string;\n /**\n * Canonical layout-only placement on the screen root (for example `flex` or `width` in a split\n * view), matching Native ScreenLayout. Every screen built on ScreenLayout forwards it.\n */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\n/** Shared screen shell. Routing, data, permission checks and mutation state remain product-owned. */\nexport function ScreenLayout({ title, titleVisibility = \"visible\", headerAlignment = \"start\", header, contentInset = \"default\", presentation: suppliedPresentation, description, leading, actions, notice, footer, state = { kind: \"ready\" }, stateAction, children, scroll = \"screen\", as: Element = \"main\", className, layoutStyle }: ScreenLayoutProps) {\n const id = useId();\n const showHeader = titleVisibility === \"visible\" || !!description || !!leading || !!actions;\n // Screens historically work with the stylesheet alone. Optional context keeps\n // that path while inheriting profiles from an enclosing Provider when present.\n const designProfile = useDesignProfileDefaults();\n const presentation = suppliedPresentation ?? designProfile?.screens.overview;\n const profileLayout = presentation === undefined ? undefined : resolveDesignProfileScreen(presentation);\n const resolved = resolveScreenContentState(state);\n // Replacement text owns scrolling even when the ready state delegates it to\n // a virtual list. Use the rendered mode for keyboard access as well as CSS.\n const bodyScroll = resolved.replacesContent ? \"screen\" : scroll;\n const bodyRef = useRef<HTMLDivElement>(null);\n const lastBodyFocus = useRef<HTMLElement | null>(null);\n useLayoutEffect(() => {\n // Replacing a focused retry/input removes its DOM node. Keep keyboard users\n // in the same content region without stealing focus moved to another control.\n const previous = lastBodyFocus.current;\n if (previous && !previous.isConnected && document.activeElement === document.body) {\n bodyRef.current?.focus({ preventScroll: true });\n }\n if (previous && !previous.isConnected) lastBodyFocus.current = null;\n });\n const recipe = screenPatternRecipe;\n return <Element aria-labelledby={header || titleVisibility === \"hidden\" ? undefined : id} aria-label={header || titleVisibility === \"hidden\" ? title : undefined} data-content-inset={contentInset} data-presentation={presentation} className={classNames(\"hjm-screen\", className)}\n style={{ backgroundColor: designProfile?.material.canvas ? \"transparent\" : undefined, \"--hjm-screen-width\": `${profileLayout?.maxWidth ?? recipe.maxWidth}px`, \"--hjm-screen-padding\": `${contentInset === \"none\" ? 0 : recipe.padding}px`, \"--hjm-screen-gap\": `${profileLayout?.gap ?? recipe.sectionGap}px`, \"--hjm-screen-item-gap\": `${recipe.itemGap}px`, \"--hjm-screen-state-gap\": `${recipe.stateGap}px`, \"--hjm-screen-header-min\": `${recipe.headerMinWidth}px`, ...layoutStyle } as React.CSSProperties}>\n {header ?? (showHeader ? headerAlignment === \"center\" ? <header className=\"hjm-screen__header\" style={{ display: \"grid\", gridTemplateColumns: \"minmax(0, 1fr) minmax(0, 2fr) minmax(0, 1fr)\", alignItems: \"center\" }}>\n <div>{leading}</div><div className=\"hjm-screen__heading\" style={{ textAlign: \"center\", minWidth: 0 }}>\n {titleVisibility === \"visible\" && <Heading level=\"level3\" semanticLevel={1} id={id}>{title}</Heading>}\n {description ? <Text as=\"p\" tone=\"muted\">{description}</Text> : null}</div><div style={{ justifySelf: \"end\" }}>{actions}</div>\n </header> : <header className=\"hjm-screen__header\" style={profileLayout ? { flexDirection: profileLayout.headerAxis, alignItems: profileLayout.centered ? \"center\" : undefined, textAlign: profileLayout.centered ? \"center\" : undefined } : undefined}>\n {leading}<div className=\"hjm-screen__heading\">{titleVisibility === \"visible\" && <Heading level=\"level3\" semanticLevel={1} id={id}>{title}</Heading>}\n {description ? <Text as=\"p\" tone=\"muted\">{description}</Text> : null}</div>{actions}\n </header> : null)}\n {notice ? <div className=\"hjm-screen__notice\">{notice}</div> : null}\n {/* Scrollable read-only screens still need a keyboard entry point. */}\n <div ref={bodyRef} tabIndex={bodyScroll === \"content\" ? -1 : 0}\n onFocusCapture={event => { lastBodyFocus.current = event.target as HTMLElement; }}\n onBlurCapture={event => {\n // A connected input blurred to the document intentionally relinquishes\n // focus too; only removal of the currently focused node needs recovery.\n if (event.relatedTarget ? !event.currentTarget.contains(event.relatedTarget as Node) : (event.target as HTMLElement).isConnected) {\n lastBodyFocus.current = null;\n }\n }}\n className=\"hjm-screen__body\" data-scroll={bodyScroll} data-replacement={resolved.replacesContent || undefined} aria-busy={resolved.busy || undefined}>\n {state.kind === \"ready\" ? children : <div className=\"hjm-screen__state\">\n {/* Loading copy is an accessible name; visible copy beside the spinner\n contradicts the shared spinner-only loading contract. */}\n {resolved.busy ? <Spinner label={[state.title, state.description].filter(Boolean).join(\". \")} /> : <div role={state.kind === \"error\" ? \"alert\" : \"status\"}>\n <Stack gap=\"sm\" align=\"center\"><Text variant=\"title\">{state.title}</Text>\n {state.description ? <Text tone=\"muted\">{state.description}</Text> : null}</Stack>\n </div>}\n {stateAction}\n </div>}\n </div>\n {footer ? <footer className=\"hjm-screen__footer\">{footer}</footer> : null}\n </Element>;\n}\n\nexport type SettingsScreenSection = Readonly<{ id: string; title: string; description?: string; children: ReactNode }>;\nexport type SettingsScreenProps = Omit<ScreenLayoutProps, \"children\" | \"scroll\"> & Readonly<{ profile?: ReactNode; sections: readonly SettingsScreenSection[] }>;\nexport function SettingsScreen({ profile, sections, ...props }: SettingsScreenProps) {\n // Keep semantic section headings while using the smaller settings label role.\n return <ScreenLayout {...props}><Stack gap=\"md\">{profile}{sections.map(section =>\n <Section className=\"hjm-settings-section\" key={section.id} title={<Text variant=\"label\" emphasis=\"strong\" tone=\"muted\">{section.title}</Text>} description={section.description}>{section.children}</Section>)}</Stack></ScreenLayout>;\n}\n\nexport type NotificationInboxScreenProps = Omit<ScreenLayoutProps, \"children\"> & Readonly<{\n filters?: ReactNode;\n children: ReactNode;\n}>;\nexport function NotificationInboxScreen({ filters, children, notice, ...props }: NotificationInboxScreenProps) {\n return <ScreenLayout {...props} notice={<Stack gap=\"sm\">{notice}{filters}</Stack>}>{children}</ScreenLayout>;\n}\n\n/** Read/unread is announced in localized copy as well as emphasis; rendering never marks an item read. */\nexport type NotificationItemProps = Omit<ListRowProps, \"description\" | \"selected\"> & Readonly<{\n read: boolean;\n statusLabel: string;\n timestamp: string;\n description?: ReactNode;\n}>;\nexport function NotificationItem({ read, statusLabel, timestamp, description, title, className, ...props }: NotificationItemProps) {\n return <ListRow {...props} className={classNames(\"hjm-notification-item\", className)} data-unread={!read || undefined} title={<Text emphasis={read ? \"regular\" : \"strong\"}>{title}</Text>}\n description={<Stack gap=\"xxs\">{description}<Text variant=\"caption\" tone=\"muted\">{statusLabel} · {timestamp}</Text></Stack>} />;\n}\n\nexport type ChatScreenProps = Omit<ScreenLayoutProps, \"footer\"> & Readonly<{ composer: ReactNode }>;\n/** Caller supplies a virtualized timeline and keyboard-aware composer; no implicit auto-scroll or send. */\nexport function ChatScreen({ composer, scroll = \"content\", ...props }: ChatScreenProps) {\n // An empty conversation must still allow its first message; unavailable states hide input.\n return <ScreenLayout {...props} scroll={scroll} footer={!props.state || props.state.kind === \"ready\" || props.state.kind === \"empty\" ? composer : null} />;\n}\n\nexport type MessageComposerProps = Omit<MessageComposerDescriptor, \"attachmentCount\"> & Readonly<{\n maxLength?: number;\n /** Opt-in count/ring appears only near the actual maxLength; never trims drafts. */\n lengthFeedback?: ComposerLengthFeedback;\n sendDisabled?: boolean;\n additionalContent?: boolean;\n leadingAction?: ReactNode;\n inputRef?: Ref<HTMLTextAreaElement>;\n /** Release typing presence when the host input loses focus. */\n onBlur?: () => void;\n onValueChange(value: string): void;\n onSend(value: string): void;\n context?: ReactNode;\n replyTo?: Readonly<{ author: string; excerpt: string; cancelLabel: string; onCancel(): void }>;\n /** Icon mode puts the send/attachment action inside the growing field. */\n sendIcon?: ReactNode;\n /** Reference comment layout: a filled circular send action inside the field. */\n sendPresentation?: \"inline\" | \"circle\";\n attachmentAction?: Readonly<{ label: string; icon: ReactNode; onPress(): void; disabled?: boolean }>;\n attachments?: readonly (MessageAttachmentDescriptor & Readonly<{ preview: ReactNode }>)[];\n onRemoveAttachment?: (id: string) => void;\n /** Canonical layout-only placement on the composer root. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\nexport function MessageComposer({ value, label, sendLabel, placeholder = label, description, error, invalid = false, submitMode = \"newline\", onBlur, disabled = false, pending = false, onValueChange, onSend, maxLength, lengthFeedback, sendDisabled = false, additionalContent = false, leadingAction, inputRef, context, replyTo, sendIcon, sendPresentation = \"inline\", attachmentAction, attachments = [], onRemoveAttachment, layoutStyle }: MessageComposerProps) {\n validateMessageAttachments(attachments);\n if (attachments.length && !onRemoveAttachment) throw new TypeError(\"Attachments require a removal callback\");\n if (lengthFeedback && maxLength === undefined) throw new TypeError(\"Composer length feedback requires maxLength\");\n const limit = !lengthFeedback ? null : resolveComposerLimit(value, maxLength!, lengthFeedback.threshold);\n const canSend = !sendDisabled && !limit?.exceeded && canSubmitMessage({ value, label, sendLabel, disabled, pending, attachmentCount: attachments.length + (additionalContent ? 1 : 0) });\n const locked = disabled || pending;\n // A bounded corner radius keeps multiline/large-text content inside the field instead of a tall pill.\n const hasContent = !!value.trim() || attachments.length > 0 || additionalContent;\n const attach = attachmentAction ? <IconButton label={attachmentAction.label} tone=\"ghost\" disabled={locked || attachmentAction.disabled} onClick={attachmentAction.onPress}>{attachmentAction.icon}</IconButton> : null;\n const send = sendIcon ? <IconButton label={sendLabel} size={sendPresentation === \"circle\" ? \"small\" : \"medium\"} shape=\"circle\" tone={sendPresentation === \"circle\" ? \"primary\" : \"ghost\"} disabled={!canSend} loading={pending} onClick={() => { if (canSend) onSend(value); }}>{sendIcon}</IconButton> : <Button disabled={!canSend} loading={pending} onClick={() => { if (canSend) onSend(value); }}>{sendLabel}</Button>;\n // Readonly pending input preserves the keyboard/focus for receipt failure recovery; disabling it would blur desktop chat.\n // Enter is opt-in and IME-safe; receipt-driven clearing and failed-send recovery belong to the host.\n return <div className=\"hjm-message-composer\" data-send-presentation={sendPresentation} style={{\"--hjm-message-composer-gap\": `${screenPatternRecipe.itemGap}px`, \"--hjm-attachment-size\": `${screenPatternRecipe.attachmentSize}px`, \"--hjm-attachment-remove-size\": `${screenPatternRecipe.attachmentRemoveSize}px`, ...layoutStyle} as React.CSSProperties}>{context}{replyTo ? <Stack axis=\"inline\" gap=\"sm\" align=\"center\"><Stack gap=\"xxs\"><Text variant=\"caption\" emphasis=\"strong\">{replyTo.author}</Text><Text variant=\"caption\" tone=\"muted\">{replyTo.excerpt}</Text></Stack><IconButton label={replyTo.cancelLabel} tone=\"ghost\" disabled={locked} onClick={replyTo.onCancel}><Text>×</Text></IconButton></Stack> : null}\n {attachments.length ? <div className=\"hjm-message-composer__attachments\">{attachments.map(item => <div key={item.id} className=\"hjm-message-composer__attachment\"><div className=\"hjm-message-composer__preview\">{item.preview}</div><span className=\"hjm-message-composer__remove\"><IconButton label={item.removeLabel} tone=\"ghost\" size=\"small\" disabled={locked || item.disabled} onClick={() => { if (!locked && !item.disabled) onRemoveAttachment?.(item.id); }}><span className=\"hjm-message-composer__remove-glyph\" aria-hidden=\"true\">×</span></IconButton></span></div>)}{attach}</div> : null}\n <div className=\"hjm-message-composer__row\"><TextArea ref={inputRef} maxLength={maxLength} leadingAction={leadingAction} shape=\"large\" rows={screenPatternRecipe.composerMinLines} aria-label={label} placeholder={placeholder} description={description} error={error} aria-invalid={invalid || undefined} onBlur={onBlur} value={value} disabled={disabled} readOnly={pending} aria-busy={pending || undefined}\n onKeyDown={event => { if (shouldSubmitMessageKey({key:event.key, shiftKey:event.shiftKey, isComposing:event.nativeEvent.isComposing, keyCode:event.nativeEvent.keyCode}, submitMode)) { event.preventDefault(); if (canSend) onSend(value); } }}\n onChange={event => { if (!locked) onValueChange(event.currentTarget.value); }} minVisibleLines={screenPatternRecipe.composerMinLines} maxVisibleLines={screenPatternRecipe.composerMaxLines}\n {...(sendIcon ? { trailing: hasContent || pending ? send : attach } : {})} />\n {sendIcon ? null : send}\n </div>{lengthFeedback && limit?.near ? <Progress shape=\"circular\" label={lengthFeedback.label} value={Math.min(limit.used, limit.max)} max={limit.max} valueText={lengthFeedback.formatCount(limit.used, limit.max)}><Text variant=\"caption\">{lengthFeedback.formatCount(limit.used, limit.max)}</Text></Progress> : null}</div>;\n}\n\nexport type ChatMessageProps = ChatMessageDescriptor & Readonly<{ children: ReactNode; interactiveContent?: boolean; avatar?: ReactNode; reply?: ReactNode; actions?: ReactNode; replyAction?: Readonly<{label:string; onPress():void; disabled?:boolean}>; replyLink?: Readonly<{label:string; onPress():void}>; reactions?: ReactionPickerProps & Readonly<{ closeLabel: string; menuAction?: Readonly<{ label: string; onPress(): void; disabled?: boolean }> }>;\n /** Canonical layout-only placement on the message row. The swipe offset still owns `transform`. */\n layoutStyle?: HjmCompositionStyleProp }>;\nexport function ChatMessage({ direction, author, timestamp, timestampPresentation = \"always\", bubbleTail = false, deliveryLabel, avatar, reply, actions, replyAction, replyLink, reactions, children, interactiveContent=false, layoutStyle }: ChatMessageProps) {\n const theme = useOptionalHjmTheme();\n const revealTime = timestampPresentation === \"swipe\" && !!timestamp;\n // Only the pointer that began a drag can finish it; another touch must not reply or cancel it.\n const start = useRef<{x:number;y:number;pointerId:number} | null>(null);\n const [offset, setOffset] = useState(0);\n const finish = () => { start.current = null; setOffset(0); };\n return <article tabIndex={replyAction && !replyAction.disabled ? 0 : undefined}\n aria-keyshortcuts={replyAction ? \"Alt+ArrowLeft Alt+ArrowRight\" : undefined} aria-description={replyAction?.label}\n onKeyDown={event => { if (event.target === event.currentTarget && event.altKey && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") && replyAction && !replyAction.disabled) { event.preventDefault(); replyAction.onPress(); } }}\n onPointerDown={event => { if (start.current || (!revealTime && (!replyAction || replyAction.disabled)) || event.button !== 0 || (event.target as HTMLElement).closest(\"button,a,input,textarea\")) return; start.current = {x:event.clientX,y:event.clientY,pointerId:event.pointerId}; }}\n onPointerMove={event => { if (!start.current || start.current.pointerId !== event.pointerId) return; const dx=event.clientX-start.current.x,dy=event.clientY-start.current.y; if (Math.abs(dy)>10 && Math.abs(dy)>Math.abs(dx)) {finish();return;} if (revealTime) setOffset((direction === \"outgoing\" ? -1 : 1) * timestampRevealOffset(direction === \"outgoing\" ? -dx : dx,dy)); else if (Math.abs(dx)>Math.abs(dy)*2) setOffset(Math.max(-72,Math.min(72,dx))); }}\n onPointerUp={event => { if (start.current?.pointerId !== event.pointerId) return; if (!revealTime && start.current && replyAction && !replyAction.disabled && isReplySwipe(event.clientX-start.current.x,event.clientY-start.current.y)) replyAction.onPress(); finish(); }} onPointerCancel={event => { if (start.current?.pointerId === event.pointerId) finish(); }} onPointerLeave={event => { if (start.current?.pointerId === event.pointerId) finish(); }}\n style={{ ...layoutStyle, position: \"relative\", overflow: \"hidden\", paddingInline: bubbleTail ? \"var(--hjm-space-xs)\" : undefined, touchAction: revealTime || replyAction ? \"pan-y\" : undefined }} aria-label={author}>\n {revealTime ? <time style={{ position: \"absolute\", ...(direction === \"outgoing\" ? { right: 0, justifyContent: \"flex-end\" } : { left: 0 }), top: 0, bottom: 0, width: 80, display: \"flex\", alignItems: \"center\", opacity: offset !== 0 ? 1 : 0, pointerEvents: \"none\" }}><Text variant=\"caption\" tone=\"muted\">{timestamp}</Text></time> : null}\n <div className=\"hjm-chat-message\" style={{ transform: `translateX(${offset}px)`, transition: start.current || theme?.environment.reducedMotion ? \"none\" : \"transform var(--hjm-motion-normal, 200ms) ease-out\", \"--hjm-message-max-width\": screenPatternRecipe.messageMaxWidth } as React.CSSProperties} data-direction={direction} data-tail={bubbleTail || undefined}>\n {avatar ? <div className=\"hjm-chat-message__avatar\">{avatar}</div> : null}\n <div className=\"hjm-chat-message__content\">{author?<Text variant=\"caption\" tone=\"muted\">{author}</Text>:null}\n {reply && replyLink ? <Button tone=\"ghost\" aria-label={replyLink.label} onClick={replyLink.onPress}>{reply}</Button> : null}\n {reactions ? <MessageReactions {...reactions} interactiveContent={interactiveContent}>{reply && !replyLink ? <div className=\"hjm-chat-message__reply\">{reply}</div> : null}{children}</MessageReactions> : <div className=\"hjm-chat-message__bubble\">{reply && !replyLink ? <div className=\"hjm-chat-message__reply\">{reply}</div> : null}{children}</div>}\n {(!revealTime && timestamp)||deliveryLabel||actions?<div className=\"hjm-chat-message__meta\">{(!revealTime && timestamp)||deliveryLabel?<Text variant=\"caption\" tone=\"muted\">{[revealTime ? \"\" : timestamp, deliveryLabel].filter(Boolean).join(\" · \")}</Text>:null}{actions}</div>:null}\n </div>\n </div>\n </article>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"screens.js","sourceRoot":"","sources":["../src/screens.tsx"],"names":[],"mappings":"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","sourcesContent":["import { resolveComposerLimit, type ComposerLengthFeedback } from \"@hjmds/design-contracts/communication\";\nimport { Progress } from \"./feedback.js\";\nimport { resolveDesignProfileScreen, type DesignProfileScreenPresentation } from \"@hjmds/design-contracts/design-profile-layout\";\nimport { MessageReactions } from \"./internal/message-reactions.js\";\nimport type { ReactionPickerProps } from \"./reaction-picker.js\";\nimport { Button, IconButton } from \"./actions.js\";\nimport { useOptionalHjmTheme } from \"./provider.js\";\nimport { TextArea } from \"./forms.js\";\nimport { useId, useLayoutEffect, useRef, useState, type Ref, type ReactNode } from \"react\";\nimport { isReplySwipe, timestampRevealOffset, shouldSubmitMessageKey, canSubmitMessage, validateMessageAttachments, type MessageAttachmentDescriptor, resolveScreenContentState, screenPatternRecipe, type ChatMessageDescriptor, type MessageComposerDescriptor, type ScreenContentState } from \"@hjmds/design-contracts/screen-patterns\";\nimport { Heading } from \"./heading.js\";\nimport { Spinner } from \"./internal/spinner.js\";\nimport { Section, Stack, Text } from \"./layout.js\";\nimport { ListRow, type ListRowProps } from \"./display.js\";\nimport { classNames, useDesignProfileDefaults } from \"./internal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\nexport type ScreenLayoutProps = Readonly<{\n title: string;\n /** The shared header owns badge placement; the product supplies its meaning and label. */\n titleBadge?: ReactNode;\n /** Hide redundant route names while retaining descriptions and a named screen. */\n titleVisibility?: \"visible\" | \"hidden\";\n headerAlignment?: \"start\" | \"center\";\n /** Preserve host navigation while the shared shell owns content and state. */\n header?: ReactNode;\n contentInset?: \"default\" | \"none\";\n /** Explicit layout wins over the nearest design profile. */\n presentation?: DesignProfileScreenPresentation;\n description?: string;\n leading?: ReactNode;\n actions?: ReactNode;\n notice?: ReactNode;\n footer?: ReactNode;\n state?: ScreenContentState;\n stateAction?: ReactNode;\n children?: ReactNode;\n /** A virtualized list must own scrolling; never nest it inside a second scroll container. */\n scroll?: \"screen\" | \"content\";\n as?: \"main\" | \"section\";\n className?: string;\n /**\n * Canonical layout-only placement on the screen root (for example `flex` or `width` in a split\n * view), matching Native ScreenLayout. Every screen built on ScreenLayout forwards it.\n */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\n/** Shared screen shell. Routing, data, permission checks and mutation state remain product-owned. */\nexport function ScreenLayout({ title, titleBadge, titleVisibility = \"visible\", headerAlignment = \"start\", header, contentInset = \"default\", presentation: suppliedPresentation, description, leading, actions, notice, footer, state = { kind: \"ready\" }, stateAction, children, scroll = \"screen\", as: Element = \"main\", className, layoutStyle }: ScreenLayoutProps) {\n const id = useId();\n const showHeader = titleVisibility === \"visible\" || !!description || !!leading || !!actions;\n // Screens historically work with the stylesheet alone. Optional context keeps\n // that path while inheriting profiles from an enclosing Provider when present.\n const designProfile = useDesignProfileDefaults();\n const presentation = suppliedPresentation ?? designProfile?.screens.overview;\n const profileLayout = presentation === undefined ? undefined : resolveDesignProfileScreen(presentation);\n const resolved = resolveScreenContentState(state);\n // Replacement text owns scrolling even when the ready state delegates it to\n // a virtual list. Use the rendered mode for keyboard access as well as CSS.\n const bodyScroll = resolved.replacesContent ? \"screen\" : scroll;\n const bodyRef = useRef<HTMLDivElement>(null);\n const lastBodyFocus = useRef<HTMLElement | null>(null);\n useLayoutEffect(() => {\n // Replacing a focused retry/input removes its DOM node. Keep keyboard users\n // in the same content region without stealing focus moved to another control.\n const previous = lastBodyFocus.current;\n if (previous && !previous.isConnected && document.activeElement === document.body) {\n bodyRef.current?.focus({ preventScroll: true });\n }\n if (previous && !previous.isConnected) lastBodyFocus.current = null;\n });\n const recipe = screenPatternRecipe;\n return <Element aria-labelledby={header || titleVisibility === \"hidden\" ? undefined : id} aria-label={header || titleVisibility === \"hidden\" ? title : undefined} data-content-inset={contentInset} data-presentation={presentation} className={classNames(\"hjm-screen\", className)}\n style={{ backgroundColor: designProfile?.material.canvas ? \"transparent\" : undefined, \"--hjm-screen-width\": `${profileLayout?.maxWidth ?? recipe.maxWidth}px`, \"--hjm-screen-padding\": `${contentInset === \"none\" ? 0 : recipe.padding}px`, \"--hjm-screen-gap\": `${profileLayout?.gap ?? recipe.sectionGap}px`, \"--hjm-screen-item-gap\": `${recipe.itemGap}px`, \"--hjm-screen-state-gap\": `${recipe.stateGap}px`, \"--hjm-screen-header-min\": `${recipe.headerMinWidth}px`, ...layoutStyle } as React.CSSProperties}>\n {header ?? (showHeader ? headerAlignment === \"center\" ? <header className=\"hjm-screen__header\" style={{ display: \"grid\", gridTemplateColumns: \"minmax(0, 1fr) minmax(0, 2fr) minmax(0, 1fr)\", alignItems: \"center\" }}>\n <div>{leading}</div><div className=\"hjm-screen__heading\" style={{ textAlign: \"center\", minWidth: 0 }}>\n {titleVisibility === \"visible\" && <Stack axis=\"inline\" gap=\"xs\" align=\"center\" justify=\"center\" wrap><Heading level=\"level3\" semanticLevel={1} id={id}>{title}</Heading>{titleBadge}</Stack>}\n {description ? <Text as=\"p\" tone=\"muted\">{description}</Text> : null}</div><div style={{ justifySelf: \"end\" }}>{actions}</div>\n </header> : <header className=\"hjm-screen__header\" style={profileLayout ? { flexDirection: profileLayout.headerAxis, alignItems: profileLayout.centered ? \"center\" : undefined, textAlign: profileLayout.centered ? \"center\" : undefined } : undefined}>\n {leading}<div className=\"hjm-screen__heading\">{titleVisibility === \"visible\" && <Stack axis=\"inline\" gap=\"xs\" align=\"center\" justify={profileLayout?.centered ? \"center\" : \"start\"} wrap><Heading level=\"level3\" semanticLevel={1} id={id}>{title}</Heading>{titleBadge}</Stack>}\n {description ? <Text as=\"p\" tone=\"muted\">{description}</Text> : null}</div>{actions}\n </header> : null)}\n {notice ? <div className=\"hjm-screen__notice\">{notice}</div> : null}\n {/* Scrollable read-only screens still need a keyboard entry point. */}\n <div ref={bodyRef} tabIndex={bodyScroll === \"content\" ? -1 : 0}\n onFocusCapture={event => { lastBodyFocus.current = event.target as HTMLElement; }}\n onBlurCapture={event => {\n // A connected input blurred to the document intentionally relinquishes\n // focus too; only removal of the currently focused node needs recovery.\n if (event.relatedTarget ? !event.currentTarget.contains(event.relatedTarget as Node) : (event.target as HTMLElement).isConnected) {\n lastBodyFocus.current = null;\n }\n }}\n className=\"hjm-screen__body\" data-scroll={bodyScroll} data-replacement={resolved.replacesContent || undefined} aria-busy={resolved.busy || undefined}>\n {state.kind === \"ready\" ? children : <div className=\"hjm-screen__state\">\n {/* Loading copy is an accessible name; visible copy beside the spinner\n contradicts the shared spinner-only loading contract. */}\n {resolved.busy ? <Spinner label={[state.title, state.description].filter(Boolean).join(\". \")} /> : <div role={state.kind === \"error\" ? \"alert\" : \"status\"}>\n <Stack gap=\"sm\" align=\"center\"><Text variant=\"title\">{state.title}</Text>\n {state.description ? <Text tone=\"muted\">{state.description}</Text> : null}</Stack>\n </div>}\n {stateAction}\n </div>}\n </div>\n {footer ? <footer className=\"hjm-screen__footer\">{footer}</footer> : null}\n </Element>;\n}\n\nexport type SettingsScreenSection = Readonly<{ id: string; title: string; description?: string; children: ReactNode }>;\nexport type SettingsScreenProps = Omit<ScreenLayoutProps, \"children\" | \"scroll\"> & Readonly<{ profile?: ReactNode; sections: readonly SettingsScreenSection[] }>;\nexport function SettingsScreen({ profile, sections, ...props }: SettingsScreenProps) {\n // Keep semantic section headings while using the smaller settings label role.\n return <ScreenLayout {...props}><Stack gap=\"md\">{profile}{sections.map(section =>\n <Section className=\"hjm-settings-section\" key={section.id} title={<Text variant=\"label\" emphasis=\"strong\" tone=\"muted\">{section.title}</Text>} description={section.description}>{section.children}</Section>)}</Stack></ScreenLayout>;\n}\n\nexport type NotificationInboxScreenProps = Omit<ScreenLayoutProps, \"children\"> & Readonly<{\n filters?: ReactNode;\n children: ReactNode;\n}>;\nexport function NotificationInboxScreen({ filters, children, notice, ...props }: NotificationInboxScreenProps) {\n return <ScreenLayout {...props} notice={<Stack gap=\"sm\">{notice}{filters}</Stack>}>{children}</ScreenLayout>;\n}\n\n/** Read/unread is announced in localized copy as well as emphasis; rendering never marks an item read. */\nexport type NotificationItemProps = Omit<ListRowProps, \"description\" | \"selected\"> & Readonly<{\n read: boolean;\n statusLabel: string;\n timestamp: string;\n description?: ReactNode;\n}>;\nexport function NotificationItem({ read, statusLabel, timestamp, description, title, className, ...props }: NotificationItemProps) {\n return <ListRow {...props} className={classNames(\"hjm-notification-item\", className)} data-unread={!read || undefined} title={<Text emphasis={read ? \"regular\" : \"strong\"}>{title}</Text>}\n description={<Stack gap=\"xxs\">{description}<Text variant=\"caption\" tone=\"muted\">{statusLabel} · {timestamp}</Text></Stack>} />;\n}\n\nexport type ChatScreenProps = Omit<ScreenLayoutProps, \"footer\"> & Readonly<{ composer: ReactNode }>;\n/** Caller supplies a virtualized timeline and keyboard-aware composer; no implicit auto-scroll or send. */\nexport function ChatScreen({ composer, scroll = \"content\", ...props }: ChatScreenProps) {\n // An empty conversation must still allow its first message; unavailable states hide input.\n return <ScreenLayout {...props} scroll={scroll} footer={!props.state || props.state.kind === \"ready\" || props.state.kind === \"empty\" ? composer : null} />;\n}\n\nexport type MessageComposerProps = Omit<MessageComposerDescriptor, \"attachmentCount\"> & Readonly<{\n maxLength?: number;\n /** Opt-in count/ring appears only near the actual maxLength; never trims drafts. */\n lengthFeedback?: ComposerLengthFeedback;\n sendDisabled?: boolean;\n additionalContent?: boolean;\n leadingAction?: ReactNode;\n inputRef?: Ref<HTMLTextAreaElement>;\n /** Release typing presence when the host input loses focus. */\n onBlur?: () => void;\n onValueChange(value: string): void;\n onSend(value: string): void;\n context?: ReactNode;\n replyTo?: Readonly<{ author: string; excerpt: string; cancelLabel: string; onCancel(): void }>;\n /** Icon mode puts the send/attachment action inside the growing field. */\n sendIcon?: ReactNode;\n /** Reference comment layout: a filled circular send action inside the field. */\n sendPresentation?: \"inline\" | \"circle\";\n attachmentAction?: Readonly<{ label: string; icon: ReactNode; onPress(): void; disabled?: boolean }>;\n attachments?: readonly (MessageAttachmentDescriptor & Readonly<{ preview: ReactNode }>)[];\n onRemoveAttachment?: (id: string) => void;\n /** Canonical layout-only placement on the composer root. Controlled visual keys are excluded. */\n layoutStyle?: HjmCompositionStyleProp;\n}>;\nexport function MessageComposer({ value, label, sendLabel, placeholder = label, description, error, invalid = false, submitMode = \"newline\", onBlur, disabled = false, pending = false, onValueChange, onSend, maxLength, lengthFeedback, sendDisabled = false, additionalContent = false, leadingAction, inputRef, context, replyTo, sendIcon, sendPresentation = \"inline\", attachmentAction, attachments = [], onRemoveAttachment, layoutStyle }: MessageComposerProps) {\n validateMessageAttachments(attachments);\n if (attachments.length && !onRemoveAttachment) throw new TypeError(\"Attachments require a removal callback\");\n if (lengthFeedback && maxLength === undefined) throw new TypeError(\"Composer length feedback requires maxLength\");\n const limit = !lengthFeedback ? null : resolveComposerLimit(value, maxLength!, lengthFeedback.threshold);\n const canSend = !sendDisabled && !limit?.exceeded && canSubmitMessage({ value, label, sendLabel, disabled, pending, attachmentCount: attachments.length + (additionalContent ? 1 : 0) });\n const locked = disabled || pending;\n // A bounded corner radius keeps multiline/large-text content inside the field instead of a tall pill.\n const hasContent = !!value.trim() || attachments.length > 0 || additionalContent;\n const attach = attachmentAction ? <IconButton label={attachmentAction.label} tone=\"ghost\" disabled={locked || attachmentAction.disabled} onClick={attachmentAction.onPress}>{attachmentAction.icon}</IconButton> : null;\n const send = sendIcon ? <IconButton label={sendLabel} size={sendPresentation === \"circle\" ? \"small\" : \"medium\"} shape=\"circle\" tone={sendPresentation === \"circle\" ? \"primary\" : \"ghost\"} disabled={!canSend} loading={pending} onClick={() => { if (canSend) onSend(value); }}>{sendIcon}</IconButton> : <Button disabled={!canSend} loading={pending} onClick={() => { if (canSend) onSend(value); }}>{sendLabel}</Button>;\n // Readonly pending input preserves the keyboard/focus for receipt failure recovery; disabling it would blur desktop chat.\n // Enter is opt-in and IME-safe; receipt-driven clearing and failed-send recovery belong to the host.\n return <div className=\"hjm-message-composer\" data-send-presentation={sendPresentation} style={{\"--hjm-message-composer-gap\": `${screenPatternRecipe.itemGap}px`, \"--hjm-attachment-size\": `${screenPatternRecipe.attachmentSize}px`, \"--hjm-attachment-remove-size\": `${screenPatternRecipe.attachmentRemoveSize}px`, ...layoutStyle} as React.CSSProperties}>{context}{replyTo ? <Stack axis=\"inline\" gap=\"sm\" align=\"center\"><Stack gap=\"xxs\"><Text variant=\"caption\" emphasis=\"strong\">{replyTo.author}</Text><Text variant=\"caption\" tone=\"muted\">{replyTo.excerpt}</Text></Stack><IconButton label={replyTo.cancelLabel} tone=\"ghost\" disabled={locked} onClick={replyTo.onCancel}><Text>×</Text></IconButton></Stack> : null}\n {attachments.length ? <div className=\"hjm-message-composer__attachments\">{attachments.map(item => <div key={item.id} className=\"hjm-message-composer__attachment\"><div className=\"hjm-message-composer__preview\">{item.preview}</div><span className=\"hjm-message-composer__remove\"><IconButton label={item.removeLabel} tone=\"ghost\" size=\"small\" disabled={locked || item.disabled} onClick={() => { if (!locked && !item.disabled) onRemoveAttachment?.(item.id); }}><span className=\"hjm-message-composer__remove-glyph\" aria-hidden=\"true\">×</span></IconButton></span></div>)}{attach}</div> : null}\n <div className=\"hjm-message-composer__row\"><TextArea ref={inputRef} maxLength={maxLength} leadingAction={leadingAction} shape=\"large\" rows={screenPatternRecipe.composerMinLines} aria-label={label} placeholder={placeholder} description={description} error={error} aria-invalid={invalid || undefined} onBlur={onBlur} value={value} disabled={disabled} readOnly={pending} aria-busy={pending || undefined}\n onKeyDown={event => { if (shouldSubmitMessageKey({key:event.key, shiftKey:event.shiftKey, isComposing:event.nativeEvent.isComposing, keyCode:event.nativeEvent.keyCode}, submitMode)) { event.preventDefault(); if (canSend) onSend(value); } }}\n onChange={event => { if (!locked) onValueChange(event.currentTarget.value); }} minVisibleLines={screenPatternRecipe.composerMinLines} maxVisibleLines={screenPatternRecipe.composerMaxLines}\n {...(sendIcon ? { trailing: hasContent || pending ? send : attach } : {})} />\n {sendIcon ? null : send}\n </div>{lengthFeedback && limit?.near ? <Progress shape=\"circular\" label={lengthFeedback.label} value={Math.min(limit.used, limit.max)} max={limit.max} valueText={lengthFeedback.formatCount(limit.used, limit.max)}><Text variant=\"caption\">{lengthFeedback.formatCount(limit.used, limit.max)}</Text></Progress> : null}</div>;\n}\n\nexport type ChatMessageProps = ChatMessageDescriptor & Readonly<{ children: ReactNode; interactiveContent?: boolean; avatar?: ReactNode; reply?: ReactNode; actions?: ReactNode; replyAction?: Readonly<{label:string; onPress():void; disabled?:boolean}>; replyLink?: Readonly<{label:string; onPress():void}>; reactions?: ReactionPickerProps & Readonly<{ closeLabel: string; menuAction?: Readonly<{ label: string; onPress(): void; disabled?: boolean }> }>;\n /** Canonical layout-only placement on the message row. The swipe offset still owns `transform`. */\n layoutStyle?: HjmCompositionStyleProp }>;\nexport function ChatMessage({ direction, author, timestamp, timestampPresentation = \"always\", bubbleTail = false, deliveryLabel, avatar, reply, actions, replyAction, replyLink, reactions, children, interactiveContent=false, layoutStyle }: ChatMessageProps) {\n const theme = useOptionalHjmTheme();\n const revealTime = timestampPresentation === \"swipe\" && !!timestamp;\n // Only the pointer that began a drag can finish it; another touch must not reply or cancel it.\n const start = useRef<{x:number;y:number;pointerId:number} | null>(null);\n const [offset, setOffset] = useState(0);\n const finish = () => { start.current = null; setOffset(0); };\n return <article tabIndex={replyAction && !replyAction.disabled ? 0 : undefined}\n aria-keyshortcuts={replyAction ? \"Alt+ArrowLeft Alt+ArrowRight\" : undefined} aria-description={replyAction?.label}\n onKeyDown={event => { if (event.target === event.currentTarget && event.altKey && (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") && replyAction && !replyAction.disabled) { event.preventDefault(); replyAction.onPress(); } }}\n onPointerDown={event => { if (start.current || (!revealTime && (!replyAction || replyAction.disabled)) || event.button !== 0 || (event.target as HTMLElement).closest(\"button,a,input,textarea\")) return; start.current = {x:event.clientX,y:event.clientY,pointerId:event.pointerId}; }}\n onPointerMove={event => { if (!start.current || start.current.pointerId !== event.pointerId) return; const dx=event.clientX-start.current.x,dy=event.clientY-start.current.y; if (Math.abs(dy)>10 && Math.abs(dy)>Math.abs(dx)) {finish();return;} if (revealTime) setOffset((direction === \"outgoing\" ? -1 : 1) * timestampRevealOffset(direction === \"outgoing\" ? -dx : dx,dy)); else if (Math.abs(dx)>Math.abs(dy)*2) setOffset(Math.max(-72,Math.min(72,dx))); }}\n onPointerUp={event => { if (start.current?.pointerId !== event.pointerId) return; if (!revealTime && start.current && replyAction && !replyAction.disabled && isReplySwipe(event.clientX-start.current.x,event.clientY-start.current.y)) replyAction.onPress(); finish(); }} onPointerCancel={event => { if (start.current?.pointerId === event.pointerId) finish(); }} onPointerLeave={event => { if (start.current?.pointerId === event.pointerId) finish(); }}\n style={{ ...layoutStyle, position: \"relative\", overflow: \"hidden\", paddingInline: bubbleTail ? \"var(--hjm-space-xs)\" : undefined, touchAction: revealTime || replyAction ? \"pan-y\" : undefined }} aria-label={author}>\n {revealTime ? <time style={{ position: \"absolute\", ...(direction === \"outgoing\" ? { right: 0, justifyContent: \"flex-end\" } : { left: 0 }), top: 0, bottom: 0, width: 80, display: \"flex\", alignItems: \"center\", opacity: offset !== 0 ? 1 : 0, pointerEvents: \"none\" }}><Text variant=\"caption\" tone=\"muted\">{timestamp}</Text></time> : null}\n <div className=\"hjm-chat-message\" style={{ transform: `translateX(${offset}px)`, transition: start.current || theme?.environment.reducedMotion ? \"none\" : \"transform var(--hjm-motion-normal, 200ms) ease-out\", \"--hjm-message-max-width\": screenPatternRecipe.messageMaxWidth } as React.CSSProperties} data-direction={direction} data-tail={bubbleTail || undefined}>\n {avatar ? <div className=\"hjm-chat-message__avatar\">{avatar}</div> : null}\n <div className=\"hjm-chat-message__content\">{author?<Text variant=\"caption\" tone=\"muted\">{author}</Text>:null}\n {reply && replyLink ? <Button tone=\"ghost\" aria-label={replyLink.label} onClick={replyLink.onPress}>{reply}</Button> : null}\n {reactions ? <MessageReactions {...reactions} interactiveContent={interactiveContent}>{reply && !replyLink ? <div className=\"hjm-chat-message__reply\">{reply}</div> : null}{children}</MessageReactions> : <div className=\"hjm-chat-message__bubble\">{reply && !replyLink ? <div className=\"hjm-chat-message__reply\">{reply}</div> : null}{children}</div>}\n {(!revealTime && timestamp)||deliveryLabel||actions?<div className=\"hjm-chat-message__meta\">{(!revealTime && timestamp)||deliveryLabel?<Text variant=\"caption\" tone=\"muted\">{[revealTime ? \"\" : timestamp, deliveryLabel].filter(Boolean).join(\" · \")}</Text>:null}{actions}</div>:null}\n </div>\n </div>\n </article>;\n}\n\n/** Shared structure for embedded compositions. The parent supplies size; this never creates a second scroller. */\nexport type CompositionLayoutProps = Readonly<{\n title?: string;\n description?: string;\n badge?: ReactNode;\n leading?: ReactNode;\n actions?: ReactNode;\n notice?: ReactNode;\n children?: ReactNode;\n footer?: ReactNode;\n state?: ScreenContentState;\n stateAction?: ReactNode;\n layoutStyle?: HjmCompositionStyleProp;\n}>;\nexport function CompositionLayout({title, description, badge, leading, actions, notice, children, footer, state = {kind: \"ready\"}, stateAction, layoutStyle}: CompositionLayoutProps) {\n const resolved = resolveScreenContentState(state);\n return <Stack gap=\"md\" {...(layoutStyle === undefined ? {} : {layoutStyle})}>\n {title || description || badge || leading || actions ? <Stack axis=\"inline\" gap=\"sm\" align=\"center\" layoutStyle={{flexWrap: \"wrap\"}}>\n {leading}<Stack gap=\"xxs\" layoutStyle={{flex: 1, minWidth: 0}}>\n <Stack axis=\"inline\" gap=\"xs\" align=\"center\" layoutStyle={{flexWrap: \"wrap\"}}>{title ? <Heading level=\"level3\">{title}</Heading> : null}{badge}</Stack>\n {description ? <Text tone=\"muted\">{description}</Text> : null}\n </Stack>{actions}\n </Stack> : null}\n {notice}\n {state.kind === \"ready\" ? children : <Stack gap=\"sm\" align=\"center\" justify=\"center\" layoutStyle={{flex: 1}}>\n {resolved.busy ? <Spinner label={[state.title, state.description].filter(Boolean).join(\". \")} /> : <div role={state.kind === \"error\" ? \"alert\" : \"status\"}><Text variant=\"title\">{state.title}</Text>{state.description ? <Text tone=\"muted\">{state.description}</Text> : null}</div>}\n {stateAction}\n </Stack>}\n {footer}\n </Stack>;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hjmds/react",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.0",
|
|
4
4
|
"description": "Accessible React 19 renderers for HJM design contracts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -586,7 +586,7 @@
|
|
|
586
586
|
"THIRD_PARTY_NOTICES.md"
|
|
587
587
|
],
|
|
588
588
|
"peerDependencies": {
|
|
589
|
-
"@hjmds/design-contracts": ">=1.
|
|
589
|
+
"@hjmds/design-contracts": ">=1.23.0 <1.24.0",
|
|
590
590
|
"react": ">=19.0.0",
|
|
591
591
|
"react-dom": ">=19.0.0",
|
|
592
592
|
"@number-flow/react": "0.6.2",
|
|
@@ -623,7 +623,7 @@
|
|
|
623
623
|
"blobatar": "2.7.0",
|
|
624
624
|
"@blobatar/react": "2.7.0",
|
|
625
625
|
"lucide-react": "1.49.0",
|
|
626
|
-
"@hjmds/design-contracts": "1.
|
|
626
|
+
"@hjmds/design-contracts": "1.23.0"
|
|
627
627
|
},
|
|
628
628
|
"peerDependenciesMeta": {
|
|
629
629
|
"@number-flow/react": {
|