@starci/grammar 0.10.0 → 0.12.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 (191) hide show
  1. package/README.md +139 -8
  2. package/dist/.build-stamp.json +4 -4
  3. package/dist/common/components-avatar-group.css +65 -0
  4. package/dist/common/components-forms.css +86 -56
  5. package/dist/common/components-list-panel.css +13 -0
  6. package/dist/common/components-navigation.css +161 -32
  7. package/dist/common/components-overlays.css +44 -86
  8. package/dist/common/components-surface-controls.css +15 -0
  9. package/dist/common/registry.d.ts +22 -18
  10. package/dist/common/registry.d.ts.map +1 -1
  11. package/dist/common/registry.js +2 -2
  12. package/dist/common/registry.js.map +1 -1
  13. package/dist/common/renderers-forms.d.ts +14 -14
  14. package/dist/common/renderers-forms.d.ts.map +1 -1
  15. package/dist/common/renderers-forms.js.map +1 -1
  16. package/dist/common/renderers-navigation.d.ts +11 -5
  17. package/dist/common/renderers-navigation.d.ts.map +1 -1
  18. package/dist/common/renderers-navigation.js +8 -2
  19. package/dist/common/renderers-navigation.js.map +1 -1
  20. package/dist/common/renderers.d.ts +2 -1
  21. package/dist/common/renderers.d.ts.map +1 -1
  22. package/dist/common/renderers.js +1 -0
  23. package/dist/common/renderers.js.map +1 -1
  24. package/dist/common/rule-catalog.generated.d.ts +1 -1
  25. package/dist/common/rule-catalog.generated.d.ts.map +1 -1
  26. package/dist/common/rule-catalog.generated.js +3 -2
  27. package/dist/common/rule-catalog.generated.js.map +1 -1
  28. package/dist/common/styles.css +61 -2
  29. package/dist/core/OtpInput.d.ts +3 -0
  30. package/dist/core/OtpInput.d.ts.map +1 -1
  31. package/dist/core/OtpInput.js +4 -2
  32. package/dist/core/OtpInput.js.map +1 -1
  33. package/dist/core/branch/AlertDialog/index.d.ts.map +1 -1
  34. package/dist/core/branch/AlertDialog/index.js +25 -20
  35. package/dist/core/branch/AlertDialog/index.js.map +1 -1
  36. package/dist/core/branch/ComboBox/index.d.ts +2 -2
  37. package/dist/core/branch/ComboBox/index.d.ts.map +1 -1
  38. package/dist/core/branch/ComboBox/index.js +3 -1
  39. package/dist/core/branch/ComboBox/index.js.map +1 -1
  40. package/dist/core/branch/DatePicker/index.d.ts +2 -2
  41. package/dist/core/branch/DatePicker/index.d.ts.map +1 -1
  42. package/dist/core/branch/DatePicker/index.js +3 -1
  43. package/dist/core/branch/DatePicker/index.js.map +1 -1
  44. package/dist/core/branch/DateRangePicker/index.d.ts +2 -2
  45. package/dist/core/branch/DateRangePicker/index.d.ts.map +1 -1
  46. package/dist/core/branch/DateRangePicker/index.js +3 -1
  47. package/dist/core/branch/DateRangePicker/index.js.map +1 -1
  48. package/dist/core/branch/Dialog/index.d.ts.map +1 -1
  49. package/dist/core/branch/Dialog/index.js +6 -2
  50. package/dist/core/branch/Dialog/index.js.map +1 -1
  51. package/dist/core/branch/Drawer/index.d.ts.map +1 -1
  52. package/dist/core/branch/Drawer/index.js +6 -2
  53. package/dist/core/branch/Drawer/index.js.map +1 -1
  54. package/dist/core/branch/DropdownMenu/index.d.ts +16 -4
  55. package/dist/core/branch/DropdownMenu/index.d.ts.map +1 -1
  56. package/dist/core/branch/DropdownMenu/index.js +18 -8
  57. package/dist/core/branch/DropdownMenu/index.js.map +1 -1
  58. package/dist/core/branch/ListBox/index.d.ts +20 -5
  59. package/dist/core/branch/ListBox/index.d.ts.map +1 -1
  60. package/dist/core/branch/ListBox/index.js +19 -9
  61. package/dist/core/branch/ListBox/index.js.map +1 -1
  62. package/dist/core/branch/Popover/index.d.ts.map +1 -1
  63. package/dist/core/branch/Popover/index.js +2 -1
  64. package/dist/core/branch/Popover/index.js.map +1 -1
  65. package/dist/core/branch/Rail/index.d.ts.map +1 -1
  66. package/dist/core/branch/Rail/index.js +4 -2
  67. package/dist/core/branch/Rail/index.js.map +1 -1
  68. package/dist/core/branch/Select/index.d.ts +6 -3
  69. package/dist/core/branch/Select/index.d.ts.map +1 -1
  70. package/dist/core/branch/Select/index.js +14 -21
  71. package/dist/core/branch/Select/index.js.map +1 -1
  72. package/dist/core/branch/SurfaceAccordionCard/index.d.ts.map +1 -1
  73. package/dist/core/branch/SurfaceAccordionCard/index.js +3 -1
  74. package/dist/core/branch/SurfaceAccordionCard/index.js.map +1 -1
  75. package/dist/core/branch/SurfaceCard/index.d.ts.map +1 -1
  76. package/dist/core/branch/SurfaceCard/index.js +3 -1
  77. package/dist/core/branch/SurfaceCard/index.js.map +1 -1
  78. package/dist/core/branch/SurfaceListCard/index.d.ts.map +1 -1
  79. package/dist/core/branch/SurfaceListCard/index.js +3 -1
  80. package/dist/core/branch/SurfaceListCard/index.js.map +1 -1
  81. package/dist/core/composite/AvatarButton/index.d.ts +22 -0
  82. package/dist/core/composite/AvatarButton/index.d.ts.map +1 -0
  83. package/dist/core/composite/AvatarButton/index.js +11 -0
  84. package/dist/core/composite/AvatarButton/index.js.map +1 -0
  85. package/dist/core/composite/AvatarGroup/index.d.ts +11 -3
  86. package/dist/core/composite/AvatarGroup/index.d.ts.map +1 -1
  87. package/dist/core/composite/AvatarGroup/index.js +9 -5
  88. package/dist/core/composite/AvatarGroup/index.js.map +1 -1
  89. package/dist/core/composite/CheckboxGroup/index.d.ts +2 -2
  90. package/dist/core/composite/CheckboxGroup/index.d.ts.map +1 -1
  91. package/dist/core/composite/CheckboxGroup/index.js +5 -1
  92. package/dist/core/composite/CheckboxGroup/index.js.map +1 -1
  93. package/dist/core/composite/IdentityLockup/index.d.ts +20 -0
  94. package/dist/core/composite/IdentityLockup/index.d.ts.map +1 -0
  95. package/dist/core/composite/IdentityLockup/index.js +11 -0
  96. package/dist/core/composite/IdentityLockup/index.js.map +1 -0
  97. package/dist/core/composite/RadioGroup/index.d.ts +2 -2
  98. package/dist/core/composite/RadioGroup/index.d.ts.map +1 -1
  99. package/dist/core/composite/RadioGroup/index.js +5 -1
  100. package/dist/core/composite/RadioGroup/index.js.map +1 -1
  101. package/dist/core/composite/Timeline/index.js +1 -1
  102. package/dist/core/composite/Timeline/index.js.map +1 -1
  103. package/dist/core/composition/ChatWorkspace/index.d.ts.map +1 -1
  104. package/dist/core/composition/ChatWorkspace/index.js +2 -1
  105. package/dist/core/composition/ChatWorkspace/index.js.map +1 -1
  106. package/dist/core/composition/Sidebar/index.d.ts +1 -1
  107. package/dist/core/composition/Sidebar/index.d.ts.map +1 -1
  108. package/dist/core/composition/Sidebar/index.js +10 -4
  109. package/dist/core/composition/Sidebar/index.js.map +1 -1
  110. package/dist/core/composition/WorkspaceShell/classNames.d.ts +1 -0
  111. package/dist/core/composition/WorkspaceShell/classNames.d.ts.map +1 -1
  112. package/dist/core/composition/WorkspaceShell/classNames.js +1 -0
  113. package/dist/core/composition/WorkspaceShell/classNames.js.map +1 -1
  114. package/dist/core/composition/WorkspaceShell/index.d.ts +30 -0
  115. package/dist/core/composition/WorkspaceShell/index.d.ts.map +1 -1
  116. package/dist/core/composition/WorkspaceShell/index.js +9 -4
  117. package/dist/core/composition/WorkspaceShell/index.js.map +1 -1
  118. package/dist/core/dna.d.ts +5 -0
  119. package/dist/core/dna.d.ts.map +1 -1
  120. package/dist/core/dna.js +5 -0
  121. package/dist/core/dna.js.map +1 -1
  122. package/dist/core/overlayScope.d.ts +16 -0
  123. package/dist/core/overlayScope.d.ts.map +1 -1
  124. package/dist/core/overlayScope.js +12 -0
  125. package/dist/core/overlayScope.js.map +1 -1
  126. package/dist/core/primitive/Avatar/index.d.ts +17 -6
  127. package/dist/core/primitive/Avatar/index.d.ts.map +1 -1
  128. package/dist/core/primitive/Avatar/index.js +21 -4
  129. package/dist/core/primitive/Avatar/index.js.map +1 -1
  130. package/dist/core/primitive/Checkbox/index.d.ts +2 -2
  131. package/dist/core/primitive/Checkbox/index.d.ts.map +1 -1
  132. package/dist/core/primitive/Checkbox/index.js +5 -1
  133. package/dist/core/primitive/Checkbox/index.js.map +1 -1
  134. package/dist/core/primitive/DateField/index.d.ts +2 -2
  135. package/dist/core/primitive/DateField/index.d.ts.map +1 -1
  136. package/dist/core/primitive/DateField/index.js +5 -1
  137. package/dist/core/primitive/DateField/index.js.map +1 -1
  138. package/dist/core/primitive/Field/index.d.ts +5 -2
  139. package/dist/core/primitive/Field/index.d.ts.map +1 -1
  140. package/dist/core/primitive/Field/index.js +2 -2
  141. package/dist/core/primitive/Field/index.js.map +1 -1
  142. package/dist/core/primitive/Input/index.d.ts +2 -1
  143. package/dist/core/primitive/Input/index.d.ts.map +1 -1
  144. package/dist/core/primitive/Input/index.js +4 -2
  145. package/dist/core/primitive/Input/index.js.map +1 -1
  146. package/dist/core/primitive/Kbd/index.d.ts +2 -0
  147. package/dist/core/primitive/Kbd/index.d.ts.map +1 -1
  148. package/dist/core/primitive/Kbd/index.js +5 -3
  149. package/dist/core/primitive/Kbd/index.js.map +1 -1
  150. package/dist/core/primitive/NumberField/index.d.ts +2 -2
  151. package/dist/core/primitive/NumberField/index.d.ts.map +1 -1
  152. package/dist/core/primitive/NumberField/index.js +5 -1
  153. package/dist/core/primitive/NumberField/index.js.map +1 -1
  154. package/dist/core/primitive/PlainPressable/index.d.ts +21 -0
  155. package/dist/core/primitive/PlainPressable/index.d.ts.map +1 -0
  156. package/dist/core/primitive/PlainPressable/index.js +16 -0
  157. package/dist/core/primitive/PlainPressable/index.js.map +1 -0
  158. package/dist/core/primitive/PressableField/index.d.ts +4 -1
  159. package/dist/core/primitive/PressableField/index.d.ts.map +1 -1
  160. package/dist/core/primitive/PressableField/index.js +5 -1
  161. package/dist/core/primitive/PressableField/index.js.map +1 -1
  162. package/dist/core/primitive/RelativeTime/clock.d.ts +5 -0
  163. package/dist/core/primitive/RelativeTime/clock.d.ts.map +1 -0
  164. package/dist/core/primitive/RelativeTime/clock.js +28 -0
  165. package/dist/core/primitive/RelativeTime/clock.js.map +1 -0
  166. package/dist/core/primitive/RelativeTime/index.d.ts +18 -0
  167. package/dist/core/primitive/RelativeTime/index.d.ts.map +1 -0
  168. package/dist/core/primitive/RelativeTime/index.js +45 -0
  169. package/dist/core/primitive/RelativeTime/index.js.map +1 -0
  170. package/dist/core/primitive/SearchField/index.d.ts +2 -2
  171. package/dist/core/primitive/SearchField/index.d.ts.map +1 -1
  172. package/dist/core/primitive/SearchField/index.js +5 -1
  173. package/dist/core/primitive/SearchField/index.js.map +1 -1
  174. package/dist/core/primitive/Switch/index.d.ts +18 -2
  175. package/dist/core/primitive/Switch/index.d.ts.map +1 -1
  176. package/dist/core/primitive/Switch/index.js +2 -1
  177. package/dist/core/primitive/Switch/index.js.map +1 -1
  178. package/dist/core/primitive/Textarea/index.d.ts +2 -2
  179. package/dist/core/primitive/Textarea/index.d.ts.map +1 -1
  180. package/dist/core/primitive/Textarea/index.js +3 -1
  181. package/dist/core/primitive/Textarea/index.js.map +1 -1
  182. package/dist/core/primitive/TimeField/index.d.ts +2 -2
  183. package/dist/core/primitive/TimeField/index.d.ts.map +1 -1
  184. package/dist/core/primitive/TimeField/index.js +5 -1
  185. package/dist/core/primitive/TimeField/index.js.map +1 -1
  186. package/dist/core/surfaceContext.d.ts +11 -0
  187. package/dist/core/surfaceContext.d.ts.map +1 -0
  188. package/dist/core/surfaceContext.js +14 -0
  189. package/dist/core/surfaceContext.js.map +1 -0
  190. package/dist/offset-pop/components-overlays.css +1 -1
  191. package/package.json +8 -3
@@ -652,6 +652,18 @@
652
652
  flex: 0 0 auto;
653
653
  }
654
654
 
655
+ /* The control size: the shared control height (2.75rem) over the vendor `lg` avatar, so it lines up with the IconButtons of a bar. */
656
+ .starci-core-avatar[data-grammar-avatar-size="control"] {
657
+ --avatar-size: var(--starci-core-control-min-size, 2.75rem);
658
+ block-size: var(--starci-core-control-min-size, 2.75rem) !important;
659
+ inline-size: var(--starci-core-control-min-size, 2.75rem) !important;
660
+ }
661
+
662
+ .starci-core-avatar-skeleton[data-grammar-avatar-size="control"] > * {
663
+ block-size: var(--starci-core-control-min-size, 2.75rem);
664
+ inline-size: var(--starci-core-control-min-size, 2.75rem);
665
+ }
666
+
655
667
  /* A loading avatar (knowledge STATE-8): the Skeleton circle at the avatar's size. */
656
668
  .starci-core-avatar-skeleton { display: inline-flex; }
657
669
 
@@ -659,6 +671,136 @@
659
671
  box-shadow: 0 0 0 2px var(--background, Canvas), 0 0 0 4px var(--accent, Highlight);
660
672
  }
661
673
 
674
+ /*
675
+ * A square brand mark (Avatar shape="square"): a transparent box with no corner and no clipping; the image is contained, so a round,
676
+ * square or wide logo shows whole in its own shape. The monogram fallback keeps its tint (see the lockup) so initials stay legible.
677
+ */
678
+ .starci-core-avatar[data-grammar-avatar-shape="square"] {
679
+ overflow: visible !important;
680
+ border-radius: 0 !important;
681
+ background: transparent !important;
682
+ }
683
+
684
+ .starci-core-avatar[data-grammar-avatar-shape="square"] > * {
685
+ border-radius: 0 !important;
686
+ background-color: transparent;
687
+ }
688
+
689
+ .starci-core-avatar[data-grammar-avatar-shape="square"] img {
690
+ inline-size: 100% !important;
691
+ block-size: 100% !important;
692
+ object-fit: contain !important;
693
+ }
694
+
695
+ /* A rounded brand or workspace mark (Avatar shape="rounded", an explicit opt-in): the image and the initials share the corner. */
696
+ .starci-core-avatar[data-grammar-avatar-shape="rounded"] {
697
+ border-radius: 0.75rem !important;
698
+ }
699
+
700
+ .starci-core-avatar[data-grammar-avatar-shape="rounded"] > * {
701
+ border-radius: inherit !important;
702
+ }
703
+
704
+ /*
705
+ * --- PlainPressable: a pressable that does not look like a button ---
706
+ * No padding, background, border or button shape in any state; NO hover effect; the only feedback is a zoom-out on
707
+ * press, on the canon motion tokens; a keyboard focus ring; reduced motion removes the zoom and the transition, never
708
+ * the control. The vendor button's size, padding, corner and colour tokens are reset with `!important` because
709
+ * consumers import this sheet on either side of `@heroui/styles`, so layer rank cannot decide against `.button`.
710
+ */
711
+ [data-component="PlainPressable"] {
712
+ block-size: auto !important;
713
+ min-block-size: 0 !important;
714
+ inline-size: auto !important;
715
+ padding: 0 !important;
716
+ gap: 0 !important;
717
+ border: 0 !important;
718
+ border-radius: 0.75rem !important;
719
+ box-shadow: none !important;
720
+ background: transparent !important;
721
+ --button-bg: transparent;
722
+ --button-bg-hover: transparent;
723
+ --button-bg-pressed: transparent;
724
+ color: inherit !important;
725
+ font: inherit;
726
+ text-align: start;
727
+ transform: none;
728
+ transition: transform var(--starci-core-motion-duration, 180ms) var(--starci-core-motion-easing, cubic-bezier(0.2, 0, 0, 1)) !important;
729
+ }
730
+
731
+ [data-component="PlainPressable"][data-grammar-pressable-shape="circle"] {
732
+ border-radius: 9999px !important;
733
+ }
734
+
735
+ [data-component="PlainPressable"]:is(:hover, [data-hovered="true"]) {
736
+ background: transparent !important;
737
+ transform: none;
738
+ }
739
+
740
+ [data-component="PlainPressable"]:is(:active, [data-pressed="true"]):not(:disabled, [data-disabled="true"]) {
741
+ background: transparent !important;
742
+ transform: scale(0.96) !important;
743
+ }
744
+
745
+ [data-component="PlainPressable"]:is(:focus-visible, [data-focus-visible="true"]) {
746
+ outline: 2px solid var(--focus, var(--starci-core-focus, Highlight)) !important;
747
+ outline-offset: 2px;
748
+ }
749
+
750
+ [data-component="PlainPressable"]:is(:disabled, [data-disabled="true"]) {
751
+ opacity: 0.5;
752
+ cursor: default;
753
+ }
754
+
755
+ @media (prefers-reduced-motion: reduce) {
756
+ [data-component="PlainPressable"],
757
+ [data-component="PlainPressable"]:is(:active, [data-pressed="true"]):not(:disabled, [data-disabled="true"]) {
758
+ transform: none !important;
759
+ transition: none !important;
760
+ }
761
+ }
762
+
763
+ /* --- IdentityLockup: a mark beside two text lines, inside a PlainPressable --- */
764
+ .starci-core-identity-lockup {
765
+ display: inline-flex;
766
+ min-width: 0;
767
+ align-items: center;
768
+ gap: var(--grammar-row-gap, 0.75rem);
769
+ text-align: start;
770
+ }
771
+
772
+ .starci-core-identity-lockup-copy {
773
+ display: flex;
774
+ min-width: 0;
775
+ flex-direction: column;
776
+ }
777
+
778
+ .starci-core-identity-lockup-title {
779
+ overflow: hidden;
780
+ color: var(--foreground, CanvasText);
781
+ font-size: 0.875rem;
782
+ font-weight: 600;
783
+ line-height: 1.25rem;
784
+ text-overflow: ellipsis;
785
+ white-space: nowrap;
786
+ }
787
+
788
+ .starci-core-identity-lockup-subtitle {
789
+ overflow: hidden;
790
+ color: var(--muted, GrayText);
791
+ font-size: 0.75rem;
792
+ line-height: 1rem;
793
+ text-overflow: ellipsis;
794
+ white-space: nowrap;
795
+ }
796
+
797
+ /* A monogram sits on an accent tint. */
798
+ .starci-core-identity-lockup [data-grammar-avatar-fallback] {
799
+ background-color: var(--accent-soft, Canvas) !important;
800
+ color: var(--accent-soft-foreground, CanvasText);
801
+ font-weight: 600;
802
+ }
803
+
662
804
  .starci-core-avatar-group {
663
805
  min-width: 0;
664
806
  max-width: 100%;
@@ -1033,46 +1175,32 @@
1033
1175
  min-width: 0;
1034
1176
  }
1035
1177
 
1036
- .starci-core-list-box-item {
1037
- min-block-size: 2.75rem;
1038
- }
1039
-
1040
- .starci-core-list-box-row {
1041
- display: flex;
1042
- min-width: 0;
1043
- flex: 1 1 auto;
1044
- align-items: center;
1045
- gap: var(--grammar-row-gap, 0.75rem);
1046
- }
1047
-
1048
- .starci-core-list-box-item[data-selected="true"],
1049
- .starci-core-list-box-item:has(> [data-grammar-selected="true"]) {
1050
- background: var(--accent-soft, Highlight);
1051
- color: var(--accent-soft-foreground, HighlightText);
1052
- }
1053
-
1054
- .starci-core-list-box-copy {
1178
+ /*
1179
+ * A row is HeroUI's own item (padding, radius, hover, selected indicator at the end). Grammar lays out only what the item
1180
+ * leaves open: the label/description column and the leading and trailing nodes.
1181
+ */
1182
+ [data-grammar-list-copy] {
1055
1183
  display: flex;
1056
1184
  min-width: 0;
1057
1185
  flex: 1 1 auto;
1058
1186
  flex-direction: column;
1059
1187
  }
1060
1188
 
1061
- .starci-core-list-box-label {
1062
- overflow: hidden;
1063
- text-overflow: ellipsis;
1064
- white-space: nowrap;
1189
+ [data-grammar-list-leading],
1190
+ [data-grammar-list-trailing] {
1191
+ display: inline-flex;
1192
+ flex: 0 0 auto;
1065
1193
  }
1066
1194
 
1067
- .starci-core-list-box-description {
1068
- color: var(--muted, GrayText);
1069
- font-size: 0.8125rem;
1195
+ [data-grammar-list-trailing] {
1196
+ margin-inline-start: auto;
1070
1197
  }
1071
1198
 
1072
- .starci-core-list-box-leading,
1073
- .starci-core-list-box-trailing,
1074
- .starci-core-list-box-indicator {
1075
- flex: 0 0 auto;
1199
+ /* The touch floor: a row is at least 44px tall on a coarse pointer or a narrow viewport (a minimum, which the vendor never sets). */
1200
+ @media (pointer: coarse), (max-width: 40rem) {
1201
+ .starci-core-list-box-item {
1202
+ min-block-size: var(--starci-core-control-min-size, 2.75rem);
1203
+ }
1076
1204
  }
1077
1205
 
1078
1206
  /* Loading list (knowledge STATE-8): the stack of skeleton options, in the same column the real options use. */
@@ -1085,8 +1213,9 @@
1085
1213
  /* Loading options (knowledge STATE-8): a label line and a description line, at the loaded option's height. */
1086
1214
  .starci-core-list-box-skeleton-option {
1087
1215
  display: flex;
1216
+ min-block-size: 2.25rem;
1088
1217
  align-items: center;
1089
- padding-inline: 0.75rem;
1218
+ padding-inline: 0.5rem;
1090
1219
  padding-block: 0.375rem;
1091
1220
  pointer-events: none;
1092
1221
  }
@@ -1419,7 +1548,7 @@
1419
1548
  .starci-core-bottom-nav-item[data-grammar-current="true"],
1420
1549
  .starci-core-step[data-grammar-current="true"] .starci-core-step-marker,
1421
1550
  .starci-core-data-table-row[data-grammar-selected="true"],
1422
- .starci-core-list-box-item:has(> [data-grammar-selected="true"]),
1551
+ .starci-core-list-box-item[data-selected="true"],
1423
1552
  .starci-core-tag:has(> [data-grammar-selected="true"]) {
1424
1553
  outline: 2px solid Highlight;
1425
1554
  outline-offset: -2px;
@@ -345,8 +345,7 @@
345
345
  }
346
346
 
347
347
  /* ---------------------------------------------------------------- popover */
348
- .starci-core-popover,
349
- .starci-core-menu-popover {
348
+ .starci-core-popover {
350
349
  max-width: min(20rem, calc(100vw - 2rem));
351
350
  overflow: auto;
352
351
  border-radius: var(--starci-core-control-radius, 0.75rem);
@@ -356,8 +355,7 @@
356
355
  outline: none;
357
356
  }
358
357
 
359
- .starci-core-popover[data-entering],
360
- .starci-core-menu-popover[data-entering] {
358
+ .starci-core-popover[data-entering] {
361
359
  animation: starci-core-overlay-fade var(--starci-core-motion-duration, 180ms) var(--starci-core-motion-easing, cubic-bezier(0.2, 0, 0, 1));
362
360
  }
363
361
 
@@ -391,105 +389,66 @@
391
389
  }
392
390
 
393
391
  /* ---------------------------------------------------------------- dropdown menu */
394
- .starci-core-menu-popover {
395
- min-width: max(12rem, var(--trigger-width, 0px));
396
- }
397
-
398
- .starci-core-menu {
399
- display: flex;
400
- flex-direction: column;
401
- padding: 0.25rem;
402
- outline: none;
403
- }
404
-
405
- .starci-core-menu-section {
406
- display: flex;
407
- flex-direction: column;
408
- }
409
-
410
- :is(.starci-core-menu-section, .starci-core-menu-item) + .starci-core-menu-section,
411
- .starci-core-menu-section + .starci-core-menu-item {
412
- margin-block-start: 0.25rem;
413
- padding-block-start: 0.25rem;
414
- border-block-start: 1px solid var(--separator, GrayText);
415
- }
416
-
417
- .starci-core-menu-section-label {
418
- padding: 0.375rem 0.75rem 0.25rem;
392
+ /*
393
+ * DropdownMenu renders HeroUI's own Dropdown anatomy and default look: popover, menu, section header, item, label, description,
394
+ * keyboard slot and item indicator are all the vendor's (`.dropdown__*`, `.menu-item*`). Grammar adds only what the vendor look does
395
+ * not cover, each keyed on a stamp:
396
+ * - the icon colour. The vendor example colours the glyph with Tailwind utilities (`text-muted`, `text-danger`) that a consumer
397
+ * build which does not scan this package never generates, so the same two colours are stamped here.
398
+ * - the two layout wrappers of the description layout (icon aligned to the first line, label and description stacked), which the
399
+ * vendor example also builds from utilities.
400
+ * - the keyboard slot's inline-end push (the example's `ms-auto`).
401
+ */
402
+ [data-grammar-menu-item] .starci-core-icon {
403
+ flex: none;
419
404
  color: var(--muted, GrayText);
420
- font-size: 0.75rem;
421
- font-weight: 600;
422
- letter-spacing: 0.02em;
423
405
  }
424
406
 
425
- .starci-core-menu-item {
426
- display: flex;
427
- min-width: 0;
428
- min-block-size: var(--starci-core-control-min-size, 2.75rem);
429
- align-items: center;
430
- gap: var(--grammar-inline-gap, 0.5rem);
431
- padding: 0.5rem 0.75rem;
432
- border-radius: calc(var(--starci-core-control-radius, 0.75rem) - 0.25rem);
433
- color: var(--surface-foreground, CanvasText);
434
- cursor: pointer;
435
- font-size: 0.875rem;
436
- outline: none;
437
- text-decoration: none;
407
+ [data-grammar-menu-item][data-grammar-tone="danger"] .starci-core-icon {
408
+ color: var(--danger, CanvasText);
438
409
  }
439
410
 
440
- .starci-core-menu-item:is([data-focused], [data-hovered], [data-open]) {
441
- background: var(--surface-secondary, Canvas);
411
+ /* Marks reuse Icon's leading box; artwork fits that box without a second size rule. */
412
+ [data-grammar-menu-mark] {
413
+ display: inline-flex;
414
+ align-items: center;
415
+ justify-content: center;
442
416
  }
443
417
 
444
- .starci-core-menu-item[data-focus-visible] {
445
- outline: 2px solid var(--focus, Highlight);
446
- outline-offset: -2px;
418
+ /* A leading node (an identity mark) sits in a box at least as big as the 20px a glyph gets (the canon icon rule, `Icon` `leading`), centred. */
419
+ [data-grammar-menu-leading] {
420
+ display: inline-flex;
421
+ flex: none;
422
+ min-inline-size: 1.25rem;
423
+ min-block-size: 1.25rem;
424
+ align-items: center;
425
+ justify-content: center;
447
426
  }
448
427
 
449
- .starci-core-menu-item[data-disabled] {
450
- cursor: not-allowed;
451
- opacity: 0.5;
428
+ [data-grammar-menu-mark] > * {
429
+ width: 100%;
430
+ height: 100%;
431
+ max-width: 100%;
432
+ max-height: 100%;
433
+ object-fit: contain;
452
434
  }
453
435
 
454
- .starci-core-menu-item[data-grammar-tone="negative"] {
455
- color: var(--danger, CanvasText);
436
+ [data-grammar-menu-icon-slot] {
437
+ display: flex;
438
+ block-size: 2rem;
439
+ align-items: flex-start;
440
+ justify-content: center;
441
+ padding-block-start: 1px;
456
442
  }
457
443
 
458
- .starci-core-menu-item-copy {
444
+ [data-grammar-menu-copy] {
459
445
  display: flex;
460
446
  min-width: 0;
461
- flex: 1;
462
447
  flex-direction: column;
463
448
  }
464
449
 
465
- .starci-core-menu-item-label {
466
- overflow: hidden;
467
- text-overflow: ellipsis;
468
- white-space: nowrap;
469
- }
470
-
471
- .starci-core-menu-item-description {
472
- color: var(--muted, GrayText);
473
- font-size: 0.75rem;
474
- }
475
-
476
- .starci-core-menu-item-shortcut {
477
- flex: none;
450
+ [data-grammar-menu-shortcut] {
478
451
  margin-inline-start: auto;
479
- color: var(--muted, GrayText);
480
- }
481
-
482
- .starci-core-menu-indicator {
483
- display: inline-flex;
484
- flex: none;
485
- width: 1rem;
486
- color: var(--accent, Highlight);
487
- }
488
-
489
- .starci-core-menu-submenu-indicator {
490
- display: inline-flex;
491
- flex: none;
492
- color: var(--muted, GrayText);
493
452
  }
494
453
 
495
454
  /* ---------------------------------------------------------------- toaster + toast */
@@ -969,7 +928,6 @@
969
928
  .starci-core-dialog-container,
970
929
  .starci-core-drawer-content,
971
930
  .starci-core-popover,
972
- .starci-core-menu-popover,
973
931
  .starci-core-toast,
974
932
  .starci-core-skeleton,
975
933
  .starci-core-skeleton::before,
@@ -997,7 +955,7 @@
997
955
  border: 1px solid CanvasText;
998
956
  }
999
957
 
1000
- .starci-core-menu-item:is([data-focused], [data-hovered]) {
958
+ [data-grammar-menu-item]:is([data-focused], [data-hovered]) {
1001
959
  forced-color-adjust: none;
1002
960
  background: Highlight;
1003
961
  color: HighlightText;
@@ -0,0 +1,15 @@
1
+ /* Field-shaped press targets share HeroUI secondary field paint inside a surface. */
2
+ @layer starci-grammar-common {
3
+ .starci-core-pressable-field[data-grammar-variant="secondary"] {
4
+ background: var(--default, var(--surface-secondary, Canvas));
5
+ box-shadow: none;
6
+ }
7
+
8
+ .starci-core-pressable-field[data-grammar-variant="secondary"]:hover:not(:disabled) {
9
+ background: var(--default-hover, var(--default, var(--surface-secondary, Canvas)));
10
+ }
11
+
12
+ .starci-core-pressable-field[data-grammar-variant="secondary"]:focus-visible {
13
+ background: var(--default, var(--surface-secondary, Canvas));
14
+ }
15
+ }
@@ -9,8 +9,9 @@ type ExtensionWithoutCommonCollisions<Common extends GrammarRendererRegistry, Ex
9
9
  };
10
10
  export declare const COMMON_GRAMMAR_COMPONENTS: Readonly<{
11
11
  readonly Accordion: ({ label, items, expandedIds, defaultExpandedIds, onExpandedChange, allowsMultipleExpanded, headingLevel, className, }: import("./renderers-navigation.js").AccordionProps) => import("react").JSX.Element;
12
- readonly Avatar: ({ name, src, fallback, size, isDecorative, isCurrent, className, isSkeleton }: import("./renderers-navigation.js").AvatarProps) => import("react").JSX.Element;
13
- readonly AvatarGroup: ({ label, items, max, size, overflowLabel, className }: import("./renderers-navigation.js").AvatarGroupProps) => import("react").JSX.Element;
12
+ readonly Avatar: ({ name, src, seed, fallback, size, shape, isDecorative, isCurrent, className, isSkeleton }: import("./renderers-navigation.js").AvatarProps) => import("react").JSX.Element;
13
+ readonly AvatarButton: ({ name, src, seed, fallback, size, onPress, isDisabled }: import("./renderers-navigation.js").AvatarButtonProps) => import("react").JSX.Element;
14
+ readonly AvatarGroup: ({ label, items, layout, max, size, overflowLabel, className }: import("./renderers-navigation.js").AvatarGroupProps) => import("react").JSX.Element;
14
15
  readonly BottomNav: ({ label, items, currentId, onSelect, position, visibility, className }: import("./renderers-navigation.js").BottomNavProps) => import("react").JSX.Element;
15
16
  readonly Breadcrumbs: ({ label, items, separator, onAction, className }: import("./renderers-navigation.js").BreadcrumbsProps) => import("react").JSX.Element;
16
17
  readonly Calendar: ({ label, value, defaultValue, onChange, minValue, maxValue, isDateUnavailable, isDisabled, isReadOnly, previousLabel, nextLabel, className, }: import("./renderers-navigation.js").CalendarProps) => import("react").JSX.Element;
@@ -20,10 +21,12 @@ export declare const COMMON_GRAMMAR_COMPONENTS: Readonly<{
20
21
  readonly DragItem: ({ children, isDisabled, onDragStart, onDragEnd, isSelected, isInvalid, isDashed, leadingColor }: import("./renderers-navigation.js").DragItemProps) => import("react").JSX.Element;
21
22
  readonly FlowGraph: ({ label, nodes, edges, selectedId, onSelect, height, isInteractive, showControls, layout, emptyLabel, isLoading, className, }: import("./renderers-navigation.js").FlowGraphProps) => import("react").JSX.Element;
22
23
  readonly Footer: ({ label, brand, groups, legal, externalHint, children, className }: import("./renderers-navigation.js").FooterProps) => import("react").JSX.Element;
24
+ readonly IdentityLockup: ({ title, subtitle, logoSrc, markShape, onPress, isDisabled }: import("./renderers-navigation.js").IdentityLockupProps) => import("react").JSX.Element;
23
25
  readonly Image: ({ src, alt, aspect, fit, fallback, loading, srcSet, sizes, width, height, onLoadStateChange, plate, className, ...assetSlot }: import("./renderers-navigation.js").ImageProps) => import("react").JSX.Element;
24
26
  readonly Link: ({ children, href, kind, isCurrent, visited, externalHint, externalIcon, isDisabled, onFollow, className, }: import("./renderers-navigation.js").LinkProps) => import("react").JSX.Element;
25
- readonly ListBox: ({ label, items, selectionMode, selectedIds, defaultSelectedIds, onSelectionChange, onAction, emptyContent, isLoading, loadingRows, className, }: import("./renderers-navigation.js").ListBoxProps) => import("react").JSX.Element;
27
+ readonly ListBox: ({ label, items, sections, inset, selectionMode, selectedIds, defaultSelectedIds, onSelectionChange, onAction, emptyContent, isLoading, loadingRows, className, }: import("./renderers-navigation.js").ListBoxProps) => import("react").JSX.Element;
26
28
  readonly Pagination: ({ label, page, pageCount, onPageChange, siblingCount, previousLabel, nextLabel, pageLabel, summary, className, }: import("./renderers-navigation.js").PaginationProps) => import("react").JSX.Element;
29
+ readonly PlainPressable: ({ children, "aria-label": ariaLabel, onPress, isDisabled, shape, className }: import("./renderers-navigation.js").PlainPressableProps) => import("react").JSX.Element;
27
30
  readonly Rating: ({ label, value, defaultValue, onChange, max, isReadOnly, isDisabled, valueLabel, icon, name, className, }: import("./renderers-navigation.js").RatingProps) => import("react").JSX.Element;
28
31
  readonly Stepper: ({ label, steps, currentStepId, orientation, onStepSelect, stateLabel, renderMarker, className, isLoading, }: import("./renderers-navigation.js").StepperProps) => import("react").JSX.Element;
29
32
  readonly TagGroup: ({ label, items, selectionMode, selectedIds, defaultSelectedIds, onSelectionChange, onRemove, removeLabel, emptyContent, size, className, }: import("./renderers-navigation.js").TagGroupProps) => import("react").JSX.Element;
@@ -45,25 +48,25 @@ export declare const COMMON_GRAMMAR_COMPONENTS: Readonly<{
45
48
  readonly Toast: ({ toast, dismissLabel, onDismiss, isPaused }: import("./renderers-overlays.js").ToastProps) => import("react").JSX.Element;
46
49
  readonly Toaster: ({ label, dismissLabel, queue, placement, maxVisible }: import("./renderers-overlays.js").ToasterProps) => import("react").JSX.Element;
47
50
  readonly ButtonGroup: ({ label, children, orientation, isDisabled, width }: import("./renderers-forms.js").ButtonGroupProps) => import("react").JSX.Element;
48
- readonly Checkbox: ({ value, isSelected, defaultSelected, onSelectedChange, isIndeterminate, variant, ...field }: import("./renderers-forms.js").CheckboxProps) => import("react").JSX.Element;
49
- readonly CheckboxGroup: ({ options, value, defaultValue, onValueChange, orientation, variant, isSkeleton, ...field }: import("./renderers-forms.js").CheckboxGroupProps) => import("react").JSX.Element;
50
- readonly ComboBox: ({ id, options, placeholder, value, defaultValue, onValueChange, inputValue, defaultInputValue, onInputChange, allowsCustomValue, emptyState, isPending, menuTrigger, variant, ...field }: import("./renderers-forms.js").ComboBoxProps) => import("react").JSX.Element;
51
- readonly DateField: ({ value, defaultValue, onValueChange, minValue, maxValue, granularity, variant, ...field }: import("./renderers-forms.js").DateFieldProps) => import("react").JSX.Element;
52
- readonly DatePicker: ({ value, defaultValue, onValueChange, minValue, maxValue, isDateUnavailable, granularity, variant, ...field }: import("./renderers-forms.js").DatePickerProps) => import("react").JSX.Element;
53
- readonly DateRangePicker: ({ value, defaultValue, onValueChange, minValue, maxValue, isDateUnavailable, allowsNonContiguousRanges, granularity, startName, endName, variant, ...field }: import("./renderers-forms.js").DateRangePickerProps) => import("react").JSX.Element;
51
+ readonly Checkbox: ({ value, isSelected, defaultSelected, onSelectedChange, isIndeterminate, variant: requestedVariant, ...field }: import("./renderers-forms.js").CheckboxProps) => import("react").JSX.Element;
52
+ readonly CheckboxGroup: ({ options, value, defaultValue, onValueChange, orientation, variant: requestedVariant, isSkeleton, ...field }: import("./renderers-forms.js").CheckboxGroupProps) => import("react").JSX.Element;
53
+ readonly ComboBox: ({ id, options, placeholder, value, defaultValue, onValueChange, inputValue, defaultInputValue, onInputChange, allowsCustomValue, emptyState, isPending, menuTrigger, variant: requestedVariant, ...field }: import("./renderers-forms.js").ComboBoxProps) => import("react").JSX.Element;
54
+ readonly DateField: ({ value, defaultValue, onValueChange, minValue, maxValue, granularity, variant: requestedVariant, ...field }: import("./renderers-forms.js").DateFieldProps) => import("react").JSX.Element;
55
+ readonly DatePicker: ({ value, defaultValue, onValueChange, minValue, maxValue, isDateUnavailable, granularity, variant: requestedVariant, ...field }: import("./renderers-forms.js").DatePickerProps) => import("react").JSX.Element;
56
+ readonly DateRangePicker: ({ value, defaultValue, onValueChange, minValue, maxValue, isDateUnavailable, allowsNonContiguousRanges, granularity, startName, endName, variant: requestedVariant, ...field }: import("./renderers-forms.js").DateRangePickerProps) => import("react").JSX.Element;
54
57
  readonly Field: ({ id: idProp, label, isLabelHidden, description, errorMessage, isInvalid, isRequired, isDisabled, isReadOnly, name, children, }: import("./renderers-forms.js").FieldProps) => import("react").JSX.Element;
55
58
  readonly Fieldset: ({ legend, isLegendHidden, description, errorMessage, children, actions, isDisabled }: import("./renderers-forms.js").FieldsetProps) => import("react").JSX.Element;
56
59
  readonly FileDropzone: ({ id: idProp, accept, multiple, onFilesChange, prompt, icon, hideFileList, label, isLabelHidden, description, errorMessage, isInvalid, isRequired, isDisabled, isReadOnly, name, }: import("./renderers-forms.js").FileDropzoneProps) => import("react").JSX.Element;
57
60
  readonly Form: ({ children, label, id, onSubmit, onReset, action, method, validationErrors, validationBehavior, isPending, }: import("./renderers-forms.js").FormProps) => import("react").JSX.Element;
58
- readonly NumberField: ({ id, placeholder, value, defaultValue, onValueChange, minValue, maxValue, step, formatOptions, hideSteppers, variant, isSkeleton, ...field }: import("./renderers-forms.js").NumberFieldProps) => import("react").JSX.Element;
59
- readonly RadioGroup: ({ options, value, defaultValue, onValueChange, orientation, variant, ...field }: import("./renderers-forms.js").RadioGroupProps) => import("react").JSX.Element;
60
- readonly SearchField: ({ id, placeholder, value, defaultValue, onValueChange, onSubmit, onClear, isPending, clearLabel, variant, isSkeleton, onBlur, onPaste, autoFocus, ...field }: import("./renderers-forms.js").SearchFieldProps) => import("react").JSX.Element;
61
+ readonly NumberField: ({ id, placeholder, value, defaultValue, onValueChange, minValue, maxValue, step, formatOptions, hideSteppers, variant: requestedVariant, isSkeleton, ...field }: import("./renderers-forms.js").NumberFieldProps) => import("react").JSX.Element;
62
+ readonly RadioGroup: ({ options, value, defaultValue, onValueChange, orientation, variant: requestedVariant, ...field }: import("./renderers-forms.js").RadioGroupProps) => import("react").JSX.Element;
63
+ readonly SearchField: ({ id, placeholder, value, defaultValue, onValueChange, onSubmit, onClear, isPending, clearLabel, variant: requestedVariant, isSkeleton, onBlur, onPaste, autoFocus, ...field }: import("./renderers-forms.js").SearchFieldProps) => import("react").JSX.Element;
61
64
  readonly SegmentedControl: ({ options, value, defaultValue, onValueChange, width, label, isLabelHidden, description, errorMessage, isInvalid, isRequired, isDisabled, isReadOnly, name, isSkeleton, }: import("./renderers-forms.js").SegmentedControlProps) => import("react").JSX.Element;
62
- readonly Select: ({ options, placeholder, value, defaultValue, onValueChange, isPending, isSkeleton, variant, ...field }: import("./renderers-forms.js").SelectProps) => import("react").JSX.Element;
65
+ readonly Select: ({ options, placeholder, value, defaultValue, onValueChange, isPending, isSkeleton, variant: requestedVariant, ...field }: import("./renderers-forms.js").SelectProps) => import("react").JSX.Element;
63
66
  readonly Slider: ({ value, defaultValue, onValueChange, onValueCommit, minValue, maxValue, step, formatOptions, thumbLabels, orientation, label, isLabelHidden, description, errorMessage, isInvalid, isRequired, isDisabled, isReadOnly, name, }: import("./renderers-forms.js").SliderProps) => import("react").JSX.Element;
64
- readonly Switch: ({ value, isSelected, defaultSelected, onSelectedChange, isSkeleton, ...field }: import("./renderers-forms.js").SwitchProps) => import("react").JSX.Element;
65
- readonly Textarea: ({ id, placeholder, value, defaultValue, rows, isSkeleton, maxLength, minLength, onValueChange, variant, onSubmitShortcut, mentions, onBlur, onPaste, autoFocus, ...field }: import("./renderers-forms.js").TextareaProps) => import("react").JSX.Element;
66
- readonly TimeField: ({ value, defaultValue, onValueChange, minValue, maxValue, granularity, hourCycle, variant, ...field }: import("./renderers-forms.js").TimeFieldProps) => import("react").JSX.Element;
67
+ readonly Switch: ({ value, isSelected, defaultSelected, onSelectedChange, size, thumbIcon, selectedThumbIcon, isSkeleton, ...field }: import("./renderers-forms.js").SwitchProps) => import("react").JSX.Element;
68
+ readonly Textarea: ({ id, placeholder, value, defaultValue, rows, isSkeleton, maxLength, minLength, onValueChange, variant: requestedVariant, onSubmitShortcut, mentions, onBlur, onPaste, autoFocus, ...field }: import("./renderers-forms.js").TextareaProps) => import("react").JSX.Element;
69
+ readonly TimeField: ({ value, defaultValue, onValueChange, minValue, maxValue, granularity, hourCycle, variant: requestedVariant, ...field }: import("./renderers-forms.js").TimeFieldProps) => import("react").JSX.Element;
67
70
  readonly Badge: ({ children, startContent, tone, isDot, isSkeleton }: import("./renderers.js").BadgeProps) => import("react").JSX.Element;
68
71
  readonly Button: (props: import("./renderers.js").ButtonProps) => import("react").JSX.Element;
69
72
  readonly ChatBubble: ({ children, side, author, avatar, meta, status, actions, footer, isHighlight, id, isSkeleton, }: import("./renderers.js").ChatBubbleProps) => import("react").JSX.Element;
@@ -79,7 +82,7 @@ export declare const COMMON_GRAMMAR_COMPONENTS: Readonly<{
79
82
  readonly IconButton: ({ source, label, variant, size, isFloating, isActive, isDisabled, isSkeleton, onPress, "aria-controls": controls, "aria-expanded": expanded, badge, badgeLabel, badgeMax, }: import("./renderers.js").IconButtonProps) => import("react").JSX.Element;
80
83
  readonly IconTile: ({ source, artwork, ariaLabel, tone, size, isSkeleton, }: import("./renderers.js").IconTileProps) => import("react").JSX.Element;
81
84
  readonly IncludedMark: ({ className, label, ...props }: import("./renderers.js").IncludedMarkProps) => import("react").JSX.Element;
82
- readonly Input: ({ id, name, label, isLabelHidden, kind: kindName, variant, placeholder, defaultValue, value, hint, errorMessage, isError, isDisabled, isRequired, isSkeleton, isReadOnly, isCopyable, copyLabel, copiedLabel, copyIcon: CopyIcon, copiedIcon: CopiedIcon, onCopy, revealLabel, hideLabel, revealIcon: RevealIcon, hideIcon: HideIcon, onValueChange, onBlur, onPaste, autoFocus, }: import("./renderers.js").InputProps) => import("react").JSX.Element;
85
+ readonly Input: ({ id, name, label, isLabelHidden, kind: kindName, variant: requestedVariant, placeholder, defaultValue, value, hint, errorMessage, isError, isDisabled, isRequired, isSkeleton, isReadOnly, isCopyable, copyLabel, copiedLabel, copyIcon: CopyIcon, copiedIcon: CopiedIcon, onCopy, revealLabel, hideLabel, revealIcon: RevealIcon, hideIcon: HideIcon, onValueChange, onBlur, onPaste, autoFocus, }: import("./renderers.js").InputProps) => import("react").JSX.Element;
83
86
  readonly Label: ({ id, children, depth, as }: import("./renderers.js").LabelProps) => import("react").DetailedReactHTMLElement<{
84
87
  readonly id: string | undefined;
85
88
  readonly className: string;
@@ -101,12 +104,13 @@ export declare const COMMON_GRAMMAR_COMPONENTS: Readonly<{
101
104
  readonly OtpInput: (props: import("./renderers.js").OtpInputProps) => import("react").JSX.Element;
102
105
  readonly PageContainer: ({ className, measure, ...props }: import("./renderers.js").PageContainerProps) => import("react").JSX.Element;
103
106
  readonly PinnedActionBar: ({ children, label, visibility }: import("./renderers.js").PinnedActionBarProps) => import("react").JSX.Element;
104
- readonly PressableField: ({ label, placeholder, source, shortcut, isDisabled, onPress }: import("./renderers.js").PressableFieldProps) => import("react").JSX.Element;
107
+ readonly PressableField: ({ label, placeholder, source, shortcut, variant: requestedVariant, isDisabled, onPress }: import("./renderers.js").PressableFieldProps) => import("react").JSX.Element;
105
108
  readonly PrimaryRailLayout: ({ primary, rail, railWidth, align, collapsedOrder, railPosition, className, }: import("./renderers.js").PrimaryRailLayoutProps) => import("react").JSX.Element;
106
109
  readonly Progress: ({ label, value, isSkeleton, steps, valueText }: import("./renderers.js").ProgressProps) => import("react").JSX.Element;
107
110
  readonly Rail: (props: import("./renderers.js").RailProps) => import("react").JSX.Element;
108
111
  readonly RankArtwork: ({ className, kind, label, ...props }: import("./renderers.js").RankArtworkProps) => import("react").JSX.Element;
109
112
  readonly Region: (props: import("./renderers.js").RegionProps) => import("react").JSX.Element;
113
+ readonly RelativeTime: ({ dateTime, locale, mode, fallback, id, size, tone }: import("./renderers.js").RelativeTimeProps) => import("react").JSX.Element;
110
114
  readonly SectionHeader: ({ title, description, eyebrow, action, count, meta, level, className, id, composition, isSkeleton, }: import("./renderers.js").SectionHeaderProps) => import("react").JSX.Element;
111
115
  readonly Sidebar: ({ label, groups, selectedKey, presentation, isCollapsed, collapseLabel, expandLabel, toggleSource, header, footer, onAction, onCollapsedChange, }: import("./renderers.js").SidebarProps) => import("react").JSX.Element;
112
116
  readonly StateMark: (props: import("./renderers.js").StateMarkProps) => import("react").JSX.Element | null;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/common/registry.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAEvE,MAAM,MAAM,wBAAwB,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,CAAA;AAClE,KAAK,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;AACpE,KAAK,sBAAsB,CAAC,MAAM,SAAS,uBAAuB,IAAI;IAClE,QAAQ,EAAE,IAAI,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE,wBAAwB,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;CAC3F,CAAA;AACD,KAAK,gCAAgC,CAAC,MAAM,SAAS,uBAAuB,EAAE,UAAU,SAAS,uBAAuB,IACpH,UAAU,GAAG;IAAE,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,MAAM,UAAU,EAAE,MAAM,MAAM,CAAC,GAAG,KAAK;CAAE,CAAA;AAEtF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW3B,CAAA;AACX,MAAM,MAAM,0BAA0B,GAAG,MAAM,OAAO,yBAAyB,CAAA;AAE/E,MAAM,MAAM,mBAAmB,CAAC,QAAQ,SAAS,MAAM,IAAI;IACvD,QAAQ,CAAC,UAAU,EAAE,mBAAmB,MAAM,aAAa,CAAA;IAC3D,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;KAAE,CAAA;CAC1F,CAAA;AAED,MAAM,MAAM,qBAAqB,CAAC,QAAQ,SAAS,MAAM,EAAE,UAAU,SAAS,uBAAuB,IAAI;IACrG,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC9C,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,yBAAyB,GAAG,UAAU,CAAC,CAAA;IAC5E,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;QAAE,qBAAqB,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAA;CACrE,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,GAC5B,KAAK,CAAC,QAAQ,SAAS,MAAM,EAC7B,KAAK,CAAC,YAAY,SAAS,sBAAsB,CAAC,OAAO,yBAAyB,CAAC,EACnF,KAAK,CAAC,UAAU,SAAS,uBAAuB,EAClD,YAAY;IACV,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC9C,QAAQ,CAAC,UAAU,EAAE;QACjB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;QACnC,QAAQ,CAAC,UAAU,EAAE,gCAAgC,CAAC,OAAO,yBAAyB,EAAE,UAAU,CAAC,CAAA;KACtG,CAAA;CACJ,KAAG,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAuB7C,CAAA"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/common/registry.tsx"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAEvE,MAAM,MAAM,wBAAwB,CAAC,KAAK,IAAI,aAAa,CAAC,KAAK,CAAC,CAAA;AAClE,KAAK,uBAAuB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;AACpE,KAAK,sBAAsB,CAAC,MAAM,SAAS,uBAAuB,IAAI;IAClE,QAAQ,EAAE,IAAI,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE,wBAAwB,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;CAC3F,CAAA;AACD,KAAK,gCAAgC,CAAC,MAAM,SAAS,uBAAuB,EAAE,UAAU,SAAS,uBAAuB,IACpH,UAAU,GAAG;IAAE,QAAQ,EAAE,IAAI,IAAI,OAAO,CAAC,MAAM,UAAU,EAAE,MAAM,MAAM,CAAC,GAAG,KAAK;CAAE,CAAA;AAEtF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW3B,CAAA;AACX,MAAM,MAAM,0BAA0B,GAAG,MAAM,OAAO,yBAAyB,CAAA;AAE/E,MAAM,MAAM,mBAAmB,CAAC,QAAQ,SAAS,MAAM,IAAI;IACvD,QAAQ,CAAC,UAAU,EAAE,mBAAmB,MAAM,aAAa,CAAA;IAC3D,QAAQ,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;KAAE,CAAA;CAC1F,CAAA;AAED,MAAM,MAAM,qBAAqB,CAAC,QAAQ,SAAS,MAAM,EAAE,UAAU,SAAS,uBAAuB,IAAI;IACrG,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC9C,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,yBAAyB,GAAG,UAAU,CAAC,CAAA;IAC5E,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;QAAE,qBAAqB,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAA;CACrE,CAAA;AAED,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,GAC5B,KAAK,CAAC,QAAQ,SAAS,MAAM,EAC7B,KAAK,CAAC,YAAY,SAAS,sBAAsB,CAAC,OAAO,yBAAyB,CAAC,EACnF,KAAK,CAAC,UAAU,SAAS,uBAAuB,EAClD,YAAY;IACV,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAA;IAC9C,QAAQ,CAAC,UAAU,EAAE;QACjB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;QACnC,QAAQ,CAAC,UAAU,EAAE,gCAAgC,CAAC,OAAO,yBAAyB,EAAE,UAAU,CAAC,CAAA;KACtG,CAAA;CACJ,KAAG,qBAAqB,CAAC,QAAQ,EAAE,UAAU,CAuB7C,CAAA"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { Badge, Button, ChatBubble, ChatWorkspace, Divider, EmptyNotice, FencedCodeBlock, FillViewport, GrammarRoot, Heading, HorizontalScrollRegion, Icon, IconButton, IconTile, IncludedMark, Input, Label, LeadingNumber, List, ListItem, ListRow, MarkdownArticle, MarkdownTableFrame, MediaFrame, NavigationFeatureNav, NavLandmark, OtpInput, PageContainer, PinnedActionBar, PressableField, PrimaryRailLayout, Progress, Rail, RankArtwork, Region, SectionHeader, Sidebar, StateMark, StaticStateRow, Subnav, SurfaceAccordionCard, SurfaceCard, SurfaceCopyGroup, SurfaceListCard, Tabs, Text, TextAction, Tooltip, VerticalScrollRegion, WorkspaceShell, } from "./renderers.js";
2
+ import { Badge, Button, ChatBubble, ChatWorkspace, Divider, EmptyNotice, FencedCodeBlock, FillViewport, GrammarRoot, Heading, HorizontalScrollRegion, Icon, IconButton, IconTile, IncludedMark, Input, Label, LeadingNumber, List, ListItem, ListRow, MarkdownArticle, MarkdownTableFrame, MediaFrame, NavigationFeatureNav, NavLandmark, OtpInput, PageContainer, PinnedActionBar, PressableField, PrimaryRailLayout, Progress, Rail, RankArtwork, Region, RelativeTime, SectionHeader, Sidebar, StateMark, StaticStateRow, Subnav, SurfaceAccordionCard, SurfaceCard, SurfaceCopyGroup, SurfaceListCard, Tabs, Text, TextAction, Tooltip, VerticalScrollRegion, WorkspaceShell, } from "./renderers.js";
3
3
  import { COMMON_FORMS_COMPONENTS } from "./renderers-forms.js";
4
4
  import { COMMON_OVERLAYS_COMPONENTS } from "./renderers-overlays.js";
5
5
  import { COMMON_NAVIGATION_COMPONENTS } from "./renderers-navigation.js";
@@ -8,7 +8,7 @@ export const COMMON_GRAMMAR_COMPONENTS = Object.freeze({
8
8
  Heading, HorizontalScrollRegion, Icon, IconButton, IconTile, IncludedMark, Input,
9
9
  Label, LeadingNumber, List, ListItem, ListRow, MarkdownArticle, MarkdownTableFrame, MediaFrame,
10
10
  NavigationFeatureNav, NavLandmark, OtpInput, PageContainer, PinnedActionBar, PressableField, PrimaryRailLayout,
11
- Progress, Rail, RankArtwork, Region, SectionHeader, Sidebar, StateMark, StaticStateRow, Subnav,
11
+ Progress, Rail, RankArtwork, Region, RelativeTime, SectionHeader, Sidebar, StateMark, StaticStateRow, Subnav,
12
12
  SurfaceAccordionCard, SurfaceCard, SurfaceCopyGroup, SurfaceListCard, Tabs, Text,
13
13
  TextAction, Tooltip, VerticalScrollRegion, WorkspaceShell,
14
14
  ...COMMON_FORMS_COMPONENTS,
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/common/registry.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/common/registry.tsx"],"names":[],"mappings":"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"}