@hjmds/react 1.47.0 → 1.48.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/public-exports.generated.d.ts +1 -0
- package/dist/public-exports.generated.d.ts.map +1 -1
- package/dist/public-exports.generated.js +3 -0
- package/dist/public-exports.generated.js.map +1 -1
- package/dist/share-sheet.d.ts +65 -0
- package/dist/share-sheet.d.ts.map +1 -0
- package/dist/share-sheet.js +145 -0
- package/dist/share-sheet.js.map +1 -0
- package/dist/styles.css +14 -2
- package/dist/styles.layered.css +14 -2
- package/dist/table-family.js +1 -1
- package/dist/table-family.js.map +1 -1
- package/package.json +8 -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.48.0";
|
|
38
38
|
readonly surface: "web";
|
|
39
39
|
readonly components: Readonly<{
|
|
40
40
|
/** Canonical component id from the design-contracts catalog. */
|
package/dist/evidence.js
CHANGED
|
@@ -135,7 +135,7 @@ const activeWebEntries = componentCatalog.filter((entry) => {
|
|
|
135
135
|
export const reactRendererEvidence = {
|
|
136
136
|
schemaVersion: reactRendererEvidenceSchemaVersion,
|
|
137
137
|
packageName: "@hjmds/react",
|
|
138
|
-
packageVersion: "1.
|
|
138
|
+
packageVersion: "1.48.0",
|
|
139
139
|
surface: "web",
|
|
140
140
|
components: activeWebEntries.map(derivedClaim),
|
|
141
141
|
};
|
package/dist/evidence.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ShowcaseScenarioId } from \"@hjmds/design-contracts/showcase\";\nimport { getRequiredShowcaseEvidence } from \"@hjmds/design-contracts/showcase\";\nimport { componentCatalog, componentIdOf, getComponentSurfaceStatus, type ComponentCatalogEntry } from \"@hjmds/design-contracts/catalog\";\nimport { publicExportEntries } from \"./public-exports.generated.js\";\n\nexport const reactRendererEvidenceSchemaVersion = 2 as const;\n\nexport type ReactRendererEvidenceScenario = Exclude<ShowcaseScenarioId, \"contract\" | \"native-actions\">;\n\nexport type ReactRendererEvidenceComponent = Readonly<{\n /** Canonical component id from the design-contracts catalog. */\n componentId: string;\n /** Public symbols that implement this contract on the declared subpath. */\n exportNames: readonly string[];\n /** Granular @hjmds/react export used by consumers. */\n subpath: `./${string}`;\n /** Scenarios supported by automated first-party renderer evidence. */\n scenarios: readonly ReactRendererEvidenceScenario[];\n /** Repository-local executable proof for every claimed scenario. */\n proofs: readonly Readonly<{\n scenarios: readonly ReactRendererEvidenceScenario[];\n file: `test/${string}.test.tsx`;\n caseId: string;\n }>[];\n}>;\n\nexport type ReactRendererEvidenceManifest = Readonly<{\n schemaVersion: typeof reactRendererEvidenceSchemaVersion;\n packageName: \"@hjmds/react\";\n packageVersion: string;\n surface: \"web\";\n components: readonly ReactRendererEvidenceComponent[];\n}>;\n\nconst defaultProofFile = \"test/default-render.ssr.test.tsx\" as const;\nconst matrixProofFile = \"test/scenario-matrix.browser.test.tsx\" as const;\nconst stableCoreProofFile = \"test/stable-core.browser.test.tsx\" as const;\n\ntype ProofFile = `test/${string}.test.tsx`;\n\n/**\n * Scenarios a component does not pass yet. Each entry is promotion debt that\n * the generated evidence projection reports; remove it when the component is\n * fixed and the matrix case passes. Stable surfaces cannot carry a gap\n * (scripts/check-workspace-sync.mjs).\n */\nconst webScenarioGaps: Readonly<Record<string, readonly ReactRendererEvidenceScenario[]>> = {};\n\n/**\n * Proofs that live outside the shared default/matrix files: keyboard behavior in a dedicated browser test,\n * long copy proven inside a portal by the component's own test, or a whole matrix run in a component file.\n * Everything else about a claim derives from the catalog row (2026-10-18 registration input).\n */\ntype ClaimExtras = Readonly<{\n /** Extra proofs; their scenarios are removed from the shared matrix proof. */\n proofs?: readonly Readonly<{ scenarios: readonly ReactRendererEvidenceScenario[]; file: ProofFile }>[];\n /** Hooks or helpers published beside the component symbols on the same subpath. */\n exportNames?: readonly string[];\n}>;\n\nconst keyboard = (file: ProofFile = stableCoreProofFile): ClaimExtras => ({ proofs: [{ scenarios: [\"keyboard\"], file }] });\nconst keyboardAndLongCopy = (file: ProofFile): ClaimExtras => ({ proofs: [{ scenarios: [\"keyboard\", \"long-copy\"], file }] });\n\nconst claimExtras: Readonly<Record<string, ClaimExtras>> = {\n \"time-picker\": keyboard(\"test/time-picker.browser.test.tsx\"),\n \"design-system-provider\": { exportNames: [\"useHjmTheme\"] },\n layout: keyboard(),\n link: keyboard(),\n field: keyboard(),\n \"search-field\": keyboard(),\n \"password-field\": keyboard(),\n \"otp-field\": keyboard(),\n \"number-field\": keyboard(),\n slider: keyboard(),\n form: keyboard(\"test/form.keyboard.browser.test.tsx\"),\n \"date-picker\": keyboard(),\n calendar: keyboard(\"test/calendar.browser.test.tsx\"),\n \"file-picker\": keyboard(\"test/file-picker.keyboard.browser.test.tsx\"),\n checkbox: keyboard(),\n \"checkbox-group\": keyboard(),\n \"radio-group\": keyboard(),\n switch: keyboard(),\n \"segmented-control\": keyboard(),\n chip: keyboard(),\n tabs: keyboard(\"test/tabs.keyboard.browser.test.tsx\"),\n breadcrumb: keyboard(\"test/page-navigation.browser.test.tsx\"),\n pagination: keyboard(\"test/pagination.keyboard.browser.test.tsx\"),\n popover: keyboardAndLongCopy(\"test/popover.browser.test.tsx\"),\n \"side-panel\": keyboardAndLongCopy(\"test/side-panel.browser.test.tsx\"),\n splitter: keyboard(\"test/splitter.browser.test.tsx\"),\n tour: keyboardAndLongCopy(\"test/tour.browser.test.tsx\"),\n tree: keyboard(\"test/tree.browser.test.tsx\"),\n \"transfer-list\": keyboard(\"test/transfer-list.browser.test.tsx\"),\n mentions: keyboard(\"test/mentions.browser.test.tsx\"),\n \"command-palette\": keyboardAndLongCopy(\"test/command-palette.browser.test.tsx\"),\n agreement: keyboard(\"test/agreement.keyboard.browser.test.tsx\"),\n \"toggle-group\": keyboard(),\n \"tags-input\": keyboard(),\n \"skip-nav\": keyboardAndLongCopy(\"test/skip-nav.browser.test.tsx\"),\n sidebar: keyboard(\"test/sidebar.browser.test.tsx\"),\n \"date-range-picker\": keyboard(\"test/date-range.keyboard.browser.test.tsx\"),\n \"auth-provider-button\": keyboard(),\n \"data-table\": keyboard(\"test/data-table.keyboard.browser.test.tsx\"),\n collapsible: keyboard(\"test/collapsible.keyboard.browser.test.tsx\"),\n \"context-menu\": keyboardAndLongCopy(\"test/context-menu.interactions.browser.test.tsx\"),\n menubar: keyboard(\"test/menubar.keyboard.browser.test.tsx\"),\n anchor: keyboard(\"test/anchor.browser.test.tsx\"),\n \"bottom-navigation\": keyboard(\"test/bottom-navigation.keyboard.browser.test.tsx\"),\n \"load-more\": keyboard(\"test/load-more.interactions.browser.test.tsx\"),\n carousel: keyboard(\"test/carousel.browser.test.tsx\"),\n \"floating-action-button\": keyboard(),\n accordion: keyboard(\"test/accordion.keyboard.browser.test.tsx\"),\n \"upload-item\": keyboard(\"test/upload-item.browser.test.tsx\"),\n // ThinkingOrb runs its whole environment matrix in its own file (canvas timing), not in scenario-matrix.\n \"thinking-orb\": { proofs: [{ scenarios: [\"dark\", \"large-text\", \"rtl\", \"reduced-motion\", \"accessibility\"], file: \"test/thinking-orb.browser.test.tsx\" }] },\n \"color-picker\": keyboard(\"test/web-additions.browser.test.tsx\"),\n // SSR proves semantics but cannot catch the close-only row seen in BurnTok.\n // Keep real geometry evidence attached without promoting catalog maturity.\n toast: {\n exportNames: [\"useToast\"],\n proofs: [\n { scenarios: [\"keyboard\"], file: stableCoreProofFile },\n { scenarios: [\"dark\", \"long-copy\", \"large-text\", \"rtl\"], file: \"test/toast-layout.browser.test.tsx\" },\n ],\n },\n select: keyboard(),\n combobox: keyboard(),\n dialog: keyboard(\"test/advanced.browser.test.tsx\"),\n \"alert-dialog\": keyboardAndLongCopy(\"test/alert-dialog.keyboard.browser.test.tsx\"),\n sheet: keyboardAndLongCopy(\"test/sheet-layout.browser.test.tsx\"),\n tooltip: keyboard(\"test/tooltip.browser.test.tsx\"),\n menu: keyboardAndLongCopy(\"test/menu.keyboard.browser.test.tsx\"),\n};\n\nconst exportEntries: Readonly<Record<string, readonly `./${string}`[] | undefined>> = publicExportEntries;\n\n/**\n * One claim per active Web row of the catalog. The subpath is the symbol's canonical granular entry, the export\n * names are the row's own symbol plus the companions published on that entry, and the scenarios are the row's\n * required Web evidence minus recorded gaps. Keyboard is never implied: it comes only from a dedicated proof.\n */\nfunction derivedClaim(entry: ComponentCatalogEntry): ReactRendererEvidenceComponent {\n const componentId = componentIdOf(entry);\n const extras = claimExtras[componentId] ?? {};\n const symbols = entry.name === \"DesignSystemProvider\" ? [\"HjmProvider\"] : [entry.name, ...(entry.companions ?? [])];\n // A row whose own name is not a symbol (Chart) claims through its first published companion.\n const subpath = symbols.map((symbol) => exportEntries[symbol]?.[0]).find((entry) => entry !== undefined);\n if (!subpath) throw new Error(`${entry.name} has no granular @hjmds/react export to claim evidence on`);\n const exportNames = [\n ...symbols.filter((symbol) => exportEntries[symbol]?.includes(subpath)),\n ...(extras.exportNames ?? []),\n ];\n const required = getRequiredShowcaseEvidence(entry).find((evidence) => evidence.surface === \"web\")?.scenarios ?? [];\n const gaps = webScenarioGaps[componentId] ?? [];\n const extraProofs = extras.proofs ?? [];\n const proven = new Set(extraProofs.flatMap((proof) => proof.scenarios));\n const matrix = required.filter((scenario): scenario is ReactRendererEvidenceScenario =>\n scenario !== \"default\" && scenario !== \"keyboard\" && scenario !== \"native-actions\" && scenario !== \"contract\"\n && !gaps.includes(scenario as ReactRendererEvidenceScenario) && !proven.has(scenario as ReactRendererEvidenceScenario));\n const proofs = [\n { scenarios: [\"default\" as const], file: defaultProofFile, caseId: componentId },\n ...(matrix.length === 0 ? [] : [{ scenarios: matrix, file: matrixProofFile, caseId: componentId }]),\n ...extraProofs.map((proof) => ({ ...proof, caseId: componentId })),\n ];\n return {\n componentId,\n exportNames,\n subpath,\n scenarios: proofs.flatMap((proof) => proof.scenarios),\n proofs,\n };\n}\n\nconst activeWebEntries: readonly ComponentCatalogEntry[] = componentCatalog.filter((entry) => {\n const status = getComponentSurfaceStatus(entry, \"web\");\n return status === \"stable\" || status === \"beta\";\n});\n\n/**\n * First-party Web renderer claims. Scenario axes remain fail-closed: the\n * default scenario is an SSR render, the environment and accessibility\n * scenarios are computed-style assertions in scenario-matrix.browser.\n * Keyboard and cross-platform parity remain fail-closed until dedicated\n * interaction or paired-renderer proofs are mapped one-to-one.\n */\nexport const reactRendererEvidence = {\n schemaVersion: reactRendererEvidenceSchemaVersion,\n packageName: \"@hjmds/react\",\n packageVersion: \"1.47.0\",\n surface: \"web\",\n components: activeWebEntries.map(derivedClaim),\n} as const satisfies ReactRendererEvidenceManifest;\n"]}
|
|
1
|
+
{"version":3,"file":"evidence.js","sourceRoot":"","sources":["../src/evidence.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ShowcaseScenarioId } from \"@hjmds/design-contracts/showcase\";\nimport { getRequiredShowcaseEvidence } from \"@hjmds/design-contracts/showcase\";\nimport { componentCatalog, componentIdOf, getComponentSurfaceStatus, type ComponentCatalogEntry } from \"@hjmds/design-contracts/catalog\";\nimport { publicExportEntries } from \"./public-exports.generated.js\";\n\nexport const reactRendererEvidenceSchemaVersion = 2 as const;\n\nexport type ReactRendererEvidenceScenario = Exclude<ShowcaseScenarioId, \"contract\" | \"native-actions\">;\n\nexport type ReactRendererEvidenceComponent = Readonly<{\n /** Canonical component id from the design-contracts catalog. */\n componentId: string;\n /** Public symbols that implement this contract on the declared subpath. */\n exportNames: readonly string[];\n /** Granular @hjmds/react export used by consumers. */\n subpath: `./${string}`;\n /** Scenarios supported by automated first-party renderer evidence. */\n scenarios: readonly ReactRendererEvidenceScenario[];\n /** Repository-local executable proof for every claimed scenario. */\n proofs: readonly Readonly<{\n scenarios: readonly ReactRendererEvidenceScenario[];\n file: `test/${string}.test.tsx`;\n caseId: string;\n }>[];\n}>;\n\nexport type ReactRendererEvidenceManifest = Readonly<{\n schemaVersion: typeof reactRendererEvidenceSchemaVersion;\n packageName: \"@hjmds/react\";\n packageVersion: string;\n surface: \"web\";\n components: readonly ReactRendererEvidenceComponent[];\n}>;\n\nconst defaultProofFile = \"test/default-render.ssr.test.tsx\" as const;\nconst matrixProofFile = \"test/scenario-matrix.browser.test.tsx\" as const;\nconst stableCoreProofFile = \"test/stable-core.browser.test.tsx\" as const;\n\ntype ProofFile = `test/${string}.test.tsx`;\n\n/**\n * Scenarios a component does not pass yet. Each entry is promotion debt that\n * the generated evidence projection reports; remove it when the component is\n * fixed and the matrix case passes. Stable surfaces cannot carry a gap\n * (scripts/check-workspace-sync.mjs).\n */\nconst webScenarioGaps: Readonly<Record<string, readonly ReactRendererEvidenceScenario[]>> = {};\n\n/**\n * Proofs that live outside the shared default/matrix files: keyboard behavior in a dedicated browser test,\n * long copy proven inside a portal by the component's own test, or a whole matrix run in a component file.\n * Everything else about a claim derives from the catalog row (2026-10-18 registration input).\n */\ntype ClaimExtras = Readonly<{\n /** Extra proofs; their scenarios are removed from the shared matrix proof. */\n proofs?: readonly Readonly<{ scenarios: readonly ReactRendererEvidenceScenario[]; file: ProofFile }>[];\n /** Hooks or helpers published beside the component symbols on the same subpath. */\n exportNames?: readonly string[];\n}>;\n\nconst keyboard = (file: ProofFile = stableCoreProofFile): ClaimExtras => ({ proofs: [{ scenarios: [\"keyboard\"], file }] });\nconst keyboardAndLongCopy = (file: ProofFile): ClaimExtras => ({ proofs: [{ scenarios: [\"keyboard\", \"long-copy\"], file }] });\n\nconst claimExtras: Readonly<Record<string, ClaimExtras>> = {\n \"time-picker\": keyboard(\"test/time-picker.browser.test.tsx\"),\n \"design-system-provider\": { exportNames: [\"useHjmTheme\"] },\n layout: keyboard(),\n link: keyboard(),\n field: keyboard(),\n \"search-field\": keyboard(),\n \"password-field\": keyboard(),\n \"otp-field\": keyboard(),\n \"number-field\": keyboard(),\n slider: keyboard(),\n form: keyboard(\"test/form.keyboard.browser.test.tsx\"),\n \"date-picker\": keyboard(),\n calendar: keyboard(\"test/calendar.browser.test.tsx\"),\n \"file-picker\": keyboard(\"test/file-picker.keyboard.browser.test.tsx\"),\n checkbox: keyboard(),\n \"checkbox-group\": keyboard(),\n \"radio-group\": keyboard(),\n switch: keyboard(),\n \"segmented-control\": keyboard(),\n chip: keyboard(),\n tabs: keyboard(\"test/tabs.keyboard.browser.test.tsx\"),\n breadcrumb: keyboard(\"test/page-navigation.browser.test.tsx\"),\n pagination: keyboard(\"test/pagination.keyboard.browser.test.tsx\"),\n popover: keyboardAndLongCopy(\"test/popover.browser.test.tsx\"),\n \"side-panel\": keyboardAndLongCopy(\"test/side-panel.browser.test.tsx\"),\n splitter: keyboard(\"test/splitter.browser.test.tsx\"),\n tour: keyboardAndLongCopy(\"test/tour.browser.test.tsx\"),\n tree: keyboard(\"test/tree.browser.test.tsx\"),\n \"transfer-list\": keyboard(\"test/transfer-list.browser.test.tsx\"),\n mentions: keyboard(\"test/mentions.browser.test.tsx\"),\n \"command-palette\": keyboardAndLongCopy(\"test/command-palette.browser.test.tsx\"),\n agreement: keyboard(\"test/agreement.keyboard.browser.test.tsx\"),\n \"toggle-group\": keyboard(),\n \"tags-input\": keyboard(),\n \"skip-nav\": keyboardAndLongCopy(\"test/skip-nav.browser.test.tsx\"),\n sidebar: keyboard(\"test/sidebar.browser.test.tsx\"),\n \"date-range-picker\": keyboard(\"test/date-range.keyboard.browser.test.tsx\"),\n \"auth-provider-button\": keyboard(),\n \"data-table\": keyboard(\"test/data-table.keyboard.browser.test.tsx\"),\n collapsible: keyboard(\"test/collapsible.keyboard.browser.test.tsx\"),\n \"context-menu\": keyboardAndLongCopy(\"test/context-menu.interactions.browser.test.tsx\"),\n menubar: keyboard(\"test/menubar.keyboard.browser.test.tsx\"),\n anchor: keyboard(\"test/anchor.browser.test.tsx\"),\n \"bottom-navigation\": keyboard(\"test/bottom-navigation.keyboard.browser.test.tsx\"),\n \"load-more\": keyboard(\"test/load-more.interactions.browser.test.tsx\"),\n carousel: keyboard(\"test/carousel.browser.test.tsx\"),\n \"floating-action-button\": keyboard(),\n accordion: keyboard(\"test/accordion.keyboard.browser.test.tsx\"),\n \"upload-item\": keyboard(\"test/upload-item.browser.test.tsx\"),\n // ThinkingOrb runs its whole environment matrix in its own file (canvas timing), not in scenario-matrix.\n \"thinking-orb\": { proofs: [{ scenarios: [\"dark\", \"large-text\", \"rtl\", \"reduced-motion\", \"accessibility\"], file: \"test/thinking-orb.browser.test.tsx\" }] },\n \"color-picker\": keyboard(\"test/web-additions.browser.test.tsx\"),\n // SSR proves semantics but cannot catch the close-only row seen in BurnTok.\n // Keep real geometry evidence attached without promoting catalog maturity.\n toast: {\n exportNames: [\"useToast\"],\n proofs: [\n { scenarios: [\"keyboard\"], file: stableCoreProofFile },\n { scenarios: [\"dark\", \"long-copy\", \"large-text\", \"rtl\"], file: \"test/toast-layout.browser.test.tsx\" },\n ],\n },\n select: keyboard(),\n combobox: keyboard(),\n dialog: keyboard(\"test/advanced.browser.test.tsx\"),\n \"alert-dialog\": keyboardAndLongCopy(\"test/alert-dialog.keyboard.browser.test.tsx\"),\n sheet: keyboardAndLongCopy(\"test/sheet-layout.browser.test.tsx\"),\n tooltip: keyboard(\"test/tooltip.browser.test.tsx\"),\n menu: keyboardAndLongCopy(\"test/menu.keyboard.browser.test.tsx\"),\n};\n\nconst exportEntries: Readonly<Record<string, readonly `./${string}`[] | undefined>> = publicExportEntries;\n\n/**\n * One claim per active Web row of the catalog. The subpath is the symbol's canonical granular entry, the export\n * names are the row's own symbol plus the companions published on that entry, and the scenarios are the row's\n * required Web evidence minus recorded gaps. Keyboard is never implied: it comes only from a dedicated proof.\n */\nfunction derivedClaim(entry: ComponentCatalogEntry): ReactRendererEvidenceComponent {\n const componentId = componentIdOf(entry);\n const extras = claimExtras[componentId] ?? {};\n const symbols = entry.name === \"DesignSystemProvider\" ? [\"HjmProvider\"] : [entry.name, ...(entry.companions ?? [])];\n // A row whose own name is not a symbol (Chart) claims through its first published companion.\n const subpath = symbols.map((symbol) => exportEntries[symbol]?.[0]).find((entry) => entry !== undefined);\n if (!subpath) throw new Error(`${entry.name} has no granular @hjmds/react export to claim evidence on`);\n const exportNames = [\n ...symbols.filter((symbol) => exportEntries[symbol]?.includes(subpath)),\n ...(extras.exportNames ?? []),\n ];\n const required = getRequiredShowcaseEvidence(entry).find((evidence) => evidence.surface === \"web\")?.scenarios ?? [];\n const gaps = webScenarioGaps[componentId] ?? [];\n const extraProofs = extras.proofs ?? [];\n const proven = new Set(extraProofs.flatMap((proof) => proof.scenarios));\n const matrix = required.filter((scenario): scenario is ReactRendererEvidenceScenario =>\n scenario !== \"default\" && scenario !== \"keyboard\" && scenario !== \"native-actions\" && scenario !== \"contract\"\n && !gaps.includes(scenario as ReactRendererEvidenceScenario) && !proven.has(scenario as ReactRendererEvidenceScenario));\n const proofs = [\n { scenarios: [\"default\" as const], file: defaultProofFile, caseId: componentId },\n ...(matrix.length === 0 ? [] : [{ scenarios: matrix, file: matrixProofFile, caseId: componentId }]),\n ...extraProofs.map((proof) => ({ ...proof, caseId: componentId })),\n ];\n return {\n componentId,\n exportNames,\n subpath,\n scenarios: proofs.flatMap((proof) => proof.scenarios),\n proofs,\n };\n}\n\nconst activeWebEntries: readonly ComponentCatalogEntry[] = componentCatalog.filter((entry) => {\n const status = getComponentSurfaceStatus(entry, \"web\");\n return status === \"stable\" || status === \"beta\";\n});\n\n/**\n * First-party Web renderer claims. Scenario axes remain fail-closed: the\n * default scenario is an SSR render, the environment and accessibility\n * scenarios are computed-style assertions in scenario-matrix.browser.\n * Keyboard and cross-platform parity remain fail-closed until dedicated\n * interaction or paired-renderer proofs are mapped one-to-one.\n */\nexport const reactRendererEvidence = {\n schemaVersion: reactRendererEvidenceSchemaVersion,\n packageName: \"@hjmds/react\",\n packageVersion: \"1.48.0\",\n surface: \"web\",\n components: activeWebEntries.map(derivedClaim),\n} as const satisfies ReactRendererEvidenceManifest;\n"]}
|
|
@@ -182,6 +182,7 @@ export declare const publicExportEntries: {
|
|
|
182
182
|
readonly Select: readonly ["./forms"];
|
|
183
183
|
readonly SelectionActionBar: readonly ["./collection-editing"];
|
|
184
184
|
readonly SettingsScreen: readonly ["./screens"];
|
|
185
|
+
readonly ShareSheet: readonly ["./share-sheet"];
|
|
185
186
|
readonly Sheet: readonly ["./overlays"];
|
|
186
187
|
readonly ShortcutRail: readonly ["./shortcut-rail"];
|
|
187
188
|
readonly ShortcutRecorder: readonly ["./authoring-tools"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-exports.generated.d.ts","sourceRoot":"","sources":["../src/public-exports.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"public-exports.generated.d.ts","sourceRoot":"","sources":["../src/public-exports.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4tBuC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-exports.generated.js","sourceRoot":"","sources":["../src/public-exports.generated.ts"],"names":[],"mappings":"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","sourcesContent":["// Generated by scripts/sync-public-component-map.mjs --write. Do not edit by hand.\n// Public value exports per symbol, canonical granular entry first (the root entry is omitted).\nexport const publicExportEntries = {\n Accordion: [\n \"./display\"\n ],\n AccountSwitcher: [\n \"./task-controls\"\n ],\n ActivityChip: [\n \"./activity-chip\",\n \"./feedback\"\n ],\n ActivityHeatmap: [\n \"./activity-heatmap\"\n ],\n Affix: [\n \"./affix\"\n ],\n Agreement: [\n \"./agreement\"\n ],\n AlertDialog: [\n \"./overlays\"\n ],\n AlertDialogQueueProvider: [\n \"./alert-dialog-queue\"\n ],\n Anchor: [\n \"./anchor\"\n ],\n AnimatedStatistic: [\n \"./statistic-motion\"\n ],\n AspectRatio: [\n \"./layout\"\n ],\n Asset: [\n \"./asset\"\n ],\n AssetGroup: [\n \"./asset\"\n ],\n AuthProviderButton: [\n \"./provider-button\"\n ],\n AuthScreenFooter: [\n \"./auth-screen\"\n ],\n AuthScreenHero: [\n \"./auth-screen\"\n ],\n AuthScreenLayout: [\n \"./auth-screen\"\n ],\n Avatar: [\n \"./display\"\n ],\n AvatarGroup: [\n \"./display\"\n ],\n Badge: [\n \"./display\"\n ],\n BarChart: [\n \"./chart\"\n ],\n BezierEditor: [\n \"./authoring-tools\"\n ],\n BottomCTA: [\n \"./bottom-cta\"\n ],\n BottomInfo: [\n \"./bottom-info\"\n ],\n BottomNavigation: [\n \"./navigation\"\n ],\n BottomNavigationInsetProvider: [\n \"./navigation\"\n ],\n Breadcrumb: [\n \"./breadcrumb\",\n \"./navigation\"\n ],\n Button: [\n \"./actions\"\n ],\n ButtonLink: [\n \"./actions\"\n ],\n Calendar: [\n \"./calendar\"\n ],\n Card: [\n \"./display\"\n ],\n Carousel: [\n \"./carousel\"\n ],\n CarouselMotion: [\n \"./carousel-motion\"\n ],\n Celebration: [\n \"./celebration\"\n ],\n ChartLegend: [\n \"./chart\"\n ],\n ChatDateSeparator: [\n \"./screens\"\n ],\n ChatMessage: [\n \"./screens\"\n ],\n ChatRoomActions: [\n \"./communication\"\n ],\n ChatRoomCreate: [\n \"./communication\"\n ],\n ChatRoomDetails: [\n \"./communication\"\n ],\n ChatRoomInvite: [\n \"./communication\"\n ],\n ChatRoomMembers: [\n \"./communication\"\n ],\n ChatRoomProfile: [\n \"./communication\"\n ],\n ChatScreen: [\n \"./screens\"\n ],\n Checkbox: [\n \"./selection\"\n ],\n CheckboxGroup: [\n \"./selection\"\n ],\n Chip: [\n \"./selection\"\n ],\n ChoiceRow: [\n \"./choice-row\"\n ],\n ClipboardButton: [\n \"./clipboard\"\n ],\n ClipboardIconButton: [\n \"./clipboard\"\n ],\n CodeBlock: [\n \"./code-block\"\n ],\n CohortRetentionTable: [\n \"./data-workflows\"\n ],\n Collapsible: [\n \"./collapsible\"\n ],\n CollapsibleMarker: [\n \"./collapsible\"\n ],\n CollectionRail: [\n \"./collection-rail\"\n ],\n ColorPicker: [\n \"./color-picker\"\n ],\n ColorSwatchPicker: [\n \"./color-picker\"\n ],\n Combobox: [\n \"./forms\"\n ],\n CommandPalette: [\n \"./command-palette\"\n ],\n CommentThreadRow: [\n \"./screen-flows\"\n ],\n CommentThreadScreen: [\n \"./screen-flows\"\n ],\n ComparisonTable: [\n \"./data-table\"\n ],\n CompositionLayout: [\n \"./screens\"\n ],\n Container: [\n \"./layout\"\n ],\n ContentTransition: [\n \"./content-transition\"\n ],\n ContextMenu: [\n \"./context-menu\"\n ],\n ConversationListScreen: [\n \"./screens\"\n ],\n ConversationRow: [\n \"./conversation-row\"\n ],\n ConversionFunnel: [\n \"./data-workflows\"\n ],\n CorrelationMatrix: [\n \"./data-workflows\"\n ],\n CounterBadge: [\n \"./display\"\n ],\n DataTable: [\n \"./data-table\"\n ],\n DateEntry: [\n \"./date-entry\"\n ],\n DatePicker: [\n \"./date-picker\",\n \"./forms\"\n ],\n DateRangePicker: [\n \"./date-range\"\n ],\n DescriptionList: [\n \"./display\"\n ],\n Dialog: [\n \"./overlays\"\n ],\n Divider: [\n \"./display\"\n ],\n DocumentResource: [\n \"./document-resource\"\n ],\n DurationField: [\n \"./duration-field\"\n ],\n EditorScreen: [\n \"./screen-flows\"\n ],\n EffectSurface: [\n \"./effect-surface\"\n ],\n EmptyState: [\n \"./feedback\"\n ],\n EventAttendanceCard: [\n \"./social-compositions\"\n ],\n ExpandableSearch: [\n \"./communication\"\n ],\n Field: [\n \"./forms\"\n ],\n FieldGroup: [\n \"./field-group\"\n ],\n FilePicker: [\n \"./file-picker\",\n \"./forms\"\n ],\n FilterRecovery: [\n \"./collection-editing\"\n ],\n FloatingActionButton: [\n \"./floating-action-button\"\n ],\n FolderPreview: [\n \"./folder-preview\"\n ],\n FollowListScreen: [\n \"./follow-list\"\n ],\n FollowProfileCard: [\n \"./social-compositions\"\n ],\n Form: [\n \"./forms\"\n ],\n GravityLetters: [\n \"./gravity-letters\"\n ],\n Grid: [\n \"./layout\"\n ],\n GridReveal: [\n \"./grid-reveal\"\n ],\n Heading: [\n \"./heading\"\n ],\n HistogramExplorer: [\n \"./data-workflows\"\n ],\n HjmProvider: [\n \"./provider\"\n ],\n Icon: [\n \"./display\"\n ],\n IconButton: [\n \"./actions\"\n ],\n IconButtonLink: [\n \"./actions\"\n ],\n IconTile: [\n \"./screens\"\n ],\n Image: [\n \"./display\"\n ],\n ImageChoiceGroup: [\n \"./image-choice\"\n ],\n ImageComparison: [\n \"./image-comparison\"\n ],\n ImageViewer: [\n \"./image-viewer\"\n ],\n ImageViewerTrigger: [\n \"./image-viewer\"\n ],\n ImmersiveOverlay: [\n \"./overlays\"\n ],\n ImportFieldMapping: [\n \"./data-workflows\"\n ],\n InlineConfirm: [\n \"./inline-confirm\"\n ],\n InlineEdit: [\n \"./collection-editing\"\n ],\n Layout: [\n \"./layout\"\n ],\n LineChart: [\n \"./chart\"\n ],\n LineScore: [\n \"./data-table\"\n ],\n Link: [\n \"./actions\"\n ],\n List: [\n \"./display\"\n ],\n ListDetailScreen: [\n \"./screen-flows\"\n ],\n ListRow: [\n \"./display\"\n ],\n ListSeparator: [\n \"./display\"\n ],\n LoadMore: [\n \"./navigation\"\n ],\n Masonry: [\n \"./masonry\"\n ],\n MatrixTable: [\n \"./data-table\"\n ],\n MediaAlbumPageStatus: [\n \"./screens\"\n ],\n MediaSelectionCell: [\n \"./screen-flows\"\n ],\n MediaSelectionScreen: [\n \"./screen-flows\"\n ],\n MediaTransport: [\n \"./media-transport\"\n ],\n Mentions: [\n \"./mentions\"\n ],\n Menu: [\n \"./overlays\"\n ],\n Menubar: [\n \"./menubar\"\n ],\n MessageComposer: [\n \"./screens\"\n ],\n ModerationForm: [\n \"./screen-flows\"\n ],\n ModerationScreen: [\n \"./screen-flows\"\n ],\n MorphingMenu: [\n \"./menu-morph\"\n ],\n NativeSelect: [\n \"./forms\"\n ],\n NavigationBar: [\n \"./navigation-bar\"\n ],\n Notice: [\n \"./feedback\"\n ],\n NotificationBell: [\n \"./notification-bell\"\n ],\n NotificationInboxScreen: [\n \"./screens\"\n ],\n NotificationItem: [\n \"./screens\"\n ],\n NotificationRow: [\n \"./screens\"\n ],\n NumberField: [\n \"./number-field\",\n \"./forms\"\n ],\n OnboardingScreen: [\n \"./screen-flows\"\n ],\n OtpField: [\n \"./otp-field\",\n \"./forms\"\n ],\n OverlayStackProvider: [\n \"./overlay-stack\"\n ],\n OverviewScreen: [\n \"./design-profile\"\n ],\n PageIndicator: [\n \"./carousel\"\n ],\n Pagination: [\n \"./pagination\",\n \"./navigation\"\n ],\n PasswordField: [\n \"./password-field\",\n \"./forms\"\n ],\n PasswordRulesField: [\n \"./task-controls\"\n ],\n PendingContent: [\n \"./feedback\"\n ],\n PermissionScreen: [\n \"./screen-flows\"\n ],\n PhotoSourceSheet: [\n \"./screen-flows\"\n ],\n PieChart: [\n \"./chart\"\n ],\n Popover: [\n \"./popover\"\n ],\n PricingChoice: [\n \"./task-controls\"\n ],\n ProfileScreen: [\n \"./screen-flows\"\n ],\n ProfileSummary: [\n \"./screen-flows\"\n ],\n Progress: [\n \"./feedback\"\n ],\n ProgressiveBlur: [\n \"./progressive-blur\"\n ],\n QRCode: [\n \"./qr-code\"\n ],\n QuoteCard: [\n \"./display\"\n ],\n RadarChart: [\n \"./chart\"\n ],\n Radio: [\n \"./selection\"\n ],\n RadioGroup: [\n \"./selection\"\n ],\n Rating: [\n \"./rating\"\n ],\n ReactionPicker: [\n \"./reaction-picker\"\n ],\n RepeatableFieldGroup: [\n \"./collection-editing\"\n ],\n ReplyComposer: [\n \"./communication\"\n ],\n ReplyMessage: [\n \"./communication\"\n ],\n Result: [\n \"./feedback\"\n ],\n SavedItemsScreen: [\n \"./saved-items\"\n ],\n ScatterChart: [\n \"./chart\"\n ],\n ScreenLayout: [\n \"./screens\"\n ],\n ScrollProgress: [\n \"./scroll-progress\"\n ],\n SearchField: [\n \"./forms\"\n ],\n SearchScreen: [\n \"./screen-flows\"\n ],\n Section: [\n \"./layout\"\n ],\n SegmentedControl: [\n \"./selection\"\n ],\n Select: [\n \"./forms\"\n ],\n SelectionActionBar: [\n \"./collection-editing\"\n ],\n SettingsScreen: [\n \"./screens\"\n ],\n Sheet: [\n \"./overlays\"\n ],\n ShortcutRail: [\n \"./shortcut-rail\"\n ],\n ShortcutRecorder: [\n \"./authoring-tools\"\n ],\n Sidebar: [\n \"./sidebar\"\n ],\n SidePanel: [\n \"./side-panel\"\n ],\n Skeleton: [\n \"./feedback\"\n ],\n SkipNav: [\n \"./skip-nav\"\n ],\n Slider: [\n \"./slider\",\n \"./forms\"\n ],\n SortableCollection: [\n \"./sortable\"\n ],\n Sparkline: [\n \"./chart\"\n ],\n Spinner: [\n \"./feedback\"\n ],\n SplitAction: [\n \"./task-controls\"\n ],\n Splitter: [\n \"./splitter\"\n ],\n Stack: [\n \"./layout\"\n ],\n Statistic: [\n \"./display\"\n ],\n StatisticGroup: [\n \"./display\"\n ],\n StatusText: [\n \"./status-text\"\n ],\n StepPlayer: [\n \"./step-player\"\n ],\n Steps: [\n \"./steps\",\n \"./navigation\"\n ],\n StreamingAnswer: [\n \"./streaming-answer\"\n ],\n Surface: [\n \"./layout\"\n ],\n SwipeActions: [\n \"./swipe-actions\"\n ],\n Switch: [\n \"./selection\"\n ],\n Table: [\n \"./display\"\n ],\n TableColumnSettings: [\n \"./collection-editing\"\n ],\n TabPanel: [\n \"./navigation\"\n ],\n Tabs: [\n \"./navigation\"\n ],\n Tag: [\n \"./display\"\n ],\n TagsInput: [\n \"./tags-input\"\n ],\n TargetSummary: [\n \"./data-workflows\"\n ],\n TaskList: [\n \"./task-list\"\n ],\n Text: [\n \"./layout\"\n ],\n TextArea: [\n \"./forms\"\n ],\n TextField: [\n \"./forms\"\n ],\n TextFormat: [\n \"./text-formats\"\n ],\n TextTransition: [\n \"./content-transition\"\n ],\n ThinkingOrb: [\n \"./thinking-orb\"\n ],\n Timeline: [\n \"./display\"\n ],\n TimePicker: [\n \"./time-picker\"\n ],\n Toast: [\n \"./toast\"\n ],\n ToastProvider: [\n \"./toast\"\n ],\n ToggleFeedbackButton: [\n \"./toggle-feedback\"\n ],\n ToggleGroup: [\n \"./toggle-group\"\n ],\n Tooltip: [\n \"./overlays\"\n ],\n Top: [\n \"./top\"\n ],\n TopBar: [\n \"./top-bar\"\n ],\n Tour: [\n \"./tour\"\n ],\n TransferList: [\n \"./transfer-list\"\n ],\n TransferTask: [\n \"./transfer-task\"\n ],\n Tree: [\n \"./tree\"\n ],\n TypingIndicator: [\n \"./screens\"\n ],\n UploadItem: [\n \"./upload-item\",\n \"./display\"\n ],\n VirtualList: [\n \"./virtual-list\"\n ],\n VisuallyHidden: [\n \"./layout\"\n ],\n VoiceNote: [\n \"./voice-note\"\n ],\n Watermark: [\n \"./watermark\"\n ]\n} as const satisfies Readonly<Record<string, readonly `./${string}`[]>>;\n"]}
|
|
1
|
+
{"version":3,"file":"public-exports.generated.js","sourceRoot":"","sources":["../src/public-exports.generated.ts"],"names":[],"mappings":"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","sourcesContent":["// Generated by scripts/sync-public-component-map.mjs --write. Do not edit by hand.\n// Public value exports per symbol, canonical granular entry first (the root entry is omitted).\nexport const publicExportEntries = {\n Accordion: [\n \"./display\"\n ],\n AccountSwitcher: [\n \"./task-controls\"\n ],\n ActivityChip: [\n \"./activity-chip\",\n \"./feedback\"\n ],\n ActivityHeatmap: [\n \"./activity-heatmap\"\n ],\n Affix: [\n \"./affix\"\n ],\n Agreement: [\n \"./agreement\"\n ],\n AlertDialog: [\n \"./overlays\"\n ],\n AlertDialogQueueProvider: [\n \"./alert-dialog-queue\"\n ],\n Anchor: [\n \"./anchor\"\n ],\n AnimatedStatistic: [\n \"./statistic-motion\"\n ],\n AspectRatio: [\n \"./layout\"\n ],\n Asset: [\n \"./asset\"\n ],\n AssetGroup: [\n \"./asset\"\n ],\n AuthProviderButton: [\n \"./provider-button\"\n ],\n AuthScreenFooter: [\n \"./auth-screen\"\n ],\n AuthScreenHero: [\n \"./auth-screen\"\n ],\n AuthScreenLayout: [\n \"./auth-screen\"\n ],\n Avatar: [\n \"./display\"\n ],\n AvatarGroup: [\n \"./display\"\n ],\n Badge: [\n \"./display\"\n ],\n BarChart: [\n \"./chart\"\n ],\n BezierEditor: [\n \"./authoring-tools\"\n ],\n BottomCTA: [\n \"./bottom-cta\"\n ],\n BottomInfo: [\n \"./bottom-info\"\n ],\n BottomNavigation: [\n \"./navigation\"\n ],\n BottomNavigationInsetProvider: [\n \"./navigation\"\n ],\n Breadcrumb: [\n \"./breadcrumb\",\n \"./navigation\"\n ],\n Button: [\n \"./actions\"\n ],\n ButtonLink: [\n \"./actions\"\n ],\n Calendar: [\n \"./calendar\"\n ],\n Card: [\n \"./display\"\n ],\n Carousel: [\n \"./carousel\"\n ],\n CarouselMotion: [\n \"./carousel-motion\"\n ],\n Celebration: [\n \"./celebration\"\n ],\n ChartLegend: [\n \"./chart\"\n ],\n ChatDateSeparator: [\n \"./screens\"\n ],\n ChatMessage: [\n \"./screens\"\n ],\n ChatRoomActions: [\n \"./communication\"\n ],\n ChatRoomCreate: [\n \"./communication\"\n ],\n ChatRoomDetails: [\n \"./communication\"\n ],\n ChatRoomInvite: [\n \"./communication\"\n ],\n ChatRoomMembers: [\n \"./communication\"\n ],\n ChatRoomProfile: [\n \"./communication\"\n ],\n ChatScreen: [\n \"./screens\"\n ],\n Checkbox: [\n \"./selection\"\n ],\n CheckboxGroup: [\n \"./selection\"\n ],\n Chip: [\n \"./selection\"\n ],\n ChoiceRow: [\n \"./choice-row\"\n ],\n ClipboardButton: [\n \"./clipboard\"\n ],\n ClipboardIconButton: [\n \"./clipboard\"\n ],\n CodeBlock: [\n \"./code-block\"\n ],\n CohortRetentionTable: [\n \"./data-workflows\"\n ],\n Collapsible: [\n \"./collapsible\"\n ],\n CollapsibleMarker: [\n \"./collapsible\"\n ],\n CollectionRail: [\n \"./collection-rail\"\n ],\n ColorPicker: [\n \"./color-picker\"\n ],\n ColorSwatchPicker: [\n \"./color-picker\"\n ],\n Combobox: [\n \"./forms\"\n ],\n CommandPalette: [\n \"./command-palette\"\n ],\n CommentThreadRow: [\n \"./screen-flows\"\n ],\n CommentThreadScreen: [\n \"./screen-flows\"\n ],\n ComparisonTable: [\n \"./data-table\"\n ],\n CompositionLayout: [\n \"./screens\"\n ],\n Container: [\n \"./layout\"\n ],\n ContentTransition: [\n \"./content-transition\"\n ],\n ContextMenu: [\n \"./context-menu\"\n ],\n ConversationListScreen: [\n \"./screens\"\n ],\n ConversationRow: [\n \"./conversation-row\"\n ],\n ConversionFunnel: [\n \"./data-workflows\"\n ],\n CorrelationMatrix: [\n \"./data-workflows\"\n ],\n CounterBadge: [\n \"./display\"\n ],\n DataTable: [\n \"./data-table\"\n ],\n DateEntry: [\n \"./date-entry\"\n ],\n DatePicker: [\n \"./date-picker\",\n \"./forms\"\n ],\n DateRangePicker: [\n \"./date-range\"\n ],\n DescriptionList: [\n \"./display\"\n ],\n Dialog: [\n \"./overlays\"\n ],\n Divider: [\n \"./display\"\n ],\n DocumentResource: [\n \"./document-resource\"\n ],\n DurationField: [\n \"./duration-field\"\n ],\n EditorScreen: [\n \"./screen-flows\"\n ],\n EffectSurface: [\n \"./effect-surface\"\n ],\n EmptyState: [\n \"./feedback\"\n ],\n EventAttendanceCard: [\n \"./social-compositions\"\n ],\n ExpandableSearch: [\n \"./communication\"\n ],\n Field: [\n \"./forms\"\n ],\n FieldGroup: [\n \"./field-group\"\n ],\n FilePicker: [\n \"./file-picker\",\n \"./forms\"\n ],\n FilterRecovery: [\n \"./collection-editing\"\n ],\n FloatingActionButton: [\n \"./floating-action-button\"\n ],\n FolderPreview: [\n \"./folder-preview\"\n ],\n FollowListScreen: [\n \"./follow-list\"\n ],\n FollowProfileCard: [\n \"./social-compositions\"\n ],\n Form: [\n \"./forms\"\n ],\n GravityLetters: [\n \"./gravity-letters\"\n ],\n Grid: [\n \"./layout\"\n ],\n GridReveal: [\n \"./grid-reveal\"\n ],\n Heading: [\n \"./heading\"\n ],\n HistogramExplorer: [\n \"./data-workflows\"\n ],\n HjmProvider: [\n \"./provider\"\n ],\n Icon: [\n \"./display\"\n ],\n IconButton: [\n \"./actions\"\n ],\n IconButtonLink: [\n \"./actions\"\n ],\n IconTile: [\n \"./screens\"\n ],\n Image: [\n \"./display\"\n ],\n ImageChoiceGroup: [\n \"./image-choice\"\n ],\n ImageComparison: [\n \"./image-comparison\"\n ],\n ImageViewer: [\n \"./image-viewer\"\n ],\n ImageViewerTrigger: [\n \"./image-viewer\"\n ],\n ImmersiveOverlay: [\n \"./overlays\"\n ],\n ImportFieldMapping: [\n \"./data-workflows\"\n ],\n InlineConfirm: [\n \"./inline-confirm\"\n ],\n InlineEdit: [\n \"./collection-editing\"\n ],\n Layout: [\n \"./layout\"\n ],\n LineChart: [\n \"./chart\"\n ],\n LineScore: [\n \"./data-table\"\n ],\n Link: [\n \"./actions\"\n ],\n List: [\n \"./display\"\n ],\n ListDetailScreen: [\n \"./screen-flows\"\n ],\n ListRow: [\n \"./display\"\n ],\n ListSeparator: [\n \"./display\"\n ],\n LoadMore: [\n \"./navigation\"\n ],\n Masonry: [\n \"./masonry\"\n ],\n MatrixTable: [\n \"./data-table\"\n ],\n MediaAlbumPageStatus: [\n \"./screens\"\n ],\n MediaSelectionCell: [\n \"./screen-flows\"\n ],\n MediaSelectionScreen: [\n \"./screen-flows\"\n ],\n MediaTransport: [\n \"./media-transport\"\n ],\n Mentions: [\n \"./mentions\"\n ],\n Menu: [\n \"./overlays\"\n ],\n Menubar: [\n \"./menubar\"\n ],\n MessageComposer: [\n \"./screens\"\n ],\n ModerationForm: [\n \"./screen-flows\"\n ],\n ModerationScreen: [\n \"./screen-flows\"\n ],\n MorphingMenu: [\n \"./menu-morph\"\n ],\n NativeSelect: [\n \"./forms\"\n ],\n NavigationBar: [\n \"./navigation-bar\"\n ],\n Notice: [\n \"./feedback\"\n ],\n NotificationBell: [\n \"./notification-bell\"\n ],\n NotificationInboxScreen: [\n \"./screens\"\n ],\n NotificationItem: [\n \"./screens\"\n ],\n NotificationRow: [\n \"./screens\"\n ],\n NumberField: [\n \"./number-field\",\n \"./forms\"\n ],\n OnboardingScreen: [\n \"./screen-flows\"\n ],\n OtpField: [\n \"./otp-field\",\n \"./forms\"\n ],\n OverlayStackProvider: [\n \"./overlay-stack\"\n ],\n OverviewScreen: [\n \"./design-profile\"\n ],\n PageIndicator: [\n \"./carousel\"\n ],\n Pagination: [\n \"./pagination\",\n \"./navigation\"\n ],\n PasswordField: [\n \"./password-field\",\n \"./forms\"\n ],\n PasswordRulesField: [\n \"./task-controls\"\n ],\n PendingContent: [\n \"./feedback\"\n ],\n PermissionScreen: [\n \"./screen-flows\"\n ],\n PhotoSourceSheet: [\n \"./screen-flows\"\n ],\n PieChart: [\n \"./chart\"\n ],\n Popover: [\n \"./popover\"\n ],\n PricingChoice: [\n \"./task-controls\"\n ],\n ProfileScreen: [\n \"./screen-flows\"\n ],\n ProfileSummary: [\n \"./screen-flows\"\n ],\n Progress: [\n \"./feedback\"\n ],\n ProgressiveBlur: [\n \"./progressive-blur\"\n ],\n QRCode: [\n \"./qr-code\"\n ],\n QuoteCard: [\n \"./display\"\n ],\n RadarChart: [\n \"./chart\"\n ],\n Radio: [\n \"./selection\"\n ],\n RadioGroup: [\n \"./selection\"\n ],\n Rating: [\n \"./rating\"\n ],\n ReactionPicker: [\n \"./reaction-picker\"\n ],\n RepeatableFieldGroup: [\n \"./collection-editing\"\n ],\n ReplyComposer: [\n \"./communication\"\n ],\n ReplyMessage: [\n \"./communication\"\n ],\n Result: [\n \"./feedback\"\n ],\n SavedItemsScreen: [\n \"./saved-items\"\n ],\n ScatterChart: [\n \"./chart\"\n ],\n ScreenLayout: [\n \"./screens\"\n ],\n ScrollProgress: [\n \"./scroll-progress\"\n ],\n SearchField: [\n \"./forms\"\n ],\n SearchScreen: [\n \"./screen-flows\"\n ],\n Section: [\n \"./layout\"\n ],\n SegmentedControl: [\n \"./selection\"\n ],\n Select: [\n \"./forms\"\n ],\n SelectionActionBar: [\n \"./collection-editing\"\n ],\n SettingsScreen: [\n \"./screens\"\n ],\n ShareSheet: [\n \"./share-sheet\"\n ],\n Sheet: [\n \"./overlays\"\n ],\n ShortcutRail: [\n \"./shortcut-rail\"\n ],\n ShortcutRecorder: [\n \"./authoring-tools\"\n ],\n Sidebar: [\n \"./sidebar\"\n ],\n SidePanel: [\n \"./side-panel\"\n ],\n Skeleton: [\n \"./feedback\"\n ],\n SkipNav: [\n \"./skip-nav\"\n ],\n Slider: [\n \"./slider\",\n \"./forms\"\n ],\n SortableCollection: [\n \"./sortable\"\n ],\n Sparkline: [\n \"./chart\"\n ],\n Spinner: [\n \"./feedback\"\n ],\n SplitAction: [\n \"./task-controls\"\n ],\n Splitter: [\n \"./splitter\"\n ],\n Stack: [\n \"./layout\"\n ],\n Statistic: [\n \"./display\"\n ],\n StatisticGroup: [\n \"./display\"\n ],\n StatusText: [\n \"./status-text\"\n ],\n StepPlayer: [\n \"./step-player\"\n ],\n Steps: [\n \"./steps\",\n \"./navigation\"\n ],\n StreamingAnswer: [\n \"./streaming-answer\"\n ],\n Surface: [\n \"./layout\"\n ],\n SwipeActions: [\n \"./swipe-actions\"\n ],\n Switch: [\n \"./selection\"\n ],\n Table: [\n \"./display\"\n ],\n TableColumnSettings: [\n \"./collection-editing\"\n ],\n TabPanel: [\n \"./navigation\"\n ],\n Tabs: [\n \"./navigation\"\n ],\n Tag: [\n \"./display\"\n ],\n TagsInput: [\n \"./tags-input\"\n ],\n TargetSummary: [\n \"./data-workflows\"\n ],\n TaskList: [\n \"./task-list\"\n ],\n Text: [\n \"./layout\"\n ],\n TextArea: [\n \"./forms\"\n ],\n TextField: [\n \"./forms\"\n ],\n TextFormat: [\n \"./text-formats\"\n ],\n TextTransition: [\n \"./content-transition\"\n ],\n ThinkingOrb: [\n \"./thinking-orb\"\n ],\n Timeline: [\n \"./display\"\n ],\n TimePicker: [\n \"./time-picker\"\n ],\n Toast: [\n \"./toast\"\n ],\n ToastProvider: [\n \"./toast\"\n ],\n ToggleFeedbackButton: [\n \"./toggle-feedback\"\n ],\n ToggleGroup: [\n \"./toggle-group\"\n ],\n Tooltip: [\n \"./overlays\"\n ],\n Top: [\n \"./top\"\n ],\n TopBar: [\n \"./top-bar\"\n ],\n Tour: [\n \"./tour\"\n ],\n TransferList: [\n \"./transfer-list\"\n ],\n TransferTask: [\n \"./transfer-task\"\n ],\n Tree: [\n \"./tree\"\n ],\n TypingIndicator: [\n \"./screens\"\n ],\n UploadItem: [\n \"./upload-item\",\n \"./display\"\n ],\n VirtualList: [\n \"./virtual-list\"\n ],\n VisuallyHidden: [\n \"./layout\"\n ],\n VoiceNote: [\n \"./voice-note\"\n ],\n Watermark: [\n \"./watermark\"\n ]\n} as const satisfies Readonly<Record<string, readonly `./${string}`[]>>;\n"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { SheetOpenChangeDetails } from "@hjmds/design-contracts/components/sheet";
|
|
3
|
+
import { type ShareSheetLabels, type ShareSheetRecipientDescriptor, type ShareSheetRecipientLabels, type ShareSheetRecipientStatus, type ShareSheetSendResult, type ShareSheetShareContent, type ShareSheetSystemShareOutcome } from "@hjmds/design-contracts/share-sheet";
|
|
4
|
+
export type { ShareSheetLabels, ShareSheetRecipientLabels, ShareSheetRecipientStatus, ShareSheetSendResult, ShareSheetShareContent, ShareSheetSystemShareOutcome, } from "@hjmds/design-contracts/share-sheet";
|
|
5
|
+
export type ShareSheetRecipient = ShareSheetRecipientDescriptor & Readonly<{
|
|
6
|
+
image: ReactNode;
|
|
7
|
+
}>;
|
|
8
|
+
export type ShareSheetRecipientSearch = Readonly<{
|
|
9
|
+
/** Controlled query. With `onQueryChange` the product owns the query and `items` is already its result. */
|
|
10
|
+
query?: string;
|
|
11
|
+
onQueryChange?: (query: string) => void;
|
|
12
|
+
/** A server search is running. */
|
|
13
|
+
searching?: boolean;
|
|
14
|
+
}>;
|
|
15
|
+
export type ShareSheetRecipients = Readonly<{
|
|
16
|
+
items: readonly ShareSheetRecipient[];
|
|
17
|
+
labels: ShareSheetRecipientLabels;
|
|
18
|
+
/** Default `ready`. */
|
|
19
|
+
status?: ShareSheetRecipientStatus;
|
|
20
|
+
/** Shown with the `error` state. */
|
|
21
|
+
onRetry?: () => void;
|
|
22
|
+
retrying?: boolean;
|
|
23
|
+
/** Omit to filter `items` by label here; pass `onQueryChange` to search on the server. */
|
|
24
|
+
search?: ShareSheetRecipientSearch;
|
|
25
|
+
/** Recipients that already received this link (before the sheet opened). They stay checked and locked. */
|
|
26
|
+
sentIds?: readonly string[];
|
|
27
|
+
/** Sends the link to the selected ids. Delivered ids lock as sent; the rest stay selected for a retry. */
|
|
28
|
+
onSend: (ids: readonly string[]) => Promise<ShareSheetSendResult>;
|
|
29
|
+
}>;
|
|
30
|
+
export type ShareSheetProps = Readonly<{
|
|
31
|
+
open: boolean;
|
|
32
|
+
onOpenChange: (open: boolean, detail: SheetOpenChangeDetails) => void;
|
|
33
|
+
title: string;
|
|
34
|
+
labels: ShareSheetLabels;
|
|
35
|
+
/** The URL that is copied and shared. */
|
|
36
|
+
link: string;
|
|
37
|
+
/** Title and text handed to the OS share sheet with the link. */
|
|
38
|
+
shareTitle?: string;
|
|
39
|
+
shareText?: string;
|
|
40
|
+
/** Writes the link to the clipboard. Default `navigator.clipboard.writeText`; `false` hides the action. */
|
|
41
|
+
copyLink?: ((link: string) => Promise<void>) | false;
|
|
42
|
+
/**
|
|
43
|
+
* Opens the OS share sheet. Default `navigator.share` (the action is hidden where the browser has none); `false`
|
|
44
|
+
* hides the action. Reject with an `AbortError` when the user backs out.
|
|
45
|
+
*/
|
|
46
|
+
systemShare?: ((content: ShareSheetShareContent) => Promise<void>) | false;
|
|
47
|
+
onLinkCopied?: () => void;
|
|
48
|
+
/** The OS share sheet closed. `completed` is not a delivery receipt. */
|
|
49
|
+
onSystemShare?: (outcome: ShareSheetSystemShareOutcome) => void;
|
|
50
|
+
/** Product artwork for the two actions. Defaults to the HJM `copy` and `share` icons. */
|
|
51
|
+
icons?: Readonly<{
|
|
52
|
+
copyLink?: ReactNode;
|
|
53
|
+
systemShare?: ReactNode;
|
|
54
|
+
}>;
|
|
55
|
+
/** In-app recipients (group chats, followers). Omit for external sharing only. */
|
|
56
|
+
recipients?: ShareSheetRecipients;
|
|
57
|
+
/** Product feedback above the body, such as a reward earned by sending. */
|
|
58
|
+
notice?: ReactNode;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* One Sheet for sharing a link (2026-10-26, generalized from BurnTok's share sheets): optional in-app recipients with a
|
|
62
|
+
* batch send, then copy link and the OS share sheet as two round actions in the footer.
|
|
63
|
+
*/
|
|
64
|
+
export declare function ShareSheet({ open, onOpenChange, title, labels, link, shareTitle, shareText, copyLink, systemShare, onLinkCopied, onSystemShare, icons, recipients, notice, }: ShareSheetProps): import("react").JSX.Element;
|
|
65
|
+
//# sourceMappingURL=share-sheet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-sheet.d.ts","sourceRoot":"","sources":["../src/share-sheet.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useState, useSyncExternalStore } from "react";
|
|
4
|
+
import { filterShareSheetRecipients, resolveShareSheetPickerValue, resolveShareSheetSendOutcome, shareSheetRecipe, validateShareSheet, validateShareSheetRecipients, } from "@hjmds/design-contracts/share-sheet";
|
|
5
|
+
import { Button, IconButton } from "./actions.js";
|
|
6
|
+
import { EmptyState, Notice } from "./feedback.js";
|
|
7
|
+
import { SearchField } from "./forms.js";
|
|
8
|
+
import { ImageChoiceGroup } from "./image-choice.js";
|
|
9
|
+
import { Spinner } from "./internal/spinner.js";
|
|
10
|
+
import { Stack, Text } from "./layout.js";
|
|
11
|
+
import { Sheet } from "./overlays.js";
|
|
12
|
+
import { Icon } from "./supplemental-display.js";
|
|
13
|
+
const subscribeNever = () => () => { };
|
|
14
|
+
const browserShareAvailable = () => typeof navigator !== "undefined" && typeof navigator.share === "function";
|
|
15
|
+
const serverShareAvailable = () => false;
|
|
16
|
+
function isAbort(error) {
|
|
17
|
+
return typeof error === "object" && error !== null && "name" in error && error.name === "AbortError";
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* One Sheet for sharing a link (2026-10-26, generalized from BurnTok's share sheets): optional in-app recipients with a
|
|
21
|
+
* batch send, then copy link and the OS share sheet as two round actions in the footer.
|
|
22
|
+
*/
|
|
23
|
+
export function ShareSheet({ open, onOpenChange, title, labels, link, shareTitle, shareText, copyLink, systemShare, onLinkCopied, onSystemShare, icons, recipients, notice, }) {
|
|
24
|
+
validateShareSheet({ title, link, labels });
|
|
25
|
+
if (recipients)
|
|
26
|
+
validateShareSheetRecipients(recipients.items);
|
|
27
|
+
// navigator.share exists only in some browsers and never on the server; read it after hydration.
|
|
28
|
+
const browserShare = useSyncExternalStore(subscribeNever, browserShareAvailable, serverShareAvailable);
|
|
29
|
+
const copy = copyLink === false ? null : copyLink ?? ((value) => navigator.clipboard.writeText(value));
|
|
30
|
+
const share = systemShare === false ? null : systemShare ?? (browserShare ? (content) => navigator.share(content) : null);
|
|
31
|
+
const [externalAction, setExternalAction] = useState(null);
|
|
32
|
+
const [feedback, setFeedback] = useState(null);
|
|
33
|
+
const [selected, setSelected] = useState([]);
|
|
34
|
+
const [sentHere, setSentHere] = useState(() => new Set());
|
|
35
|
+
const [sending, setSending] = useState(false);
|
|
36
|
+
const [sendError, setSendError] = useState("");
|
|
37
|
+
const [localQuery, setLocalQuery] = useState("");
|
|
38
|
+
// Refs close the gap before React re-renders the busy state, so a double tap cannot start a second request.
|
|
39
|
+
const externalInFlight = useRef(false);
|
|
40
|
+
const batchInFlight = useRef(false);
|
|
41
|
+
// Bumped on every close: results of requests started in an earlier visit must not report into the next one.
|
|
42
|
+
const visit = useRef(0);
|
|
43
|
+
const mounted = useRef(false);
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
mounted.current = true;
|
|
46
|
+
return () => { mounted.current = false; visit.current += 1; };
|
|
47
|
+
}, []);
|
|
48
|
+
useEffect(() => {
|
|
49
|
+
if (open)
|
|
50
|
+
return;
|
|
51
|
+
visit.current += 1;
|
|
52
|
+
setFeedback(null);
|
|
53
|
+
setSelected([]);
|
|
54
|
+
setSentHere(new Set());
|
|
55
|
+
setSendError("");
|
|
56
|
+
setLocalQuery("");
|
|
57
|
+
}, [open]);
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
// A different link makes a "copied" claim about the old one false.
|
|
60
|
+
setFeedback(null);
|
|
61
|
+
}, [link]);
|
|
62
|
+
async function runExternal(action) {
|
|
63
|
+
if (externalInFlight.current)
|
|
64
|
+
return;
|
|
65
|
+
const run = action === "copy" ? copy : share;
|
|
66
|
+
if (!run)
|
|
67
|
+
return;
|
|
68
|
+
externalInFlight.current = true;
|
|
69
|
+
const current = visit.current;
|
|
70
|
+
setExternalAction(action);
|
|
71
|
+
setFeedback(null);
|
|
72
|
+
try {
|
|
73
|
+
if (action === "copy") {
|
|
74
|
+
await copy(link);
|
|
75
|
+
if (current !== visit.current)
|
|
76
|
+
return;
|
|
77
|
+
setFeedback("copied");
|
|
78
|
+
onLinkCopied?.();
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
await share({ url: link, ...(shareTitle ? { title: shareTitle } : {}), ...(shareText ? { text: shareText } : {}) });
|
|
82
|
+
// Resolving only means the OS sheet closed on a target; never announce delivery.
|
|
83
|
+
if (current === visit.current)
|
|
84
|
+
onSystemShare?.("completed");
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (current !== visit.current)
|
|
89
|
+
return;
|
|
90
|
+
if (action === "share" && isAbort(error))
|
|
91
|
+
onSystemShare?.("dismissed");
|
|
92
|
+
else
|
|
93
|
+
setFeedback("failed");
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
externalInFlight.current = false;
|
|
97
|
+
if (mounted.current)
|
|
98
|
+
setExternalAction(null);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const sent = new Set([...(recipients?.sentIds ?? []), ...sentHere]);
|
|
102
|
+
const pending = selected.filter(id => !sent.has(id));
|
|
103
|
+
async function sendSelected() {
|
|
104
|
+
if (!recipients || batchInFlight.current || pending.length === 0)
|
|
105
|
+
return;
|
|
106
|
+
batchInFlight.current = true;
|
|
107
|
+
const current = visit.current, requested = pending;
|
|
108
|
+
setSending(true);
|
|
109
|
+
setSendError("");
|
|
110
|
+
try {
|
|
111
|
+
const result = await recipients.onSend(requested);
|
|
112
|
+
if (current !== visit.current)
|
|
113
|
+
return;
|
|
114
|
+
const outcome = resolveShareSheetSendOutcome(requested, result);
|
|
115
|
+
const delivered = new Set(outcome.sent);
|
|
116
|
+
setSentHere(previous => new Set([...previous, ...outcome.sent]));
|
|
117
|
+
// Failed recipients stay selected, so the next press retries only them.
|
|
118
|
+
setSelected(previous => previous.filter(id => !delivered.has(id)));
|
|
119
|
+
if (outcome.failed.length)
|
|
120
|
+
setSendError(result.error ?? recipients.labels.sendFailed);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
if (current === visit.current)
|
|
124
|
+
setSendError(recipients.labels.sendFailed);
|
|
125
|
+
}
|
|
126
|
+
finally {
|
|
127
|
+
batchInFlight.current = false;
|
|
128
|
+
if (mounted.current)
|
|
129
|
+
setSending(false);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const remoteSearch = recipients?.search?.onQueryChange !== undefined;
|
|
133
|
+
const query = remoteSearch ? recipients?.search?.query ?? "" : localQuery;
|
|
134
|
+
const visible = recipients ? (remoteSearch ? recipients.items : filterShareSheetRecipients(recipients.items, query)) : [];
|
|
135
|
+
const status = recipients?.status ?? "ready";
|
|
136
|
+
const actionButton = (action, label, icon) => _jsxs(Stack, { align: "center", gap: shareSheetRecipe.actionCaptionGap, children: [_jsx(IconButton, { label: label, tone: shareSheetRecipe.actionButton.tone, size: shareSheetRecipe.actionButton.size, loading: externalAction === action, disabled: externalAction !== null, onClick: () => void runExternal(action), children: icon }), _jsx(Text, { variant: shareSheetRecipe.actionCaptionVariant, "aria-hidden": "true", children: label })] });
|
|
137
|
+
const actions = copy || share ? _jsxs(Stack, { axis: "inline", justify: "center", gap: shareSheetRecipe.actionGap, children: [copy ? actionButton("copy", labels.copyLink, icons?.copyLink ?? _jsx(Icon, { name: "copy" })) : null, share ? actionButton("share", labels.systemShare, icons?.systemShare ?? _jsx(Icon, { name: "share" })) : null] }) : null;
|
|
138
|
+
const footer = pending.length > 0 || actions ? _jsxs(Stack, { gap: shareSheetRecipe.footerGap, layoutStyle: { width: "100%" }, children: [recipients && pending.length > 0 ? _jsx(Button, { fullWidth: true, tone: shareSheetRecipe.sendButton.tone, size: shareSheetRecipe.sendButton.size, loading: sending, onClick: () => void sendSelected(), children: recipients.labels.send(pending.length) }) : null, actions] }) : undefined;
|
|
139
|
+
return _jsx(Sheet, { open: open, onOpenChange: onOpenChange, title: title, closeLabel: labels.close, busy: sending, size: recipients ? shareSheetRecipe.size.recipients : shareSheetRecipe.size.externalOnly, footer: footer, children: _jsxs(Stack, { gap: shareSheetRecipe.bodyGap, children: [notice, sendError ? _jsx(Notice, { tone: "danger", title: sendError }) : null, feedback === "copied" ? _jsx(Notice, { tone: "success", appearance: "status", title: labels.linkCopied }) : null, feedback === "failed" ? _jsx(Notice, { tone: "danger", title: labels.actionFailed }) : null, recipients ? _jsxs(_Fragment, { children: [_jsx(SearchField, { "aria-label": recipients.labels.search, placeholder: recipients.labels.search, clearLabel: recipients.labels.clearSearch, loading: recipients.search?.searching === true, value: query, onValueChange: remoteSearch ? recipients.search.onQueryChange : setLocalQuery }), status === "error" ? _jsx(Notice, { tone: "danger", title: recipients.labels.loadFailed, action: recipients.onRetry ?
|
|
140
|
+
_jsx(IconButton, { label: recipients.labels.retry, tone: "secondary", size: "small", loading: recipients.retrying === true, onClick: recipients.onRetry, children: _jsx(Icon, { name: "refresh" }) }) : undefined })
|
|
141
|
+
: status === "loading" ? _jsx(Spinner, { label: recipients.labels.loading })
|
|
142
|
+
: visible.length === 0 ? _jsx(EmptyState, { density: "compact", title: query.trim() ? recipients.labels.noResults : recipients.labels.empty })
|
|
143
|
+
: _jsx(ImageChoiceGroup, { label: recipients.labels.group, selectionMode: "multiple", showItemLabels: shareSheetRecipe.picker.showItemLabels, itemLabelLines: shareSheetRecipe.picker.itemLabelLines, disabled: sending, value: resolveShareSheetPickerValue(selected, sent, visible.map(item => item.id)), onValueChange: next => setSelected(next.filter(id => !sent.has(id))), items: visible.map(item => sent.has(item.id) ? { ...item, description: recipients.labels.sent, disabled: true } : item) })] }) : null] }) });
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=share-sheet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"share-sheet.js","sourceRoot":"","sources":["../src/share-sheet.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState, useSyncExternalStore, type ReactNode } from \"react\";\nimport type { SheetOpenChangeDetails } from \"@hjmds/design-contracts/components/sheet\";\nimport {\n filterShareSheetRecipients, resolveShareSheetPickerValue, resolveShareSheetSendOutcome, shareSheetRecipe, validateShareSheet, validateShareSheetRecipients,\n type ShareSheetLabels, type ShareSheetRecipientDescriptor, type ShareSheetRecipientLabels, type ShareSheetRecipientStatus, type ShareSheetSendResult,\n type ShareSheetShareContent, type ShareSheetSystemShareOutcome,\n} from \"@hjmds/design-contracts/share-sheet\";\nimport { Button, IconButton } from \"./actions.js\";\nimport { EmptyState, Notice } from \"./feedback.js\";\nimport { SearchField } from \"./forms.js\";\nimport { ImageChoiceGroup } from \"./image-choice.js\";\nimport { Spinner } from \"./internal/spinner.js\";\nimport { Stack, Text } from \"./layout.js\";\nimport { Sheet } from \"./overlays.js\";\nimport { Icon } from \"./supplemental-display.js\";\n\nexport type {\n ShareSheetLabels, ShareSheetRecipientLabels, ShareSheetRecipientStatus, ShareSheetSendResult, ShareSheetShareContent, ShareSheetSystemShareOutcome,\n} from \"@hjmds/design-contracts/share-sheet\";\n\nexport type ShareSheetRecipient = ShareSheetRecipientDescriptor & Readonly<{ image: ReactNode }>;\n\nexport type ShareSheetRecipientSearch = Readonly<{\n /** Controlled query. With `onQueryChange` the product owns the query and `items` is already its result. */\n query?: string;\n onQueryChange?: (query: string) => void;\n /** A server search is running. */\n searching?: boolean;\n}>;\n\nexport type ShareSheetRecipients = Readonly<{\n items: readonly ShareSheetRecipient[];\n labels: ShareSheetRecipientLabels;\n /** Default `ready`. */\n status?: ShareSheetRecipientStatus;\n /** Shown with the `error` state. */\n onRetry?: () => void;\n retrying?: boolean;\n /** Omit to filter `items` by label here; pass `onQueryChange` to search on the server. */\n search?: ShareSheetRecipientSearch;\n /** Recipients that already received this link (before the sheet opened). They stay checked and locked. */\n sentIds?: readonly string[];\n /** Sends the link to the selected ids. Delivered ids lock as sent; the rest stay selected for a retry. */\n onSend: (ids: readonly string[]) => Promise<ShareSheetSendResult>;\n}>;\n\nexport type ShareSheetProps = Readonly<{\n open: boolean;\n onOpenChange: (open: boolean, detail: SheetOpenChangeDetails) => void;\n title: string;\n labels: ShareSheetLabels;\n /** The URL that is copied and shared. */\n link: string;\n /** Title and text handed to the OS share sheet with the link. */\n shareTitle?: string;\n shareText?: string;\n /** Writes the link to the clipboard. Default `navigator.clipboard.writeText`; `false` hides the action. */\n copyLink?: ((link: string) => Promise<void>) | false;\n /**\n * Opens the OS share sheet. Default `navigator.share` (the action is hidden where the browser has none); `false`\n * hides the action. Reject with an `AbortError` when the user backs out.\n */\n systemShare?: ((content: ShareSheetShareContent) => Promise<void>) | false;\n onLinkCopied?: () => void;\n /** The OS share sheet closed. `completed` is not a delivery receipt. */\n onSystemShare?: (outcome: ShareSheetSystemShareOutcome) => void;\n /** Product artwork for the two actions. Defaults to the HJM `copy` and `share` icons. */\n icons?: Readonly<{ copyLink?: ReactNode; systemShare?: ReactNode }>;\n /** In-app recipients (group chats, followers). Omit for external sharing only. */\n recipients?: ShareSheetRecipients;\n /** Product feedback above the body, such as a reward earned by sending. */\n notice?: ReactNode;\n}>;\n\ntype ExternalAction = \"copy\" | \"share\";\ntype ExternalFeedback = \"copied\" | \"failed\";\n\nconst subscribeNever = () => () => {};\nconst browserShareAvailable = () => typeof navigator !== \"undefined\" && typeof navigator.share === \"function\";\nconst serverShareAvailable = () => false;\n\nfunction isAbort(error: unknown): boolean {\n return typeof error === \"object\" && error !== null && \"name\" in error && (error as { name: unknown }).name === \"AbortError\";\n}\n\n/**\n * One Sheet for sharing a link (2026-10-26, generalized from BurnTok's share sheets): optional in-app recipients with a\n * batch send, then copy link and the OS share sheet as two round actions in the footer.\n */\nexport function ShareSheet({\n open, onOpenChange, title, labels, link, shareTitle, shareText, copyLink, systemShare, onLinkCopied, onSystemShare, icons, recipients, notice,\n}: ShareSheetProps) {\n validateShareSheet({ title, link, labels });\n if (recipients) validateShareSheetRecipients(recipients.items);\n // navigator.share exists only in some browsers and never on the server; read it after hydration.\n const browserShare = useSyncExternalStore(subscribeNever, browserShareAvailable, serverShareAvailable);\n const copy = copyLink === false ? null : copyLink ?? ((value: string) => navigator.clipboard.writeText(value));\n const share = systemShare === false ? null : systemShare ?? (browserShare ? (content: ShareSheetShareContent) => navigator.share(content) : null);\n\n const [externalAction, setExternalAction] = useState<ExternalAction | null>(null);\n const [feedback, setFeedback] = useState<ExternalFeedback | null>(null);\n const [selected, setSelected] = useState<readonly string[]>([]);\n const [sentHere, setSentHere] = useState<ReadonlySet<string>>(() => new Set());\n const [sending, setSending] = useState(false);\n const [sendError, setSendError] = useState(\"\");\n const [localQuery, setLocalQuery] = useState(\"\");\n // Refs close the gap before React re-renders the busy state, so a double tap cannot start a second request.\n const externalInFlight = useRef(false);\n const batchInFlight = useRef(false);\n // Bumped on every close: results of requests started in an earlier visit must not report into the next one.\n const visit = useRef(0);\n const mounted = useRef(false);\n useEffect(() => {\n mounted.current = true;\n return () => { mounted.current = false; visit.current += 1; };\n }, []);\n useEffect(() => {\n if (open) return;\n visit.current += 1;\n setFeedback(null); setSelected([]); setSentHere(new Set()); setSendError(\"\"); setLocalQuery(\"\");\n }, [open]);\n useEffect(() => {\n // A different link makes a \"copied\" claim about the old one false.\n setFeedback(null);\n }, [link]);\n\n async function runExternal(action: ExternalAction) {\n if (externalInFlight.current) return;\n const run = action === \"copy\" ? copy : share;\n if (!run) return;\n externalInFlight.current = true;\n const current = visit.current;\n setExternalAction(action);\n setFeedback(null);\n try {\n if (action === \"copy\") {\n await copy!(link);\n if (current !== visit.current) return;\n setFeedback(\"copied\");\n onLinkCopied?.();\n } else {\n await share!({ url: link, ...(shareTitle ? { title: shareTitle } : {}), ...(shareText ? { text: shareText } : {}) });\n // Resolving only means the OS sheet closed on a target; never announce delivery.\n if (current === visit.current) onSystemShare?.(\"completed\");\n }\n } catch (error) {\n if (current !== visit.current) return;\n if (action === \"share\" && isAbort(error)) onSystemShare?.(\"dismissed\");\n else setFeedback(\"failed\");\n } finally {\n externalInFlight.current = false;\n if (mounted.current) setExternalAction(null);\n }\n }\n\n const sent = new Set([...(recipients?.sentIds ?? []), ...sentHere]);\n const pending = selected.filter(id => !sent.has(id));\n\n async function sendSelected() {\n if (!recipients || batchInFlight.current || pending.length === 0) return;\n batchInFlight.current = true;\n const current = visit.current, requested = pending;\n setSending(true);\n setSendError(\"\");\n try {\n const result = await recipients.onSend(requested);\n if (current !== visit.current) return;\n const outcome = resolveShareSheetSendOutcome(requested, result);\n const delivered = new Set(outcome.sent);\n setSentHere(previous => new Set([...previous, ...outcome.sent]));\n // Failed recipients stay selected, so the next press retries only them.\n setSelected(previous => previous.filter(id => !delivered.has(id)));\n if (outcome.failed.length) setSendError(result.error ?? recipients.labels.sendFailed);\n } catch {\n if (current === visit.current) setSendError(recipients.labels.sendFailed);\n } finally {\n batchInFlight.current = false;\n if (mounted.current) setSending(false);\n }\n }\n\n const remoteSearch = recipients?.search?.onQueryChange !== undefined;\n const query = remoteSearch ? recipients?.search?.query ?? \"\" : localQuery;\n const visible = recipients ? (remoteSearch ? recipients.items : filterShareSheetRecipients(recipients.items, query)) : [];\n const status = recipients?.status ?? \"ready\";\n\n const actionButton = (action: ExternalAction, label: string, icon: ReactNode) =>\n <Stack align=\"center\" gap={shareSheetRecipe.actionCaptionGap}>\n <IconButton label={label} tone={shareSheetRecipe.actionButton.tone} size={shareSheetRecipe.actionButton.size}\n loading={externalAction === action} disabled={externalAction !== null} onClick={() => void runExternal(action)}>{icon}</IconButton>\n {/* The button already carries the name; the caption is the visible copy of it. */}\n <Text variant={shareSheetRecipe.actionCaptionVariant} aria-hidden=\"true\">{label}</Text>\n </Stack>;\n const actions = copy || share ? <Stack axis=\"inline\" justify=\"center\" gap={shareSheetRecipe.actionGap}>\n {copy ? actionButton(\"copy\", labels.copyLink, icons?.copyLink ?? <Icon name=\"copy\" />) : null}\n {share ? actionButton(\"share\", labels.systemShare, icons?.systemShare ?? <Icon name=\"share\" />) : null}\n </Stack> : null;\n const footer = pending.length > 0 || actions ? <Stack gap={shareSheetRecipe.footerGap} layoutStyle={{ width: \"100%\" }}>\n {recipients && pending.length > 0 ? <Button fullWidth tone={shareSheetRecipe.sendButton.tone} size={shareSheetRecipe.sendButton.size} loading={sending}\n onClick={() => void sendSelected()}>{recipients.labels.send(pending.length)}</Button> : null}\n {actions}\n </Stack> : undefined;\n\n return <Sheet open={open} onOpenChange={onOpenChange} title={title} closeLabel={labels.close} busy={sending}\n size={recipients ? shareSheetRecipe.size.recipients : shareSheetRecipe.size.externalOnly} footer={footer}>\n <Stack gap={shareSheetRecipe.bodyGap}>\n {notice}\n {sendError ? <Notice tone=\"danger\" title={sendError} /> : null}\n {feedback === \"copied\" ? <Notice tone=\"success\" appearance=\"status\" title={labels.linkCopied} /> : null}\n {feedback === \"failed\" ? <Notice tone=\"danger\" title={labels.actionFailed} /> : null}\n {recipients ? <>\n <SearchField aria-label={recipients.labels.search} placeholder={recipients.labels.search} clearLabel={recipients.labels.clearSearch}\n loading={recipients.search?.searching === true} value={query} onValueChange={remoteSearch ? recipients.search!.onQueryChange! : setLocalQuery} />\n {status === \"error\" ? <Notice tone=\"danger\" title={recipients.labels.loadFailed} action={recipients.onRetry ?\n <IconButton label={recipients.labels.retry} tone=\"secondary\" size=\"small\" loading={recipients.retrying === true} onClick={recipients.onRetry}><Icon name=\"refresh\" /></IconButton> : undefined} />\n : status === \"loading\" ? <Spinner label={recipients.labels.loading} />\n : visible.length === 0 ? <EmptyState density=\"compact\" title={query.trim() ? recipients.labels.noResults : recipients.labels.empty} />\n : <ImageChoiceGroup label={recipients.labels.group} selectionMode=\"multiple\" showItemLabels={shareSheetRecipe.picker.showItemLabels}\n itemLabelLines={shareSheetRecipe.picker.itemLabelLines} disabled={sending}\n value={resolveShareSheetPickerValue(selected, sent, visible.map(item => item.id))}\n onValueChange={next => setSelected(next.filter(id => !sent.has(id)))}\n items={visible.map(item => sent.has(item.id) ? { ...item, description: recipients.labels.sent, disabled: true } : item)} />}\n </> : null}\n </Stack>\n </Sheet>;\n}\n"]}
|
package/dist/styles.css
CHANGED
|
@@ -1014,6 +1014,18 @@
|
|
|
1014
1014
|
/* Product classification color (Badge categoryColor): the renderer resolves fill, ink and stroke per theme and checks AA. */
|
|
1015
1015
|
.hjm-badge[data-tone="category"] { color: var(--hjm-badge-category-content); background: var(--hjm-badge-category-background); }
|
|
1016
1016
|
.hjm-badge[data-variant="outline"][data-tone="category"] { background: transparent; border-color: var(--hjm-badge-category-border); }
|
|
1017
|
+
|
|
1018
|
+
/* Plain status badges keep semantic ink without a plate or outline. */
|
|
1019
|
+
.hjm-badge[data-variant="plain"] { background: transparent; border: 1px solid var(--hjm-color-border); color: var(--hjm-color-text-muted); }
|
|
1020
|
+
.hjm-badge[data-variant="plain"][data-tone="strong"] { color: var(--hjm-color-text); }
|
|
1021
|
+
.hjm-badge[data-variant="plain"][data-tone="brand"] { color: var(--hjm-color-content-brand); }
|
|
1022
|
+
.hjm-badge[data-variant="plain"][data-tone="danger"] { color: var(--hjm-color-danger); }
|
|
1023
|
+
.hjm-badge[data-variant="plain"][data-tone="info"] { background: transparent; color: var(--hjm-accent-info); border-color: color-mix(in srgb, var(--hjm-accent-info) 30%, transparent); }
|
|
1024
|
+
.hjm-badge[data-variant="plain"][data-tone="success"] { background: transparent; color: var(--hjm-accent-success); border-color: color-mix(in srgb, var(--hjm-accent-success) 30%, transparent); }
|
|
1025
|
+
.hjm-badge[data-variant="plain"][data-tone="warning"] { background: transparent; color: var(--hjm-accent-warning); border-color: color-mix(in srgb, var(--hjm-accent-warning) 30%, transparent); }
|
|
1026
|
+
.hjm-badge[data-variant="plain"][data-tone="attention"] { background: transparent; color: var(--hjm-accent-attention); border-color: color-mix(in srgb, var(--hjm-accent-attention) 30%, transparent); }
|
|
1027
|
+
.hjm-badge[data-variant="plain"][data-tone="category"] { background: transparent; border-color: var(--hjm-badge-category-border); }
|
|
1028
|
+
.hjm-badge[data-variant="plain"] { border: 0; }
|
|
1017
1029
|
.hjm-tag[data-tone="info"] { color: var(--hjm-accent-info); background: color-mix(in srgb, var(--hjm-accent-info) 14%, transparent); border-color: color-mix(in srgb, var(--hjm-accent-info) 30%, transparent); }
|
|
1018
1030
|
.hjm-tag[data-tone="success"] { color: var(--hjm-accent-success); background: color-mix(in srgb, var(--hjm-accent-success) 14%, transparent); border-color: color-mix(in srgb, var(--hjm-accent-success) 30%, transparent); }
|
|
1019
1031
|
.hjm-tag[data-tone="attention"] { color: var(--hjm-accent-attention); background: color-mix(in srgb, var(--hjm-accent-attention) 14%, transparent); border-color: color-mix(in srgb, var(--hjm-accent-attention) 30%, transparent); }
|
|
@@ -1471,8 +1483,8 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1471
1483
|
.hjm-line-score__table .hjm-line-score__team { inset-inline-start: 0; }
|
|
1472
1484
|
.hjm-line-score__table td.hjm-line-score__period { min-inline-size: 26px; color: var(--hjm-color-text-sub); }
|
|
1473
1485
|
.hjm-line-score__table td[data-scored] { color: var(--hjm-color-text); font-weight: var(--hjm-text-emphasis-medium); }
|
|
1474
|
-
.hjm-line-score__table [data-current] { background: var(--hjm-
|
|
1475
|
-
.hjm-line-score__table th[data-current] { color: var(--hjm-
|
|
1486
|
+
.hjm-line-score__table [data-current] { background: var(--hjm-line-score-current-background); }
|
|
1487
|
+
.hjm-line-score__table th[data-current] { color: var(--hjm-line-score-current-color); }
|
|
1476
1488
|
.hjm-line-score__total { inline-size: var(--hjm-line-score-total-width); min-inline-size: var(--hjm-line-score-total-width); color: var(--hjm-color-text-muted); font-weight: var(--hjm-text-emphasis-medium); }
|
|
1477
1489
|
/* A collapsed-table border stays with the table, not the pinned cell, so the edge is an inset shadow. */
|
|
1478
1490
|
.hjm-line-score__total-edge { box-shadow: inset 1px 0 0 var(--hjm-color-border); }
|
package/dist/styles.layered.css
CHANGED
|
@@ -1015,6 +1015,18 @@
|
|
|
1015
1015
|
/* Product classification color (Badge categoryColor): the renderer resolves fill, ink and stroke per theme and checks AA. */
|
|
1016
1016
|
.hjm-badge[data-tone="category"] { color: var(--hjm-badge-category-content); background: var(--hjm-badge-category-background); }
|
|
1017
1017
|
.hjm-badge[data-variant="outline"][data-tone="category"] { background: transparent; border-color: var(--hjm-badge-category-border); }
|
|
1018
|
+
|
|
1019
|
+
/* Plain status badges keep semantic ink without a plate or outline. */
|
|
1020
|
+
.hjm-badge[data-variant="plain"] { background: transparent; border: 1px solid var(--hjm-color-border); color: var(--hjm-color-text-muted); }
|
|
1021
|
+
.hjm-badge[data-variant="plain"][data-tone="strong"] { color: var(--hjm-color-text); }
|
|
1022
|
+
.hjm-badge[data-variant="plain"][data-tone="brand"] { color: var(--hjm-color-content-brand); }
|
|
1023
|
+
.hjm-badge[data-variant="plain"][data-tone="danger"] { color: var(--hjm-color-danger); }
|
|
1024
|
+
.hjm-badge[data-variant="plain"][data-tone="info"] { background: transparent; color: var(--hjm-accent-info); border-color: color-mix(in srgb, var(--hjm-accent-info) 30%, transparent); }
|
|
1025
|
+
.hjm-badge[data-variant="plain"][data-tone="success"] { background: transparent; color: var(--hjm-accent-success); border-color: color-mix(in srgb, var(--hjm-accent-success) 30%, transparent); }
|
|
1026
|
+
.hjm-badge[data-variant="plain"][data-tone="warning"] { background: transparent; color: var(--hjm-accent-warning); border-color: color-mix(in srgb, var(--hjm-accent-warning) 30%, transparent); }
|
|
1027
|
+
.hjm-badge[data-variant="plain"][data-tone="attention"] { background: transparent; color: var(--hjm-accent-attention); border-color: color-mix(in srgb, var(--hjm-accent-attention) 30%, transparent); }
|
|
1028
|
+
.hjm-badge[data-variant="plain"][data-tone="category"] { background: transparent; border-color: var(--hjm-badge-category-border); }
|
|
1029
|
+
.hjm-badge[data-variant="plain"] { border: 0; }
|
|
1018
1030
|
.hjm-tag[data-tone="info"] { color: var(--hjm-accent-info); background: color-mix(in srgb, var(--hjm-accent-info) 14%, transparent); border-color: color-mix(in srgb, var(--hjm-accent-info) 30%, transparent); }
|
|
1019
1031
|
.hjm-tag[data-tone="success"] { color: var(--hjm-accent-success); background: color-mix(in srgb, var(--hjm-accent-success) 14%, transparent); border-color: color-mix(in srgb, var(--hjm-accent-success) 30%, transparent); }
|
|
1020
1032
|
.hjm-tag[data-tone="attention"] { color: var(--hjm-accent-attention); background: color-mix(in srgb, var(--hjm-accent-attention) 14%, transparent); border-color: color-mix(in srgb, var(--hjm-accent-attention) 30%, transparent); }
|
|
@@ -1472,8 +1484,8 @@ button.hjm-list-row, a.hjm-list-row { cursor: pointer; }
|
|
|
1472
1484
|
.hjm-line-score__table .hjm-line-score__team { inset-inline-start: 0; }
|
|
1473
1485
|
.hjm-line-score__table td.hjm-line-score__period { min-inline-size: 26px; color: var(--hjm-color-text-sub); }
|
|
1474
1486
|
.hjm-line-score__table td[data-scored] { color: var(--hjm-color-text); font-weight: var(--hjm-text-emphasis-medium); }
|
|
1475
|
-
.hjm-line-score__table [data-current] { background: var(--hjm-
|
|
1476
|
-
.hjm-line-score__table th[data-current] { color: var(--hjm-
|
|
1487
|
+
.hjm-line-score__table [data-current] { background: var(--hjm-line-score-current-background); }
|
|
1488
|
+
.hjm-line-score__table th[data-current] { color: var(--hjm-line-score-current-color); }
|
|
1477
1489
|
.hjm-line-score__total { inline-size: var(--hjm-line-score-total-width); min-inline-size: var(--hjm-line-score-total-width); color: var(--hjm-color-text-muted); font-weight: var(--hjm-text-emphasis-medium); }
|
|
1478
1490
|
/* A collapsed-table border stays with the table, not the pinned cell, so the edge is an inset shadow. */
|
|
1479
1491
|
.hjm-line-score__total-edge { box-shadow: inset 1px 0 0 var(--hjm-color-border); }
|
package/dist/table-family.js
CHANGED
|
@@ -62,7 +62,7 @@ export function LineScore({ teams, totals, currentPeriod = null, minPeriods, ren
|
|
|
62
62
|
return;
|
|
63
63
|
container.querySelector(`thead [data-period="${focusPeriod}"]`)?.scrollIntoView({ block: "nearest", inline: "nearest" });
|
|
64
64
|
}, [focusPeriod, periods.length]);
|
|
65
|
-
return (_jsx("div", { ref: host, className: classNames("hjm-table-family", "hjm-line-score", className), style: { ...withFamilyStyle(layoutStyle), "--hjm-line-score-total-count": totalColumns.length }, children: _jsxs("table", { className: "hjm-line-score__table", "aria-label": accessibilityLabel, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("td", { className: "hjm-line-score__team" }), periods.map((column, index) => {
|
|
65
|
+
return (_jsx("div", { ref: host, className: classNames("hjm-table-family", "hjm-line-score", className), style: { ...withFamilyStyle(layoutStyle), "--hjm-line-score-current-background": tableCssColor(dataTableFamilyRecipe.currentPeriod.background), "--hjm-line-score-current-color": tableCssColor(dataTableFamilyRecipe.currentPeriod.color), "--hjm-line-score-total-count": totalColumns.length }, children: _jsxs("table", { className: "hjm-line-score__table", "aria-label": accessibilityLabel, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("td", { className: "hjm-line-score__team" }), periods.map((column, index) => {
|
|
66
66
|
const live = score.currentPeriod === index + 1;
|
|
67
67
|
return _jsx("th", { scope: "col", className: "hjm-line-score__period", "data-period": index + 1, "aria-current": live ? "true" : undefined, "data-current": live || undefined, children: column.header }, column.id);
|
|
68
68
|
}), totalColumns.map((column, index) => (_jsx("th", { scope: "col", className: classNames("hjm-line-score__total", index === 0 && "hjm-line-score__total-edge"), style: totalOffset(totalColumns.length, index), children: column.header }, column.id)))] }) }), _jsx("tbody", { children: teams.map((team) => (_jsxs("tr", { "data-leader": score.leaderId === team.id || undefined, children: [_jsx("th", { scope: "row", className: "hjm-line-score__team", children: _jsxs("span", { className: "hjm-line-score__team-content", children: [renderTeam?.(team), _jsx("span", { children: team.name })] }) }), periods.map((column, index) => {
|
package/dist/table-family.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table-family.js","sourceRoot":"","sources":["../src/table-family.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport { useLayoutEffect, useRef, type CSSProperties, type ReactNode } from \"react\";\nimport type { ColorReference } from \"@hjmds/design-contracts/color-references\";\nimport {\n dataTableFamilyRecipe, formatLineScoreCell, resolveComparisonRow, resolveLineScore, resolveMatrix,\n type ComparisonRow, type DataTableCellHeat, type DataTableCellTone, type LineScoreTeam, type MatrixCell,\n} from \"@hjmds/design-contracts/components/data-table\";\nimport { classNames } from \"./internal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\n/*\n * Table family companions (2026-10-14): layouts products kept hand-building next to DataTable.\n * LineScore follows MLB/ESPN game headers, MatrixTable a head-to-head cross table, ComparisonTable\n * the ESPN matchup rows. Geometry and rules live in the data-table contract; these only draw.\n */\n\nfunction kebab(value: string): string {\n return value.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n}\n\n/** Recipe colors resolve through the provider's CSS variables so a theme switch repaints without re-rendering (same as Chart). */\nexport function tableCssColor(reference: ColorReference): string {\n const name = reference.source === \"theme\"\n ? `--hjm-color-${kebab(reference.key)}`\n : reference.source === \"accent\" ? `--hjm-accent-${kebab(reference.key)}` : `--hjm-accent-fill-${kebab(reference.key)}`;\n return reference.alpha === undefined || reference.alpha === 1\n ? `var(${name})`\n : `color-mix(in srgb, var(${name}) ${Math.round(reference.alpha * 100)}%, transparent)`;\n}\n\n/** Live period and \"my team\" row share the family highlight tint. */\nconst familyStyle = { \"--hjm-table-family-selected\": tableCssColor(dataTableFamilyRecipe.highlight.background) } as CSSProperties;\nconst withFamilyStyle = (layoutStyle: HjmCompositionStyleProp | undefined) => ({ ...familyStyle, ...layoutStyle }) as CSSProperties;\n\nexport type TableHeatColors = Readonly<{ high: string; low: string }>;\n\n/**\n * Cell emphasis as inline style. Heat paints a background *image* so pinned cells keep their opaque\n * canvas color underneath and scrolled content never shows through the translucent tint.\n */\nexport function tableCellEmphasis(\n decoration: Readonly<{ tone?: DataTableCellTone | null; heat?: DataTableCellHeat | null }> | null | undefined,\n heatColors?: TableHeatColors,\n): Readonly<{ style: CSSProperties; tone?: DataTableCellTone; heat?: string }> {\n if (!decoration) return { style: {} };\n const style: Record<string, string | number> = {};\n const tone = decoration.tone ?? undefined, heat = decoration.heat ?? null;\n if (tone) {\n style.color = tableCssColor(dataTableFamilyRecipe.tone[tone].color);\n style.fontWeight = dataTableFamilyRecipe.tone[tone].fontWeight;\n }\n if (heat) {\n const base = heatColors?.[heat.side] ?? tableCssColor(dataTableFamilyRecipe.heat[heat.side]);\n style[\"--hjm-data-table-heat\"] = `color-mix(in srgb, ${base} ${Math.round(dataTableFamilyRecipe.heatAlpha[heat.strength] * 100)}%, transparent)`;\n }\n return { style: style as CSSProperties, ...(tone ? { tone } : {}), ...(heat ? { heat: `${heat.side}-${heat.strength}` } : {}) };\n}\n\n/* ---------------------------------------------- Line score ------------------------------------- */\n\n/**\n * Team and total columns stay pinned while only the periods scroll, as on Native: at 402px the totals — the result —\n * scrolled off with the extra innings (2026-10-17 review E17). Totals have a fixed width so each can pin at its offset.\n */\nconst totalOffset = (count: number, index: number): CSSProperties => ({ insetInlineEnd: `calc(var(--hjm-line-score-total-width) * ${count - 1 - index})` });\n\nexport type LineScoreProps = Readonly<{\n teams: readonly LineScoreTeam[];\n /** Total column headers in order, e.g. [\"R\", \"H\", \"E\", \"B\"]. The first one decides the leader. */\n totals: readonly string[];\n /** Live period (1-based) to highlight. */\n currentPeriod?: number | null;\n minPeriods?: number;\n /** Optional leading content per team (logo/badge). */\n renderTeam?: (team: LineScoreTeam) => ReactNode;\n /** Accessible name of the table (prop name kept for Native parity). */\n accessibilityLabel: string;\n className?: string;\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport function LineScore({ teams, totals, currentPeriod = null, minPeriods, renderTeam, accessibilityLabel, className, layoutStyle }: LineScoreProps) {\n const score = resolveLineScore(teams, { totals, currentPeriod, ...(minPeriods !== undefined ? { minPeriods } : {}) });\n const periods = score.columns.filter((column) => column.kind === \"period\");\n const totalColumns = score.columns.filter((column) => column.kind === \"total\");\n // Open the period strip at the live (or latest) period, as Native: starting at inning 1 hid extra innings behind the\n // pinned totals and read as a shorter game (2026-10-17 review N4). scroll-padding keeps it clear of the totals.\n const host = useRef<HTMLDivElement>(null);\n const focusPeriod = score.currentPeriod ?? periods.length;\n useLayoutEffect(() => {\n const container = host.current;\n if (!container || container.scrollWidth <= container.clientWidth) return;\n container.querySelector<HTMLElement>(`thead [data-period=\"${focusPeriod}\"]`)?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n }, [focusPeriod, periods.length]);\n return (\n <div ref={host} className={classNames(\"hjm-table-family\", \"hjm-line-score\", className)} style={{ ...withFamilyStyle(layoutStyle), \"--hjm-line-score-total-count\": totalColumns.length } as CSSProperties}>\n <table className=\"hjm-line-score__table\" aria-label={accessibilityLabel}>\n <thead>\n <tr>\n <td className=\"hjm-line-score__team\" />\n {periods.map((column, index) => {\n const live = score.currentPeriod === index + 1;\n return <th key={column.id} scope=\"col\" className=\"hjm-line-score__period\" data-period={index + 1} aria-current={live ? \"true\" : undefined} data-current={live || undefined}>{column.header}</th>;\n })}\n {totalColumns.map((column, index) => (\n <th key={column.id} scope=\"col\" className={classNames(\"hjm-line-score__total\", index === 0 && \"hjm-line-score__total-edge\")} style={totalOffset(totalColumns.length, index)}>{column.header}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {teams.map((team) => (\n <tr key={team.id} data-leader={score.leaderId === team.id || undefined}>\n <th scope=\"row\" className=\"hjm-line-score__team\">\n <span className=\"hjm-line-score__team-content\">{renderTeam?.(team)}<span>{team.name}</span></span>\n </th>\n {periods.map((column, index) => {\n const value = team.periods[index];\n return <td key={column.id} className=\"hjm-line-score__period\" data-current={score.currentPeriod === index + 1 || undefined} data-scored={typeof value === \"number\" && value > 0 || undefined}>{formatLineScoreCell(value)}</td>;\n })}\n {totalColumns.map((column, index) => (\n <td key={column.id} className={classNames(\"hjm-line-score__total\", index === 0 && \"hjm-line-score__total-edge\")} style={totalOffset(totalColumns.length, index)}>{team.totals[column.header] ?? \"—\"}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\n/* ---------------------------------------------- Matrix table ----------------------------------- */\n\nexport type MatrixTableProps<Key extends string = string> = Readonly<{\n ids: readonly Key[];\n /** Short header per id (team short name). */\n labelOf: (id: Key) => string;\n getCell: (row: Key, column: Key) => MatrixCell | null;\n /** Row id to highlight (my team). */\n highlightId?: Key | null;\n heatColors?: TableHeatColors;\n accessibilityLabel: string;\n className?: string;\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport function MatrixTable<Key extends string = string>({ ids, labelOf, getCell, highlightId = null, heatColors, accessibilityLabel, className, layoutStyle }: MatrixTableProps<Key>) {\n const matrix = resolveMatrix(ids, getCell);\n return (\n <div className={classNames(\"hjm-table-family\", \"hjm-matrix-table\", className)} style={withFamilyStyle(layoutStyle)}>\n <table className=\"hjm-matrix-table__table\" aria-label={accessibilityLabel}>\n <thead>\n <tr>\n <td className=\"hjm-matrix-table__corner\" />\n {ids.map((id) => <th key={id} scope=\"col\">{labelOf(id)}</th>)}\n </tr>\n </thead>\n <tbody>\n {matrix.map((cells, rowIndex) => {\n const rowId = ids[rowIndex]!;\n return (\n <tr key={rowId} data-highlighted={rowId === highlightId || undefined}>\n <th scope=\"row\">{labelOf(rowId)}</th>\n {cells.map((cell, columnIndex) => {\n // The diagonal is a team against itself: blank and hidden, not \"no record\".\n if (cell === \"self\") return <td key={ids[columnIndex]} className=\"hjm-matrix-table__self\" aria-hidden=\"true\" />;\n const emphasis = tableCellEmphasis(cell, heatColors);\n return <td key={ids[columnIndex]} className={emphasis.heat ? \"hjm-table-family__heat\" : undefined} style={emphasis.style} data-tone={emphasis.tone} data-heat={emphasis.heat}>{cell?.label ?? \"—\"}</td>;\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\n/* ---------------------------------------------- Comparison table ------------------------------- */\n\nexport type ComparisonTableProps = Readonly<{\n rows: readonly ComparisonRow[];\n /** Side names and accent colors (team colors). */\n sides: readonly [Readonly<{ name: string; color: string }>, Readonly<{ name: string; color: string }>];\n /** Hide duplicate visual names when the two sides are already identified above; spoken row labels retain them. */\n showSideNames?: boolean;\n accessibilityLabel: string;\n className?: string;\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport function ComparisonTable({ rows, sides, showSideNames = true, accessibilityLabel, className, layoutStyle }: ComparisonTableProps) {\n return (\n <section className={classNames(\"hjm-table-family\", \"hjm-comparison-table\", className)} style={withFamilyStyle(layoutStyle)} aria-label={accessibilityLabel}>\n {showSideNames && <div className=\"hjm-comparison-table__sides\" aria-hidden=\"true\">\n {sides.map((side, index) => <span key={index} style={{ color: side.color }}>{side.name}</span>)}\n </div>}\n <ul className=\"hjm-comparison-table__rows\" role=\"list\">\n {rows.map((row) => {\n const { winner, shares } = resolveComparisonRow(row);\n const shown = row.display ?? [row.values[0] === null ? \"—\" : String(row.values[0]), row.values[1] === null ? \"—\" : String(row.values[1])];\n return (\n <li key={row.id} className=\"hjm-comparison-table__row\" data-winner={winner ?? undefined}>\n {/* One sentence for assistive tech; the visual grid and bars are decoration. */}\n <span className=\"hjm-visually-hidden\">{`${row.label} ${sides[0].name} ${shown[0]}, ${sides[1].name} ${shown[1]}`}</span>\n <div className=\"hjm-comparison-table__values\" aria-hidden=\"true\">\n <span data-win={winner === 0 || undefined}>{shown[0]}</span>\n <span className=\"hjm-comparison-table__label\">{row.label}</span>\n <span data-win={winner === 1 || undefined}>{shown[1]}</span>\n </div>\n <div className=\"hjm-comparison-table__bars\" aria-hidden=\"true\">\n {([0, 1] as const).map((index) => (\n <span key={index} className=\"hjm-comparison-table__track\" data-side={index}>\n <span\n className=\"hjm-comparison-table__bar\"\n style={{ inlineSize: `${Math.round(shares[index] * 1000) / 10}%`, background: sides[index].color, opacity: winner === null || winner === index ? 1 : 0.6 }}\n />\n </span>\n ))}\n </div>\n </li>\n );\n })}\n </ul>\n </section>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"table-family.js","sourceRoot":"","sources":["../src/table-family.tsx"],"names":[],"mappings":"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","sourcesContent":["\"use client\";\n\nimport { useLayoutEffect, useRef, type CSSProperties, type ReactNode } from \"react\";\nimport type { ColorReference } from \"@hjmds/design-contracts/color-references\";\nimport {\n dataTableFamilyRecipe, formatLineScoreCell, resolveComparisonRow, resolveLineScore, resolveMatrix,\n type ComparisonRow, type DataTableCellHeat, type DataTableCellTone, type LineScoreTeam, type MatrixCell,\n} from \"@hjmds/design-contracts/components/data-table\";\nimport { classNames } from \"./internal.js\";\nimport type { HjmCompositionStyleProp } from \"./composition-style.js\";\n\n/*\n * Table family companions (2026-10-14): layouts products kept hand-building next to DataTable.\n * LineScore follows MLB/ESPN game headers, MatrixTable a head-to-head cross table, ComparisonTable\n * the ESPN matchup rows. Geometry and rules live in the data-table contract; these only draw.\n */\n\nfunction kebab(value: string): string {\n return value.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n}\n\n/** Recipe colors resolve through the provider's CSS variables so a theme switch repaints without re-rendering (same as Chart). */\nexport function tableCssColor(reference: ColorReference): string {\n const name = reference.source === \"theme\"\n ? `--hjm-color-${kebab(reference.key)}`\n : reference.source === \"accent\" ? `--hjm-accent-${kebab(reference.key)}` : `--hjm-accent-fill-${kebab(reference.key)}`;\n return reference.alpha === undefined || reference.alpha === 1\n ? `var(${name})`\n : `color-mix(in srgb, var(${name}) ${Math.round(reference.alpha * 100)}%, transparent)`;\n}\n\n/** Live period and \"my team\" row share the family highlight tint. */\nconst familyStyle = { \"--hjm-table-family-selected\": tableCssColor(dataTableFamilyRecipe.highlight.background) } as CSSProperties;\nconst withFamilyStyle = (layoutStyle: HjmCompositionStyleProp | undefined) => ({ ...familyStyle, ...layoutStyle }) as CSSProperties;\n\nexport type TableHeatColors = Readonly<{ high: string; low: string }>;\n\n/**\n * Cell emphasis as inline style. Heat paints a background *image* so pinned cells keep their opaque\n * canvas color underneath and scrolled content never shows through the translucent tint.\n */\nexport function tableCellEmphasis(\n decoration: Readonly<{ tone?: DataTableCellTone | null; heat?: DataTableCellHeat | null }> | null | undefined,\n heatColors?: TableHeatColors,\n): Readonly<{ style: CSSProperties; tone?: DataTableCellTone; heat?: string }> {\n if (!decoration) return { style: {} };\n const style: Record<string, string | number> = {};\n const tone = decoration.tone ?? undefined, heat = decoration.heat ?? null;\n if (tone) {\n style.color = tableCssColor(dataTableFamilyRecipe.tone[tone].color);\n style.fontWeight = dataTableFamilyRecipe.tone[tone].fontWeight;\n }\n if (heat) {\n const base = heatColors?.[heat.side] ?? tableCssColor(dataTableFamilyRecipe.heat[heat.side]);\n style[\"--hjm-data-table-heat\"] = `color-mix(in srgb, ${base} ${Math.round(dataTableFamilyRecipe.heatAlpha[heat.strength] * 100)}%, transparent)`;\n }\n return { style: style as CSSProperties, ...(tone ? { tone } : {}), ...(heat ? { heat: `${heat.side}-${heat.strength}` } : {}) };\n}\n\n/* ---------------------------------------------- Line score ------------------------------------- */\n\n/**\n * Team and total columns stay pinned while only the periods scroll, as on Native: at 402px the totals — the result —\n * scrolled off with the extra innings (2026-10-17 review E17). Totals have a fixed width so each can pin at its offset.\n */\nconst totalOffset = (count: number, index: number): CSSProperties => ({ insetInlineEnd: `calc(var(--hjm-line-score-total-width) * ${count - 1 - index})` });\n\nexport type LineScoreProps = Readonly<{\n teams: readonly LineScoreTeam[];\n /** Total column headers in order, e.g. [\"R\", \"H\", \"E\", \"B\"]. The first one decides the leader. */\n totals: readonly string[];\n /** Live period (1-based) to highlight. */\n currentPeriod?: number | null;\n minPeriods?: number;\n /** Optional leading content per team (logo/badge). */\n renderTeam?: (team: LineScoreTeam) => ReactNode;\n /** Accessible name of the table (prop name kept for Native parity). */\n accessibilityLabel: string;\n className?: string;\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport function LineScore({ teams, totals, currentPeriod = null, minPeriods, renderTeam, accessibilityLabel, className, layoutStyle }: LineScoreProps) {\n const score = resolveLineScore(teams, { totals, currentPeriod, ...(minPeriods !== undefined ? { minPeriods } : {}) });\n const periods = score.columns.filter((column) => column.kind === \"period\");\n const totalColumns = score.columns.filter((column) => column.kind === \"total\");\n // Open the period strip at the live (or latest) period, as Native: starting at inning 1 hid extra innings behind the\n // pinned totals and read as a shorter game (2026-10-17 review N4). scroll-padding keeps it clear of the totals.\n const host = useRef<HTMLDivElement>(null);\n const focusPeriod = score.currentPeriod ?? periods.length;\n useLayoutEffect(() => {\n const container = host.current;\n if (!container || container.scrollWidth <= container.clientWidth) return;\n container.querySelector<HTMLElement>(`thead [data-period=\"${focusPeriod}\"]`)?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n }, [focusPeriod, periods.length]);\n return (\n <div ref={host} className={classNames(\"hjm-table-family\", \"hjm-line-score\", className)} style={{ ...withFamilyStyle(layoutStyle), \"--hjm-line-score-current-background\": tableCssColor(dataTableFamilyRecipe.currentPeriod.background), \"--hjm-line-score-current-color\": tableCssColor(dataTableFamilyRecipe.currentPeriod.color), \"--hjm-line-score-total-count\": totalColumns.length } as CSSProperties}>\n <table className=\"hjm-line-score__table\" aria-label={accessibilityLabel}>\n <thead>\n <tr>\n <td className=\"hjm-line-score__team\" />\n {periods.map((column, index) => {\n const live = score.currentPeriod === index + 1;\n return <th key={column.id} scope=\"col\" className=\"hjm-line-score__period\" data-period={index + 1} aria-current={live ? \"true\" : undefined} data-current={live || undefined}>{column.header}</th>;\n })}\n {totalColumns.map((column, index) => (\n <th key={column.id} scope=\"col\" className={classNames(\"hjm-line-score__total\", index === 0 && \"hjm-line-score__total-edge\")} style={totalOffset(totalColumns.length, index)}>{column.header}</th>\n ))}\n </tr>\n </thead>\n <tbody>\n {teams.map((team) => (\n <tr key={team.id} data-leader={score.leaderId === team.id || undefined}>\n <th scope=\"row\" className=\"hjm-line-score__team\">\n <span className=\"hjm-line-score__team-content\">{renderTeam?.(team)}<span>{team.name}</span></span>\n </th>\n {periods.map((column, index) => {\n const value = team.periods[index];\n return <td key={column.id} className=\"hjm-line-score__period\" data-current={score.currentPeriod === index + 1 || undefined} data-scored={typeof value === \"number\" && value > 0 || undefined}>{formatLineScoreCell(value)}</td>;\n })}\n {totalColumns.map((column, index) => (\n <td key={column.id} className={classNames(\"hjm-line-score__total\", index === 0 && \"hjm-line-score__total-edge\")} style={totalOffset(totalColumns.length, index)}>{team.totals[column.header] ?? \"—\"}</td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\n/* ---------------------------------------------- Matrix table ----------------------------------- */\n\nexport type MatrixTableProps<Key extends string = string> = Readonly<{\n ids: readonly Key[];\n /** Short header per id (team short name). */\n labelOf: (id: Key) => string;\n getCell: (row: Key, column: Key) => MatrixCell | null;\n /** Row id to highlight (my team). */\n highlightId?: Key | null;\n heatColors?: TableHeatColors;\n accessibilityLabel: string;\n className?: string;\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport function MatrixTable<Key extends string = string>({ ids, labelOf, getCell, highlightId = null, heatColors, accessibilityLabel, className, layoutStyle }: MatrixTableProps<Key>) {\n const matrix = resolveMatrix(ids, getCell);\n return (\n <div className={classNames(\"hjm-table-family\", \"hjm-matrix-table\", className)} style={withFamilyStyle(layoutStyle)}>\n <table className=\"hjm-matrix-table__table\" aria-label={accessibilityLabel}>\n <thead>\n <tr>\n <td className=\"hjm-matrix-table__corner\" />\n {ids.map((id) => <th key={id} scope=\"col\">{labelOf(id)}</th>)}\n </tr>\n </thead>\n <tbody>\n {matrix.map((cells, rowIndex) => {\n const rowId = ids[rowIndex]!;\n return (\n <tr key={rowId} data-highlighted={rowId === highlightId || undefined}>\n <th scope=\"row\">{labelOf(rowId)}</th>\n {cells.map((cell, columnIndex) => {\n // The diagonal is a team against itself: blank and hidden, not \"no record\".\n if (cell === \"self\") return <td key={ids[columnIndex]} className=\"hjm-matrix-table__self\" aria-hidden=\"true\" />;\n const emphasis = tableCellEmphasis(cell, heatColors);\n return <td key={ids[columnIndex]} className={emphasis.heat ? \"hjm-table-family__heat\" : undefined} style={emphasis.style} data-tone={emphasis.tone} data-heat={emphasis.heat}>{cell?.label ?? \"—\"}</td>;\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\n/* ---------------------------------------------- Comparison table ------------------------------- */\n\nexport type ComparisonTableProps = Readonly<{\n rows: readonly ComparisonRow[];\n /** Side names and accent colors (team colors). */\n sides: readonly [Readonly<{ name: string; color: string }>, Readonly<{ name: string; color: string }>];\n /** Hide duplicate visual names when the two sides are already identified above; spoken row labels retain them. */\n showSideNames?: boolean;\n accessibilityLabel: string;\n className?: string;\n layoutStyle?: HjmCompositionStyleProp;\n}>;\n\nexport function ComparisonTable({ rows, sides, showSideNames = true, accessibilityLabel, className, layoutStyle }: ComparisonTableProps) {\n return (\n <section className={classNames(\"hjm-table-family\", \"hjm-comparison-table\", className)} style={withFamilyStyle(layoutStyle)} aria-label={accessibilityLabel}>\n {showSideNames && <div className=\"hjm-comparison-table__sides\" aria-hidden=\"true\">\n {sides.map((side, index) => <span key={index} style={{ color: side.color }}>{side.name}</span>)}\n </div>}\n <ul className=\"hjm-comparison-table__rows\" role=\"list\">\n {rows.map((row) => {\n const { winner, shares } = resolveComparisonRow(row);\n const shown = row.display ?? [row.values[0] === null ? \"—\" : String(row.values[0]), row.values[1] === null ? \"—\" : String(row.values[1])];\n return (\n <li key={row.id} className=\"hjm-comparison-table__row\" data-winner={winner ?? undefined}>\n {/* One sentence for assistive tech; the visual grid and bars are decoration. */}\n <span className=\"hjm-visually-hidden\">{`${row.label} ${sides[0].name} ${shown[0]}, ${sides[1].name} ${shown[1]}`}</span>\n <div className=\"hjm-comparison-table__values\" aria-hidden=\"true\">\n <span data-win={winner === 0 || undefined}>{shown[0]}</span>\n <span className=\"hjm-comparison-table__label\">{row.label}</span>\n <span data-win={winner === 1 || undefined}>{shown[1]}</span>\n </div>\n <div className=\"hjm-comparison-table__bars\" aria-hidden=\"true\">\n {([0, 1] as const).map((index) => (\n <span key={index} className=\"hjm-comparison-table__track\" data-side={index}>\n <span\n className=\"hjm-comparison-table__bar\"\n style={{ inlineSize: `${Math.round(shares[index] * 1000) / 10}%`, background: sides[index].color, opacity: winner === null || winner === index ? 1 : 0.6 }}\n />\n </span>\n ))}\n </div>\n </li>\n );\n })}\n </ul>\n </section>\n );\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hjmds/react",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.48.0",
|
|
4
4
|
"description": "Accessible React 19 renderers for HJM design contracts.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"publishConfig": {
|
|
@@ -604,6 +604,11 @@
|
|
|
604
604
|
"import": "./dist/shortcut-rail.js",
|
|
605
605
|
"default": "./dist/shortcut-rail.js"
|
|
606
606
|
},
|
|
607
|
+
"./share-sheet": {
|
|
608
|
+
"types": "./dist/share-sheet.d.ts",
|
|
609
|
+
"import": "./dist/share-sheet.js",
|
|
610
|
+
"default": "./dist/share-sheet.js"
|
|
611
|
+
},
|
|
607
612
|
"./time-picker": {
|
|
608
613
|
"types": "./dist/time-picker.d.ts",
|
|
609
614
|
"import": "./dist/time-picker.js",
|
|
@@ -628,7 +633,7 @@
|
|
|
628
633
|
"THIRD_PARTY_NOTICES.md"
|
|
629
634
|
],
|
|
630
635
|
"peerDependencies": {
|
|
631
|
-
"@hjmds/design-contracts": ">=1.
|
|
636
|
+
"@hjmds/design-contracts": ">=1.48.0 <1.49.0",
|
|
632
637
|
"react": ">=19.0.0",
|
|
633
638
|
"react-dom": ">=19.0.0",
|
|
634
639
|
"@number-flow/react": "0.6.2",
|
|
@@ -666,7 +671,7 @@
|
|
|
666
671
|
"@blobatar/react": "2.7.0",
|
|
667
672
|
"lucide-react": "1.59.0",
|
|
668
673
|
"vite": "8.3.4",
|
|
669
|
-
"@hjmds/design-contracts": "1.
|
|
674
|
+
"@hjmds/design-contracts": "1.48.0"
|
|
670
675
|
},
|
|
671
676
|
"peerDependenciesMeta": {
|
|
672
677
|
"@number-flow/react": {
|