@hjmds/design-contracts 1.1.0 → 1.2.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.
Files changed (198) hide show
  1. package/dist/agreement.d.ts +183 -0
  2. package/dist/agreement.d.ts.map +1 -0
  3. package/dist/agreement.js +137 -0
  4. package/dist/agreement.js.map +1 -0
  5. package/dist/alert-dialog.d.ts +1 -1
  6. package/dist/alert-dialog.d.ts.map +1 -1
  7. package/dist/alert-dialog.js.map +1 -1
  8. package/dist/anchor.d.ts +62 -0
  9. package/dist/anchor.d.ts.map +1 -0
  10. package/dist/anchor.js +43 -0
  11. package/dist/anchor.js.map +1 -0
  12. package/dist/asset.d.ts +94 -0
  13. package/dist/asset.d.ts.map +1 -0
  14. package/dist/asset.js +60 -0
  15. package/dist/asset.js.map +1 -0
  16. package/dist/base-recipes.d.ts +19 -0
  17. package/dist/base-recipes.d.ts.map +1 -1
  18. package/dist/base-recipes.js +17 -0
  19. package/dist/base-recipes.js.map +1 -1
  20. package/dist/behaviors.d.ts +346 -3
  21. package/dist/behaviors.d.ts.map +1 -1
  22. package/dist/behaviors.js +35 -1
  23. package/dist/behaviors.js.map +1 -1
  24. package/dist/bottom-info.d.ts +58 -0
  25. package/dist/bottom-info.d.ts.map +1 -0
  26. package/dist/bottom-info.js +48 -0
  27. package/dist/bottom-info.js.map +1 -0
  28. package/dist/carousel.d.ts +3 -3
  29. package/dist/carousel.js +1 -1
  30. package/dist/carousel.js.map +1 -1
  31. package/dist/catalog.d.ts +1294 -239
  32. package/dist/catalog.d.ts.map +1 -1
  33. package/dist/catalog.js +65 -25
  34. package/dist/catalog.js.map +1 -1
  35. package/dist/collapsible.d.ts +56 -0
  36. package/dist/collapsible.d.ts.map +1 -0
  37. package/dist/collapsible.js +37 -0
  38. package/dist/collapsible.js.map +1 -0
  39. package/dist/component-definitions.d.ts +16 -0
  40. package/dist/component-definitions.d.ts.map +1 -1
  41. package/dist/component-definitions.js +16 -0
  42. package/dist/component-definitions.js.map +1 -1
  43. package/dist/component-recipes.d.ts +76 -4
  44. package/dist/component-recipes.d.ts.map +1 -1
  45. package/dist/component-recipes.js +38 -1
  46. package/dist/component-recipes.js.map +1 -1
  47. package/dist/context-menu.d.ts +53 -0
  48. package/dist/context-menu.d.ts.map +1 -0
  49. package/dist/context-menu.js +44 -0
  50. package/dist/context-menu.js.map +1 -0
  51. package/dist/counter-badge-recipe.d.ts +5 -0
  52. package/dist/counter-badge-recipe.d.ts.map +1 -1
  53. package/dist/counter-badge-recipe.js +5 -0
  54. package/dist/counter-badge-recipe.js.map +1 -1
  55. package/dist/dataviz.d.ts +76 -0
  56. package/dist/dataviz.d.ts.map +1 -0
  57. package/dist/dataviz.js +58 -0
  58. package/dist/dataviz.js.map +1 -0
  59. package/dist/date-range.d.ts +56 -0
  60. package/dist/date-range.d.ts.map +1 -0
  61. package/dist/date-range.js +79 -0
  62. package/dist/date-range.js.map +1 -0
  63. package/dist/design-system-provider.d.ts +24 -0
  64. package/dist/design-system-provider.d.ts.map +1 -1
  65. package/dist/design-system-provider.js +21 -0
  66. package/dist/design-system-provider.js.map +1 -1
  67. package/dist/floating-action-button.d.ts +1 -1
  68. package/dist/floating-action-button.d.ts.map +1 -1
  69. package/dist/floating-action-button.js +3 -1
  70. package/dist/floating-action-button.js.map +1 -1
  71. package/dist/formatters.d.ts +37 -0
  72. package/dist/formatters.d.ts.map +1 -0
  73. package/dist/formatters.js +69 -0
  74. package/dist/formatters.js.map +1 -0
  75. package/dist/heading.d.ts +82 -0
  76. package/dist/heading.d.ts.map +1 -0
  77. package/dist/heading.js +48 -0
  78. package/dist/heading.js.map +1 -0
  79. package/dist/index.d.ts +19 -0
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +19 -0
  82. package/dist/index.js.map +1 -1
  83. package/dist/menubar.d.ts +133 -0
  84. package/dist/menubar.d.ts.map +1 -0
  85. package/dist/menubar.js +80 -0
  86. package/dist/menubar.js.map +1 -0
  87. package/dist/native-platform.d.ts +88 -0
  88. package/dist/native-platform.d.ts.map +1 -0
  89. package/dist/native-platform.js +70 -0
  90. package/dist/native-platform.js.map +1 -0
  91. package/dist/popover.d.ts +19 -4
  92. package/dist/popover.d.ts.map +1 -1
  93. package/dist/popover.js +3 -0
  94. package/dist/popover.js.map +1 -1
  95. package/dist/progress-recipe.d.ts +14 -0
  96. package/dist/progress-recipe.d.ts.map +1 -1
  97. package/dist/progress-recipe.js +14 -1
  98. package/dist/progress-recipe.js.map +1 -1
  99. package/dist/provider-button.d.ts +140 -0
  100. package/dist/provider-button.d.ts.map +1 -0
  101. package/dist/provider-button.js +83 -0
  102. package/dist/provider-button.js.map +1 -0
  103. package/dist/recipes.d.ts +15 -1
  104. package/dist/recipes.d.ts.map +1 -1
  105. package/dist/recipes.js +14 -0
  106. package/dist/recipes.js.map +1 -1
  107. package/dist/sheet.d.ts +16 -0
  108. package/dist/sheet.d.ts.map +1 -1
  109. package/dist/sheet.js +33 -0
  110. package/dist/sheet.js.map +1 -1
  111. package/dist/sidebar.d.ts +168 -0
  112. package/dist/sidebar.d.ts.map +1 -0
  113. package/dist/sidebar.js +98 -0
  114. package/dist/sidebar.js.map +1 -0
  115. package/dist/skip-nav.d.ts +67 -0
  116. package/dist/skip-nav.d.ts.map +1 -0
  117. package/dist/skip-nav.js +47 -0
  118. package/dist/skip-nav.js.map +1 -0
  119. package/dist/tags-input.d.ts +157 -0
  120. package/dist/tags-input.d.ts.map +1 -0
  121. package/dist/tags-input.js +108 -0
  122. package/dist/tags-input.js.map +1 -0
  123. package/dist/text-formats.d.ts +85 -0
  124. package/dist/text-formats.d.ts.map +1 -0
  125. package/dist/text-formats.js +43 -0
  126. package/dist/text-formats.js.map +1 -0
  127. package/dist/toggle-group.d.ts +111 -0
  128. package/dist/toggle-group.d.ts.map +1 -0
  129. package/dist/toggle-group.js +78 -0
  130. package/dist/toggle-group.js.map +1 -0
  131. package/dist/top.d.ts +113 -0
  132. package/dist/top.d.ts.map +1 -0
  133. package/dist/top.js +72 -0
  134. package/dist/top.js.map +1 -0
  135. package/dist/version.d.ts +1 -1
  136. package/dist/version.js +1 -1
  137. package/dist/version.js.map +1 -1
  138. package/docs/agreement.md +33 -0
  139. package/docs/anchor.md +59 -59
  140. package/docs/ant-design-coverage.md +5 -3
  141. package/docs/architecture.md +10 -0
  142. package/docs/asset.md +26 -0
  143. package/docs/bottom-info.md +15 -0
  144. package/docs/breadcrumb.md +15 -15
  145. package/docs/button-label.md +20 -0
  146. package/docs/calendar.md +82 -154
  147. package/docs/carousel.md +27 -2
  148. package/docs/cascader.md +17 -0
  149. package/docs/chart.md +33 -0
  150. package/docs/clipboard.md +13 -0
  151. package/docs/collapsible.md +19 -0
  152. package/docs/command-palette.md +19 -0
  153. package/docs/confirm-popover.md +11 -1
  154. package/docs/context-menu.md +23 -0
  155. package/docs/data-table.md +22 -0
  156. package/docs/date-range.md +31 -0
  157. package/docs/density.md +23 -0
  158. package/docs/expansion-roadmap.md +16 -3
  159. package/docs/floating-action-button.md +35 -3
  160. package/docs/formatters.md +18 -0
  161. package/docs/generated/component-maturity.md +39 -23
  162. package/docs/generated/renderer-evidence.json +2921 -642
  163. package/docs/generated/renderer-evidence.md +53 -6
  164. package/docs/generated/showcase-manifest.json +1087 -64
  165. package/docs/heading.md +25 -0
  166. package/docs/identity.md +5 -0
  167. package/docs/layout.md +1 -1
  168. package/docs/library-gap-analysis.md +29 -9
  169. package/docs/list-row.md +14 -0
  170. package/docs/mentions.md +18 -0
  171. package/docs/menubar.md +22 -0
  172. package/docs/native-platform.md +36 -0
  173. package/docs/overlay-stack.md +24 -0
  174. package/docs/pagination.md +16 -8
  175. package/docs/popover.md +42 -13
  176. package/docs/product-audit-2026-09-15.md +88 -0
  177. package/docs/progress.md +16 -0
  178. package/docs/provider-button.md +33 -0
  179. package/docs/rating.md +19 -0
  180. package/docs/react-native-completion.md +347 -0
  181. package/docs/screen-chrome.md +52 -0
  182. package/docs/side-panel.md +23 -2
  183. package/docs/sidebar.md +30 -0
  184. package/docs/skip-nav.md +20 -0
  185. package/docs/splitter.md +22 -2
  186. package/docs/stable-promotion.md +51 -0
  187. package/docs/tags-input.md +25 -0
  188. package/docs/text-formats.md +15 -0
  189. package/docs/theming.md +84 -0
  190. package/docs/time-picker.md +22 -1
  191. package/docs/toast.md +18 -0
  192. package/docs/toggle-group.md +21 -0
  193. package/docs/top.md +32 -0
  194. package/docs/tour.md +23 -2
  195. package/docs/transfer-list.md +20 -0
  196. package/docs/tree-select.md +18 -0
  197. package/docs/tree.md +21 -0
  198. package/package.json +120 -6
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export {\n aspectRatioDefaults,\n aspectRatioRecipe,\n resolveAspectRatioDescriptor,\n validateAspectRatioValue,\n type AspectRatioDescriptor,\n type AspectRatioPreset,\n type AspectRatioValue,\n type ResolvedAspectRatioDescriptor,\n} from \"./aspect-ratio.js\";\n\nexport {\n containerDefaults,\n containerRecipe,\n resolveContainerDescriptor,\n validateContainerDescriptor,\n type ContainerDescriptor,\n type ContainerGutter,\n type ContainerSize,\n type ResolvedContainerDescriptor,\n} from \"./container.js\";\n\nexport {\n visuallyHiddenRecipe,\n type VisuallyHiddenContract,\n} from \"./visually-hidden.js\";\n\nexport {\n getIconDirectionality,\n getIconTransform,\n resolveIconDescriptor,\n semanticIconNames,\n validateIconDescriptor,\n type DecorativeIconDescriptor,\n type IconDescriptor,\n type IconDirection,\n type IconDirectionality,\n type IconTransform,\n type InformativeIconDescriptor,\n type ResolvedIconDescriptor,\n type SemanticIconName,\n} from \"./icon.js\";\n\nexport {\n resolveLinkDescriptor,\n validateLinkDescriptor,\n validateLinkDestination,\n type ExternalLinkDestination,\n type InternalLinkDestination,\n type LinkDescriptor,\n type LinkDestination,\n type LinkIconDescriptor,\n type ResolvedLinkDescriptor,\n type ResolvedLinkIconDescriptor,\n} from \"./link.js\";\n\nexport {\n bottomNavigationBehaviorDefaults,\n resolveBottomNavigationActivation,\n resolveBottomNavigationConfiguration,\n resolveBottomNavigationDescriptor,\n resolveBottomNavigationItem,\n validateBottomNavigationConfiguration,\n validateBottomNavigationDescriptor,\n type BottomNavigationActivation,\n type BottomNavigationConfiguration,\n type BottomNavigationCounterBadge,\n type BottomNavigationDescriptor,\n type BottomNavigationDirection,\n type BottomNavigationIconDescriptor,\n type BottomNavigationItemDescriptor,\n type BottomNavigationKeyboardBehavior,\n type ResolvedBottomNavigationCounterBadge,\n type ResolvedBottomNavigationConfiguration,\n type ResolvedBottomNavigationDescriptor,\n type ResolvedBottomNavigationIconDescriptor,\n type ResolvedBottomNavigationItemDescriptor,\n} from \"./bottom-navigation.js\";\n\nexport {\n resolveTooltipDescriptor,\n tooltipBehaviorDefaults,\n tooltipDescriptorDefaults,\n validateTooltipDescriptor,\n validateTooltipOpenState,\n type ControlledTooltipOpenState,\n type ResolvedTooltipDescriptor,\n type TooltipAlign,\n type TooltipDescriptor,\n type TooltipOpenChangeDetails,\n type TooltipOpenChangeReason,\n type TooltipOpenState,\n type TooltipPlacement,\n type UncontrolledTooltipOpenState,\n} from \"./tooltip.js\";\n\nexport {\n alertDialogBehaviorDefaults,\n canDismissAlertDialog,\n createAlertDialogSession,\n getAlertDialogInitialFocus,\n validateAlertDialogRequest,\n type AlertDialogAsyncState,\n type AlertDialogCancelReason,\n type AlertDialogConfirmAction,\n type AlertDialogDismissReason,\n type AlertDialogInitialFocus,\n type AlertDialogMode,\n type AlertDialogOpenChangeReason,\n type AlertDialogOpenState,\n type AlertDialogPhase,\n type AlertDialogRequest,\n type AlertDialogResult,\n type AlertDialogSession,\n} from \"./alert-dialog.js\";\n\nexport {\n canDismissSheet,\n createSheetLifecycle,\n sheetBehaviorDefaults,\n type SheetDismissPolicy,\n type SheetDismissReason,\n type SheetLifecycle,\n type SheetOpenChangeDetails,\n type SheetOpenState,\n} from \"./sheet.js\";\n\nexport {\n createToastSession,\n createToastStore,\n resolveToastAnnouncement,\n resolveToastDescriptor,\n resolveToastDuration,\n toastBehaviorDefaults,\n validateToastDescriptor,\n type ResolvedToastActionDescriptor,\n type ResolvedToastDescriptor,\n type ToastActionDescriptor,\n type ToastAnnouncement,\n type ToastAnnouncementPriority,\n type ToastDescriptor,\n type ToastDismissReason,\n type ToastDuplicatePolicy,\n type ToastId,\n type ToastOverflowPolicy,\n type ToastPauseReason,\n type ToastPhase,\n type ToastPublishOptions,\n type ToastPublishResult,\n type ToastSession,\n type ToastSessionSnapshot,\n type ToastStore,\n type ToastStoreOptions,\n type ToastStoreSnapshot,\n type ToastTimerSnapshot,\n type ToastTimerStatus,\n type ToastTimerUpdatePolicy,\n} from \"./toast.js\";\n\nexport {\n resolveStatisticDescriptor,\n statisticDefaults,\n statisticTrendMarks,\n validateStatisticDescriptor,\n validateStatisticGroup,\n type ResolvedStatisticDescriptor,\n type ResolvedStatisticTrendDescriptor,\n type StatisticDescriptor,\n type StatisticGroupDescriptor,\n type StatisticTrendDescriptor,\n type StatisticTrendDirection,\n type StatisticTrendTone,\n} from \"./statistic.js\";\n\nexport {\n canRequestLoadMore,\n createLoadMoreController,\n loadMoreBehaviorDefaults,\n validateLoadMoreDescriptor,\n validateLoadMoreLabels,\n validateLoadMoreState,\n type LoadMoreCompleteState,\n type LoadMoreController,\n type LoadMoreControllerOptions,\n type LoadMoreControllerSnapshot,\n type LoadMoreDescriptor,\n type LoadMoreErrorState,\n type LoadMoreLabels,\n type LoadMoreLoadingState,\n type LoadMoreMode,\n type LoadMoreReadyState,\n type LoadMoreRequest,\n type LoadMoreRequestHandler,\n type LoadMoreRequestOutcome,\n type LoadMoreRequestReason,\n type LoadMoreState,\n} from \"./load-more.js\";\n\nexport {\n collectionValidationDefaults,\n flattenCollectionItems,\n getCollectionNavigationIntent,\n getCollectionNavigationTarget,\n getCollectionTypeaheadMatch,\n isComboboxResultCurrent,\n reconcileSelectSelection,\n resolveComboboxSelectedItem,\n resolveCollectionItem,\n resolveSelectSelectedItem,\n validateCollection,\n type CollectionNavigationIntent,\n type CollectionSource,\n type SelectCollectionSectionDescriptor,\n type SelectCollectionSource,\n type CollectionTypeaheadOptions,\n type CollectionValidationOptions,\n type ComboboxCollectionState,\n type ComboboxState,\n type ReconcileSelectOptions,\n type SelectCollectionState,\n type SelectConfiguration,\n type SelectLabel,\n type SelectOpenChangeReason,\n type SelectOpenState,\n type SelectState,\n} from \"./collection.js\";\n\nexport {\n ACCENTS,\n THEMES,\n accentFill,\n accentTint,\n brandGradient,\n isThemePreference,\n onAccentFill,\n onBrandGradient,\n withAlpha,\n type AccentTone,\n type ResolvedTheme,\n type ThemeColors,\n type ThemePreference,\n} from \"./colors.js\";\n\nexport {\n backdrop,\n breakpoint,\n control,\n easing,\n fontFamily,\n fontWeight,\n glyph,\n heading,\n layer,\n layout,\n letterSpacing,\n motion,\n motionPreset,\n numeric,\n opacity,\n overlay,\n radius,\n scrim,\n shadow,\n spacing,\n spring,\n stateLayer,\n stroke,\n typography,\n type BackdropReference,\n type FontFamily,\n type FontWeight,\n type FontWeightValue,\n type GlyphSize,\n type HeadingLevel,\n type LetterSpacing,\n type NumericVariant,\n type ReducedMotionBehavior,\n type TextVariant,\n} from \"./foundations.js\";\n\nexport {\n resolveResponsiveValue,\n resolveWindowClass,\n validateResponsiveValue,\n windowClassOrder,\n type ResponsiveValue,\n type WindowClass,\n} from \"./responsive.js\";\n\nexport {\n gridDefaults,\n gridGaps,\n gridRecipe,\n resolveGridLayout,\n validateGridDescriptor,\n type GridDescriptor,\n type GridGap,\n type GridGapToken,\n type ResolveGridLayoutOptions,\n type ResolvedGridLayout,\n} from \"./grid.js\";\n\nexport {\n accordionRecipe,\n alertDialogRecipe,\n avatarRecipe,\n badgeRecipe,\n bottomNavigationRecipe,\n bottomCtaRecipe,\n buttonRecipe,\n cardRecipe,\n chipRecipe,\n comboboxRecipe,\n counterBadgeRecipe,\n dialogRecipe,\n dividerRecipe,\n emptyStateRecipe,\n fieldRecipe,\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 surfaceDefaults,\n surfaceGeometry,\n stackRecipe,\n statisticRecipe,\n surfaceRecipe,\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 ButtonSize,\n type ButtonTone,\n type CardHeadingLevel,\n type ChipSize,\n type SelectDensity,\n type SelectSize,\n type CounterBadgeSize,\n type CounterBadgeTone,\n type CounterBadgeVariant,\n type DialogSize,\n type FieldShape,\n type FieldVariant,\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 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 SurfaceTone,\n type SurfacePadding,\n type SurfaceRadius,\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 \"./recipes.js\";\n\nexport {\n accentColor,\n resolveColorReference,\n solidAccentColor,\n themeColor,\n type AccentColorReference,\n type AccentFillReference,\n type ColorReference,\n type ColorReferencePalette,\n type ThemeColorReference,\n} from \"./color-references.js\";\n\nexport {\n componentCatalog,\n getComponentSurfaceStatus,\n recipeRegistry,\n summarizeComponentRoadmap,\n type ComponentCatalogEntry,\n type ComponentCategory,\n type ComponentName,\n type ComponentPlatform,\n type ComponentRoadmap,\n type ComponentRoadmapState,\n type ComponentSurface,\n type ComponentSurfaceMaturity,\n type ComponentSurfaceStatus,\n type ComponentStatus,\n type RecipeName,\n} from \"./catalog.js\";\n\nexport { designSystemVersion } from \"./version.js\";\n\nexport {\n antDesignReferenceComponents,\n antDesignReferenceSystem,\n getAntDesignReferencesFor,\n summarizeAntDesignCoverage,\n type AntDesignCategory,\n type AntDesignComponentName,\n type AntDesignReferenceComponent,\n type ReferenceCoverageSummary,\n type ReferenceRelationship,\n} from \"./component-references.js\";\n\nexport {\n componentDefinitions,\n componentIds,\n getComponentDefinition,\n type ComponentDefinition,\n type ComponentId,\n type ComponentKind,\n} from \"./component-definitions.js\";\n\nexport { semanticColors } from \"./semantic-colors.js\";\n\nexport {\n behaviorRegistry,\n checkboxBehaviorDefaults,\n comboboxBehaviorDefaults,\n getCheckboxNextState,\n getRadioNavigationTarget,\n getSelectionNavigationIntent,\n getTabNavigationIntent,\n getTabNavigationTarget,\n reconcileCheckboxSelection,\n reconcileRadioSelection,\n radioGroupBehaviorDefaults,\n resolveInitialRadioValue,\n resolveControlAccessibleName,\n resolveRadioTabStop,\n resolveInitialTabValue,\n selectionGroupBehaviorDefaults,\n selectBehaviorDefaults,\n tabsBehaviorDefaults,\n toggleCheckboxSelection,\n validateCheckboxSelection,\n validateRadioSelection,\n validateSelectionItems,\n type AsyncCollectionState,\n type AvailabilityState,\n type BehaviorContract,\n type BehaviorName,\n type BehaviorStateAxis,\n type CollectionItemDescriptor,\n type CollectionItemTone,\n type CollectionKey,\n type CollectionSectionDescriptor,\n type MenuItemDescriptor,\n type MenuSectionDescriptor,\n type CollectionSelectionModel,\n type ComboboxCommitReason,\n type ComboboxFiltering,\n type ComboboxInput,\n type ControlledComboboxInput,\n type ControlledSelectSelection,\n type ControlledCheckboxGroupSelection,\n type ControlledCheckboxState,\n type ControlledRadioGroupSelection,\n type ContentState,\n type ControlledTabsSelection,\n type InteractionState,\n type MixedCheckboxActivation,\n type MultipleSelectionModel,\n type NativeAccessibilityState,\n type NoSelectionModel,\n type SingleSelectionModel,\n type SelectItemDescriptor,\n type SelectSelection,\n type CheckboxGroupSelection,\n type CheckboxSelection,\n type CheckboxState,\n type RadioGroupSelection,\n type SelectionDirection,\n type SelectionGroupLabel,\n type SelectionItemDescriptor,\n type SelectionNavigationIntent,\n type SelectionOrientation,\n type TabDescriptor,\n type TabNavigationIntent,\n type TabsActivationMode,\n type TabsDirection,\n type TabsMountPolicy,\n type TabsOrientation,\n type TabsPanelMode,\n type TabsSelection,\n type UncontrolledTabsSelection,\n type UncontrolledComboboxInput,\n type UncontrolledSelectSelection,\n type UncontrolledCheckboxGroupSelection,\n type UncontrolledCheckboxState,\n type UncontrolledRadioGroupSelection,\n type ValidationState,\n type ValueState,\n type WebKeyboardKey,\n} from \"./behaviors.js\";\n\nexport {\n collectionItemContract,\n fieldFrameContract,\n floatingSurfaceContract,\n focusIndicatorContract,\n formSupportContract,\n} from \"./component-contracts.js\";\n\nexport {\n assertShowcaseCoverage,\n createShowcaseCoverage,\n createShowcaseManifest,\n getRequiredShowcaseScenarios,\n getRequiredShowcaseEvidence,\n getRequiredShowcaseSurfaces,\n getShowcaseEnvironmentInput,\n getShowcaseStoryId,\n showcaseEnvironmentMatrix,\n showcaseManifest,\n showcaseScenarios,\n summarizeShowcaseMaturity,\n type ShowcaseComponentEntry,\n type ShowcaseCoverageEntry,\n type ShowcaseDirection,\n type ShowcaseEnvironment,\n type ShowcaseEvidenceEntry,\n type ShowcaseEvidenceRequirement,\n type ShowcaseMotionPreference,\n type ShowcaseScenario,\n type ShowcaseScenarioId,\n type ShowcaseSurface,\n type ShowcaseTextScale,\n type ShowcaseTheme,\n} from \"./showcase.js\";\n\nexport {\n assertShowcaseStoryIds,\n compareShowcaseStoryIds,\n createDesignSystemEvidence,\n createDesignSystemEvidenceCoverage,\n defineDesignSystemEvidence,\n designSystemEvidenceSchemaVersion,\n getShowcaseStoryIdsForSurface,\n toShowcaseEvidenceEntries,\n type DesignSystemEvidenceItem,\n type DesignSystemEvidenceManifest,\n type DesignSystemEvidenceSource,\n type DesignSystemEvidenceSourceKind,\n type ShowcaseStoryIdComparison,\n} from \"./evidence.js\";\n\n/*\n Batch 2 — 계약과 recipe가 준비된 컴포넌트.\n\n catalog의 status는 여전히 `planned`다. 로드맵의 maturity gate가 `planned → beta` 승격에\n **실제 제품 vertical slice 한 번**을 요구하므로, 계약이 준비된 것과 검증된 것을 섞지\n 않는다. 여기 있는 심볼은 제품이 renderer를 붙일 수 있다는 뜻이고, 붙여서 검증되면\n 그때 리드가 catalog를 올린다.\n*/\nexport * from \"./breadcrumb.js\";\nexport * from \"./calendar.js\";\nexport * from \"./carousel.js\";\nexport * from \"./command-palette.js\";\nexport * from \"./design-system-provider.js\";\nexport * from \"./floating-action-button.js\";\nexport * from \"./content-state.js\";\nexport * from \"./data-table.js\";\nexport * from \"./mentions.js\";\nexport * from \"./transfer-list.js\";\nexport * from \"./tour.js\";\nexport * from \"./layout.js\";\nexport * from \"./otp-field.js\";\nexport * from \"./password-field.js\";\nexport * from \"./splitter.js\";\nexport * from \"./tree-select.js\";\nexport * from \"./date-picker.js\";\nexport * from \"./side-panel.js\";\nexport * from \"./file-picker.js\";\nexport * from \"./pagination.js\";\nexport * from \"./popover.js\";\nexport * from \"./upload-item.js\";\nexport * from \"./timeline.js\";\nexport * from \"./tree.js\";\nexport * from \"./steps.js\";\nexport * from \"./number-field.js\";\nexport * from \"./slider.js\";\nexport * from \"./form.js\";\nexport * from \"./tag.js\";\nexport * from \"./description-list.js\";\nexport * from \"./result.js\";\nexport * from \"./image.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export {\n aspectRatioDefaults,\n aspectRatioRecipe,\n resolveAspectRatioDescriptor,\n validateAspectRatioValue,\n type AspectRatioDescriptor,\n type AspectRatioPreset,\n type AspectRatioValue,\n type ResolvedAspectRatioDescriptor,\n} from \"./aspect-ratio.js\";\n\nexport {\n containerDefaults,\n containerRecipe,\n resolveContainerDescriptor,\n validateContainerDescriptor,\n type ContainerDescriptor,\n type ContainerGutter,\n type ContainerSize,\n type ResolvedContainerDescriptor,\n} from \"./container.js\";\n\nexport {\n visuallyHiddenRecipe,\n type VisuallyHiddenContract,\n} from \"./visually-hidden.js\";\n\nexport {\n getIconDirectionality,\n getIconTransform,\n resolveIconDescriptor,\n semanticIconNames,\n validateIconDescriptor,\n type DecorativeIconDescriptor,\n type IconDescriptor,\n type IconDirection,\n type IconDirectionality,\n type IconTransform,\n type InformativeIconDescriptor,\n type ResolvedIconDescriptor,\n type SemanticIconName,\n} from \"./icon.js\";\n\nexport {\n resolveLinkDescriptor,\n validateLinkDescriptor,\n validateLinkDestination,\n type ExternalLinkDestination,\n type InternalLinkDestination,\n type LinkDescriptor,\n type LinkDestination,\n type LinkIconDescriptor,\n type ResolvedLinkDescriptor,\n type ResolvedLinkIconDescriptor,\n} from \"./link.js\";\n\nexport {\n bottomNavigationBehaviorDefaults,\n resolveBottomNavigationActivation,\n resolveBottomNavigationConfiguration,\n resolveBottomNavigationDescriptor,\n resolveBottomNavigationItem,\n validateBottomNavigationConfiguration,\n validateBottomNavigationDescriptor,\n type BottomNavigationActivation,\n type BottomNavigationConfiguration,\n type BottomNavigationCounterBadge,\n type BottomNavigationDescriptor,\n type BottomNavigationDirection,\n type BottomNavigationIconDescriptor,\n type BottomNavigationItemDescriptor,\n type BottomNavigationKeyboardBehavior,\n type ResolvedBottomNavigationCounterBadge,\n type ResolvedBottomNavigationConfiguration,\n type ResolvedBottomNavigationDescriptor,\n type ResolvedBottomNavigationIconDescriptor,\n type ResolvedBottomNavigationItemDescriptor,\n} from \"./bottom-navigation.js\";\n\nexport {\n resolveTooltipDescriptor,\n tooltipBehaviorDefaults,\n tooltipDescriptorDefaults,\n validateTooltipDescriptor,\n validateTooltipOpenState,\n type ControlledTooltipOpenState,\n type ResolvedTooltipDescriptor,\n type TooltipAlign,\n type TooltipDescriptor,\n type TooltipOpenChangeDetails,\n type TooltipOpenChangeReason,\n type TooltipOpenState,\n type TooltipPlacement,\n type UncontrolledTooltipOpenState,\n} from \"./tooltip.js\";\n\nexport {\n alertDialogBehaviorDefaults,\n canDismissAlertDialog,\n createAlertDialogSession,\n getAlertDialogInitialFocus,\n validateAlertDialogRequest,\n type AlertDialogAsyncState,\n type AlertDialogCancelReason,\n type AlertDialogConfirmAction,\n type AlertDialogDismissReason,\n type AlertDialogInitialFocus,\n type AlertDialogMode,\n type AlertDialogOpenChangeReason,\n type AlertDialogOpenState,\n type AlertDialogPhase,\n type AlertDialogRequest,\n type AlertDialogResult,\n type AlertDialogSession,\n} from \"./alert-dialog.js\";\n\nexport {\n canDismissSheet,\n createSheetLifecycle,\n sheetBehaviorDefaults,\n type SheetDismissPolicy,\n type SheetDismissReason,\n type SheetLifecycle,\n type SheetOpenChangeDetails,\n type SheetOpenState,\n} from \"./sheet.js\";\n\nexport {\n createToastSession,\n createToastStore,\n resolveToastAnnouncement,\n resolveToastDescriptor,\n resolveToastDuration,\n toastBehaviorDefaults,\n validateToastDescriptor,\n type ResolvedToastActionDescriptor,\n type ResolvedToastDescriptor,\n type ToastActionDescriptor,\n type ToastAnnouncement,\n type ToastAnnouncementPriority,\n type ToastDescriptor,\n type ToastDismissReason,\n type ToastDuplicatePolicy,\n type ToastId,\n type ToastOverflowPolicy,\n type ToastPauseReason,\n type ToastPhase,\n type ToastPublishOptions,\n type ToastPublishResult,\n type ToastSession,\n type ToastSessionSnapshot,\n type ToastStore,\n type ToastStoreOptions,\n type ToastStoreSnapshot,\n type ToastTimerSnapshot,\n type ToastTimerStatus,\n type ToastTimerUpdatePolicy,\n} from \"./toast.js\";\n\nexport {\n resolveStatisticDescriptor,\n statisticDefaults,\n statisticTrendMarks,\n validateStatisticDescriptor,\n validateStatisticGroup,\n type ResolvedStatisticDescriptor,\n type ResolvedStatisticTrendDescriptor,\n type StatisticDescriptor,\n type StatisticGroupDescriptor,\n type StatisticTrendDescriptor,\n type StatisticTrendDirection,\n type StatisticTrendTone,\n} from \"./statistic.js\";\n\nexport {\n canRequestLoadMore,\n createLoadMoreController,\n loadMoreBehaviorDefaults,\n validateLoadMoreDescriptor,\n validateLoadMoreLabels,\n validateLoadMoreState,\n type LoadMoreCompleteState,\n type LoadMoreController,\n type LoadMoreControllerOptions,\n type LoadMoreControllerSnapshot,\n type LoadMoreDescriptor,\n type LoadMoreErrorState,\n type LoadMoreLabels,\n type LoadMoreLoadingState,\n type LoadMoreMode,\n type LoadMoreReadyState,\n type LoadMoreRequest,\n type LoadMoreRequestHandler,\n type LoadMoreRequestOutcome,\n type LoadMoreRequestReason,\n type LoadMoreState,\n} from \"./load-more.js\";\n\nexport {\n collectionValidationDefaults,\n flattenCollectionItems,\n getCollectionNavigationIntent,\n getCollectionNavigationTarget,\n getCollectionTypeaheadMatch,\n isComboboxResultCurrent,\n reconcileSelectSelection,\n resolveComboboxSelectedItem,\n resolveCollectionItem,\n resolveSelectSelectedItem,\n validateCollection,\n type CollectionNavigationIntent,\n type CollectionSource,\n type SelectCollectionSectionDescriptor,\n type SelectCollectionSource,\n type CollectionTypeaheadOptions,\n type CollectionValidationOptions,\n type ComboboxCollectionState,\n type ComboboxState,\n type ReconcileSelectOptions,\n type SelectCollectionState,\n type SelectConfiguration,\n type SelectLabel,\n type SelectOpenChangeReason,\n type SelectOpenState,\n type SelectState,\n} from \"./collection.js\";\n\nexport {\n ACCENTS,\n THEMES,\n accentFill,\n accentTint,\n brandGradient,\n isThemePreference,\n onAccentFill,\n onBrandGradient,\n withAlpha,\n type AccentTone,\n type ResolvedTheme,\n type ThemeColors,\n type ThemePreference,\n} from \"./colors.js\";\n\nexport {\n backdrop,\n breakpoint,\n control,\n easing,\n fontFamily,\n fontWeight,\n glyph,\n heading,\n layer,\n layout,\n letterSpacing,\n motion,\n motionPreset,\n numeric,\n opacity,\n overlay,\n radius,\n scrim,\n shadow,\n spacing,\n spring,\n stateLayer,\n stroke,\n typography,\n type BackdropReference,\n type FontFamily,\n type FontWeight,\n type FontWeightValue,\n type GlyphSize,\n type HeadingLevel,\n type LetterSpacing,\n type NumericVariant,\n type ReducedMotionBehavior,\n type TextVariant,\n} from \"./foundations.js\";\n\nexport {\n resolveResponsiveValue,\n resolveWindowClass,\n validateResponsiveValue,\n windowClassOrder,\n type ResponsiveValue,\n type WindowClass,\n} from \"./responsive.js\";\n\nexport {\n gridDefaults,\n gridGaps,\n gridRecipe,\n resolveGridLayout,\n validateGridDescriptor,\n type GridDescriptor,\n type GridGap,\n type GridGapToken,\n type ResolveGridLayoutOptions,\n type ResolvedGridLayout,\n} from \"./grid.js\";\n\nexport {\n accordionRecipe,\n alertDialogRecipe,\n avatarRecipe,\n badgeRecipe,\n bottomNavigationRecipe,\n bottomCtaRecipe,\n buttonRecipe,\n cardRecipe,\n chipRecipe,\n comboboxRecipe,\n counterBadgeRecipe,\n dialogRecipe,\n dividerRecipe,\n emptyStateRecipe,\n fieldRecipe,\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 surfaceDefaults,\n surfaceGeometry,\n stackRecipe,\n statisticRecipe,\n surfaceRecipe,\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 ButtonSize,\n type ButtonTone,\n type CardHeadingLevel,\n type ChipSize,\n type SelectDensity,\n type SelectSize,\n type CounterBadgeSize,\n type CounterBadgeTone,\n type CounterBadgeVariant,\n type DialogSize,\n type FieldShape,\n type FieldVariant,\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 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 SurfaceTone,\n type SurfacePadding,\n type SurfaceRadius,\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 \"./recipes.js\";\n\nexport {\n accentColor,\n resolveColorReference,\n solidAccentColor,\n themeColor,\n type AccentColorReference,\n type AccentFillReference,\n type ColorReference,\n type ColorReferencePalette,\n type ThemeColorReference,\n} from \"./color-references.js\";\n\nexport {\n componentCatalog,\n getComponentSurfaceStatus,\n recipeRegistry,\n summarizeComponentRoadmap,\n type ComponentCatalogEntry,\n type ComponentCategory,\n type ComponentName,\n type ComponentPlatform,\n type ComponentRoadmap,\n type ComponentRoadmapState,\n type ComponentSurface,\n type ComponentSurfaceMaturity,\n type ComponentSurfaceStatus,\n type ComponentStatus,\n type RecipeName,\n} from \"./catalog.js\";\n\nexport { designSystemVersion } from \"./version.js\";\n\nexport {\n antDesignReferenceComponents,\n antDesignReferenceSystem,\n getAntDesignReferencesFor,\n summarizeAntDesignCoverage,\n type AntDesignCategory,\n type AntDesignComponentName,\n type AntDesignReferenceComponent,\n type ReferenceCoverageSummary,\n type ReferenceRelationship,\n} from \"./component-references.js\";\n\nexport {\n componentDefinitions,\n componentIds,\n getComponentDefinition,\n type ComponentDefinition,\n type ComponentId,\n type ComponentKind,\n} from \"./component-definitions.js\";\n\nexport { semanticColors } from \"./semantic-colors.js\";\n\nexport {\n behaviorRegistry,\n checkboxBehaviorDefaults,\n comboboxBehaviorDefaults,\n getCheckboxNextState,\n getRadioNavigationTarget,\n getSelectionNavigationIntent,\n getTabNavigationIntent,\n getTabNavigationTarget,\n reconcileCheckboxSelection,\n reconcileRadioSelection,\n radioGroupBehaviorDefaults,\n resolveInitialRadioValue,\n resolveControlAccessibleName,\n resolveRadioTabStop,\n resolveInitialTabValue,\n selectionGroupBehaviorDefaults,\n selectBehaviorDefaults,\n tabsBehaviorDefaults,\n toggleCheckboxSelection,\n validateCheckboxSelection,\n validateRadioSelection,\n validateSelectionItems,\n type AsyncCollectionState,\n type AvailabilityState,\n type BehaviorContract,\n type BehaviorName,\n type BehaviorStateAxis,\n type CollectionItemDescriptor,\n type CollectionItemTone,\n type CollectionKey,\n type CollectionSectionDescriptor,\n type MenuItemDescriptor,\n type MenuSectionDescriptor,\n type CollectionSelectionModel,\n type ComboboxCommitReason,\n type ComboboxFiltering,\n type ComboboxInput,\n type ControlledComboboxInput,\n type ControlledSelectSelection,\n type ControlledCheckboxGroupSelection,\n type ControlledCheckboxState,\n type ControlledRadioGroupSelection,\n type ContentState,\n type ControlledTabsSelection,\n type InteractionState,\n type MixedCheckboxActivation,\n type MultipleSelectionModel,\n type NativeAccessibilityState,\n type NoSelectionModel,\n type SingleSelectionModel,\n type SelectItemDescriptor,\n type SelectSelection,\n type CheckboxGroupSelection,\n type CheckboxSelection,\n type CheckboxState,\n type RadioGroupSelection,\n type SelectionDirection,\n type SelectionGroupLabel,\n type SelectionItemDescriptor,\n type SelectionNavigationIntent,\n type SelectionOrientation,\n type TabDescriptor,\n type TabNavigationIntent,\n type TabsActivationMode,\n type TabsDirection,\n type TabsMountPolicy,\n type TabsOrientation,\n type TabsPanelMode,\n type TabsSelection,\n type UncontrolledTabsSelection,\n type UncontrolledComboboxInput,\n type UncontrolledSelectSelection,\n type UncontrolledCheckboxGroupSelection,\n type UncontrolledCheckboxState,\n type UncontrolledRadioGroupSelection,\n type ValidationState,\n type ValueState,\n type WebKeyboardKey,\n} from \"./behaviors.js\";\n\nexport {\n collectionItemContract,\n fieldFrameContract,\n floatingSurfaceContract,\n focusIndicatorContract,\n formSupportContract,\n} from \"./component-contracts.js\";\n\nexport {\n assertShowcaseCoverage,\n createShowcaseCoverage,\n createShowcaseManifest,\n getRequiredShowcaseScenarios,\n getRequiredShowcaseEvidence,\n getRequiredShowcaseSurfaces,\n getShowcaseEnvironmentInput,\n getShowcaseStoryId,\n showcaseEnvironmentMatrix,\n showcaseManifest,\n showcaseScenarios,\n summarizeShowcaseMaturity,\n type ShowcaseComponentEntry,\n type ShowcaseCoverageEntry,\n type ShowcaseDirection,\n type ShowcaseEnvironment,\n type ShowcaseEvidenceEntry,\n type ShowcaseEvidenceRequirement,\n type ShowcaseMotionPreference,\n type ShowcaseScenario,\n type ShowcaseScenarioId,\n type ShowcaseSurface,\n type ShowcaseTextScale,\n type ShowcaseTheme,\n} from \"./showcase.js\";\n\nexport {\n assertShowcaseStoryIds,\n compareShowcaseStoryIds,\n createDesignSystemEvidence,\n createDesignSystemEvidenceCoverage,\n defineDesignSystemEvidence,\n designSystemEvidenceSchemaVersion,\n getShowcaseStoryIdsForSurface,\n toShowcaseEvidenceEntries,\n type DesignSystemEvidenceItem,\n type DesignSystemEvidenceManifest,\n type DesignSystemEvidenceSource,\n type DesignSystemEvidenceSourceKind,\n type ShowcaseStoryIdComparison,\n} from \"./evidence.js\";\n\n/*\n Batch 2 — 계약과 recipe가 준비된 컴포넌트.\n\n catalog의 status는 여전히 `planned`다. 로드맵의 maturity gate가 `planned → beta` 승격에\n **실제 제품 vertical slice 한 번**을 요구하므로, 계약이 준비된 것과 검증된 것을 섞지\n 않는다. 여기 있는 심볼은 제품이 renderer를 붙일 수 있다는 뜻이고, 붙여서 검증되면\n 그때 리드가 catalog를 올린다.\n*/\nexport * from \"./breadcrumb.js\";\nexport * from \"./calendar.js\";\nexport * from \"./carousel.js\";\nexport * from \"./command-palette.js\";\nexport * from \"./design-system-provider.js\";\nexport * from \"./floating-action-button.js\";\nexport * from \"./content-state.js\";\nexport * from \"./data-table.js\";\nexport * from \"./mentions.js\";\nexport * from \"./transfer-list.js\";\nexport * from \"./tour.js\";\nexport * from \"./layout.js\";\nexport * from \"./otp-field.js\";\nexport * from \"./password-field.js\";\nexport * from \"./splitter.js\";\nexport * from \"./tree-select.js\";\nexport * from \"./date-picker.js\";\nexport * from \"./side-panel.js\";\nexport * from \"./file-picker.js\";\nexport * from \"./pagination.js\";\nexport * from \"./popover.js\";\nexport * from \"./upload-item.js\";\nexport * from \"./timeline.js\";\nexport * from \"./tree.js\";\nexport * from \"./steps.js\";\nexport * from \"./number-field.js\";\nexport * from \"./slider.js\";\nexport * from \"./form.js\";\nexport * from \"./tag.js\";\nexport * from \"./description-list.js\";\nexport * from \"./result.js\";\nexport * from \"./image.js\";\n\nexport * from \"./anchor.js\";\n\nexport * from \"./agreement.js\";\nexport * from \"./top.js\";\n\nexport * from \"./provider-button.js\";\n\nexport * from \"./heading.js\";\n\nexport * from \"./toggle-group.js\";\nexport * from \"./tags-input.js\";\n\nexport * from \"./skip-nav.js\";\nexport * from \"./bottom-info.js\";\nexport * from \"./sidebar.js\";\n\nexport * from \"./formatters.js\";\n\nexport * from \"./native-platform.js\";\n\nexport * from \"./date-range.js\";\n\nexport * from \"./text-formats.js\";\n\nexport * from \"./collapsible.js\";\nexport * from \"./asset.js\";\nexport * from \"./dataviz.js\";\nexport * from \"./menubar.js\";\nexport * from \"./context-menu.js\";\n"]}
@@ -0,0 +1,133 @@
1
+ import type { MenuItemDescriptor } from "./behaviors.js";
2
+ /**
3
+ * 데스크톱 앱의 가로 메뉴 막대 — 파일·편집·보기처럼 항상 같은 자리에 있는 메뉴들.
4
+ *
5
+ * `Menu` 여러 개를 나란히 놓는 것과 다르다. 막대는 **하나의 키보드 단위**다: 메뉴가
6
+ * 열린 상태에서 좌우 방향키를 누르면 옆 메뉴로 **넘어가고**(닫았다 여는 것이 아니라),
7
+ * 한 번에 하나만 열린다. 독립된 Menu 세 개로는 그 이동이 성립하지 않는다.
8
+ *
9
+ * `Tabs`와도 다르다. Tabs는 화면을 바꾸고 선택 상태가 남는다. Menubar는 행동을 실행하고
10
+ * 아무것도 선택되지 않은 상태로 돌아간다.
11
+ */
12
+ export type MenubarMenuDescriptor<Key extends string = string, MenuKey extends string = string> = Readonly<{
13
+ id: MenuKey;
14
+ label: string;
15
+ items: readonly MenuItemDescriptor<Key>[];
16
+ disabled?: boolean;
17
+ }>;
18
+ export type MenubarDescriptor<Key extends string = string, MenuKey extends string = string> = Readonly<{
19
+ accessibilityLabel: string;
20
+ menus: readonly MenubarMenuDescriptor<Key, MenuKey>[];
21
+ }>;
22
+ export declare function validateMenubarDescriptor<Key extends string, MenuKey extends string>(descriptor: MenubarDescriptor<Key, MenuKey>): void;
23
+ /**
24
+ * 좌우 이동은 **비활성 메뉴를 건너뛰고 순환**한다. 막대 끝에서 멈추면 사용자가 방향을
25
+ * 바꿔 되돌아와야 하는데, 항목이 대여섯 개뿐인 가로 막대에서는 순환이 더 짧다.
26
+ */
27
+ export declare function resolveMenubarNavigation<Key extends string, MenuKey extends string>(descriptor: MenubarDescriptor<Key, MenuKey>, currentId: MenuKey, direction: "next" | "previous"): MenuKey;
28
+ export declare const menubarRecipe: {
29
+ readonly slots: readonly ["root", "menu", "label", "panel", "item"];
30
+ readonly minHeight: 44;
31
+ readonly gap: 4;
32
+ readonly paddingHorizontal: 8;
33
+ readonly label: {
34
+ readonly paddingHorizontal: 12;
35
+ readonly radius: 8;
36
+ readonly color: Readonly<{
37
+ source: "theme";
38
+ key: "textBody";
39
+ alpha?: number;
40
+ }>;
41
+ readonly openBackground: Readonly<{
42
+ source: "theme";
43
+ key: "primary";
44
+ alpha?: number;
45
+ }>;
46
+ };
47
+ readonly item: {
48
+ readonly minHeight: 44;
49
+ readonly paddingHorizontal: 12;
50
+ readonly gap: 12;
51
+ readonly radius: "md";
52
+ readonly label: {
53
+ readonly color: Readonly<{
54
+ source: "theme";
55
+ key: "textBody";
56
+ alpha?: number;
57
+ }>;
58
+ readonly textVariant: "body";
59
+ };
60
+ readonly description: {
61
+ readonly color: Readonly<{
62
+ source: "theme";
63
+ key: "textMuted";
64
+ alpha?: number;
65
+ }>;
66
+ readonly textVariant: "label";
67
+ };
68
+ readonly highlightedBackground: Readonly<{
69
+ source: "theme";
70
+ key: "text";
71
+ alpha?: number;
72
+ }>;
73
+ readonly focus: {
74
+ readonly color: Readonly<{
75
+ source: "theme";
76
+ key: "contentBrand";
77
+ alpha?: number;
78
+ }>;
79
+ readonly width: 2;
80
+ readonly offset: 2;
81
+ };
82
+ readonly selectedBackground: Readonly<{
83
+ source: "theme";
84
+ key: "primary";
85
+ alpha?: number;
86
+ }>;
87
+ readonly selectedIndicator: Readonly<{
88
+ source: "theme";
89
+ key: "contentBrand";
90
+ alpha?: number;
91
+ }>;
92
+ readonly danger: Readonly<{
93
+ source: "theme";
94
+ key: "danger";
95
+ alpha?: number;
96
+ }>;
97
+ };
98
+ readonly states: {
99
+ readonly focus: {
100
+ readonly color: Readonly<{
101
+ source: "theme";
102
+ key: "contentBrand";
103
+ alpha?: number;
104
+ }>;
105
+ readonly width: 2;
106
+ readonly offset: 2;
107
+ };
108
+ };
109
+ };
110
+ export declare const menubarBehavior: {
111
+ readonly controlled: readonly ["openMenuId", "defaultOpenMenuId", "onOpenMenuIdChange"];
112
+ readonly inputs: readonly ["menus", "accessibilityLabel"];
113
+ readonly events: readonly ["onAction"];
114
+ readonly stateAxes: {
115
+ readonly availability: readonly ["enabled", "disabled"];
116
+ readonly value: readonly ["open", "closed"];
117
+ readonly interaction: readonly ["idle", "hover", "focusVisible"];
118
+ };
119
+ readonly web: {
120
+ readonly roles: readonly ["menubar", "menuitem", "menu"];
121
+ readonly keyboard: readonly ["ArrowLeft", "ArrowRight", "ArrowDown", "ArrowUp", "Home", "End", "Enter", "Space", "Escape"];
122
+ readonly focus: "roving";
123
+ readonly dismiss: readonly ["escape", "outside"];
124
+ };
125
+ /** Web-only: a phone has no always-present menu bar, and a native app bar is the OS's. */
126
+ readonly native: {
127
+ readonly roles: readonly [];
128
+ readonly states: readonly [];
129
+ readonly actions: readonly [];
130
+ };
131
+ readonly scenarios: readonly ["left-and-right-move-between-menus-while-one-is-open-instead-of-closing-and-reopening", "exactly-one-menu-is-open-at-a-time-which-three-independent-menus-cannot-guarantee", "disabled-menus-are-skipped-by-navigation-and-cycling-is-shorter-than-stopping-at-the-end", "the-bar-is-a-single-tab-stop-with-roving-focus-not-one-stop-per-menu", "activating-an-item-runs-an-action-and-leaves-nothing-selected-unlike-tabs"];
132
+ };
133
+ //# sourceMappingURL=menubar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menubar.d.ts","sourceRoot":"","sources":["../src/menubar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAM3E;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,CAC/B,GAAG,SAAS,MAAM,GAAG,MAAM,EAC3B,OAAO,SAAS,MAAM,GAAG,MAAM,IAC7B,QAAQ,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,CAC3B,GAAG,SAAS,MAAM,GAAG,MAAM,EAC3B,OAAO,SAAS,MAAM,GAAG,MAAM,IAC7B,QAAQ,CAAC;IACX,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,SAAS,qBAAqB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;CACvD,CAAC,CAAC;AAQH,wBAAgB,yBAAyB,CAAC,GAAG,SAAS,MAAM,EAAE,OAAO,SAAS,MAAM,EAClF,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,GAC1C,IAAI,CAeN;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,SAAS,MAAM,EAAE,OAAO,SAAS,MAAM,EACjF,UAAU,EAAE,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,EAC3C,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,MAAM,GAAG,UAAU,GAC7B,OAAO,CAQT;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqBzB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;IAe1B,0FAA0F;;;;;;;CASvD,CAAC"}
@@ -0,0 +1,80 @@
1
+ import { collectionItemContract, focusIndicatorContract } from "./component-contracts.js";
2
+ import { control, radius, spacing } from "./foundations.js";
3
+ import { semanticColors } from "./semantic-colors.js";
4
+ function assertNonEmpty(value, field) {
5
+ if (typeof value !== "string" || value.trim().length === 0) {
6
+ throw new TypeError(`Menubar ${field} must not be empty`);
7
+ }
8
+ }
9
+ export function validateMenubarDescriptor(descriptor) {
10
+ assertNonEmpty(descriptor.accessibilityLabel, "accessibilityLabel");
11
+ if (!Array.isArray(descriptor.menus) || descriptor.menus.length === 0) {
12
+ throw new RangeError("Menubar must contain at least one menu");
13
+ }
14
+ const menuIds = new Set();
15
+ for (const menu of descriptor.menus) {
16
+ assertNonEmpty(menu.id, "menu id");
17
+ assertNonEmpty(menu.label, `menu ${menu.id} label`);
18
+ if (menuIds.has(menu.id))
19
+ throw new TypeError(`Duplicate Menubar menu id: ${menu.id}`);
20
+ menuIds.add(menu.id);
21
+ if (!Array.isArray(menu.items) || menu.items.length === 0) {
22
+ throw new RangeError(`Menubar menu ${menu.id} must contain at least one item`);
23
+ }
24
+ }
25
+ }
26
+ /**
27
+ * 좌우 이동은 **비활성 메뉴를 건너뛰고 순환**한다. 막대 끝에서 멈추면 사용자가 방향을
28
+ * 바꿔 되돌아와야 하는데, 항목이 대여섯 개뿐인 가로 막대에서는 순환이 더 짧다.
29
+ */
30
+ export function resolveMenubarNavigation(descriptor, currentId, direction) {
31
+ validateMenubarDescriptor(descriptor);
32
+ const enabled = descriptor.menus.filter((menu) => menu.disabled !== true);
33
+ if (enabled.length === 0)
34
+ return currentId;
35
+ const index = enabled.findIndex((menu) => menu.id === currentId);
36
+ if (index === -1)
37
+ return enabled[0].id;
38
+ const next = direction === "next" ? index + 1 : index - 1;
39
+ return enabled[(next + enabled.length) % enabled.length].id;
40
+ }
41
+ export const menubarRecipe = {
42
+ slots: ["root", "menu", "label", "panel", "item"],
43
+ minHeight: control.minTouchTarget,
44
+ gap: spacing.xxs,
45
+ paddingHorizontal: spacing.xs,
46
+ label: {
47
+ paddingHorizontal: spacing.sm,
48
+ radius: radius.sm,
49
+ color: semanticColors.content.body,
50
+ openBackground: semanticColors.interaction.selected,
51
+ },
52
+ item: collectionItemContract,
53
+ states: { focus: focusIndicatorContract },
54
+ };
55
+ export const menubarBehavior = {
56
+ controlled: ["openMenuId", "defaultOpenMenuId", "onOpenMenuIdChange"],
57
+ inputs: ["menus", "accessibilityLabel"],
58
+ events: ["onAction"],
59
+ stateAxes: {
60
+ availability: ["enabled", "disabled"],
61
+ value: ["open", "closed"],
62
+ interaction: ["idle", "hover", "focusVisible"],
63
+ },
64
+ web: {
65
+ roles: ["menubar", "menuitem", "menu"],
66
+ keyboard: ["ArrowLeft", "ArrowRight", "ArrowDown", "ArrowUp", "Home", "End", "Enter", "Space", "Escape"],
67
+ focus: "roving",
68
+ dismiss: ["escape", "outside"],
69
+ },
70
+ /** Web-only: a phone has no always-present menu bar, and a native app bar is the OS's. */
71
+ native: { roles: [], states: [], actions: [] },
72
+ scenarios: [
73
+ "left-and-right-move-between-menus-while-one-is-open-instead-of-closing-and-reopening",
74
+ "exactly-one-menu-is-open-at-a-time-which-three-independent-menus-cannot-guarantee",
75
+ "disabled-menus-are-skipped-by-navigation-and-cycling-is-shorter-than-stopping-at-the-end",
76
+ "the-bar-is-a-single-tab-stop-with-roving-focus-not-one-stop-per-menu",
77
+ "activating-an-item-runs-an-action-and-leaves-nothing-selected-unlike-tabs",
78
+ ],
79
+ };
80
+ //# sourceMappingURL=menubar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"menubar.js","sourceRoot":"","sources":["../src/menubar.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BehaviorContract, MenuItemDescriptor } from \"./behaviors.js\";\nimport type { ColorReference } from \"./color-references.js\";\nimport { collectionItemContract, focusIndicatorContract } from \"./component-contracts.js\";\nimport { control, radius, spacing } from \"./foundations.js\";\nimport { semanticColors } from \"./semantic-colors.js\";\n\n/**\n * 데스크톱 앱의 가로 메뉴 막대 — 파일·편집·보기처럼 항상 같은 자리에 있는 메뉴들.\n *\n * `Menu` 여러 개를 나란히 놓는 것과 다르다. 막대는 **하나의 키보드 단위**다: 메뉴가\n * 열린 상태에서 좌우 방향키를 누르면 옆 메뉴로 **넘어가고**(닫았다 여는 것이 아니라),\n * 한 번에 하나만 열린다. 독립된 Menu 세 개로는 그 이동이 성립하지 않는다.\n *\n * `Tabs`와도 다르다. Tabs는 화면을 바꾸고 선택 상태가 남는다. Menubar는 행동을 실행하고\n * 아무것도 선택되지 않은 상태로 돌아간다.\n */\nexport type MenubarMenuDescriptor<\n Key extends string = string,\n MenuKey extends string = string,\n> = Readonly<{\n id: MenuKey;\n label: string;\n items: readonly MenuItemDescriptor<Key>[];\n disabled?: boolean;\n}>;\n\nexport type MenubarDescriptor<\n Key extends string = string,\n MenuKey extends string = string,\n> = Readonly<{\n accessibilityLabel: string;\n menus: readonly MenubarMenuDescriptor<Key, MenuKey>[];\n}>;\n\nfunction assertNonEmpty(value: string, field: string): void {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`Menubar ${field} must not be empty`);\n }\n}\n\nexport function validateMenubarDescriptor<Key extends string, MenuKey extends string>(\n descriptor: MenubarDescriptor<Key, MenuKey>,\n): void {\n assertNonEmpty(descriptor.accessibilityLabel, \"accessibilityLabel\");\n if (!Array.isArray(descriptor.menus) || descriptor.menus.length === 0) {\n throw new RangeError(\"Menubar must contain at least one menu\");\n }\n const menuIds = new Set<MenuKey>();\n for (const menu of descriptor.menus) {\n assertNonEmpty(menu.id, \"menu id\");\n assertNonEmpty(menu.label, `menu ${menu.id} label`);\n if (menuIds.has(menu.id)) throw new TypeError(`Duplicate Menubar menu id: ${menu.id}`);\n menuIds.add(menu.id);\n if (!Array.isArray(menu.items) || menu.items.length === 0) {\n throw new RangeError(`Menubar menu ${menu.id} must contain at least one item`);\n }\n }\n}\n\n/**\n * 좌우 이동은 **비활성 메뉴를 건너뛰고 순환**한다. 막대 끝에서 멈추면 사용자가 방향을\n * 바꿔 되돌아와야 하는데, 항목이 대여섯 개뿐인 가로 막대에서는 순환이 더 짧다.\n */\nexport function resolveMenubarNavigation<Key extends string, MenuKey extends string>(\n descriptor: MenubarDescriptor<Key, MenuKey>,\n currentId: MenuKey,\n direction: \"next\" | \"previous\",\n): MenuKey {\n validateMenubarDescriptor(descriptor);\n const enabled = descriptor.menus.filter((menu) => menu.disabled !== true);\n if (enabled.length === 0) return currentId;\n const index = enabled.findIndex((menu) => menu.id === currentId);\n if (index === -1) return enabled[0]!.id;\n const next = direction === \"next\" ? index + 1 : index - 1;\n return enabled[(next + enabled.length) % enabled.length]!.id;\n}\n\nexport const menubarRecipe = {\n slots: [\"root\", \"menu\", \"label\", \"panel\", \"item\"] as const,\n minHeight: control.minTouchTarget,\n gap: spacing.xxs,\n paddingHorizontal: spacing.xs,\n label: {\n paddingHorizontal: spacing.sm,\n radius: radius.sm,\n color: semanticColors.content.body,\n openBackground: semanticColors.interaction.selected,\n },\n item: collectionItemContract,\n states: { focus: focusIndicatorContract },\n} as const satisfies {\n slots: readonly [\"root\", \"menu\", \"label\", \"panel\", \"item\"];\n minHeight: number;\n gap: number;\n paddingHorizontal: number;\n label: { paddingHorizontal: number; radius: number; color: ColorReference; openBackground: ColorReference };\n item: typeof collectionItemContract;\n states: { focus: typeof focusIndicatorContract };\n};\n\nexport const menubarBehavior = {\n controlled: [\"openMenuId\", \"defaultOpenMenuId\", \"onOpenMenuIdChange\"],\n inputs: [\"menus\", \"accessibilityLabel\"],\n events: [\"onAction\"],\n stateAxes: {\n availability: [\"enabled\", \"disabled\"],\n value: [\"open\", \"closed\"],\n interaction: [\"idle\", \"hover\", \"focusVisible\"],\n },\n web: {\n roles: [\"menubar\", \"menuitem\", \"menu\"],\n keyboard: [\"ArrowLeft\", \"ArrowRight\", \"ArrowDown\", \"ArrowUp\", \"Home\", \"End\", \"Enter\", \"Space\", \"Escape\"],\n focus: \"roving\",\n dismiss: [\"escape\", \"outside\"],\n },\n /** Web-only: a phone has no always-present menu bar, and a native app bar is the OS's. */\n native: { roles: [], states: [], actions: [] },\n scenarios: [\n \"left-and-right-move-between-menus-while-one-is-open-instead-of-closing-and-reopening\",\n \"exactly-one-menu-is-open-at-a-time-which-three-independent-menus-cannot-guarantee\",\n \"disabled-menus-are-skipped-by-navigation-and-cycling-is-shorter-than-stopping-at-the-end\",\n \"the-bar-is-a-single-tab-stop-with-roving-focus-not-one-stop-per-menu\",\n \"activating-an-item-runs-an-action-and-leaves-nothing-selected-unlike-tabs\",\n ],\n} as const satisfies BehaviorContract;\n"]}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * React Native 화면이 매번 다시 푸는 두 가지 — **키보드가 하단 행동을 가리는 문제**와
3
+ * **햅틱을 언제 울릴 것인가** — 의 계약이다. 컴포넌트가 아니라 판정과 어휘다.
4
+ *
5
+ * 왜 여기 있나: 폼이 있는 모든 RN 화면이 `KeyboardAvoidingView`의 `behavior`를 각자
6
+ * 고르고(iOS `padding`/Android `height`), BottomCTA가 키보드에 가려지는 것을 각자
7
+ * 발견했다. 정답이 플랫폼별로 고정돼 있는데 그 지식이 제품마다 흩어져 있었다.
8
+ *
9
+ * 햅틱도 같다. "성공했을 때 울린다"는 제품 결정이지만, **어떤 세기가 어떤 의미인가**는
10
+ * 디자인 시스템의 어휘다. 그것이 없으면 한 앱 안에서 저장은 무겁고 삭제는 가벼운
11
+ * 식으로 뒤섞인다.
12
+ */
13
+ export type KeyboardAvoidanceBehavior = "padding" | "height" | "position";
14
+ /**
15
+ * iOS는 키보드가 화면 위로 떠오르므로 `padding`이 맞고, Android는 창 자체가 줄어드는
16
+ * `adjustResize`가 기본이라 `height`가 맞는다. 이 표는 RN 문서의 권장을 그대로 옮긴 것이고,
17
+ * 제품이 다시 고르지 않게 하려고 계약에 둔다.
18
+ */
19
+ export declare function resolveKeyboardAvoidanceBehavior(platform: "ios" | "android"): KeyboardAvoidanceBehavior;
20
+ export type KeyboardAvoidanceDescriptor = Readonly<{
21
+ /** 키보드 위에 남겨 둘 여백. 하단 행동이 키보드에 붙어 보이지 않게 한다. */
22
+ offset?: number;
23
+ /** safe area 하단 값. BottomCTA가 이미 더한 값을 두 번 더하지 않도록 명시로 받는다. */
24
+ safeAreaBottom?: number;
25
+ }>;
26
+ export declare const keyboardAvoidanceDefaults: {
27
+ readonly offset: 12;
28
+ readonly safeAreaBottom: 0;
29
+ };
30
+ /**
31
+ * 키보드가 올라왔을 때 콘텐츠가 밀려야 할 거리. safe area는 **한 번만** 센다 —
32
+ * 키보드가 떠 있으면 홈 인디케이터 여백은 키보드가 가리므로 다시 더하면 두 겹이 된다.
33
+ */
34
+ export declare function resolveKeyboardInset(keyboardHeight: number, descriptor?: KeyboardAvoidanceDescriptor): number;
35
+ /**
36
+ * 햅틱 어휘. 세기가 아니라 **의미**로 부른다 — 세기로 부르면 화면마다 다른 뜻으로 쓰인다.
37
+ * 실제 진동은 제품이 자기 햅틱 라이브러리로 실행한다(HJM은 네이티브 모듈을 들이지 않는다).
38
+ */
39
+ export type HapticIntent =
40
+ /** 선택이 바뀌었다 — 세그먼트 이동, 토글, 슬라이더 눈금. */
41
+ "selection"
42
+ /** 되돌릴 수 있는 행동이 끝났다 — 저장, 담기. */
43
+ | "success"
44
+ /** 사용자가 고쳐야 한다 — 검증 실패, 제출 거절. */
45
+ | "warning"
46
+ /** 되돌릴 수 없는 일이 일어났다 — 삭제 확정, 결제 실패. */
47
+ | "error";
48
+ export declare const hapticIntents: readonly ["selection", "success", "warning", "error"];
49
+ /**
50
+ * 언제 **울리지 않아야** 하는가. 이것이 계약의 절반이다 — 접근성 설정에서 진동을 끈
51
+ * 사용자, 그리고 사용자가 시작하지 않은 변화(서버 푸시로 목록이 바뀌는 것)에는 울리지
52
+ * 않는다. 후자를 빼먹으면 주머니 속 기기가 이유 없이 떨린다.
53
+ */
54
+ export declare function shouldPlayHaptic(input: Readonly<{
55
+ userInitiated: boolean;
56
+ hapticsEnabled: boolean;
57
+ reducedMotion?: boolean;
58
+ }>): boolean;
59
+ export declare const nativePlatformBehavior: {
60
+ readonly controlled: readonly [];
61
+ readonly inputs: readonly ["keyboardHeight", "safeAreaBottom", "hapticsEnabled"];
62
+ readonly events: readonly ["onKeyboardInsetChange"];
63
+ readonly defaults: {
64
+ readonly offset: 12;
65
+ };
66
+ readonly configuration: {
67
+ readonly behavior: readonly ["padding", "height", "position"];
68
+ readonly intent: readonly ["selection", "success", "warning", "error"];
69
+ };
70
+ readonly stateAxes: {
71
+ readonly content: readonly ["idle", "loading"];
72
+ };
73
+ /** Web has no keyboard inset problem of this shape and no haptics contract. */
74
+ readonly web: {
75
+ readonly roles: readonly [];
76
+ readonly keyboard: readonly [];
77
+ readonly focus: "none";
78
+ };
79
+ readonly native: {
80
+ readonly roles: readonly [];
81
+ readonly states: readonly [];
82
+ readonly actions: readonly [];
83
+ };
84
+ readonly scenarios: readonly ["ios-uses-padding-and-android-uses-height-because-the-platforms-resize-differently", "the-safe-area-inset-is-counted-once-never-added-on-top-of-the-keyboard", "a-closed-keyboard-leaves-exactly-the-safe-area-inset-behind", "haptics-are-named-by-meaning-not-by-strength-so-one-app-stays-consistent", "a-change-the-user-did-not-start-never-vibrates", "reduce-motion-does-not-silence-haptics-they-are-different-settings", "the-design-system-never-bundles-a-native-haptics-module-the-product-plays-it"];
85
+ };
86
+ /** 키보드 전환 시간. 플랫폼 애니메이션과 맞춰 콘텐츠가 따로 놀지 않게 한다. */
87
+ export declare const keyboardTransitionDuration: 200;
88
+ //# sourceMappingURL=native-platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-platform.d.ts","sourceRoot":"","sources":["../src/native-platform.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,yBAAyB,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE1E;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,KAAK,GAAG,SAAS,GAC1B,yBAAyB,CAE3B;AAED,MAAM,MAAM,2BAA2B,GAAG,QAAQ,CAAC;IACjD,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;CAGoB,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,EACtB,UAAU,GAAE,2BAAgC,GAC3C,MAAM,CAQR;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY;AACtB,uCAAuC;AACrC,WAAW;AACb,iCAAiC;GAC/B,SAAS;AACX,kCAAkC;GAChC,SAAS;AACX,uCAAuC;GACrC,OAAO,CAAC;AAEZ,eAAO,MAAM,aAAa,uDAA0F,CAAC;AAErH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,QAAQ,CAAC;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,cAAc,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC5F,OAAO,CAQT;AAED,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;IAUjC,+EAA+E;;;;;;;;;;;;CAY5C,CAAC;AAEtC,iDAAiD;AACjD,eAAO,MAAM,0BAA0B,KAAgB,CAAC"}
@@ -0,0 +1,70 @@
1
+ import { motion, spacing } from "./foundations.js";
2
+ /**
3
+ * iOS는 키보드가 화면 위로 떠오르므로 `padding`이 맞고, Android는 창 자체가 줄어드는
4
+ * `adjustResize`가 기본이라 `height`가 맞는다. 이 표는 RN 문서의 권장을 그대로 옮긴 것이고,
5
+ * 제품이 다시 고르지 않게 하려고 계약에 둔다.
6
+ */
7
+ export function resolveKeyboardAvoidanceBehavior(platform) {
8
+ return platform === "ios" ? "padding" : "height";
9
+ }
10
+ export const keyboardAvoidanceDefaults = {
11
+ offset: spacing.sm,
12
+ safeAreaBottom: 0,
13
+ };
14
+ /**
15
+ * 키보드가 올라왔을 때 콘텐츠가 밀려야 할 거리. safe area는 **한 번만** 센다 —
16
+ * 키보드가 떠 있으면 홈 인디케이터 여백은 키보드가 가리므로 다시 더하면 두 겹이 된다.
17
+ */
18
+ export function resolveKeyboardInset(keyboardHeight, descriptor = {}) {
19
+ if (!Number.isFinite(keyboardHeight) || keyboardHeight < 0) {
20
+ throw new RangeError("Keyboard height must be a non-negative finite number");
21
+ }
22
+ const offset = descriptor.offset ?? keyboardAvoidanceDefaults.offset;
23
+ const safeAreaBottom = descriptor.safeAreaBottom ?? keyboardAvoidanceDefaults.safeAreaBottom;
24
+ if (keyboardHeight === 0)
25
+ return safeAreaBottom;
26
+ return Math.max(keyboardHeight + offset - safeAreaBottom, 0) + safeAreaBottom;
27
+ }
28
+ export const hapticIntents = ["selection", "success", "warning", "error"];
29
+ /**
30
+ * 언제 **울리지 않아야** 하는가. 이것이 계약의 절반이다 — 접근성 설정에서 진동을 끈
31
+ * 사용자, 그리고 사용자가 시작하지 않은 변화(서버 푸시로 목록이 바뀌는 것)에는 울리지
32
+ * 않는다. 후자를 빼먹으면 주머니 속 기기가 이유 없이 떨린다.
33
+ */
34
+ export function shouldPlayHaptic(input) {
35
+ if (!input.hapticsEnabled)
36
+ return false;
37
+ if (!input.userInitiated)
38
+ return false;
39
+ /*
40
+ Reduce Motion은 화면 움직임 설정이지 진동 설정이 아니다. 둘을 묶으면 모션을 끈
41
+ 사용자가 촉각 피드백까지 잃는다 — 그쪽이 오히려 유일한 확인 신호일 수 있다.
42
+ */
43
+ return true;
44
+ }
45
+ export const nativePlatformBehavior = {
46
+ controlled: [],
47
+ inputs: ["keyboardHeight", "safeAreaBottom", "hapticsEnabled"],
48
+ events: ["onKeyboardInsetChange"],
49
+ defaults: { offset: keyboardAvoidanceDefaults.offset },
50
+ configuration: {
51
+ behavior: ["padding", "height", "position"],
52
+ intent: [...hapticIntents],
53
+ },
54
+ stateAxes: { content: ["idle", "loading"] },
55
+ /** Web has no keyboard inset problem of this shape and no haptics contract. */
56
+ web: { roles: [], keyboard: [], focus: "none" },
57
+ native: { roles: [], states: [], actions: [] },
58
+ scenarios: [
59
+ "ios-uses-padding-and-android-uses-height-because-the-platforms-resize-differently",
60
+ "the-safe-area-inset-is-counted-once-never-added-on-top-of-the-keyboard",
61
+ "a-closed-keyboard-leaves-exactly-the-safe-area-inset-behind",
62
+ "haptics-are-named-by-meaning-not-by-strength-so-one-app-stays-consistent",
63
+ "a-change-the-user-did-not-start-never-vibrates",
64
+ "reduce-motion-does-not-silence-haptics-they-are-different-settings",
65
+ "the-design-system-never-bundles-a-native-haptics-module-the-product-plays-it",
66
+ ],
67
+ };
68
+ /** 키보드 전환 시간. 플랫폼 애니메이션과 맞춰 콘텐츠가 따로 놀지 않게 한다. */
69
+ export const keyboardTransitionDuration = motion.normal;
70
+ //# sourceMappingURL=native-platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"native-platform.js","sourceRoot":"","sources":["../src/native-platform.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAgBnD;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAC9C,QAA2B;IAE3B,OAAO,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;AACnD,CAAC;AASD,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,MAAM,EAAE,OAAO,CAAC,EAAE;IAClB,cAAc,EAAE,CAAC;CACuC,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,cAAsB,EACtB,aAA0C,EAAE;IAE5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,UAAU,CAAC,sDAAsD,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,yBAAyB,CAAC,MAAM,CAAC;IACrE,MAAM,cAAc,GAAG,UAAU,CAAC,cAAc,IAAI,yBAAyB,CAAC,cAAc,CAAC;IAC7F,IAAI,cAAc,KAAK,CAAC;QAAE,OAAO,cAAc,CAAC;IAChD,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,GAAG,cAAc,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC;AAChF,CAAC;AAgBD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAA4C,CAAC;AAErH;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAA6F;IAE7F,IAAI,CAAC,KAAK,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,aAAa;QAAE,OAAO,KAAK,CAAC;IACvC;;;MAGE;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU,EAAE,EAAE;IACd,MAAM,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;IAC9D,MAAM,EAAE,CAAC,uBAAuB,CAAC;IACjC,QAAQ,EAAE,EAAE,MAAM,EAAE,yBAAyB,CAAC,MAAM,EAAE;IACtD,aAAa,EAAE;QACb,QAAQ,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC;QAC3C,MAAM,EAAE,CAAC,GAAG,aAAa,CAAC;KAC3B;IACD,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;IAC3C,+EAA+E;IAC/E,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;IAC/C,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IAC9C,SAAS,EAAE;QACT,mFAAmF;QACnF,wEAAwE;QACxE,6DAA6D;QAC7D,0EAA0E;QAC1E,gDAAgD;QAChD,oEAAoE;QACpE,8EAA8E;KAC/E;CACkC,CAAC;AAEtC,iDAAiD;AACjD,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC","sourcesContent":["import type { BehaviorContract } from \"./behaviors.js\";\nimport { motion, spacing } from \"./foundations.js\";\n\n/**\n * React Native 화면이 매번 다시 푸는 두 가지 — **키보드가 하단 행동을 가리는 문제**와\n * **햅틱을 언제 울릴 것인가** — 의 계약이다. 컴포넌트가 아니라 판정과 어휘다.\n *\n * 왜 여기 있나: 폼이 있는 모든 RN 화면이 `KeyboardAvoidingView`의 `behavior`를 각자\n * 고르고(iOS `padding`/Android `height`), BottomCTA가 키보드에 가려지는 것을 각자\n * 발견했다. 정답이 플랫폼별로 고정돼 있는데 그 지식이 제품마다 흩어져 있었다.\n *\n * 햅틱도 같다. \"성공했을 때 울린다\"는 제품 결정이지만, **어떤 세기가 어떤 의미인가**는\n * 디자인 시스템의 어휘다. 그것이 없으면 한 앱 안에서 저장은 무겁고 삭제는 가벼운\n * 식으로 뒤섞인다.\n */\nexport type KeyboardAvoidanceBehavior = \"padding\" | \"height\" | \"position\";\n\n/**\n * iOS는 키보드가 화면 위로 떠오르므로 `padding`이 맞고, Android는 창 자체가 줄어드는\n * `adjustResize`가 기본이라 `height`가 맞는다. 이 표는 RN 문서의 권장을 그대로 옮긴 것이고,\n * 제품이 다시 고르지 않게 하려고 계약에 둔다.\n */\nexport function resolveKeyboardAvoidanceBehavior(\n platform: \"ios\" | \"android\",\n): KeyboardAvoidanceBehavior {\n return platform === \"ios\" ? \"padding\" : \"height\";\n}\n\nexport type KeyboardAvoidanceDescriptor = Readonly<{\n /** 키보드 위에 남겨 둘 여백. 하단 행동이 키보드에 붙어 보이지 않게 한다. */\n offset?: number;\n /** safe area 하단 값. BottomCTA가 이미 더한 값을 두 번 더하지 않도록 명시로 받는다. */\n safeAreaBottom?: number;\n}>;\n\nexport const keyboardAvoidanceDefaults = {\n offset: spacing.sm,\n safeAreaBottom: 0,\n} as const satisfies Required<KeyboardAvoidanceDescriptor>;\n\n/**\n * 키보드가 올라왔을 때 콘텐츠가 밀려야 할 거리. safe area는 **한 번만** 센다 —\n * 키보드가 떠 있으면 홈 인디케이터 여백은 키보드가 가리므로 다시 더하면 두 겹이 된다.\n */\nexport function resolveKeyboardInset(\n keyboardHeight: number,\n descriptor: KeyboardAvoidanceDescriptor = {},\n): number {\n if (!Number.isFinite(keyboardHeight) || keyboardHeight < 0) {\n throw new RangeError(\"Keyboard height must be a non-negative finite number\");\n }\n const offset = descriptor.offset ?? keyboardAvoidanceDefaults.offset;\n const safeAreaBottom = descriptor.safeAreaBottom ?? keyboardAvoidanceDefaults.safeAreaBottom;\n if (keyboardHeight === 0) return safeAreaBottom;\n return Math.max(keyboardHeight + offset - safeAreaBottom, 0) + safeAreaBottom;\n}\n\n/**\n * 햅틱 어휘. 세기가 아니라 **의미**로 부른다 — 세기로 부르면 화면마다 다른 뜻으로 쓰인다.\n * 실제 진동은 제품이 자기 햅틱 라이브러리로 실행한다(HJM은 네이티브 모듈을 들이지 않는다).\n */\nexport type HapticIntent =\n /** 선택이 바뀌었다 — 세그먼트 이동, 토글, 슬라이더 눈금. */\n | \"selection\"\n /** 되돌릴 수 있는 행동이 끝났다 — 저장, 담기. */\n | \"success\"\n /** 사용자가 고쳐야 한다 — 검증 실패, 제출 거절. */\n | \"warning\"\n /** 되돌릴 수 없는 일이 일어났다 — 삭제 확정, 결제 실패. */\n | \"error\";\n\nexport const hapticIntents = [\"selection\", \"success\", \"warning\", \"error\"] as const satisfies readonly HapticIntent[];\n\n/**\n * 언제 **울리지 않아야** 하는가. 이것이 계약의 절반이다 — 접근성 설정에서 진동을 끈\n * 사용자, 그리고 사용자가 시작하지 않은 변화(서버 푸시로 목록이 바뀌는 것)에는 울리지\n * 않는다. 후자를 빼먹으면 주머니 속 기기가 이유 없이 떨린다.\n */\nexport function shouldPlayHaptic(\n input: Readonly<{ userInitiated: boolean; hapticsEnabled: boolean; reducedMotion?: boolean }>,\n): boolean {\n if (!input.hapticsEnabled) return false;\n if (!input.userInitiated) return false;\n /*\n Reduce Motion은 화면 움직임 설정이지 진동 설정이 아니다. 둘을 묶으면 모션을 끈\n 사용자가 촉각 피드백까지 잃는다 — 그쪽이 오히려 유일한 확인 신호일 수 있다.\n */\n return true;\n}\n\nexport const nativePlatformBehavior = {\n controlled: [],\n inputs: [\"keyboardHeight\", \"safeAreaBottom\", \"hapticsEnabled\"],\n events: [\"onKeyboardInsetChange\"],\n defaults: { offset: keyboardAvoidanceDefaults.offset },\n configuration: {\n behavior: [\"padding\", \"height\", \"position\"],\n intent: [...hapticIntents],\n },\n stateAxes: { content: [\"idle\", \"loading\"] },\n /** Web has no keyboard inset problem of this shape and no haptics contract. */\n web: { roles: [], keyboard: [], focus: \"none\" },\n native: { roles: [], states: [], actions: [] },\n scenarios: [\n \"ios-uses-padding-and-android-uses-height-because-the-platforms-resize-differently\",\n \"the-safe-area-inset-is-counted-once-never-added-on-top-of-the-keyboard\",\n \"a-closed-keyboard-leaves-exactly-the-safe-area-inset-behind\",\n \"haptics-are-named-by-meaning-not-by-strength-so-one-app-stays-consistent\",\n \"a-change-the-user-did-not-start-never-vibrates\",\n \"reduce-motion-does-not-silence-haptics-they-are-different-settings\",\n \"the-design-system-never-bundles-a-native-haptics-module-the-product-plays-it\",\n ],\n} as const satisfies BehaviorContract;\n\n/** 키보드 전환 시간. 플랫폼 애니메이션과 맞춰 콘텐츠가 따로 놀지 않게 한다. */\nexport const keyboardTransitionDuration = motion.normal;\n"]}
package/dist/popover.d.ts CHANGED
@@ -35,10 +35,8 @@ export type PopoverDescriptor = Readonly<{
35
35
  placement?: PopoverPlacement;
36
36
  align?: PopoverAlign;
37
37
  /**
38
- * Only needed when the content has no visible heading the platform
39
- * accessibility tree can already read as the surface's name. Most Popover
40
- * content should carry its own heading; this is an escape hatch, not the
41
- * default path.
38
+ * Optional explicit accessible name. A renderer must connect its visible
39
+ * heading with aria-labelledby; a heading alone does not name a dialog.
42
40
  */
43
41
  accessibilityLabel?: string;
44
42
  }>;
@@ -64,12 +62,29 @@ export type PopoverDismissPolicy = Readonly<{
64
62
  escapeDismiss: boolean;
65
63
  focusOutDismiss: boolean;
66
64
  }>;
65
+ /**
66
+ * 무엇이 popover를 여는가. `press`가 기본이고 `hover`는 **읽기 전용 미리보기**
67
+ * (다른 시스템의 HoverCard)를 위한 축이다.
68
+ *
69
+ * 별도 컴포넌트를 만들지 않은 이유: 표면·초점·dismiss·충돌 회피가 전부 같고 다른 것은
70
+ * 여는 방법 하나뿐이다. 두 컴포넌트로 나누면 그 네 가지가 두 벌이 된다.
71
+ *
72
+ * 대신 `hover`에는 제약이 붙는다 — hover로만 열리는 내용에 **행동을 두면 안 된다**.
73
+ * 포인터가 없는 사용자는 그 행동에 닿을 수 없기 때문이다. 미리보기는 읽기 전용이다.
74
+ */
75
+ export type PopoverOpenOn = "press" | "hover";
67
76
  export declare const popoverBehaviorDefaults: {
77
+ readonly openOn: PopoverOpenOn;
68
78
  readonly dismissible: true;
69
79
  readonly outsideDismiss: true;
70
80
  readonly escapeDismiss: true;
71
81
  readonly focusOutDismiss: true;
72
82
  };
83
+ /** hover로 열 때의 지연. 지나가는 포인터마다 열리면 화면이 깜빡인다. */
84
+ export declare const popoverHoverDelay: {
85
+ readonly open: 300;
86
+ readonly close: 150;
87
+ };
73
88
  export type ControlledPopoverOpenState = Readonly<{
74
89
  open: boolean;
75
90
  defaultOpen?: never;
@@ -1 +1 @@
1
- {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../src/popover.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,QAAQ,GACR,cAAc,CAAC;AAEnB;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,oBAAoB,CAAC;AAEvE,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,MAAM,EAAE,uBAAuB,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;CAG6C,CAAC;AAEpF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;CAKK,CAAC;AAE1C,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,wBAAwB,KAC9B,IAAI,CAAC;CACX,CAAC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GACxB,0BAA0B,GAC1B,4BAA4B,CAAC;AAEjC,6FAA6F;AAC7F,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAuBpE,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CA6B7E;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,iBAAiB,GAC5B,yBAAyB,CAS3B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAgCtE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,oBAAoB,EAC5B,MAAM,GAAE,oBAA8C,GACrD,OAAO,CAOT;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,qYAS3B,CAAC"}
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../src/popover.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,QAAQ,GACR,cAAc,CAAC;AAEnB;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,oBAAoB,CAAC;AAEvE,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C,MAAM,EAAE,uBAAuB,CAAC;CACjC,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC/C,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;CAG6C,CAAC;AAEpF;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9C,eAAO,MAAM,uBAAuB;qBACf,aAAa;;;;;CAK6C,CAAC;AAEhF,+CAA+C;AAC/C,eAAO,MAAM,iBAAiB;;;CAAqC,CAAC;AAEpE,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAChD,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,CAAC,EAAE,KAAK,CAAC;IACpB,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IAClD,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,wBAAwB,KAC9B,IAAI,CAAC;CACX,CAAC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GACxB,0BAA0B,GAC1B,4BAA4B,CAAC;AAEjC,6FAA6F;AAC7F,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;AAuBpE,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CA6B7E;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,iBAAiB,GAC5B,yBAAyB,CAS3B;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAgCtE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,oBAAoB,EAC5B,MAAM,GAAE,oBAA8C,GACrD,OAAO,CAOT;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBzB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,qYAS3B,CAAC"}
package/dist/popover.js CHANGED
@@ -5,11 +5,14 @@ export const popoverDescriptorDefaults = {
5
5
  align: "start",
6
6
  };
7
7
  export const popoverBehaviorDefaults = {
8
+ openOn: "press",
8
9
  dismissible: true,
9
10
  outsideDismiss: true,
10
11
  escapeDismiss: true,
11
12
  focusOutDismiss: true,
12
13
  };
14
+ /** hover로 열 때의 지연. 지나가는 포인터마다 열리면 화면이 깜빡인다. */
15
+ export const popoverHoverDelay = { open: 300, close: 150 };
13
16
  const placements = new Set(["top", "bottom", "start", "end"]);
14
17
  const alignments = new Set(["start", "center", "end"]);
15
18
  const descriptorKeys = new Set(["placement", "align", "accessibilityLabel"]);