@hjmds/design-contracts 1.41.2 → 1.43.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/affix.d.ts +18 -0
- package/dist/affix.d.ts.map +1 -1
- package/dist/affix.js +13 -1
- package/dist/affix.js.map +1 -1
- package/dist/alert-dialog.d.ts +32 -0
- package/dist/alert-dialog.d.ts.map +1 -1
- package/dist/alert-dialog.js +52 -0
- package/dist/alert-dialog.js.map +1 -1
- package/dist/behaviors.d.ts +6 -5
- package/dist/behaviors.d.ts.map +1 -1
- package/dist/behaviors.js +1 -1
- package/dist/behaviors.js.map +1 -1
- package/dist/catalog.d.ts +168 -15
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +4 -4
- package/dist/catalog.js.map +1 -1
- package/dist/character-count.d.ts +103 -0
- package/dist/character-count.d.ts.map +1 -0
- package/dist/character-count.js +68 -0
- package/dist/character-count.js.map +1 -0
- package/dist/chart.d.ts +30 -0
- package/dist/chart.d.ts.map +1 -1
- package/dist/chart.js +18 -0
- package/dist/chart.js.map +1 -1
- package/dist/collection-rail.d.ts +13 -1
- package/dist/collection-rail.d.ts.map +1 -1
- package/dist/collection-rail.js +9 -2
- package/dist/collection-rail.js.map +1 -1
- package/dist/communication.d.ts +25 -0
- package/dist/communication.d.ts.map +1 -1
- package/dist/communication.js +3 -0
- package/dist/communication.js.map +1 -1
- package/dist/component-recipes.d.ts +172 -2
- package/dist/component-recipes.d.ts.map +1 -1
- package/dist/component-recipes.js +122 -8
- package/dist/component-recipes.js.map +1 -1
- package/dist/design-system-provider.d.ts +13 -2
- package/dist/design-system-provider.d.ts.map +1 -1
- package/dist/design-system-provider.js +19 -3
- package/dist/design-system-provider.js.map +1 -1
- package/dist/foundations.d.ts +15 -0
- package/dist/foundations.d.ts.map +1 -1
- package/dist/foundations.js +7 -0
- package/dist/foundations.js.map +1 -1
- package/dist/icon-button-recipe.d.ts +33 -0
- package/dist/icon-button-recipe.d.ts.map +1 -1
- package/dist/icon-button-recipe.js +36 -1
- package/dist/icon-button-recipe.js.map +1 -1
- package/dist/image.d.ts +13 -0
- package/dist/image.d.ts.map +1 -1
- package/dist/image.js +17 -0
- package/dist/image.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.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/screen-patterns.d.ts +95 -0
- package/dist/screen-patterns.d.ts.map +1 -1
- package/dist/screen-patterns.js +83 -2
- package/dist/screen-patterns.js.map +1 -1
- package/dist/selection-helpers.d.ts +6 -0
- package/dist/selection-helpers.d.ts.map +1 -1
- package/dist/selection-helpers.js +12 -0
- package/dist/selection-helpers.js.map +1 -1
- package/dist/sidebar.d.ts +17 -2
- package/dist/sidebar.d.ts.map +1 -1
- package/dist/sidebar.js +8 -2
- package/dist/sidebar.js.map +1 -1
- package/dist/steps.d.ts +19 -19
- package/dist/steps.d.ts.map +1 -1
- package/dist/steps.js +21 -9
- package/dist/steps.js.map +1 -1
- package/dist/timeline.d.ts +41 -0
- package/dist/timeline.d.ts.map +1 -1
- package/dist/timeline.js +47 -1
- package/dist/timeline.js.map +1 -1
- package/dist/top.d.ts +21 -2
- package/dist/top.d.ts.map +1 -1
- package/dist/top.js +17 -1
- package/dist/top.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/affix.md +7 -0
- package/docs/avatar-fallback.md +19 -0
- package/docs/brand-boundary.md +24 -2
- package/docs/chart.md +7 -0
- package/docs/collection-rail.md +4 -1
- package/docs/generated/component-maturity.md +1 -1
- package/docs/generated/renderer-evidence.json +10 -6
- package/docs/generated/renderer-evidence.md +1 -1
- package/docs/generated/showcase-manifest.json +12 -5
- package/docs/image.md +5 -0
- package/docs/list-row.md +8 -0
- package/docs/optional-adapters.md +3 -0
- package/docs/overlay-stack.md +27 -0
- package/docs/screen-patterns.md +39 -2
- package/docs/sidebar.md +15 -0
- package/docs/steps.md +23 -19
- package/docs/theme-palette.md +3 -3
- package/docs/theming.md +1 -0
- package/docs/timeline.md +18 -1
- package/docs/top.md +7 -0
- package/docs/usage/README.md +9 -2
- package/docs/usage/components/affix.md +18 -4
- package/docs/usage/components/alert-dialog.md +28 -0
- package/docs/usage/components/avatar.md +30 -9
- package/docs/usage/components/badge.md +20 -5
- package/docs/usage/components/chart.md +19 -1
- package/docs/usage/components/chat-message.md +5 -0
- package/docs/usage/components/chat-room-actions.md +58 -0
- package/docs/usage/components/chat-room-create.md +58 -0
- package/docs/usage/components/chat-room-details.md +58 -0
- package/docs/usage/components/chat-room-invite.md +58 -0
- package/docs/usage/components/chat-room-members.md +58 -0
- package/docs/usage/components/chat-room-profile.md +58 -0
- package/docs/usage/components/checkbox-group.md +24 -1
- package/docs/usage/components/choice-row.md +19 -4
- package/docs/usage/components/composition-layout.md +6 -2
- package/docs/usage/components/counter-badge.md +2 -2
- package/docs/usage/components/design-system-provider.md +2 -1
- package/docs/usage/components/divider.md +12 -1
- package/docs/usage/components/field.md +51 -0
- package/docs/usage/components/icon-button.md +48 -4
- package/docs/usage/components/icon-tile.md +13 -2
- package/docs/usage/components/image.md +25 -0
- package/docs/usage/components/list-row.md +8 -4
- package/docs/usage/components/list.md +1 -1
- package/docs/usage/components/notification-item.md +5 -1
- package/docs/usage/components/permission-screen.md +25 -4
- package/docs/usage/components/screen-layout.md +27 -1
- package/docs/usage/components/segmented-control.md +16 -3
- package/docs/usage/components/select.md +1 -0
- package/docs/usage/components/settings-screen.md +5 -4
- package/docs/usage/components/sheet.md +2 -1
- package/docs/usage/components/sidebar.md +34 -6
- package/docs/usage/components/steps.md +29 -8
- package/docs/usage/components/surface.md +2 -1
- package/docs/usage/components/text-area.md +2 -1
- package/docs/usage/components/timeline.md +25 -4
- package/docs/usage/components/top.md +15 -2
- package/docs/usage/compositions/chat-room.md +110 -0
- package/docs/usage/screens/common-settings.md +3 -2
- package/docs/usage/screens/flow-permission.md +3 -3
- package/docs/usage/tokens/elevation-opacity.md +14 -2
- package/package.json +7 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-rail.js","sourceRoot":"","sources":["../src/collection-rail.ts"],"names":[],"mappings":"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","sourcesContent":["import { validateItems } from \"./interaction-adapters.js\";\nimport { layout, spacing } from \"./foundations.js\";\n\nexport type CollectionRailItem<Id extends string = string> = Readonly<{ id: Id; label: string }>;\nexport type CollectionRailDensity = \"compact\" | \"comfortable\";\nexport type CollectionRailIntent = \"previous\" | \"next\" | \"first\" | \"last\";\n\n// A finite rail exposes every item's independent actions. Carousel's single\n// selected/inert panel is therefore not its state engine (docs/collection-rail.md).\nexport const collectionRailRecipe = {\n itemMaxWidth: { compact: layout.readingMaxWidth / 3, comfortable: layout.readingMaxWidth / 2 },\n gap: spacing.md,\n edgeHint: spacing.xl,\n defaults: { density: \"comfortable\" },\n} as const;\n\nexport type CollectionRailLayout = Readonly<{\n count: number; viewport: number; itemWidth: number; gap: number; contentWidth: number; maxOffset: number;\n}>;\n\nexport function validateCollectionRail(items: readonly CollectionRailItem[], initialKey?: string): void {\n validateItems(items);\n if (initialKey !== undefined && !items.some(item => item.id === initialKey)) {\n throw new RangeError(\"CollectionRail defaultStartKey must identify an item\");\n }\n}\n\nexport function resolveCollectionRailLayout(\n count: number, viewport: number, density: CollectionRailDensity = collectionRailRecipe.defaults.density,\n gap: number = collectionRailRecipe.gap,\n): CollectionRailLayout {\n if (!Number.isSafeInteger(count) || count < 0) throw new RangeError(\"CollectionRail count must be a nonnegative integer\");\n if (!Number.isFinite(viewport) || viewport < 0 || !Number.isFinite(gap) || gap < 0) {\n throw new RangeError(\"CollectionRail measurements must be finite and nonnegative\");\n }\n if (!(density in collectionRailRecipe.itemMaxWidth)) throw new TypeError(\"Unknown CollectionRail density\");\n // The hint uses the shared spacing rhythm, not the reference's fixed card px.\n // At extremely narrow widths showing readable content takes priority over peek.\n const available = viewport > collectionRailRecipe.edgeHint ? viewport - collectionRailRecipe.edgeHint : viewport;\n const itemWidth = Math.min(collectionRailRecipe.itemMaxWidth[density], available);\n const contentWidth = count === 0 ? 0 : count * itemWidth + (count - 1) * gap;\n return { count, viewport, itemWidth, gap, contentWidth, maxOffset: Math.max(0, contentWidth - viewport) };\n}\n\nexport function clampCollectionRailOffset(layout: CollectionRailLayout, offset: number): number {\n if (!Number.isFinite(offset)) throw new RangeError(\"CollectionRail offset must be finite\");\n return Math.min(layout.maxOffset, Math.max(0, offset));\n}\n\n// Hosts round subpixel measurements differently. Half a CSS pixel/dp avoids\n// an enabled end button that can no longer move; it is not an overscroll allowance.\nconst alignmentTolerance = 0.5;\n\nexport function resolveCollectionRailViewport(layout: CollectionRailLayout, offset: number) {\n const start = clampCollectionRailOffset(layout, offset);\n const stride = layout.itemWidth + layout.gap;\n const startIndex = layout.count === 0 ? -1 : Math.min(layout.count - 1, Math.floor((start + alignmentTolerance) / (stride || 1)));\n return { offset: start, startIndex, atStart: start <= alignmentTolerance, atEnd: start >= layout.maxOffset - alignmentTolerance };\n}\n\nexport function getCollectionRailTargetOffset(layout: CollectionRailLayout, offset: number, intent: CollectionRailIntent): number {\n const current = clampCollectionRailOffset(layout, offset);\n if (intent === \"first\") return 0;\n if (intent === \"last\") return layout.maxOffset;\n const stride = layout.itemWidth + layout.gap;\n if (!stride) return 0;\n const target = intent === \"next\"\n ? (Math.floor((current + alignmentTolerance) / stride) + 1) * stride\n : (Math.ceil((current - alignmentTolerance) / stride) - 1) * stride;\n return clampCollectionRailOffset(layout, target);\n}\n\nexport function getCollectionRailItemOffset(layout: CollectionRailLayout, index: number): number {\n if (!Number.isInteger(index) || index < 0 || index >= layout.count) throw new RangeError(\"CollectionRail item index is unavailable\");\n return clampCollectionRailOffset(layout, index * (layout.itemWidth + layout.gap));\n}\n\n/** Reveal a focused item's full bounds, without treating it as a selection. */\nexport function getCollectionRailRevealOffset(layout: CollectionRailLayout, offset: number, index: number): number {\n getCollectionRailItemOffset(layout, index);\n const current = clampCollectionRailOffset(layout, offset);\n const start = index * (layout.itemWidth + layout.gap), end = start + layout.itemWidth;\n return clampCollectionRailOffset(layout, start < current ? start : end > current + layout.viewport ? end - layout.viewport : current);\n}\n\n/** Native uses an explicitly LTR scroll host; its RTL row is physically reversed. */\nexport function getCollectionRailPhysicalOffset(layout: CollectionRailLayout, logicalOffset: number, direction: \"ltr\" | \"rtl\"): number {\n const offset = clampCollectionRailOffset(layout, logicalOffset);\n return direction === \"rtl\" ? layout.maxOffset - offset : offset;\n}\n\nexport function getCollectionRailKeyboardIntent(key: string, direction: \"ltr\" | \"rtl\"): CollectionRailIntent | undefined {\n if (key === \"Home\") return \"first\";\n if (key === \"End\") return \"last\";\n if (key === \"ArrowRight\") return direction === \"rtl\" ? \"previous\" : \"next\";\n if (key === \"ArrowLeft\") return direction === \"rtl\" ? \"next\" : \"previous\";\n return undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"collection-rail.js","sourceRoot":"","sources":["../src/collection-rail.ts"],"names":[],"mappings":"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","sourcesContent":["import { validateItems } from \"./interaction-adapters.js\";\nimport { layout, spacing } from \"./foundations.js\";\n\nexport type CollectionRailItem<Id extends string = string> = Readonly<{ id: Id; label: string }>;\nexport type CollectionRailDensity = \"compact\" | \"comfortable\" | \"chip\";\nexport type CollectionRailIntent = \"previous\" | \"next\" | \"first\" | \"last\";\n\n// A finite rail exposes every item's independent actions. Carousel's single\n// selected/inert panel is therefore not its state engine (docs/collection-rail.md).\nexport const collectionRailRecipe = {\n /**\n * `chip` (2026-10-23): Yajalal's home strip of 145pt mini scoreboards used a raw ScrollView because every rail item\n * took card width (240+). Chips are uniform, so a narrow step keeps the shared one-stride geometry; content-sized\n * items were not added because previous/next, the start anchor and focus reveal step by a single item width.\n */\n itemMaxWidth: { compact: layout.readingMaxWidth / 3, comfortable: layout.readingMaxWidth / 2, chip: layout.readingMaxWidth / 5 },\n gap: spacing.md,\n /** Gap per density as a spacing step (profile-aware on Native); chips sit closer than cards. */\n gapSteps: { compact: \"md\", comfortable: \"md\", chip: \"xs\" },\n edgeHint: spacing.xl,\n defaults: { density: \"comfortable\" },\n} as const;\n\nexport type CollectionRailLayout = Readonly<{\n count: number; viewport: number; itemWidth: number; gap: number; contentWidth: number; maxOffset: number;\n}>;\n\nexport function validateCollectionRail(items: readonly CollectionRailItem[], initialKey?: string): void {\n validateItems(items);\n if (initialKey !== undefined && !items.some(item => item.id === initialKey)) {\n throw new RangeError(\"CollectionRail defaultStartKey must identify an item\");\n }\n}\n\nexport function resolveCollectionRailLayout(\n count: number, viewport: number, density: CollectionRailDensity = collectionRailRecipe.defaults.density,\n gap: number = spacing[collectionRailRecipe.gapSteps[density] ?? \"md\"],\n): CollectionRailLayout {\n if (!Number.isSafeInteger(count) || count < 0) throw new RangeError(\"CollectionRail count must be a nonnegative integer\");\n if (!Number.isFinite(viewport) || viewport < 0 || !Number.isFinite(gap) || gap < 0) {\n throw new RangeError(\"CollectionRail measurements must be finite and nonnegative\");\n }\n if (!(density in collectionRailRecipe.itemMaxWidth)) throw new TypeError(\"Unknown CollectionRail density\");\n // The hint uses the shared spacing rhythm, not the reference's fixed card px.\n // At extremely narrow widths showing readable content takes priority over peek.\n const available = viewport > collectionRailRecipe.edgeHint ? viewport - collectionRailRecipe.edgeHint : viewport;\n const itemWidth = Math.min(collectionRailRecipe.itemMaxWidth[density], available);\n const contentWidth = count === 0 ? 0 : count * itemWidth + (count - 1) * gap;\n return { count, viewport, itemWidth, gap, contentWidth, maxOffset: Math.max(0, contentWidth - viewport) };\n}\n\nexport function clampCollectionRailOffset(layout: CollectionRailLayout, offset: number): number {\n if (!Number.isFinite(offset)) throw new RangeError(\"CollectionRail offset must be finite\");\n return Math.min(layout.maxOffset, Math.max(0, offset));\n}\n\n// Hosts round subpixel measurements differently. Half a CSS pixel/dp avoids\n// an enabled end button that can no longer move; it is not an overscroll allowance.\nconst alignmentTolerance = 0.5;\n\nexport function resolveCollectionRailViewport(layout: CollectionRailLayout, offset: number) {\n const start = clampCollectionRailOffset(layout, offset);\n const stride = layout.itemWidth + layout.gap;\n const startIndex = layout.count === 0 ? -1 : Math.min(layout.count - 1, Math.floor((start + alignmentTolerance) / (stride || 1)));\n return { offset: start, startIndex, atStart: start <= alignmentTolerance, atEnd: start >= layout.maxOffset - alignmentTolerance };\n}\n\nexport function getCollectionRailTargetOffset(layout: CollectionRailLayout, offset: number, intent: CollectionRailIntent): number {\n const current = clampCollectionRailOffset(layout, offset);\n if (intent === \"first\") return 0;\n if (intent === \"last\") return layout.maxOffset;\n const stride = layout.itemWidth + layout.gap;\n if (!stride) return 0;\n const target = intent === \"next\"\n ? (Math.floor((current + alignmentTolerance) / stride) + 1) * stride\n : (Math.ceil((current - alignmentTolerance) / stride) - 1) * stride;\n return clampCollectionRailOffset(layout, target);\n}\n\nexport function getCollectionRailItemOffset(layout: CollectionRailLayout, index: number): number {\n if (!Number.isInteger(index) || index < 0 || index >= layout.count) throw new RangeError(\"CollectionRail item index is unavailable\");\n return clampCollectionRailOffset(layout, index * (layout.itemWidth + layout.gap));\n}\n\n/** Reveal a focused item's full bounds, without treating it as a selection. */\nexport function getCollectionRailRevealOffset(layout: CollectionRailLayout, offset: number, index: number): number {\n getCollectionRailItemOffset(layout, index);\n const current = clampCollectionRailOffset(layout, offset);\n const start = index * (layout.itemWidth + layout.gap), end = start + layout.itemWidth;\n return clampCollectionRailOffset(layout, start < current ? start : end > current + layout.viewport ? end - layout.viewport : current);\n}\n\n/** Native uses an explicitly LTR scroll host; its RTL row is physically reversed. */\nexport function getCollectionRailPhysicalOffset(layout: CollectionRailLayout, logicalOffset: number, direction: \"ltr\" | \"rtl\"): number {\n const offset = clampCollectionRailOffset(layout, logicalOffset);\n return direction === \"rtl\" ? layout.maxOffset - offset : offset;\n}\n\nexport function getCollectionRailKeyboardIntent(key: string, direction: \"ltr\" | \"rtl\"): CollectionRailIntent | undefined {\n if (key === \"Home\") return \"first\";\n if (key === \"End\") return \"last\";\n if (key === \"ArrowRight\") return direction === \"rtl\" ? \"previous\" : \"next\";\n if (key === \"ArrowLeft\") return direction === \"rtl\" ? \"next\" : \"previous\";\n return undefined;\n}\n"]}
|
package/dist/communication.d.ts
CHANGED
|
@@ -26,4 +26,29 @@ export type SearchResponse<T> = Readonly<{
|
|
|
26
26
|
}>;
|
|
27
27
|
}>[];
|
|
28
28
|
}>;
|
|
29
|
+
/** Room data stays controlled: only the product can acknowledge persistence or grant permissions. */
|
|
30
|
+
export type ChatRoomProfileValue = Readonly<{
|
|
31
|
+
name: string;
|
|
32
|
+
description: string;
|
|
33
|
+
photoUrl: string | null;
|
|
34
|
+
}>;
|
|
35
|
+
export type ChatRoomMember = Readonly<{
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
detail?: string;
|
|
39
|
+
photoUrl?: string;
|
|
40
|
+
selected?: boolean;
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
}>;
|
|
43
|
+
export type ChatRoomConfirmation = Readonly<{
|
|
44
|
+
destructive?: boolean;
|
|
45
|
+
label: string;
|
|
46
|
+
title: string;
|
|
47
|
+
description: string;
|
|
48
|
+
confirmLabel: string;
|
|
49
|
+
cancelLabel: string;
|
|
50
|
+
errorLabel: string;
|
|
51
|
+
onConfirm: () => void | Promise<void>;
|
|
52
|
+
}>;
|
|
53
|
+
export declare function canSubmitChatRoom(profile: ChatRoomProfileValue, memberIds?: readonly string[]): boolean;
|
|
29
54
|
//# sourceMappingURL=communication.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"communication.d.ts","sourceRoot":"","sources":["../src/communication.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACzI,4FAA4F;AAC5F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,SAAK;;;;;EAG9E;AACD,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACpF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAC,IAAI,GAAE,IAAI,CAEjE;AACD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,QAAQ,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,WAAW,EAAE,SAAS,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAA,KAAK,CAAC,EAAC,QAAQ,CAAC;YAAC,KAAK,EAAC,MAAM,CAAC;YAAA,GAAG,EAAC,MAAM,CAAA;SAAC,CAAC,CAAA;KAAC,CAAC,EAAE,CAAA;CAAE,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"communication.d.ts","sourceRoot":"","sources":["../src/communication.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACzI,4FAA4F;AAC5F,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,SAAK;;;;;EAG9E;AACD,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AACpF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAC,IAAI,GAAE,IAAI,CAEjE;AACD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,QAAQ,CAAC;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,WAAW,EAAE,SAAS,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAA,KAAK,CAAC,EAAC,QAAQ,CAAC;YAAC,KAAK,EAAC,MAAM,CAAC;YAAA,GAAG,EAAC,MAAM,CAAA;SAAC,CAAC,CAAA;KAAC,CAAC,EAAE,CAAA;CAAE,CAAC,CAAC;AAEtJ,qGAAqG;AACrG,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC;AAC5G,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAChJ,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAAC;AAChO,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,EAAE,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEvG"}
|
package/dist/communication.js
CHANGED
|
@@ -8,4 +8,7 @@ export function validateReplyTarget(target) {
|
|
|
8
8
|
if (target !== null && !target.id.trim())
|
|
9
9
|
throw new TypeError("Reply target requires the actual message ID");
|
|
10
10
|
}
|
|
11
|
+
export function canSubmitChatRoom(profile, memberIds) {
|
|
12
|
+
return profile.name.trim().length > 0 && (memberIds === undefined || (memberIds.length > 0 && memberIds.every(id => id.trim().length > 0) && new Set(memberIds).size === memberIds.length));
|
|
13
|
+
}
|
|
11
14
|
//# sourceMappingURL=communication.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"communication.js","sourceRoot":"","sources":["../src/communication.ts"],"names":[],"mappings":"AACA,4FAA4F;AAC5F,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,GAAW,EAAE,SAAS,GAAG,EAAE;IAC9E,IAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAE,GAAG,IAAE,CAAC,IAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAE,SAAS,GAAC,CAAC,IAAE,SAAS,GAAC,CAAC;QAAC,MAAM,IAAI,UAAU,CAAC,wDAAwD,CAAC,CAAC;IAC5K,OAAO,EAAE,IAAI,EAAC,KAAK,CAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,KAAK,CAAC,MAAM,GAAC,GAAG,IAAE,SAAS,EAAC,QAAQ,EAAC,KAAK,CAAC,MAAM,GAAC,GAAG,EAAE,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAwB;IAC3D,IAAG,MAAM,KAAG,IAAI,IAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QAAC,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;AACxG,CAAC","sourcesContent":["export type ComposerLengthFeedback = Readonly<{ label: string; formatCount: (used: number, max: number) => string; threshold?: number }>;\n/** Match the controlled text/maxLength UTF-16 unit; do not silently trim a user's draft. */\nexport function resolveComposerLimit(value: string, max: number, threshold = .8) {\n if(!Number.isSafeInteger(max)||max<=0||!Number.isFinite(threshold)||threshold<0||threshold>1)throw new RangeError(\"Composer limit must be positive and threshold in [0,1]\");\n return { used:value.length,max,near:value.length/max>=threshold,exceeded:value.length>max };\n}\nexport type ReplyTarget = Readonly<{ id: string; author: string; excerpt: string }>;\nexport function validateReplyTarget(target: ReplyTarget|null):void {\n if(target!==null&&!target.id.trim())throw new TypeError(\"Reply target requires the actual message ID\");\n}\nexport type SearchResponse<T> = Readonly<{ result: T; suggestions: readonly Readonly<{query: string;match?:Readonly<{start:number;end:number}>}>[] }>;\n"]}
|
|
1
|
+
{"version":3,"file":"communication.js","sourceRoot":"","sources":["../src/communication.ts"],"names":[],"mappings":"AACA,4FAA4F;AAC5F,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,GAAW,EAAE,SAAS,GAAG,EAAE;IAC9E,IAAG,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAE,GAAG,IAAE,CAAC,IAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAE,SAAS,GAAC,CAAC,IAAE,SAAS,GAAC,CAAC;QAAC,MAAM,IAAI,UAAU,CAAC,wDAAwD,CAAC,CAAC;IAC5K,OAAO,EAAE,IAAI,EAAC,KAAK,CAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,KAAK,CAAC,MAAM,GAAC,GAAG,IAAE,SAAS,EAAC,QAAQ,EAAC,KAAK,CAAC,MAAM,GAAC,GAAG,EAAE,CAAC;AAC7F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAwB;IAC3D,IAAG,MAAM,KAAG,IAAI,IAAE,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;QAAC,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAC;AACxG,CAAC;AAOD,MAAM,UAAU,iBAAiB,CAAC,OAA6B,EAAE,SAA6B;IAC7F,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7L,CAAC","sourcesContent":["export type ComposerLengthFeedback = Readonly<{ label: string; formatCount: (used: number, max: number) => string; threshold?: number }>;\n/** Match the controlled text/maxLength UTF-16 unit; do not silently trim a user's draft. */\nexport function resolveComposerLimit(value: string, max: number, threshold = .8) {\n if(!Number.isSafeInteger(max)||max<=0||!Number.isFinite(threshold)||threshold<0||threshold>1)throw new RangeError(\"Composer limit must be positive and threshold in [0,1]\");\n return { used:value.length,max,near:value.length/max>=threshold,exceeded:value.length>max };\n}\nexport type ReplyTarget = Readonly<{ id: string; author: string; excerpt: string }>;\nexport function validateReplyTarget(target: ReplyTarget|null):void {\n if(target!==null&&!target.id.trim())throw new TypeError(\"Reply target requires the actual message ID\");\n}\nexport type SearchResponse<T> = Readonly<{ result: T; suggestions: readonly Readonly<{query: string;match?:Readonly<{start:number;end:number}>}>[] }>;\n\n/** Room data stays controlled: only the product can acknowledge persistence or grant permissions. */\nexport type ChatRoomProfileValue = Readonly<{ name: string; description: string; photoUrl: string | null }>;\nexport type ChatRoomMember = Readonly<{ id: string; name: string; detail?: string; photoUrl?: string; selected?: boolean; disabled?: boolean }>;\nexport type ChatRoomConfirmation = Readonly<{ destructive?: boolean; label: string; title: string; description: string; confirmLabel: string; cancelLabel: string; errorLabel: string; onConfirm: () => void | Promise<void> }>;\nexport function canSubmitChatRoom(profile: ChatRoomProfileValue, memberIds?: readonly string[]): boolean {\n return profile.name.trim().length > 0 && (memberIds === undefined || (memberIds.length > 0 && memberIds.every(id => id.trim().length > 0) && new Set(memberIds).size === memberIds.length));\n}\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { type ResolvedTheme, type ThemeColors } from "./colors.js";
|
|
1
2
|
import { control, spacing, type FontWeightValue, type TextVariant } from "./foundations.js";
|
|
2
|
-
export { iconButtonEdges, iconButtonRecipe, resolveIconButtonEdgeOverhang, resolveIconButtonPresentation, type IconButtonEdge, type IconButtonShape, type IconButtonSize, type IconButtonTone, type ResolvedIconButtonPresentation, } from "./icon-button-recipe.js";
|
|
3
|
+
export { iconButtonEdges, iconButtonRecipe, resolveIconButtonBadgeOffset, resolveIconButtonEdgeOverhang, resolveIconButtonPresentation, validateIconButtonElevation, type IconButtonEdge, type IconButtonShape, type IconButtonSize, type IconButtonTone, type ResolvedIconButtonPresentation, } from "./icon-button-recipe.js";
|
|
3
4
|
export { counterBadgeDefaults, counterBadgeRecipe, formatCounterBadgeCount, type CounterBadgeSize, type CounterBadgeTone, type CounterBadgeVariant, } from "./counter-badge-recipe.js";
|
|
4
5
|
export { progressRecipe, resolveProgressSegments, type ProgressShape, type ProgressSize, type ProgressTone, } from "./progress-recipe.js";
|
|
5
6
|
export type { BottomNavigationDensity, BottomNavigationDistribution, BottomNavigationPresentation, } from "./bottom-navigation-defaults.js";
|
|
@@ -297,7 +298,20 @@ export declare const selectionGroupRecipe: {
|
|
|
297
298
|
readonly states: {
|
|
298
299
|
readonly disabledOpacity: 0.5;
|
|
299
300
|
};
|
|
301
|
+
/**
|
|
302
|
+
* CheckboxGroup `presentation="chips"` overflow (2026-10-23), the same meaning as SegmentedControl `overflow`:
|
|
303
|
+
* `wrap` breaks chips onto more lines, `scroll` keeps one horizontal line. Yajalal TeamGameFilter.tsx built a
|
|
304
|
+
* multi-select chip rail from a raw ScrollView because only single-select SegmentedControl could scroll.
|
|
305
|
+
* The scroll content keeps `scrollInset` on every side (and the scroller pulls back by the same amount, so the
|
|
306
|
+
* chips stay aligned with the column): the focus ring (2 + offset 2) and the small chip hit slop (4) would
|
|
307
|
+
* otherwise be clipped by the scrollport, and the last chip ends with the same gap as the first starts.
|
|
308
|
+
*/
|
|
309
|
+
readonly overflow: {
|
|
310
|
+
readonly default: "wrap";
|
|
311
|
+
readonly scrollInset: 4;
|
|
312
|
+
};
|
|
300
313
|
};
|
|
314
|
+
export type SelectionGroupOverflow = "wrap" | "scroll";
|
|
301
315
|
export type SelectionGroupOrientation = keyof typeof selectionGroupRecipe.orientations;
|
|
302
316
|
export type SelectionGroupPresentation = keyof typeof selectionGroupRecipe.orientations.vertical.gap;
|
|
303
317
|
export type BadgeTone = "neutral"
|
|
@@ -313,9 +327,29 @@ export type BadgeTone = "neutral"
|
|
|
313
327
|
| "strong" | "brand" | "info" | "success" | "warning" | "attention" | "danger";
|
|
314
328
|
export type BadgeSize = "small" | "medium";
|
|
315
329
|
export type BadgeVariant = "filled" | "outline";
|
|
330
|
+
/**
|
|
331
|
+
* Values a `leading`/`trailing` render callback receives. `strokeWidth` follows the Icon weight scale like
|
|
332
|
+
* BottomNavigation's icon context, so a product glyph renderer (Lucide etc.) draws the same line weight as HJM Icon.
|
|
333
|
+
* Before 2026-10-23 the context had no stroke, so Diairy passed a whole Icon node instead of the callback.
|
|
334
|
+
*/
|
|
316
335
|
export type BadgeAdornmentContext = Readonly<{
|
|
317
336
|
color: string;
|
|
318
337
|
size: number;
|
|
338
|
+
strokeWidth: number;
|
|
339
|
+
}>;
|
|
340
|
+
/**
|
|
341
|
+
* Product-defined classification color for one Badge (game series, contract grade…), one value per theme.
|
|
342
|
+
* Classification is not a status or the brand: before 2026-10-23 Yajalal nested an HjmNativeProvider with a
|
|
343
|
+
* brandPalette around a single Badge to paint it, which also re-scoped every token under it (brand-boundary §1).
|
|
344
|
+
* The product owns the hue; HJM owns the frame and picks/validates the label ink (WCAG AA 4.5).
|
|
345
|
+
*/
|
|
346
|
+
export type BadgeCategoryColor = Readonly<Record<ResolvedTheme, string>>;
|
|
347
|
+
export type ResolvedBadgeCategoryColor = Readonly<{
|
|
348
|
+
/** Plate fill; null for the outline variant. */
|
|
349
|
+
background: string | null;
|
|
350
|
+
content: string;
|
|
351
|
+
/** Outline stroke; null for the filled variant. */
|
|
352
|
+
border: string | null;
|
|
319
353
|
}>;
|
|
320
354
|
export declare const badgeRecipe: {
|
|
321
355
|
readonly slots: readonly ["root", "icon", "label", "trailing"];
|
|
@@ -523,7 +557,25 @@ export declare const badgeRecipe: {
|
|
|
523
557
|
readonly radius: "sm";
|
|
524
558
|
readonly borderWidth: 1;
|
|
525
559
|
readonly fontWeight: "700";
|
|
560
|
+
/** Adornment line weight handed to `leading`/`trailing` callbacks (Icon `regular`). */
|
|
561
|
+
readonly iconStrokeWidth: 2;
|
|
562
|
+
/**
|
|
563
|
+
* `categoryColor` ink. Filled plates take whichever of the light ink (`onStatusFill`, as the status plates) or the
|
|
564
|
+
* dark ink (light theme `text`) reads better on the product fill; outline badges use the color itself as label and
|
|
565
|
+
* stroke. Either way the label must reach `minimumContrast` or the badge throws — the product must pick another
|
|
566
|
+
* shade per theme instead of shipping an unreadable classification.
|
|
567
|
+
*/
|
|
568
|
+
readonly category: {
|
|
569
|
+
readonly darkInk: string;
|
|
570
|
+
readonly minimumContrast: 4.5;
|
|
571
|
+
};
|
|
526
572
|
};
|
|
573
|
+
/** Resolves a product classification color for the active theme and verifies label contrast (AA 4.5). */
|
|
574
|
+
export declare function resolveBadgeCategoryColor(color: BadgeCategoryColor, options: Readonly<{
|
|
575
|
+
theme: ResolvedTheme;
|
|
576
|
+
variant: BadgeVariant;
|
|
577
|
+
palette: Readonly<ThemeColors>;
|
|
578
|
+
}>): ResolvedBadgeCategoryColor;
|
|
527
579
|
export type SearchFieldSize = "medium" | "large";
|
|
528
580
|
/** Search is a field specialization with stable affordance and clear targets. */
|
|
529
581
|
export declare const searchFieldRecipe: {
|
|
@@ -710,11 +762,19 @@ export declare const chipRecipe: {
|
|
|
710
762
|
readonly offset: 2;
|
|
711
763
|
};
|
|
712
764
|
};
|
|
765
|
+
/**
|
|
766
|
+
* Divider line pattern (2026-10-23). `dashed` separates parts of one surface that continue the same story ("the next
|
|
767
|
+
* story starts here") where a solid rule would split a card into two. Diairy drew it twice — Web `.cozy-nest-next`
|
|
768
|
+
* `border-block-start: 1px dashed` and an SVG `DashedRule` on Native because RN `borderStyle: "dashed"` on one side
|
|
769
|
+
* renders solid on iOS (2026-09-19 simulator) — with different dash lengths.
|
|
770
|
+
*/
|
|
771
|
+
export type DividerLineStyle = "solid" | "dashed";
|
|
713
772
|
export declare const dividerRecipe: {
|
|
714
773
|
readonly slots: readonly ["root", "label"];
|
|
715
774
|
readonly defaults: {
|
|
716
775
|
readonly orientation: "horizontal";
|
|
717
776
|
readonly inset: "none";
|
|
777
|
+
readonly lineStyle: "solid";
|
|
718
778
|
};
|
|
719
779
|
readonly color: Readonly<{
|
|
720
780
|
source: "theme";
|
|
@@ -727,7 +787,15 @@ export declare const dividerRecipe: {
|
|
|
727
787
|
readonly start: 16;
|
|
728
788
|
readonly both: 16;
|
|
729
789
|
};
|
|
790
|
+
/** Dash and gap along the line, at `thickness`; the pattern starts with a dash at the line's start edge. */
|
|
791
|
+
readonly lineStyles: {
|
|
792
|
+
readonly dashed: {
|
|
793
|
+
readonly dash: 4;
|
|
794
|
+
readonly gap: 4;
|
|
795
|
+
};
|
|
796
|
+
};
|
|
730
797
|
};
|
|
798
|
+
export declare function validateDividerLineStyle(value: unknown): asserts value is DividerLineStyle;
|
|
731
799
|
export declare const listRecipe: {
|
|
732
800
|
readonly slots: readonly ["root", "item", "separator"];
|
|
733
801
|
readonly defaults: {
|
|
@@ -767,12 +835,19 @@ export declare const listRecipe: {
|
|
|
767
835
|
export type ListRowDensity = "compact" | "comfortable" | "relaxed" | "spacious";
|
|
768
836
|
/** Frame geometry the ListRow paints around its leading slot. */
|
|
769
837
|
export type ListRowLeadingShape = "square" | "circle";
|
|
838
|
+
/**
|
|
839
|
+
* Fixed mark at the row's trailing end. `disclosure`: activating the row opens another screen (iOS disclosure
|
|
840
|
+
* indicator). 2026-10-23 audit: products drew the chevron into `trailing` themselves (Yajalal ChevronRight ×10,
|
|
841
|
+
* Utilverse UiGlyph "next" ×24, Spint ×3), each with its own size, color and RTL handling.
|
|
842
|
+
*/
|
|
843
|
+
export type ListRowTrailingAccessory = "none" | "disclosure";
|
|
770
844
|
export declare const listRowRecipe: {
|
|
771
|
-
readonly slots: readonly ["root", "leading", "content", "title", "description", "trailing"];
|
|
845
|
+
readonly slots: readonly ["root", "leading", "content", "title", "description", "trailing", "accessory"];
|
|
772
846
|
readonly defaults: {
|
|
773
847
|
readonly density: "comfortable";
|
|
774
848
|
readonly selected: false;
|
|
775
849
|
readonly tone: "default";
|
|
850
|
+
readonly trailingAccessory: "none";
|
|
776
851
|
};
|
|
777
852
|
readonly tones: {
|
|
778
853
|
readonly default: {
|
|
@@ -869,6 +944,24 @@ export declare const listRowRecipe: {
|
|
|
869
944
|
readonly glyph: "sm";
|
|
870
945
|
readonly textVariant: "caption";
|
|
871
946
|
};
|
|
947
|
+
/**
|
|
948
|
+
* Order inside the row command: leading → content → trailing → accessory; a `trailingAction` stays outside, after
|
|
949
|
+
* it. The mark is decorative (the row's link/button role already says it is activatable), follows the reading
|
|
950
|
+
* direction (`chevronEnd` mirrors in RTL) and sits `gap` after any trailing value, the iOS detail → chevron pairing.
|
|
951
|
+
*/
|
|
952
|
+
readonly accessories: {
|
|
953
|
+
readonly disclosure: {
|
|
954
|
+
readonly icon: "chevronEnd";
|
|
955
|
+
readonly glyph: "sm";
|
|
956
|
+
readonly weight: "regular";
|
|
957
|
+
readonly color: Readonly<{
|
|
958
|
+
source: "theme";
|
|
959
|
+
key: "textWeak";
|
|
960
|
+
alpha?: number;
|
|
961
|
+
}>;
|
|
962
|
+
readonly gap: 8;
|
|
963
|
+
};
|
|
964
|
+
};
|
|
872
965
|
readonly states: {
|
|
873
966
|
readonly pressedBackground: Readonly<{
|
|
874
967
|
source: "theme";
|
|
@@ -883,6 +976,19 @@ export declare const listRowRecipe: {
|
|
|
883
976
|
readonly disabledOpacity: 0.5;
|
|
884
977
|
};
|
|
885
978
|
};
|
|
979
|
+
/**
|
|
980
|
+
* ChoiceRow per-item picture (2026-10-23: utilverse's shell theme row showed ThemeArtwork per choice and so rebuilt
|
|
981
|
+
* ListRow + Sheet + RadioGroup instead of ChoiceRow). The sheet draws each item's `leading` in the same box as the
|
|
982
|
+
* row's ListRow leading (40, centered, clipped), so the selected art reads the same in the row and in the sheet.
|
|
983
|
+
* When any item has a picture, items without one keep the empty box so every label starts on one line.
|
|
984
|
+
*/
|
|
985
|
+
export declare const choiceRowRecipe: {
|
|
986
|
+
readonly itemLeading: {
|
|
987
|
+
readonly size: 40;
|
|
988
|
+
readonly align: "center";
|
|
989
|
+
};
|
|
990
|
+
};
|
|
991
|
+
export declare function validateListRowTrailingAccessory(value: unknown): asserts value is ListRowTrailingAccessory;
|
|
886
992
|
export type AccordionDensity = "compact" | "comfortable";
|
|
887
993
|
export declare const accordionRecipe: {
|
|
888
994
|
readonly slots: readonly ["root", "item", "header", "trigger", "title", "indicator", "panel", "divider"];
|
|
@@ -3182,10 +3288,19 @@ export declare const avatarRecipe: {
|
|
|
3182
3288
|
readonly defaults: {
|
|
3183
3289
|
readonly size: "medium";
|
|
3184
3290
|
readonly shape: "circle";
|
|
3291
|
+
readonly frame: "outlined";
|
|
3292
|
+
readonly accessoryPlacement: "bottom-end";
|
|
3185
3293
|
};
|
|
3294
|
+
/**
|
|
3295
|
+
* 2026-10-23: 번뚝 UserAvatar(22·28·32·44)와 Native의 24 하한 때문에 Avatar를 쓰지 못했다. 임의 px 대신
|
|
3296
|
+
* 실사용 지름을 단계로 둔다. `touch` 44는 터치 대상 지름이자 Native의 기존 기본값이다(Avatar 자체는 누르는 대상이 아님).
|
|
3297
|
+
*/
|
|
3186
3298
|
readonly sizes: {
|
|
3299
|
+
readonly xxsmall: 22;
|
|
3300
|
+
readonly xsmall: 28;
|
|
3187
3301
|
readonly small: 32;
|
|
3188
3302
|
readonly medium: 40;
|
|
3303
|
+
readonly touch: 44;
|
|
3189
3304
|
readonly large: 48;
|
|
3190
3305
|
readonly xlarge: 64;
|
|
3191
3306
|
};
|
|
@@ -3193,6 +3308,47 @@ export declare const avatarRecipe: {
|
|
|
3193
3308
|
readonly rounded: "md";
|
|
3194
3309
|
readonly circle: "full";
|
|
3195
3310
|
};
|
|
3311
|
+
/**
|
|
3312
|
+
* 테두리·배경 표현. `outlined`가 기존 모습이다. `surface`는 테두리 없이 바탕만, `none`은 제품 그림(생성 SVG 등)이
|
|
3313
|
+
* 액자를 채울 때 바탕·테두리를 모두 뺀다 — 번뚝은 투명한 원 안에 SVG를 채운다(2026-10-23).
|
|
3314
|
+
*/
|
|
3315
|
+
readonly frames: {
|
|
3316
|
+
readonly outlined: {
|
|
3317
|
+
readonly background: Readonly<{
|
|
3318
|
+
source: "theme";
|
|
3319
|
+
key: "bg";
|
|
3320
|
+
alpha?: number;
|
|
3321
|
+
}>;
|
|
3322
|
+
readonly border: Readonly<{
|
|
3323
|
+
source: "theme";
|
|
3324
|
+
key: "border";
|
|
3325
|
+
alpha?: number;
|
|
3326
|
+
}>;
|
|
3327
|
+
readonly borderWidth: 1;
|
|
3328
|
+
};
|
|
3329
|
+
readonly surface: {
|
|
3330
|
+
readonly background: Readonly<{
|
|
3331
|
+
source: "theme";
|
|
3332
|
+
key: "bg";
|
|
3333
|
+
alpha?: number;
|
|
3334
|
+
}>;
|
|
3335
|
+
readonly border: null;
|
|
3336
|
+
readonly borderWidth: 0;
|
|
3337
|
+
};
|
|
3338
|
+
readonly none: {
|
|
3339
|
+
readonly background: null;
|
|
3340
|
+
readonly border: null;
|
|
3341
|
+
readonly borderWidth: 0;
|
|
3342
|
+
};
|
|
3343
|
+
};
|
|
3344
|
+
/**
|
|
3345
|
+
* 모서리 표식(팀 배지·상태 점·편집 표시). `offset`은 Asset·IconTile과 같이 상자 모서리 **바깥으로** 나가는 거리다.
|
|
3346
|
+
* Avatar는 0이라 경계 상자 모서리에 붙어 행 배치가 바뀌지 않는다. 야잘알 PlayerAvatar가 `right: 0, bottom: 0`으로
|
|
3347
|
+
* 팀 배지를 얹던 자리다(2026-10-23).
|
|
3348
|
+
*/
|
|
3349
|
+
readonly accessory: {
|
|
3350
|
+
readonly offset: 0;
|
|
3351
|
+
};
|
|
3196
3352
|
readonly background: Readonly<{
|
|
3197
3353
|
source: "theme";
|
|
3198
3354
|
key: "bg";
|
|
@@ -3215,6 +3371,20 @@ export declare const avatarRecipe: {
|
|
|
3215
3371
|
* Initials text step for an avatar diameter, shared by Web size tokens and Native numeric sizes
|
|
3216
3372
|
* (2026-10-17 comparison: Native drew 12pt brand-colored initials at every size).
|
|
3217
3373
|
*/
|
|
3374
|
+
export type AvatarFrame = keyof typeof avatarRecipe.frames;
|
|
3375
|
+
/** Corner a small mark sits on. Shared by Avatar and IconTile so products name the corner the same way. */
|
|
3376
|
+
export type CornerAccessoryPlacement = "top-end" | "bottom-end";
|
|
3377
|
+
export declare const cornerAccessoryPlacements: readonly ["top-end", "bottom-end"];
|
|
3378
|
+
/**
|
|
3379
|
+
* Diameter for an Avatar `size`: a named step, or (Native compatibility) a number of points. Numbers below the
|
|
3380
|
+
* smallest step are rejected — the 24 floor rejected Burntok's 22 even though initials still fit at 22 (label 12).
|
|
3381
|
+
*/
|
|
3382
|
+
export declare function resolveAvatarSize(size: AvatarSize | number): number;
|
|
3383
|
+
export declare function validateAvatarPresentation(options: Readonly<{
|
|
3384
|
+
shape?: string;
|
|
3385
|
+
frame?: string;
|
|
3386
|
+
accessoryPlacement?: string;
|
|
3387
|
+
}>): void;
|
|
3218
3388
|
export declare function resolveAvatarInitialsTextVariant(size: number): "label" | "body" | "title";
|
|
3219
3389
|
export type StatisticDensity = "compact" | "comfortable";
|
|
3220
3390
|
export type StatisticPresentation = "plain" | "surface";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-recipes.d.ts","sourceRoot":"","sources":["../src/component-recipes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-recipes.d.ts","sourceRoot":"","sources":["../src/component-recipes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { solidAccentColor } from "./color-references.js";
|
|
2
|
+
import { THEMES } from "./colors.js";
|
|
3
|
+
import { contrastRatio } from "./palette-contrast.js";
|
|
2
4
|
import { collectionItemContract, fieldFrameContract, floatingSurfaceContract, focusIndicatorContract, formSupportContract, } from "./component-contracts.js";
|
|
3
5
|
import { backdrop, breakpoint, control, glyph, layer, largeTextThreshold, layout, fontWeight, motion, motionPreset, opacity, radius, spacing, stroke, typography, } from "./foundations.js";
|
|
4
6
|
import { buttonRecipe } from "./base-recipes.js";
|
|
5
7
|
import { semanticColors } from "./semantic-colors.js";
|
|
6
8
|
import { tooltipDescriptorDefaults } from "./tooltip.js";
|
|
7
9
|
import { bottomNavigationRecipeDefaults } from "./bottom-navigation-defaults.js";
|
|
8
|
-
export { iconButtonEdges, iconButtonRecipe, resolveIconButtonEdgeOverhang, resolveIconButtonPresentation, } from "./icon-button-recipe.js";
|
|
10
|
+
export { iconButtonEdges, iconButtonRecipe, resolveIconButtonBadgeOffset, resolveIconButtonEdgeOverhang, resolveIconButtonPresentation, validateIconButtonElevation, } from "./icon-button-recipe.js";
|
|
9
11
|
export { counterBadgeDefaults, counterBadgeRecipe, formatCounterBadgeCount, } from "./counter-badge-recipe.js";
|
|
10
12
|
export { progressRecipe, resolveProgressSegments, } from "./progress-recipe.js";
|
|
11
13
|
export const textRecipe = {
|
|
@@ -136,6 +138,15 @@ export const selectionGroupRecipe = {
|
|
|
136
138
|
error: formSupportContract.error,
|
|
137
139
|
supportGap: formSupportContract.gap,
|
|
138
140
|
states: { disabledOpacity: opacity.disabled },
|
|
141
|
+
/**
|
|
142
|
+
* CheckboxGroup `presentation="chips"` overflow (2026-10-23), the same meaning as SegmentedControl `overflow`:
|
|
143
|
+
* `wrap` breaks chips onto more lines, `scroll` keeps one horizontal line. Yajalal TeamGameFilter.tsx built a
|
|
144
|
+
* multi-select chip rail from a raw ScrollView because only single-select SegmentedControl could scroll.
|
|
145
|
+
* The scroll content keeps `scrollInset` on every side (and the scroller pulls back by the same amount, so the
|
|
146
|
+
* chips stay aligned with the column): the focus ring (2 + offset 2) and the small chip hit slop (4) would
|
|
147
|
+
* otherwise be clipped by the scrollport, and the last chip ends with the same gap as the first starts.
|
|
148
|
+
*/
|
|
149
|
+
overflow: { default: "wrap", scrollInset: spacing.xxs },
|
|
139
150
|
};
|
|
140
151
|
export const badgeRecipe = {
|
|
141
152
|
slots: ["root", "icon", "label", "trailing"],
|
|
@@ -181,7 +192,40 @@ export const badgeRecipe = {
|
|
|
181
192
|
radius: "sm",
|
|
182
193
|
borderWidth: stroke.default,
|
|
183
194
|
fontWeight: fontWeight.bold,
|
|
195
|
+
/** Adornment line weight handed to `leading`/`trailing` callbacks (Icon `regular`). */
|
|
196
|
+
iconStrokeWidth: iconRecipe.weights.regular,
|
|
197
|
+
/**
|
|
198
|
+
* `categoryColor` ink. Filled plates take whichever of the light ink (`onStatusFill`, as the status plates) or the
|
|
199
|
+
* dark ink (light theme `text`) reads better on the product fill; outline badges use the color itself as label and
|
|
200
|
+
* stroke. Either way the label must reach `minimumContrast` or the badge throws — the product must pick another
|
|
201
|
+
* shade per theme instead of shipping an unreadable classification.
|
|
202
|
+
*/
|
|
203
|
+
category: { darkInk: THEMES.light.text, minimumContrast: 4.5 },
|
|
184
204
|
};
|
|
205
|
+
/** Resolves a product classification color for the active theme and verifies label contrast (AA 4.5). */
|
|
206
|
+
export function resolveBadgeCategoryColor(color, options) {
|
|
207
|
+
const { theme, variant, palette } = options;
|
|
208
|
+
const value = color?.[theme];
|
|
209
|
+
if (typeof value !== "string")
|
|
210
|
+
throw new TypeError(`Badge categoryColor needs a ${theme} color`);
|
|
211
|
+
const minimum = badgeRecipe.category.minimumContrast;
|
|
212
|
+
if (variant === "outline") {
|
|
213
|
+
for (const background of [palette.bg, palette.surface]) {
|
|
214
|
+
const ratio = contrastRatio(value, background);
|
|
215
|
+
if (ratio < minimum) {
|
|
216
|
+
throw new RangeError(`Badge categoryColor ${value} reads ${ratio.toFixed(2)}:1 on the ${theme} background ${background}; outline labels need ${minimum}:1`);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return { background: null, content: value, border: value };
|
|
220
|
+
}
|
|
221
|
+
const [content, ratio] = [palette.onStatusFill, badgeRecipe.category.darkInk]
|
|
222
|
+
.map(ink => [ink, contrastRatio(ink, value)])
|
|
223
|
+
.reduce((best, next) => (next[1] > best[1] ? next : best));
|
|
224
|
+
if (ratio < minimum) {
|
|
225
|
+
throw new RangeError(`Badge categoryColor ${value} (${theme}) reaches only ${ratio.toFixed(2)}:1 with either label ink; filled badges need ${minimum}:1`);
|
|
226
|
+
}
|
|
227
|
+
return { background: value, content, border: null };
|
|
228
|
+
}
|
|
185
229
|
/** Search is a field specialization with stable affordance and clear targets. */
|
|
186
230
|
export const searchFieldRecipe = {
|
|
187
231
|
slots: ["root", "leading", "input", "trailing", "clear", "spinner"],
|
|
@@ -292,7 +336,7 @@ export const chipRecipe = {
|
|
|
292
336
|
};
|
|
293
337
|
export const dividerRecipe = {
|
|
294
338
|
slots: ["root", "label"],
|
|
295
|
-
defaults: { orientation: "horizontal", inset: "none" },
|
|
339
|
+
defaults: { orientation: "horizontal", inset: "none", lineStyle: "solid" },
|
|
296
340
|
color: semanticColors.border.default,
|
|
297
341
|
thickness: stroke.subtle,
|
|
298
342
|
insets: {
|
|
@@ -300,7 +344,15 @@ export const dividerRecipe = {
|
|
|
300
344
|
start: spacing.md,
|
|
301
345
|
both: spacing.md,
|
|
302
346
|
},
|
|
347
|
+
/** Dash and gap along the line, at `thickness`; the pattern starts with a dash at the line's start edge. */
|
|
348
|
+
lineStyles: {
|
|
349
|
+
dashed: { dash: 4, gap: 4 },
|
|
350
|
+
},
|
|
303
351
|
};
|
|
352
|
+
export function validateDividerLineStyle(value) {
|
|
353
|
+
if (value !== "solid" && value !== "dashed")
|
|
354
|
+
throw new TypeError(`Unsupported Divider lineStyle: ${String(value)}`);
|
|
355
|
+
}
|
|
304
356
|
/**
|
|
305
357
|
* How far a ListRow surface (pressed, hover, selected, focus ring) reaches past the row text on each inline side.
|
|
306
358
|
* 2026-10-17 user decision: the row text sits on its container's content edge (the 16 screen gutter on a default
|
|
@@ -336,8 +388,8 @@ export const listRecipe = {
|
|
|
336
388
|
background: null,
|
|
337
389
|
};
|
|
338
390
|
export const listRowRecipe = {
|
|
339
|
-
slots: ["root", "leading", "content", "title", "description", "trailing"],
|
|
340
|
-
defaults: { density: "comfortable", selected: false, tone: "default" },
|
|
391
|
+
slots: ["root", "leading", "content", "title", "description", "trailing", "accessory"],
|
|
392
|
+
defaults: { density: "comfortable", selected: false, tone: "default", trailingAccessory: "none" },
|
|
341
393
|
// Destructive destinations keep semantic emphasis without renderer-specific title styles.
|
|
342
394
|
tones: { default: { titleColor: semanticColors.content.body }, danger: { titleColor: semanticColors.content.danger } },
|
|
343
395
|
density: {
|
|
@@ -396,12 +448,33 @@ export const listRowRecipe = {
|
|
|
396
448
|
glyph: "sm",
|
|
397
449
|
textVariant: "caption",
|
|
398
450
|
},
|
|
451
|
+
/**
|
|
452
|
+
* Order inside the row command: leading → content → trailing → accessory; a `trailingAction` stays outside, after
|
|
453
|
+
* it. The mark is decorative (the row's link/button role already says it is activatable), follows the reading
|
|
454
|
+
* direction (`chevronEnd` mirrors in RTL) and sits `gap` after any trailing value, the iOS detail → chevron pairing.
|
|
455
|
+
*/
|
|
456
|
+
accessories: {
|
|
457
|
+
disclosure: { icon: "chevronEnd", glyph: "sm", weight: "regular", color: semanticColors.content.decorative, gap: spacing.xs },
|
|
458
|
+
},
|
|
399
459
|
states: {
|
|
400
460
|
pressedBackground: semanticColors.canvas,
|
|
401
461
|
selectedBackground: semanticColors.selection.background,
|
|
402
462
|
disabledOpacity: opacity.disabled,
|
|
403
463
|
},
|
|
404
464
|
};
|
|
465
|
+
/**
|
|
466
|
+
* ChoiceRow per-item picture (2026-10-23: utilverse's shell theme row showed ThemeArtwork per choice and so rebuilt
|
|
467
|
+
* ListRow + Sheet + RadioGroup instead of ChoiceRow). The sheet draws each item's `leading` in the same box as the
|
|
468
|
+
* row's ListRow leading (40, centered, clipped), so the selected art reads the same in the row and in the sheet.
|
|
469
|
+
* When any item has a picture, items without one keep the empty box so every label starts on one line.
|
|
470
|
+
*/
|
|
471
|
+
export const choiceRowRecipe = {
|
|
472
|
+
itemLeading: { size: listRowLeadingSize, align: "center" },
|
|
473
|
+
};
|
|
474
|
+
export function validateListRowTrailingAccessory(value) {
|
|
475
|
+
if (value !== "none" && value !== "disclosure")
|
|
476
|
+
throw new TypeError(`Unsupported ListRow trailingAccessory: ${String(value)}`);
|
|
477
|
+
}
|
|
405
478
|
export const accordionRecipe = {
|
|
406
479
|
slots: ["root", "item", "header", "trigger", "title", "indicator", "panel", "divider"],
|
|
407
480
|
defaults: { density: "comfortable", allowsMultipleExpanded: false },
|
|
@@ -1311,19 +1384,60 @@ export const avatarRecipe = {
|
|
|
1311
1384
|
* 픽셀로 적으면 네 벌이 되기 때문이다. 남은 인원은 제품이 문구로 만든다("+3").
|
|
1312
1385
|
*/
|
|
1313
1386
|
overlapRatio: 0.3,
|
|
1314
|
-
defaults: { size: "medium", shape: "circle" },
|
|
1315
|
-
|
|
1387
|
+
defaults: { size: "medium", shape: "circle", frame: "outlined", accessoryPlacement: "bottom-end" },
|
|
1388
|
+
/**
|
|
1389
|
+
* 2026-10-23: 번뚝 UserAvatar(22·28·32·44)와 Native의 24 하한 때문에 Avatar를 쓰지 못했다. 임의 px 대신
|
|
1390
|
+
* 실사용 지름을 단계로 둔다. `touch` 44는 터치 대상 지름이자 Native의 기존 기본값이다(Avatar 자체는 누르는 대상이 아님).
|
|
1391
|
+
*/
|
|
1392
|
+
sizes: { xxsmall: 22, xsmall: 28, small: 32, medium: 40, touch: 44, large: 48, xlarge: 64 },
|
|
1316
1393
|
shapes: { rounded: "md", circle: "full" },
|
|
1394
|
+
/**
|
|
1395
|
+
* 테두리·배경 표현. `outlined`가 기존 모습이다. `surface`는 테두리 없이 바탕만, `none`은 제품 그림(생성 SVG 등)이
|
|
1396
|
+
* 액자를 채울 때 바탕·테두리를 모두 뺀다 — 번뚝은 투명한 원 안에 SVG를 채운다(2026-10-23).
|
|
1397
|
+
*/
|
|
1398
|
+
frames: {
|
|
1399
|
+
outlined: { background: semanticColors.canvas, border: semanticColors.border.default, borderWidth: 1 },
|
|
1400
|
+
surface: { background: semanticColors.canvas, border: null, borderWidth: 0 },
|
|
1401
|
+
none: { background: null, border: null, borderWidth: 0 },
|
|
1402
|
+
},
|
|
1403
|
+
/**
|
|
1404
|
+
* 모서리 표식(팀 배지·상태 점·편집 표시). `offset`은 Asset·IconTile과 같이 상자 모서리 **바깥으로** 나가는 거리다.
|
|
1405
|
+
* Avatar는 0이라 경계 상자 모서리에 붙어 행 배치가 바뀌지 않는다. 야잘알 PlayerAvatar가 `right: 0, bottom: 0`으로
|
|
1406
|
+
* 팀 배지를 얹던 자리다(2026-10-23).
|
|
1407
|
+
*/
|
|
1408
|
+
accessory: { offset: 0 },
|
|
1317
1409
|
background: semanticColors.canvas,
|
|
1318
1410
|
content: semanticColors.content.secondary,
|
|
1319
1411
|
border: semanticColors.border.default,
|
|
1320
1412
|
/** Initials use the strong emphasis step; their size follows the avatar (Web `.hjm-avatar[data-size]` steps). */
|
|
1321
1413
|
initialsWeight: "strong",
|
|
1322
1414
|
};
|
|
1415
|
+
export const cornerAccessoryPlacements = ["top-end", "bottom-end"];
|
|
1323
1416
|
/**
|
|
1324
|
-
*
|
|
1325
|
-
*
|
|
1417
|
+
* Diameter for an Avatar `size`: a named step, or (Native compatibility) a number of points. Numbers below the
|
|
1418
|
+
* smallest step are rejected — the 24 floor rejected Burntok's 22 even though initials still fit at 22 (label 12).
|
|
1326
1419
|
*/
|
|
1420
|
+
export function resolveAvatarSize(size) {
|
|
1421
|
+
if (typeof size === "number") {
|
|
1422
|
+
if (!Number.isFinite(size) || size < avatarRecipe.sizes.xxsmall) {
|
|
1423
|
+
throw new RangeError(`Avatar size must be at least ${avatarRecipe.sizes.xxsmall}`);
|
|
1424
|
+
}
|
|
1425
|
+
return size;
|
|
1426
|
+
}
|
|
1427
|
+
const step = avatarRecipe.sizes[size];
|
|
1428
|
+
if (step === undefined)
|
|
1429
|
+
throw new TypeError(`Unsupported Avatar size: ${String(size)}`);
|
|
1430
|
+
return step;
|
|
1431
|
+
}
|
|
1432
|
+
export function validateAvatarPresentation(options) {
|
|
1433
|
+
if (options.shape !== undefined && !(options.shape in avatarRecipe.shapes))
|
|
1434
|
+
throw new TypeError(`Unsupported Avatar shape: ${options.shape}`);
|
|
1435
|
+
if (options.frame !== undefined && !(options.frame in avatarRecipe.frames))
|
|
1436
|
+
throw new TypeError(`Unsupported Avatar frame: ${options.frame}`);
|
|
1437
|
+
if (options.accessoryPlacement !== undefined && !cornerAccessoryPlacements.includes(options.accessoryPlacement)) {
|
|
1438
|
+
throw new TypeError(`Unsupported Avatar accessoryPlacement: ${options.accessoryPlacement}`);
|
|
1439
|
+
}
|
|
1440
|
+
}
|
|
1327
1441
|
export function resolveAvatarInitialsTextVariant(size) {
|
|
1328
1442
|
if (size < avatarRecipe.sizes.medium)
|
|
1329
1443
|
return "label";
|