@hjmds/design-contracts 1.26.0 → 1.27.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/agreement.d.ts +1 -0
- package/dist/agreement.d.ts.map +1 -1
- package/dist/agreement.js +2 -1
- package/dist/agreement.js.map +1 -1
- package/dist/auth-screen.d.ts +1 -1
- package/dist/behaviors.d.ts +1 -1
- package/dist/calendar.d.ts +1 -0
- package/dist/calendar.d.ts.map +1 -1
- package/dist/calendar.js +4 -1
- package/dist/calendar.js.map +1 -1
- package/dist/catalog.d.ts +78 -30
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +10 -5
- package/dist/catalog.js.map +1 -1
- package/dist/chart.d.ts +2 -0
- package/dist/chart.d.ts.map +1 -1
- package/dist/chart.js +1 -1
- package/dist/chart.js.map +1 -1
- package/dist/component-definitions.d.ts +1 -0
- package/dist/component-definitions.d.ts.map +1 -1
- package/dist/component-definitions.js +1 -0
- package/dist/component-definitions.js.map +1 -1
- package/dist/component-recipes.d.ts +53 -6
- package/dist/component-recipes.d.ts.map +1 -1
- package/dist/component-recipes.js +64 -10
- package/dist/component-recipes.js.map +1 -1
- package/dist/data-table.d.ts +11 -0
- package/dist/data-table.d.ts.map +1 -1
- package/dist/data-table.js +5 -0
- package/dist/data-table.js.map +1 -1
- package/dist/description-list.d.ts +3 -0
- package/dist/description-list.d.ts.map +1 -1
- package/dist/description-list.js +5 -1
- package/dist/description-list.js.map +1 -1
- package/dist/design-profile-layout.d.ts +28 -0
- package/dist/design-profile-layout.d.ts.map +1 -1
- package/dist/design-profile-layout.js +27 -3
- package/dist/design-profile-layout.js.map +1 -1
- package/dist/design-profile.d.ts.map +1 -1
- package/dist/design-profile.js +40 -8
- package/dist/design-profile.js.map +1 -1
- package/dist/field-group.d.ts +13 -0
- package/dist/field-group.d.ts.map +1 -1
- package/dist/field-group.js +17 -2
- package/dist/field-group.js.map +1 -1
- package/dist/foundations.d.ts +24 -11
- package/dist/foundations.d.ts.map +1 -1
- package/dist/foundations.js +40 -7
- package/dist/foundations.js.map +1 -1
- package/dist/heading.d.ts +5 -5
- package/dist/image-choice.d.ts +23 -0
- package/dist/image-choice.d.ts.map +1 -0
- package/dist/image-choice.js +26 -0
- package/dist/image-choice.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/masonry.d.ts +8 -0
- package/dist/masonry.d.ts.map +1 -1
- package/dist/masonry.js +12 -1
- package/dist/masonry.js.map +1 -1
- package/dist/number-field.d.ts +2 -2
- package/dist/number-field.d.ts.map +1 -1
- package/dist/number-field.js +4 -2
- package/dist/number-field.js.map +1 -1
- package/dist/qr-code-recipe.d.ts +1 -0
- package/dist/qr-code-recipe.d.ts.map +1 -1
- package/dist/qr-code-recipe.js +3 -1
- package/dist/qr-code-recipe.js.map +1 -1
- package/dist/recipes.d.ts +1 -1
- package/dist/recipes.d.ts.map +1 -1
- package/dist/recipes.js +1 -1
- package/dist/recipes.js.map +1 -1
- package/dist/result.d.ts +9 -0
- package/dist/result.d.ts.map +1 -1
- package/dist/result.js +5 -0
- package/dist/result.js.map +1 -1
- package/dist/screen-patterns.d.ts +139 -2
- package/dist/screen-patterns.d.ts.map +1 -1
- package/dist/screen-patterns.js +140 -1
- package/dist/screen-patterns.js.map +1 -1
- package/dist/sheet.d.ts +15 -1
- package/dist/sheet.d.ts.map +1 -1
- package/dist/sheet.js +20 -1
- package/dist/sheet.js.map +1 -1
- package/dist/showcase.d.ts +27 -27
- package/dist/showcase.js +27 -27
- package/dist/showcase.js.map +1 -1
- package/dist/tag.d.ts +10 -2
- package/dist/tag.d.ts.map +1 -1
- package/dist/tag.js +3 -2
- package/dist/tag.js.map +1 -1
- package/dist/tags-input.d.ts +6 -0
- package/dist/tags-input.d.ts.map +1 -1
- package/dist/tags-input.js +3 -1
- package/dist/tags-input.js.map +1 -1
- package/dist/text-formats.d.ts +2 -2
- package/dist/top.d.ts +2 -2
- package/dist/transfer-list.d.ts +1 -1
- package/dist/transfer-list.d.ts.map +1 -1
- package/dist/transfer-list.js +2 -1
- package/dist/transfer-list.js.map +1 -1
- package/dist/upload-item.d.ts +1 -10
- package/dist/upload-item.d.ts.map +1 -1
- package/dist/upload-item.js +1 -2
- package/dist/upload-item.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/docs/activity-chip.md +4 -3
- package/docs/catalog-freeze.json +5 -2
- package/docs/chart.md +1 -1
- package/docs/consumer-policy.md +13 -6
- package/docs/description-list.md +4 -0
- package/docs/design-profile.md +28 -2
- package/docs/font-roles.md +1 -1
- package/docs/generated/component-maturity.md +5 -4
- package/docs/generated/renderer-evidence.json +92 -6
- package/docs/generated/renderer-evidence.md +5 -3
- package/docs/generated/showcase-manifest.json +49 -1
- package/docs/gravity-letters.md +7 -2
- package/docs/masonry.md +4 -2
- package/docs/screen-patterns.md +5 -2
- package/docs/showcase.md +7 -9
- package/docs/stable-promotion.md +13 -1
- package/docs/usage/README.md +40 -10
- package/docs/usage/SELECTION.md +30 -4
- package/docs/usage/STANDARD.md +11 -2
- package/docs/usage/components/account-switcher.md +98 -0
- package/docs/usage/components/activity-chip.md +4 -4
- package/docs/usage/components/badge.md +1 -1
- package/docs/usage/components/bezier-editor.md +99 -0
- package/docs/usage/components/bottom-cta.md +2 -1
- package/docs/usage/components/button.md +26 -12
- package/docs/usage/components/carousel.md +4 -4
- package/docs/usage/components/chart.md +1 -0
- package/docs/usage/components/chat-message.md +18 -12
- package/docs/usage/components/chat-screen.md +6 -3
- package/docs/usage/components/cohort-retention-table.md +83 -0
- package/docs/usage/components/collapsible.md +7 -2
- package/docs/usage/components/comment-thread-row.md +102 -0
- package/docs/usage/components/comment-thread-screen.md +27 -13
- package/docs/usage/components/composition-layout.md +1 -0
- package/docs/usage/components/context-menu.md +32 -15
- package/docs/usage/components/conversation-row.md +11 -4
- package/docs/usage/components/conversion-funnel.md +85 -0
- package/docs/usage/components/correlation-matrix.md +80 -0
- package/docs/usage/components/data-table.md +4 -0
- package/docs/usage/components/description-list.md +2 -1
- package/docs/usage/components/editor-screen.md +9 -5
- package/docs/usage/components/effect-surface.md +4 -2
- package/docs/usage/components/empty-state.md +2 -2
- package/docs/usage/components/event-attendance-card.md +104 -0
- package/docs/usage/components/expandable-search.md +105 -0
- package/docs/usage/components/file-picker.md +5 -0
- package/docs/usage/components/filter-recovery.md +97 -0
- package/docs/usage/components/follow-profile-card.md +100 -0
- package/docs/usage/components/heading.md +6 -2
- package/docs/usage/components/histogram-explorer.md +89 -0
- package/docs/usage/components/icon-button.md +18 -2
- package/docs/usage/components/icon-tile.md +12 -4
- package/docs/usage/components/image-choice-group.md +81 -0
- package/docs/usage/components/import-field-mapping.md +94 -0
- package/docs/usage/components/inline-edit.md +105 -0
- package/docs/usage/components/keyboard-avoidance-context.md +60 -0
- package/docs/usage/components/keyboard-avoiding.md +5 -1
- package/docs/usage/components/list-detail-screen.md +4 -4
- package/docs/usage/components/list.md +1 -1
- package/docs/usage/components/masonry.md +6 -7
- package/docs/usage/components/media-selection-screen.md +7 -5
- package/docs/usage/components/media-transport.md +104 -0
- package/docs/usage/components/message-composer.md +13 -3
- package/docs/usage/components/moderation-screen.md +5 -2
- package/docs/usage/components/notification-inbox-screen.md +3 -3
- package/docs/usage/components/notification-row.md +64 -8
- package/docs/usage/components/onboarding-screen.md +1 -1
- package/docs/usage/components/overview-screen.md +9 -3
- package/docs/usage/components/pagination.md +18 -3
- package/docs/usage/components/password-rules-field.md +90 -0
- package/docs/usage/components/permission-screen.md +1 -1
- package/docs/usage/components/photo-source-sheet.md +1 -1
- package/docs/usage/components/popover.md +6 -3
- package/docs/usage/components/pricing-choice.md +85 -0
- package/docs/usage/components/profile-summary.md +56 -8
- package/docs/usage/components/progress.md +3 -3
- package/docs/usage/components/qr-code.md +5 -9
- package/docs/usage/components/repeatable-field-group.md +92 -0
- package/docs/usage/components/reply-composer.md +83 -0
- package/docs/usage/components/reply-message.md +85 -0
- package/docs/usage/components/result.md +3 -3
- package/docs/usage/components/saved-items-screen.md +7 -5
- package/docs/usage/components/screen-layout.md +21 -10
- package/docs/usage/components/search-field.md +1 -1
- package/docs/usage/components/section.md +2 -2
- package/docs/usage/components/selection-action-bar.md +89 -0
- package/docs/usage/components/settings-screen.md +13 -11
- package/docs/usage/components/sheet.md +19 -7
- package/docs/usage/components/shortcut-recorder.md +77 -0
- package/docs/usage/components/split-action.md +94 -0
- package/docs/usage/components/streaming-answer.md +94 -0
- package/docs/usage/components/switch.md +6 -2
- package/docs/usage/components/table-column-settings.md +88 -0
- package/docs/usage/components/target-summary.md +79 -0
- package/docs/usage/components/text.md +11 -5
- package/docs/usage/components/toggle-feedback-button.md +94 -0
- package/docs/usage/components/top-bar.md +8 -12
- package/docs/usage/components/transfer-task.md +87 -0
- package/docs/usage/compositions/action-recovery-optimistic.md +18 -14
- package/docs/usage/compositions/action-recovery-save.md +18 -14
- package/docs/usage/compositions/action-recovery-undo.md +18 -14
- package/docs/usage/compositions/activity-status.md +1 -1
- package/docs/usage/compositions/adaptive-content.md +2 -1
- package/docs/usage/compositions/collection-detail.md +6 -5
- package/docs/usage/compositions/collection-editing.md +13 -6
- package/docs/usage/compositions/command-records.md +5 -4
- package/docs/usage/compositions/communication.md +7 -5
- package/docs/usage/compositions/compound-controls.md +7 -3
- package/docs/usage/compositions/content-transition-comparison.md +10 -5
- package/docs/usage/compositions/data-layouts.md +12 -16
- package/docs/usage/compositions/data-workflows.md +7 -4
- package/docs/usage/compositions/date-time-selection.md +5 -5
- package/docs/usage/compositions/design-profile-comparison.md +22 -6
- package/docs/usage/compositions/disclosure.md +14 -9
- package/docs/usage/compositions/document-resource.md +1 -1
- package/docs/usage/compositions/environment-matrix.md +16 -12
- package/docs/usage/compositions/expo-interactions.md +9 -8
- package/docs/usage/compositions/family-drawer.md +9 -5
- package/docs/usage/compositions/field-group.md +7 -3
- package/docs/usage/compositions/interaction-adapters.md +11 -9
- package/docs/usage/compositions/interaction-flow-apply.md +17 -15
- package/docs/usage/compositions/interaction-flow-search.md +11 -7
- package/docs/usage/compositions/live-list.md +12 -8
- package/docs/usage/compositions/navigation-bar-collection.md +8 -3
- package/docs/usage/compositions/optional-motion.md +2 -2
- package/docs/usage/compositions/paper-surface.md +11 -6
- package/docs/usage/compositions/purpose-input-comment.md +10 -4
- package/docs/usage/compositions/purpose-input-message.md +10 -4
- package/docs/usage/compositions/reference-first.md +4 -4
- package/docs/usage/compositions/reference-review.md +4 -4
- package/docs/usage/compositions/reference-settings.md +4 -4
- package/docs/usage/compositions/selection-motion.md +2 -1
- package/docs/usage/compositions/social-compositions.md +7 -6
- package/docs/usage/compositions/stea-event-ticket.md +2 -4
- package/docs/usage/compositions/stea-order-progress.md +19 -21
- package/docs/usage/compositions/stea-pixel-empty.md +26 -26
- package/docs/usage/compositions/task-controls.md +7 -2
- package/docs/usage/compositions/texture-comparison.md +5 -5
- package/docs/usage/compositions/toast-layout.md +7 -3
- package/docs/usage/compositions/toggle-feedback.md +1 -1
- package/docs/usage/compositions/visual-foundations.md +10 -5
- package/docs/usage/compositions/web-additions.md +5 -1
- package/docs/usage/screens/common-chat.md +5 -3
- package/docs/usage/screens/common-comments.md +14 -9
- package/docs/usage/screens/common-conversation-list.md +109 -0
- package/docs/usage/screens/common-inbox.md +5 -3
- package/docs/usage/screens/common-login.md +7 -4
- package/docs/usage/screens/common-profile.md +16 -12
- package/docs/usage/screens/common-saved.md +12 -8
- package/docs/usage/screens/common-search.md +16 -8
- package/docs/usage/screens/common-settings.md +12 -11
- package/docs/usage/screens/common-shell.md +12 -10
- package/docs/usage/screens/dashboard.md +59 -56
- package/docs/usage/screens/discovery-gallery.md +18 -9
- package/docs/usage/screens/flow-collection.md +10 -6
- package/docs/usage/screens/flow-editor.md +9 -6
- package/docs/usage/screens/flow-media.md +12 -7
- package/docs/usage/screens/flow-moderation.md +9 -3
- package/docs/usage/screens/flow-onboarding.md +13 -8
- package/docs/usage/screens/flow-permission.md +5 -3
- package/docs/usage/screens/landing.md +20 -14
- package/docs/usage/screens/mockup-studio.md +100 -88
- package/docs/usage/screens/notification-settings.md +9 -7
- package/docs/usage/screens/product-bento.md +22 -10
- package/docs/usage/screens/reference-comparison.md +2 -2
- package/docs/usage/tokens/font-roles.md +18 -2
- package/docs/usage/tokens/typography.md +22 -11
- package/package.json +7 -1
package/dist/chart.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../src/chart.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BehaviorContract } from \"./behaviors.js\";\nimport { datavizChromeTokens } from \"./dataviz.js\";\nimport { radius, spacing, stroke } from \"./foundations.js\";\n\n/**\n * Chart geometry contract (2026-10-14, user request: \"absorb the well-known chart libraries into our\n * system\"). Until 1.20 HJM only shipped dataviz *tokens* and delegated drawing to product libraries\n * (see docs/chart.md for the earlier decision). Products then rebuilt the same scrubbing line chart,\n * bars, and stat tables separately (Yajalal's StockChart/RecordTable), so drawing moves into HJM.\n *\n * Everything here is renderer-neutral math: both the Web (SVG DOM) and Native (react-native-svg)\n * renderers receive the same coordinates, paths and accessibility summaries and only paint them.\n * The public shapes were studied from — not copied from — these MIT/ISC libraries:\n * - react-native-wagmi-charts: line + cursor crosshair, price/datetime text driven by the focused index\n * - victory-native (XL): CartesianChart x/y keys, chart press state, rounded bars, domain padding\n * - react-native-gifted-charts: bar/line/pie/radar props (focus on press, stacked bars, donut center)\n * - Recharts: series/category data model, stacking, nice ticks, radar polar grid\n * - d3-shape / d3-scale: monotone-X cubic curve (Fritsch–Carlson) and \"nice\" tick steps (algorithms\n * re-derived here; no source is vendored)\n */\n\nexport type ChartValue = number | null;\n\nexport type ChartSeries = Readonly<{\n id: string;\n /** Visible legend text and the series' accessible name. Product-localized. */\n label: string;\n /** One value per category; `null` is a missing observation (drawn as a gap, never as zero). */\n values: readonly ChartValue[];\n /** Product-owned series color; renderers fall back to the dataviz series palette by index. */\n color?: string;\n}>;\n\nexport type ChartInsets = Readonly<{ top: number; right: number; bottom: number; left: number }>;\nexport type ChartCurve = \"linear\" | \"monotone\" | \"step\";\nexport type ChartOrientation = \"vertical\" | \"horizontal\";\nexport type ChartBarLayout = \"grouped\" | \"stacked\";\n\nexport type ChartPlot = Readonly<{ index: number; seriesIndex: number; x: number; y: number; value: number }>;\n\nexport const chartRecipe = {\n heights: { sparkline: 28, compact: 128, regular: 180, tall: 240 },\n insets: {\n plot: { top: spacing.lg, right: spacing.xs, bottom: spacing.xs, left: spacing.xs },\n axis: { top: spacing.md, right: spacing.xs, bottom: spacing.lg, left: 36 },\n },\n line: { strokeWidth: 2.4, pointRadius: 4.5, focusHaloRadius: 9, focusHaloOpacity: 0.25 },\n area: { topOpacity: 0.32, bottomOpacity: 0 },\n bar: { radius: radius.sm / 2, maxWidth: 28, bandPadding: 0.36, groupGap: 2, restOpacity: 0.4 },\n pie: { donutRatio: 0.62, padAngle: 0.012, minLabelPercent: 4 },\n radar: { levels: 4, strokeWidth: 2, fillOpacity: 0.22, labelOffset: spacing.sm },\n scatter: { radius: 5, focusRadius: 8 },\n sparkline: { width: 72, height: 28, strokeWidth: 1.8, padding: 2 },\n cursor: { strokeWidth: stroke.subtle, dash: [2, 3] as const },\n reference: { dash: [2, 4] as const },\n chrome: datavizChromeTokens,\n} as const;\n\n// ---------------------------------------------------------------------------------------------\n// Validation\n// ---------------------------------------------------------------------------------------------\n\nexport function validateChartSeries(categories: readonly string[], series: readonly ChartSeries[]): void {\n if (series.length === 0) throw new TypeError(\"Chart needs at least one series\");\n const ids = new Set<string>();\n for (const item of series) {\n if (!item.id.trim()) throw new TypeError(\"Chart series id must not be empty\");\n if (ids.has(item.id)) throw new TypeError(`Duplicate chart series id: ${item.id}`);\n ids.add(item.id);\n if (!item.label.trim()) throw new TypeError(`Chart series \"${item.id}\" label must not be empty`);\n if (item.values.length !== categories.length) {\n throw new RangeError(`Chart series \"${item.id}\" has ${item.values.length} values for ${categories.length} categories`);\n }\n }\n}\n\nexport const isChartNumber = (value: ChartValue | undefined): value is number => typeof value === \"number\" && Number.isFinite(value);\n\n// ---------------------------------------------------------------------------------------------\n// Scales and ticks\n// ---------------------------------------------------------------------------------------------\n\n/** \"Nice\" step (1, 2, 2.5, 5 × 10^n) so axis labels read like 0/25/50 rather than 0/23.7/47.4. */\nexport function niceStep(span: number, count: number): number {\n if (!(span > 0) || count < 1) return 1;\n const raw = span / count, power = 10 ** Math.floor(Math.log10(raw)), ratio = raw / power;\n const nice = ratio <= 1 ? 1 : ratio <= 2 ? 2 : ratio <= 2.5 ? 2.5 : ratio <= 5 ? 5 : 10;\n return nice * power;\n}\n\nexport function niceTicks(min: number, max: number, count = 4): number[] {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [];\n if (min === max) return [min];\n const step = niceStep(max - min, count), start = Math.ceil(min / step - 1e-9) * step;\n const ticks: number[] = [];\n for (let tick = start; tick <= max + step * 1e-9; tick += step) ticks.push(Number(tick.toPrecision(12)));\n return ticks;\n}\n\nexport type ChartDomainOptions = Readonly<{ domain?: readonly [number, number] | undefined; includeZero?: boolean | undefined; nice?: boolean | undefined; padding?: number | undefined }>;\n/**\n * Value domain. Lines zoom to the observed range (stock charts) unless `includeZero`; bars always\n * include zero so heights compare honestly. `padding` widens a flat series so it is not drawn on an edge.\n */\nexport function resolveChartDomain(values: readonly ChartValue[], { domain, includeZero = false, nice = false, padding = 0 }: ChartDomainOptions = {}): readonly [number, number] {\n if (domain) return domain;\n const observed = values.filter(isChartNumber);\n if (!observed.length) return [0, 1];\n let min = Math.min(...observed), max = Math.max(...observed);\n if (includeZero) { min = Math.min(0, min); max = Math.max(0, max); }\n if (min === max) { const pad = Math.abs(min) * 0.1 || 1; min -= pad; max += pad; }\n if (padding > 0) { const pad = (max - min) * padding; if (!(includeZero && min === 0)) min -= pad; max += pad; }\n if (nice) { const step = niceStep(max - min, 4); min = Math.floor(min / step) * step; max = Math.ceil(max / step) * step; }\n return [min, max];\n}\n\n/** Linear scale from value domain to pixel range; `invert` puts the minimum at the top (ranks, ERA). */\nexport function scaleLinear(domain: readonly [number, number], range: readonly [number, number], invert = false): (value: number) => number {\n const [d0, d1] = domain, [r0, r1] = invert ? [range[1], range[0]] : range, span = d1 - d0;\n return value => span === 0 ? (r0 + r1) / 2 : r0 + (value - d0) / span * (r1 - r0);\n}\n\nexport type ChartBand = Readonly<{ step: number; bandwidth: number; start(index: number): number; center(index: number): number }>;\nexport function scaleBand(count: number, range: readonly [number, number], padding: number = chartRecipe.bar.bandPadding): ChartBand {\n const length = range[1] - range[0], step = count > 0 ? length / count : 0, bandwidth = step * (1 - padding);\n return { step, bandwidth, start: index => range[0] + index * step + (step - bandwidth) / 2, center: index => range[0] + index * step + step / 2 };\n}\n\n/** Evenly spaced x positions for line/area categories (first and last on the plot edges). */\nexport function pointPositions(count: number, range: readonly [number, number]): number[] {\n if (count <= 1) return [Math.round((range[0] + range[1]) / 2)];\n const step = (range[1] - range[0]) / (count - 1);\n return Array.from({ length: count }, (_, i) => range[0] + i * step);\n}\n\n// ---------------------------------------------------------------------------------------------\n// Paths\n// ---------------------------------------------------------------------------------------------\n\nconst fixed = (value: number) => Number(value.toFixed(2));\ntype XY = Readonly<{ x: number; y: number }>;\n\n/** Monotone-X cubic (Fritsch–Carlson): smooth without overshooting the data, like d3.curveMonotoneX. */\nfunction monotoneTangents(points: readonly XY[]): number[] {\n const n = points.length, slopes: number[] = [], tangents: number[] = new Array(n).fill(0);\n for (let i = 0; i < n - 1; i++) slopes.push((points[i + 1]!.y - points[i]!.y) / ((points[i + 1]!.x - points[i]!.x) || 1));\n tangents[0] = slopes[0] ?? 0; tangents[n - 1] = slopes[n - 2] ?? 0;\n for (let i = 1; i < n - 1; i++) tangents[i] = slopes[i - 1]! * slopes[i]! <= 0 ? 0 : (slopes[i - 1]! + slopes[i]!) / 2;\n for (let i = 0; i < n - 1; i++) {\n if (slopes[i] === 0) { tangents[i] = 0; tangents[i + 1] = 0; continue; }\n const a = tangents[i]! / slopes[i]!, b = tangents[i + 1]! / slopes[i]!, h = a * a + b * b;\n if (h > 9) { const t = 3 / Math.sqrt(h); tangents[i] = t * a * slopes[i]!; tangents[i + 1] = t * b * slopes[i]!; }\n }\n return tangents;\n}\n\nexport function linePath(points: readonly XY[], curve: ChartCurve = \"linear\"): string {\n if (!points.length) return \"\";\n const head = `M${fixed(points[0]!.x)},${fixed(points[0]!.y)}`;\n if (points.length === 1) return head;\n if (curve === \"step\") return head + points.slice(1).map((p, i) => `H${fixed((points[i]!.x + p.x) / 2)}V${fixed(p.y)}H${fixed(p.x)}`).join(\"\");\n if (curve === \"monotone\" && points.length > 2) {\n const t = monotoneTangents(points);\n return head + points.slice(1).map((p, i) => {\n const a = points[i]!, dx = (p.x - a.x) / 3;\n return `C${fixed(a.x + dx)},${fixed(a.y + dx * t[i]!)} ${fixed(p.x - dx)},${fixed(p.y - dx * t[i + 1]!)} ${fixed(p.x)},${fixed(p.y)}`;\n }).join(\"\");\n }\n return head + points.slice(1).map(p => `L${fixed(p.x)},${fixed(p.y)}`).join(\"\");\n}\n\n/** Closed area under a line down to `floor` (or between two edges for stacked areas via `lower`). */\nexport function areaPath(points: readonly XY[], floor: number, curve: ChartCurve = \"linear\", lower?: readonly XY[]): string {\n if (points.length < 2) return \"\";\n const top = linePath(points, curve);\n if (lower && lower.length === points.length) {\n const back = linePath([...lower].reverse(), curve).replace(/^M/, \"L\");\n return `${top}${back}Z`;\n }\n return `${top}L${fixed(points.at(-1)!.x)},${fixed(floor)}L${fixed(points[0]!.x)},${fixed(floor)}Z`;\n}\n\n/** Splits a series at missing values: a skipped month is a gap, never an interpolated trend. */\nexport function splitSegments<T extends { value: number } | null>(plots: readonly T[]): Exclude<T, null>[][] {\n const segments: Exclude<T, null>[][] = [];\n let current: Exclude<T, null>[] = [];\n for (const plot of plots) {\n if (plot === null) { if (current.length) segments.push(current); current = []; continue; }\n current.push(plot as Exclude<T, null>);\n }\n if (current.length) segments.push(current);\n return segments;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Cartesian: line / area\n// ---------------------------------------------------------------------------------------------\n\nexport type LineGeometryInput = Readonly<{\n categories: readonly string[];\n series: readonly ChartSeries[];\n width: number;\n height: number;\n insets?: ChartInsets;\n invert?: boolean;\n stacked?: boolean;\n} & ChartDomainOptions>;\n\nexport type LineGeometry = Readonly<{\n plot: Readonly<{ left: number; right: number; top: number; bottom: number }>;\n domain: readonly [number, number];\n ticks: readonly number[];\n xs: readonly number[];\n y(value: number): number;\n /** Per series, per category: the plotted point or null for a gap. */\n plots: readonly (readonly (ChartPlot | null)[])[];\n /** Stacked areas: the lower edge per series (previous cumulative). */\n lower: readonly (readonly (ChartPlot | null)[])[] | null;\n}>;\n\nexport function resolveLineGeometry({ categories, series, width, height, insets = chartRecipe.insets.plot, invert = false, stacked = false, ...domainOptions }: LineGeometryInput): LineGeometry {\n validateChartSeries(categories, series);\n const plot = { left: insets.left, right: width - insets.right, top: insets.top, bottom: height - insets.bottom };\n const totals = stacked ? stackValues(series) : null;\n const domainValues = totals ? totals.flatMap(row => row.map(cell => cell?.[1] ?? null)) : series.flatMap(item => item.values);\n const domain = resolveChartDomain(domainValues, { includeZero: stacked || domainOptions.includeZero, ...domainOptions });\n const y = scaleLinear(domain, [plot.bottom, plot.top], invert);\n const xs = pointPositions(categories.length, [plot.left, plot.right]);\n const plots = series.map((item, s) => item.values.map((value, i) => {\n const top = totals ? totals[s]![i]?.[1] : value;\n return isChartNumber(value) && isChartNumber(top) ? { index: i, seriesIndex: s, x: xs[i]!, y: y(top), value } : null;\n }));\n const lower = totals ? series.map((_, s) => categories.map((__, i) => { const cell = totals[s]![i]; return cell ? { index: i, seriesIndex: s, x: xs[i]!, y: y(cell[0]), value: cell[0] } : null; })) : null;\n return { plot, domain, ticks: niceTicks(domain[0], domain[1], 4), xs, y, plots, lower };\n}\n\n/** Cumulative [lower, upper] per series per category; missing values do not add to the stack. */\nexport function stackValues(series: readonly ChartSeries[]): (readonly [number, number] | null)[][] {\n const length = series[0]?.values.length ?? 0, positive = new Array<number>(length).fill(0), negative = new Array<number>(length).fill(0);\n return series.map(item => item.values.map((value, i) => {\n if (!isChartNumber(value)) return null;\n const base = value >= 0 ? positive[i]! : negative[i]!, top = base + value;\n if (value >= 0) positive[i] = top; else negative[i] = top;\n return [base, top] as const;\n }));\n}\n\n// ---------------------------------------------------------------------------------------------\n// Cartesian: bars\n// ---------------------------------------------------------------------------------------------\n\nexport type ChartBar = Readonly<{ index: number; seriesIndex: number; value: number; x: number; y: number; width: number; height: number }>;\nexport type BarGeometryInput = Readonly<{\n categories: readonly string[];\n series: readonly ChartSeries[];\n width: number;\n height: number;\n insets?: ChartInsets;\n orientation?: ChartOrientation;\n layout?: ChartBarLayout;\n} & ChartDomainOptions>;\nexport type BarGeometry = Readonly<{\n plot: Readonly<{ left: number; right: number; top: number; bottom: number }>;\n domain: readonly [number, number];\n ticks: readonly number[];\n bars: readonly ChartBar[];\n /** Category band centers along the category axis (x for vertical, y for horizontal). */\n centers: readonly number[];\n value(value: number): number;\n}>;\n\nexport function resolveBarGeometry({ categories, series, width, height, insets = chartRecipe.insets.plot, orientation = \"vertical\", layout = \"grouped\", ...domainOptions }: BarGeometryInput): BarGeometry {\n validateChartSeries(categories, series);\n const plot = { left: insets.left, right: width - insets.right, top: insets.top, bottom: height - insets.bottom };\n const stacks = layout === \"stacked\" ? stackValues(series) : null;\n const values = stacks ? stacks.flatMap(row => row.flatMap(cell => cell ? [cell[0], cell[1]] : [])) : series.flatMap(item => item.values);\n const domain = resolveChartDomain(values, { includeZero: true, ...domainOptions });\n const vertical = orientation === \"vertical\";\n const valueScale = vertical ? scaleLinear(domain, [plot.bottom, plot.top]) : scaleLinear(domain, [plot.left, plot.right]);\n const band = scaleBand(categories.length, vertical ? [plot.left, plot.right] : [plot.top, plot.bottom]);\n const thickness = Math.min(chartRecipe.bar.maxWidth * (layout === \"grouped\" ? series.length : 1), band.bandwidth);\n const each = layout === \"grouped\" ? Math.max(1, (thickness - chartRecipe.bar.groupGap * (series.length - 1)) / series.length) : thickness;\n const bars: ChartBar[] = [];\n series.forEach((item, s) => item.values.forEach((value, i) => {\n if (!isChartNumber(value)) return;\n const [from, to] = stacks ? stacks[s]![i]! : [0, value];\n const a = valueScale(from), b = valueScale(to);\n const offset = band.center(i) - thickness / 2 + (layout === \"grouped\" ? s * (each + chartRecipe.bar.groupGap) : 0);\n bars.push(vertical\n ? { index: i, seriesIndex: s, value, x: offset, y: Math.min(a, b), width: each, height: Math.max(1, Math.abs(a - b)) }\n : { index: i, seriesIndex: s, value, x: Math.min(a, b), y: offset, width: Math.max(1, Math.abs(a - b)), height: each });\n }));\n return { plot, domain, ticks: niceTicks(domain[0], domain[1], 4), bars, centers: categories.map((_, i) => band.center(i)), value: valueScale };\n}\n\n// ---------------------------------------------------------------------------------------------\n// Polar: pie / donut / radar\n// ---------------------------------------------------------------------------------------------\n\nexport type PieSlice = Readonly<{ index: number; value: number; percent: number; startAngle: number; endAngle: number; path: string; centroid: XY }>;\nconst polar = (cx: number, cy: number, r: number, angle: number): XY => ({ x: cx + r * Math.sin(angle), y: cy - r * Math.cos(angle) });\n\n/** Annular sector from 12 o'clock clockwise. `innerRadius` 0 draws a pie wedge. */\nexport function arcPath(cx: number, cy: number, outerRadius: number, innerRadius: number, startAngle: number, endAngle: number): string {\n const sweep = endAngle - startAngle;\n if (sweep >= Math.PI * 2 - 1e-6) {\n // A full circle cannot be one arc command; draw two halves.\n const mid = startAngle + Math.PI;\n return arcPath(cx, cy, outerRadius, innerRadius, startAngle, mid) + arcPath(cx, cy, outerRadius, innerRadius, mid, endAngle);\n }\n const large = sweep > Math.PI ? 1 : 0;\n const o0 = polar(cx, cy, outerRadius, startAngle), o1 = polar(cx, cy, outerRadius, endAngle);\n if (innerRadius <= 0) return `M${fixed(cx)},${fixed(cy)}L${fixed(o0.x)},${fixed(o0.y)}A${fixed(outerRadius)},${fixed(outerRadius)} 0 ${large} 1 ${fixed(o1.x)},${fixed(o1.y)}Z`;\n const i1 = polar(cx, cy, innerRadius, endAngle), i0 = polar(cx, cy, innerRadius, startAngle);\n return `M${fixed(o0.x)},${fixed(o0.y)}A${fixed(outerRadius)},${fixed(outerRadius)} 0 ${large} 1 ${fixed(o1.x)},${fixed(o1.y)}L${fixed(i1.x)},${fixed(i1.y)}A${fixed(innerRadius)},${fixed(innerRadius)} 0 ${large} 0 ${fixed(i0.x)},${fixed(i0.y)}Z`;\n}\n\n/** Negative and missing values are excluded: a share of a whole cannot be negative. */\nexport function resolvePieGeometry(values: readonly ChartValue[], { cx, cy, radius: outer, innerRadius = 0, padAngle = chartRecipe.pie.padAngle }: Readonly<{ cx: number; cy: number; radius: number; innerRadius?: number; padAngle?: number }>): PieSlice[] {\n const total = values.reduce<number>((sum, value) => sum + (isChartNumber(value) && value > 0 ? value : 0), 0);\n if (total <= 0) return [];\n let angle = 0;\n const slices: PieSlice[] = [];\n values.forEach((value, index) => {\n if (!isChartNumber(value) || value <= 0) return;\n const sweep = value / total * Math.PI * 2, pad = slices.length || sweep < Math.PI * 2 ? Math.min(padAngle, sweep / 4) : 0;\n const start = angle + pad / 2, end = angle + sweep - pad / 2, mid = (start + end) / 2;\n slices.push({ index, value, percent: value / total * 100, startAngle: start, endAngle: end, path: arcPath(cx, cy, outer, innerRadius, start, end), centroid: polar(cx, cy, innerRadius > 0 ? (outer + innerRadius) / 2 : outer * 0.62, mid) });\n angle += sweep;\n });\n return slices;\n}\n\nexport type RadarAxis = Readonly<{ index: number; label: string; angle: number; end: XY; labelAt: XY; anchor: \"start\" | \"middle\" | \"end\" }>;\nexport type RadarGeometry = Readonly<{ axes: readonly RadarAxis[]; rings: readonly string[]; polygons: readonly Readonly<{ seriesIndex: number; path: string; points: readonly (XY & { index: number; value: number | null })[] }>[] }>;\n/**\n * Radar (spider) chart. All axes share one domain (0..max by default) because the products'\n * ratings are on one 0–100 scale; per-axis scales would make the polygon area meaningless.\n */\nexport function resolveRadarGeometry({ categories, series, cx, cy, radius: outer, domain, levels = chartRecipe.radar.levels, labelOffset = chartRecipe.radar.labelOffset }: Readonly<{ categories: readonly string[]; series: readonly ChartSeries[]; cx: number; cy: number; radius: number; domain?: readonly [number, number]; levels?: number; labelOffset?: number }>): RadarGeometry {\n validateChartSeries(categories, series);\n if (categories.length < 3) throw new RangeError(\"Radar chart needs at least three axes\");\n const [min, max] = domain ?? [0, Math.max(...series.flatMap(item => item.values.filter(isChartNumber)), 1)];\n const step = Math.PI * 2 / categories.length;\n const axes = categories.map((label, index) => {\n const angle = index * step, end = polar(cx, cy, outer, angle), labelAt = polar(cx, cy, outer + labelOffset, angle);\n const sin = Math.sin(angle);\n return { index, label, angle, end, labelAt, anchor: Math.abs(sin) < 0.2 ? \"middle\" as const : sin > 0 ? \"start\" as const : \"end\" as const };\n });\n const rings = Array.from({ length: levels }, (_, level) => {\n const r = outer * (level + 1) / levels;\n return axes.map((axis, i) => { const p = polar(cx, cy, r, axis.angle); return `${i ? \"L\" : \"M\"}${fixed(p.x)},${fixed(p.y)}`; }).join(\"\") + \"Z\";\n });\n const polygons = series.map((item, seriesIndex) => {\n const points = axes.map(axis => {\n const value = item.values[axis.index] ?? null;\n const ratio = isChartNumber(value) ? Math.max(0, Math.min(1, (value - min) / ((max - min) || 1))) : 0;\n return { ...polar(cx, cy, outer * ratio, axis.angle), index: axis.index, value: isChartNumber(value) ? value : null };\n });\n return { seriesIndex, points, path: points.map((p, i) => `${i ? \"L\" : \"M\"}${fixed(p.x)},${fixed(p.y)}`).join(\"\") + \"Z\" };\n });\n return { axes, rings, polygons };\n}\n\n// ---------------------------------------------------------------------------------------------\n// Scatter\n// ---------------------------------------------------------------------------------------------\n\nexport type ScatterDatum = Readonly<{ id: string; label: string; x: number; y: number; seriesIndex?: number }>;\nexport type ScatterGeometry = Readonly<{\n plot: Readonly<{ left: number; right: number; top: number; bottom: number }>;\n xDomain: readonly [number, number]; yDomain: readonly [number, number];\n xTicks: readonly number[]; yTicks: readonly number[];\n points: readonly (ScatterDatum & { px: number; py: number })[];\n}>;\nexport function resolveScatterGeometry({ points, width, height, insets = chartRecipe.insets.axis, xDomain, yDomain }: Readonly<{ points: readonly ScatterDatum[]; width: number; height: number; insets?: ChartInsets; xDomain?: readonly [number, number]; yDomain?: readonly [number, number] }>): ScatterGeometry {\n const plot = { left: insets.left, right: width - insets.right, top: insets.top, bottom: height - insets.bottom };\n const xd = resolveChartDomain(points.map(p => p.x), { domain: xDomain, padding: 0.06 }), yd = resolveChartDomain(points.map(p => p.y), { domain: yDomain, padding: 0.06 });\n const sx = scaleLinear(xd, [plot.left, plot.right]), sy = scaleLinear(yd, [plot.bottom, plot.top]);\n return { plot, xDomain: xd, yDomain: yd, xTicks: niceTicks(xd[0], xd[1], 4), yTicks: niceTicks(yd[0], yd[1], 4), points: points.map(p => ({ ...p, px: sx(p.x), py: sy(p.y) })) };\n}\n\n// ---------------------------------------------------------------------------------------------\n// Focus (scrub / press) and accessibility\n// ---------------------------------------------------------------------------------------------\n\n/** Category index whose x is closest to a pointer x, among categories that have any value. */\nexport function nearestChartIndex(xs: readonly number[], x: number, available?: readonly number[]): number | null {\n const candidates = available ?? xs.map((_, i) => i);\n let best: number | null = null, distance = Infinity;\n for (const index of candidates) {\n const d = Math.abs(xs[index]! - x);\n if (d < distance) { distance = d; best = index; }\n }\n return best;\n}\nexport function nearestScatterPoint(points: readonly Readonly<{ px: number; py: number }>[], x: number, y: number, maxDistance = 32): number | null {\n let best: number | null = null, distance = maxDistance * maxDistance;\n points.forEach((p, i) => { const d = (p.px - x) ** 2 + (p.py - y) ** 2; if (d <= distance) { distance = d; best = i; } });\n return best;\n}\n/** Adjustable-role step (VoiceOver swipe, arrow keys) over observed indices only. */\nexport function stepChartIndex(available: readonly number[], current: number | null, direction: 1 | -1): number | null {\n if (!available.length) return null;\n if (current === null) return direction > 0 ? available[0]! : available.at(-1)!;\n const position = available.indexOf(current);\n return available[Math.min(available.length - 1, Math.max(0, (position < 0 ? 0 : position) + direction))]!;\n}\nexport function observedIndices(series: readonly ChartSeries[]): number[] {\n const length = series[0]?.values.length ?? 0;\n return Array.from({ length }, (_, i) => i).filter(i => series.some(item => isChartNumber(item.values[i])));\n}\n/** Index of the highest and lowest observation of one series (stock-chart high/low markers). */\nexport function seriesExtremes(values: readonly ChartValue[]): Readonly<{ max: number; min: number }> | null {\n let max = -1, min = -1;\n values.forEach((value, i) => {\n if (!isChartNumber(value)) return;\n if (max < 0 || value > values[max]!) max = i;\n if (min < 0 || value < values[min]!) min = i;\n });\n return max < 0 ? null : { max, min };\n}\n\n/**\n * Text alternative for an image-like chart: every category's values in order, product-formatted.\n * Products pass localized `format`; HJM never formats numbers into a language itself.\n */\nexport function describeChart(categories: readonly string[], series: readonly ChartSeries[], format: (value: number) => string, missing: string): string {\n return series.map(item => `${item.label}: ${categories.map((category, i) => { const v = item.values[i]; return `${category} ${isChartNumber(v) ? format(v) : missing}`; }).join(\", \")}`).join(\". \");\n}\n\nexport const chartBehavior = {\n controlled: [\"focusIndex\"],\n inputs: [\"categories\", \"series\", \"kind\", \"orientation\", \"layout\", \"domain\", \"invert\", \"curve\"],\n events: [\"onFocusChange\"],\n configuration: { curve: [\"linear\", \"monotone\", \"step\"], orientation: [\"vertical\", \"horizontal\"], layout: [\"grouped\", \"stacked\"] },\n defaults: { curve: \"linear\", orientation: \"vertical\", layout: \"grouped\" },\n stateAxes: { value: [\"focused\", \"scrubbing\"], content: [\"idle\", \"empty\"] },\n web: { roles: [\"img\", \"slider\"], keyboard: [\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"], focus: \"native\" },\n native: { roles: [\"adjustable\", \"image\"], states: [], actions: [\"increment\", \"decrement\"] },\n scenarios: [\n \"missing-values-split-the-line-instead-of-drawing-zero\",\n \"bars-and-stacks-always-include-a-zero-baseline\",\n \"inverted-scale-puts-the-best-rank-on-top\",\n \"scrubbing-reports-the-focused-index-and-releasing-restores-the-latest\",\n \"the-focused-point-is-reachable-without-a-drag-via-adjustable-or-arrow-keys\",\n \"series-colors-come-from-the-product-or-the-dataviz-palette-never-status-colors\",\n \"every-chart-exposes-a-product-formatted-text-alternative\",\n \"radar-axes-share-one-domain\",\n \"pie-slices-ignore-negative-and-missing-values\",\n ],\n} as const satisfies BehaviorContract;\n\n/** Excluding a slice changes the denominator; selecting one only emphasizes it (Lucian 097). */\nexport function resolvePieVisibility(data: readonly Readonly<{ id: string; value: number | null }>[], excludedIds: readonly string[] = []) {\n const ids = new Set(data.map(datum => datum.id)), excluded = new Set(excludedIds);\n if (ids.size !== data.length || data.some(datum => !datum.id.trim())) throw new TypeError(\"Pie data requires distinct nonempty ids\");\n if (excluded.size !== excludedIds.length || excludedIds.some(id => !ids.has(id))) throw new TypeError(\"Excluded pie ids must be distinct known ids\");\n // Keep the existing geometry contract: negative/nonfinite/missing values never enter a share.\n const values = data.map(datum => excluded.has(datum.id) || !isChartNumber(datum.value) || datum.value < 0 ? null : datum.value);\n const total = values.reduce<number>((sum, value) => sum + (value ?? 0), 0);\n if (!Number.isFinite(total)) throw new RangeError(\"Pie total must be finite\");\n return { values, total, includedCount: data.length - excluded.size, observedCount: values.filter(value => value !== null).length };\n}\nexport type PieVisibilitySummary = ReturnType<typeof resolvePieVisibility>;\n\n/** Match both actual polyline vertices before period morphing. Union knots preserve\n * every observation for linear paths; work is bounded by the caller for large data. */\nexport function prepareChartLineMorph(from: readonly XY[], to: readonly XY[]) {\n if (from.length < 2 || to.length < 2) return null;\n const knots = [...new Set([...from.map((_, i) => i / (from.length - 1)), ...to.map((_, i) => i / (to.length - 1))])].sort((a, b) => a - b);\n const sample = (points: readonly XY[], position: number): XY => {\n const index = position * (points.length - 1), start = Math.floor(index), end = Math.min(points.length - 1, start + 1), t = index - start;\n return { x: points[start]!.x + (points[end]!.x - points[start]!.x) * t, y: points[start]!.y + (points[end]!.y - points[start]!.y) * t };\n };\n const first = knots.map(k => sample(from, k)), last = knots.map(k => sample(to, k));\n return (progress: number): XY[] => {\n const t = Math.max(0, Math.min(1, progress));\n return first.map((point, i) => ({ x: point.x + (last[i]!.x - point.x) * t, y: point.y + (last[i]!.y - point.y) * t }));\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"chart.js","sourceRoot":"","sources":["../src/chart.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BehaviorContract } from \"./behaviors.js\";\nimport { datavizChromeTokens } from \"./dataviz.js\";\nimport { radius, spacing, stroke } from \"./foundations.js\";\n\n/**\n * Chart geometry contract (2026-10-14, user request: \"absorb the well-known chart libraries into our\n * system\"). Until 1.20 HJM only shipped dataviz *tokens* and delegated drawing to product libraries\n * (see docs/chart.md for the earlier decision). Products then rebuilt the same scrubbing line chart,\n * bars, and stat tables separately (Yajalal's StockChart/RecordTable), so drawing moves into HJM.\n *\n * Everything here is renderer-neutral math: both the Web (SVG DOM) and Native (react-native-svg)\n * renderers receive the same coordinates, paths and accessibility summaries and only paint them.\n * The public shapes were studied from — not copied from — these MIT/ISC libraries:\n * - react-native-wagmi-charts: line + cursor crosshair, price/datetime text driven by the focused index\n * - victory-native (XL): CartesianChart x/y keys, chart press state, rounded bars, domain padding\n * - react-native-gifted-charts: bar/line/pie/radar props (focus on press, stacked bars, donut center)\n * - Recharts: series/category data model, stacking, nice ticks, radar polar grid\n * - d3-shape / d3-scale: monotone-X cubic curve (Fritsch–Carlson) and \"nice\" tick steps (algorithms\n * re-derived here; no source is vendored)\n */\n\nexport type ChartValue = number | null;\n\nexport type ChartSeries = Readonly<{\n id: string;\n /** Visible legend text and the series' accessible name. Product-localized. */\n label: string;\n /** One value per category; `null` is a missing observation (drawn as a gap, never as zero). */\n values: readonly ChartValue[];\n /** Product-owned series color; renderers fall back to the dataviz series palette by index. */\n color?: string;\n}>;\n\nexport type ChartInsets = Readonly<{ top: number; right: number; bottom: number; left: number }>;\nexport type ChartCurve = \"linear\" | \"monotone\" | \"step\";\nexport type ChartOrientation = \"vertical\" | \"horizontal\";\nexport type ChartBarLayout = \"grouped\" | \"stacked\";\n\nexport type ChartPlot = Readonly<{ index: number; seriesIndex: number; x: number; y: number; value: number }>;\n\nexport const chartRecipe = {\n heights: { sparkline: 28, compact: 128, regular: 180, tall: 240 },\n insets: {\n plot: { top: spacing.lg, right: spacing.xs, bottom: spacing.xs, left: spacing.xs },\n axis: { top: spacing.md, right: spacing.xs, bottom: spacing.lg, left: 36 },\n },\n line: { strokeWidth: 2.4, pointRadius: 4.5, focusHaloRadius: 9, focusHaloOpacity: 0.25, missingDash: [1, 5] as const, missingOpacity: 0.55 },\n area: { topOpacity: 0.32, bottomOpacity: 0 },\n bar: { radius: radius.sm / 2, maxWidth: 28, bandPadding: 0.36, groupGap: 2, restOpacity: 0.4 },\n pie: { donutRatio: 0.62, padAngle: 0.012, minLabelPercent: 4 },\n radar: { levels: 4, strokeWidth: 2, fillOpacity: 0.22, labelOffset: spacing.sm },\n scatter: { radius: 5, focusRadius: 8 },\n sparkline: { width: 72, height: 28, strokeWidth: 1.8, padding: 2 },\n cursor: { strokeWidth: stroke.subtle, dash: [2, 3] as const },\n reference: { dash: [2, 4] as const },\n chrome: datavizChromeTokens,\n} as const;\n\n// ---------------------------------------------------------------------------------------------\n// Validation\n// ---------------------------------------------------------------------------------------------\n\nexport function validateChartSeries(categories: readonly string[], series: readonly ChartSeries[]): void {\n if (series.length === 0) throw new TypeError(\"Chart needs at least one series\");\n const ids = new Set<string>();\n for (const item of series) {\n if (!item.id.trim()) throw new TypeError(\"Chart series id must not be empty\");\n if (ids.has(item.id)) throw new TypeError(`Duplicate chart series id: ${item.id}`);\n ids.add(item.id);\n if (!item.label.trim()) throw new TypeError(`Chart series \"${item.id}\" label must not be empty`);\n if (item.values.length !== categories.length) {\n throw new RangeError(`Chart series \"${item.id}\" has ${item.values.length} values for ${categories.length} categories`);\n }\n }\n}\n\nexport const isChartNumber = (value: ChartValue | undefined): value is number => typeof value === \"number\" && Number.isFinite(value);\n\n// ---------------------------------------------------------------------------------------------\n// Scales and ticks\n// ---------------------------------------------------------------------------------------------\n\n/** \"Nice\" step (1, 2, 2.5, 5 × 10^n) so axis labels read like 0/25/50 rather than 0/23.7/47.4. */\nexport function niceStep(span: number, count: number): number {\n if (!(span > 0) || count < 1) return 1;\n const raw = span / count, power = 10 ** Math.floor(Math.log10(raw)), ratio = raw / power;\n const nice = ratio <= 1 ? 1 : ratio <= 2 ? 2 : ratio <= 2.5 ? 2.5 : ratio <= 5 ? 5 : 10;\n return nice * power;\n}\n\nexport function niceTicks(min: number, max: number, count = 4): number[] {\n if (!Number.isFinite(min) || !Number.isFinite(max)) return [];\n if (min === max) return [min];\n const step = niceStep(max - min, count), start = Math.ceil(min / step - 1e-9) * step;\n const ticks: number[] = [];\n for (let tick = start; tick <= max + step * 1e-9; tick += step) ticks.push(Number(tick.toPrecision(12)));\n return ticks;\n}\n\nexport type ChartDomainOptions = Readonly<{ domain?: readonly [number, number] | undefined; includeZero?: boolean | undefined; nice?: boolean | undefined; padding?: number | undefined }>;\n/**\n * Value domain. Lines zoom to the observed range (stock charts) unless `includeZero`; bars always\n * include zero so heights compare honestly. `padding` widens a flat series so it is not drawn on an edge.\n */\nexport function resolveChartDomain(values: readonly ChartValue[], { domain, includeZero = false, nice = false, padding = 0 }: ChartDomainOptions = {}): readonly [number, number] {\n if (domain) return domain;\n const observed = values.filter(isChartNumber);\n if (!observed.length) return [0, 1];\n let min = Math.min(...observed), max = Math.max(...observed);\n if (includeZero) { min = Math.min(0, min); max = Math.max(0, max); }\n if (min === max) { const pad = Math.abs(min) * 0.1 || 1; min -= pad; max += pad; }\n if (padding > 0) { const pad = (max - min) * padding; if (!(includeZero && min === 0)) min -= pad; max += pad; }\n if (nice) { const step = niceStep(max - min, 4); min = Math.floor(min / step) * step; max = Math.ceil(max / step) * step; }\n return [min, max];\n}\n\n/** Linear scale from value domain to pixel range; `invert` puts the minimum at the top (ranks, ERA). */\nexport function scaleLinear(domain: readonly [number, number], range: readonly [number, number], invert = false): (value: number) => number {\n const [d0, d1] = domain, [r0, r1] = invert ? [range[1], range[0]] : range, span = d1 - d0;\n return value => span === 0 ? (r0 + r1) / 2 : r0 + (value - d0) / span * (r1 - r0);\n}\n\nexport type ChartBand = Readonly<{ step: number; bandwidth: number; start(index: number): number; center(index: number): number }>;\nexport function scaleBand(count: number, range: readonly [number, number], padding: number = chartRecipe.bar.bandPadding): ChartBand {\n const length = range[1] - range[0], step = count > 0 ? length / count : 0, bandwidth = step * (1 - padding);\n return { step, bandwidth, start: index => range[0] + index * step + (step - bandwidth) / 2, center: index => range[0] + index * step + step / 2 };\n}\n\n/** Evenly spaced x positions for line/area categories (first and last on the plot edges). */\nexport function pointPositions(count: number, range: readonly [number, number]): number[] {\n if (count <= 1) return [Math.round((range[0] + range[1]) / 2)];\n const step = (range[1] - range[0]) / (count - 1);\n return Array.from({ length: count }, (_, i) => range[0] + i * step);\n}\n\n// ---------------------------------------------------------------------------------------------\n// Paths\n// ---------------------------------------------------------------------------------------------\n\nconst fixed = (value: number) => Number(value.toFixed(2));\ntype XY = Readonly<{ x: number; y: number }>;\n\n/** Monotone-X cubic (Fritsch–Carlson): smooth without overshooting the data, like d3.curveMonotoneX. */\nfunction monotoneTangents(points: readonly XY[]): number[] {\n const n = points.length, slopes: number[] = [], tangents: number[] = new Array(n).fill(0);\n for (let i = 0; i < n - 1; i++) slopes.push((points[i + 1]!.y - points[i]!.y) / ((points[i + 1]!.x - points[i]!.x) || 1));\n tangents[0] = slopes[0] ?? 0; tangents[n - 1] = slopes[n - 2] ?? 0;\n for (let i = 1; i < n - 1; i++) tangents[i] = slopes[i - 1]! * slopes[i]! <= 0 ? 0 : (slopes[i - 1]! + slopes[i]!) / 2;\n for (let i = 0; i < n - 1; i++) {\n if (slopes[i] === 0) { tangents[i] = 0; tangents[i + 1] = 0; continue; }\n const a = tangents[i]! / slopes[i]!, b = tangents[i + 1]! / slopes[i]!, h = a * a + b * b;\n if (h > 9) { const t = 3 / Math.sqrt(h); tangents[i] = t * a * slopes[i]!; tangents[i + 1] = t * b * slopes[i]!; }\n }\n return tangents;\n}\n\nexport function linePath(points: readonly XY[], curve: ChartCurve = \"linear\"): string {\n if (!points.length) return \"\";\n const head = `M${fixed(points[0]!.x)},${fixed(points[0]!.y)}`;\n if (points.length === 1) return head;\n if (curve === \"step\") return head + points.slice(1).map((p, i) => `H${fixed((points[i]!.x + p.x) / 2)}V${fixed(p.y)}H${fixed(p.x)}`).join(\"\");\n if (curve === \"monotone\" && points.length > 2) {\n const t = monotoneTangents(points);\n return head + points.slice(1).map((p, i) => {\n const a = points[i]!, dx = (p.x - a.x) / 3;\n return `C${fixed(a.x + dx)},${fixed(a.y + dx * t[i]!)} ${fixed(p.x - dx)},${fixed(p.y - dx * t[i + 1]!)} ${fixed(p.x)},${fixed(p.y)}`;\n }).join(\"\");\n }\n return head + points.slice(1).map(p => `L${fixed(p.x)},${fixed(p.y)}`).join(\"\");\n}\n\n/** Closed area under a line down to `floor` (or between two edges for stacked areas via `lower`). */\nexport function areaPath(points: readonly XY[], floor: number, curve: ChartCurve = \"linear\", lower?: readonly XY[]): string {\n if (points.length < 2) return \"\";\n const top = linePath(points, curve);\n if (lower && lower.length === points.length) {\n const back = linePath([...lower].reverse(), curve).replace(/^M/, \"L\");\n return `${top}${back}Z`;\n }\n return `${top}L${fixed(points.at(-1)!.x)},${fixed(floor)}L${fixed(points[0]!.x)},${fixed(floor)}Z`;\n}\n\n/** Splits a series at missing values: a skipped month is a gap, never an interpolated trend. */\nexport function splitSegments<T extends { value: number } | null>(plots: readonly T[]): Exclude<T, null>[][] {\n const segments: Exclude<T, null>[][] = [];\n let current: Exclude<T, null>[] = [];\n for (const plot of plots) {\n if (plot === null) { if (current.length) segments.push(current); current = []; continue; }\n current.push(plot as Exclude<T, null>);\n }\n if (current.length) segments.push(current);\n return segments;\n}\n\n// ---------------------------------------------------------------------------------------------\n// Cartesian: line / area\n// ---------------------------------------------------------------------------------------------\n\nexport type LineGeometryInput = Readonly<{\n categories: readonly string[];\n series: readonly ChartSeries[];\n width: number;\n height: number;\n insets?: ChartInsets;\n invert?: boolean;\n stacked?: boolean;\n} & ChartDomainOptions>;\n\nexport type LineGeometry = Readonly<{\n plot: Readonly<{ left: number; right: number; top: number; bottom: number }>;\n domain: readonly [number, number];\n ticks: readonly number[];\n xs: readonly number[];\n y(value: number): number;\n /** Per series, per category: the plotted point or null for a gap. */\n plots: readonly (readonly (ChartPlot | null)[])[];\n /** Stacked areas: the lower edge per series (previous cumulative). */\n lower: readonly (readonly (ChartPlot | null)[])[] | null;\n}>;\n\nexport function resolveLineGeometry({ categories, series, width, height, insets = chartRecipe.insets.plot, invert = false, stacked = false, ...domainOptions }: LineGeometryInput): LineGeometry {\n validateChartSeries(categories, series);\n const plot = { left: insets.left, right: width - insets.right, top: insets.top, bottom: height - insets.bottom };\n const totals = stacked ? stackValues(series) : null;\n const domainValues = totals ? totals.flatMap(row => row.map(cell => cell?.[1] ?? null)) : series.flatMap(item => item.values);\n const domain = resolveChartDomain(domainValues, { includeZero: stacked || domainOptions.includeZero, ...domainOptions });\n const y = scaleLinear(domain, [plot.bottom, plot.top], invert);\n const xs = pointPositions(categories.length, [plot.left, plot.right]);\n const plots = series.map((item, s) => item.values.map((value, i) => {\n const top = totals ? totals[s]![i]?.[1] : value;\n return isChartNumber(value) && isChartNumber(top) ? { index: i, seriesIndex: s, x: xs[i]!, y: y(top), value } : null;\n }));\n const lower = totals ? series.map((_, s) => categories.map((__, i) => { const cell = totals[s]![i]; return cell ? { index: i, seriesIndex: s, x: xs[i]!, y: y(cell[0]), value: cell[0] } : null; })) : null;\n return { plot, domain, ticks: niceTicks(domain[0], domain[1], 4), xs, y, plots, lower };\n}\n\n/** Cumulative [lower, upper] per series per category; missing values do not add to the stack. */\nexport function stackValues(series: readonly ChartSeries[]): (readonly [number, number] | null)[][] {\n const length = series[0]?.values.length ?? 0, positive = new Array<number>(length).fill(0), negative = new Array<number>(length).fill(0);\n return series.map(item => item.values.map((value, i) => {\n if (!isChartNumber(value)) return null;\n const base = value >= 0 ? positive[i]! : negative[i]!, top = base + value;\n if (value >= 0) positive[i] = top; else negative[i] = top;\n return [base, top] as const;\n }));\n}\n\n// ---------------------------------------------------------------------------------------------\n// Cartesian: bars\n// ---------------------------------------------------------------------------------------------\n\nexport type ChartBar = Readonly<{ index: number; seriesIndex: number; value: number; x: number; y: number; width: number; height: number }>;\nexport type BarGeometryInput = Readonly<{\n categories: readonly string[];\n series: readonly ChartSeries[];\n width: number;\n height: number;\n insets?: ChartInsets;\n orientation?: ChartOrientation;\n layout?: ChartBarLayout;\n} & ChartDomainOptions>;\nexport type BarGeometry = Readonly<{\n plot: Readonly<{ left: number; right: number; top: number; bottom: number }>;\n domain: readonly [number, number];\n ticks: readonly number[];\n bars: readonly ChartBar[];\n /** Category band centers along the category axis (x for vertical, y for horizontal). */\n centers: readonly number[];\n value(value: number): number;\n}>;\n\nexport function resolveBarGeometry({ categories, series, width, height, insets = chartRecipe.insets.plot, orientation = \"vertical\", layout = \"grouped\", ...domainOptions }: BarGeometryInput): BarGeometry {\n validateChartSeries(categories, series);\n const plot = { left: insets.left, right: width - insets.right, top: insets.top, bottom: height - insets.bottom };\n const stacks = layout === \"stacked\" ? stackValues(series) : null;\n const values = stacks ? stacks.flatMap(row => row.flatMap(cell => cell ? [cell[0], cell[1]] : [])) : series.flatMap(item => item.values);\n const domain = resolveChartDomain(values, { includeZero: true, ...domainOptions });\n const vertical = orientation === \"vertical\";\n const valueScale = vertical ? scaleLinear(domain, [plot.bottom, plot.top]) : scaleLinear(domain, [plot.left, plot.right]);\n const band = scaleBand(categories.length, vertical ? [plot.left, plot.right] : [plot.top, plot.bottom]);\n const thickness = Math.min(chartRecipe.bar.maxWidth * (layout === \"grouped\" ? series.length : 1), band.bandwidth);\n const each = layout === \"grouped\" ? Math.max(1, (thickness - chartRecipe.bar.groupGap * (series.length - 1)) / series.length) : thickness;\n const bars: ChartBar[] = [];\n series.forEach((item, s) => item.values.forEach((value, i) => {\n if (!isChartNumber(value)) return;\n const [from, to] = stacks ? stacks[s]![i]! : [0, value];\n const a = valueScale(from), b = valueScale(to);\n const offset = band.center(i) - thickness / 2 + (layout === \"grouped\" ? s * (each + chartRecipe.bar.groupGap) : 0);\n bars.push(vertical\n ? { index: i, seriesIndex: s, value, x: offset, y: Math.min(a, b), width: each, height: Math.max(1, Math.abs(a - b)) }\n : { index: i, seriesIndex: s, value, x: Math.min(a, b), y: offset, width: Math.max(1, Math.abs(a - b)), height: each });\n }));\n return { plot, domain, ticks: niceTicks(domain[0], domain[1], 4), bars, centers: categories.map((_, i) => band.center(i)), value: valueScale };\n}\n\n// ---------------------------------------------------------------------------------------------\n// Polar: pie / donut / radar\n// ---------------------------------------------------------------------------------------------\n\nexport type PieSlice = Readonly<{ index: number; value: number; percent: number; startAngle: number; endAngle: number; path: string; centroid: XY }>;\nconst polar = (cx: number, cy: number, r: number, angle: number): XY => ({ x: cx + r * Math.sin(angle), y: cy - r * Math.cos(angle) });\n\n/** Annular sector from 12 o'clock clockwise. `innerRadius` 0 draws a pie wedge. */\nexport function arcPath(cx: number, cy: number, outerRadius: number, innerRadius: number, startAngle: number, endAngle: number): string {\n const sweep = endAngle - startAngle;\n if (sweep >= Math.PI * 2 - 1e-6) {\n // A full circle cannot be one arc command; draw two halves.\n const mid = startAngle + Math.PI;\n return arcPath(cx, cy, outerRadius, innerRadius, startAngle, mid) + arcPath(cx, cy, outerRadius, innerRadius, mid, endAngle);\n }\n const large = sweep > Math.PI ? 1 : 0;\n const o0 = polar(cx, cy, outerRadius, startAngle), o1 = polar(cx, cy, outerRadius, endAngle);\n if (innerRadius <= 0) return `M${fixed(cx)},${fixed(cy)}L${fixed(o0.x)},${fixed(o0.y)}A${fixed(outerRadius)},${fixed(outerRadius)} 0 ${large} 1 ${fixed(o1.x)},${fixed(o1.y)}Z`;\n const i1 = polar(cx, cy, innerRadius, endAngle), i0 = polar(cx, cy, innerRadius, startAngle);\n return `M${fixed(o0.x)},${fixed(o0.y)}A${fixed(outerRadius)},${fixed(outerRadius)} 0 ${large} 1 ${fixed(o1.x)},${fixed(o1.y)}L${fixed(i1.x)},${fixed(i1.y)}A${fixed(innerRadius)},${fixed(innerRadius)} 0 ${large} 0 ${fixed(i0.x)},${fixed(i0.y)}Z`;\n}\n\n/** Negative and missing values are excluded: a share of a whole cannot be negative. */\nexport function resolvePieGeometry(values: readonly ChartValue[], { cx, cy, radius: outer, innerRadius = 0, padAngle = chartRecipe.pie.padAngle }: Readonly<{ cx: number; cy: number; radius: number; innerRadius?: number; padAngle?: number }>): PieSlice[] {\n const total = values.reduce<number>((sum, value) => sum + (isChartNumber(value) && value > 0 ? value : 0), 0);\n if (total <= 0) return [];\n let angle = 0;\n const slices: PieSlice[] = [];\n values.forEach((value, index) => {\n if (!isChartNumber(value) || value <= 0) return;\n const sweep = value / total * Math.PI * 2, pad = slices.length || sweep < Math.PI * 2 ? Math.min(padAngle, sweep / 4) : 0;\n const start = angle + pad / 2, end = angle + sweep - pad / 2, mid = (start + end) / 2;\n slices.push({ index, value, percent: value / total * 100, startAngle: start, endAngle: end, path: arcPath(cx, cy, outer, innerRadius, start, end), centroid: polar(cx, cy, innerRadius > 0 ? (outer + innerRadius) / 2 : outer * 0.62, mid) });\n angle += sweep;\n });\n return slices;\n}\n\nexport type RadarAxis = Readonly<{ index: number; label: string; angle: number; end: XY; labelAt: XY; anchor: \"start\" | \"middle\" | \"end\" }>;\nexport type RadarGeometry = Readonly<{ axes: readonly RadarAxis[]; rings: readonly string[]; polygons: readonly Readonly<{ seriesIndex: number; path: string; points: readonly (XY & { index: number; value: number | null })[] }>[] }>;\n/**\n * Radar (spider) chart. All axes share one domain (0..max by default) because the products'\n * ratings are on one 0–100 scale; per-axis scales would make the polygon area meaningless.\n */\nexport function resolveRadarGeometry({ categories, series, cx, cy, radius: outer, domain, levels = chartRecipe.radar.levels, labelOffset = chartRecipe.radar.labelOffset }: Readonly<{ categories: readonly string[]; series: readonly ChartSeries[]; cx: number; cy: number; radius: number; domain?: readonly [number, number]; levels?: number; labelOffset?: number }>): RadarGeometry {\n validateChartSeries(categories, series);\n if (categories.length < 3) throw new RangeError(\"Radar chart needs at least three axes\");\n const [min, max] = domain ?? [0, Math.max(...series.flatMap(item => item.values.filter(isChartNumber)), 1)];\n const step = Math.PI * 2 / categories.length;\n const axes = categories.map((label, index) => {\n const angle = index * step, end = polar(cx, cy, outer, angle), labelAt = polar(cx, cy, outer + labelOffset, angle);\n const sin = Math.sin(angle);\n return { index, label, angle, end, labelAt, anchor: Math.abs(sin) < 0.2 ? \"middle\" as const : sin > 0 ? \"start\" as const : \"end\" as const };\n });\n const rings = Array.from({ length: levels }, (_, level) => {\n const r = outer * (level + 1) / levels;\n return axes.map((axis, i) => { const p = polar(cx, cy, r, axis.angle); return `${i ? \"L\" : \"M\"}${fixed(p.x)},${fixed(p.y)}`; }).join(\"\") + \"Z\";\n });\n const polygons = series.map((item, seriesIndex) => {\n const points = axes.map(axis => {\n const value = item.values[axis.index] ?? null;\n const ratio = isChartNumber(value) ? Math.max(0, Math.min(1, (value - min) / ((max - min) || 1))) : 0;\n return { ...polar(cx, cy, outer * ratio, axis.angle), index: axis.index, value: isChartNumber(value) ? value : null };\n });\n return { seriesIndex, points, path: points.map((p, i) => `${i ? \"L\" : \"M\"}${fixed(p.x)},${fixed(p.y)}`).join(\"\") + \"Z\" };\n });\n return { axes, rings, polygons };\n}\n\n// ---------------------------------------------------------------------------------------------\n// Scatter\n// ---------------------------------------------------------------------------------------------\n\nexport type ScatterDatum = Readonly<{ id: string; label: string; x: number; y: number; seriesIndex?: number }>;\nexport type ScatterGeometry = Readonly<{\n plot: Readonly<{ left: number; right: number; top: number; bottom: number }>;\n xDomain: readonly [number, number]; yDomain: readonly [number, number];\n xTicks: readonly number[]; yTicks: readonly number[];\n points: readonly (ScatterDatum & { px: number; py: number })[];\n}>;\nexport function resolveScatterGeometry({ points, width, height, insets = chartRecipe.insets.axis, xDomain, yDomain }: Readonly<{ points: readonly ScatterDatum[]; width: number; height: number; insets?: ChartInsets; xDomain?: readonly [number, number]; yDomain?: readonly [number, number] }>): ScatterGeometry {\n const plot = { left: insets.left, right: width - insets.right, top: insets.top, bottom: height - insets.bottom };\n const xd = resolveChartDomain(points.map(p => p.x), { domain: xDomain, padding: 0.06 }), yd = resolveChartDomain(points.map(p => p.y), { domain: yDomain, padding: 0.06 });\n const sx = scaleLinear(xd, [plot.left, plot.right]), sy = scaleLinear(yd, [plot.bottom, plot.top]);\n return { plot, xDomain: xd, yDomain: yd, xTicks: niceTicks(xd[0], xd[1], 4), yTicks: niceTicks(yd[0], yd[1], 4), points: points.map(p => ({ ...p, px: sx(p.x), py: sy(p.y) })) };\n}\n\n// ---------------------------------------------------------------------------------------------\n// Focus (scrub / press) and accessibility\n// ---------------------------------------------------------------------------------------------\n\n/** Category index whose x is closest to a pointer x, among categories that have any value. */\nexport function nearestChartIndex(xs: readonly number[], x: number, available?: readonly number[]): number | null {\n const candidates = available ?? xs.map((_, i) => i);\n let best: number | null = null, distance = Infinity;\n for (const index of candidates) {\n const d = Math.abs(xs[index]! - x);\n if (d < distance) { distance = d; best = index; }\n }\n return best;\n}\nexport function nearestScatterPoint(points: readonly Readonly<{ px: number; py: number }>[], x: number, y: number, maxDistance = 32): number | null {\n let best: number | null = null, distance = maxDistance * maxDistance;\n points.forEach((p, i) => { const d = (p.px - x) ** 2 + (p.py - y) ** 2; if (d <= distance) { distance = d; best = i; } });\n return best;\n}\n/** Adjustable-role step (VoiceOver swipe, arrow keys) over observed indices only. */\nexport function stepChartIndex(available: readonly number[], current: number | null, direction: 1 | -1): number | null {\n if (!available.length) return null;\n if (current === null) return direction > 0 ? available[0]! : available.at(-1)!;\n const position = available.indexOf(current);\n return available[Math.min(available.length - 1, Math.max(0, (position < 0 ? 0 : position) + direction))]!;\n}\nexport function observedIndices(series: readonly ChartSeries[]): number[] {\n const length = series[0]?.values.length ?? 0;\n return Array.from({ length }, (_, i) => i).filter(i => series.some(item => isChartNumber(item.values[i])));\n}\n/** Index of the highest and lowest observation of one series (stock-chart high/low markers). */\nexport function seriesExtremes(values: readonly ChartValue[]): Readonly<{ max: number; min: number }> | null {\n let max = -1, min = -1;\n values.forEach((value, i) => {\n if (!isChartNumber(value)) return;\n if (max < 0 || value > values[max]!) max = i;\n if (min < 0 || value < values[min]!) min = i;\n });\n return max < 0 ? null : { max, min };\n}\n\n/**\n * Text alternative for an image-like chart: every category's values in order, product-formatted.\n * Products pass localized `format`; HJM never formats numbers into a language itself.\n */\nexport function describeChart(categories: readonly string[], series: readonly ChartSeries[], format: (value: number) => string, missing: string): string {\n return series.map(item => `${item.label}: ${categories.map((category, i) => { const v = item.values[i]; return `${category} ${isChartNumber(v) ? format(v) : missing}`; }).join(\", \")}`).join(\". \");\n}\n\nexport const chartBehavior = {\n controlled: [\"focusIndex\"],\n inputs: [\"categories\", \"series\", \"kind\", \"orientation\", \"layout\", \"domain\", \"invert\", \"curve\"],\n events: [\"onFocusChange\"],\n configuration: { curve: [\"linear\", \"monotone\", \"step\"], orientation: [\"vertical\", \"horizontal\"], layout: [\"grouped\", \"stacked\"] },\n defaults: { curve: \"linear\", orientation: \"vertical\", layout: \"grouped\" },\n stateAxes: { value: [\"focused\", \"scrubbing\"], content: [\"idle\", \"empty\"] },\n web: { roles: [\"img\", \"slider\"], keyboard: [\"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"], focus: \"native\" },\n native: { roles: [\"adjustable\", \"image\"], states: [], actions: [\"increment\", \"decrement\"] },\n scenarios: [\n \"missing-values-split-the-line-instead-of-drawing-zero\",\n \"bars-and-stacks-always-include-a-zero-baseline\",\n \"inverted-scale-puts-the-best-rank-on-top\",\n \"scrubbing-reports-the-focused-index-and-releasing-restores-the-latest\",\n \"the-focused-point-is-reachable-without-a-drag-via-adjustable-or-arrow-keys\",\n \"series-colors-come-from-the-product-or-the-dataviz-palette-never-status-colors\",\n \"every-chart-exposes-a-product-formatted-text-alternative\",\n \"radar-axes-share-one-domain\",\n \"pie-slices-ignore-negative-and-missing-values\",\n ],\n} as const satisfies BehaviorContract;\n\n/** Excluding a slice changes the denominator; selecting one only emphasizes it (Lucian 097). */\nexport function resolvePieVisibility(data: readonly Readonly<{ id: string; value: number | null }>[], excludedIds: readonly string[] = []) {\n const ids = new Set(data.map(datum => datum.id)), excluded = new Set(excludedIds);\n if (ids.size !== data.length || data.some(datum => !datum.id.trim())) throw new TypeError(\"Pie data requires distinct nonempty ids\");\n if (excluded.size !== excludedIds.length || excludedIds.some(id => !ids.has(id))) throw new TypeError(\"Excluded pie ids must be distinct known ids\");\n // Keep the existing geometry contract: negative/nonfinite/missing values never enter a share.\n const values = data.map(datum => excluded.has(datum.id) || !isChartNumber(datum.value) || datum.value < 0 ? null : datum.value);\n const total = values.reduce<number>((sum, value) => sum + (value ?? 0), 0);\n if (!Number.isFinite(total)) throw new RangeError(\"Pie total must be finite\");\n return { values, total, includedCount: data.length - excluded.size, observedCount: values.filter(value => value !== null).length };\n}\nexport type PieVisibilitySummary = ReturnType<typeof resolvePieVisibility>;\n\n/** Match both actual polyline vertices before period morphing. Union knots preserve\n * every observation for linear paths; work is bounded by the caller for large data. */\nexport function prepareChartLineMorph(from: readonly XY[], to: readonly XY[]) {\n if (from.length < 2 || to.length < 2) return null;\n const knots = [...new Set([...from.map((_, i) => i / (from.length - 1)), ...to.map((_, i) => i / (to.length - 1))])].sort((a, b) => a - b);\n const sample = (points: readonly XY[], position: number): XY => {\n const index = position * (points.length - 1), start = Math.floor(index), end = Math.min(points.length - 1, start + 1), t = index - start;\n return { x: points[start]!.x + (points[end]!.x - points[start]!.x) * t, y: points[start]!.y + (points[end]!.y - points[start]!.y) * t };\n };\n const first = knots.map(k => sample(from, k)), last = knots.map(k => sample(to, k));\n return (progress: number): XY[] => {\n const t = Math.max(0, Math.min(1, progress));\n return first.map((point, i) => ({ x: point.x + (last[i]!.x - point.x) * t, y: point.y + (last[i]!.y - point.y) * t }));\n };\n}\n"]}
|
|
@@ -39,6 +39,7 @@ export declare const componentIds: {
|
|
|
39
39
|
readonly RadioGroup: "radio-group";
|
|
40
40
|
readonly Switch: "switch";
|
|
41
41
|
readonly Chip: "chip";
|
|
42
|
+
readonly ImageChoiceGroup: "image-choice-group";
|
|
42
43
|
readonly SegmentedControl: "segmented-control";
|
|
43
44
|
readonly ToggleGroup: "toggle-group";
|
|
44
45
|
readonly TagsInput: "tags-input";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-definitions.d.ts","sourceRoot":"","sources":["../src/component-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,IAAI,uBAAuB,EAChD,KAAK,sBAAsB,IAAI,6BAA6B,EAC5D,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAC/E,2EAA2E;AAC3E,MAAM,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACvD,MAAM,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAEnE,4DAA4D;AAC5D,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"component-definitions.d.ts","sourceRoot":"","sources":["../src/component-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,gBAAgB,IAAI,uBAAuB,EAChD,KAAK,sBAAsB,IAAI,6BAA6B,EAC5D,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAC;AAC/E,2EAA2E;AAC3E,MAAM,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AACvD,MAAM,MAAM,sBAAsB,GAAG,6BAA6B,CAAC;AAEnE,4DAA4D;AAC5D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0GmC,CAAC;AAE7D,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,EAAE,EAAE,WAAW,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;QACjB,MAAM,EAAE,eAAe,CAAC;QACxB,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;QAC/B,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;QACnC,OAAO,CAAC,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;KAC5C,CAAC,CAAC;IACH,QAAQ,EAAE,QAAQ,CAAC;QACjB,MAAM,EAAE,iBAAiB,CAAC;QAC1B,GAAG,EAAE,QAAQ,CAAC;YAAE,MAAM,EAAE,sBAAsB,CAAA;SAAE,CAAC,CAAC;QAClD,MAAM,EAAE,QAAQ,CAAC;YAAE,MAAM,EAAE,sBAAsB,CAAA;SAAE,CAAC,CAAC;KACtD,CAAC,CAAC;IACH,IAAI,EAAE,QAAQ,CAAC;QACb,2GAA2G;QAC3G,OAAO,EAAE,cAAc,WAAW,EAAE,CAAC;QACrC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;KAC5B,CAAC,CAAC;CACJ,CAAC,CAAC;AAeH;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,mBAAmB,EAyB7D,CAAC;AAEH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,WAAW,GAAG,aAAa,GACpC,mBAAmB,GAAG,SAAS,CAIjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-definitions.js","sourceRoot":"","sources":["../src/component-definitions.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n componentCatalog,\n getComponentSurfaceStatus,\n type ComponentCatalogEntry,\n type ComponentCategory,\n type ComponentName,\n type ComponentPlatform,\n type ComponentStatus,\n type ComponentSurface as CatalogComponentSurface,\n type ComponentSurfaceStatus as CatalogComponentSurfaceStatus,\n type RecipeName,\n} from \"./catalog.js\";\nimport type { BehaviorName } from \"./behaviors.js\";\n\nexport type ComponentKind = \"primitive\" | \"component\" | \"provider\" | \"utility\";\n/** Kept here as aliases for existing `component-definitions` consumers. */\nexport type ComponentSurface = CatalogComponentSurface;\nexport type ComponentSurfaceStatus = CatalogComponentSurfaceStatus;\n\n/** Stable IDs survive display-name and category changes. */\nexport const componentIds = {\n Text: \"text\",\n TextFormat: \"text-format\",\n Heading: \"heading\",\n Icon: \"icon\",\n Surface: \"surface\",\n Divider: \"divider\",\n Section: \"section\",\n Stack: \"stack\",\n Container: \"container\",\n AspectRatio: \"aspect-ratio\",\n Grid: \"grid\",\n Layout: \"layout\",\n Top: \"top\",\n Masonry: \"masonry\",\n Splitter: \"splitter\",\n Button: \"button\",\n IconButton: \"icon-button\",\n Link: \"link\",\n BottomCTA: \"bottom-cta\",\n FloatingActionButton: \"floating-action-button\",\n AuthProviderButton: \"auth-provider-button\",\n AuthScreenLayout: \"auth-screen\",\n Field: \"field\",\n SearchField: \"search-field\",\n TextArea: \"text-area\",\n PasswordField: \"password-field\",\n OtpField: \"otp-field\",\n Checkbox: \"checkbox\",\n Radio: \"radio\",\n CheckboxGroup: \"checkbox-group\",\n RadioGroup: \"radio-group\",\n Switch: \"switch\",\n Chip: \"chip\",\n SegmentedControl: \"segmented-control\",\n ToggleGroup: \"toggle-group\",\n TagsInput: \"tags-input\",\n Slider: \"slider\",\n NumberField: \"number-field\",\n Select: \"select\",\n Combobox: \"combobox\",\n DatePicker: \"date-picker\",\n DateRangePicker: \"date-range-picker\",\n ColorPicker: \"color-picker\",\n FilePicker: \"file-picker\",\n Form: \"form\",\n Agreement: \"agreement\",\n Mentions: \"mentions\",\n TransferList: \"transfer-list\",\n UploadItem: \"upload-item\",\n Tabs: \"tabs\",\n TopBar: \"top-bar\",\n Sidebar: \"sidebar\",\n BottomNavigation: \"bottom-navigation\",\n Breadcrumb: \"breadcrumb\",\n Pagination: \"pagination\",\n LoadMore: \"load-more\",\n Steps: \"steps\",\n Menubar: \"menubar\",\n ContextMenu: \"context-menu\",\n Menu: \"menu\",\n Anchor: \"anchor\",\n Avatar: \"avatar\",\n Badge: \"badge\",\n CounterBadge: \"counter-badge\",\n Card: \"card\",\n List: \"list\",\n ListRow: \"list-row\",\n VirtualList: \"virtual-list\",\n Collapsible: \"collapsible\",\n Asset: \"asset\",\n Accordion: \"accordion\",\n Statistic: \"statistic\",\n Timeline: \"timeline\",\n DataTable: \"data-table\",\n Chart: \"chart\",\n Tree: \"tree\",\n Calendar: \"calendar\",\n Carousel: \"carousel\",\n DescriptionList: \"description-list\",\n Image: \"image\",\n QRCode: \"qr-code\",\n Tag: \"tag\",\n Tour: \"tour\",\n EmptyState: \"empty-state\",\n Notice: \"notice\",\n Progress: \"progress\",\n ThinkingOrb: \"thinking-orb\",\n Spinner: \"spinner\",\n Skeleton: \"skeleton\",\n Result: \"result\",\n BottomInfo: \"bottom-info\",\n Toast: \"toast\",\n Watermark: \"watermark\",\n Dialog: \"dialog\",\n AlertDialog: \"alert-dialog\",\n Sheet: \"sheet\",\n SidePanel: \"side-panel\",\n Popover: \"popover\",\n Tooltip: \"tooltip\",\n CommandPalette: \"command-palette\",\n Affix: \"affix\",\n DesignSystemProvider: \"design-system-provider\",\n SkipNav: \"skip-nav\",\n VisuallyHidden: \"visually-hidden\",\n} as const satisfies Readonly<Record<ComponentName, string>>;\n\nexport type ComponentId = (typeof componentIds)[ComponentName];\n\nexport type ComponentDefinition = Readonly<{\n id: ComponentId;\n name: ComponentName;\n category: ComponentCategory;\n kind: ComponentKind;\n contract: Readonly<{\n status: ComponentStatus;\n recipes: readonly RecipeName[];\n behaviors: readonly BehaviorName[];\n roadmap?: ComponentCatalogEntry[\"roadmap\"];\n }>;\n surfaces: Readonly<{\n parity: ComponentPlatform;\n web: Readonly<{ status: ComponentSurfaceStatus }>;\n native: Readonly<{ status: ComponentSurfaceStatus }>;\n }>;\n docs: Readonly<{\n /** Stable documentation key; aliases are catalog search terms, not alternate component implementations. */\n storyId: `components/${ComponentId}`;\n aliases: readonly string[];\n }>;\n}>;\n\nconst kindByCategory: Readonly<Record<ComponentCategory, ComponentKind>> = {\n foundation: \"primitive\",\n layout: \"primitive\",\n action: \"component\",\n input: \"component\",\n navigation: \"component\",\n \"data-display\": \"component\",\n feedback: \"component\",\n overlay: \"component\",\n provider: \"provider\",\n utility: \"utility\",\n};\n\n/**\n * Normalized catalog view. Consumers should prefer this shape so a component can evolve to multiple recipes,\n * behaviors, and different Web/Native maturity without another API rewrite.\n */\nexport const componentDefinitions: readonly ComponentDefinition[] = componentCatalog.map((rawEntry) => {\n const entry: ComponentCatalogEntry = rawEntry;\n const name = entry.name as ComponentName;\n const id = componentIds[name];\n return {\n id,\n name,\n category: entry.category,\n kind: kindByCategory[entry.category],\n contract: {\n status: entry.status,\n recipes: entry.recipe ? [entry.recipe] : [],\n behaviors: entry.behavior ? [entry.behavior] : [],\n roadmap: entry.roadmap,\n },\n surfaces: {\n parity: entry.platform,\n web: { status: getComponentSurfaceStatus(entry, \"web\") },\n native: { status: getComponentSurfaceStatus(entry, \"native\") },\n },\n docs: {\n storyId: `components/${id}`,\n aliases: entry.aliases ?? [],\n },\n };\n});\n\nexport function getComponentDefinition(\n idOrName: ComponentId | ComponentName,\n): ComponentDefinition | undefined {\n return componentDefinitions.find(\n (definition) => definition.id === idOrName || definition.name === idOrName,\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"component-definitions.js","sourceRoot":"","sources":["../src/component-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,yBAAyB,GAS1B,MAAM,cAAc,CAAC;AAQtB,4DAA4D;AAC5D,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,aAAa;IACzB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,cAAc;IAC3B,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,aAAa;IACzB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,YAAY;IACvB,oBAAoB,EAAE,wBAAwB;IAC9C,kBAAkB,EAAE,sBAAsB;IAC1C,gBAAgB,EAAE,aAAa;IAC/B,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,cAAc;IAC3B,QAAQ,EAAE,WAAW;IACrB,aAAa,EAAE,gBAAgB;IAC/B,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,UAAU;IACpB,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,gBAAgB;IAC/B,UAAU,EAAE,aAAa;IACzB,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,gBAAgB,EAAE,oBAAoB;IACtC,gBAAgB,EAAE,mBAAmB;IACrC,WAAW,EAAE,cAAc;IAC3B,SAAS,EAAE,YAAY;IACvB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,cAAc;IAC3B,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,aAAa;IACzB,eAAe,EAAE,mBAAmB;IACpC,WAAW,EAAE,cAAc;IAC3B,UAAU,EAAE,aAAa;IACzB,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,YAAY,EAAE,eAAe;IAC7B,UAAU,EAAE,aAAa;IACzB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,mBAAmB;IACrC,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,QAAQ,EAAE,WAAW;IACrB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,cAAc;IAC3B,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,YAAY,EAAE,eAAe;IAC7B,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,UAAU;IACnB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,aAAa;IAC1B,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,YAAY;IACvB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,eAAe,EAAE,kBAAkB;IACnC,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,SAAS;IACjB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,aAAa;IACzB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,cAAc;IAC3B,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,aAAa;IACzB,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,WAAW,EAAE,cAAc;IAC3B,KAAK,EAAE,OAAO;IACd,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,cAAc,EAAE,iBAAiB;IACjC,KAAK,EAAE,OAAO;IACd,oBAAoB,EAAE,wBAAwB;IAC9C,OAAO,EAAE,UAAU;IACnB,cAAc,EAAE,iBAAiB;CACyB,CAAC;AA2B7D,MAAM,cAAc,GAAuD;IACzE,UAAU,EAAE,WAAW;IACvB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,WAAW;IAClB,UAAU,EAAE,WAAW;IACvB,cAAc,EAAE,WAAW;IAC3B,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,WAAW;IACpB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAmC,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;IACpG,MAAM,KAAK,GAA0B,QAAQ,CAAC;IAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAqB,CAAC;IACzC,MAAM,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO;QACL,EAAE;QACF,IAAI;QACJ,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpC,QAAQ,EAAE;YACR,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC3C,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;YACjD,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB;QACD,QAAQ,EAAE;YACR,MAAM,EAAE,KAAK,CAAC,QAAQ;YACtB,GAAG,EAAE,EAAE,MAAM,EAAE,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;YACxD,MAAM,EAAE,EAAE,MAAM,EAAE,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE;SAC/D;QACD,IAAI,EAAE;YACJ,OAAO,EAAE,cAAc,EAAE,EAAE;YAC3B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;SAC7B;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,sBAAsB,CACpC,QAAqC;IAErC,OAAO,oBAAoB,CAAC,IAAI,CAC9B,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,CAC3E,CAAC;AACJ,CAAC","sourcesContent":["import {\n componentCatalog,\n getComponentSurfaceStatus,\n type ComponentCatalogEntry,\n type ComponentCategory,\n type ComponentName,\n type ComponentPlatform,\n type ComponentStatus,\n type ComponentSurface as CatalogComponentSurface,\n type ComponentSurfaceStatus as CatalogComponentSurfaceStatus,\n type RecipeName,\n} from \"./catalog.js\";\nimport type { BehaviorName } from \"./behaviors.js\";\n\nexport type ComponentKind = \"primitive\" | \"component\" | \"provider\" | \"utility\";\n/** Kept here as aliases for existing `component-definitions` consumers. */\nexport type ComponentSurface = CatalogComponentSurface;\nexport type ComponentSurfaceStatus = CatalogComponentSurfaceStatus;\n\n/** Stable IDs survive display-name and category changes. */\nexport const componentIds = {\n Text: \"text\",\n TextFormat: \"text-format\",\n Heading: \"heading\",\n Icon: \"icon\",\n Surface: \"surface\",\n Divider: \"divider\",\n Section: \"section\",\n Stack: \"stack\",\n Container: \"container\",\n AspectRatio: \"aspect-ratio\",\n Grid: \"grid\",\n Layout: \"layout\",\n Top: \"top\",\n Masonry: \"masonry\",\n Splitter: \"splitter\",\n Button: \"button\",\n IconButton: \"icon-button\",\n Link: \"link\",\n BottomCTA: \"bottom-cta\",\n FloatingActionButton: \"floating-action-button\",\n AuthProviderButton: \"auth-provider-button\",\n AuthScreenLayout: \"auth-screen\",\n Field: \"field\",\n SearchField: \"search-field\",\n TextArea: \"text-area\",\n PasswordField: \"password-field\",\n OtpField: \"otp-field\",\n Checkbox: \"checkbox\",\n Radio: \"radio\",\n CheckboxGroup: \"checkbox-group\",\n RadioGroup: \"radio-group\",\n Switch: \"switch\",\n Chip: \"chip\",\n ImageChoiceGroup: \"image-choice-group\",\n SegmentedControl: \"segmented-control\",\n ToggleGroup: \"toggle-group\",\n TagsInput: \"tags-input\",\n Slider: \"slider\",\n NumberField: \"number-field\",\n Select: \"select\",\n Combobox: \"combobox\",\n DatePicker: \"date-picker\",\n DateRangePicker: \"date-range-picker\",\n ColorPicker: \"color-picker\",\n FilePicker: \"file-picker\",\n Form: \"form\",\n Agreement: \"agreement\",\n Mentions: \"mentions\",\n TransferList: \"transfer-list\",\n UploadItem: \"upload-item\",\n Tabs: \"tabs\",\n TopBar: \"top-bar\",\n Sidebar: \"sidebar\",\n BottomNavigation: \"bottom-navigation\",\n Breadcrumb: \"breadcrumb\",\n Pagination: \"pagination\",\n LoadMore: \"load-more\",\n Steps: \"steps\",\n Menubar: \"menubar\",\n ContextMenu: \"context-menu\",\n Menu: \"menu\",\n Anchor: \"anchor\",\n Avatar: \"avatar\",\n Badge: \"badge\",\n CounterBadge: \"counter-badge\",\n Card: \"card\",\n List: \"list\",\n ListRow: \"list-row\",\n VirtualList: \"virtual-list\",\n Collapsible: \"collapsible\",\n Asset: \"asset\",\n Accordion: \"accordion\",\n Statistic: \"statistic\",\n Timeline: \"timeline\",\n DataTable: \"data-table\",\n Chart: \"chart\",\n Tree: \"tree\",\n Calendar: \"calendar\",\n Carousel: \"carousel\",\n DescriptionList: \"description-list\",\n Image: \"image\",\n QRCode: \"qr-code\",\n Tag: \"tag\",\n Tour: \"tour\",\n EmptyState: \"empty-state\",\n Notice: \"notice\",\n Progress: \"progress\",\n ThinkingOrb: \"thinking-orb\",\n Spinner: \"spinner\",\n Skeleton: \"skeleton\",\n Result: \"result\",\n BottomInfo: \"bottom-info\",\n Toast: \"toast\",\n Watermark: \"watermark\",\n Dialog: \"dialog\",\n AlertDialog: \"alert-dialog\",\n Sheet: \"sheet\",\n SidePanel: \"side-panel\",\n Popover: \"popover\",\n Tooltip: \"tooltip\",\n CommandPalette: \"command-palette\",\n Affix: \"affix\",\n DesignSystemProvider: \"design-system-provider\",\n SkipNav: \"skip-nav\",\n VisuallyHidden: \"visually-hidden\",\n} as const satisfies Readonly<Record<ComponentName, string>>;\n\nexport type ComponentId = (typeof componentIds)[ComponentName];\n\nexport type ComponentDefinition = Readonly<{\n id: ComponentId;\n name: ComponentName;\n category: ComponentCategory;\n kind: ComponentKind;\n contract: Readonly<{\n status: ComponentStatus;\n recipes: readonly RecipeName[];\n behaviors: readonly BehaviorName[];\n roadmap?: ComponentCatalogEntry[\"roadmap\"];\n }>;\n surfaces: Readonly<{\n parity: ComponentPlatform;\n web: Readonly<{ status: ComponentSurfaceStatus }>;\n native: Readonly<{ status: ComponentSurfaceStatus }>;\n }>;\n docs: Readonly<{\n /** Stable documentation key; aliases are catalog search terms, not alternate component implementations. */\n storyId: `components/${ComponentId}`;\n aliases: readonly string[];\n }>;\n}>;\n\nconst kindByCategory: Readonly<Record<ComponentCategory, ComponentKind>> = {\n foundation: \"primitive\",\n layout: \"primitive\",\n action: \"component\",\n input: \"component\",\n navigation: \"component\",\n \"data-display\": \"component\",\n feedback: \"component\",\n overlay: \"component\",\n provider: \"provider\",\n utility: \"utility\",\n};\n\n/**\n * Normalized catalog view. Consumers should prefer this shape so a component can evolve to multiple recipes,\n * behaviors, and different Web/Native maturity without another API rewrite.\n */\nexport const componentDefinitions: readonly ComponentDefinition[] = componentCatalog.map((rawEntry) => {\n const entry: ComponentCatalogEntry = rawEntry;\n const name = entry.name as ComponentName;\n const id = componentIds[name];\n return {\n id,\n name,\n category: entry.category,\n kind: kindByCategory[entry.category],\n contract: {\n status: entry.status,\n recipes: entry.recipe ? [entry.recipe] : [],\n behaviors: entry.behavior ? [entry.behavior] : [],\n roadmap: entry.roadmap,\n },\n surfaces: {\n parity: entry.platform,\n web: { status: getComponentSurfaceStatus(entry, \"web\") },\n native: { status: getComponentSurfaceStatus(entry, \"native\") },\n },\n docs: {\n storyId: `components/${id}`,\n aliases: entry.aliases ?? [],\n },\n };\n});\n\nexport function getComponentDefinition(\n idOrName: ComponentId | ComponentName,\n): ComponentDefinition | undefined {\n return componentDefinitions.find(\n (definition) => definition.id === idOrName || definition.name === idOrName,\n );\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { control, spacing } from "./foundations.js";
|
|
1
|
+
import { control, spacing, type FontWeightValue, type TextVariant } from "./foundations.js";
|
|
2
2
|
export { iconButtonRecipe, resolveIconButtonPresentation, type IconButtonShape, type IconButtonSize, type IconButtonTone, type ResolvedIconButtonPresentation, } from "./icon-button-recipe.js";
|
|
3
3
|
export { counterBadgeDefaults, counterBadgeRecipe, formatCounterBadgeCount, type CounterBadgeSize, type CounterBadgeTone, type CounterBadgeVariant, } from "./counter-badge-recipe.js";
|
|
4
4
|
export { progressRecipe, type ProgressShape, type ProgressSize, type ProgressTone, } from "./progress-recipe.js";
|
|
@@ -59,7 +59,21 @@ export declare const textRecipe: {
|
|
|
59
59
|
readonly medium: "600";
|
|
60
60
|
readonly strong: "700";
|
|
61
61
|
};
|
|
62
|
+
/**
|
|
63
|
+
* Variants whose omitted `emphasis` renders the variant's typography weight even without a design profile.
|
|
64
|
+
* Label's 500 has no emphasis step (`medium` is 600), and the shared `regular` default drew form labels at
|
|
65
|
+
* body weight (2026-10-17 user decision: label 500 on Web and Native). Other variants keep `regular`.
|
|
66
|
+
*/
|
|
67
|
+
readonly variantWeight: readonly ["label"];
|
|
62
68
|
};
|
|
69
|
+
/**
|
|
70
|
+
* Weight Text renders when the caller omits `emphasis`; `undefined` means `textRecipe.defaults.emphasis` applies.
|
|
71
|
+
* Inside a design profile every variant follows the profile's typography weight; outside one only
|
|
72
|
+
* `textRecipe.variantWeight` variants do. An explicit `emphasis` always wins and never reaches this resolver.
|
|
73
|
+
*/
|
|
74
|
+
export declare function resolveTextDefaultWeight(variant: TextVariant, typographyTokens: Readonly<Record<TextVariant, Readonly<{
|
|
75
|
+
fontWeight: FontWeightValue;
|
|
76
|
+
}>>>, designProfileActive: boolean): FontWeightValue | undefined;
|
|
63
77
|
export type IconTone = "primary" | "secondary" | "decorative" | "brand" | "info" | "success" | "warning" | "danger" | "inverse";
|
|
64
78
|
export type IconWeight = "regular" | "strong";
|
|
65
79
|
export declare const iconRecipe: {
|
|
@@ -335,7 +349,11 @@ export declare const badgeRecipe: {
|
|
|
335
349
|
key: "bg";
|
|
336
350
|
alpha?: number;
|
|
337
351
|
}>;
|
|
338
|
-
readonly border:
|
|
352
|
+
readonly border: Readonly<{
|
|
353
|
+
source: "theme";
|
|
354
|
+
key: "border";
|
|
355
|
+
alpha?: number;
|
|
356
|
+
}>;
|
|
339
357
|
};
|
|
340
358
|
readonly strong: {
|
|
341
359
|
readonly content: Readonly<{
|
|
@@ -371,7 +389,11 @@ export declare const badgeRecipe: {
|
|
|
371
389
|
key: "bg";
|
|
372
390
|
alpha?: number;
|
|
373
391
|
}>;
|
|
374
|
-
readonly border:
|
|
392
|
+
readonly border: Readonly<{
|
|
393
|
+
source: "theme";
|
|
394
|
+
key: "border";
|
|
395
|
+
alpha?: number;
|
|
396
|
+
}>;
|
|
375
397
|
};
|
|
376
398
|
readonly info: {
|
|
377
399
|
readonly content: Readonly<{
|
|
@@ -1945,7 +1967,7 @@ export declare const switchRecipe: {
|
|
|
1945
1967
|
readonly size: "medium";
|
|
1946
1968
|
};
|
|
1947
1969
|
readonly presentationDefaults: {
|
|
1948
|
-
readonly web: "
|
|
1970
|
+
readonly web: "row";
|
|
1949
1971
|
readonly native: "row";
|
|
1950
1972
|
};
|
|
1951
1973
|
readonly stackedTextScale: 1.6;
|
|
@@ -2073,6 +2095,7 @@ export declare const selectionControlRecipe: {
|
|
|
2073
2095
|
readonly checkbox: "sm";
|
|
2074
2096
|
readonly radio: "full";
|
|
2075
2097
|
};
|
|
2098
|
+
readonly indicatorBorderWidth: 2;
|
|
2076
2099
|
readonly presentations: {
|
|
2077
2100
|
readonly plain: {
|
|
2078
2101
|
readonly background: null;
|
|
@@ -2291,6 +2314,7 @@ export declare const bottomNavigationRecipe: {
|
|
|
2291
2314
|
readonly offsetY: 4;
|
|
2292
2315
|
};
|
|
2293
2316
|
readonly maxWidth: 480;
|
|
2317
|
+
readonly contentMaxWidth: null;
|
|
2294
2318
|
readonly outerPaddingHorizontal: 16;
|
|
2295
2319
|
readonly outerPaddingTop: 8;
|
|
2296
2320
|
};
|
|
@@ -2310,6 +2334,11 @@ export declare const bottomNavigationRecipe: {
|
|
|
2310
2334
|
readonly radius: null;
|
|
2311
2335
|
readonly shadow: null;
|
|
2312
2336
|
readonly maxWidth: null;
|
|
2337
|
+
/**
|
|
2338
|
+
* The bar surface and its top edge span the viewport, but the destinations stay in a centered 480 column
|
|
2339
|
+
* (the capsule width): on a 1280 desktop two items otherwise sat at opposite screen edges (2026-10-17 review D8).
|
|
2340
|
+
*/
|
|
2341
|
+
readonly contentMaxWidth: 480;
|
|
2313
2342
|
readonly outerPaddingHorizontal: 0;
|
|
2314
2343
|
readonly outerPaddingTop: 0;
|
|
2315
2344
|
};
|
|
@@ -2334,6 +2363,7 @@ export declare const bottomNavigationRecipe: {
|
|
|
2334
2363
|
readonly offsetY: 4;
|
|
2335
2364
|
};
|
|
2336
2365
|
readonly maxWidth: 384;
|
|
2366
|
+
readonly contentMaxWidth: null;
|
|
2337
2367
|
readonly outerPaddingHorizontal: 16;
|
|
2338
2368
|
readonly outerPaddingTop: 8;
|
|
2339
2369
|
};
|
|
@@ -2924,7 +2954,14 @@ export declare const avatarRecipe: {
|
|
|
2924
2954
|
key: "border";
|
|
2925
2955
|
alpha?: number;
|
|
2926
2956
|
}>;
|
|
2957
|
+
/** Initials are bold; their size follows the avatar (Web `.hjm-avatar[data-size]` steps). */
|
|
2958
|
+
readonly initialsWeight: "strong";
|
|
2927
2959
|
};
|
|
2960
|
+
/**
|
|
2961
|
+
* Initials text step for an avatar diameter, shared by Web size tokens and Native numeric sizes
|
|
2962
|
+
* (2026-10-17 comparison: Native drew 12pt brand-colored initials at every size).
|
|
2963
|
+
*/
|
|
2964
|
+
export declare function resolveAvatarInitialsTextVariant(size: number): "label" | "body" | "title";
|
|
2928
2965
|
export type StatisticDensity = "compact" | "comfortable";
|
|
2929
2966
|
export type StatisticPresentation = "plain" | "surface";
|
|
2930
2967
|
export declare const statisticRecipe: {
|
|
@@ -3043,6 +3080,15 @@ export declare const statisticRecipe: {
|
|
|
3043
3080
|
};
|
|
3044
3081
|
};
|
|
3045
3082
|
};
|
|
3083
|
+
/**
|
|
3084
|
+
* Gap between adjacent buttons in one action group (2026-10-17 user rule: stacked bottom buttons looked
|
|
3085
|
+
* loose at 12). Stacked (column) groups use 8, inline (row) groups keep 12 so tap targets stay apart.
|
|
3086
|
+
* AlertDialog already used these values; Sheet/Dialog footers and composed screens now share them.
|
|
3087
|
+
*/
|
|
3088
|
+
export declare const actionGroupRecipe: {
|
|
3089
|
+
readonly inlineGap: 12;
|
|
3090
|
+
readonly stackedGap: 8;
|
|
3091
|
+
};
|
|
3046
3092
|
export declare const sheetRecipe: {
|
|
3047
3093
|
readonly slots: readonly ["backdrop", "positioner", "content", "handle", "header", "title", "body", "footer", "close"];
|
|
3048
3094
|
readonly defaults: {
|
|
@@ -3107,7 +3153,7 @@ export declare const sheetRecipe: {
|
|
|
3107
3153
|
key: "textMuted";
|
|
3108
3154
|
alpha?: number;
|
|
3109
3155
|
}>;
|
|
3110
|
-
readonly visibleByDefault:
|
|
3156
|
+
readonly visibleByDefault: true;
|
|
3111
3157
|
readonly showWhen: "swipe-dismiss-enabled";
|
|
3112
3158
|
};
|
|
3113
3159
|
readonly header: {
|
|
@@ -3140,7 +3186,7 @@ export declare const sheetRecipe: {
|
|
|
3140
3186
|
alpha?: number;
|
|
3141
3187
|
}>;
|
|
3142
3188
|
readonly textVariant: "body";
|
|
3143
|
-
readonly gap:
|
|
3189
|
+
readonly gap: 8;
|
|
3144
3190
|
readonly paddingTop: 12;
|
|
3145
3191
|
};
|
|
3146
3192
|
readonly transition: {
|
|
@@ -3827,6 +3873,7 @@ export declare const bottomCtaRecipe: {
|
|
|
3827
3873
|
readonly paddingTop: 12;
|
|
3828
3874
|
readonly paddingBottom: 12;
|
|
3829
3875
|
readonly gap: 12;
|
|
3876
|
+
readonly contentMaxWidth: 720;
|
|
3830
3877
|
readonly background: Readonly<{
|
|
3831
3878
|
source: "theme";
|
|
3832
3879
|
key: "bg";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-recipes.d.ts","sourceRoot":"","sources":["../src/component-recipes.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,OAAO,EAUP,OAAO,
|
|
1
|
+
{"version":3,"file":"component-recipes.d.ts","sourceRoot":"","sources":["../src/component-recipes.ts"],"names":[],"mappings":"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"}
|