@astryxdesign/core 0.1.7 → 0.1.8-canary.c5fa19b

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 (190) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +30 -19
  3. package/dist/Avatar/Avatar.d.ts +10 -5
  4. package/dist/Avatar/Avatar.d.ts.map +1 -1
  5. package/dist/Avatar/Avatar.js +12 -8
  6. package/dist/Avatar/AvatarSizeContext.d.ts +1 -1
  7. package/dist/Avatar/AvatarSizeContext.js +1 -1
  8. package/dist/Avatar/AvatarStatusDot.d.ts +2 -2
  9. package/dist/Avatar/AvatarStatusDot.js +2 -2
  10. package/dist/AvatarGroup/AvatarGroup.d.ts +2 -2
  11. package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
  12. package/dist/AvatarGroup/AvatarGroup.js +2 -2
  13. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts +1 -1
  14. package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
  15. package/dist/AvatarGroup/AvatarGroupOverflow.js +16 -14
  16. package/dist/Carousel/Carousel.d.ts +3 -2
  17. package/dist/Carousel/Carousel.d.ts.map +1 -1
  18. package/dist/Carousel/Carousel.js +32 -2
  19. package/dist/Chat/ChatMessage.d.ts +1 -1
  20. package/dist/Chat/ChatMessage.d.ts.map +1 -1
  21. package/dist/Chat/ChatMessage.js +1 -1
  22. package/dist/Citation/Citation.d.ts.map +1 -1
  23. package/dist/Citation/Citation.js +10 -4
  24. package/dist/Collapsible/Collapsible.d.ts +11 -1
  25. package/dist/Collapsible/Collapsible.d.ts.map +1 -1
  26. package/dist/Collapsible/Collapsible.js +36 -4
  27. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  28. package/dist/ContextMenu/ContextMenu.js +4 -3
  29. package/dist/ContextMenu/index.d.ts +3 -0
  30. package/dist/ContextMenu/index.d.ts.map +1 -1
  31. package/dist/ContextMenu/index.js +7 -1
  32. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  33. package/dist/DropdownMenu/DropdownMenu.js +8 -4
  34. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts +89 -0
  35. package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -0
  36. package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +170 -0
  37. package/dist/DropdownMenu/DropdownMenuContext.d.ts +17 -1
  38. package/dist/DropdownMenu/DropdownMenuContext.d.ts.map +1 -1
  39. package/dist/DropdownMenu/DropdownMenuContext.js +18 -0
  40. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +69 -0
  41. package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -0
  42. package/dist/DropdownMenu/DropdownMenuRadioGroup.js +70 -0
  43. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts +69 -0
  44. package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -0
  45. package/dist/DropdownMenu/DropdownMenuRadioItem.js +178 -0
  46. package/dist/DropdownMenu/index.d.ts +5 -1
  47. package/dist/DropdownMenu/index.d.ts.map +1 -1
  48. package/dist/DropdownMenu/index.js +10 -1
  49. package/dist/DropdownMenu/menuItemRoles.d.ts +13 -0
  50. package/dist/DropdownMenu/menuItemRoles.d.ts.map +1 -0
  51. package/dist/DropdownMenu/menuItemRoles.js +15 -0
  52. package/dist/Icon/Icon.d.ts +43 -13
  53. package/dist/Icon/Icon.d.ts.map +1 -1
  54. package/dist/Icon/Icon.js +62 -27
  55. package/dist/Outline/Outline.d.ts +69 -3
  56. package/dist/Outline/Outline.d.ts.map +1 -1
  57. package/dist/Outline/Outline.js +129 -26
  58. package/dist/Outline/useScrollSpy.d.ts +27 -7
  59. package/dist/Outline/useScrollSpy.d.ts.map +1 -1
  60. package/dist/Outline/useScrollSpy.js +202 -70
  61. package/dist/TabList/Tab.d.ts.map +1 -1
  62. package/dist/TabList/Tab.js +2 -2
  63. package/dist/TabList/TabList.d.ts.map +1 -1
  64. package/dist/TabList/TabList.js +2 -0
  65. package/dist/TabList/TabMenu.d.ts.map +1 -1
  66. package/dist/TabList/TabMenu.js +1 -1
  67. package/dist/Table/Table.d.ts +1 -1
  68. package/dist/Table/Table.js +1 -1
  69. package/dist/Table/index.d.ts +2 -0
  70. package/dist/Table/index.d.ts.map +1 -1
  71. package/dist/Table/index.js +1 -0
  72. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
  73. package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +24 -2
  74. package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
  75. package/dist/Table/plugins/sortable/useTableSortable.js +18 -7
  76. package/dist/Table/plugins/tree/index.d.ts +5 -0
  77. package/dist/Table/plugins/tree/index.d.ts.map +1 -0
  78. package/dist/Table/plugins/tree/index.js +4 -0
  79. package/dist/Table/plugins/tree/useTableTreeData.d.ts +38 -0
  80. package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -0
  81. package/dist/Table/plugins/tree/useTableTreeData.js +358 -0
  82. package/dist/Table/plugins/tree/useTableTreeState.d.ts +51 -0
  83. package/dist/Table/plugins/tree/useTableTreeState.d.ts.map +1 -0
  84. package/dist/Table/plugins/tree/useTableTreeState.js +175 -0
  85. package/dist/Table/useBaseTablePlugins.d.ts.map +1 -1
  86. package/dist/Table/useBaseTablePlugins.js +6 -3
  87. package/dist/Toolbar/Toolbar.d.ts.map +1 -1
  88. package/dist/Toolbar/Toolbar.js +8 -1
  89. package/dist/TreeList/TreeListItem.d.ts.map +1 -1
  90. package/dist/TreeList/TreeListItem.js +5 -14
  91. package/dist/astryx.css +24 -4
  92. package/dist/astryx.umd.js +54 -54
  93. package/dist/astryx.umd.js.map +4 -4
  94. package/dist/theme/Theme.js +1 -1
  95. package/dist/theme/defineTheme.d.ts +1 -1
  96. package/dist/theme/defineTheme.js +1 -1
  97. package/dist/theme/hct.d.ts +0 -1
  98. package/dist/theme/hct.d.ts.map +1 -1
  99. package/dist/theme/hct.js +0 -3
  100. package/docs.mjs +32 -461
  101. package/locales/en.json +200 -172
  102. package/locales/pseudo.json +21 -0
  103. package/package.json +3 -1
  104. package/scripts/postinstall.mjs +93 -0
  105. package/src/Avatar/Avatar.doc.mjs +6 -6
  106. package/src/Avatar/Avatar.tsx +16 -11
  107. package/src/Avatar/AvatarSizeContext.ts +1 -1
  108. package/src/Avatar/AvatarStatusDot.tsx +2 -2
  109. package/src/AvatarGroup/AvatarGroup.doc.mjs +1 -1
  110. package/src/AvatarGroup/AvatarGroup.test.tsx +17 -3
  111. package/src/AvatarGroup/AvatarGroup.tsx +3 -3
  112. package/src/AvatarGroup/AvatarGroupOverflow.doc.mjs +4 -4
  113. package/src/AvatarGroup/AvatarGroupOverflow.tsx +21 -5
  114. package/src/Carousel/Carousel.doc.mjs +1 -0
  115. package/src/Carousel/Carousel.test.tsx +96 -1
  116. package/src/Carousel/Carousel.tsx +29 -2
  117. package/src/Chat/Chat.doc.mjs +1 -1
  118. package/src/Chat/ChatMessage.tsx +4 -2
  119. package/src/CheckboxInput/CheckboxInput.doc.mjs +1 -1
  120. package/src/Citation/Citation.test.tsx +51 -0
  121. package/src/Citation/Citation.tsx +8 -2
  122. package/src/Collapsible/Collapsible.doc.mjs +7 -0
  123. package/src/Collapsible/Collapsible.test.tsx +80 -0
  124. package/src/Collapsible/Collapsible.tsx +58 -5
  125. package/src/ContextMenu/ContextMenu.test.tsx +75 -1
  126. package/src/ContextMenu/ContextMenu.tsx +10 -5
  127. package/src/ContextMenu/index.ts +15 -0
  128. package/src/DropdownMenu/DropdownMenu.doc.mjs +23 -0
  129. package/src/DropdownMenu/DropdownMenu.tsx +11 -6
  130. package/src/DropdownMenu/DropdownMenuCheckboxItem.doc.mjs +95 -0
  131. package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +237 -0
  132. package/src/DropdownMenu/DropdownMenuContext.tsx +29 -1
  133. package/src/DropdownMenu/DropdownMenuItem.doc.mjs +7 -1
  134. package/src/DropdownMenu/DropdownMenuRadioGroup.doc.mjs +80 -0
  135. package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +119 -0
  136. package/src/DropdownMenu/DropdownMenuRadioItem.doc.mjs +80 -0
  137. package/src/DropdownMenu/DropdownMenuRadioItem.tsx +232 -0
  138. package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +163 -0
  139. package/src/DropdownMenu/index.ts +23 -3
  140. package/src/DropdownMenu/menuItemRoles.ts +22 -0
  141. package/src/Field/Field.doc.mjs +1 -1
  142. package/src/Field/FieldLabel.doc.mjs +1 -1
  143. package/src/Icon/Icon.doc.mjs +12 -0
  144. package/src/Icon/Icon.test.tsx +142 -0
  145. package/src/Icon/Icon.tsx +98 -30
  146. package/src/Item/Item.doc.mjs +1 -1
  147. package/src/NumberInput/NumberInput.doc.mjs +2 -2
  148. package/src/Outline/Outline.doc.mjs +123 -3
  149. package/src/Outline/Outline.test.tsx +735 -0
  150. package/src/Outline/Outline.tsx +184 -33
  151. package/src/Outline/useScrollSpy.ts +248 -72
  152. package/src/Selector/SelectorOption.doc.mjs +1 -1
  153. package/src/SideNav/SideNavItem.doc.mjs +2 -2
  154. package/src/Switch/Switch.doc.mjs +1 -1
  155. package/src/TabList/Tab.tsx +5 -1
  156. package/src/TabList/TabList.doc.mjs +3 -3
  157. package/src/TabList/TabList.test.tsx +66 -0
  158. package/src/TabList/TabList.tsx +8 -0
  159. package/src/TabList/TabMenu.tsx +4 -1
  160. package/src/Table/Table.doc.mjs +2 -0
  161. package/src/Table/Table.tsx +1 -1
  162. package/src/Table/index.ts +7 -0
  163. package/src/Table/plugins/rowExpansion/useTableRowExpansion.test.tsx +90 -1
  164. package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +37 -5
  165. package/src/Table/plugins/sortable/useTableSortable.test.tsx +95 -9
  166. package/src/Table/plugins/sortable/useTableSortable.tsx +23 -7
  167. package/src/Table/plugins/tree/index.ts +12 -0
  168. package/src/Table/plugins/tree/useTableTreeData-perf.test.tsx +163 -0
  169. package/src/Table/plugins/tree/useTableTreeData.test.tsx +594 -0
  170. package/src/Table/plugins/tree/useTableTreeData.tsx +495 -0
  171. package/src/Table/plugins/tree/useTableTreeState.test.tsx +636 -0
  172. package/src/Table/plugins/tree/useTableTreeState.tsx +253 -0
  173. package/src/Table/useBaseTablePlugins.ts +6 -2
  174. package/src/Table/useTableTreeData.doc.mjs +75 -0
  175. package/src/Table/useTableTreeState.doc.mjs +98 -0
  176. package/src/TextArea/TextArea.doc.mjs +1 -1
  177. package/src/TextInput/TextInput.doc.mjs +1 -1
  178. package/src/Toolbar/Toolbar.tsx +10 -3
  179. package/src/TreeList/TreeList.test.tsx +32 -1
  180. package/src/TreeList/TreeListItem.tsx +19 -10
  181. package/src/docs-script.test.mjs +18 -13
  182. package/src/postinstall.test.mjs +71 -0
  183. package/src/theme/Theme.doc.mjs +4 -4
  184. package/src/theme/Theme.tsx +1 -1
  185. package/src/theme/defineTheme.ts +1 -1
  186. package/src/theme/hct.ts +0 -4
  187. package/dist/TreeList/treeListItem.markers.stylex.d.ts +0 -16
  188. package/dist/TreeList/treeListItem.markers.stylex.d.ts.map +0 -1
  189. package/dist/TreeList/treeListItem.markers.stylex.js +0 -22
  190. package/src/TreeList/treeListItem.markers.stylex.ts +0 -20
package/locales/en.json CHANGED
@@ -25,11 +25,11 @@
25
25
  },
26
26
  "@astryx.pagination.count": {
27
27
  "defaultMessage": "{from, number}–{to, number} of {total, number}",
28
- "description": "Visible range-of-total text for the count variant. `from`/`to` are 1-based item indices."
28
+ "description": "Visible range-of-total text on a pagination bar. Example: \"1–20 of 347\"; the en-dash is translator's choice."
29
29
  },
30
30
  "@astryx.pagination.pageOfTotal": {
31
31
  "defaultMessage": "Page {current, number} of {total, number}",
32
- "description": "Page-x-of-y text. Used as the visible compact-variant text and as the screen-reader announcement when total is known."
32
+ "description": "Visible \"Page X of Y\" text on the compact pagination variant; also announced by screen readers. Keep short — sits in a compact toolbar."
33
33
  },
34
34
  "@astryx.pagination.pageAnnounce": {
35
35
  "defaultMessage": "Page {current, number}",
@@ -37,55 +37,55 @@
37
37
  },
38
38
  "@astryx.powersearch.editor.field": {
39
39
  "defaultMessage": "Field",
40
- "description": "Label for the field selector in the PowerSearch filter editor popover."
40
+ "description": "Noun form-label above the field-picker dropdown in the PowerSearch filter-builder popover (which data column to filter on). Not an action."
41
41
  },
42
42
  "@astryx.powersearch.editor.operator": {
43
43
  "defaultMessage": "Operator",
44
- "description": "Label for the operator selector in the PowerSearch filter editor popover."
44
+ "description": "Noun form-label above the operator dropdown in the PowerSearch filter-builder popover. Refers to a comparison verb (\"is\", \"contains\"), not a math or phone operator."
45
45
  },
46
46
  "@astryx.powersearch.editor.addFilter": {
47
47
  "defaultMessage": "+ Add filter",
48
- "description": "Label for the button that appends a new filter row inside a group in the PowerSearch editor."
48
+ "description": "Button label inside a group in the PowerSearch filter-builder; adds another filter row (e.g. \"Status = Active\"). The leading \"+ \" is a plus-sign character."
49
49
  },
50
50
  "@astryx.powersearch.editor.removeFilter": {
51
51
  "defaultMessage": "Remove filter",
52
- "description": "Aria label for the icon button that removes a filter row from a group in the PowerSearch editor."
52
+ "description": "Screen-reader-only label on the \"×\" icon button next to a filter row in the PowerSearch editor; removes that row. Imperative verb."
53
53
  },
54
54
  "@astryx.powersearch.editor.groupOperator": {
55
55
  "defaultMessage": "Group operator",
56
- "description": "Aria label for the AND/OR selector that combines sibling filters inside a group. Visible label is provided separately by the operator itself."
56
+ "description": "Screen-reader-only label for the AND/OR toggle that combines sibling filters inside a filter group. Sighted users see just \"AND\" or \"OR\"."
57
57
  },
58
58
  "@astryx.powersearch.editor.group": {
59
59
  "defaultMessage": "Group",
60
- "description": "Fallback label rendered where a nested group's operator would appear if no operator is available."
60
+ "description": "Fallback noun label shown on a nested filter-group chip when no AND/OR combining operator has been chosen. Use the noun (\"a cluster\"), not the verb \"to group\"."
61
61
  },
62
62
  "@astryx.powersearch.editor.delete": {
63
63
  "defaultMessage": "Delete",
64
- "description": "Label for the delete action inside the PowerSearch filter editor popover."
64
+ "description": "Button label inside the PowerSearch filter-editor popover; deletes the currently-edited filter row. Imperative verb form."
65
65
  },
66
66
  "@astryx.powersearch.editor.cancel": {
67
67
  "defaultMessage": "Cancel",
68
- "description": "Label for the cancel action inside the PowerSearch filter editor popover."
68
+ "description": "Button label inside the PowerSearch filter-editor popover; closes the popover and discards pending edits. Imperative verb form."
69
69
  },
70
70
  "@astryx.powersearch.editor.apply": {
71
71
  "defaultMessage": "Apply",
72
- "description": "Label for the save/apply action inside the PowerSearch filter editor popover. Consumers can override via the `popoverSaveButtonLabel` prop."
72
+ "description": "Primary button label inside the PowerSearch filter-editor popover; confirms the edited filter. Imperative verb; consumers may override to \"Save\"."
73
73
  },
74
74
  "@astryx.powersearch.valueEditor.value": {
75
75
  "defaultMessage": "Value",
76
- "description": "Label for the single-value input in the PowerSearch value editor."
76
+ "description": "Noun form-label above a single free-text/number input in the PowerSearch value editor (e.g. the \"acme\" in `Name contains acme`). Not a verb or \"worth\"."
77
77
  },
78
78
  "@astryx.powersearch.valueEditor.values": {
79
79
  "defaultMessage": "Values",
80
- "description": "Label for the multi-value input in the PowerSearch value editor."
80
+ "description": "Plural noun form-label above a multi-value chip input in the PowerSearch value editor. Should match its singular counterpart `Value` in your language."
81
81
  },
82
82
  "@astryx.powersearch.valueEditor.time": {
83
83
  "defaultMessage": "Time",
84
- "description": "Label for the time picker in the PowerSearch value editor."
84
+ "description": "Noun form-label above a time-of-day (HH:MM) picker in the PowerSearch value editor. Clock time, not duration or era."
85
85
  },
86
86
  "@astryx.powersearch.valueEditor.date": {
87
87
  "defaultMessage": "Date",
88
- "description": "Label for the absolute date picker in the PowerSearch value editor."
88
+ "description": "Noun form-label above a calendar-date picker in the PowerSearch value editor. Calendar date, not romantic date or fruit."
89
89
  },
90
90
  "@astryx.powersearch.valueEditor.relativeDate": {
91
91
  "defaultMessage": "Relative date",
@@ -93,315 +93,315 @@
93
93
  },
94
94
  "@astryx.powersearch.valueEditor.startDate": {
95
95
  "defaultMessage": "Start date",
96
- "description": "Label for the start of a date range in the PowerSearch value editor."
96
+ "description": "Noun form-label above the start-of-range date picker in the PowerSearch value editor. Pairs with `End date` — keep the two parallel in your language."
97
97
  },
98
98
  "@astryx.powersearch.valueEditor.endDate": {
99
99
  "defaultMessage": "End date",
100
- "description": "Label for the end of a date range in the PowerSearch value editor."
100
+ "description": "Noun form-label above the end-of-range date picker in the PowerSearch value editor. Pairs with `Start date` — keep the two parallel."
101
101
  },
102
102
  "@astryx.powersearch.valueEditor.entities": {
103
103
  "defaultMessage": "Entities",
104
- "description": "Label for the entity picker in the PowerSearch value editor."
104
+ "description": "\"Entities\" is jargon — plural noun form-label above an entity picker (people, teams, projects). Prefer a natural collective like \"items\" if your language has no equivalent."
105
105
  },
106
106
  "@astryx.powersearch.valueEditor.searchPlaceholder": {
107
107
  "defaultMessage": "Search…",
108
- "description": "Placeholder shown in the typeahead / entity search input in the PowerSearch value editor."
108
+ "description": "Placeholder inside the search input in the PowerSearch entity/typeahead picker. Imperative verb; trailing `…` is one character."
109
109
  },
110
110
  "@astryx.powersearch.valueEditor.enterValuePlaceholder": {
111
111
  "defaultMessage": "Enter value…",
112
- "description": "Placeholder shown in a free-text single-value input in the PowerSearch value editor."
112
+ "description": "Placeholder inside a free-text single-value input in the PowerSearch value editor. Imperative verb; trailing `…` is one character."
113
113
  },
114
114
  "@astryx.powersearch.valueEditor.addValuesPlaceholder": {
115
115
  "defaultMessage": "Add values…",
116
- "description": "Placeholder shown in the multi-value chip input in the PowerSearch value editor."
116
+ "description": "Placeholder inside a multi-value chip input where the user types items and presses Enter to add each as a chip. Imperative verb; trailing `…` is one character."
117
117
  },
118
118
  "@astryx.powersearch.valueEditor.enterNumberPlaceholder": {
119
119
  "defaultMessage": "Enter number…",
120
- "description": "Placeholder shown in a numeric input in the PowerSearch value editor."
120
+ "description": "Placeholder inside a numeric input in the PowerSearch value editor. Imperative verb; trailing `…` is one character."
121
121
  },
122
122
  "@astryx.powersearch.valueEditor.selectValuesPlaceholder": {
123
123
  "defaultMessage": "Select values…",
124
- "description": "Placeholder shown in the enum-list selector in the PowerSearch value editor."
124
+ "description": "Placeholder on a dropdown for choosing values from a fixed enum list in the PowerSearch value editor. Imperative verb (user selects, not types)."
125
125
  },
126
126
  "@astryx.powersearch.operator.contains": {
127
127
  "defaultMessage": "contains",
128
- "description": "PowerSearch string operator: substring match."
128
+ "description": "PowerSearch string operator, rendered inline as `<field> contains <value>` (e.g. `Name contains acme`). Lowercase verb form."
129
129
  },
130
130
  "@astryx.powersearch.operator.notContains": {
131
131
  "defaultMessage": "does not contain",
132
- "description": "PowerSearch string operator: negated substring match."
132
+ "description": "PowerSearch negated string operator. Example: `Name does not contain test`. Lowercase; pairs with `contains`."
133
133
  },
134
134
  "@astryx.powersearch.operator.startsWith": {
135
135
  "defaultMessage": "starts with",
136
- "description": "PowerSearch string operator: prefix match."
136
+ "description": "PowerSearch string prefix operator. Example: `Email starts with admin@`. Lowercase."
137
137
  },
138
138
  "@astryx.powersearch.operator.notStartsWith": {
139
139
  "defaultMessage": "does not start with",
140
- "description": "PowerSearch string operator: negated prefix match."
140
+ "description": "PowerSearch negated prefix operator. Example: `Email does not start with test`. Lowercase; pairs with `starts with`."
141
141
  },
142
142
  "@astryx.powersearch.operator.endsWith": {
143
143
  "defaultMessage": "ends with",
144
- "description": "PowerSearch string operator: suffix match."
144
+ "description": "PowerSearch string suffix operator. Example: `Email ends with @meta.com`. Lowercase."
145
145
  },
146
146
  "@astryx.powersearch.operator.notEndsWith": {
147
147
  "defaultMessage": "does not end with",
148
- "description": "PowerSearch string operator: negated suffix match."
148
+ "description": "PowerSearch negated suffix operator. Example: `Email does not end with @gmail.com`. Lowercase; pairs with `ends with`."
149
149
  },
150
150
  "@astryx.powersearch.operator.is": {
151
151
  "defaultMessage": "is",
152
- "description": "PowerSearch equality operator (string, enum). May diverge from other equality operators (numbers, dates) at translation time."
152
+ "description": "PowerSearch equality operator for strings/enums. Example: `Status is Active`. Separate from `operator.equals` (numbers) — translations may diverge."
153
153
  },
154
154
  "@astryx.powersearch.operator.isNot": {
155
155
  "defaultMessage": "is not",
156
- "description": "PowerSearch inequality operator (string, enum)."
156
+ "description": "PowerSearch inequality operator for strings/enums. Example: `Status is not Draft`. Pairs with `is`; separate from `operator.notEquals`."
157
157
  },
158
158
  "@astryx.powersearch.operator.equals": {
159
159
  "defaultMessage": "is",
160
- "description": "PowerSearch numeric equality operator. Ships the same English text as `is` but is a distinct entry so number translators can diverge."
160
+ "description": "PowerSearch numeric equality operator. Example: `Age is 30`. Ships same English \"is\" as `operator.is` but is separate so numbers may diverge (e.g. \"equals\")."
161
161
  },
162
162
  "@astryx.powersearch.operator.notEquals": {
163
163
  "defaultMessage": "is not",
164
- "description": "PowerSearch numeric inequality operator."
164
+ "description": "PowerSearch numeric inequality operator. Example: `Count is not 0`. Same divergence option as `operator.equals`."
165
165
  },
166
166
  "@astryx.powersearch.operator.greaterThan": {
167
167
  "defaultMessage": "is greater than",
168
- "description": "PowerSearch numeric operator: strictly greater than."
168
+ "description": "PowerSearch numeric operator, strictly greater than. Example: `Age is greater than 18`. Lowercase."
169
169
  },
170
170
  "@astryx.powersearch.operator.lessThan": {
171
171
  "defaultMessage": "is less than",
172
- "description": "PowerSearch numeric operator: strictly less than."
172
+ "description": "PowerSearch numeric operator, strictly less than. Example: `Priority is less than 5`. Lowercase."
173
173
  },
174
174
  "@astryx.powersearch.operator.greaterThanOrEqual": {
175
175
  "defaultMessage": "is greater than or equal to",
176
- "description": "PowerSearch numeric operator: greater than or equal."
176
+ "description": "PowerSearch numeric operator, ≥. Example: `Age is greater than or equal to 21`. A shorter form (e.g. \"≥\") is fine if idiomatic."
177
177
  },
178
178
  "@astryx.powersearch.operator.lessThanOrEqual": {
179
179
  "defaultMessage": "is less than or equal to",
180
- "description": "PowerSearch numeric operator: less than or equal."
180
+ "description": "PowerSearch numeric operator, ≤. Example: `Priority is less than or equal to 3`. A shorter form is fine if idiomatic."
181
181
  },
182
182
  "@astryx.powersearch.operator.before": {
183
183
  "defaultMessage": "is before",
184
- "description": "PowerSearch date operator: earlier than."
184
+ "description": "PowerSearch date operator, strictly earlier. Example: `Created is before 2024-01-01`. Temporal, not spatial."
185
185
  },
186
186
  "@astryx.powersearch.operator.after": {
187
187
  "defaultMessage": "is after",
188
- "description": "PowerSearch date operator: later than."
188
+ "description": "PowerSearch date operator, strictly later. Example: `Updated is after 2024-06-01`. Temporal."
189
189
  },
190
190
  "@astryx.powersearch.operator.between": {
191
191
  "defaultMessage": "is between",
192
- "description": "PowerSearch date operator: within a range."
192
+ "description": "PowerSearch date operator, inclusive range. Example: `Created is between 2024-01-01 and 2024-06-30`. The `and <end>` portion is composed separately."
193
193
  },
194
194
  "@astryx.powersearch.operator.isTrue": {
195
195
  "defaultMessage": "is true",
196
- "description": "PowerSearch boolean operator: true."
196
+ "description": "PowerSearch boolean operator: matches truthy. Example: `Is admin is true`. Pairs with `is false`; field may be affirmative or a yes/no question."
197
197
  },
198
198
  "@astryx.powersearch.operator.isFalse": {
199
199
  "defaultMessage": "is false",
200
- "description": "PowerSearch boolean operator: false."
200
+ "description": "PowerSearch boolean operator: matches falsy. Example: `Is admin is false`. Pairs with `is true`."
201
201
  },
202
202
  "@astryx.powersearch.operator.isAnyOf": {
203
203
  "defaultMessage": "is any of",
204
- "description": "PowerSearch list operator: membership in the provided set."
204
+ "description": "PowerSearch list operator: value is in the set. Example: `Status is any of [Active, Paused, Draft]`. The value list is composed separately; pairs with `is none of`."
205
205
  },
206
206
  "@astryx.powersearch.operator.isNoneOf": {
207
207
  "defaultMessage": "is none of",
208
- "description": "PowerSearch list operator: exclusion from the provided set."
208
+ "description": "PowerSearch negated list operator: value not in the set. Example: `Status is none of [Archived, Deleted]`. Pairs with `is any of`."
209
209
  },
210
210
  "@astryx.powersearch.valueEditor.itemsCount": {
211
211
  "defaultMessage": "{count, number} {count, plural, one {item} other {items}}",
212
- "description": "Overflow summary shown by PowerSearch when a list-valued filter has too many items to fit on the token. Pluralized to match locale rules."
212
+ "description": "Overflow summary on a compact filter chip when the list of selected items is too long. Example: `3 items` or `1 item`."
213
213
  },
214
214
  "@astryx.powersearch.valueEditor.entitiesCount": {
215
215
  "defaultMessage": "{count, number} {count, plural, one {entity} other {entities}}",
216
- "description": "Overflow summary shown by PowerSearch when an entity-list-valued filter has too many entities to fit on the token."
216
+ "description": "Overflow summary on a compact filter chip when the list of selected entities is too long. Example: `5 entities` or `1 entity`. Pair with `itemsCount` translation."
217
217
  },
218
218
  "@astryx.powersearch.valueEditor.dateRange": {
219
219
  "defaultMessage": "date range",
220
- "description": "Fallback text rendered by PowerSearch when a date-range filter value cannot be formatted concretely."
220
+ "description": "Fallback lowercase noun rendered inline in a filter chip when a date-range value can't be formatted (e.g. `Created is between date range`). Keep lowercase."
221
221
  },
222
222
  "@astryx.powersearch.valueEditor.filtersCount": {
223
223
  "defaultMessage": "{count, number} {count, plural, one {filter} other {filters}}",
224
- "description": "Summary shown by PowerSearch for a nested-filter value: N filters."
224
+ "description": "Summary inside a filter chip when the value is a nested set of filters. Example: `3 filters` or `1 filter`."
225
225
  },
226
226
  "@astryx.powersearch.resultCount": {
227
227
  "defaultMessage": "{count, number} {count, plural, one {result} other {results}}",
228
- "description": "Result count shown next to the PowerSearch input. Announced to screen readers on change."
228
+ "description": "Live result-count text next to the PowerSearch input, announced to screen readers on change. Example: `12 results`, `1 result`; keep compact."
229
229
  },
230
230
  "@astryx.alertDialog.cancel": {
231
231
  "defaultMessage": "Cancel",
232
- "description": "Default label for the cancel action in AlertDialog."
232
+ "description": "Button label on the secondary/dismiss button of an AlertDialog (modal confirmation). Imperative verb; consumers usually override with task-specific text."
233
233
  },
234
234
  "@astryx.appShell.mobileNavigation": {
235
235
  "defaultMessage": "Mobile navigation",
236
- "description": "Aria label for the mobile navigation region rendered by AppShell on small viewports."
236
+ "description": "Screen-reader-only accessible name for the mobile-only navigation region on small viewports. \"Mobile\" = phone/tablet (small screen), not \"movable\"."
237
237
  },
238
238
  "@astryx.avatarGroup.label": {
239
239
  "defaultMessage": "Avatars",
240
- "description": "Default aria label for an AvatarGroup rendered as a list of avatars."
240
+ "description": "Screen-reader-only fallback name for a horizontal cluster of user avatar images. Plural noun; consumers usually override with \"Team members\", \"Attendees\", etc."
241
241
  },
242
242
  "@astryx.banner.dismiss": {
243
243
  "defaultMessage": "Dismiss",
244
- "description": "Label and tooltip for the dismiss button on a Banner."
244
+ "description": "\"Dismiss\" = close/hide this notification (not \"reject a person\"). Aria label AND tooltip on the small X button on a Banner."
245
245
  },
246
246
  "@astryx.calendar.previousMonth": {
247
247
  "defaultMessage": "Previous month",
248
- "description": "Aria label for the previous-month button in Calendar."
248
+ "description": "Screen-reader-only label on the left-arrow button in a Calendar's month header (navigates one month back). Pairs with `calendar.nextMonth`."
249
249
  },
250
250
  "@astryx.calendar.nextMonth": {
251
251
  "defaultMessage": "Next month",
252
- "description": "Aria label for the next-month button in Calendar."
252
+ "description": "Screen-reader-only label on the right-arrow button in a Calendar's month header (navigates one month forward). Pairs with `calendar.previousMonth`."
253
253
  },
254
254
  "@astryx.carousel.label": {
255
255
  "defaultMessage": "Carousel",
256
- "description": "Default aria label for the Carousel landmark."
256
+ "description": "Screen-reader-only fallback name for a horizontally-scrolling row of items. If \"carousel\" is unfamiliar in your locale, prefer the standard term (e.g. \"slider\")."
257
257
  },
258
258
  "@astryx.carousel.scrollLeft": {
259
259
  "defaultMessage": "Scroll left",
260
- "description": "Aria label for the scroll-left button in Carousel."
260
+ "description": "Screen-reader-only label on the left arrow button in a Carousel. Pairs with `carousel.scrollRight`; in RTL locales, coordinate the two so left/right match layout."
261
261
  },
262
262
  "@astryx.carousel.scrollRight": {
263
263
  "defaultMessage": "Scroll right",
264
- "description": "Aria label for the scroll-right button in Carousel."
264
+ "description": "Screen-reader-only label on the right arrow button in a Carousel. Pairs with `carousel.scrollLeft`; same RTL note."
265
265
  },
266
266
  "@astryx.chat.status.sending": {
267
267
  "defaultMessage": "Sending",
268
- "description": "ChatMessageMetadata status: message in flight."
268
+ "description": "Chat send-status caption under an outgoing message while it is being transmitted. Part of the set sending → sent → delivered → read (or failed) — keep tense/aspect consistent."
269
269
  },
270
270
  "@astryx.chat.status.sent": {
271
271
  "defaultMessage": "Sent",
272
- "description": "ChatMessageMetadata status: message sent to server."
272
+ "description": "Chat send-status caption shown once the message reaches the server. Part of the set sending → **sent** → delivered → read (or failed) — keep tense consistent."
273
273
  },
274
274
  "@astryx.chat.status.delivered": {
275
275
  "defaultMessage": "Delivered",
276
- "description": "ChatMessageMetadata status: message delivered to recipient."
276
+ "description": "Chat send-status caption shown once the recipient's device received the message. Part of the set sending → sent → **delivered** → read (or failed)."
277
277
  },
278
278
  "@astryx.chat.status.read": {
279
279
  "defaultMessage": "Read",
280
- "description": "ChatMessageMetadata status: message read by recipient."
280
+ "description": "Chat send-status caption shown once the recipient opened the message. English past-participle (\"has been read\", /rɛd/), not the present verb — part of the set sending → sent → delivered → **read**."
281
281
  },
282
282
  "@astryx.chat.status.failed": {
283
283
  "defaultMessage": "Failed",
284
- "description": "ChatMessageMetadata status: message send failed."
284
+ "description": "Chat send-status caption shown when the send attempt errored. Part of the set — the terminal failure branch, orthogonal to the sent → delivered → read success track."
285
285
  },
286
286
  "@astryx.chat.messageAriaLabel": {
287
287
  "defaultMessage": "Message {status}",
288
- "description": "Aria-label for a chat message row. `status` is the localized message status (e.g. \"sent\", \"delivered\") from @astryx.chat.status.*."
288
+ "description": "Screen-reader-only accessible name for a chat message row. `{status}` interpolates the localized status word (e.g. `Message sent`, `Message delivered`) — reorder if needed."
289
289
  },
290
290
  "@astryx.chat.pastedText.expand": {
291
291
  "defaultMessage": "Expand",
292
- "description": "Label for the button that expands a collapsed pasted-text chat token."
292
+ "description": "Button label on a chip in the chat composer representing a long pasted text block; clicking reveals full content. \"Expand\" here means reveal more, not grow physically."
293
293
  },
294
294
  "@astryx.checkboxList.item.checkbox": {
295
295
  "defaultMessage": "Checkbox",
296
- "description": "Aria label for the checkbox inside CheckboxListItem when no label is provided."
296
+ "description": "Screen-reader-only last-ditch fallback name for a checkbox inside a list item when no label is provided. Should almost never render — consumers should supply a real label."
297
297
  },
298
298
  "@astryx.commandPalette.emptySearch": {
299
299
  "defaultMessage": "No results",
300
- "description": "Default text shown in CommandPalette when the current query returns no matches."
300
+ "description": "Fallback empty-state text inside a CommandPalette when the user's query has no matches. Very short (2 words); neutral tone."
301
301
  },
302
302
  "@astryx.commandPalette.emptyBootstrap": {
303
303
  "defaultMessage": "Type to search",
304
- "description": "Default text shown in CommandPalette on first open, before the user has typed anything."
304
+ "description": "Onboarding empty-state text shown inside a CommandPalette on first open, before the user has typed anything. Imperative sentence fragment."
305
305
  },
306
306
  "@astryx.dateRangeInput.presetDateRanges": {
307
307
  "defaultMessage": "Preset date ranges",
308
- "description": "Aria label for the preset-date-range group in DateRangeInput."
308
+ "description": "Screen-reader-only accessible name for the sidebar of quick-pick preset ranges inside a DateRangeInput popover (e.g. \"Last 7 days\", \"This month\")."
309
309
  },
310
310
  "@astryx.dateTimeInput.timePlaceholder": {
311
311
  "defaultMessage": "Select a time",
312
- "description": "Default placeholder for the time input in DateTimeInput."
312
+ "description": "Grey placeholder inside the empty time-of-day slot in a DateTimeInput. \"Time\" = clock time (HH:MM), not duration."
313
313
  },
314
314
  "@astryx.dialog.close": {
315
315
  "defaultMessage": "Close",
316
- "description": "Label and tooltip for the close button in DialogHeader."
316
+ "description": "\"Close\" = shut/dismiss the dialog, not \"nearby\" (English homograph). Aria label AND tooltip on the X at the top-right of a Dialog."
317
317
  },
318
318
  "@astryx.dropdownMenu.label": {
319
319
  "defaultMessage": "Menu",
320
- "description": "Default aria label for a DropdownMenu when none is provided."
320
+ "description": "Screen-reader-only fallback name for a dropdown menu popover. Very generic; consumers usually override. Noun (\"a menu\"), not the imperative."
321
321
  },
322
322
  "@astryx.lightbox.close": {
323
323
  "defaultMessage": "Close",
324
- "description": "Aria label for the close button in Lightbox."
324
+ "description": "\"Close\" = shut/dismiss (not \"nearby\"). Screen-reader-only label on the X button that dismisses a Lightbox."
325
325
  },
326
326
  "@astryx.lightbox.previous": {
327
327
  "defaultMessage": "Previous",
328
- "description": "Aria label for the previous-item button in Lightbox."
328
+ "description": "Screen-reader-only label on the left-arrow button in a Lightbox (navigates to previous media item). Pairs with `lightbox.next`."
329
329
  },
330
330
  "@astryx.lightbox.next": {
331
331
  "defaultMessage": "Next",
332
- "description": "Aria label for the next-item button in Lightbox."
332
+ "description": "Screen-reader-only label on the right-arrow button in a Lightbox (navigates to next media item). Pairs with `lightbox.previous`."
333
333
  },
334
334
  "@astryx.markdown.taskList": {
335
335
  "defaultMessage": "Task list",
336
- "description": "Aria label rendered by Markdown for a GitHub-flavored task-list block."
336
+ "description": "Screen-reader-only accessible name for a GitHub-flavored Markdown task list (rendered from `- [ ] item` / `- [x] done` syntax)."
337
337
  },
338
338
  "@astryx.markdown.table": {
339
339
  "defaultMessage": "Table",
340
- "description": "Aria label rendered by Markdown for a rendered table."
340
+ "description": "Screen-reader-only accessible name for a table rendered inside a Markdown block. Noun (\"a table\"), not the verb. Separate from `@astryx.table.label` — translations may diverge."
341
341
  },
342
342
  "@astryx.mobileNav.closeNavigation": {
343
343
  "defaultMessage": "Close navigation",
344
- "description": "Aria label for the close button on the MobileNav overlay."
344
+ "description": "Screen-reader-only label on the X/close button that dismisses the MobileNav overlay. Pairs with `mobileNav.toggle.open`."
345
345
  },
346
346
  "@astryx.multiSelector.selectAll": {
347
347
  "defaultMessage": "Select all",
348
- "description": "Default label for the \"select all\" toggle in MultiSelector."
348
+ "description": "Label on the checkbox/toggle at the top of a MultiSelector dropdown that selects every option. \"All\" is a determiner here (as in \"all the options\"), not the pronoun."
349
349
  },
350
350
  "@astryx.multiSelector.searchPlaceholder": {
351
351
  "defaultMessage": "Search…",
352
- "description": "Default placeholder for the search input inside MultiSelector."
352
+ "description": "Placeholder inside the search input at the top of a MultiSelector's dropdown panel. Imperative verb; trailing `…` is one character."
353
353
  },
354
354
  "@astryx.multiSelector.searchOptions": {
355
355
  "defaultMessage": "Search options",
356
- "description": "Aria label for the search input inside MultiSelector."
356
+ "description": "Screen-reader-only accessible name for that same search input inside a MultiSelector."
357
357
  },
358
358
  "@astryx.popover.close": {
359
359
  "defaultMessage": "Close popover",
360
- "description": "Default label for the close button rendered inside a Popover."
360
+ "description": "\"Close\" = shut/dismiss, not \"nearby\". Screen-reader-only label on the close button inside a Popover."
361
361
  },
362
362
  "@astryx.selector.searchPlaceholder": {
363
363
  "defaultMessage": "Search…",
364
- "description": "Default placeholder for the search input inside Selector."
364
+ "description": "Placeholder inside the search input at the top of a Selector's dropdown panel (for filtering options). Imperative verb; trailing `…` is one character."
365
365
  },
366
366
  "@astryx.selector.searchOptions": {
367
367
  "defaultMessage": "Search options",
368
- "description": "Aria label for the search input inside Selector."
368
+ "description": "\"Options\" = the list of choices in the dropdown. Screen-reader-only accessible name for the search input inside a Selector."
369
369
  },
370
370
  "@astryx.sideNav.label": {
371
371
  "defaultMessage": "Side navigation",
372
- "description": "Aria label for the SideNav landmark region."
372
+ "description": "Screen-reader-only accessible name for the primary vertical sidebar nav (usually on the left)."
373
373
  },
374
374
  "@astryx.sideNav.resizeSidebar": {
375
375
  "defaultMessage": "Resize sidebar",
376
- "description": "Aria label for the SideNav resize handle."
376
+ "description": "Screen-reader-only label on the vertical drag handle at the right edge of the SideNav that lets the user resize the sidebar's width."
377
377
  },
378
378
  "@astryx.sideNav.heading.openMenu": {
379
379
  "defaultMessage": "Open menu",
380
- "description": "Aria label for the overflow menu button in a SideNav heading."
380
+ "description": "Screen-reader-only label on the `⋯` overflow-menu button embedded in a SideNav section heading. Same string as `topNav.heading.openMenu` — translations may share."
381
381
  },
382
382
  "@astryx.tabList.label": {
383
383
  "defaultMessage": "Tabs",
384
- "description": "Default aria label for a TabList when none is provided."
384
+ "description": "Screen-reader-only fallback name for a horizontal tab bar. Plural noun; \"Tabs\" here = UI tab panels, not browser tabs or the Tab key."
385
385
  },
386
386
  "@astryx.table.label": {
387
387
  "defaultMessage": "Table",
388
- "description": "Default aria label for a Table when none is provided."
388
+ "description": "Fallback screen-reader-only accessible name for a data-table region when the consumer provides none. Noun (\"a table\"), not the verb \"to table\"."
389
389
  },
390
390
  "@astryx.table.noData": {
391
391
  "defaultMessage": "No data",
392
- "description": "Default text shown by Table when the data set is empty."
392
+ "description": "Fallback empty-state text in the table body when there are zero rows. Neutral tone (not error-y); consumers commonly override with something specific like \"No results\"."
393
393
  },
394
394
  "@astryx.table.filter.allPlaceholder": {
395
395
  "defaultMessage": "All",
396
- "description": "Placeholder for a Table filter selector when no value is selected (matches all rows)."
396
+ "description": "Placeholder on a per-column filter dropdown when nothing is selected, meaning \"no filter — all rows match\". Determiner form (as in \"all values\"), not the pronoun."
397
397
  },
398
398
  "@astryx.table.filter.reset": {
399
399
  "defaultMessage": "Reset",
400
- "description": "Label for the reset action in a Table filter panel."
400
+ "description": "Button label inside a table's filter panel/popover; clears pending filter values back to defaults. Imperative verb."
401
401
  },
402
402
  "@astryx.table.filter.apply": {
403
403
  "defaultMessage": "Apply",
404
- "description": "Label for the apply action in a Table filter panel."
404
+ "description": "Primary button label inside a table's filter panel/popover; commits pending filter values. Imperative verb; pairs with `Reset`."
405
405
  },
406
406
  "@astryx.table.selection.selectAllRows": {
407
407
  "defaultMessage": "Select all rows",
@@ -413,31 +413,51 @@
413
413
  },
414
414
  "@astryx.table.sort.ascending": {
415
415
  "defaultMessage": "Sort ascending",
416
- "description": "Aria label for a Table column header when clicking it will sort ascending."
416
+ "description": "Screen-reader-only label on a column header button that will sort the column ascending. Part of a set with `sort.descending` and `sort.clear` — keep parallel."
417
417
  },
418
418
  "@astryx.table.sort.descending": {
419
419
  "defaultMessage": "Sort descending",
420
- "description": "Aria label for a Table column header when clicking it will sort descending."
420
+ "description": "Screen-reader-only label on a column header button that will sort the column descending. Part of a set with `sort.ascending` and `sort.clear`."
421
421
  },
422
422
  "@astryx.table.sort.clear": {
423
423
  "defaultMessage": "Clear sort",
424
- "description": "Aria label for a Table column header when clicking it will clear the current sort."
424
+ "description": "Screen-reader-only label on a column header button that will remove the current sort. \"Clear\" here means remove, not transparent. Part of the sort set."
425
+ },
426
+ "@astryx.table.sort.direction.ascending": {
427
+ "defaultMessage": "ascending",
428
+ "description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
429
+ },
430
+ "@astryx.table.sort.direction.descending": {
431
+ "defaultMessage": "descending",
432
+ "description": "Localized direction word interpolated as `direction` into @astryx.table.sort.sortedBy and @astryx.table.sort.sortedByWithPriority."
433
+ },
434
+ "@astryx.table.sort.sortBy": {
435
+ "defaultMessage": "Sort by {label}",
436
+ "description": "Aria label for a sortable Table header button when the column is unsorted. `label` is the column header text."
437
+ },
438
+ "@astryx.table.sort.sortedBy": {
439
+ "defaultMessage": "Sort by {label}, sorted {direction}",
440
+ "description": "Aria label for a sorted Table header button. `direction` is the localized direction word from @astryx.table.sort.direction.*."
441
+ },
442
+ "@astryx.table.sort.sortedByWithPriority": {
443
+ "defaultMessage": "Sort by {label}, sorted {direction}, priority {rank, number} of {total, number}",
444
+ "description": "Aria label for a sorted Table header button in multi-sort. `rank` is the 1-based position of this column in the sort order; `total` is the number of sorted columns."
425
445
  },
426
446
  "@astryx.toast.dismiss": {
427
447
  "defaultMessage": "Dismiss notification",
428
- "description": "Aria label for the dismiss button on a Toast."
448
+ "description": "Screen-reader-only label on the X button of a Toast (transient notification popup). Distinct from `banner.dismiss` (persistent banner)."
429
449
  },
430
450
  "@astryx.toast.viewport": {
431
451
  "defaultMessage": "Notifications",
432
- "description": "Aria label for the Toast viewport region that hosts toasts."
452
+ "description": "Screen-reader-only accessible name for the invisible landmark region hosting the stack of Toast popups (usually pinned to a screen corner)."
433
453
  },
434
454
  "@astryx.tokenizer.clearAll": {
435
455
  "defaultMessage": "Clear all",
436
- "description": "Label for the \"clear all tokens\" button in Tokenizer."
456
+ "description": "Label on the \"×\" button that removes every token/chip from a Tokenizer input. Imperative verb + determiner \"all\"; short."
437
457
  },
438
458
  "@astryx.topNav.heading.openMenu": {
439
459
  "defaultMessage": "Open menu",
440
- "description": "Aria label for the overflow menu button in a TopNav heading."
460
+ "description": "Screen-reader-only label on the `⋯` overflow button in a TopNav section heading. Kept separate from `sideNav.heading.openMenu` so translations may diverge."
441
461
  },
442
462
  "@astryx.topNav.landmarkLabel": {
443
463
  "defaultMessage": "Top navigation",
@@ -445,71 +465,71 @@
445
465
  },
446
466
  "@astryx.treeList.toggleChildren": {
447
467
  "defaultMessage": "Toggle children",
448
- "description": "Aria label for the expand/collapse button on a TreeList item."
468
+ "description": "\"Children\" = child nodes in the tree, not human children. Screen-reader-only label on the chevron next to a TreeList item that has children — toggles the sub-list."
449
469
  },
450
470
  "@astryx.typeahead.emptySearchResults": {
451
471
  "defaultMessage": "No results found",
452
- "description": "Default text shown by Typeahead when the current query returns no matches."
472
+ "description": "Fallback empty-state message inside a Typeahead's suggestion popover when the current query has no matches. Neutral tone (not error-y)."
453
473
  },
454
474
  "@astryx.typeahead.loading": {
455
475
  "defaultMessage": "Loading",
456
- "description": "Aria label for the loading indicator inside a Typeahead dropdown."
476
+ "description": "Screen-reader-only name for a spinner shown inside a Typeahead dropdown while suggestions are being fetched. Present-progressive form."
457
477
  },
458
478
  "@astryx.typeahead.searchResults": {
459
479
  "defaultMessage": "Search results",
460
- "description": "Aria label for the search-results list inside a Typeahead dropdown."
480
+ "description": "Screen-reader-only accessible name for the list of suggestions inside a Typeahead dropdown."
461
481
  },
462
482
  "@astryx.typeahead.clearSelection": {
463
483
  "defaultMessage": "Clear selection",
464
- "description": "Label for the \"clear selected value\" button on a Typeahead."
484
+ "description": "\"Selection\" = the chosen value (not highlighted text). Screen-reader-only label on the X that clears the currently-selected value from a Typeahead."
465
485
  },
466
486
  "@astryx.breadcrumbs.label": {
467
487
  "defaultMessage": "Breadcrumb",
468
- "description": "Default aria label for the Breadcrumbs navigation landmark."
488
+ "description": "Screen-reader-only fallback name for the breadcrumb trail (e.g. `Home > Section > Page`). Singular in English per ARIA convention; plural is fine if natural in your locale."
469
489
  },
470
490
  "@astryx.chat.composer.placeholder": {
471
491
  "defaultMessage": "Type a message…",
472
- "description": "Default placeholder for the ChatComposer input."
492
+ "description": "Grey placeholder text inside the empty chat composer textarea. Imperative verb; trailing `…` is one character."
473
493
  },
474
494
  "@astryx.chat.composerDrawer.label": {
475
495
  "defaultMessage": "Items",
476
- "description": "Default label for the ChatComposerDrawer list."
496
+ "description": "Fallback aria label for the ChatComposerDrawer — a horizontal list of attachment/tool chips. Consumers usually override with \"Attachments\", \"Tools\", etc."
477
497
  },
478
498
  "@astryx.chat.composerInput.label": {
479
499
  "defaultMessage": "Message input",
480
- "description": "Default aria label for the ChatComposerInput textarea."
500
+ "description": "Screen-reader-only accessible name for the chat composer textarea. Reorder freely if your language uses one word for \"message field\"."
481
501
  },
482
502
  "@astryx.chat.speechRecognition.noSpeechDetected": {
483
503
  "defaultMessage": "No speech was detected.",
484
- "description": "Speech-recognition error message shown when the mic captures silence."
504
+ "description": "Full-sentence error shown inline in the chat composer after voice input captured silence. Soft-error tone (not alarming); keep terminal period."
485
505
  },
486
506
  "@astryx.commandPalette.label": {
487
507
  "defaultMessage": "Command palette",
488
- "description": "Default aria label for the CommandPalette landmark."
508
+ "description": "Screen-reader-only fallback name for a keyboard-driven command menu (usually opened with Cmd/Ctrl-K). If unfamiliar, prefer a natural equivalent like \"quick actions\"."
489
509
  },
490
510
  "@astryx.commandPalette.input.placeholder": {
491
511
  "defaultMessage": "Search…",
492
- "description": "Default placeholder for the CommandPalette search input."
512
+ "description": "Grey placeholder inside the CommandPalette's search input. Imperative verb; trailing `…` is one character."
493
513
  },
494
514
  "@astryx.commandPalette.list.label": {
495
515
  "defaultMessage": "Commands",
496
- "description": "Default aria label for the CommandPalette command list."
516
+ "description": "\"Command\" = an app action a user can invoke (metaphor from CLI), not a Unix command. Screen-reader-only name for the matching-commands list."
497
517
  },
498
518
  "@astryx.contextMenu.label": {
499
519
  "defaultMessage": "Context menu",
500
- "description": "Default aria label for the ContextMenu."
520
+ "description": "Screen-reader-only fallback name for the right-click / long-press popup menu. \"Context\" = context-specific to the activated element, not linguistic context."
501
521
  },
502
522
  "@astryx.dateInput.placeholder": {
503
523
  "defaultMessage": "Select a date",
504
- "description": "Default placeholder for DateInput."
524
+ "description": "Grey placeholder inside an empty DateInput field. \"Date\" = calendar date, not romantic or fruit. Imperative verb."
505
525
  },
506
526
  "@astryx.dateInput.dialogLabel": {
507
527
  "defaultMessage": "Choose date",
508
- "description": "Aria label for the DateInput picker dialog."
528
+ "description": "Screen-reader-only accessible name for the popover dialog opened from a DateInput's calendar toggle. Imperative verb + noun."
509
529
  },
510
530
  "@astryx.dateInput.closeCalendar": {
511
531
  "defaultMessage": "Close calendar",
512
- "description": "Aria label for the close button in the DateInput calendar popover."
532
+ "description": "Screen-reader-only label on the X inside the DateInput calendar popover (dismisses the popover). Distinct from `dateInput.toggleCalendarClose`, which labels the outer toggle."
513
533
  },
514
534
  "@astryx.dateInput.openCalendar": {
515
535
  "defaultMessage": "Open calendar",
@@ -525,222 +545,230 @@
525
545
  },
526
546
  "@astryx.dateTimeInput.timeSuffix": {
527
547
  "defaultMessage": "{label} time",
528
- "description": "Aria label suffix for the time slot in DateTimeInput. `{label}` is the field's own label."
548
+ "description": "Screen-reader-only accessible name for the time-of-day slot in a DateTimeInput. Example: `Start date time`; reorder freely (e.g. \"time of {label}\")."
529
549
  },
530
550
  "@astryx.dateRangeInput.placeholder": {
531
551
  "defaultMessage": "Select date range",
532
- "description": "Default placeholder for DateRangeInput."
552
+ "description": "Grey placeholder inside an empty DateRangeInput field. Represents picking a start–end date pair. Imperative verb."
533
553
  },
534
554
  "@astryx.dateRangeInput.dialogLabel": {
535
555
  "defaultMessage": "Choose date range",
536
- "description": "Aria label for the DateRangeInput picker dialog."
556
+ "description": "Screen-reader-only accessible name for the popover dialog opened from a DateRangeInput. Imperative verb + noun phrase."
537
557
  },
538
558
  "@astryx.dateTimeInput.placeholder": {
539
559
  "defaultMessage": "Select a date",
540
- "description": "Default placeholder for DateTimeInput."
560
+ "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
541
561
  },
542
562
  "@astryx.dateTimeInput.dialogLabel": {
543
563
  "defaultMessage": "Choose date",
544
- "description": "Aria label for the DateTimeInput picker dialog."
564
+ "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
545
565
  },
546
566
  "@astryx.link.newTab": {
547
567
  "defaultMessage": "(opens in new tab)",
548
- "description": "Visually-hidden suffix appended to Link labels that open in a new tab."
568
+ "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
549
569
  },
550
570
  "@astryx.mobileNav.toggle.open": {
551
571
  "defaultMessage": "Open navigation",
552
- "description": "Aria label for the MobileNavToggle button when the drawer is closed."
572
+ "description": "Screen-reader-only label on the hamburger button that opens the MobileNav overlay (rendered when the overlay is closed). Pairs with `mobileNav.closeNavigation`."
553
573
  },
554
574
  "@astryx.moreMenu.label": {
555
575
  "defaultMessage": "More options",
556
- "description": "Default aria label for the MoreMenu trigger button."
576
+ "description": "Screen-reader-only name for the small `⋯` (three-dots) overflow button that opens a menu of additional actions. Very short — sits on a tiny icon button."
557
577
  },
558
578
  "@astryx.multiSelector.selectPlaceholder": {
559
579
  "defaultMessage": "Select…",
560
- "description": "Default placeholder on the MultiSelector trigger button."
580
+ "description": "Placeholder on an empty MultiSelector trigger button. Same English as `selector.placeholder` but a separate key — plural phrasing like \"Choose items…\" is fine."
561
581
  },
562
582
  "@astryx.outline.label": {
563
583
  "defaultMessage": "Table of contents",
564
- "description": "Default aria label for the Outline navigation landmark."
584
+ "description": "Screen-reader-only fallback name for a page's outline / table-of-contents sidebar (list of in-page headings). Rendered as `aria-label` on a `<nav>` landmark."
565
585
  },
566
586
  "@astryx.powersearch.label": {
567
587
  "defaultMessage": "Search",
568
- "description": "Default aria label for the PowerSearch input."
588
+ "description": "Screen-reader-only accessible name for the PowerSearch input (a filter-builder). The visible placeholder is separate; noun form often reads better than the verb."
569
589
  },
570
590
  "@astryx.powersearch.placeholder": {
571
591
  "defaultMessage": "Search…",
572
- "description": "Default placeholder for the PowerSearch input."
592
+ "description": "Grey placeholder text inside the empty PowerSearch input. Imperative verb; trailing `…` is one character."
573
593
  },
574
594
  "@astryx.resizable.handle.label": {
575
595
  "defaultMessage": "Resize handle",
576
- "description": "Aria label for the drag handle in Resizable."
596
+ "description": "Screen-reader-only accessible name for the small draggable divider between two Resizable panels (users drag it to change the split ratio)."
577
597
  },
578
598
  "@astryx.selector.placeholder": {
579
599
  "defaultMessage": "Select…",
580
- "description": "Default placeholder on the Selector trigger button."
600
+ "description": "Placeholder text on an empty Selector trigger button (a dropdown). Imperative verb; trailing `…` is one character. Very short — appears on the button face."
581
601
  },
582
602
  "@astryx.sideNav.heading.dialogLabel": {
583
603
  "defaultMessage": "Navigation menu",
584
- "description": "Aria label for the SideNavHeading dropdown dialog."
604
+ "description": "Screen-reader-only accessible name for the dropdown dialog opened from a SideNavHeading's overflow menu."
585
605
  },
586
606
  "@astryx.table.pagination.label": {
587
607
  "defaultMessage": "Table pagination",
588
- "description": "Default aria label for the pagination row appended to a Table."
608
+ "description": "Screen-reader-only accessible name for the pagination `<nav>` appended below a data table. Kept separate from `@astryx.pagination.label` so translations may diverge."
589
609
  },
590
610
  "@astryx.timeInput.placeholder": {
591
611
  "defaultMessage": "Select a time",
592
- "description": "Default placeholder for TimeInput."
612
+ "description": "\"Time\" = clock time (HH:MM), not duration or era. Grey placeholder inside an empty TimeInput field; imperative verb."
593
613
  },
594
614
  "@astryx.topNav.heading.dialogLabel": {
595
615
  "defaultMessage": "Navigation menu",
596
- "description": "Aria label for the TopNavHeading dropdown dialog."
616
+ "description": "Screen-reader-only accessible name for the dropdown dialog opened from a TopNavHeading's overflow menu. Kept separate from the SideNav sibling."
597
617
  },
598
618
  "@astryx.typeahead.searchPlaceholder": {
599
619
  "defaultMessage": "Search…",
600
- "description": "Default placeholder for the Typeahead input."
620
+ "description": "Placeholder inside an empty Typeahead input (a search field that suggests results as the user types). Imperative verb; trailing `…` is one character."
601
621
  },
602
622
  "@astryx.banner.collapse": {
603
623
  "defaultMessage": "Collapse",
604
- "description": "Aria label and tooltip for the Banner expand/collapse toggle button when the banner is expanded."
624
+ "description": "\"Collapse\" = fold up, not crumble. Aria label AND tooltip on the Banner expand/collapse toggle when currently expanded. Pairs with `banner.expand`."
605
625
  },
606
626
  "@astryx.banner.expand": {
607
627
  "defaultMessage": "Expand",
608
- "description": "Aria label and tooltip for the Banner expand/collapse toggle button when the banner is collapsed."
628
+ "description": "\"Expand\" = reveal more, not grow physically. Aria label AND tooltip on the same toggle when currently collapsed. Pairs with `banner.collapse`."
609
629
  },
610
630
  "@astryx.chatComposerDrawer.expand": {
611
631
  "defaultMessage": "Expand {label}",
612
- "description": "Aria label for the ChatComposerDrawer toggle when the drawer is collapsed. `label` is the drawer's visible label."
632
+ "description": "Screen-reader-only label on the ChatComposerDrawer toggle when the drawer is collapsed. `{label}` is the drawer's visible name — example: `Expand Attachments`. Pairs with `collapse`."
613
633
  },
614
634
  "@astryx.chatComposerDrawer.collapse": {
615
635
  "defaultMessage": "Collapse {label}",
616
- "description": "Aria label for the ChatComposerDrawer toggle when the drawer is expanded. `label` is the drawer's visible label."
636
+ "description": "Screen-reader-only label on the ChatComposerDrawer toggle when the drawer is expanded. Example: `Collapse Attachments`. Pairs with `expand`."
617
637
  },
618
638
  "@astryx.chatLayout.newMessages": {
619
639
  "defaultMessage": "New messages",
620
- "description": "Label for the ChatLayout scroll-to-bottom pill when new messages have arrived below the viewport."
640
+ "description": "Text on a floating pill at the bottom of a chat viewport when unseen messages arrive below the fold; clicking scrolls to bottom. Keep short — narrow pill."
621
641
  },
622
642
  "@astryx.chatLayoutScrollButton.scrollToBottom": {
623
643
  "defaultMessage": "Scroll to bottom",
624
- "description": "Default label and aria-label for the ChatLayout scroll-to-bottom button."
644
+ "description": "Visible tooltip AND screen-reader label for a small down-arrow button that scrolls the chat viewport to its latest message."
625
645
  },
626
646
  "@astryx.chatMessage.messageFrom": {
627
647
  "defaultMessage": "Message from {sender}",
628
- "description": "Aria label for a ChatMessage article element when no visible sender name is rendered. `sender` is the sender identifier."
648
+ "description": "Screen-reader-only accessible name for a chat message when the sender name isn't visible. Example: `Message from Sarah`, `Message from Bot` — reorder freely."
629
649
  },
630
650
  "@astryx.chatSendButton.stop": {
631
651
  "defaultMessage": "Stop",
632
- "description": "Label for the ChatSendButton while a response is streaming and the button acts as a stop control."
652
+ "description": "Button label that replaces `Send` on the chat send button while an AI response is streaming; clicking aborts generation. Short — appears on a small button."
633
653
  },
634
654
  "@astryx.chatSendButton.send": {
635
655
  "defaultMessage": "Send",
636
- "description": "Label for the ChatSendButton when submitting a chat message."
656
+ "description": "Primary button label on the chat submit button (paperplane icon). Imperative verb; pairs with `Stop`. Very short."
637
657
  },
638
658
  "@astryx.chatTriggerMenu.suggestions": {
639
659
  "defaultMessage": "Suggestions",
640
- "description": "Default aria label for the trigger-menu listbox popover in the chat composer when a trigger does not supply its own menuLabel."
660
+ "description": "Screen-reader-only fallback label for the popover listbox opened by a trigger character (`@`, `/`) in the chat composer when the trigger provides no specific label."
641
661
  },
642
662
  "@astryx.citation.label": {
643
663
  "defaultMessage": "Citation {number}: {title}",
644
- "description": "Aria label for a Citation element. `number` is the 1-based citation index; `title` is the source title (or the number as a string if no title is provided)."
664
+ "description": "Screen-reader-only accessible name for a Citation chip (a small numbered link to a source). Example: `Citation 1: OpenAI research paper`. Reorder freely."
645
665
  },
646
666
  "@astryx.codeBlock.copied": {
647
667
  "defaultMessage": "Copied",
648
- "description": "Aria label for the CodeBlock copy button immediately after the code has been copied."
668
+ "description": "Screen-reader-only label on the CodeBlock copy button for ~2s after a successful copy. Past-participle (\"has been copied\"); pairs with `codeBlock.copyCode`."
649
669
  },
650
670
  "@astryx.codeBlock.copyCode": {
651
671
  "defaultMessage": "Copy code",
652
- "description": "Aria label for the CodeBlock copy button in its default (not-yet-copied) state."
672
+ "description": "\"Code\" = source code. Aria label AND tooltip on the CodeBlock copy button in its default state. Pairs with `codeBlock.copied` (post-click state)."
653
673
  },
654
674
  "@astryx.codeBlock.code": {
655
675
  "defaultMessage": "Code",
656
- "description": "Fallback aria label for the CodeBlock scroll container when no language label is available."
676
+ "description": "Screen-reader-only fallback name for a code-snippet scroll container when the code's language is unknown. \"Code\" = source code, not secret code or code of conduct."
657
677
  },
658
678
  "@astryx.fileInput.clearLabel": {
659
679
  "defaultMessage": "Clear {label}",
660
- "description": "Label for the FileInput clear button. `label` is the file input's own visible label."
680
+ "description": "Screen-reader-only label on the X that removes the selected file from a FileInput. Example: `Clear Attachment`, `Clear Résumé`."
661
681
  },
662
682
  "@astryx.lightbox.mediaViewer": {
663
683
  "defaultMessage": "Media viewer",
664
- "description": "Fallback aria label for the Lightbox dialog when the current media item has no alt text."
684
+ "description": "Screen-reader-only fallback name for the Lightbox dialog when the current media item has no alt text. Should rarely render — consumers should provide alt."
665
685
  },
666
686
  "@astryx.mobileNav.navigation": {
667
687
  "defaultMessage": "Navigation",
668
- "description": "Fallback aria label for the MobileNav dialog when no explicit label or string header is provided."
688
+ "description": "Screen-reader-only fallback name for the MobileNav overlay dialog when no explicit label was passed."
669
689
  },
670
690
  "@astryx.multiSelector.clearAll": {
671
691
  "defaultMessage": "Clear all {label}",
672
- "description": "Aria label for the MultiSelector clear-all button. `label` is the selector's own visible label."
692
+ "description": "Screen-reader-only label on the X that clears every selected value from a MultiSelector. Example: `Clear all Countries`. `{label}` is typically already plural in English."
673
693
  },
674
694
  "@astryx.numberInput.clearLabel": {
675
695
  "defaultMessage": "Clear {label}",
676
- "description": "Aria label for the NumberInput clear button. `label` is the input's own visible label."
696
+ "description": "Screen-reader-only label on the X that clears the value from a NumberInput. Example: `Clear Age`, `Clear Quantity`."
677
697
  },
678
698
  "@astryx.selector.clearLabel": {
679
699
  "defaultMessage": "Clear {label}",
680
- "description": "Aria label for the Selector clear button. `label` is the selector's own visible label."
700
+ "description": "Screen-reader-only label on the X that clears the selected value from a Selector. `{label}` is the selector's visible label — example: `Clear Country`."
681
701
  },
682
702
  "@astryx.sideNavCollapseButton.expandSidebar": {
683
703
  "defaultMessage": "Expand sidebar",
684
- "description": "Default label for the SideNav collapse/expand button when the sidebar is currently collapsed."
704
+ "description": "Aria label AND tooltip on the SideNav collapse/expand toggle when the sidebar is currently collapsed (clicking expands it). Pairs with `collapseSidebar`."
685
705
  },
686
706
  "@astryx.sideNavCollapseButton.collapseSidebar": {
687
707
  "defaultMessage": "Collapse sidebar",
688
- "description": "Default label for the SideNav collapse/expand button when the sidebar is currently expanded."
708
+ "description": "Aria label AND tooltip on the same toggle when the sidebar is currently expanded (clicking collapses it). Pairs with `expandSidebar`."
689
709
  },
690
710
  "@astryx.sideNavItem.expand": {
691
711
  "defaultMessage": "Expand {label}",
692
- "description": "Aria label for the SideNavItem expand/collapse chevron when the item is collapsed. `label` is the nav item's visible label."
712
+ "description": "Screen-reader-only label on the chevron next to a SideNav item with children when the group is collapsed. Example: `Expand Settings`. Pairs with `sideNavItem.collapse`."
693
713
  },
694
714
  "@astryx.sideNavItem.collapse": {
695
715
  "defaultMessage": "Collapse {label}",
696
- "description": "Aria label for the SideNavItem expand/collapse chevron when the item is expanded. `label` is the nav item's visible label."
716
+ "description": "Screen-reader-only label on the same chevron when the group is expanded. Example: `Collapse Settings`. Pairs with `sideNavItem.expand`."
697
717
  },
698
718
  "@astryx.tableFiltering.filterByColumn": {
699
719
  "defaultMessage": "Filter {header}",
700
- "description": "Label, placeholder, and aria label for per-column filter controls in the Table filtering plugin. `header` is the column's header text."
720
+ "description": "Triple-use string on per-column filter controls: visible label, placeholder, AND aria label. `{header}` is the column header — example: `Filter Name`. Keep short."
701
721
  },
702
722
  "@astryx.tableGroupedRows.expandGroup": {
703
723
  "defaultMessage": "Expand group {groupKey}",
704
- "description": "Aria label for a Table grouped-row header chevron when the group is collapsed. `groupKey` is the group identifier."
724
+ "description": "Screen-reader-only label on the chevron next to a grouped table's group header when collapsed. Example: `Expand group Q1 2024`. Pairs with `collapseGroup`."
705
725
  },
706
726
  "@astryx.tableGroupedRows.collapseGroup": {
707
727
  "defaultMessage": "Collapse group {groupKey}",
708
- "description": "Aria label for a Table grouped-row header chevron when the group is expanded. `groupKey` is the group identifier."
728
+ "description": "Screen-reader-only label on the same chevron when the group is expanded. Example: `Collapse group Q1 2024`. Pairs with `expandGroup`."
709
729
  },
710
730
  "@astryx.tableRowExpansion.collapseRow": {
711
731
  "defaultMessage": "Collapse row",
712
- "description": "Aria label for the Table row-expansion chevron when the row is currently expanded."
732
+ "description": "Screen-reader-only label on the row-expand chevron when the row is currently expanded. Part of the four-way expand/collapse set."
713
733
  },
714
734
  "@astryx.tableRowExpansion.expandRow": {
715
735
  "defaultMessage": "Expand row",
716
- "description": "Aria label for the Table row-expansion chevron when the row is currently collapsed."
736
+ "description": "Screen-reader-only label on the row-expand chevron when the row is currently collapsed. Part of a four-way set with `collapseRow`, `expandAllRows`, `collapseAllRows`."
717
737
  },
718
738
  "@astryx.tableRowExpansion.collapseAllRows": {
719
739
  "defaultMessage": "Collapse all rows",
720
- "description": "Aria label for the Table expand-all / collapse-all header button when all rows are currently expanded."
740
+ "description": "Screen-reader-only label on the same header button when every row is expanded. Part of the four-way set."
721
741
  },
722
742
  "@astryx.tableRowExpansion.expandAllRows": {
723
743
  "defaultMessage": "Expand all rows",
724
- "description": "Aria label for the Table expand-all / collapse-all header button when not all rows are currently expanded."
744
+ "description": "Screen-reader-only label on the header expand-all/collapse-all button when at least one row is collapsed (clicking expands every expandable row). Part of the four-way set."
745
+ },
746
+ "@astryx.tableTree.collapseRow": {
747
+ "defaultMessage": "Collapse row",
748
+ "description": "Aria label for the Table tree-data expander chevron when the row is currently expanded."
749
+ },
750
+ "@astryx.tableTree.expandRow": {
751
+ "defaultMessage": "Expand row",
752
+ "description": "Aria label for the Table tree-data expander chevron when the row is currently collapsed."
725
753
  },
726
754
  "@astryx.textInput.clearLabel": {
727
755
  "defaultMessage": "Clear {label}",
728
- "description": "Aria label for the TextInput clear button. `label` is the input's own visible label."
756
+ "description": "Screen-reader-only label on the X that clears the value from a TextInput. Example: `Clear Email`, `Clear Name`."
729
757
  },
730
758
  "@astryx.thumbnail.remove": {
731
759
  "defaultMessage": "Remove {accessibleName}",
732
- "description": "Label for the Thumbnail remove button. `accessibleName` is the thumbnail's accessible name (label, alt, or a combination)."
760
+ "description": "Screen-reader-only label on the \"×\" on a Thumbnail (image preview chip). `{accessibleName}` is the thumbnail's name — example: `Remove profile.jpg`."
733
761
  },
734
762
  "@astryx.thumbnail.open": {
735
763
  "defaultMessage": "Open {accessibleName}",
736
- "description": "Aria label for the interactive Thumbnail's open button. `accessibleName` is the thumbnail's accessible name (label, alt, or a combination)."
764
+ "description": "\"Open\" = launch/reveal (not \"unfold\" or the adjective). Screen-reader-only name on a clickable Thumbnail — example: `Open Sunset photo`."
737
765
  },
738
766
  "@astryx.timeInput.clearLabel": {
739
767
  "defaultMessage": "Clear {label}",
740
- "description": "Aria label for the TimeInput clear button. `label` is the input's own visible label."
768
+ "description": "Screen-reader-only label on the X that clears the value from a TimeInput. Example: `Clear Start time`."
741
769
  },
742
770
  "@astryx.token.remove": {
743
771
  "defaultMessage": "Remove {label}",
744
- "description": "Aria label for the Token remove button. `label` is the token's own visible label."
772
+ "description": "Screen-reader-only label on the \"×\" on an individual Token/chip. Example: `Remove John Smith`, `Remove Active`. Imperative verb."
745
773
  }
746
774
  }