@hjmds/design-contracts 1.26.1 → 1.27.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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/number-field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"number-field.js","sourceRoot":"","sources":["../src/number-field.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ColorReference } from \"./color-references.js\";\nimport type { BehaviorContract } from \"./behaviors.js\";\nimport {\n fieldFrameContract,\n focusIndicatorContract,\n formSupportContract,\n} from \"./component-contracts.js\";\nimport { control, opacity, spacing, type TextVariant } from \"./foundations.js\";\nimport { semanticColors } from \"./semantic-colors.js\";\n\n/**\n * Shared by NumberField and Slider: both solve \"pick a number within a range.\"\n * Keeping min/max/step/value judgment in one place keeps the two components\n * from drifting into two different meanings of the same numeric domain.\n */\nexport type NumericRangeConfig = Readonly<{\n min: number;\n max: number;\n step?: number;\n}>;\n\nexport const numericRangeDefaults = {\n step: 1,\n} as const satisfies Readonly<{ step: number }>;\n\nexport function assertFiniteNumber(value: number, field: string): void {\n if (typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)) {\n throw new TypeError(`${field} must be a finite number`);\n }\n}\n\nexport function validateNumericRangeConfig(config: NumericRangeConfig): void {\n assertFiniteNumber(config.min, \"min\");\n assertFiniteNumber(config.max, \"max\");\n if (config.min >= config.max) {\n throw new RangeError(\"min must be less than max\");\n }\n const step = config.step ?? numericRangeDefaults.step;\n assertFiniteNumber(step, \"step\");\n if (step <= 0) {\n throw new RangeError(\"step must be greater than 0\");\n }\n if (step > config.max - config.min) {\n throw new RangeError(\"step must not exceed the min–max span\");\n }\n}\n\n/** Number of decimal digits a finite numeric boundary carries. */\nfunction decimalPrecision(value: number): number {\n const [coefficient = \"\", exponentText] = value.toString().toLowerCase().split(\"e\");\n const dotIndex = coefficient.indexOf(\".\");\n const fractionDigits = dotIndex === -1 ? 0 : coefficient.length - dotIndex - 1;\n const exponent = exponentText === undefined ? 0 : Number(exponentText);\n return Math.max(0, fractionDigits - exponent);\n}\n\n/**\n * A step grid is anchored at `min`, so its exact decimal precision comes from\n * both the origin and the increment. Looking only at `step` turns the valid\n * sequence 0.05, 0.15, 0.25… into 0.1, 0.2, 0.3… after the first operation.\n */\nfunction roundToStepGridPrecision(value: number, min: number, step: number): number {\n const decimals = Math.max(decimalPrecision(min), decimalPrecision(step));\n if (decimals === 0) return Math.round(value);\n const shift = (number: number, places: number): number => {\n const [coefficient = \"0\", exponentText] = number.toString().toLowerCase().split(\"e\");\n const exponent = exponentText === undefined ? 0 : Number(exponentText);\n return Number(`${coefficient}e${exponent + places}`);\n };\n return shift(Math.round(shift(value, decimals)), -decimals);\n}\n\nexport function clampToRange(value: number, config: NumericRangeConfig): number {\n validateNumericRangeConfig(config);\n assertFiniteNumber(value, \"value\");\n return Math.min(config.max, Math.max(config.min, value));\n}\n\n/** Snaps to the nearest step from `min`, then clamps into [min, max]. */\nexport function snapToStep(value: number, config: NumericRangeConfig): number {\n validateNumericRangeConfig(config);\n assertFiniteNumber(value, \"value\");\n const step = config.step ?? numericRangeDefaults.step;\n const steps = Math.round((value - config.min) / step);\n const snapped = roundToStepGridPrecision(config.min + steps * step, config.min, step);\n return clampToRange(snapped, config);\n}\n\n/** Move to the next valid grid boundary in the requested direction. */\nexport function stepNumericValue(\n value: number,\n config: NumericRangeConfig,\n direction: \"increment\" | \"decrement\",\n): number {\n const snapped = snapToStep(value, config);\n if (direction === \"increment\" && snapped > value) return snapped;\n if (direction === \"decrement\" && snapped < value) return snapped;\n const step = config.step ?? numericRangeDefaults.step;\n const delta = direction === \"increment\" ? step : -step;\n return snapToStep(value + delta, config);\n}\n\n/**\n * `null` means no value has been entered yet — distinct from any in-range\n * number, including `min`. Products decide whether empty is allowed to submit.\n */\nexport type NumberFieldValue = number | null;\n\n/**\n * Parses the renderer's editable text without guessing at locale, currency,\n * or unit formatting. Empty text is a first-class `null` value; `undefined`\n * means the draft is not a complete finite decimal number yet.\n *\n * Exponent notation is accepted because `String(number)` may produce it for\n * very small or large finite values. Renderers keep incomplete drafts such as\n * `-` or `1e` locally and only commit once this parser succeeds.\n */\nexport function parseNumberFieldInput(input: string): NumberFieldValue | undefined {\n const normalized = input.trim();\n if (normalized.length === 0) return null;\n if (!/^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/.test(normalized)) {\n return undefined;\n }\n const value = Number(normalized);\n return Number.isFinite(value) ? value : undefined;\n}\n\n/**\n * Turns an editable draft into a model value at blur/submit boundaries.\n * Direct input is clamped and snapped with the same range math used by the\n * steppers and Slider. Invalid/incomplete text remains `undefined`, allowing a\n * renderer to restore the last committed value without inventing an error.\n */\nexport function commitNumberFieldInput(\n input: string,\n config: NumericRangeConfig,\n): NumberFieldValue | undefined {\n validateNumericRangeConfig(config);\n const parsed = parseNumberFieldInput(input);\n if (parsed === undefined || parsed === null) return parsed;\n return snapToStep(parsed, config);\n}\n\nexport type NumberFieldDescriptor = Readonly<{\n value: NumberFieldValue;\n min: number;\n max: number;\n step?: number;\n}>;\n\nexport type ResolvedNumberFieldDescriptor = Omit<NumberFieldDescriptor, \"step\"> &\n Readonly<{ step: number }>;\n\nexport function validateNumberFieldDescriptor(descriptor: NumberFieldDescriptor): void {\n validateNumericRangeConfig(descriptor);\n if (descriptor.value !== null) {\n assertFiniteNumber(descriptor.value, \"value\");\n if (descriptor.value < descriptor.min || descriptor.value > descriptor.max) {\n throw new RangeError(\"NumberField value must be within min and max\");\n }\n }\n}\n\nexport function resolveNumberFieldDescriptor(\n descriptor: NumberFieldDescriptor,\n): ResolvedNumberFieldDescriptor {\n validateNumberFieldDescriptor(descriptor);\n return { ...descriptor, step: descriptor.step ?? numericRangeDefaults.step };\n}\n\nexport type NumberFieldStepperState = Readonly<{\n incrementDisabled: boolean;\n decrementDisabled: boolean;\n}>;\n\n/** Empty has no boundary yet, so neither stepper direction is disabled. */\nexport function resolveNumberFieldStepperState(\n descriptor: NumberFieldDescriptor,\n): NumberFieldStepperState {\n validateNumberFieldDescriptor(descriptor);\n if (descriptor.value === null) {\n return { incrementDisabled: false, decrementDisabled: false };\n }\n return {\n incrementDisabled: descriptor.value >= descriptor.max,\n decrementDisabled: descriptor.value <= descriptor.min,\n };\n}\n\n/** Resolve stepper availability from the visible draft, falling back safely. */\nexport function resolveNumberFieldInputStepperState(\n input: string,\n descriptor: NumberFieldDescriptor,\n): NumberFieldStepperState {\n validateNumberFieldDescriptor(descriptor);\n const parsed = parseNumberFieldInput(input);\n if (parsed === undefined) return resolveNumberFieldStepperState(descriptor);\n if (parsed === null) {\n return resolveNumberFieldStepperState({ ...descriptor, value: null });\n }\n return resolveNumberFieldStepperState({\n ...descriptor,\n value: clampToRange(parsed, descriptor),\n });\n}\n\n/** Stepping from empty lands on the boundary you are moving toward. */\nexport function stepNumberFieldValue(\n descriptor: NumberFieldDescriptor,\n direction: \"increment\" | \"decrement\",\n): number {\n validateNumberFieldDescriptor(descriptor);\n if (descriptor.value === null) {\n return direction === \"increment\" ? descriptor.min : descriptor.max;\n }\n return stepNumericValue(descriptor.value, descriptor, direction);\n}\n\n/**\n * Resolves a step action from the editable draft without first snapping and\n * then stepping a second time. Off-grid drafts move to the next valid boundary\n * in the requested direction; invalid drafts fall back to the committed model.\n */\nexport function stepNumberFieldInput(\n input: string,\n descriptor: NumberFieldDescriptor,\n direction: \"increment\" | \"decrement\",\n): number {\n validateNumberFieldDescriptor(descriptor);\n const parsed = parseNumberFieldInput(input);\n if (parsed === undefined) return stepNumberFieldValue(descriptor, direction);\n if (parsed === null) {\n return stepNumberFieldValue({ ...descriptor, value: null }, direction);\n }\n return stepNumericValue(parsed, descriptor, direction);\n}\n\nexport type NumberFieldSize = \"medium\" | \"large\";\n\n/**\n * Reuses the Field frame (`fieldFrameContract`) and form support copy\n * (`formSupportContract`) verbatim — a second field frame would drift from\n * Field the first time either one's border or height changes.\n */\nexport const numberFieldRecipe = {\n slots: [\n \"root\",\n \"frame\",\n \"input\",\n \"decrement\",\n \"increment\",\n \"description\",\n \"error\",\n ] as const,\n defaults: { size: \"medium\" },\n frame: fieldFrameContract,\n support: formSupportContract,\n sizes: {\n medium: {\n minHeight: fieldFrameContract.minHeight,\n paddingHorizontal: fieldFrameContract.paddingHorizontal,\n textVariant: \"body\",\n stepperDiameter: control.minTouchTarget,\n },\n large: {\n minHeight: control.buttonHeight.large,\n paddingHorizontal: spacing.lg,\n textVariant: \"bodyLarge\",\n stepperDiameter: control.minTouchTarget,\n },\n },\n value: {\n color: semanticColors.content.body,\n numericVariant: \"tabular\",\n },\n stepper: {\n color: semanticColors.content.secondary,\n minTarget: control.minTouchTarget,\n },\n states: {\n focus: focusIndicatorContract,\n invalidBorder: semanticColors.border.danger,\n disabledOpacity: opacity.disabled,\n },\n} as const satisfies {\n slots: readonly [\n \"root\",\n \"frame\",\n \"input\",\n \"decrement\",\n \"increment\",\n \"description\",\n \"error\",\n ];\n defaults: { size: NumberFieldSize };\n frame: typeof fieldFrameContract;\n support: typeof formSupportContract;\n sizes: Record<\n NumberFieldSize,\n {\n minHeight: number;\n paddingHorizontal: number;\n textVariant: TextVariant;\n stepperDiameter: number;\n }\n >;\n value: { color: ColorReference; numericVariant: \"tabular\" };\n stepper: { color: ColorReference; minTarget: number };\n states: {\n focus: typeof focusIndicatorContract;\n invalidBorder: ColorReference;\n disabledOpacity: number;\n };\n};\n\n/**\n * Held-repeat on the stepper buttons is deliberately not part of this\n * contract: no product using NumberField has measured demand for press-and-\n * hold, and adding it now would mean guessing at a repeat-rate/acceleration\n * curve nobody has validated. A single activation per press only.\n */\nexport const numberFieldBehavior = {\n controlled: [\"value\", \"defaultValue\", \"onValueChange\"],\n stateAxes: {\n availability: [\"enabled\", \"disabled\", \"readOnly\"],\n value: [\"empty\", \"filled\"],\n validation: [\"valid\", \"invalid\"],\n },\n web: {\n roles: [\"spinbutton\"],\n keyboard: [\"Tab\", \"ArrowUp\", \"ArrowDown\"],\n focus: \"native\",\n },\n native: {\n roles: [\"text\", \"button\"],\n states: [\"disabled\"],\n actions: [\"focus\", \"setText\", \"increment\", \"decrement\"],\n },\n scenarios: [\n \"value-and-range-are-independent-controlled-inputs\",\n \"stepper-buttons-disable-at-min-and-max\",\n \"empty-disables-neither-stepper-direction\",\n \"keyboard-arrow-up-down-step-like-the-stepper-buttons\",\n \"invalid-is-a-numberfield-only-axis-independent-of-range\",\n \"held-repeat-is-not-part-of-the-contract\",\n ],\n} as const satisfies BehaviorContract;\n"]}
|
|
1
|
+
{"version":3,"file":"number-field.js","sourceRoot":"","sources":["../src/number-field.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ColorReference } from \"./color-references.js\";\nimport type { BehaviorContract } from \"./behaviors.js\";\nimport {\n fieldFrameContract,\n focusIndicatorContract,\n formSupportContract,\n} from \"./component-contracts.js\";\nimport { control, opacity, spacing, type TextVariant } from \"./foundations.js\";\nimport { semanticColors } from \"./semantic-colors.js\";\n\n/**\n * Shared by NumberField and Slider: both solve \"pick a number within a range.\"\n * Keeping min/max/step/value judgment in one place keeps the two components\n * from drifting into two different meanings of the same numeric domain.\n */\nexport type NumericRangeConfig = Readonly<{\n min: number;\n max: number;\n step?: number;\n}>;\n\nexport const numericRangeDefaults = {\n step: 1,\n} as const satisfies Readonly<{ step: number }>;\n\nexport function assertFiniteNumber(value: number, field: string): void {\n if (typeof value !== \"number\" || Number.isNaN(value) || !Number.isFinite(value)) {\n throw new TypeError(`${field} must be a finite number`);\n }\n}\n\nexport function validateNumericRangeConfig(config: NumericRangeConfig): void {\n assertFiniteNumber(config.min, \"min\");\n assertFiniteNumber(config.max, \"max\");\n if (config.min >= config.max) {\n throw new RangeError(\"min must be less than max\");\n }\n const step = config.step ?? numericRangeDefaults.step;\n assertFiniteNumber(step, \"step\");\n if (step <= 0) {\n throw new RangeError(\"step must be greater than 0\");\n }\n if (step > config.max - config.min) {\n throw new RangeError(\"step must not exceed the min–max span\");\n }\n}\n\n/** Number of decimal digits a finite numeric boundary carries. */\nfunction decimalPrecision(value: number): number {\n const [coefficient = \"\", exponentText] = value.toString().toLowerCase().split(\"e\");\n const dotIndex = coefficient.indexOf(\".\");\n const fractionDigits = dotIndex === -1 ? 0 : coefficient.length - dotIndex - 1;\n const exponent = exponentText === undefined ? 0 : Number(exponentText);\n return Math.max(0, fractionDigits - exponent);\n}\n\n/**\n * A step grid is anchored at `min`, so its exact decimal precision comes from\n * both the origin and the increment. Looking only at `step` turns the valid\n * sequence 0.05, 0.15, 0.25… into 0.1, 0.2, 0.3… after the first operation.\n */\nfunction roundToStepGridPrecision(value: number, min: number, step: number): number {\n const decimals = Math.max(decimalPrecision(min), decimalPrecision(step));\n if (decimals === 0) return Math.round(value);\n const shift = (number: number, places: number): number => {\n const [coefficient = \"0\", exponentText] = number.toString().toLowerCase().split(\"e\");\n const exponent = exponentText === undefined ? 0 : Number(exponentText);\n return Number(`${coefficient}e${exponent + places}`);\n };\n return shift(Math.round(shift(value, decimals)), -decimals);\n}\n\nexport function clampToRange(value: number, config: NumericRangeConfig): number {\n validateNumericRangeConfig(config);\n assertFiniteNumber(value, \"value\");\n return Math.min(config.max, Math.max(config.min, value));\n}\n\n/** Snaps to the nearest step from `min`, then clamps into [min, max]. */\nexport function snapToStep(value: number, config: NumericRangeConfig): number {\n validateNumericRangeConfig(config);\n assertFiniteNumber(value, \"value\");\n const step = config.step ?? numericRangeDefaults.step;\n const steps = Math.round((value - config.min) / step);\n const snapped = roundToStepGridPrecision(config.min + steps * step, config.min, step);\n return clampToRange(snapped, config);\n}\n\n/** Move to the next valid grid boundary in the requested direction. */\nexport function stepNumericValue(\n value: number,\n config: NumericRangeConfig,\n direction: \"increment\" | \"decrement\",\n): number {\n const snapped = snapToStep(value, config);\n if (direction === \"increment\" && snapped > value) return snapped;\n if (direction === \"decrement\" && snapped < value) return snapped;\n const step = config.step ?? numericRangeDefaults.step;\n const delta = direction === \"increment\" ? step : -step;\n return snapToStep(value + delta, config);\n}\n\n/**\n * `null` means no value has been entered yet — distinct from any in-range\n * number, including `min`. Products decide whether empty is allowed to submit.\n */\nexport type NumberFieldValue = number | null;\n\n/**\n * Parses the renderer's editable text without guessing at locale, currency,\n * or unit formatting. Empty text is a first-class `null` value; `undefined`\n * means the draft is not a complete finite decimal number yet.\n *\n * Exponent notation is accepted because `String(number)` may produce it for\n * very small or large finite values. Renderers keep incomplete drafts such as\n * `-` or `1e` locally and only commit once this parser succeeds.\n */\nexport function parseNumberFieldInput(input: string): NumberFieldValue | undefined {\n const normalized = input.trim();\n if (normalized.length === 0) return null;\n if (!/^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?$/.test(normalized)) {\n return undefined;\n }\n const value = Number(normalized);\n return Number.isFinite(value) ? value : undefined;\n}\n\n/**\n * Turns an editable draft into a model value at blur/submit boundaries.\n * Direct input is clamped and snapped with the same range math used by the\n * steppers and Slider. Invalid/incomplete text remains `undefined`, allowing a\n * renderer to restore the last committed value without inventing an error.\n */\nexport function commitNumberFieldInput(\n input: string,\n config: NumericRangeConfig,\n): NumberFieldValue | undefined {\n validateNumericRangeConfig(config);\n const parsed = parseNumberFieldInput(input);\n if (parsed === undefined || parsed === null) return parsed;\n return snapToStep(parsed, config);\n}\n\nexport type NumberFieldDescriptor = Readonly<{\n value: NumberFieldValue;\n min: number;\n max: number;\n step?: number;\n}>;\n\nexport type ResolvedNumberFieldDescriptor = Omit<NumberFieldDescriptor, \"step\"> &\n Readonly<{ step: number }>;\n\nexport function validateNumberFieldDescriptor(descriptor: NumberFieldDescriptor): void {\n validateNumericRangeConfig(descriptor);\n if (descriptor.value !== null) {\n assertFiniteNumber(descriptor.value, \"value\");\n if (descriptor.value < descriptor.min || descriptor.value > descriptor.max) {\n throw new RangeError(\"NumberField value must be within min and max\");\n }\n }\n}\n\nexport function resolveNumberFieldDescriptor(\n descriptor: NumberFieldDescriptor,\n): ResolvedNumberFieldDescriptor {\n validateNumberFieldDescriptor(descriptor);\n return { ...descriptor, step: descriptor.step ?? numericRangeDefaults.step };\n}\n\nexport type NumberFieldStepperState = Readonly<{\n incrementDisabled: boolean;\n decrementDisabled: boolean;\n}>;\n\n/** Empty has no boundary yet, so neither stepper direction is disabled. */\nexport function resolveNumberFieldStepperState(\n descriptor: NumberFieldDescriptor,\n): NumberFieldStepperState {\n validateNumberFieldDescriptor(descriptor);\n if (descriptor.value === null) {\n return { incrementDisabled: false, decrementDisabled: false };\n }\n return {\n incrementDisabled: descriptor.value >= descriptor.max,\n decrementDisabled: descriptor.value <= descriptor.min,\n };\n}\n\n/** Resolve stepper availability from the visible draft, falling back safely. */\nexport function resolveNumberFieldInputStepperState(\n input: string,\n descriptor: NumberFieldDescriptor,\n): NumberFieldStepperState {\n validateNumberFieldDescriptor(descriptor);\n const parsed = parseNumberFieldInput(input);\n if (parsed === undefined) return resolveNumberFieldStepperState(descriptor);\n if (parsed === null) {\n return resolveNumberFieldStepperState({ ...descriptor, value: null });\n }\n return resolveNumberFieldStepperState({\n ...descriptor,\n value: clampToRange(parsed, descriptor),\n });\n}\n\n/** Stepping from empty lands on the boundary you are moving toward. */\nexport function stepNumberFieldValue(\n descriptor: NumberFieldDescriptor,\n direction: \"increment\" | \"decrement\",\n): number {\n validateNumberFieldDescriptor(descriptor);\n if (descriptor.value === null) {\n return direction === \"increment\" ? descriptor.min : descriptor.max;\n }\n return stepNumericValue(descriptor.value, descriptor, direction);\n}\n\n/**\n * Resolves a step action from the editable draft without first snapping and\n * then stepping a second time. Off-grid drafts move to the next valid boundary\n * in the requested direction; invalid drafts fall back to the committed model.\n */\nexport function stepNumberFieldInput(\n input: string,\n descriptor: NumberFieldDescriptor,\n direction: \"increment\" | \"decrement\",\n): number {\n validateNumberFieldDescriptor(descriptor);\n const parsed = parseNumberFieldInput(input);\n if (parsed === undefined) return stepNumberFieldValue(descriptor, direction);\n if (parsed === null) {\n return stepNumberFieldValue({ ...descriptor, value: null }, direction);\n }\n return stepNumericValue(parsed, descriptor, direction);\n}\n\nexport type NumberFieldSize = \"medium\" | \"large\";\n\n/**\n * Reuses the Field frame (`fieldFrameContract`) and form support copy\n * (`formSupportContract`) verbatim — a second field frame would drift from\n * Field the first time either one's border or height changes.\n */\nexport const numberFieldRecipe = {\n slots: [\n \"root\",\n \"frame\",\n \"input\",\n \"decrement\",\n \"increment\",\n \"description\",\n \"error\",\n ] as const,\n defaults: { size: \"medium\" },\n frame: fieldFrameContract,\n support: formSupportContract,\n sizes: {\n // The value is centered between the steppers, so this inset only matters when the field is narrow; the field\n // frame's 16 consumed the whole value slot inside a 128px DurationField part (2026-10-17 review).\n medium: {\n minHeight: fieldFrameContract.minHeight,\n paddingHorizontal: spacing.xxs,\n textVariant: \"body\",\n stepperDiameter: control.minTouchTarget,\n },\n large: {\n minHeight: control.buttonHeight.large,\n paddingHorizontal: spacing.xs,\n textVariant: \"bodyLarge\",\n stepperDiameter: control.minTouchTarget,\n },\n },\n value: {\n color: semanticColors.content.body,\n numericVariant: \"tabular\",\n },\n stepper: {\n color: semanticColors.content.secondary,\n minTarget: control.minTouchTarget,\n },\n states: {\n focus: focusIndicatorContract,\n invalidBorder: semanticColors.border.danger,\n disabledOpacity: opacity.disabled,\n },\n} as const satisfies {\n slots: readonly [\n \"root\",\n \"frame\",\n \"input\",\n \"decrement\",\n \"increment\",\n \"description\",\n \"error\",\n ];\n defaults: { size: NumberFieldSize };\n frame: typeof fieldFrameContract;\n support: typeof formSupportContract;\n sizes: Record<\n NumberFieldSize,\n {\n minHeight: number;\n paddingHorizontal: number;\n textVariant: TextVariant;\n stepperDiameter: number;\n }\n >;\n value: { color: ColorReference; numericVariant: \"tabular\" };\n stepper: { color: ColorReference; minTarget: number };\n states: {\n focus: typeof focusIndicatorContract;\n invalidBorder: ColorReference;\n disabledOpacity: number;\n };\n};\n\n/**\n * Held-repeat on the stepper buttons is deliberately not part of this\n * contract: no product using NumberField has measured demand for press-and-\n * hold, and adding it now would mean guessing at a repeat-rate/acceleration\n * curve nobody has validated. A single activation per press only.\n */\nexport const numberFieldBehavior = {\n controlled: [\"value\", \"defaultValue\", \"onValueChange\"],\n stateAxes: {\n availability: [\"enabled\", \"disabled\", \"readOnly\"],\n value: [\"empty\", \"filled\"],\n validation: [\"valid\", \"invalid\"],\n },\n web: {\n roles: [\"spinbutton\"],\n keyboard: [\"Tab\", \"ArrowUp\", \"ArrowDown\"],\n focus: \"native\",\n },\n native: {\n roles: [\"text\", \"button\"],\n states: [\"disabled\"],\n actions: [\"focus\", \"setText\", \"increment\", \"decrement\"],\n },\n scenarios: [\n \"value-and-range-are-independent-controlled-inputs\",\n \"stepper-buttons-disable-at-min-and-max\",\n \"empty-disables-neither-stepper-direction\",\n \"keyboard-arrow-up-down-step-like-the-stepper-buttons\",\n \"invalid-is-a-numberfield-only-axis-independent-of-range\",\n \"held-repeat-is-not-part-of-the-contract\",\n ],\n} as const satisfies BehaviorContract;\n"]}
|
package/dist/qr-code-recipe.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qr-code-recipe.d.ts","sourceRoot":"","sources":["../src/qr-code-recipe.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"qr-code-recipe.d.ts","sourceRoot":"","sources":["../src/qr-code-recipe.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;CAA6G,CAAC"}
|
package/dist/qr-code-recipe.js
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// The alternative action sits centred under the code; without a root layout it ran inline after the svg and
|
|
2
|
+
// landed on the code's baseline corner (2026-10-17 review E11). fallbackGap is spacing.sm.
|
|
3
|
+
export const qrCodeRecipe = { quietZone: 4, minModuleSize: 2, foreground: "#000000", background: "#ffffff", fallbackGap: 12 };
|
|
2
4
|
//# sourceMappingURL=qr-code-recipe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qr-code-recipe.js","sourceRoot":"","sources":["../src/qr-code-recipe.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAW,CAAC","sourcesContent":["
|
|
1
|
+
{"version":3,"file":"qr-code-recipe.js","sourceRoot":"","sources":["../src/qr-code-recipe.ts"],"names":[],"mappings":"AAAA,4GAA4G;AAC5G,2FAA2F;AAC3F,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAW,CAAC","sourcesContent":["// The alternative action sits centred under the code; without a root layout it ran inline after the svg and\n// landed on the code's baseline corner (2026-10-17 review E11). fallbackGap is spacing.sm.\nexport const qrCodeRecipe = { quietZone: 4, minModuleSize: 2, foreground: \"#000000\", background: \"#ffffff\", fallbackGap: 12 } as const;\n"]}
|
package/dist/recipes.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { buttonRecipe, fieldRecipe, surfaceDefaults, surfaceGeometry, surfaceRecipe, type ButtonSize, type ButtonTone, type FieldShape, type FieldVariant, type SurfacePadding, type SurfaceRadius, type SurfaceTone, } from "./base-recipes.js";
|
|
2
|
-
export { accordionRecipe, alertDialogRecipe, avatarRecipe, badgeRecipe, bottomNavigationRecipe, bottomCtaRecipe, chipRecipe, comboboxRecipe, counterBadgeRecipe, dialogRecipe, dividerRecipe, emptyStateRecipe, formatCounterBadgeCount, iconButtonRecipe, iconRecipe, linkRecipe, listRecipe, listRowRecipe, loadMoreRecipe, menuRecipe, noticeRecipe, progressRecipe, searchFieldRecipe, selectRecipe, selectionGroupRecipe, sectionRecipe, segmentedControlRecipe, selectionControlRecipe, sheetRecipe, skeletonRecipe, spinnerRecipe, stackRecipe, statisticRecipe, switchRecipe, tabsRecipe, textRecipe, toastRecipe, tooltipRecipe, topBarRecipe, type AccordionDensity, type AlertDialogTone, type AvatarShape, type AvatarSize, type BadgeSize, type BadgeTone, type BadgeVariant, type BottomNavigationDensity, type BottomNavigationDistribution, type BottomNavigationPresentation, type ChipSize, type SelectDensity, type SelectSize, type CounterBadgeSize, type CounterBadgeTone, type CounterBadgeVariant, type DialogSize, type IconButtonShape, type IconButtonSize, type IconTone, type IconWeight, type LinkTone, type LinkVariant, type LoadMoreDensity, type ListRowDensity, type MenuDensity, type MenuItemTone, type NoticeTone, type ProgressShape, type ProgressSize, type ProgressTone, type SearchFieldSize, type SegmentedControlSize, type SelectionControlKind, type SelectionControlPresentation, type SelectionControlSize, type SelectionGroupOrientation, type SelectionGroupPresentation, type SpinnerSize, type SpinnerTone, type StackAlign, type StackAxis, type StackGap, type StackJustify, type StatisticDensity, type StatisticPresentation, type SwitchSize, type TabSize, type TabsLayout, type TabsOverflow, type TextEmphasis, type TextTone, type ToastPlacement, type ToastTone, type ToastToneMark, } from "./component-recipes.js";
|
|
2
|
+
export { accordionRecipe, alertDialogRecipe, avatarRecipe, resolveAvatarInitialsTextVariant, resolveTextDefaultWeight, badgeRecipe, bottomNavigationRecipe, bottomCtaRecipe, chipRecipe, comboboxRecipe, counterBadgeRecipe, dialogRecipe, dividerRecipe, emptyStateRecipe, formatCounterBadgeCount, iconButtonRecipe, iconRecipe, linkRecipe, listRecipe, listRowRecipe, loadMoreRecipe, menuRecipe, noticeRecipe, progressRecipe, searchFieldRecipe, selectRecipe, selectionGroupRecipe, sectionRecipe, segmentedControlRecipe, selectionControlRecipe, sheetRecipe, skeletonRecipe, spinnerRecipe, stackRecipe, statisticRecipe, switchRecipe, tabsRecipe, textRecipe, toastRecipe, tooltipRecipe, topBarRecipe, type AccordionDensity, type AlertDialogTone, type AvatarShape, type AvatarSize, type BadgeSize, type BadgeTone, type BadgeVariant, type BottomNavigationDensity, type BottomNavigationDistribution, type BottomNavigationPresentation, type ChipSize, type SelectDensity, type SelectSize, type CounterBadgeSize, type CounterBadgeTone, type CounterBadgeVariant, type DialogSize, type IconButtonShape, type IconButtonSize, type IconTone, type IconWeight, type LinkTone, type LinkVariant, type LoadMoreDensity, type ListRowDensity, type MenuDensity, type MenuItemTone, type NoticeTone, type ProgressShape, type ProgressSize, type ProgressTone, type SearchFieldSize, type SegmentedControlSize, type SelectionControlKind, type SelectionControlPresentation, type SelectionControlSize, type SelectionGroupOrientation, type SelectionGroupPresentation, type SpinnerSize, type SpinnerTone, type StackAlign, type StackAxis, type StackGap, type StackJustify, type StatisticDensity, type StatisticPresentation, type SwitchSize, type TabSize, type TabsLayout, type TabsOverflow, type TextEmphasis, type TextTone, type ToastPlacement, type ToastTone, type ToastToneMark, } from "./component-recipes.js";
|
|
3
3
|
export { breadcrumbRecipe } from "./breadcrumb.js";
|
|
4
4
|
export { aspectRatioRecipe } from "./aspect-ratio.js";
|
|
5
5
|
export { containerRecipe } from "./container.js";
|
package/dist/recipes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recipes.d.ts","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"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"}
|
package/dist/recipes.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { buttonRecipe, fieldRecipe, surfaceDefaults, surfaceGeometry, surfaceRecipe, } from "./base-recipes.js";
|
|
2
|
-
export { accordionRecipe, alertDialogRecipe, avatarRecipe, badgeRecipe, bottomNavigationRecipe, bottomCtaRecipe, chipRecipe, comboboxRecipe, counterBadgeRecipe, dialogRecipe, dividerRecipe, emptyStateRecipe, formatCounterBadgeCount, iconButtonRecipe, iconRecipe, linkRecipe, listRecipe, listRowRecipe, loadMoreRecipe, menuRecipe, noticeRecipe, progressRecipe, searchFieldRecipe, selectRecipe, selectionGroupRecipe, sectionRecipe, segmentedControlRecipe, selectionControlRecipe, sheetRecipe, skeletonRecipe, spinnerRecipe, stackRecipe, statisticRecipe, switchRecipe, tabsRecipe, textRecipe, toastRecipe, tooltipRecipe, topBarRecipe, } from "./component-recipes.js";
|
|
2
|
+
export { accordionRecipe, alertDialogRecipe, avatarRecipe, resolveAvatarInitialsTextVariant, resolveTextDefaultWeight, badgeRecipe, bottomNavigationRecipe, bottomCtaRecipe, chipRecipe, comboboxRecipe, counterBadgeRecipe, dialogRecipe, dividerRecipe, emptyStateRecipe, formatCounterBadgeCount, iconButtonRecipe, iconRecipe, linkRecipe, listRecipe, listRowRecipe, loadMoreRecipe, menuRecipe, noticeRecipe, progressRecipe, searchFieldRecipe, selectRecipe, selectionGroupRecipe, sectionRecipe, segmentedControlRecipe, selectionControlRecipe, sheetRecipe, skeletonRecipe, spinnerRecipe, stackRecipe, statisticRecipe, switchRecipe, tabsRecipe, textRecipe, toastRecipe, tooltipRecipe, topBarRecipe, } from "./component-recipes.js";
|
|
3
3
|
/*
|
|
4
4
|
Batch 2 저작 모듈의 시각 recipe.
|
|
5
5
|
|
package/dist/recipes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recipes.js","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"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","sourcesContent":["export {\n buttonRecipe,\n fieldRecipe,\n surfaceDefaults,\n surfaceGeometry,\n surfaceRecipe,\n type ButtonSize,\n type ButtonTone,\n type FieldShape,\n type FieldVariant,\n type SurfacePadding,\n type SurfaceRadius,\n type SurfaceTone,\n} from \"./base-recipes.js\";\n\nexport {\n accordionRecipe,\n alertDialogRecipe,\n avatarRecipe,\n badgeRecipe,\n bottomNavigationRecipe,\n bottomCtaRecipe,\n chipRecipe,\n comboboxRecipe,\n counterBadgeRecipe,\n dialogRecipe,\n dividerRecipe,\n emptyStateRecipe,\n formatCounterBadgeCount,\n iconButtonRecipe,\n iconRecipe,\n linkRecipe,\n listRecipe,\n listRowRecipe,\n loadMoreRecipe,\n menuRecipe,\n noticeRecipe,\n progressRecipe,\n searchFieldRecipe,\n selectRecipe,\n selectionGroupRecipe,\n sectionRecipe,\n segmentedControlRecipe,\n selectionControlRecipe,\n sheetRecipe,\n skeletonRecipe,\n spinnerRecipe,\n stackRecipe,\n statisticRecipe,\n switchRecipe,\n tabsRecipe,\n textRecipe,\n toastRecipe,\n tooltipRecipe,\n topBarRecipe,\n type AccordionDensity,\n type AlertDialogTone,\n type AvatarShape,\n type AvatarSize,\n type BadgeSize,\n type BadgeTone,\n type BadgeVariant,\n type BottomNavigationDensity,\n type BottomNavigationDistribution,\n type BottomNavigationPresentation,\n type ChipSize,\n type SelectDensity,\n type SelectSize,\n type CounterBadgeSize,\n type CounterBadgeTone,\n type CounterBadgeVariant,\n type DialogSize,\n type IconButtonShape,\n type IconButtonSize,\n type IconTone,\n type IconWeight,\n type LinkTone,\n type LinkVariant,\n type LoadMoreDensity,\n type ListRowDensity,\n type MenuDensity,\n type MenuItemTone,\n type NoticeTone,\n type ProgressShape,\n type ProgressSize,\n type ProgressTone,\n type SearchFieldSize,\n type SegmentedControlSize,\n type SelectionControlKind,\n type SelectionControlPresentation,\n type SelectionControlSize,\n type SelectionGroupOrientation,\n type SelectionGroupPresentation,\n type SpinnerSize,\n type SpinnerTone,\n type StackAlign,\n type StackAxis,\n type StackGap,\n type StackJustify,\n type StatisticDensity,\n type StatisticPresentation,\n type SwitchSize,\n type TabSize,\n type TabsLayout,\n type TabsOverflow,\n type TextEmphasis,\n type TextTone,\n type ToastPlacement,\n type ToastTone,\n type ToastToneMark,\n} from \"./component-recipes.js\";\n\n/*\n Batch 2 저작 모듈의 시각 recipe.\n\n 각 컴포넌트의 계약·recipe·행동을 한 모듈에 자급자족으로 담고, 여기서는 **경로만**\n 모은다(`docs/authoring-brief.md`). 여러 저작자가 병렬로 작업할 때 공유 레지스트리를\n 각자 고치면 서로의 변경을 덮어쓰므로, 배선은 리드가 한 번에 한다.\n\n recipe 본문을 `component-recipes.ts`로 옮기지 않는 이유: 그 파일은 이미 1,500줄이 넘고,\n 계약(타입·validator·resolver)과 recipe가 **같은 컴포넌트를 두 파일로 갈라** 놓으면\n 둘이 어긋날 자리가 생긴다. 한 컴포넌트는 한 모듈에 둔다.\n*/\nexport { breadcrumbRecipe } from \"./breadcrumb.js\";\nexport { aspectRatioRecipe } from \"./aspect-ratio.js\";\nexport { containerRecipe } from \"./container.js\";\nexport { cardRecipe, type CardHeadingLevel } from \"./card.js\";\nexport { calendarRecipe } from \"./calendar.js\";\nexport { carouselRecipe } from \"./carousel.js\";\nexport { commandPaletteRecipe } from \"./command-palette.js\";\nexport { dataTableRecipe } from \"./data-table.js\";\nexport { chartRecipe } from \"./chart.js\";\nexport { transferListRecipe } from \"./transfer-list.js\";\n// floatingActionButtonRecipe는 여기서 재수출하지 않는다. 이 모듈이 buttonRecipe를\n// 정의하는데 floating-action-button.ts가 그것을 import하므로, 여기에 `export ... from`을\n// 두면 순환이 된다 — ESM은 재수출을 본문보다 먼저 평가해서 buttonRecipe가 아직\n// undefined인 채로 그 모듈이 실행된다. catalog.ts가 해당 모듈에서 직접 가져간다.\nexport { tourRecipe } from \"./tour.js\";\nexport { layoutRecipe } from \"./layout.js\";\nexport { otpFieldRecipe } from \"./otp-field.js\";\nexport { passwordFieldRecipe } from \"./password-field.js\";\nexport { splitterRecipe } from \"./splitter.js\";\nexport { datePickerRecipe } from \"./date-picker.js\";\nexport { descriptionListRecipe } from \"./description-list.js\";\nexport { filePickerRecipe } from \"./file-picker.js\";\nexport { formRecipe } from \"./form.js\";\nexport { imageRecipe } from \"./image.js\";\nexport { numberFieldRecipe } from \"./number-field.js\";\nexport { paginationRecipe } from \"./pagination.js\";\nexport { popoverRecipe } from \"./popover.js\";\nexport { resultRecipe } from \"./result.js\";\nexport { sliderRecipe } from \"./slider.js\";\nexport { stepsRecipe } from \"./steps.js\";\nexport { tagRecipe } from \"./tag.js\";\nexport { sidePanelRecipe } from \"./side-panel.js\";\nexport { timelineRecipe } from \"./timeline.js\";\nexport { treeRecipe } from \"./tree.js\";\nexport { uploadItemRecipe } from \"./upload-item.js\";\nexport { visuallyHiddenRecipe } from \"./visually-hidden.js\";\n\nexport { anchorRecipe } from \"./anchor.js\";\nexport { agreementRecipe } from \"./agreement.js\";\nexport { topRecipe } from \"./top.js\";\nexport { authProviderButtonRecipe } from \"./provider-button.js\";\nexport { authScreenRecipe } from \"./auth-screen.js\";\nexport { headingRecipe } from \"./heading.js\";\nexport { toggleGroupRecipe } from \"./toggle-group.js\";\nexport { tagsInputRecipe } from \"./tags-input.js\";\nexport { skipNavRecipe } from \"./skip-nav.js\";\nexport { bottomInfoRecipe } from \"./bottom-info.js\";\nexport { sidebarRecipe } from \"./sidebar.js\";\nexport { textFormatRecipe } from \"./text-formats.js\";\nexport { collapsibleRecipe } from \"./collapsible.js\";\nexport { assetRecipe } from \"./asset.js\";\nexport { menubarRecipe } from \"./menubar.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"recipes.js","sourceRoot":"","sources":["../src/recipes.ts"],"names":[],"mappings":"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","sourcesContent":["export {\n buttonRecipe,\n fieldRecipe,\n surfaceDefaults,\n surfaceGeometry,\n surfaceRecipe,\n type ButtonSize,\n type ButtonTone,\n type FieldShape,\n type FieldVariant,\n type SurfacePadding,\n type SurfaceRadius,\n type SurfaceTone,\n} from \"./base-recipes.js\";\n\nexport {\n accordionRecipe,\n alertDialogRecipe,\n avatarRecipe,\n resolveAvatarInitialsTextVariant,\n resolveTextDefaultWeight,\n badgeRecipe,\n bottomNavigationRecipe,\n bottomCtaRecipe,\n chipRecipe,\n comboboxRecipe,\n counterBadgeRecipe,\n dialogRecipe,\n dividerRecipe,\n emptyStateRecipe,\n formatCounterBadgeCount,\n iconButtonRecipe,\n iconRecipe,\n linkRecipe,\n listRecipe,\n listRowRecipe,\n loadMoreRecipe,\n menuRecipe,\n noticeRecipe,\n progressRecipe,\n searchFieldRecipe,\n selectRecipe,\n selectionGroupRecipe,\n sectionRecipe,\n segmentedControlRecipe,\n selectionControlRecipe,\n sheetRecipe,\n skeletonRecipe,\n spinnerRecipe,\n stackRecipe,\n statisticRecipe,\n switchRecipe,\n tabsRecipe,\n textRecipe,\n toastRecipe,\n tooltipRecipe,\n topBarRecipe,\n type AccordionDensity,\n type AlertDialogTone,\n type AvatarShape,\n type AvatarSize,\n type BadgeSize,\n type BadgeTone,\n type BadgeVariant,\n type BottomNavigationDensity,\n type BottomNavigationDistribution,\n type BottomNavigationPresentation,\n type ChipSize,\n type SelectDensity,\n type SelectSize,\n type CounterBadgeSize,\n type CounterBadgeTone,\n type CounterBadgeVariant,\n type DialogSize,\n type IconButtonShape,\n type IconButtonSize,\n type IconTone,\n type IconWeight,\n type LinkTone,\n type LinkVariant,\n type LoadMoreDensity,\n type ListRowDensity,\n type MenuDensity,\n type MenuItemTone,\n type NoticeTone,\n type ProgressShape,\n type ProgressSize,\n type ProgressTone,\n type SearchFieldSize,\n type SegmentedControlSize,\n type SelectionControlKind,\n type SelectionControlPresentation,\n type SelectionControlSize,\n type SelectionGroupOrientation,\n type SelectionGroupPresentation,\n type SpinnerSize,\n type SpinnerTone,\n type StackAlign,\n type StackAxis,\n type StackGap,\n type StackJustify,\n type StatisticDensity,\n type StatisticPresentation,\n type SwitchSize,\n type TabSize,\n type TabsLayout,\n type TabsOverflow,\n type TextEmphasis,\n type TextTone,\n type ToastPlacement,\n type ToastTone,\n type ToastToneMark,\n} from \"./component-recipes.js\";\n\n/*\n Batch 2 저작 모듈의 시각 recipe.\n\n 각 컴포넌트의 계약·recipe·행동을 한 모듈에 자급자족으로 담고, 여기서는 **경로만**\n 모은다(`docs/authoring-brief.md`). 여러 저작자가 병렬로 작업할 때 공유 레지스트리를\n 각자 고치면 서로의 변경을 덮어쓰므로, 배선은 리드가 한 번에 한다.\n\n recipe 본문을 `component-recipes.ts`로 옮기지 않는 이유: 그 파일은 이미 1,500줄이 넘고,\n 계약(타입·validator·resolver)과 recipe가 **같은 컴포넌트를 두 파일로 갈라** 놓으면\n 둘이 어긋날 자리가 생긴다. 한 컴포넌트는 한 모듈에 둔다.\n*/\nexport { breadcrumbRecipe } from \"./breadcrumb.js\";\nexport { aspectRatioRecipe } from \"./aspect-ratio.js\";\nexport { containerRecipe } from \"./container.js\";\nexport { cardRecipe, type CardHeadingLevel } from \"./card.js\";\nexport { calendarRecipe } from \"./calendar.js\";\nexport { carouselRecipe } from \"./carousel.js\";\nexport { commandPaletteRecipe } from \"./command-palette.js\";\nexport { dataTableRecipe } from \"./data-table.js\";\nexport { chartRecipe } from \"./chart.js\";\nexport { transferListRecipe } from \"./transfer-list.js\";\n// floatingActionButtonRecipe는 여기서 재수출하지 않는다. 이 모듈이 buttonRecipe를\n// 정의하는데 floating-action-button.ts가 그것을 import하므로, 여기에 `export ... from`을\n// 두면 순환이 된다 — ESM은 재수출을 본문보다 먼저 평가해서 buttonRecipe가 아직\n// undefined인 채로 그 모듈이 실행된다. catalog.ts가 해당 모듈에서 직접 가져간다.\nexport { tourRecipe } from \"./tour.js\";\nexport { layoutRecipe } from \"./layout.js\";\nexport { otpFieldRecipe } from \"./otp-field.js\";\nexport { passwordFieldRecipe } from \"./password-field.js\";\nexport { splitterRecipe } from \"./splitter.js\";\nexport { datePickerRecipe } from \"./date-picker.js\";\nexport { descriptionListRecipe } from \"./description-list.js\";\nexport { filePickerRecipe } from \"./file-picker.js\";\nexport { formRecipe } from \"./form.js\";\nexport { imageRecipe } from \"./image.js\";\nexport { numberFieldRecipe } from \"./number-field.js\";\nexport { paginationRecipe } from \"./pagination.js\";\nexport { popoverRecipe } from \"./popover.js\";\nexport { resultRecipe } from \"./result.js\";\nexport { sliderRecipe } from \"./slider.js\";\nexport { stepsRecipe } from \"./steps.js\";\nexport { tagRecipe } from \"./tag.js\";\nexport { sidePanelRecipe } from \"./side-panel.js\";\nexport { timelineRecipe } from \"./timeline.js\";\nexport { treeRecipe } from \"./tree.js\";\nexport { uploadItemRecipe } from \"./upload-item.js\";\nexport { visuallyHiddenRecipe } from \"./visually-hidden.js\";\n\nexport { anchorRecipe } from \"./anchor.js\";\nexport { agreementRecipe } from \"./agreement.js\";\nexport { topRecipe } from \"./top.js\";\nexport { authProviderButtonRecipe } from \"./provider-button.js\";\nexport { authScreenRecipe } from \"./auth-screen.js\";\nexport { headingRecipe } from \"./heading.js\";\nexport { toggleGroupRecipe } from \"./toggle-group.js\";\nexport { tagsInputRecipe } from \"./tags-input.js\";\nexport { skipNavRecipe } from \"./skip-nav.js\";\nexport { bottomInfoRecipe } from \"./bottom-info.js\";\nexport { sidebarRecipe } from \"./sidebar.js\";\nexport { textFormatRecipe } from \"./text-formats.js\";\nexport { collapsibleRecipe } from \"./collapsible.js\";\nexport { assetRecipe } from \"./asset.js\";\nexport { menubarRecipe } from \"./menubar.js\";\n"]}
|
package/dist/result.d.ts
CHANGED
|
@@ -86,6 +86,15 @@ export declare const resultRecipe: {
|
|
|
86
86
|
};
|
|
87
87
|
};
|
|
88
88
|
readonly iconSize: "xl";
|
|
89
|
+
/**
|
|
90
|
+
* Status mark drawn when the host passes no icon. Web painted these from CSS `::before` literals while Native drew
|
|
91
|
+
* an empty circle (2026-10-17 review F N1); the recipe owns them so both renderers draw the same mark.
|
|
92
|
+
*/
|
|
93
|
+
readonly glyphs: {
|
|
94
|
+
readonly success: "✓";
|
|
95
|
+
readonly failure: "!";
|
|
96
|
+
readonly info: "i";
|
|
97
|
+
};
|
|
89
98
|
readonly paddingVertical: 40;
|
|
90
99
|
readonly paddingHorizontal: 24;
|
|
91
100
|
readonly gap: 12;
|
package/dist/result.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,eAAO,MAAM,cAAc;;CAE4B,CAAC;AAExD,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,IAAI,IAAI,CAAC;CAClB,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,IAAI,IAAI,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,8BAA8B,GAAG,IAAI,CAAC;IACrD,eAAe,EAAE,8BAA8B,GAAG,IAAI,CAAC;CACxD,CAAC,CAAC;AAQH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,MAAM,GACZ,IAAI,CAQN;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAqB3E;AAaD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,gBAAgB,GAC3B,wBAAwB,CAU1B;AAED,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,eAAO,MAAM,cAAc;;CAE4B,CAAC;AAExD,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,IAAI,IAAI,CAAC;CAClB,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,MAAM,8BAA8B,GAAG,QAAQ,CAAC;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,IAAI,IAAI,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,8BAA8B,GAAG,IAAI,CAAC;IACrD,eAAe,EAAE,8BAA8B,GAAG,IAAI,CAAC;CACxD,CAAC,CAAC;AAQH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,sBAAsB,EAC9B,KAAK,EAAE,MAAM,GACZ,IAAI,CAQN;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAqB3E;AAaD,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,gBAAgB,GAC3B,wBAAwB,CAU1B;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyBvB;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;CAeK,CAAC"}
|
package/dist/result.js
CHANGED
|
@@ -80,6 +80,11 @@ export const resultRecipe = {
|
|
|
80
80
|
},
|
|
81
81
|
},
|
|
82
82
|
iconSize: "xl",
|
|
83
|
+
/**
|
|
84
|
+
* Status mark drawn when the host passes no icon. Web painted these from CSS `::before` literals while Native drew
|
|
85
|
+
* an empty circle (2026-10-17 review F N1); the recipe owns them so both renderers draw the same mark.
|
|
86
|
+
*/
|
|
87
|
+
glyphs: { success: "✓", failure: "!", info: "i" },
|
|
83
88
|
paddingVertical: spacing.xxxl,
|
|
84
89
|
paddingHorizontal: spacing.xl,
|
|
85
90
|
gap: spacing.sm,
|
package/dist/result.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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","sourcesContent":["import { semanticColors } from \"./semantic-colors.js\";\nimport { fontWeight, spacing } from \"./foundations.js\";\n\n/**\n * Web-page HTTP status vocabulary (403/404/500) does not belong in a\n * platform-neutral contract. Products/adapters translate those into\n * `failure` with their own localized copy.\n */\nexport type ResultStatus = \"success\" | \"failure\" | \"info\";\n\nexport const resultDefaults = {\n status: \"info\",\n} as const satisfies Readonly<{ status: ResultStatus }>;\n\nexport type ResultActionDescriptor = Readonly<{\n label: string;\n accessibilityLabel?: string;\n onAction(): void;\n}>;\n\n/**\n * A flow terminus screen (success, failure, 404-equivalent). Unlike\n * `EmptyState`, which describes a place that can still be filled, Result\n * means this flow ends here — there is no pending content to wait for.\n *\n * `actions` holds at most one primary and one optional secondary action;\n * the first entry is the primary. A third action is refused, not silently\n * dropped, so a screen author notices instead of shipping a truncated row.\n */\nexport type ResultDescriptor = Readonly<{\n status: ResultStatus;\n title: string;\n description?: string;\n actions?: readonly ResultActionDescriptor[];\n}>;\n\nexport type ResolvedResultActionDescriptor = Readonly<{\n label: string;\n accessibilityLabel: string;\n onAction(): void;\n}>;\n\nexport type ResolvedResultDescriptor = Readonly<{\n status: ResultStatus;\n title: string;\n description: string | null;\n primaryAction: ResolvedResultActionDescriptor | null;\n secondaryAction: ResolvedResultActionDescriptor | null;\n}>;\n\nfunction assertCopy(value: string, field: string): void {\n if (value.trim().length === 0) {\n throw new TypeError(`Result ${field} must not be empty`);\n }\n}\n\nexport function validateResultAction(\n action: ResultActionDescriptor,\n field: string,\n): void {\n assertCopy(action.label, `${field}.label`);\n if (action.accessibilityLabel !== undefined) {\n assertCopy(action.accessibilityLabel, `${field}.accessibilityLabel`);\n }\n if (typeof action.onAction !== \"function\") {\n throw new TypeError(`Result ${field}.onAction must be a function`);\n }\n}\n\nexport function validateResultDescriptor(descriptor: ResultDescriptor): void {\n if (\n descriptor.status !== \"success\" &&\n descriptor.status !== \"failure\" &&\n descriptor.status !== \"info\"\n ) {\n throw new TypeError(`Unsupported Result status: ${String(descriptor.status)}`);\n }\n assertCopy(descriptor.title, \"title\");\n if (descriptor.description !== undefined) {\n assertCopy(descriptor.description, \"description\");\n }\n const actions = descriptor.actions ?? [];\n if (actions.length > 2) {\n throw new RangeError(\n \"Result supports at most one primary and one secondary action\",\n );\n }\n actions.forEach((action, index) => {\n validateResultAction(action, index === 0 ? \"primaryAction\" : \"secondaryAction\");\n });\n}\n\nfunction resolveAction(\n action: ResultActionDescriptor | undefined,\n): ResolvedResultActionDescriptor | null {\n if (!action) return null;\n return {\n label: action.label,\n accessibilityLabel: action.accessibilityLabel ?? action.label,\n onAction: action.onAction,\n };\n}\n\nexport function resolveResultDescriptor(\n descriptor: ResultDescriptor,\n): ResolvedResultDescriptor {\n validateResultDescriptor(descriptor);\n const actions = descriptor.actions ?? [];\n return {\n status: descriptor.status,\n title: descriptor.title,\n description: descriptor.description ?? null,\n primaryAction: resolveAction(actions[0]),\n secondaryAction: resolveAction(actions[1]),\n };\n}\n\nexport const resultRecipe = {\n slots: [\n \"root\",\n \"icon\",\n \"title\",\n \"description\",\n \"primaryAction\",\n \"secondaryAction\",\n ] as const,\n defaults: resultDefaults,\n tones: {\n success: {\n icon: semanticColors.feedback.success.foreground,\n iconBackground: semanticColors.feedback.success.badgeBackground,\n },\n failure: {\n icon: semanticColors.feedback.danger.foreground,\n iconBackground: semanticColors.feedback.danger.badgeBackground,\n },\n info: {\n icon: semanticColors.feedback.info.foreground,\n iconBackground: semanticColors.feedback.info.badgeBackground,\n },\n },\n iconSize: \"xl\",\n paddingVertical: spacing.xxxl,\n paddingHorizontal: spacing.xl,\n gap: spacing.sm,\n title: {\n textVariant: \"titleLarge\",\n color: semanticColors.content.primary,\n fontWeight: fontWeight.bold,\n },\n description: {\n textVariant: \"body\",\n color: semanticColors.content.secondary,\n },\n actionsGap: spacing.sm,\n} as const;\n"]}
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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","sourcesContent":["import { semanticColors } from \"./semantic-colors.js\";\nimport { fontWeight, spacing } from \"./foundations.js\";\n\n/**\n * Web-page HTTP status vocabulary (403/404/500) does not belong in a\n * platform-neutral contract. Products/adapters translate those into\n * `failure` with their own localized copy.\n */\nexport type ResultStatus = \"success\" | \"failure\" | \"info\";\n\nexport const resultDefaults = {\n status: \"info\",\n} as const satisfies Readonly<{ status: ResultStatus }>;\n\nexport type ResultActionDescriptor = Readonly<{\n label: string;\n accessibilityLabel?: string;\n onAction(): void;\n}>;\n\n/**\n * A flow terminus screen (success, failure, 404-equivalent). Unlike\n * `EmptyState`, which describes a place that can still be filled, Result\n * means this flow ends here — there is no pending content to wait for.\n *\n * `actions` holds at most one primary and one optional secondary action;\n * the first entry is the primary. A third action is refused, not silently\n * dropped, so a screen author notices instead of shipping a truncated row.\n */\nexport type ResultDescriptor = Readonly<{\n status: ResultStatus;\n title: string;\n description?: string;\n actions?: readonly ResultActionDescriptor[];\n}>;\n\nexport type ResolvedResultActionDescriptor = Readonly<{\n label: string;\n accessibilityLabel: string;\n onAction(): void;\n}>;\n\nexport type ResolvedResultDescriptor = Readonly<{\n status: ResultStatus;\n title: string;\n description: string | null;\n primaryAction: ResolvedResultActionDescriptor | null;\n secondaryAction: ResolvedResultActionDescriptor | null;\n}>;\n\nfunction assertCopy(value: string, field: string): void {\n if (value.trim().length === 0) {\n throw new TypeError(`Result ${field} must not be empty`);\n }\n}\n\nexport function validateResultAction(\n action: ResultActionDescriptor,\n field: string,\n): void {\n assertCopy(action.label, `${field}.label`);\n if (action.accessibilityLabel !== undefined) {\n assertCopy(action.accessibilityLabel, `${field}.accessibilityLabel`);\n }\n if (typeof action.onAction !== \"function\") {\n throw new TypeError(`Result ${field}.onAction must be a function`);\n }\n}\n\nexport function validateResultDescriptor(descriptor: ResultDescriptor): void {\n if (\n descriptor.status !== \"success\" &&\n descriptor.status !== \"failure\" &&\n descriptor.status !== \"info\"\n ) {\n throw new TypeError(`Unsupported Result status: ${String(descriptor.status)}`);\n }\n assertCopy(descriptor.title, \"title\");\n if (descriptor.description !== undefined) {\n assertCopy(descriptor.description, \"description\");\n }\n const actions = descriptor.actions ?? [];\n if (actions.length > 2) {\n throw new RangeError(\n \"Result supports at most one primary and one secondary action\",\n );\n }\n actions.forEach((action, index) => {\n validateResultAction(action, index === 0 ? \"primaryAction\" : \"secondaryAction\");\n });\n}\n\nfunction resolveAction(\n action: ResultActionDescriptor | undefined,\n): ResolvedResultActionDescriptor | null {\n if (!action) return null;\n return {\n label: action.label,\n accessibilityLabel: action.accessibilityLabel ?? action.label,\n onAction: action.onAction,\n };\n}\n\nexport function resolveResultDescriptor(\n descriptor: ResultDescriptor,\n): ResolvedResultDescriptor {\n validateResultDescriptor(descriptor);\n const actions = descriptor.actions ?? [];\n return {\n status: descriptor.status,\n title: descriptor.title,\n description: descriptor.description ?? null,\n primaryAction: resolveAction(actions[0]),\n secondaryAction: resolveAction(actions[1]),\n };\n}\n\nexport const resultRecipe = {\n slots: [\n \"root\",\n \"icon\",\n \"title\",\n \"description\",\n \"primaryAction\",\n \"secondaryAction\",\n ] as const,\n defaults: resultDefaults,\n tones: {\n success: {\n icon: semanticColors.feedback.success.foreground,\n iconBackground: semanticColors.feedback.success.badgeBackground,\n },\n failure: {\n icon: semanticColors.feedback.danger.foreground,\n iconBackground: semanticColors.feedback.danger.badgeBackground,\n },\n info: {\n icon: semanticColors.feedback.info.foreground,\n iconBackground: semanticColors.feedback.info.badgeBackground,\n },\n },\n iconSize: \"xl\",\n /**\n * Status mark drawn when the host passes no icon. Web painted these from CSS `::before` literals while Native drew\n * an empty circle (2026-10-17 review F N1); the recipe owns them so both renderers draw the same mark.\n */\n glyphs: { success: \"✓\", failure: \"!\", info: \"i\" },\n paddingVertical: spacing.xxxl,\n paddingHorizontal: spacing.xl,\n gap: spacing.sm,\n title: {\n textVariant: \"titleLarge\",\n color: semanticColors.content.primary,\n fontWeight: fontWeight.bold,\n },\n description: {\n textVariant: \"body\",\n color: semanticColors.content.secondary,\n },\n actionsGap: spacing.sm,\n} as const;\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MenuItemDescriptor } from "./behaviors.js";
|
|
1
2
|
/** Initial load replaces the body; refresh/save errors belong beside retained content. */
|
|
2
3
|
export type ScreenContentState = Readonly<{
|
|
3
4
|
kind: "ready";
|
|
@@ -12,6 +13,49 @@ export declare function resolveScreenContentState(state?: ScreenContentState): {
|
|
|
12
13
|
readonly busy: boolean;
|
|
13
14
|
readonly announcement: "polite" | "assertive";
|
|
14
15
|
};
|
|
16
|
+
/**
|
|
17
|
+
* Native header band heights. Titled centered headers match the iOS navigation bar (44 control + 4 + 4);
|
|
18
|
+
* icon-only centered headers are compact (2026-10-14 야잘알 tab spacing, 2026-10-17 "상단 여백 줄여").
|
|
19
|
+
* Body top padding shrinks only under a compact header without a notice.
|
|
20
|
+
*/
|
|
21
|
+
export declare const screenHeaderRecipe: {
|
|
22
|
+
readonly minHeight: 52;
|
|
23
|
+
readonly paddingVertical: 4;
|
|
24
|
+
readonly compactMinHeight: 48;
|
|
25
|
+
readonly compactPaddingVertical: 2;
|
|
26
|
+
readonly compactBodyTop: 4;
|
|
27
|
+
/**
|
|
28
|
+
* Heading levels for the route title, shared by Web and Native (2026-10-17 comparison: Native drew the
|
|
29
|
+
* title as regular-weight Text — 20 start / 18 centered — while Web used bold Heading levels).
|
|
30
|
+
*/
|
|
31
|
+
readonly titleLevel: "level3";
|
|
32
|
+
readonly centeredTitleLevel: "level5";
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Leaving a screen (back, close, "설정 나가기") is an icon-only button fixed at the header's leading edge
|
|
36
|
+
* (2026-10-17 user rule: exits had drifted into body text buttons with mixed glyphs). The label is read
|
|
37
|
+
* by assistive tech only. `back` mirrors in RTL; `close` is for modal-style routes.
|
|
38
|
+
*/
|
|
39
|
+
export type ScreenExitKind = "back" | "close";
|
|
40
|
+
export declare const screenExitRecipe: {
|
|
41
|
+
/** Chevron arm length and stroke; close cross arm length. Drawn, not font glyphs, so every platform matches. */
|
|
42
|
+
readonly chevronSize: 10;
|
|
43
|
+
readonly closeSize: 14;
|
|
44
|
+
readonly stroke: 2;
|
|
45
|
+
};
|
|
46
|
+
export declare function validateScreenExit(exit: Readonly<{
|
|
47
|
+
kind: string;
|
|
48
|
+
label: string;
|
|
49
|
+
}>, hasLeading: boolean): void;
|
|
50
|
+
/**
|
|
51
|
+
* Who owns the screen gutters. `default`: the shared shell pads header, notice, body and footer. `none`: the host
|
|
52
|
+
* route already insets everything (≈45 product call sites rely on this meaning, so it cannot change).
|
|
53
|
+
* `body-edge`: header, notice and footer keep the shell padding; only the body's inline padding is 0 so full-width
|
|
54
|
+
* list rows (ConversationRow, ListRow-based items) supply their own inset — review S5#9 measured DM avatars ~32pt
|
|
55
|
+
* from the edge because body padding and row padding stacked (2026-10-17 user decision).
|
|
56
|
+
*/
|
|
57
|
+
export type ScreenContentInset = "default" | "none" | "body-edge";
|
|
58
|
+
export declare const screenContentInsets: readonly ["default", "none", "body-edge"];
|
|
15
59
|
export declare const screenPatternRecipe: {
|
|
16
60
|
readonly maxWidth: 720;
|
|
17
61
|
readonly padding: 16;
|
|
@@ -53,16 +97,85 @@ export declare function shouldSubmitMessageKey(event: Readonly<{
|
|
|
53
97
|
keyCode?: number;
|
|
54
98
|
}>, mode?: "newline" | "send"): boolean;
|
|
55
99
|
export declare function canSubmitMessage({ value, disabled, pending, attachmentCount }: MessageComposerDescriptor): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Shared timeline geometry. 2026-10-16 user decision: the common chat standard follows the measured
|
|
102
|
+
* KakaoTalk iOS chat room (@3x capture: bubble ~35pt tall, radius ~14, run gap ~6, group gap ~12,
|
|
103
|
+
* avatar ~34, avatar gap 8). Brand colors and artwork are not copied; surfaces stay semantic tokens.
|
|
104
|
+
*/
|
|
105
|
+
export declare const chatMessageRecipe: {
|
|
106
|
+
readonly avatarSize: 36;
|
|
107
|
+
readonly avatarGap: 8;
|
|
108
|
+
readonly authorGap: 4;
|
|
109
|
+
readonly metaGap: 4;
|
|
110
|
+
readonly bubbleRadius: 14;
|
|
111
|
+
readonly bubblePaddingInline: 10;
|
|
112
|
+
readonly bubblePaddingBlock: 6;
|
|
113
|
+
readonly runGap: 6;
|
|
114
|
+
readonly groupGap: 12;
|
|
115
|
+
readonly tailWidth: 7;
|
|
116
|
+
readonly tailHeight: 10;
|
|
117
|
+
readonly tailCornerRadius: 4;
|
|
118
|
+
readonly jumpToLatestGap: 8;
|
|
119
|
+
readonly timelineInset: 10;
|
|
120
|
+
readonly mediaWidth: 210;
|
|
121
|
+
readonly mediaGap: 2;
|
|
122
|
+
};
|
|
123
|
+
/** Column count for a photo set: pairs read as 2-up, other counts as 3-up; one photo spans the width. */
|
|
124
|
+
export declare function resolveChatMediaColumns(count: number): 1 | 2 | 3;
|
|
125
|
+
/**
|
|
126
|
+
* Long-press menu geometry measured from the Instagram iOS DM hold menu (2026-10-16 @3x capture):
|
|
127
|
+
* full-width reaction strip ~60pt with ~30pt emoji, the pressed bubble itself as preview, and a ~200pt
|
|
128
|
+
* action card aligned to the bubble's side with ~56pt rows. 12pt between the three blocks.
|
|
129
|
+
*/
|
|
130
|
+
/** Emoji row above a comment composer (Instagram comment sheet, 2026-10-16): evenly spread 44pt targets. */
|
|
131
|
+
export declare const composerQuickInsertRecipe: {
|
|
132
|
+
readonly itemSize: 44;
|
|
133
|
+
readonly emojiSize: 26;
|
|
134
|
+
readonly gap: 8;
|
|
135
|
+
};
|
|
136
|
+
export declare const holdMenuRecipe: {
|
|
137
|
+
readonly inset: 10;
|
|
138
|
+
readonly gap: 12;
|
|
139
|
+
readonly stripHeight: 60;
|
|
140
|
+
readonly stripItemSize: 48;
|
|
141
|
+
readonly emojiSize: 28;
|
|
142
|
+
readonly actionWidth: 200;
|
|
143
|
+
readonly actionRowHeight: 56;
|
|
144
|
+
readonly actionRadius: 18;
|
|
145
|
+
readonly iconSize: 24;
|
|
146
|
+
};
|
|
147
|
+
/** Position inside a run of consecutive messages from one author within one displayed minute. */
|
|
148
|
+
export type ChatMessageGroupPosition = "single" | "first" | "middle" | "last";
|
|
149
|
+
/**
|
|
150
|
+
* Runs break when the author or the displayed timestamp changes, so each minute shows its time once
|
|
151
|
+
* and a new minute re-introduces the author (KakaoTalk behavior). Products pass the same localized
|
|
152
|
+
* timestamp string they render; HJM never parses dates.
|
|
153
|
+
*/
|
|
154
|
+
export declare function resolveChatMessageGroups(items: readonly Readonly<{
|
|
155
|
+
id: string;
|
|
156
|
+
authorId: string;
|
|
157
|
+
timestamp: string;
|
|
158
|
+
}>[]): ReadonlyMap<string, ChatMessageGroupPosition>;
|
|
159
|
+
/** What one bubble shows for its run position; both renderers read this instead of re-deriving rules. */
|
|
160
|
+
export declare function resolveChatMessageGroupDisplay(position?: ChatMessageGroupPosition): {
|
|
161
|
+
readonly showAuthor: boolean;
|
|
162
|
+
readonly showAvatar: boolean;
|
|
163
|
+
readonly showTail: boolean;
|
|
164
|
+
readonly showTimestamp: boolean;
|
|
165
|
+
readonly spacingBefore: 12 | 6;
|
|
166
|
+
};
|
|
56
167
|
/** Bubble alignment expresses authorship, not delivery; delivery text always comes from the product receipt. */
|
|
57
168
|
export type ChatMessageDescriptor = Readonly<{
|
|
58
169
|
direction: "incoming" | "outgoing";
|
|
59
170
|
author: string;
|
|
60
171
|
timestamp: string;
|
|
61
172
|
deliveryLabel?: string;
|
|
62
|
-
/** Inward drag reveals time (incoming right, outgoing left) while delivery state remains visible; default
|
|
173
|
+
/** Inward drag reveals time (incoming right, outgoing left) while delivery state remains visible; default shows time beside the last bubble of a run. */
|
|
63
174
|
timestampPresentation?: "always" | "swipe";
|
|
64
|
-
/**
|
|
175
|
+
/** Authorship tip on the run's first bubble. Default on since the 2026-10-16 timeline standard. */
|
|
65
176
|
bubbleTail?: boolean;
|
|
177
|
+
/** From resolveChatMessageGroups; omitted means a standalone message. */
|
|
178
|
+
groupPosition?: ChatMessageGroupPosition;
|
|
66
179
|
}>;
|
|
67
180
|
/** A denied permission goes to settings; rendering never requests OS access automatically. */
|
|
68
181
|
export type PermissionScreenStatus = "prompt" | "denied" | "granted" | "unavailable";
|
|
@@ -71,6 +184,30 @@ export declare function resolveOnboardingStep(total: number, index: number): {
|
|
|
71
184
|
first: boolean;
|
|
72
185
|
last: boolean;
|
|
73
186
|
};
|
|
187
|
+
/**
|
|
188
|
+
* Shared comment-row geometry. 2026-10-16 user decision: comments follow the measured Instagram iOS
|
|
189
|
+
* comment sheet (@3x capture: avatar 32 / reply 24, avatar gap 8, like count under the heart,
|
|
190
|
+
* "Reply" as quiet text below the body, replies indented to the text column). Artwork is not copied.
|
|
191
|
+
*/
|
|
192
|
+
export declare const commentThreadRecipe: {
|
|
193
|
+
readonly avatarSize: 32;
|
|
194
|
+
readonly replyAvatarSize: 24;
|
|
195
|
+
readonly avatarGap: 8;
|
|
196
|
+
readonly lineGap: 2;
|
|
197
|
+
readonly rowGap: 12;
|
|
198
|
+
readonly replyIndent: number;
|
|
199
|
+
readonly likeColumnWidth: 44;
|
|
200
|
+
readonly mediaMaxWidth: 160;
|
|
201
|
+
readonly mediaRadius: 12;
|
|
202
|
+
readonly menuGlyphSize: 20;
|
|
203
|
+
};
|
|
204
|
+
/**
|
|
205
|
+
* Items of the HJM-owned per-comment "more" menu (2026-10-17: message/comment structure belongs to HJM, review S4#7).
|
|
206
|
+
* Same vocabulary as Menu/ContextMenu; the product supplies only ids, localized labels, tone and availability.
|
|
207
|
+
*/
|
|
208
|
+
export type CommentMenuItemDescriptor<Key extends string = string> = Pick<MenuItemDescriptor<Key>, "id" | "label" | "disabled" | "tone">;
|
|
209
|
+
/** Danger actions (delete, block) always sit last so a destructive row is never the first target; order is otherwise kept. */
|
|
210
|
+
export declare function resolveCommentMenuItems<Key extends string>(items: readonly CommentMenuItemDescriptor<Key>[]): readonly CommentMenuItemDescriptor<Key>[];
|
|
74
211
|
/** Replies are one level deep; reject orphaned/duplicate records instead of silently losing them. */
|
|
75
212
|
export declare function validateCommentThread(items: readonly {
|
|
76
213
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-patterns.d.ts","sourceRoot":"","sources":["../src/screen-patterns.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"screen-patterns.d.ts","sourceRoot":"","sources":["../src/screen-patterns.ts"],"names":[],"mappings":"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"}
|