@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.
- package/CHANGELOG.md +56 -0
- package/dist/{Calendar-jO-0jbbt.js → Calendar-D0CczOpQ.js} +3 -835
- package/dist/Calendar-D0CczOpQ.js.map +1 -0
- package/dist/{Calendar-DxLrWESu.js → Calendar-oNlBgZKB.js} +2 -2
- package/dist/{Calendar-DxLrWESu.js.map → Calendar-oNlBgZKB.js.map} +1 -1
- package/dist/Calendar.js +2 -2
- package/dist/{Checkbox-9VbydUcM.js → Checkbox-DIY-6agd.js} +12 -12
- package/dist/Checkbox-DIY-6agd.js.map +1 -0
- package/dist/{Checkbox-ZXftLNwB.js → Checkbox-DuzAqrE7.js} +2 -2
- package/dist/{Checkbox-ZXftLNwB.js.map → Checkbox-DuzAqrE7.js.map} +1 -1
- package/dist/Checkbox.js +1 -1
- package/dist/{Combobox-CNObHLjp.js → Combobox-CSGn20KQ.js} +14 -7
- package/dist/Combobox-CSGn20KQ.js.map +1 -0
- package/dist/Combobox.js +1 -1
- package/dist/{DataTable-CQpySyDq.js → DataTable-D30sE1Xt.js} +223 -19
- package/dist/DataTable-D30sE1Xt.js.map +1 -0
- package/dist/{DateFieldRange-BG86w0pX.js → DateFieldRange-DBOiqaML.js} +46 -36
- package/dist/DateFieldRange-DBOiqaML.js.map +1 -0
- package/dist/DateFieldRange.js +1 -1
- package/dist/{DateFieldSingle-Byu_jyye.js → DateFieldSingle-C4hU55MP.js} +38 -29
- package/dist/DateFieldSingle-C4hU55MP.js.map +1 -0
- package/dist/DateFieldSingle.js +1 -1
- package/dist/{DateFieldYearless-Dw1k3_PY.js → DateFieldYearless-BXkUiHIR.js} +14 -13
- package/dist/DateFieldYearless-BXkUiHIR.js.map +1 -0
- package/dist/DateFieldYearless.js +1 -1
- package/dist/{DateFieldYearlessRange--plyld10.js → DateFieldYearlessRange-CGffFnVT.js} +14 -13
- package/dist/DateFieldYearlessRange-CGffFnVT.js.map +1 -0
- package/dist/DateFieldYearlessRange.js +1 -1
- package/dist/{DaysOfTheWeek-vE310Rjp.js → DaysOfTheWeek-DJEDopC9.js} +9 -5
- package/dist/DaysOfTheWeek-DJEDopC9.js.map +1 -0
- package/dist/DaysOfTheWeek.js +1 -1
- package/dist/{Dialog-DZPaz84r.js → Dialog-BbsZMnCA.js} +4 -4
- package/dist/{Dialog-DZPaz84r.js.map → Dialog-BbsZMnCA.js.map} +1 -1
- package/dist/Dialog.js +1 -1
- package/dist/{Drawer-pMQOa2jH.js → Drawer-Dhq76ot3.js} +4 -4
- package/dist/{Drawer-pMQOa2jH.js.map → Drawer-Dhq76ot3.js.map} +1 -1
- package/dist/Drawer.js +1 -1
- package/dist/DrillDown.js +1 -1
- package/dist/{FieldDialog-Be54L3E-.js → FieldDialog-CAuhkCZY.js} +541 -142
- package/dist/FieldDialog-CAuhkCZY.js.map +1 -0
- package/dist/FieldDialog.css +58 -28
- package/dist/{FieldLabel-DSrHbw9U.js → FieldLabel-DL0D6fvc.js} +2 -2
- package/dist/{FieldLabel-DSrHbw9U.js.map → FieldLabel-DL0D6fvc.js.map} +1 -1
- package/dist/FieldLabel.js +1 -1
- package/dist/FieldMessage-DS0COrjp.js +132 -0
- package/dist/FieldMessage-DS0COrjp.js.map +1 -0
- package/dist/FieldMessage.css +18 -4
- package/dist/FieldMessage.js +2 -1
- package/dist/FieldMessage.js.map +1 -1
- package/dist/{Helper-CK-XjpR3.js → Helper-PNGm_U2X.js} +7 -4
- package/dist/Helper-PNGm_U2X.js.map +1 -0
- package/dist/{InputMask-DoqWRi3t.js → InputMask-Ds0W2fKy.js} +2 -2
- package/dist/{InputMask-DoqWRi3t.js.map → InputMask-Ds0W2fKy.js.map} +1 -1
- package/dist/InputMask.js +1 -1
- package/dist/{ListView-CtRhYAls.js → ListView-MMmJDM--.js} +2 -2
- package/dist/{ListView-CtRhYAls.js.map → ListView-MMmJDM--.js.map} +1 -1
- package/dist/ListView.js +1 -1
- package/dist/MultiSelectField.js +1 -1
- package/dist/{MultiSelectFieldSync-xj7jXas-.js → MultiSelectFieldSync-Bey99LzJ.js} +178 -58
- package/dist/MultiSelectFieldSync-Bey99LzJ.js.map +1 -0
- package/dist/NumberField-CDkEUfXW.js +237 -0
- package/dist/NumberField-CDkEUfXW.js.map +1 -0
- package/dist/NumberField.js +1 -1
- package/dist/{Page-vc7zs4tn.js → Page-BVxybI-j.js} +6 -6
- package/dist/{Page-vc7zs4tn.js.map → Page-BVxybI-j.js.map} +1 -1
- package/dist/Page.js +1 -1
- package/dist/{Popover-OOLK0hUz.js → Popover-4C5IVk8T.js} +7 -6
- package/dist/{Popover-OOLK0hUz.js.map → Popover-4C5IVk8T.js.map} +1 -1
- package/dist/Popover.css +15 -14
- package/dist/Popover.js +1 -1
- package/dist/{ProgressBar-HA9RPZfC.js → ProgressBar-BGwp-qnf.js} +16 -11
- package/dist/ProgressBar-BGwp-qnf.js.map +1 -0
- package/dist/ProgressBar.js +1 -1
- package/dist/{Radio-31wKzlZ4.js → Radio-BRcpSu-d.js} +12 -12
- package/dist/Radio-BRcpSu-d.js.map +1 -0
- package/dist/{Radio-BwWDJuLF.js → Radio-D7hNws2b.js} +2 -2
- package/dist/{Radio-BwWDJuLF.js.map → Radio-D7hNws2b.js.map} +1 -1
- package/dist/Radio.js +1 -1
- package/dist/{SelectCard-C91twG1S.js → SelectCard-Bag44PmE.js} +3 -3
- package/dist/{SelectCard-C91twG1S.js.map → SelectCard-Bag44PmE.js.map} +1 -1
- package/dist/SelectCard.js +1 -1
- package/dist/SelectField.js +1 -1
- package/dist/{SelectFieldSync-BFsJssdD.js → SelectFieldSync-CigqXq3T.js} +67 -50
- package/dist/SelectFieldSync-CigqXq3T.js.map +1 -0
- package/dist/{SelectTrigger-Cxhx9IVo.js → SelectTrigger-DgsvUfyl.js} +2 -2
- package/dist/{SelectTrigger-Cxhx9IVo.js.map → SelectTrigger-DgsvUfyl.js.map} +1 -1
- package/dist/SelectTrigger.js +1 -1
- package/dist/{SelectTriggerBase-aaOWep-V.js → SelectTriggerBase-OxfNqdIq.js} +12 -7
- package/dist/SelectTriggerBase-OxfNqdIq.js.map +1 -0
- package/dist/{Stepper-Jv9A3Ned.js → Stepper-D8lkCP8Y.js} +11 -2
- package/dist/Stepper-D8lkCP8Y.js.map +1 -0
- package/dist/Stepper.js +1 -1
- package/dist/{Switch-DQICcdAv.js → Switch-D0zwZCg4.js} +2 -2
- package/dist/{Switch-DQICcdAv.js.map → Switch-D0zwZCg4.js.map} +1 -1
- package/dist/Switch.js +1 -1
- package/dist/Table.js +1 -1
- package/dist/{TextField-CDiiYSlT.js → TextField-BycenT6H.js} +13 -12
- package/dist/TextField-BycenT6H.js.map +1 -0
- package/dist/{TextField-CnYxS52Y.js → TextField-Dfzn2HeL.js} +2 -2
- package/dist/{TextField-CnYxS52Y.js.map → TextField-Dfzn2HeL.js.map} +1 -1
- package/dist/TextField.js +1 -1
- package/dist/{Textarea-BnHIDj2P.js → Textarea-BwbwJP6z.js} +13 -12
- package/dist/Textarea-BwbwJP6z.js.map +1 -0
- package/dist/Textarea.js +1 -1
- package/dist/{TimeField-ChqK40k_.js → TimeField-B0WSzSfJ.js} +4 -4
- package/dist/{TimeField-ChqK40k_.js.map → TimeField-B0WSzSfJ.js.map} +1 -1
- package/dist/TimeField.js +1 -1
- package/dist/TimezoneMessage-Cnsl4cHT.js +84 -0
- package/dist/TimezoneMessage-Cnsl4cHT.js.map +1 -0
- package/dist/TimezoneMessage.css +7 -0
- package/dist/Toast.js +2 -2
- package/dist/{Toaster-BlycAc63.js → Toaster-9Q_yaKGu.js} +18 -18
- package/dist/Toaster-9Q_yaKGu.js.map +1 -0
- package/dist/{Toaster-DW_bi2L9.js → Toaster-DHo8dnWH.js} +2 -2
- package/dist/{Toaster-DW_bi2L9.js.map → Toaster-DHo8dnWH.js.map} +1 -1
- package/dist/{Toolbar-vBomnRKG.js → Toolbar-CVOenuCF.js} +70 -23
- package/dist/Toolbar-CVOenuCF.js.map +1 -0
- package/dist/Toolbar.js +1 -1
- package/dist/{Tooltip-CUiAJXak.js → Tooltip-Bt62hC5J.js} +5 -5
- package/dist/{Tooltip-CUiAJXak.js.map → Tooltip-Bt62hC5J.js.map} +1 -1
- package/dist/Tooltip.css +9 -8
- package/dist/Tooltip.js +1 -1
- package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js → YearlessDateInputWithPicker-ztozRk-X.js} +3 -3
- package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js.map → YearlessDateInputWithPicker-ztozRk-X.js.map} +1 -1
- package/dist/beta/components/MultiSelectField/MultiSelectField.d.ts +2 -0
- package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +43 -4
- package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +5 -5
- package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +13 -2
- package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +1 -0
- package/dist/beta/components/MultiSelectField/types.d.ts +52 -8
- package/dist/beta/components/SelectField/SelectFieldSync.d.ts +10 -3
- package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +6 -5
- package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +4 -2
- package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +2 -1
- package/dist/beta/components/SelectField/internal/VirtualizedFieldListBase.d.ts +2 -0
- package/dist/beta/components/SelectField/internal/useCombo.d.ts +3 -1
- package/dist/beta/components/SelectField/internal/useFieldListSections.d.ts +55 -0
- package/dist/beta/components/SelectField/stories/SelectField.stories.data.d.ts +1 -0
- package/dist/beta/components/SelectField/types.d.ts +24 -6
- package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableNumberCell.d.ts +7 -0
- package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +1 -0
- package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
- package/dist/beta/components/Table/createColumnHelper.d.ts +36 -9
- package/dist/beta/components/Table/types.d.ts +54 -4
- package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +1 -0
- package/dist/beta.js +7 -7
- package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
- package/dist/components/Checkbox/Checkbox.d.ts +2 -1
- package/dist/components/Checkbox/CheckboxGroup.d.ts +16 -8
- package/dist/components/Checkbox/internal/Checkbox.d.ts +1 -1
- package/dist/components/DateFieldRange/DateFieldRange.d.ts +8 -1
- package/dist/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +3 -1
- package/dist/components/DateFieldSingle/DateFieldSingle.d.ts +8 -1
- package/dist/components/DateFieldSingle/internal/DateFieldSingleCalendar.d.ts +3 -1
- package/dist/components/DateFieldSingle/internal/TimezoneMessage.d.ts +6 -0
- package/dist/components/DateFieldSingle/internal/utils.d.ts +11 -0
- package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +8 -3
- package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +12 -1
- package/dist/components/DaysOfTheWeek/DaysOfTheWeek.d.ts +20 -6
- package/dist/components/Dialog/internal/useInitialFocus.d.ts +5 -1
- package/dist/components/FieldMessage/FieldMessage.d.ts +39 -20
- package/dist/components/FieldMessage/index.d.ts +1 -0
- package/dist/components/FieldMessage/utils.d.ts +7 -0
- package/dist/components/NumberField/NumberField.d.ts +24 -2
- package/dist/components/Page/Page.d.ts +2 -2
- package/dist/components/ProgressBar/ProgressBar.d.ts +8 -3
- package/dist/components/Radio/Radio.d.ts +2 -1
- package/dist/components/Radio/RadioGroup.d.ts +16 -8
- package/dist/components/SelectTrigger/internal/SelectTriggerBase.d.ts +1 -1
- package/dist/components/Stepper/Stepper.d.ts +6 -2
- package/dist/components/TextField/internal/TextField.d.ts +12 -1
- package/dist/components/Textarea/Textarea.d.ts +8 -5
- package/dist/index-DXeGMe23.js +836 -0
- package/dist/index-DXeGMe23.js.map +1 -0
- package/dist/{index.esm-BMOZFPwN.js → index.esm-C2ZhC_8d.js} +2 -2
- package/dist/{index.esm-BMOZFPwN.js.map → index.esm-C2ZhC_8d.js.map} +1 -1
- package/dist/{useOnClickOutside-Cyqbe1n3.js → index.esm-K9kxJhLx.js} +88 -94
- package/dist/index.esm-K9kxJhLx.js.map +1 -0
- package/dist/index.js +31 -30
- package/dist/index.js.map +1 -1
- package/dist/internal/components/Helper/Helper.d.ts +12 -3
- package/dist/internal/components/StatusIcon/StatusIcon.d.ts +45 -0
- package/dist/internal/components/StatusIcon/index.d.ts +1 -0
- package/dist/internal/functions/index.d.ts +1 -0
- package/dist/internal/functions/warnOnce.d.ts +5 -0
- package/dist/internal/hooks/useNumberField/useNumberField.d.ts +1 -1
- package/dist/{useDrilldown-lAdB3FFW.js → useDrilldown-jbU4Cs5l.js} +2 -598
- package/dist/useDrilldown-jbU4Cs5l.js.map +1 -0
- package/dist/{useInitialFocus-nOW12jQ5.js → useInitialFocus-BRRbylek.js} +2 -2
- package/dist/{useInitialFocus-nOW12jQ5.js.map → useInitialFocus-BRRbylek.js.map} +1 -1
- package/dist/{NumberField-W1k8V5Qq.js → useNumberField-eMyk7MB8.js} +5 -235
- package/dist/useNumberField-eMyk7MB8.js.map +1 -0
- package/dist/useOnClickOutside-Zw5vzxSq.js +71 -0
- package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -0
- package/dist/utils-pudAMGnO.js +25 -0
- package/dist/utils-pudAMGnO.js.map +1 -0
- package/package.json +9 -8
- package/dist/Calendar-jO-0jbbt.js.map +0 -1
- package/dist/Checkbox-9VbydUcM.js.map +0 -1
- package/dist/Combobox-CNObHLjp.js.map +0 -1
- package/dist/DataTable-CQpySyDq.js.map +0 -1
- package/dist/DateFieldRange-BG86w0pX.js.map +0 -1
- package/dist/DateFieldSingle-Byu_jyye.js.map +0 -1
- package/dist/DateFieldYearless-Dw1k3_PY.js.map +0 -1
- package/dist/DateFieldYearlessRange--plyld10.js.map +0 -1
- package/dist/DaysOfTheWeek-vE310Rjp.js.map +0 -1
- package/dist/FieldDialog-Be54L3E-.js.map +0 -1
- package/dist/FieldMessage-tEr6rWXS.js +0 -54
- package/dist/FieldMessage-tEr6rWXS.js.map +0 -1
- package/dist/Helper-CK-XjpR3.js.map +0 -1
- package/dist/MultiSelectFieldSync-xj7jXas-.js.map +0 -1
- package/dist/NumberField-W1k8V5Qq.js.map +0 -1
- package/dist/ProgressBar-HA9RPZfC.js.map +0 -1
- package/dist/Radio-31wKzlZ4.js.map +0 -1
- package/dist/SelectFieldSync-BFsJssdD.js.map +0 -1
- package/dist/SelectTriggerBase-aaOWep-V.js.map +0 -1
- package/dist/Stepper-Jv9A3Ned.js.map +0 -1
- package/dist/TextField-CDiiYSlT.js.map +0 -1
- package/dist/Textarea-BnHIDj2P.js.map +0 -1
- package/dist/Toaster-BlycAc63.js.map +0 -1
- package/dist/Toolbar-vBomnRKG.js.map +0 -1
- package/dist/useDrilldown-lAdB3FFW.js.map +0 -1
- package/dist/useOnClickOutside-Cyqbe1n3.js.map +0 -1
- package/dist/utils-BHKRoLps.js +0 -60
- 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.
|
|
138
|
-
*
|
|
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?:
|
|
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
|
-
*
|
|
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
|
-
*
|
|
211
|
+
* Check state for the "Select All" option.
|
|
203
212
|
* @default false
|
|
204
213
|
*/
|
|
205
|
-
|
|
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
|
-
*
|
|
10
|
-
* Can be a function
|
|
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?:
|
|
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 {};
|
|
@@ -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
|
+
};
|
|
@@ -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.
|
|
168
|
-
*
|
|
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?:
|
|
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
|
-
*
|
|
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],
|
|
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
|
|
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 |
|
|
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 |
|
|
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
|
|
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],
|
|
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-
|
|
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-
|
|
3
|
-
export { u as useCalendarBetaProps } from './Calendar-
|
|
4
|
-
export { C as Calendar } from './Calendar-
|
|
5
|
-
export { S as SelectField, a as SelectFieldSync } from './SelectFieldSync-
|
|
6
|
-
export { M as MultiSelectField, a as MultiSelectFieldSync } from './MultiSelectFieldSync-
|
|
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-
|
|
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, "
|
|
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
|