@servicetitan/anvil2 2.0.4 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (225) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/{Calendar-jO-0jbbt.js → Calendar-D0CczOpQ.js} +3 -835
  3. package/dist/Calendar-D0CczOpQ.js.map +1 -0
  4. package/dist/{Calendar-DxLrWESu.js → Calendar-oNlBgZKB.js} +2 -2
  5. package/dist/{Calendar-DxLrWESu.js.map → Calendar-oNlBgZKB.js.map} +1 -1
  6. package/dist/Calendar.js +2 -2
  7. package/dist/{Checkbox-9VbydUcM.js → Checkbox-DIY-6agd.js} +12 -12
  8. package/dist/Checkbox-DIY-6agd.js.map +1 -0
  9. package/dist/{Checkbox-ZXftLNwB.js → Checkbox-DuzAqrE7.js} +2 -2
  10. package/dist/{Checkbox-ZXftLNwB.js.map → Checkbox-DuzAqrE7.js.map} +1 -1
  11. package/dist/Checkbox.js +1 -1
  12. package/dist/{Combobox-CNObHLjp.js → Combobox-CSGn20KQ.js} +14 -7
  13. package/dist/Combobox-CSGn20KQ.js.map +1 -0
  14. package/dist/Combobox.js +1 -1
  15. package/dist/{DataTable-CQpySyDq.js → DataTable-D30sE1Xt.js} +223 -19
  16. package/dist/DataTable-D30sE1Xt.js.map +1 -0
  17. package/dist/{DateFieldRange-BG86w0pX.js → DateFieldRange-DBOiqaML.js} +46 -36
  18. package/dist/DateFieldRange-DBOiqaML.js.map +1 -0
  19. package/dist/DateFieldRange.js +1 -1
  20. package/dist/{DateFieldSingle-Byu_jyye.js → DateFieldSingle-C4hU55MP.js} +38 -29
  21. package/dist/DateFieldSingle-C4hU55MP.js.map +1 -0
  22. package/dist/DateFieldSingle.js +1 -1
  23. package/dist/{DateFieldYearless-Dw1k3_PY.js → DateFieldYearless-BXkUiHIR.js} +14 -13
  24. package/dist/DateFieldYearless-BXkUiHIR.js.map +1 -0
  25. package/dist/DateFieldYearless.js +1 -1
  26. package/dist/{DateFieldYearlessRange--plyld10.js → DateFieldYearlessRange-CGffFnVT.js} +14 -13
  27. package/dist/DateFieldYearlessRange-CGffFnVT.js.map +1 -0
  28. package/dist/DateFieldYearlessRange.js +1 -1
  29. package/dist/{DaysOfTheWeek-vE310Rjp.js → DaysOfTheWeek-DJEDopC9.js} +9 -5
  30. package/dist/DaysOfTheWeek-DJEDopC9.js.map +1 -0
  31. package/dist/DaysOfTheWeek.js +1 -1
  32. package/dist/{Dialog-DZPaz84r.js → Dialog-BbsZMnCA.js} +4 -4
  33. package/dist/{Dialog-DZPaz84r.js.map → Dialog-BbsZMnCA.js.map} +1 -1
  34. package/dist/Dialog.js +1 -1
  35. package/dist/{Drawer-pMQOa2jH.js → Drawer-Dhq76ot3.js} +4 -4
  36. package/dist/{Drawer-pMQOa2jH.js.map → Drawer-Dhq76ot3.js.map} +1 -1
  37. package/dist/Drawer.js +1 -1
  38. package/dist/DrillDown.js +1 -1
  39. package/dist/{FieldDialog-Be54L3E-.js → FieldDialog-CAuhkCZY.js} +541 -142
  40. package/dist/FieldDialog-CAuhkCZY.js.map +1 -0
  41. package/dist/FieldDialog.css +58 -28
  42. package/dist/{FieldLabel-DSrHbw9U.js → FieldLabel-DL0D6fvc.js} +2 -2
  43. package/dist/{FieldLabel-DSrHbw9U.js.map → FieldLabel-DL0D6fvc.js.map} +1 -1
  44. package/dist/FieldLabel.js +1 -1
  45. package/dist/FieldMessage-DS0COrjp.js +132 -0
  46. package/dist/FieldMessage-DS0COrjp.js.map +1 -0
  47. package/dist/FieldMessage.css +18 -4
  48. package/dist/FieldMessage.js +2 -1
  49. package/dist/FieldMessage.js.map +1 -1
  50. package/dist/{Helper-CK-XjpR3.js → Helper-PNGm_U2X.js} +7 -4
  51. package/dist/Helper-PNGm_U2X.js.map +1 -0
  52. package/dist/{InputMask-DoqWRi3t.js → InputMask-Ds0W2fKy.js} +2 -2
  53. package/dist/{InputMask-DoqWRi3t.js.map → InputMask-Ds0W2fKy.js.map} +1 -1
  54. package/dist/InputMask.js +1 -1
  55. package/dist/{ListView-CtRhYAls.js → ListView-MMmJDM--.js} +2 -2
  56. package/dist/{ListView-CtRhYAls.js.map → ListView-MMmJDM--.js.map} +1 -1
  57. package/dist/ListView.js +1 -1
  58. package/dist/MultiSelectField.js +1 -1
  59. package/dist/{MultiSelectFieldSync-xj7jXas-.js → MultiSelectFieldSync-Bey99LzJ.js} +178 -58
  60. package/dist/MultiSelectFieldSync-Bey99LzJ.js.map +1 -0
  61. package/dist/NumberField-CDkEUfXW.js +237 -0
  62. package/dist/NumberField-CDkEUfXW.js.map +1 -0
  63. package/dist/NumberField.js +1 -1
  64. package/dist/{Page-vc7zs4tn.js → Page-BVxybI-j.js} +6 -6
  65. package/dist/{Page-vc7zs4tn.js.map → Page-BVxybI-j.js.map} +1 -1
  66. package/dist/Page.js +1 -1
  67. package/dist/{Popover-OOLK0hUz.js → Popover-4C5IVk8T.js} +7 -6
  68. package/dist/{Popover-OOLK0hUz.js.map → Popover-4C5IVk8T.js.map} +1 -1
  69. package/dist/Popover.css +15 -14
  70. package/dist/Popover.js +1 -1
  71. package/dist/{ProgressBar-HA9RPZfC.js → ProgressBar-BGwp-qnf.js} +16 -11
  72. package/dist/ProgressBar-BGwp-qnf.js.map +1 -0
  73. package/dist/ProgressBar.js +1 -1
  74. package/dist/{Radio-31wKzlZ4.js → Radio-BRcpSu-d.js} +12 -12
  75. package/dist/Radio-BRcpSu-d.js.map +1 -0
  76. package/dist/{Radio-BwWDJuLF.js → Radio-D7hNws2b.js} +2 -2
  77. package/dist/{Radio-BwWDJuLF.js.map → Radio-D7hNws2b.js.map} +1 -1
  78. package/dist/Radio.js +1 -1
  79. package/dist/{SelectCard-C91twG1S.js → SelectCard-Bag44PmE.js} +3 -3
  80. package/dist/{SelectCard-C91twG1S.js.map → SelectCard-Bag44PmE.js.map} +1 -1
  81. package/dist/SelectCard.js +1 -1
  82. package/dist/SelectField.js +1 -1
  83. package/dist/{SelectFieldSync-BFsJssdD.js → SelectFieldSync-CigqXq3T.js} +67 -50
  84. package/dist/SelectFieldSync-CigqXq3T.js.map +1 -0
  85. package/dist/{SelectTrigger-Cxhx9IVo.js → SelectTrigger-DgsvUfyl.js} +2 -2
  86. package/dist/{SelectTrigger-Cxhx9IVo.js.map → SelectTrigger-DgsvUfyl.js.map} +1 -1
  87. package/dist/SelectTrigger.js +1 -1
  88. package/dist/{SelectTriggerBase-aaOWep-V.js → SelectTriggerBase-OxfNqdIq.js} +12 -7
  89. package/dist/SelectTriggerBase-OxfNqdIq.js.map +1 -0
  90. package/dist/{Stepper-Jv9A3Ned.js → Stepper-D8lkCP8Y.js} +11 -2
  91. package/dist/Stepper-D8lkCP8Y.js.map +1 -0
  92. package/dist/Stepper.js +1 -1
  93. package/dist/{Switch-DQICcdAv.js → Switch-D0zwZCg4.js} +2 -2
  94. package/dist/{Switch-DQICcdAv.js.map → Switch-D0zwZCg4.js.map} +1 -1
  95. package/dist/Switch.js +1 -1
  96. package/dist/Table.js +1 -1
  97. package/dist/{TextField-CDiiYSlT.js → TextField-BycenT6H.js} +13 -12
  98. package/dist/TextField-BycenT6H.js.map +1 -0
  99. package/dist/{TextField-CnYxS52Y.js → TextField-Dfzn2HeL.js} +2 -2
  100. package/dist/{TextField-CnYxS52Y.js.map → TextField-Dfzn2HeL.js.map} +1 -1
  101. package/dist/TextField.js +1 -1
  102. package/dist/{Textarea-BnHIDj2P.js → Textarea-BwbwJP6z.js} +13 -12
  103. package/dist/Textarea-BwbwJP6z.js.map +1 -0
  104. package/dist/Textarea.js +1 -1
  105. package/dist/{TimeField-ChqK40k_.js → TimeField-B0WSzSfJ.js} +4 -4
  106. package/dist/{TimeField-ChqK40k_.js.map → TimeField-B0WSzSfJ.js.map} +1 -1
  107. package/dist/TimeField.js +1 -1
  108. package/dist/TimezoneMessage-Cnsl4cHT.js +84 -0
  109. package/dist/TimezoneMessage-Cnsl4cHT.js.map +1 -0
  110. package/dist/TimezoneMessage.css +7 -0
  111. package/dist/Toast.js +2 -2
  112. package/dist/{Toaster-BlycAc63.js → Toaster-9Q_yaKGu.js} +18 -18
  113. package/dist/Toaster-9Q_yaKGu.js.map +1 -0
  114. package/dist/{Toaster-DW_bi2L9.js → Toaster-DHo8dnWH.js} +2 -2
  115. package/dist/{Toaster-DW_bi2L9.js.map → Toaster-DHo8dnWH.js.map} +1 -1
  116. package/dist/{Toolbar-vBomnRKG.js → Toolbar-CVOenuCF.js} +70 -23
  117. package/dist/Toolbar-CVOenuCF.js.map +1 -0
  118. package/dist/Toolbar.js +1 -1
  119. package/dist/{Tooltip-CUiAJXak.js → Tooltip-Bt62hC5J.js} +5 -5
  120. package/dist/{Tooltip-CUiAJXak.js.map → Tooltip-Bt62hC5J.js.map} +1 -1
  121. package/dist/Tooltip.css +9 -8
  122. package/dist/Tooltip.js +1 -1
  123. package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js → YearlessDateInputWithPicker-ztozRk-X.js} +3 -3
  124. package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js.map → YearlessDateInputWithPicker-ztozRk-X.js.map} +1 -1
  125. package/dist/beta/components/MultiSelectField/MultiSelectField.d.ts +2 -0
  126. package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +43 -4
  127. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +5 -5
  128. package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +13 -2
  129. package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +1 -0
  130. package/dist/beta/components/MultiSelectField/types.d.ts +52 -8
  131. package/dist/beta/components/SelectField/SelectFieldSync.d.ts +10 -3
  132. package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +6 -5
  133. package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +4 -2
  134. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +2 -1
  135. package/dist/beta/components/SelectField/internal/VirtualizedFieldListBase.d.ts +2 -0
  136. package/dist/beta/components/SelectField/internal/useCombo.d.ts +3 -1
  137. package/dist/beta/components/SelectField/internal/useFieldListSections.d.ts +55 -0
  138. package/dist/beta/components/SelectField/stories/SelectField.stories.data.d.ts +1 -0
  139. package/dist/beta/components/SelectField/types.d.ts +24 -6
  140. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableNumberCell.d.ts +7 -0
  141. package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +1 -0
  142. package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
  143. package/dist/beta/components/Table/createColumnHelper.d.ts +36 -9
  144. package/dist/beta/components/Table/types.d.ts +54 -4
  145. package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +1 -0
  146. package/dist/beta.js +7 -7
  147. package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
  148. package/dist/components/Checkbox/Checkbox.d.ts +2 -1
  149. package/dist/components/Checkbox/CheckboxGroup.d.ts +16 -8
  150. package/dist/components/Checkbox/internal/Checkbox.d.ts +1 -1
  151. package/dist/components/DateFieldRange/DateFieldRange.d.ts +8 -1
  152. package/dist/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +3 -1
  153. package/dist/components/DateFieldSingle/DateFieldSingle.d.ts +8 -1
  154. package/dist/components/DateFieldSingle/internal/DateFieldSingleCalendar.d.ts +3 -1
  155. package/dist/components/DateFieldSingle/internal/TimezoneMessage.d.ts +6 -0
  156. package/dist/components/DateFieldSingle/internal/utils.d.ts +11 -0
  157. package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +8 -3
  158. package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +12 -1
  159. package/dist/components/DaysOfTheWeek/DaysOfTheWeek.d.ts +20 -6
  160. package/dist/components/Dialog/internal/useInitialFocus.d.ts +5 -1
  161. package/dist/components/FieldMessage/FieldMessage.d.ts +39 -20
  162. package/dist/components/FieldMessage/index.d.ts +1 -0
  163. package/dist/components/FieldMessage/utils.d.ts +7 -0
  164. package/dist/components/NumberField/NumberField.d.ts +24 -2
  165. package/dist/components/Page/Page.d.ts +2 -2
  166. package/dist/components/ProgressBar/ProgressBar.d.ts +8 -3
  167. package/dist/components/Radio/Radio.d.ts +2 -1
  168. package/dist/components/Radio/RadioGroup.d.ts +16 -8
  169. package/dist/components/SelectTrigger/internal/SelectTriggerBase.d.ts +1 -1
  170. package/dist/components/Stepper/Stepper.d.ts +6 -2
  171. package/dist/components/TextField/internal/TextField.d.ts +12 -1
  172. package/dist/components/Textarea/Textarea.d.ts +8 -5
  173. package/dist/index-DXeGMe23.js +836 -0
  174. package/dist/index-DXeGMe23.js.map +1 -0
  175. package/dist/{index.esm-BMOZFPwN.js → index.esm-C2ZhC_8d.js} +2 -2
  176. package/dist/{index.esm-BMOZFPwN.js.map → index.esm-C2ZhC_8d.js.map} +1 -1
  177. package/dist/{useOnClickOutside-Cyqbe1n3.js → index.esm-K9kxJhLx.js} +88 -94
  178. package/dist/index.esm-K9kxJhLx.js.map +1 -0
  179. package/dist/index.js +31 -30
  180. package/dist/index.js.map +1 -1
  181. package/dist/internal/components/Helper/Helper.d.ts +12 -3
  182. package/dist/internal/components/StatusIcon/StatusIcon.d.ts +45 -0
  183. package/dist/internal/components/StatusIcon/index.d.ts +1 -0
  184. package/dist/internal/functions/index.d.ts +1 -0
  185. package/dist/internal/functions/warnOnce.d.ts +5 -0
  186. package/dist/internal/hooks/useNumberField/useNumberField.d.ts +1 -1
  187. package/dist/{useDrilldown-lAdB3FFW.js → useDrilldown-jbU4Cs5l.js} +2 -598
  188. package/dist/useDrilldown-jbU4Cs5l.js.map +1 -0
  189. package/dist/{useInitialFocus-nOW12jQ5.js → useInitialFocus-BRRbylek.js} +2 -2
  190. package/dist/{useInitialFocus-nOW12jQ5.js.map → useInitialFocus-BRRbylek.js.map} +1 -1
  191. package/dist/{NumberField-W1k8V5Qq.js → useNumberField-eMyk7MB8.js} +5 -235
  192. package/dist/useNumberField-eMyk7MB8.js.map +1 -0
  193. package/dist/useOnClickOutside-Zw5vzxSq.js +71 -0
  194. package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -0
  195. package/dist/utils-pudAMGnO.js +25 -0
  196. package/dist/utils-pudAMGnO.js.map +1 -0
  197. package/package.json +9 -8
  198. package/dist/Calendar-jO-0jbbt.js.map +0 -1
  199. package/dist/Checkbox-9VbydUcM.js.map +0 -1
  200. package/dist/Combobox-CNObHLjp.js.map +0 -1
  201. package/dist/DataTable-CQpySyDq.js.map +0 -1
  202. package/dist/DateFieldRange-BG86w0pX.js.map +0 -1
  203. package/dist/DateFieldSingle-Byu_jyye.js.map +0 -1
  204. package/dist/DateFieldYearless-Dw1k3_PY.js.map +0 -1
  205. package/dist/DateFieldYearlessRange--plyld10.js.map +0 -1
  206. package/dist/DaysOfTheWeek-vE310Rjp.js.map +0 -1
  207. package/dist/FieldDialog-Be54L3E-.js.map +0 -1
  208. package/dist/FieldMessage-tEr6rWXS.js +0 -54
  209. package/dist/FieldMessage-tEr6rWXS.js.map +0 -1
  210. package/dist/Helper-CK-XjpR3.js.map +0 -1
  211. package/dist/MultiSelectFieldSync-xj7jXas-.js.map +0 -1
  212. package/dist/NumberField-W1k8V5Qq.js.map +0 -1
  213. package/dist/ProgressBar-HA9RPZfC.js.map +0 -1
  214. package/dist/Radio-31wKzlZ4.js.map +0 -1
  215. package/dist/SelectFieldSync-BFsJssdD.js.map +0 -1
  216. package/dist/SelectTriggerBase-aaOWep-V.js.map +0 -1
  217. package/dist/Stepper-Jv9A3Ned.js.map +0 -1
  218. package/dist/TextField-CDiiYSlT.js.map +0 -1
  219. package/dist/Textarea-BnHIDj2P.js.map +0 -1
  220. package/dist/Toaster-BlycAc63.js.map +0 -1
  221. package/dist/Toolbar-vBomnRKG.js.map +0 -1
  222. package/dist/useDrilldown-lAdB3FFW.js.map +0 -1
  223. package/dist/useOnClickOutside-Cyqbe1n3.js.map +0 -1
  224. package/dist/utils-BHKRoLps.js +0 -60
  225. package/dist/utils-BHKRoLps.js.map +0 -1
@@ -13,9 +13,11 @@ export type MultiSelectFieldCacheOptions = {
13
13
  /**
14
14
  * Imperative handle for the MultiSelectField component.
15
15
  * @property clearCache - Clears the options cache.
16
+ * @property invalidate - Clears the cache and triggers a fresh options load from the data source.
16
17
  */
17
18
  export type MultiSelectFieldHandle = {
18
19
  clearCache: () => void;
20
+ invalidate: () => void;
19
21
  };
20
22
  export type MultiSelectFieldGroupByValue = SelectFieldGroupByValue;
21
23
  export type MultiSelectFieldOption = SelectFieldOption;
@@ -134,10 +136,10 @@ type MultiSelectFieldCommonProps = {
134
136
  */
135
137
  displayMenuAs?: "auto" | "popover" | "dialog";
136
138
  /**
137
- * Error state for the field. Can be a boolean, string message, or ReactElement.
138
- * When truthy, displays error styling and message.
139
+ * Error state for the field. Pass `true` to indicate error styling without a message.
140
+ * Pass a string, string[], or ReactElement (deprecated) for error messages.
139
141
  */
140
- error?: ReactElement | string | boolean;
142
+ error?: boolean | string | ReactElement | string[];
141
143
  /**
142
144
  * Visually hides the label while keeping it accessible to screen readers.
143
145
  * @default false
@@ -157,10 +159,13 @@ type MultiSelectFieldCommonProps = {
157
159
  */
158
160
  description?: ReactElement | string;
159
161
  /**
160
- * aria-live behavior for error messages.
161
- * @default "assertive"
162
+ * @deprecated No longer used. Error messages always use `aria-live="assertive"`.
162
163
  */
163
164
  errorAriaLive?: AriaAttributes["aria-live"];
165
+ /**
166
+ * Warning message(s) to display. Supports a single string or an array of strings.
167
+ */
168
+ warning?: string | string[];
164
169
  /**
165
170
  * Whether the field is required. Shows a red asterisk (*) next to the label.
166
171
  */
@@ -185,7 +190,11 @@ type MultiSelectFieldCommonProps = {
185
190
  suffix?: string | ReactElement;
186
191
  /**
187
192
  * Configuration for the "Select All" option at the top of the list.
188
- * When provided, a "Select All" option will be shown.
193
+ * When provided, a "Select All" option will be shown while the search input is empty.
194
+ *
195
+ * Select All and Select Filtered are mutually exclusive:
196
+ * - Select All is shown when the search input is empty.
197
+ * - Select Filtered (if provided) is shown when a search term is active.
189
198
  */
190
199
  selectAll?: {
191
200
  /**
@@ -199,10 +208,39 @@ type MultiSelectFieldCommonProps = {
199
208
  */
200
209
  onClick: () => void;
201
210
  /**
202
- * isChecked state for the "Select All" option.
211
+ * Check state for the "Select All" option.
203
212
  * @default false
204
213
  */
205
- isChecked: boolean | CheckState;
214
+ checkState: boolean | CheckState;
215
+ };
216
+ /**
217
+ * Function that receives the current search value and returns configuration for
218
+ * the "Select Filtered" option at the top of the list.
219
+ *
220
+ * When provided and a search term is active, a "Select Filtered" option will be shown
221
+ * instead of "Select All". This allows selecting all options matching the current filter.
222
+ *
223
+ * Select All and Select Filtered are mutually exclusive:
224
+ * - Select All (if provided) is shown when the search input is empty.
225
+ * - Select Filtered is shown when a search term is active.
226
+ *
227
+ * @param searchValue - The current search input value
228
+ * @returns Configuration object with label, onClick, and checkState
229
+ *
230
+ * @example
231
+ * selectFiltered={(searchValue) => ({
232
+ * label: `Select items matching "${searchValue}"`,
233
+ * onClick: () => handleSelectFiltered(searchValue),
234
+ * checkState: allFilteredSelected ? "checked" : "unchecked",
235
+ * })}
236
+ */
237
+ selectFiltered?: (searchValue: string) => {
238
+ /** The label to display. @default `Select items matching "${searchValue}"` */
239
+ label?: string;
240
+ /** Callback when clicked. */
241
+ onClick: () => void;
242
+ /** Check state for the option. */
243
+ checkState: boolean | CheckState;
206
244
  };
207
245
  /**
208
246
  * When true, restricts the field to a single row height.
@@ -224,6 +262,12 @@ type MultiSelectFieldCommonProps = {
224
262
  * Custom inline styles for the wrapper element.
225
263
  */
226
264
  style?: CSSProperties;
265
+ /**
266
+ * Whether to virtualize the dropdown list using windowed rendering.
267
+ * Enable this for large option sets to improve performance by only rendering visible items.
268
+ * @default false
269
+ */
270
+ virtualize?: boolean;
227
271
  } & MultiSelectFieldSearchProps & LayoutUtilProps;
228
272
  type MultiSelectFieldGroupingProps = {
229
273
  /**
@@ -1,13 +1,19 @@
1
1
  import { MatchSorterOptions } from 'match-sorter';
2
2
  import { SelectFieldProps, SelectFieldOption, SelectFieldGroupByValue } from './types';
3
+ type FilterFn = (options: SelectFieldOption[], searchValue: string) => SelectFieldOption[];
3
4
  export type SelectFieldSyncProps = Omit<SelectFieldProps, "loadOptions" | "lazy" | "debounceMs" | "cache" | "initialLoad"> & {
4
5
  /**
5
6
  * The options to display in the select field.
6
7
  */
7
8
  options: SelectFieldOption[];
8
9
  /**
9
- * The filter to use to filter the options.
10
- * Can be a function to filter the options, or a MatchSorterOptions object to customize the default filtering.
10
+ * Controls how options are filtered and sorted when the user types a search value.
11
+ * Can be a function that returns options in the desired display order,
12
+ * or a MatchSorterOptions object to customize the default match-sorter behavior.
13
+ *
14
+ * Before any search is performed, options appear in the order they are supplied.
15
+ * By default, options are filtered by `label` and `searchText` using match-sorter,
16
+ * which also ranks results by match quality (best matches first).
11
17
  *
12
18
  * @example
13
19
  * <SelectFieldSync
@@ -25,7 +31,7 @@ export type SelectFieldSyncProps = Omit<SelectFieldProps, "loadOptions" | "lazy"
25
31
  * filter={{ keys: ["label"] }}
26
32
  * />
27
33
  */
28
- filter?: ((options: SelectFieldOption[], searchValue: string) => SelectFieldOption[]) | MatchSorterOptions;
34
+ filter?: FilterFn | MatchSorterOptions<SelectFieldOption>;
29
35
  /**
30
36
  * Function to compare two group values for sorting.
31
37
  * When provided, options are sorted by group using this comparator,
@@ -47,3 +53,4 @@ export type SelectFieldSyncProps = Omit<SelectFieldProps, "loadOptions" | "lazy"
47
53
  * - Supports all the other props of SelectField.
48
54
  */
49
55
  export declare const SelectFieldSync: (props: SelectFieldSyncProps) => import("react/jsx-runtime").JSX.Element;
56
+ export {};
@@ -1,14 +1,18 @@
1
1
  import { UseComboboxPropGetters } from 'downshift';
2
2
  import { SelectFieldDownshiftItem } from '../types';
3
- import { CSSProperties } from 'react';
3
+ import { CSSProperties, MutableRefObject } from 'react';
4
4
  import { CheckState } from '../../../../types';
5
5
  import { SectionMeta } from './types';
6
+ export type FieldListBaseHandle = {
7
+ scrollToTop: () => void;
8
+ };
6
9
  export type FieldListBaseProps = {
7
10
  isOpen: boolean;
8
11
  items: SelectFieldDownshiftItem[];
9
12
  getMenuProps: UseComboboxPropGetters<SelectFieldDownshiftItem>["getMenuProps"];
10
13
  getItemProps: UseComboboxPropGetters<SelectFieldDownshiftItem>["getItemProps"];
11
14
  highlightedIndex: number;
15
+ highlightChangeTypeRef?: MutableRefObject<string>;
12
16
  getCheckedState: (item: SelectFieldDownshiftItem) => CheckState;
13
17
  selectionType: "single" | "multiple";
14
18
  hasMore: boolean;
@@ -21,7 +25,4 @@ export type FieldListBaseProps = {
21
25
  style?: CSSProperties;
22
26
  sectionsMeta?: SectionMeta[];
23
27
  };
24
- export declare const FieldListBase: {
25
- ({ isOpen, items, getMenuProps, getItemProps, highlightedIndex, getCheckedState, selectionType, hasMore, onLoadMore, loading, loadingMore, disableAutoLoadMore, disabled, className, style, sectionsMeta, }: FieldListBaseProps): import("react/jsx-runtime").JSX.Element;
26
- displayName: string;
27
- };
28
+ export declare const FieldListBase: import('react').ForwardRefExoticComponent<FieldListBaseProps & import('react').RefAttributes<FieldListBaseHandle>>;
@@ -1,6 +1,6 @@
1
1
  import { SelectFieldDownshiftItem, SelectFieldOption } from '../types';
2
2
  import { UseComboboxPropGetters } from 'downshift';
3
- import { CSSProperties } from 'react';
3
+ import { CSSProperties, MutableRefObject } from 'react';
4
4
  import { SectionMeta } from './types';
5
5
  type GetMenuProps = UseComboboxPropGetters<SelectFieldDownshiftItem>["getMenuProps"];
6
6
  type GetItemProps = UseComboboxPropGetters<SelectFieldDownshiftItem>["getItemProps"];
@@ -10,6 +10,7 @@ export type SelectFieldListProps = {
10
10
  getMenuProps: GetMenuProps;
11
11
  getItemProps: GetItemProps;
12
12
  highlightedIndex: number;
13
+ highlightChangeTypeRef?: MutableRefObject<string>;
13
14
  selectedOption: SelectFieldOption | null;
14
15
  hasMore: boolean;
15
16
  onLoadMore: () => void;
@@ -20,9 +21,10 @@ export type SelectFieldListProps = {
20
21
  className?: string;
21
22
  style?: CSSProperties;
22
23
  sectionsMeta?: SectionMeta[];
24
+ virtualize?: boolean;
23
25
  };
24
26
  export declare const SelectFieldList: {
25
- ({ selectedOption, ...rest }: SelectFieldListProps): import("react/jsx-runtime").JSX.Element;
27
+ ({ selectedOption, virtualize, ...rest }: SelectFieldListProps): import("react/jsx-runtime").JSX.Element;
26
28
  displayName: string;
27
29
  };
28
30
  export {};
@@ -10,6 +10,7 @@ export type SelectFieldListItemProps = {
10
10
  getItemProps: GetItemProps;
11
11
  selectionType: "single" | "multiple";
12
12
  checked: CheckState;
13
+ isListScrolled?: boolean;
13
14
  };
14
- export declare const SelectFieldListItem: ({ item, index, highlighted, disabled, getItemProps, selectionType, checked, }: SelectFieldListItemProps) => import("react/jsx-runtime").JSX.Element;
15
+ export declare const SelectFieldListItem: ({ item, index, highlighted, disabled, getItemProps, selectionType, checked, isListScrolled, }: SelectFieldListItemProps) => import("react/jsx-runtime").JSX.Element;
15
16
  export {};
@@ -0,0 +1,2 @@
1
+ import { FieldListBaseProps, FieldListBaseHandle } from './FieldListBase';
2
+ export declare const VirtualizedFieldListBase: import('react').ForwardRefExoticComponent<FieldListBaseProps & import('react').RefAttributes<FieldListBaseHandle>>;
@@ -16,11 +16,12 @@ export type UseComboOptions = {
16
16
  displayAs: "popover" | "dialog";
17
17
  disableHighlightOnOpen?: boolean;
18
18
  disabled: boolean;
19
+ virtualize?: boolean;
19
20
  } & Pick<UseComboboxProps<SelectFieldDownshiftItem>, "onInputValueChange" | "onIsOpenChange">;
20
21
  /**
21
22
  * The purpose of useCombo is to provide an abstraction over the downshift combobox hook.
22
23
  */
23
- export declare const useCombo: ({ options, pinned, groupToString, groupSorter, selectAll, selectedOption, onSelectedOptionChange, onInputValueChange, onIsOpenChange, displayAs, disableHighlightOnOpen, disabled, }: UseComboOptions) => {
24
+ export declare const useCombo: ({ options, pinned, groupToString, groupSorter, selectAll, selectedOption, onSelectedOptionChange, onInputValueChange, onIsOpenChange, displayAs, disableHighlightOnOpen, disabled, virtualize, }: UseComboOptions) => {
24
25
  inputValue: string;
25
26
  wrapperDivRef: import('react').RefObject<HTMLDivElement>;
26
27
  getToggleButtonProps: <Options>(options?: import('downshift').UseComboboxGetToggleButtonPropsOptions & Options) => import('downshift').Overwrite<import('downshift').UseComboboxGetToggleButtonPropsReturnValue, Options>;
@@ -29,6 +30,7 @@ export declare const useCombo: ({ options, pinned, groupToString, groupSorter, s
29
30
  getInputProps: <Options>(options?: import('downshift').UseComboboxGetInputPropsOptions & Options, otherOptions?: import('downshift').GetPropsCommonOptions) => import('downshift').Overwrite<import('downshift').UseComboboxGetInputPropsReturnValue, Options>;
30
31
  getItemProps: <Options>(options: import('downshift').UseComboboxGetItemPropsOptions<SelectFieldDownshiftItem> & Options) => Omit<import('downshift').Overwrite<import('downshift').UseComboboxGetItemPropsReturnValue, Options>, "item" | "index">;
31
32
  highlightedIndex: number;
33
+ highlightChangeTypeRef: import('react').MutableRefObject<string>;
32
34
  isOpen: boolean;
33
35
  downshiftItems: SelectFieldDownshiftItem[];
34
36
  sectionsMeta: SectionMeta[];
@@ -0,0 +1,55 @@
1
+ import { SelectFieldDownshiftItem } from '../types';
2
+ import { SectionMeta } from './types';
3
+ export type SectionItem = {
4
+ item: SelectFieldDownshiftItem;
5
+ index: number;
6
+ };
7
+ export type PinnedSection = {
8
+ type: "pinned";
9
+ label: string;
10
+ items: SectionItem[];
11
+ loading?: boolean;
12
+ };
13
+ export type GroupSection = {
14
+ type: "group";
15
+ label: string;
16
+ items: SectionItem[];
17
+ };
18
+ export type FlatSection = {
19
+ type: "flat";
20
+ items: SectionItem[];
21
+ };
22
+ export type Section = PinnedSection | GroupSection | FlatSection;
23
+ export type VirtualRow = {
24
+ type: "item";
25
+ item: SelectFieldDownshiftItem;
26
+ downshiftIndex: number;
27
+ } | {
28
+ type: "header";
29
+ label: string;
30
+ sectionIndex: number;
31
+ } | {
32
+ type: "divider";
33
+ sectionIndex: number;
34
+ } | {
35
+ type: "load-more";
36
+ };
37
+ /**
38
+ * Computes grouped sections from a flat items array and section metadata.
39
+ * @param items - The flat downshift items array
40
+ * @param sectionsMeta - Section metadata describing pinned/group ranges
41
+ * @returns Grouped sections for rendering
42
+ */
43
+ export declare const useFieldListSections: (items: SelectFieldDownshiftItem[], sectionsMeta: SectionMeta[]) => Section[];
44
+ /**
45
+ * Flattens grouped sections into a linear list of virtual rows for virtualization,
46
+ * and builds a mapping from downshift item index to virtual row index.
47
+ * @param sections - The grouped sections from useFieldListSections
48
+ * @param hasMore - Whether there are more items to load
49
+ * @returns The flat virtual row list and a downshift-to-virtual index mapping
50
+ */
51
+ export declare function flattenSectionsToVirtualRows(sections: Section[], hasMore: boolean): {
52
+ virtualRows: VirtualRow[];
53
+ downshiftIndexToVirtualRowIndex: Record<number, number>;
54
+ stickyIndices: number[];
55
+ };
@@ -30,3 +30,4 @@ export declare const simulateFetchingGroupedBooks: (groupBy: GroupByField) => (s
30
30
  options: SelectFieldGroupedOption[];
31
31
  hasMore: boolean;
32
32
  }>;
33
+ export declare const richContentOptions: SelectFieldOption[];
@@ -1,5 +1,6 @@
1
1
  import { AriaAttributes, CSSProperties, ReactElement, ReactNode } from 'react';
2
2
  import { CheckState, LayoutUtilProps, Size } from '../../../types';
3
+ import { AvatarProps, ChipProps, IconProps } from '../../..';
3
4
  /**
4
5
  * Configuration options for the SelectField cache.
5
6
  * @property enabled - Whether caching is enabled. Defaults to true.
@@ -12,9 +13,11 @@ export type SelectFieldCacheOptions = {
12
13
  /**
13
14
  * Imperative handle for the SelectField component.
14
15
  * @property clearCache - Clears the options cache.
16
+ * @property invalidate - Clears the cache and triggers a fresh options load from the data source.
15
17
  */
16
18
  export type SelectFieldHandle = {
17
19
  clearCache: () => void;
20
+ invalidate: () => void;
18
21
  };
19
22
  export type SelectFieldGroupByValue = string | number;
20
23
  export type SelectFieldOption = {
@@ -27,6 +30,12 @@ export type SelectFieldOption = {
27
30
  content?: {
28
31
  title?: string;
29
32
  description?: string;
33
+ chips?: Pick<ChipProps, "label" | "color" | "textWrap">[];
34
+ avatar?: Pick<AvatarProps, "name" | "status" | "color" | "image">;
35
+ icon?: Pick<IconProps, "svg" | "color"> & {
36
+ /** Accessible label for the icon. When omitted, the icon is treated as decorative. */
37
+ label?: string;
38
+ };
30
39
  };
31
40
  };
32
41
  export type SelectFieldGroupedOption = SelectFieldOption & {
@@ -164,10 +173,10 @@ type SelectFieldCommonSelectFieldProps = {
164
173
  */
165
174
  displayMenuAs?: "auto" | "popover" | "dialog";
166
175
  /**
167
- * Error state for the field. Can be a boolean, string message, or ReactElement.
168
- * When truthy, displays error styling and message.
176
+ * Error state for the field. Pass `true` to indicate error styling without a message.
177
+ * Pass a string, string[], or ReactElement (deprecated) for error messages.
169
178
  */
170
- error?: ReactElement | string | boolean;
179
+ error?: boolean | string | ReactElement | string[];
171
180
  /**
172
181
  * Visually hides the label while keeping it accessible to screen readers.
173
182
  * @default false
@@ -187,10 +196,13 @@ type SelectFieldCommonSelectFieldProps = {
187
196
  */
188
197
  description?: ReactElement | string;
189
198
  /**
190
- * aria-live behavior for error messages.
191
- * @default "assertive"
199
+ * @deprecated No longer used. Error messages always use `aria-live="assertive"`.
192
200
  */
193
201
  errorAriaLive?: AriaAttributes["aria-live"];
202
+ /**
203
+ * Warning message(s) to display. Supports a single string or an array of strings.
204
+ */
205
+ warning?: string | string[];
194
206
  /**
195
207
  * Whether the field is required. Shows a red asterisk (*) next to the label.
196
208
  */
@@ -221,6 +233,12 @@ type SelectFieldCommonSelectFieldProps = {
221
233
  * Custom inline styles for the wrapper element.
222
234
  */
223
235
  style?: CSSProperties;
236
+ /**
237
+ * Whether to virtualize the dropdown list using windowed rendering.
238
+ * Enable this for large option sets to improve performance by only rendering visible items.
239
+ * @default false
240
+ */
241
+ virtualize?: boolean;
224
242
  } & SelectFieldSearchProps & SelectFieldAddNewOptionProps & LayoutUtilProps;
225
243
  type SelectFieldGroupingProps = {
226
244
  /**
@@ -308,7 +326,7 @@ export type SelectFieldPropsLazy = SelectFieldPropsLazyPage | SelectFieldPropsLa
308
326
  export type SelectFieldProps = SelectFieldPropsLazy | SelectFieldPropsEager;
309
327
  export type SelectFieldDownshiftItem = {
310
328
  id: string | number;
311
- type: "option" | "pinned-option" | "grouped-option" | "select-all";
329
+ type: "option" | "pinned-option" | "grouped-option" | "select-all" | "select-filtered";
312
330
  original: SelectFieldOption;
313
331
  disabled?: boolean;
314
332
  checkState?: CheckState;
@@ -0,0 +1,7 @@
1
+ import { EditableCellImperativeHandle, BaseEditableCellProps } from './types';
2
+ export type DataTableEditableNumberCellProps<T> = BaseEditableCellProps<T>;
3
+ export declare const DataTableEditableNumberCell: (<T>(props: DataTableEditableNumberCellProps<T> & {
4
+ ref?: React.Ref<EditableCellImperativeHandle>;
5
+ }) => React.ReactElement) & {
6
+ displayName: string;
7
+ };
@@ -3,6 +3,7 @@ import { ColumnDef } from '../../../types';
3
3
  declare module "@tanstack/react-table" {
4
4
  interface ColumnMeta<TData, TValue> {
5
5
  editMode?: ColumnDef<TData>["editMode"];
6
+ editConfig?: ColumnDef<TData>["editConfig"];
6
7
  onChange?: ColumnDef<TData>["onChange"];
7
8
  options?: ColumnDef<TData>["options"];
8
9
  /**
@@ -22,6 +22,7 @@ export type Category = "electronics" | "clothing" | "home" | "garden" | "other";
22
22
  export type EditableTableStoryData = {
23
23
  id?: string;
24
24
  note?: string;
25
+ amount?: number;
25
26
  status?: Status;
26
27
  payment_type: "credit_card" | "cash" | "bank_transfer" | "check" | "paypal";
27
28
  categories: Category[];
@@ -1,5 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
- import { ColumnDef, ColumnTypeConfig, TextEditConfig, SelectEditConfig, MultiselectEditConfig } from './types';
2
+ import { ColumnDef, ColumnTypeConfig, TextEditConfig, NumberEditConfig, SelectEditConfig, MultiselectEditConfig, TableRow } from './types';
3
3
  /**
4
4
  * Utility type that extracts the element type from an array type
5
5
  */
@@ -45,7 +45,10 @@ type BaseColumnConfig<T, K extends keyof T> = {
45
45
  * The function to customize how the cell content is rendered.
46
46
  * When using `type`, a default renderer is provided but can be overridden.
47
47
  */
48
- renderCell?: (value: T[K], rowDepth: number) => ReactNode;
48
+ renderCell?: (value: T[K], { row, depth }: {
49
+ row?: TableRow<T>;
50
+ depth?: number;
51
+ }) => ReactNode;
49
52
  /**
50
53
  * Whether the column is sortable, or a function to customize the sorting logic
51
54
  */
@@ -66,15 +69,25 @@ type ReadOnlyColumnConfig<T, K extends keyof T> = BaseColumnConfig<T, K> & {
66
69
  options?: never;
67
70
  };
68
71
  /**
69
- * Configuration for text editable columns using editConfig
70
- * Valid when T[K] is a string, number, or boolean type
72
+ * Configuration for text editable columns using editConfig.
73
+ * Valid when T[K] is a string. Also permits booleans (until we add a boolean editable column type)
71
74
  */
72
- type TextEditConfigColumnConfig<T, K extends keyof T> = NonNullable<T[K]> extends string | number | boolean ? BaseColumnConfig<T, K> & {
75
+ type TextEditConfigColumnConfig<T, K extends keyof T> = NonNullable<T[K]> extends string | boolean ? BaseColumnConfig<T, K> & {
73
76
  editConfig: TextEditConfig<T, K>;
74
77
  editMode?: undefined;
75
78
  onChange?: undefined;
76
79
  options?: undefined;
77
80
  } : never;
81
+ /**
82
+ * Configuration for number editable columns using editConfig.
83
+ * Valid when T[K] is a number type.
84
+ */
85
+ type NumberEditConfigColumnConfig<T, K extends keyof T> = NonNullable<T[K]> extends number ? BaseColumnConfig<T, K> & {
86
+ editConfig: NumberEditConfig<T, K>;
87
+ editMode?: undefined;
88
+ onChange?: undefined;
89
+ options?: undefined;
90
+ } : never;
78
91
  /**
79
92
  * Configuration for select editable columns using editConfig
80
93
  */
@@ -95,10 +108,11 @@ type MultiselectEditConfigColumnConfig<T, K extends keyof T> = NonNullable<T[K]>
95
108
  options?: undefined;
96
109
  } : never;
97
110
  /**
98
- * Configuration for text editable columns (legacy)
111
+ * Configuration for text editable columns (legacy).
112
+ * Valid when T[K] is a string. Also permits booleans (until we add a boolean editable column type)
99
113
  * @deprecated Use editConfig instead: `editConfig: { mode: "text", onChange: ... }`
100
114
  */
101
- type TextEditableColumnConfig<T, K extends keyof T> = NonNullable<T[K]> extends string | number | boolean ? BaseColumnConfig<T, K> & {
115
+ type TextEditableColumnConfig<T, K extends keyof T> = NonNullable<T[K]> extends string | boolean ? BaseColumnConfig<T, K> & {
102
116
  editConfig?: undefined;
103
117
  editMode: "text";
104
118
  onChange?: (value: string, rowId: string) => void;
@@ -135,14 +149,15 @@ type MultiselectEditableColumnConfig<T, K extends keyof T> = NonNullable<T[K]> e
135
149
  * Includes both new editConfig-based and legacy editMode-based configs.
136
150
  * TypeScript will enforce that the editMode/editConfig matches the value type constraints.
137
151
  */
138
- type ColumnConfig<T, K extends keyof T> = ReadOnlyColumnConfig<T, K> | TextEditConfigColumnConfig<T, K> | SelectEditConfigColumnConfig<T, K> | MultiselectEditConfigColumnConfig<T, K> | TextEditableColumnConfig<T, K> | SelectEditableColumnConfig<T, K> | MultiselectEditableColumnConfig<T, K>;
152
+ type ColumnConfig<T, K extends keyof T> = ReadOnlyColumnConfig<T, K> | TextEditConfigColumnConfig<T, K> | NumberEditConfigColumnConfig<T, K> | SelectEditConfigColumnConfig<T, K> | MultiselectEditConfigColumnConfig<T, K> | TextEditableColumnConfig<T, K> | SelectEditableColumnConfig<T, K> | MultiselectEditableColumnConfig<T, K>;
139
153
  /**
140
154
  * Factory function to create column helper function for defining Table columns.
141
155
  *
142
156
  * This helper provides type safety by enforcing that:
143
157
  * - `type` sets display defaults (formatter and alignment) for the column
144
158
  * - `editConfig` enables cell editing with proper type constraints
145
- * - `editConfig.mode: "text"` can only be used with string, number, or boolean columns
159
+ * - `editConfig.mode: "text"` can only be used with string (or boolean columns, until we add a boolean mode)
160
+ * - `editConfig.mode: "number"` can only be used with number columns
146
161
  * - `editConfig.mode: "multiselect"` can only be used with array columns
147
162
  * - `editConfig.mode: "select"` options values must match the column's value type
148
163
  * - `editConfig.onChange` callback receives the correct value type for the column
@@ -165,6 +180,18 @@ type ColumnConfig<T, K extends keyof T> = ReadOnlyColumnConfig<T, K> | TextEditC
165
180
  * editConfig: { mode: "text", onChange: (value, rowId) => save(value, rowId) }
166
181
  * });
167
182
  *
183
+ * // Number editing
184
+ * createColumn("amount", {
185
+ * headerLabel: "Amount",
186
+ * editConfig: {
187
+ * mode: "number",
188
+ * minValue: 0,
189
+ * maxValue: 10000,
190
+ * step: 0.01,
191
+ * onChange: (value, rowId) => save(value, rowId)
192
+ * }
193
+ * });
194
+ *
168
195
  * // Select editing
169
196
  * createColumn("status", {
170
197
  * headerLabel: "Status",
@@ -44,7 +44,7 @@ type ArrayElement<T> = T extends (infer U)[] ? U : never;
44
44
  /**
45
45
  * Edit mode literals for editable cells.
46
46
  */
47
- export type EditMode = "text" | "select" | "multiselect";
47
+ export type EditMode = "text" | "number" | "select" | "multiselect";
48
48
  /**
49
49
  * Base edit configuration shared by all edit modes.
50
50
  * @template T - The row data type
@@ -69,6 +69,44 @@ export type TextEditConfig<T, K extends keyof T> = BaseEditConfig<T, K> & {
69
69
  */
70
70
  mode: "text";
71
71
  };
72
+ /**
73
+ * Edit configuration for number mode cells.
74
+ * Renders an inline number input with increment/decrement support.
75
+ *
76
+ * @template T - The row data type
77
+ * @template K - The column key
78
+ */
79
+ export type NumberEditConfig<T, K extends keyof T> = BaseEditConfig<T, K> & {
80
+ /**
81
+ * Number edit mode - renders an inline number input with formatting and validation.
82
+ */
83
+ mode: "number";
84
+ /**
85
+ * The minimum value for the number field.
86
+ * @default 0
87
+ */
88
+ minValue?: number;
89
+ /**
90
+ * The maximum value for the number field.
91
+ * @default 100000000000000
92
+ */
93
+ maxValue?: number;
94
+ /**
95
+ * The step value for the number field.
96
+ * @default 1
97
+ */
98
+ step?: number;
99
+ /**
100
+ * The maximum number of decimal places for the number field.
101
+ * @default 0
102
+ */
103
+ maximumFractionDigits?: number;
104
+ /**
105
+ * The minimum number of decimal places for the number field.
106
+ * @default 0
107
+ */
108
+ minimumFractionDigits?: number;
109
+ };
72
110
  /**
73
111
  * Edit configuration for select mode cells.
74
112
  * @template T - The row data type
@@ -117,6 +155,15 @@ export type MultiselectEditConfig<T, K extends keyof T> = BaseEditConfig<T, K> &
117
155
  * // Text editing
118
156
  * editConfig: { mode: "text", onChange: (value, rowId) => save(value, rowId) }
119
157
  *
158
+ * // Number editing
159
+ * editConfig: {
160
+ * mode: "number",
161
+ * minValue: 0,
162
+ * maxValue: 1000,
163
+ * step: 1,
164
+ * onChange: (value, rowId) => save(value, rowId)
165
+ * }
166
+ *
120
167
  * // Select editing
121
168
  * editConfig: {
122
169
  * mode: "select",
@@ -125,7 +172,7 @@ export type MultiselectEditConfig<T, K extends keyof T> = BaseEditConfig<T, K> &
125
172
  * }
126
173
  * ```
127
174
  */
128
- export type EditConfig<T, K extends keyof T> = TextEditConfig<T, K> | SelectEditConfig<T, K> | MultiselectEditConfig<T, K>;
175
+ export type EditConfig<T, K extends keyof T> = TextEditConfig<T, K> | NumberEditConfig<T, K> | SelectEditConfig<T, K> | MultiselectEditConfig<T, K>;
129
176
  /**
130
177
  * The type for a table row
131
178
  * @extends T
@@ -235,7 +282,7 @@ export type ColumnDef<T> = {
235
282
  * The edit mode of the cells in the column.
236
283
  * @deprecated Use `editConfig` instead. Example: `editConfig: { mode: "text", onChange: ... }`
237
284
  */
238
- editMode?: "text" | "select" | "multiselect";
285
+ editMode?: "text" | "number" | "select" | "multiselect";
239
286
  /**
240
287
  * The content of the footer cell. An array will display multiple footer rows
241
288
  */
@@ -269,7 +316,10 @@ export type ColumnDef<T> = {
269
316
  * The function to customize how the cell content is rendered.
270
317
  * When using `type`, a default renderer is provided but can be overridden.
271
318
  */
272
- renderCell?: (value: T[keyof T], rowDepth: number) => ReactNode;
319
+ renderCell?: (value: T[keyof T], { row, depth }: {
320
+ row?: T;
321
+ depth?: number;
322
+ }) => ReactNode;
273
323
  /**
274
324
  * Whether the column is resizable
275
325
  */
@@ -31,6 +31,7 @@ export declare const resetFilters: (filters: Filter[]) => Filter[];
31
31
  export declare const updateSingleFilter: (filters: Filter[], filterId: string, value: FilterValue) => Filter[];
32
32
  /**
33
33
  * Determines if two filter values are different.
34
+ * For arrays (multiSelect), compares by id set (order-insensitive, avoids JSON serialization).
34
35
  * For singleSelect, compares by id if both are objects with id.
35
36
  *
36
37
  * @param {T} a - First value to compare
package/dist/beta.js CHANGED
@@ -1,9 +1,9 @@
1
- export { C as COLUMN_TYPE_DEFAULTS, D as DataTable, b as booleanFormatter, a as chipsFormatter, c as createColumnHelper, d as currencyFormatter, h as dateFormatPresets, e as dateFormatter, f as dateTimeFormatter, g as getColumnTypeDefaults, n as numberFormatter, p as percentFormatter, r as resolveColumnTypeConfig, t as timeFormatPresets, i as timeFormatter, y as yearlessDateFormatter } from './DataTable-CQpySyDq.js';
2
- export { T as Toolbar, a as ToolbarButton, c as ToolbarButtonLink, b as ToolbarButtonToggle, e as ToolbarControlGroup, g as ToolbarElement, f as ToolbarSearchField, d as ToolbarSelect } from './Toolbar-vBomnRKG.js';
3
- export { u as useCalendarBetaProps } from './Calendar-jO-0jbbt.js';
4
- export { C as Calendar } from './Calendar-DxLrWESu.js';
5
- export { S as SelectField, a as SelectFieldSync } from './SelectFieldSync-BFsJssdD.js';
6
- export { M as MultiSelectField, a as MultiSelectFieldSync } from './MultiSelectFieldSync-xj7jXas-.js';
1
+ export { C as COLUMN_TYPE_DEFAULTS, D as DataTable, b as booleanFormatter, a as chipsFormatter, c as createColumnHelper, d as currencyFormatter, h as dateFormatPresets, e as dateFormatter, f as dateTimeFormatter, g as getColumnTypeDefaults, n as numberFormatter, p as percentFormatter, r as resolveColumnTypeConfig, t as timeFormatPresets, i as timeFormatter, y as yearlessDateFormatter } from './DataTable-D30sE1Xt.js';
2
+ export { T as Toolbar, a as ToolbarButton, c as ToolbarButtonLink, b as ToolbarButtonToggle, e as ToolbarControlGroup, g as ToolbarElement, f as ToolbarSearchField, d as ToolbarSelect } from './Toolbar-CVOenuCF.js';
3
+ export { u as useCalendarBetaProps } from './Calendar-D0CczOpQ.js';
4
+ export { C as Calendar } from './Calendar-oNlBgZKB.js';
5
+ export { S as SelectField, a as SelectFieldSync } from './SelectFieldSync-CigqXq3T.js';
6
+ export { M as MultiSelectField, a as MultiSelectFieldSync } from './MultiSelectFieldSync-Bey99LzJ.js';
7
7
  export { I as InteractiveCard } from './InteractiveCard-OszQGxGw.js';
8
- export { u as useAdaptiveView } from './FieldDialog-Be54L3E-.js';
8
+ export { u as useAdaptiveView } from './FieldDialog-CAuhkCZY.js';
9
9
  //# sourceMappingURL=beta.js.map
@@ -55,7 +55,7 @@ DataTrackingId;
55
55
  * Toggle Me
56
56
  * </ButtonToggle>
57
57
  */
58
- export declare const ButtonToggle: import('react').ForwardRefExoticComponent<Omit<ButtonProps, "loading" | "appearance"> & {
58
+ export declare const ButtonToggle: import('react').ForwardRefExoticComponent<Omit<ButtonProps, "appearance" | "loading"> & {
59
59
  /**
60
60
  * The default pressed(selected) state of the toggle button.
61
61
  * @default false