@hjmds/design-contracts 1.30.0 → 1.31.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 (90) hide show
  1. package/dist/behaviors.d.ts +1 -0
  2. package/dist/behaviors.d.ts.map +1 -1
  3. package/dist/bottom-navigation.d.ts +24 -0
  4. package/dist/bottom-navigation.d.ts.map +1 -1
  5. package/dist/bottom-navigation.js +34 -0
  6. package/dist/bottom-navigation.js.map +1 -1
  7. package/dist/carousel.d.ts +30 -0
  8. package/dist/carousel.d.ts.map +1 -1
  9. package/dist/carousel.js +32 -0
  10. package/dist/carousel.js.map +1 -1
  11. package/dist/catalog.d.ts +141 -1
  12. package/dist/catalog.d.ts.map +1 -1
  13. package/dist/catalog.js +14 -5
  14. package/dist/catalog.js.map +1 -1
  15. package/dist/component-recipes.d.ts +87 -0
  16. package/dist/component-recipes.d.ts.map +1 -1
  17. package/dist/component-recipes.js +44 -1
  18. package/dist/component-recipes.js.map +1 -1
  19. package/dist/icon.d.ts +58 -1
  20. package/dist/icon.d.ts.map +1 -1
  21. package/dist/icon.js +69 -0
  22. package/dist/icon.js.map +1 -1
  23. package/dist/image-choice.d.ts +7 -0
  24. package/dist/image-choice.d.ts.map +1 -1
  25. package/dist/image-choice.js +7 -0
  26. package/dist/image-choice.js.map +1 -1
  27. package/dist/index.d.ts +3 -3
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -2
  30. package/dist/index.js.map +1 -1
  31. package/dist/recipes.d.ts +1 -1
  32. package/dist/recipes.d.ts.map +1 -1
  33. package/dist/recipes.js.map +1 -1
  34. package/dist/screen-patterns.d.ts +100 -0
  35. package/dist/screen-patterns.d.ts.map +1 -1
  36. package/dist/screen-patterns.js +98 -3
  37. package/dist/screen-patterns.js.map +1 -1
  38. package/dist/showcase.d.ts.map +1 -1
  39. package/dist/showcase.js +3 -0
  40. package/dist/showcase.js.map +1 -1
  41. package/dist/steps.d.ts +16 -7
  42. package/dist/steps.d.ts.map +1 -1
  43. package/dist/steps.js +6 -1
  44. package/dist/steps.js.map +1 -1
  45. package/dist/version.d.ts +1 -1
  46. package/dist/version.js +1 -1
  47. package/dist/version.js.map +1 -1
  48. package/docs/bottom-navigation.md +10 -0
  49. package/docs/carousel.md +8 -0
  50. package/docs/dialog.md +23 -0
  51. package/docs/generated/component-maturity.md +7 -4
  52. package/docs/generated/renderer-evidence.json +313 -17
  53. package/docs/generated/renderer-evidence.md +9 -3
  54. package/docs/generated/showcase-manifest.json +161 -5
  55. package/docs/icon.md +9 -0
  56. package/docs/screen-patterns.md +18 -0
  57. package/docs/steps.md +4 -3
  58. package/docs/usage/README.md +5 -2
  59. package/docs/usage/SELECTION.md +1 -1
  60. package/docs/usage/components/auth-screen-layout.md +15 -5
  61. package/docs/usage/components/bottom-navigation.md +65 -2
  62. package/docs/usage/components/card.md +36 -5
  63. package/docs/usage/components/carousel.md +1 -0
  64. package/docs/usage/components/chat-date-separator.md +86 -0
  65. package/docs/usage/components/chat-message.md +10 -1
  66. package/docs/usage/components/chat-screen.md +3 -2
  67. package/docs/usage/components/comment-thread-row.md +11 -3
  68. package/docs/usage/components/comment-thread-screen.md +1 -1
  69. package/docs/usage/components/dialog.md +69 -0
  70. package/docs/usage/components/editor-screen.md +6 -2
  71. package/docs/usage/components/field.md +13 -0
  72. package/docs/usage/components/icon-tile.md +10 -1
  73. package/docs/usage/components/icon.md +45 -6
  74. package/docs/usage/components/image-choice-group.md +3 -1
  75. package/docs/usage/components/media-selection-screen.md +17 -0
  76. package/docs/usage/components/message-composer.md +4 -1
  77. package/docs/usage/components/moderation-screen.md +88 -2
  78. package/docs/usage/components/page-indicator.md +102 -0
  79. package/docs/usage/components/profile-screen.md +9 -3
  80. package/docs/usage/components/profile-summary.md +3 -3
  81. package/docs/usage/components/screen-layout.md +9 -0
  82. package/docs/usage/components/steps.md +14 -7
  83. package/docs/usage/components/tabs.md +21 -1
  84. package/docs/usage/components/text.md +30 -1
  85. package/docs/usage/components/typing-indicator.md +89 -0
  86. package/docs/usage/screens/common-login.md +3 -1
  87. package/docs/usage/screens/common-profile.md +3 -3
  88. package/docs/usage/screens/flow-editor.md +13 -2
  89. package/docs/usage/screens/flow-moderation.md +31 -3
  90. package/package.json +1 -1
@@ -948,6 +948,28 @@ export const bottomNavigationRecipe = {
948
948
  selectedDepth: 3,
949
949
  selectedDepthColor: semanticColors.interaction.depth,
950
950
  },
951
+ /**
952
+ * Raised center destination (`prominent` item, Diairy write tab, 2026-10-18). The circle is the large control
953
+ * height plus one 4pt step so it outranks the 40pt indicators beside it. Renderers lift it by
954
+ * `diameter - indicator.minHeight` so its label stays on the same line as the other labels. It keeps brand
955
+ * fill in both states because a dimmed circle would read as a large idle icon, not the product's main entry;
956
+ * selection evidence stays on the label (weight and color), as for other items.
957
+ */
958
+ prominentDestination: {
959
+ diameter: control.buttonHeight.large + spacing.xxs,
960
+ icon: "lg",
961
+ background: semanticColors.action.brand.background,
962
+ content: semanticColors.action.brand.content,
963
+ shadow: floatingSurfaceContract.shadow,
964
+ },
965
+ /**
966
+ * App-icon slots for `configuration.iconSize` (Utilverse dock artwork, 2026-10-18). `standard` keeps the
967
+ * density glyph; 44 is the minimum touch target and 52 the large control height, the sizes the dock used.
968
+ */
969
+ iconSizes: {
970
+ large: control.minTouchTarget,
971
+ xlarge: control.buttonHeight.large,
972
+ },
951
973
  adaptive: {
952
974
  web: "fixed-compact-viewport",
953
975
  native: "navigator-tab-bar",
@@ -1100,7 +1122,16 @@ export const bottomNavigationRecipe = {
1100
1122
  };
1101
1123
  export const tabsRecipe = {
1102
1124
  slots: ["root", "list", "tab", "label", "indicator", "panel"],
1103
- defaults: { size: "medium", layout: "content", overflow: "scroll" },
1125
+ defaults: { size: "medium", layout: "content", overflow: "scroll", indicator: "underline" },
1126
+ /**
1127
+ * Selection mark. `filled` paints the selected tab as a brand-tinted pill instead of the 2pt underline and
1128
+ * drops the list divider, which only anchors underlines (Diairy nest tabs, 2026-10-18: the app's tab bar
1129
+ * already marks the current place with this pill, so in-screen tabs looked like a second product).
1130
+ */
1131
+ indicators: {
1132
+ underline: { listDivider: true, background: null, selectedContent: semanticColors.content.primary, radius: null },
1133
+ filled: { listDivider: false, background: semanticColors.surface.brand, selectedContent: semanticColors.content.brand, radius: "full" },
1134
+ },
1104
1135
  sizes: {
1105
1136
  small: {
1106
1137
  minHeight: control.minTouchTarget,
@@ -1454,6 +1485,18 @@ export const dialogRecipe = {
1454
1485
  shadow: floatingSurfaceContract.shadow,
1455
1486
  },
1456
1487
  transition: { enter: motionPreset.enter, exit: motionPreset.exit },
1488
+ /**
1489
+ * ImmersiveOverlay (Dialog companion, 1.31.0): an edge-to-edge stage with a control bar and no card, scrim or
1490
+ * header, for presentations such as a display board (utilverse used a raw RN Modal because Dialog/Sheet always
1491
+ * framed their content). The stage is product-drawn; the bar reuses screen spacing so it matches a screen footer.
1492
+ */
1493
+ immersive: {
1494
+ background: semanticColors.canvas,
1495
+ controls: { padding: spacing.md, gap: spacing.xs, actionGap: spacing.sm },
1496
+ // A presentation is read from across a room: rotation follows the device even when the app is portrait-only.
1497
+ orientations: ["portrait", "landscape-left", "landscape-right"],
1498
+ statusBarHidden: true,
1499
+ },
1457
1500
  };
1458
1501
  export const alertDialogRecipe = {
1459
1502
  slots: [