@osdk/react-components 0.2.0-beta.17 → 0.2.0-beta.18

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 (123) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +86 -0
  3. package/build/browser/action-form/ActionForm.js +109 -0
  4. package/build/browser/action-form/ActionForm.js.map +1 -0
  5. package/build/browser/action-form/ActionFormApi.js.map +1 -1
  6. package/build/browser/action-form/BaseForm.js +74 -0
  7. package/build/browser/action-form/BaseForm.js.map +1 -0
  8. package/build/browser/action-form/FormFieldApi.js.map +1 -1
  9. package/build/browser/action-form/fields/FieldBridge.js +45 -0
  10. package/build/browser/action-form/fields/FieldBridge.js.map +1 -0
  11. package/build/browser/action-form/fields/FormFieldRenderer.js +68 -0
  12. package/build/browser/action-form/fields/FormFieldRenderer.js.map +1 -0
  13. package/build/browser/action-form/fields/TextInputField.js +38 -0
  14. package/build/browser/action-form/fields/TextInputField.js.map +1 -0
  15. package/build/browser/action-form/utils/coerceFieldValue.js +93 -0
  16. package/build/browser/action-form/utils/coerceFieldValue.js.map +1 -0
  17. package/build/browser/action-form/utils/getDefaultFieldComponent.js +56 -0
  18. package/build/browser/action-form/utils/getDefaultFieldComponent.js.map +1 -0
  19. package/build/browser/action-form/utils/getDefaultFieldDefinitions.js +33 -0
  20. package/build/browser/action-form/utils/getDefaultFieldDefinitions.js.map +1 -0
  21. package/build/browser/filter-list/base/BaseFilterList.js +23 -11
  22. package/build/browser/filter-list/base/BaseFilterList.js.map +1 -1
  23. package/build/browser/filter-list/base/FilterIcons.js +48 -13
  24. package/build/browser/filter-list/base/FilterIcons.js.map +1 -1
  25. package/build/browser/filter-list/base/FilterList.module.css +57 -13
  26. package/build/browser/filter-list/base/FilterList.module.css.js +5 -2
  27. package/build/browser/filter-list/base/FilterListHeader.js +10 -15
  28. package/build/browser/filter-list/base/FilterListHeader.js.map +1 -1
  29. package/build/browser/filter-list/base/FilterListHeader.module.css +13 -41
  30. package/build/browser/filter-list/base/FilterListHeader.module.css.js +1 -4
  31. package/build/browser/filter-list/hooks/useFilterListState.js +29 -10
  32. package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
  33. package/build/browser/filter-list/utils/assertUnreachable.js +1 -8
  34. package/build/browser/filter-list/utils/assertUnreachable.js.map +1 -1
  35. package/build/browser/filter-list/utils/filterStateToWhereClause.js +119 -104
  36. package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  37. package/build/browser/object-table/TableHeader.js +4 -1
  38. package/build/browser/object-table/TableHeader.js.map +1 -1
  39. package/build/browser/object-table/TableHeader.module.css +2 -1
  40. package/build/browser/object-table/TableHeader.module.css.js +1 -0
  41. package/build/browser/shared/assertUnreachable.js +25 -0
  42. package/build/browser/shared/assertUnreachable.js.map +1 -0
  43. package/build/browser/shared/typedMemo.js +25 -0
  44. package/build/browser/shared/typedMemo.js.map +1 -0
  45. package/build/browser/styles.css +72 -55
  46. package/build/cjs/public/experimental.cjs +289 -240
  47. package/build/cjs/public/experimental.cjs.map +1 -1
  48. package/build/cjs/public/experimental.css +64 -47
  49. package/build/cjs/public/experimental.css.map +1 -1
  50. package/build/esm/action-form/ActionForm.js +109 -0
  51. package/build/esm/action-form/ActionForm.js.map +1 -0
  52. package/build/esm/action-form/ActionFormApi.js.map +1 -1
  53. package/build/esm/action-form/BaseForm.js +74 -0
  54. package/build/esm/action-form/BaseForm.js.map +1 -0
  55. package/build/esm/action-form/FormFieldApi.js.map +1 -1
  56. package/build/esm/action-form/fields/FieldBridge.js +45 -0
  57. package/build/esm/action-form/fields/FieldBridge.js.map +1 -0
  58. package/build/esm/action-form/fields/FormFieldRenderer.js +68 -0
  59. package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -0
  60. package/build/esm/action-form/fields/TextInputField.js +38 -0
  61. package/build/esm/action-form/fields/TextInputField.js.map +1 -0
  62. package/build/esm/action-form/utils/coerceFieldValue.js +93 -0
  63. package/build/esm/action-form/utils/coerceFieldValue.js.map +1 -0
  64. package/build/esm/action-form/utils/getDefaultFieldComponent.js +56 -0
  65. package/build/esm/action-form/utils/getDefaultFieldComponent.js.map +1 -0
  66. package/build/esm/action-form/utils/getDefaultFieldDefinitions.js +33 -0
  67. package/build/esm/action-form/utils/getDefaultFieldDefinitions.js.map +1 -0
  68. package/build/esm/filter-list/base/BaseFilterList.js +23 -11
  69. package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
  70. package/build/esm/filter-list/base/FilterIcons.js +48 -13
  71. package/build/esm/filter-list/base/FilterIcons.js.map +1 -1
  72. package/build/esm/filter-list/base/FilterList.module.css +57 -13
  73. package/build/esm/filter-list/base/FilterListHeader.js +10 -15
  74. package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
  75. package/build/esm/filter-list/base/FilterListHeader.module.css +13 -41
  76. package/build/esm/filter-list/hooks/useFilterListState.js +29 -10
  77. package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
  78. package/build/esm/filter-list/utils/assertUnreachable.js +1 -8
  79. package/build/esm/filter-list/utils/assertUnreachable.js.map +1 -1
  80. package/build/esm/filter-list/utils/filterStateToWhereClause.js +119 -104
  81. package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  82. package/build/esm/object-table/TableHeader.js +4 -1
  83. package/build/esm/object-table/TableHeader.js.map +1 -1
  84. package/build/esm/object-table/TableHeader.module.css +2 -1
  85. package/build/esm/shared/assertUnreachable.js +25 -0
  86. package/build/esm/shared/assertUnreachable.js.map +1 -0
  87. package/build/esm/shared/typedMemo.js +25 -0
  88. package/build/esm/shared/typedMemo.js.map +1 -0
  89. package/build/types/action-form/ActionForm.d.ts +4 -0
  90. package/build/types/action-form/ActionForm.d.ts.map +1 -0
  91. package/build/types/action-form/ActionFormApi.d.ts +48 -32
  92. package/build/types/action-form/ActionFormApi.d.ts.map +1 -1
  93. package/build/types/action-form/BaseForm.d.ts +3 -0
  94. package/build/types/action-form/BaseForm.d.ts.map +1 -0
  95. package/build/types/action-form/FormFieldApi.d.ts +58 -18
  96. package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
  97. package/build/types/action-form/fields/FieldBridge.d.ts +9 -0
  98. package/build/types/action-form/fields/FieldBridge.d.ts.map +1 -0
  99. package/build/types/action-form/fields/FormFieldRenderer.d.ts +8 -0
  100. package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -0
  101. package/build/types/action-form/fields/TextInputField.d.ts +3 -0
  102. package/build/types/action-form/fields/TextInputField.d.ts.map +1 -0
  103. package/build/types/action-form/utils/coerceFieldValue.d.ts +10 -0
  104. package/build/types/action-form/utils/coerceFieldValue.d.ts.map +1 -0
  105. package/build/types/action-form/utils/getDefaultFieldComponent.d.ts +6 -0
  106. package/build/types/action-form/utils/getDefaultFieldComponent.d.ts.map +1 -0
  107. package/build/types/action-form/utils/getDefaultFieldDefinitions.d.ts +6 -0
  108. package/build/types/action-form/utils/getDefaultFieldDefinitions.d.ts.map +1 -0
  109. package/build/types/filter-list/base/BaseFilterList.d.ts.map +1 -1
  110. package/build/types/filter-list/base/FilterIcons.d.ts +7 -0
  111. package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -1
  112. package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -1
  113. package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
  114. package/build/types/filter-list/utils/assertUnreachable.d.ts +1 -6
  115. package/build/types/filter-list/utils/assertUnreachable.d.ts.map +1 -1
  116. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +5 -1
  117. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
  118. package/build/types/object-table/TableHeader.d.ts.map +1 -1
  119. package/build/types/shared/assertUnreachable.d.ts +6 -0
  120. package/build/types/shared/assertUnreachable.d.ts.map +1 -0
  121. package/build/types/shared/typedMemo.d.ts +6 -0
  122. package/build/types/shared/typedMemo.d.ts.map +1 -0
  123. package/package.json +7 -6
@@ -1,21 +1,21 @@
1
1
  'use strict';
2
2
 
3
3
  var button = require('@base-ui/react/button');
4
- var classnames14 = require('classnames');
4
+ var classnames13 = require('classnames');
5
5
  var React54 = require('react');
6
+ var icons = require('@blueprintjs/icons');
6
7
  var core = require('@dnd-kit/core');
7
8
  var sortable = require('@dnd-kit/sortable');
8
9
  var utilities = require('@dnd-kit/utilities');
9
10
  var input = require('@base-ui/react/input');
10
- var icons = require('@blueprintjs/icons');
11
11
  var lodashEs = require('lodash-es');
12
12
  var _switch = require('@base-ui/react/switch');
13
13
  var experimental = require('@osdk/react/experimental');
14
14
  var checkbox = require('@base-ui/react/checkbox');
15
15
  var combobox = require('@base-ui/react/combobox');
16
16
  var select = require('@base-ui/react/select');
17
- var reactTable = require('@tanstack/react-table');
18
17
  var react = require('@osdk/react');
18
+ var reactTable = require('@tanstack/react-table');
19
19
  var tooltip = require('@base-ui/react/tooltip');
20
20
  var collapsible = require('@base-ui/react/collapsible');
21
21
  var dialog = require('@base-ui/react/dialog');
@@ -25,10 +25,65 @@ var reactDom = require('react-dom');
25
25
 
26
26
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
27
27
 
28
- var classnames14__default = /*#__PURE__*/_interopDefault(classnames14);
28
+ var classnames13__default = /*#__PURE__*/_interopDefault(classnames13);
29
29
  var React54__default = /*#__PURE__*/_interopDefault(React54);
30
30
 
31
31
  // src/filter-list/base/BaseFilterList.tsx
32
+ function IncludeIcon() {
33
+ return /* @__PURE__ */ React54__default.default.createElement("svg", {
34
+ width: "14",
35
+ height: "14",
36
+ viewBox: "0 0 16 16",
37
+ fill: "none",
38
+ stroke: "currentColor",
39
+ strokeWidth: "1.5",
40
+ "aria-hidden": "true"
41
+ }, /* @__PURE__ */ React54__default.default.createElement("path", {
42
+ d: "M2 3h12M5 8h6M7 13h2",
43
+ strokeLinecap: "round"
44
+ }));
45
+ }
46
+ function ExcludeIcon() {
47
+ return /* @__PURE__ */ React54__default.default.createElement("svg", {
48
+ width: "14",
49
+ height: "14",
50
+ viewBox: "0 0 16 16",
51
+ fill: "none",
52
+ stroke: "currentColor",
53
+ strokeWidth: "1.5",
54
+ "aria-hidden": "true"
55
+ }, /* @__PURE__ */ React54__default.default.createElement("path", {
56
+ d: "M2 3h12M5 8h6M7 13h2",
57
+ strokeLinecap: "round"
58
+ }), /* @__PURE__ */ React54__default.default.createElement("path", {
59
+ d: "M3 14L13 2",
60
+ strokeLinecap: "round"
61
+ }));
62
+ }
63
+ function RemoveIcon() {
64
+ return /* @__PURE__ */ React54__default.default.createElement(icons.Cross, {
65
+ color: "currentColor",
66
+ size: 14
67
+ });
68
+ }
69
+ function CollapseIcon() {
70
+ return /* @__PURE__ */ React54__default.default.createElement(icons.DoubleChevronLeft, {
71
+ color: "currentColor",
72
+ size: 14
73
+ });
74
+ }
75
+ function ExpandIcon() {
76
+ return /* @__PURE__ */ React54__default.default.createElement(icons.DoubleChevronRight, {
77
+ color: "currentColor",
78
+ size: 14
79
+ });
80
+ }
81
+ function ResetIcon() {
82
+ return /* @__PURE__ */ React54__default.default.createElement(icons.Undo, {
83
+ color: "currentColor",
84
+ size: 14
85
+ });
86
+ }
32
87
 
33
88
  // src/filter-list/base/FilterList.module.css
34
89
  var FilterList_default = {};
@@ -167,51 +222,6 @@ function DragHandleIcon() {
167
222
  r: "1.5"
168
223
  }));
169
224
  }
170
- function IncludeIcon() {
171
- return /* @__PURE__ */ React54__default.default.createElement("svg", {
172
- width: "14",
173
- height: "14",
174
- viewBox: "0 0 16 16",
175
- fill: "none",
176
- stroke: "currentColor",
177
- strokeWidth: "1.5",
178
- "aria-hidden": "true"
179
- }, /* @__PURE__ */ React54__default.default.createElement("path", {
180
- d: "M2 3h12M5 8h6M7 13h2",
181
- strokeLinecap: "round"
182
- }));
183
- }
184
- function ExcludeIcon() {
185
- return /* @__PURE__ */ React54__default.default.createElement("svg", {
186
- width: "14",
187
- height: "14",
188
- viewBox: "0 0 16 16",
189
- fill: "none",
190
- stroke: "currentColor",
191
- strokeWidth: "1.5",
192
- "aria-hidden": "true"
193
- }, /* @__PURE__ */ React54__default.default.createElement("path", {
194
- d: "M2 3h12M5 8h6M7 13h2",
195
- strokeLinecap: "round"
196
- }), /* @__PURE__ */ React54__default.default.createElement("path", {
197
- d: "M3 14L13 2",
198
- strokeLinecap: "round"
199
- }));
200
- }
201
- function RemoveIcon() {
202
- return /* @__PURE__ */ React54__default.default.createElement("svg", {
203
- width: "14",
204
- height: "14",
205
- viewBox: "0 0 16 16",
206
- fill: "none",
207
- stroke: "currentColor",
208
- strokeWidth: "1.5",
209
- "aria-hidden": "true"
210
- }, /* @__PURE__ */ React54__default.default.createElement("path", {
211
- d: "M4 4l8 8M12 4l-8 8",
212
- strokeLinecap: "round"
213
- }));
214
- }
215
225
 
216
226
  // src/filter-list/base/FilterListItem.module.css
217
227
  var FilterListItem_default = {};
@@ -256,7 +266,7 @@ function FilterListItemInner({
256
266
  const isExcluding = filterState?.isExcluding ?? false;
257
267
  const showExcludeToggle = supportsExcluding(filterState);
258
268
  return /* @__PURE__ */ React54__default.default.createElement("div", {
259
- className: classnames14__default.default(FilterListItem_default.filterItem, className),
269
+ className: classnames13__default.default(FilterListItem_default.filterItem, className),
260
270
  style,
261
271
  "data-excluding": isExcluding || void 0
262
272
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -314,7 +324,7 @@ function SortableFilterListItem({
314
324
  return /* @__PURE__ */ React54__default.default.createElement("div", {
315
325
  ref: setNodeRef,
316
326
  style,
317
- className: classnames14__default.default(isDragging && FilterListItem_default.dragging)
327
+ className: classnames13__default.default(isDragging && FilterListItem_default.dragging)
318
328
  }, /* @__PURE__ */ React54__default.default.createElement(FilterListItem, {
319
329
  definition,
320
330
  filterKey,
@@ -436,14 +446,14 @@ function FilterListContent({
436
446
  }), [announcements]);
437
447
  if (!renderDefinitions || renderDefinitions.length === 0) {
438
448
  return /* @__PURE__ */ React54__default.default.createElement("div", {
439
- className: classnames14__default.default(FilterListContent_default.content, className),
449
+ className: classnames13__default.default(FilterListContent_default.content, className),
440
450
  style,
441
451
  "data-empty": "true"
442
452
  });
443
453
  }
444
454
  if (enableSorting) {
445
455
  return /* @__PURE__ */ React54__default.default.createElement("div", {
446
- className: classnames14__default.default(FilterListContent_default.content, className),
456
+ className: classnames13__default.default(FilterListContent_default.content, className),
447
457
  style
448
458
  }, /* @__PURE__ */ React54__default.default.createElement(core.DndContext, {
449
459
  sensors,
@@ -486,7 +496,7 @@ function FilterListContent({
486
496
  }))));
487
497
  }
488
498
  return /* @__PURE__ */ React54__default.default.createElement("div", {
489
- className: classnames14__default.default(FilterListContent_default.content, className),
499
+ className: classnames13__default.default(FilterListContent_default.content, className),
490
500
  style
491
501
  }, renderDefinitions.map((definition) => {
492
502
  const filterKey = getFilterKey2(definition);
@@ -524,18 +534,6 @@ function FilterListHeaderInner({
524
534
  }, [onCollapsedChange, collapsed]);
525
535
  return /* @__PURE__ */ React54__default.default.createElement("div", {
526
536
  className: FilterListHeader_default.header
527
- }, showCollapseButton && /* @__PURE__ */ React54__default.default.createElement(button.Button, {
528
- className: FilterListHeader_default.collapseButton,
529
- onClick: handleCollapseClick,
530
- "aria-expanded": !collapsed,
531
- "aria-label": collapsed ? "Expand filters" : "Collapse filters"
532
- }, /* @__PURE__ */ React54__default.default.createElement("span", {
533
- className: classnames14__default.default(FilterListHeader_default.collapseIcon, collapsed && FilterListHeader_default.collapsed)
534
- })), /* @__PURE__ */ React54__default.default.createElement("div", {
535
- className: FilterListHeader_default.headerContentWrapper,
536
- "data-collapsed": collapsed
537
- }, /* @__PURE__ */ React54__default.default.createElement("div", {
538
- className: FilterListHeader_default.headerContentInner
539
537
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
540
538
  className: FilterListHeader_default.titleContainer
541
539
  }, titleIcon && /* @__PURE__ */ React54__default.default.createElement("span", {
@@ -544,11 +542,18 @@ function FilterListHeaderInner({
544
542
  className: FilterListHeader_default.title
545
543
  }, title), showActiveFilterCount && activeFilterCount > 0 && /* @__PURE__ */ React54__default.default.createElement("span", {
546
544
  className: FilterListHeader_default.activeCount
547
- }, "(", activeFilterCount, ")")), showResetButton && /* @__PURE__ */ React54__default.default.createElement(button.Button, {
545
+ }, "(", activeFilterCount, ")")), /* @__PURE__ */ React54__default.default.createElement("div", {
546
+ className: FilterListHeader_default.actions
547
+ }, showResetButton && /* @__PURE__ */ React54__default.default.createElement(button.Button, {
548
548
  className: FilterListHeader_default.resetButton,
549
549
  onClick: onReset,
550
550
  disabled: activeFilterCount === 0
551
- }, "Reset"))));
551
+ }, /* @__PURE__ */ React54__default.default.createElement(ResetIcon, null), " Reset"), showCollapseButton && /* @__PURE__ */ React54__default.default.createElement(button.Button, {
552
+ className: FilterListHeader_default.collapseButton,
553
+ onClick: handleCollapseClick,
554
+ "aria-expanded": !collapsed,
555
+ "aria-label": collapsed ? "Expand filters" : "Collapse filters"
556
+ }, /* @__PURE__ */ React54__default.default.createElement(CollapseIcon, null))));
552
557
  }
553
558
  var FilterListHeader = /* @__PURE__ */ React54.memo(FilterListHeaderInner);
554
559
 
@@ -577,8 +582,23 @@ function BaseFilterList(props) {
577
582
  } = props;
578
583
  const showHeader = title || titleIcon || showResetButton || showActiveFilterCount || onCollapsedChange;
579
584
  const showAddButton = renderAddFilterButton != null || onFilterAdded != null;
585
+ const handleExpand = React54.useCallback(() => {
586
+ onCollapsedChange?.(false);
587
+ }, [onCollapsedChange]);
588
+ const isCollapsed = collapsed && onCollapsedChange != null;
580
589
  return /* @__PURE__ */ React54__default.default.createElement("div", {
581
- className: classnames14__default.default(FilterList_default.filterList, className),
590
+ className: classnames13__default.default(FilterList_default.filterList, className)
591
+ }, isCollapsed && /* @__PURE__ */ React54__default.default.createElement("div", {
592
+ className: FilterList_default.filterListCollapsed,
593
+ "data-collapsed": "true"
594
+ }, /* @__PURE__ */ React54__default.default.createElement(button.Button, {
595
+ className: FilterList_default.expandButton,
596
+ onClick: handleExpand,
597
+ "aria-label": "Expand filters"
598
+ }, /* @__PURE__ */ React54__default.default.createElement(ExpandIcon, null)), /* @__PURE__ */ React54__default.default.createElement("span", {
599
+ className: FilterList_default.collapsedLabel
600
+ }, title ?? "Filters")), /* @__PURE__ */ React54__default.default.createElement("div", {
601
+ className: classnames13__default.default(FilterList_default.expandedContent, isCollapsed && FilterList_default.hiddenContent),
582
602
  "data-active-count": activeFilterCount
583
603
  }, showHeader && /* @__PURE__ */ React54__default.default.createElement(FilterListHeader, {
584
604
  title,
@@ -589,12 +609,7 @@ function BaseFilterList(props) {
589
609
  onReset,
590
610
  showActiveFilterCount,
591
611
  activeFilterCount
592
- }), /* @__PURE__ */ React54__default.default.createElement("div", {
593
- className: FilterList_default.contentWrapper,
594
- "data-collapsed": collapsed
595
- }, /* @__PURE__ */ React54__default.default.createElement("div", {
596
- className: FilterList_default.contentInner
597
- }, /* @__PURE__ */ React54__default.default.createElement(FilterListContent, {
612
+ }), /* @__PURE__ */ React54__default.default.createElement(FilterListContent, {
598
613
  filterDefinitions,
599
614
  filterStates,
600
615
  onFilterStateChanged,
@@ -603,12 +618,13 @@ function BaseFilterList(props) {
603
618
  getFilterKey: getFilterKey2,
604
619
  getFilterLabel: getFilterLabel2,
605
620
  enableSorting
606
- }))), !collapsed && showAddButton && /* @__PURE__ */ React54__default.default.createElement("div", {
621
+ }), showAddButton && /* @__PURE__ */ React54__default.default.createElement("div", {
607
622
  className: FilterList_default.addButtonContainer
608
623
  }, renderAddFilterButton ? renderAddFilterButton() : /* @__PURE__ */ React54__default.default.createElement(button.Button, {
609
624
  type: "button",
610
- className: FilterList_default.addButton
611
- }, "+ Add filter")));
625
+ className: FilterList_default.addButton,
626
+ onClick: onFilterAdded
627
+ }, "+ Add filter"))));
612
628
  }
613
629
 
614
630
  // src/filter-list/base/inputs/ContainsTextInput.module.css
@@ -650,7 +666,7 @@ function ContainsTextInputInner({
650
666
  onChangeRef.current(void 0);
651
667
  }, [debouncedOnChange]);
652
668
  return /* @__PURE__ */ React54__default.default.createElement("div", {
653
- className: classnames14__default.default(ContainsTextInput_default.textInput, className),
669
+ className: classnames13__default.default(ContainsTextInput_default.textInput, className),
654
670
  style,
655
671
  "data-has-value": !!localValue
656
672
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -696,9 +712,9 @@ function Switch({
696
712
  ...rest
697
713
  }) {
698
714
  return /* @__PURE__ */ React54__default.default.createElement(_switch.Switch.Root, _extends2({
699
- className: classnames14__default.default(Switch_default.osdkSwitchRoot, className)
715
+ className: classnames13__default.default(Switch_default.osdkSwitchRoot, className)
700
716
  }, rest), /* @__PURE__ */ React54__default.default.createElement(_switch.Switch.Thumb, _extends2({}, thumbProps, {
701
- className: classnames14__default.default(Switch_default.osdkSwitchThumb, thumbProps?.className)
717
+ className: classnames13__default.default(Switch_default.osdkSwitchThumb, thumbProps?.className)
702
718
  })));
703
719
  }
704
720
 
@@ -713,7 +729,7 @@ function ToggleInputInner({
713
729
  className,
714
730
  style
715
731
  }) {
716
- const rootClassName = classnames14__default.default(ToggleInput_default.toggleInput, className);
732
+ const rootClassName = classnames13__default.default(ToggleInput_default.toggleInput, className);
717
733
  return /* @__PURE__ */ React54__default.default.createElement("div", {
718
734
  className: rootClassName,
719
735
  style,
@@ -749,10 +765,10 @@ function Checkbox({
749
765
  ...rest
750
766
  }) {
751
767
  return /* @__PURE__ */ React54__default.default.createElement(checkbox.Checkbox.Root, _extends3({
752
- className: classnames14__default.default(Checkbox_default.osdkCheckboxRoot, className),
768
+ className: classnames13__default.default(Checkbox_default.osdkCheckboxRoot, className),
753
769
  indeterminate
754
770
  }, rest), /* @__PURE__ */ React54__default.default.createElement(checkbox.Checkbox.Indicator, _extends3({}, indicatorProps, {
755
- className: classnames14__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
771
+ className: classnames13__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
756
772
  }), indeterminate ? /* @__PURE__ */ React54__default.default.createElement(icons.Minus, {
757
773
  color: "currentColor"
758
774
  }) : /* @__PURE__ */ React54__default.default.createElement(icons.Tick, {
@@ -796,7 +812,7 @@ function CheckboxListInputInner({
796
812
  }
797
813
  }, [allSelected, displayValues, onChange]);
798
814
  return /* @__PURE__ */ React54__default.default.createElement("div", {
799
- className: classnames14__default.default(CheckboxListInput_default.checkboxList, className),
815
+ className: classnames13__default.default(CheckboxListInput_default.checkboxList, className),
800
816
  style,
801
817
  "data-loading": isLoading
802
818
  }, error && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -990,7 +1006,7 @@ function RangeInputInner({
990
1006
  debouncedMaxChange(newValue);
991
1007
  }, [debouncedMaxChange]);
992
1008
  return /* @__PURE__ */ React54__default.default.createElement("div", {
993
- className: classnames14__default.default(RangeInput_default.rangeInput, className),
1009
+ className: classnames13__default.default(RangeInput_default.rangeInput, className),
994
1010
  style,
995
1011
  "data-loading": isLoading
996
1012
  }, showHistogram && buckets.length > 0 && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -1104,7 +1120,7 @@ function ListogramInputInner({
1104
1120
  }, [values, maxVisibleItems, isExpanded]);
1105
1121
  const hasMore = maxVisibleItems != null && values.length > maxVisibleItems;
1106
1122
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1107
- className: classnames14__default.default(ListogramInput_default.listogram, className),
1123
+ className: classnames13__default.default(ListogramInput_default.listogram, className),
1108
1124
  style,
1109
1125
  "data-loading": isLoading
1110
1126
  }, isLoading && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -1184,7 +1200,7 @@ function MultiDateInputInner({
1184
1200
  }
1185
1201
  }, [addDate]);
1186
1202
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1187
- className: classnames14__default.default(MultiDateInput_default.multiDate, className),
1203
+ className: classnames13__default.default(MultiDateInput_default.multiDate, className),
1188
1204
  style
1189
1205
  }, selectedDates.length > 0 && /* @__PURE__ */ React54__default.default.createElement("div", {
1190
1206
  className: shared_default.tagContainer
@@ -1230,7 +1246,7 @@ function ComboboxInput({
1230
1246
  ...rest
1231
1247
  }) {
1232
1248
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1233
- className: classnames14__default.default(Combobox_default.osdkComboboxInputWrapper, className)
1249
+ className: classnames13__default.default(Combobox_default.osdkComboboxInputWrapper, className)
1234
1250
  }, /* @__PURE__ */ React54__default.default.createElement(icons.Search, {
1235
1251
  className: Combobox_default.osdkComboboxSearchIcon,
1236
1252
  color: "currentColor"
@@ -1244,7 +1260,7 @@ function ComboboxPositioner({
1244
1260
  ...rest
1245
1261
  }) {
1246
1262
  return /* @__PURE__ */ React54__default.default.createElement(combobox.Combobox.Positioner, _extends6({
1247
- className: classnames14__default.default(Combobox_default.osdkComboboxPositioner, className),
1263
+ className: classnames13__default.default(Combobox_default.osdkComboboxPositioner, className),
1248
1264
  sideOffset: 4
1249
1265
  }, rest), children);
1250
1266
  }
@@ -1254,7 +1270,7 @@ function ComboboxPopup({
1254
1270
  ...rest
1255
1271
  }) {
1256
1272
  return /* @__PURE__ */ React54__default.default.createElement(combobox.Combobox.Popup, _extends6({
1257
- className: classnames14__default.default(Combobox_default.osdkComboboxPopup, className)
1273
+ className: classnames13__default.default(Combobox_default.osdkComboboxPopup, className)
1258
1274
  }, rest), children);
1259
1275
  }
1260
1276
  function ComboboxItem({
@@ -1263,7 +1279,7 @@ function ComboboxItem({
1263
1279
  ...rest
1264
1280
  }) {
1265
1281
  return /* @__PURE__ */ React54__default.default.createElement(combobox.Combobox.Item, _extends6({
1266
- className: classnames14__default.default(Combobox_default.osdkComboboxItem, className)
1282
+ className: classnames13__default.default(Combobox_default.osdkComboboxItem, className)
1267
1283
  }, rest), children);
1268
1284
  }
1269
1285
  function ComboboxClear({
@@ -1271,7 +1287,7 @@ function ComboboxClear({
1271
1287
  ...rest
1272
1288
  }) {
1273
1289
  return /* @__PURE__ */ React54__default.default.createElement(combobox.Combobox.Clear, _extends6({
1274
- className: classnames14__default.default(Combobox_default.osdkComboboxClear, className),
1290
+ className: classnames13__default.default(Combobox_default.osdkComboboxClear, className),
1275
1291
  "aria-label": "Clear all"
1276
1292
  }, rest), /* @__PURE__ */ React54__default.default.createElement(icons.Cross, {
1277
1293
  color: "currentColor"
@@ -1282,7 +1298,7 @@ function ComboboxEmpty({
1282
1298
  className
1283
1299
  }) {
1284
1300
  return /* @__PURE__ */ React54__default.default.createElement(combobox.Combobox.Empty, {
1285
- className: classnames14__default.default(Combobox_default.osdkComboboxEmpty, className)
1301
+ className: classnames13__default.default(Combobox_default.osdkComboboxEmpty, className)
1286
1302
  }, children);
1287
1303
  }
1288
1304
  var Combobox = {
@@ -1325,7 +1341,7 @@ function MultiSelectInputInner({
1325
1341
  const displayedTags = selectedValues.slice(0, maxDisplayedTags);
1326
1342
  const remainingCount = selectedValues.length - maxDisplayedTags;
1327
1343
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1328
- className: classnames14__default.default(MultiSelectInput_default.multiSelect, className),
1344
+ className: classnames13__default.default(MultiSelectInput_default.multiSelect, className),
1329
1345
  style,
1330
1346
  "data-loading": isLoading
1331
1347
  }, error && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -1390,7 +1406,7 @@ function NullValueWrapperInner({
1390
1406
  onIncludeNullChange(!includeNull);
1391
1407
  }, [includeNull, onIncludeNullChange]);
1392
1408
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1393
- className: classnames14__default.default(NullValueWrapper_default.nullWrapper, className),
1409
+ className: classnames13__default.default(NullValueWrapper_default.nullWrapper, className),
1394
1410
  style
1395
1411
  }, children, /* @__PURE__ */ React54__default.default.createElement("div", {
1396
1412
  className: NullValueWrapper_default.nullValueRow,
@@ -1470,7 +1486,7 @@ function SingleDateInputInner({
1470
1486
  onChange(void 0);
1471
1487
  }, [onChange]);
1472
1488
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1473
- className: classnames14__default.default(SingleDateInput_default.singleDate, className),
1489
+ className: classnames13__default.default(SingleDateInput_default.singleDate, className),
1474
1490
  style
1475
1491
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
1476
1492
  className: SingleDateInput_default.dateContainer
@@ -1517,7 +1533,7 @@ function SelectTrigger({
1517
1533
  ...rest
1518
1534
  }) {
1519
1535
  return /* @__PURE__ */ React54__default.default.createElement(select.Select.Trigger, _extends8({
1520
- className: classnames14__default.default(Select_default.osdkSelectTrigger, className)
1536
+ className: classnames13__default.default(Select_default.osdkSelectTrigger, className)
1521
1537
  }, rest), children ?? /* @__PURE__ */ React54__default.default.createElement(React54__default.default.Fragment, null, /* @__PURE__ */ React54__default.default.createElement(select.Select.Value, null, (value) => value != null ? String(value) : placeholder), /* @__PURE__ */ React54__default.default.createElement(select.Select.Icon, {
1522
1538
  className: Select_default.osdkSelectIcon
1523
1539
  }, /* @__PURE__ */ React54__default.default.createElement(icons.CaretDown, {
@@ -1530,7 +1546,7 @@ function SelectPositioner({
1530
1546
  ...rest
1531
1547
  }) {
1532
1548
  return /* @__PURE__ */ React54__default.default.createElement(select.Select.Positioner, _extends8({
1533
- className: classnames14__default.default(Select_default.osdkSelectPositioner, className),
1549
+ className: classnames13__default.default(Select_default.osdkSelectPositioner, className),
1534
1550
  sideOffset: 4
1535
1551
  }, rest), children);
1536
1552
  }
@@ -1540,7 +1556,7 @@ function SelectPopup({
1540
1556
  ...rest
1541
1557
  }) {
1542
1558
  return /* @__PURE__ */ React54__default.default.createElement(select.Select.Popup, _extends8({
1543
- className: classnames14__default.default(Select_default.osdkSelectPopup, className)
1559
+ className: classnames13__default.default(Select_default.osdkSelectPopup, className)
1544
1560
  }, rest), children);
1545
1561
  }
1546
1562
  function SelectItem({
@@ -1549,7 +1565,7 @@ function SelectItem({
1549
1565
  ...rest
1550
1566
  }) {
1551
1567
  return /* @__PURE__ */ React54__default.default.createElement(select.Select.Item, _extends8({
1552
- className: classnames14__default.default(Select_default.osdkSelectItem, className)
1568
+ className: classnames13__default.default(Select_default.osdkSelectItem, className)
1553
1569
  }, rest), /* @__PURE__ */ React54__default.default.createElement(select.Select.ItemText, null, children));
1554
1570
  }
1555
1571
  var Select = {
@@ -1595,7 +1611,7 @@ function SingleSelectInputInner({
1595
1611
  return result;
1596
1612
  }, [values, showCounts]);
1597
1613
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1598
- className: classnames14__default.default(SingleSelectInput_default.singleSelect, className),
1614
+ className: classnames13__default.default(SingleSelectInput_default.singleSelect, className),
1599
1615
  style,
1600
1616
  "data-loading": isLoading
1601
1617
  }, isLoading && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -1710,7 +1726,7 @@ function TextTagsInputInner({
1710
1726
  }
1711
1727
  }, [tags, onChange]);
1712
1728
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1713
- className: classnames14__default.default(TextTagsInput_default.textTags, className),
1729
+ className: classnames13__default.default(TextTagsInput_default.textTags, className),
1714
1730
  style,
1715
1731
  "data-loading": isLoading
1716
1732
  }, error && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -1771,7 +1787,7 @@ function TimelineInputInner({
1771
1787
  const startInputMax = React54.useMemo(() => endDate ?? maxDate, [endDate, maxDate]);
1772
1788
  const endInputMin = React54.useMemo(() => startDate ?? minDate, [startDate, minDate]);
1773
1789
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1774
- className: classnames14__default.default(TimelineInput_default.timeline, className)
1790
+ className: classnames13__default.default(TimelineInput_default.timeline, className)
1775
1791
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
1776
1792
  className: TimelineInput_default.labels
1777
1793
  }, /* @__PURE__ */ React54__default.default.createElement("span", null, formatDateForDisplay(startDate, "\u2014")), /* @__PURE__ */ React54__default.default.createElement("span", null, "to"), /* @__PURE__ */ React54__default.default.createElement("span", null, formatDateForDisplay(endDate, "\u2014")), (startDate || endDate) && /* @__PURE__ */ React54__default.default.createElement(button.Button, {
@@ -1894,7 +1910,7 @@ function createNullWhereClause(propertyKey) {
1894
1910
  };
1895
1911
  }
1896
1912
 
1897
- // src/filter-list/utils/assertUnreachable.ts
1913
+ // src/shared/assertUnreachable.ts
1898
1914
  function assertUnreachable(value) {
1899
1915
  throw new Error(`Unhandled value: ${String(value)}`);
1900
1916
  }
@@ -2137,7 +2153,7 @@ function LinkedPropertyInputInner({
2137
2153
  }
2138
2154
  })();
2139
2155
  return /* @__PURE__ */ React54__default.default.createElement("div", {
2140
- className: classnames14__default.default(LinkedPropertyInput_default.linkedProperty, className),
2156
+ className: classnames13__default.default(LinkedPropertyInput_default.linkedProperty, className),
2141
2157
  style
2142
2158
  }, content);
2143
2159
  }
@@ -3051,38 +3067,52 @@ function getFilterKey(definition) {
3051
3067
  }
3052
3068
 
3053
3069
  // src/filter-list/utils/filterStateToWhereClause.ts
3054
- function liftCompoundPropertyFilter(propertyKey, filter) {
3055
- if (typeof filter === "object" && !Array.isArray(filter)) {
3056
- if ("$and" in filter && Array.isArray(filter.$and)) {
3057
- return {
3058
- $and: filter.$and.map((f) => liftCompoundPropertyFilter(propertyKey, f))
3059
- };
3060
- }
3061
- if ("$or" in filter && Array.isArray(filter.$or)) {
3062
- return {
3063
- $or: filter.$or.map((f) => liftCompoundPropertyFilter(propertyKey, f))
3064
- };
3065
- }
3070
+ function isCompoundFilter(f) {
3071
+ return typeof f === "object" && f != null && "__compound" in f;
3072
+ }
3073
+ var NUMERIC_BOUNDS = {
3074
+ byte: {
3075
+ min: -128,
3076
+ max: 127
3077
+ },
3078
+ short: {
3079
+ min: -32768,
3080
+ max: 32767
3081
+ },
3082
+ integer: {
3083
+ min: -2147483648,
3084
+ max: 2147483647
3085
+ },
3086
+ long: {
3087
+ min: Number.MIN_SAFE_INTEGER,
3088
+ max: Number.MAX_SAFE_INTEGER
3066
3089
  }
3067
- return {
3068
- [propertyKey]: filter
3069
- };
3090
+ };
3091
+ function clampToPropertyBounds(value, propertyType) {
3092
+ if (propertyType === void 0) {
3093
+ return value;
3094
+ }
3095
+ const bounds = NUMERIC_BOUNDS[propertyType];
3096
+ if (bounds === void 0) {
3097
+ return value;
3098
+ }
3099
+ return Math.max(bounds.min, Math.min(bounds.max, value));
3100
+ }
3101
+ function formatDateValue(date, propertyType) {
3102
+ if (propertyType === "datetime") {
3103
+ return formatDateForInput(date);
3104
+ }
3105
+ return date.toISOString();
3070
3106
  }
3071
- function filterStateToPropertyFilter(state) {
3107
+ function filterStateToPropertyFilter(state, propertyType) {
3072
3108
  switch (state.type) {
3073
3109
  case "CONTAINS_TEXT": {
3074
3110
  if (!state.value) {
3075
3111
  return void 0;
3076
3112
  }
3077
- const filter = {
3113
+ return {
3078
3114
  $containsAnyTerm: state.value
3079
3115
  };
3080
- if (state.isExcluding) {
3081
- return {
3082
- $not: filter
3083
- };
3084
- }
3085
- return filter;
3086
3116
  }
3087
3117
  case "TOGGLE": {
3088
3118
  return state.enabled;
@@ -3091,134 +3121,100 @@ function filterStateToPropertyFilter(state) {
3091
3121
  const conditions = [];
3092
3122
  if (state.minValue !== void 0) {
3093
3123
  conditions.push({
3094
- $gte: state.minValue.toISOString()
3124
+ $gte: formatDateValue(state.minValue, propertyType)
3095
3125
  });
3096
3126
  }
3097
3127
  if (state.maxValue !== void 0) {
3098
3128
  conditions.push({
3099
- $lte: state.maxValue.toISOString()
3129
+ $lte: formatDateValue(state.maxValue, propertyType)
3100
3130
  });
3101
3131
  }
3102
3132
  if (conditions.length === 0 && !state.includeNull) {
3103
3133
  return void 0;
3104
3134
  }
3105
- let rangeFilter;
3106
- if (conditions.length === 1) {
3107
- rangeFilter = conditions[0];
3108
- } else if (conditions.length > 1) {
3109
- rangeFilter = {
3110
- $and: conditions
3111
- };
3112
- }
3113
- if (state.includeNull) {
3114
- if (rangeFilter) {
3115
- return {
3116
- $or: [rangeFilter, {
3117
- $isNull: true
3118
- }]
3119
- };
3120
- }
3135
+ if (conditions.length === 0 && state.includeNull) {
3121
3136
  return {
3122
3137
  $isNull: true
3123
3138
  };
3124
3139
  }
3125
- return rangeFilter;
3140
+ if (conditions.length === 1 && !state.includeNull) {
3141
+ return conditions[0];
3142
+ }
3143
+ return {
3144
+ __compound: true,
3145
+ conditions,
3146
+ includeNull: state.includeNull ?? false
3147
+ };
3126
3148
  }
3127
3149
  case "NUMBER_RANGE": {
3128
3150
  const conditions = [];
3129
3151
  if (state.minValue !== void 0) {
3130
3152
  conditions.push({
3131
- $gte: state.minValue
3153
+ $gte: clampToPropertyBounds(state.minValue, propertyType)
3132
3154
  });
3133
3155
  }
3134
3156
  if (state.maxValue !== void 0) {
3135
3157
  conditions.push({
3136
- $lte: state.maxValue
3158
+ $lte: clampToPropertyBounds(state.maxValue, propertyType)
3137
3159
  });
3138
3160
  }
3139
3161
  if (conditions.length === 0 && !state.includeNull) {
3140
3162
  return void 0;
3141
3163
  }
3142
- let rangeFilter;
3143
- if (conditions.length === 1) {
3144
- rangeFilter = conditions[0];
3145
- } else if (conditions.length > 1) {
3146
- rangeFilter = {
3147
- $and: conditions
3148
- };
3149
- }
3150
- if (state.includeNull) {
3151
- if (rangeFilter) {
3152
- return {
3153
- $or: [rangeFilter, {
3154
- $isNull: true
3155
- }]
3156
- };
3157
- }
3164
+ if (conditions.length === 0 && state.includeNull) {
3158
3165
  return {
3159
3166
  $isNull: true
3160
3167
  };
3161
3168
  }
3162
- return rangeFilter;
3169
+ if (conditions.length === 1 && !state.includeNull) {
3170
+ return conditions[0];
3171
+ }
3172
+ return {
3173
+ __compound: true,
3174
+ conditions,
3175
+ includeNull: state.includeNull ?? false
3176
+ };
3163
3177
  }
3164
3178
  case "EXACT_MATCH": {
3165
3179
  if (state.values.length === 0) {
3166
3180
  return void 0;
3167
3181
  }
3168
- const filter = state.values.length === 1 ? state.values[0] : {
3182
+ return state.values.length === 1 ? state.values[0] : {
3169
3183
  $in: state.values
3170
3184
  };
3171
- if (state.isExcluding) {
3172
- return {
3173
- $not: filter
3174
- };
3175
- }
3176
- return filter;
3177
3185
  }
3178
3186
  case "SELECT": {
3179
3187
  if (state.selectedValues.length === 0) {
3180
3188
  return void 0;
3181
3189
  }
3182
- const values = state.selectedValues.map((v) => v instanceof Date ? v.toISOString() : v);
3183
- const filter = values.length === 1 ? values[0] : {
3190
+ const values = state.selectedValues.map((v) => v instanceof Date ? formatDateValue(v, propertyType) : v);
3191
+ return values.length === 1 ? values[0] : {
3184
3192
  $in: values
3185
3193
  };
3186
- if (state.isExcluding) {
3187
- return {
3188
- $not: filter
3189
- };
3190
- }
3191
- return filter;
3192
3194
  }
3193
3195
  case "TIMELINE": {
3194
3196
  const conditions = [];
3195
3197
  if (state.startDate !== void 0) {
3196
3198
  conditions.push({
3197
- $gte: state.startDate.toISOString()
3199
+ $gte: formatDateValue(state.startDate, propertyType)
3198
3200
  });
3199
3201
  }
3200
3202
  if (state.endDate !== void 0) {
3201
3203
  conditions.push({
3202
- $lte: state.endDate.toISOString()
3204
+ $lte: formatDateValue(state.endDate, propertyType)
3203
3205
  });
3204
3206
  }
3205
3207
  if (conditions.length === 0) {
3206
3208
  return void 0;
3207
3209
  }
3208
- let rangeFilter;
3209
3210
  if (conditions.length === 1) {
3210
- rangeFilter = conditions[0];
3211
- } else {
3212
- rangeFilter = {
3213
- $and: conditions
3214
- };
3211
+ return conditions[0];
3215
3212
  }
3216
- if (state.isExcluding) {
3217
- return {
3218
- $not: rangeFilter
3219
- };
3220
- }
3221
- return rangeFilter;
3213
+ return {
3214
+ __compound: true,
3215
+ conditions,
3216
+ includeNull: false
3217
+ };
3222
3218
  }
3223
3219
  // These filter types are handled separately in buildWhereClause
3224
3220
  // since they need access to the full definition, not just state
@@ -3231,7 +3227,7 @@ function filterStateToPropertyFilter(state) {
3231
3227
  return assertUnreachable(state);
3232
3228
  }
3233
3229
  }
3234
- function buildWhereClause(definitions, filterStates, operator, objectType, excludeFilterKey) {
3230
+ function buildWhereClause(definitions, filterStates, operator, propertyTypes, excludeFilterKey) {
3235
3231
  if (!definitions || definitions.length === 0) {
3236
3232
  return {};
3237
3233
  }
@@ -3247,9 +3243,37 @@ function buildWhereClause(definitions, filterStates, operator, objectType, exclu
3247
3243
  }
3248
3244
  switch (definition.type) {
3249
3245
  case "PROPERTY": {
3250
- const filter = filterStateToPropertyFilter(state);
3246
+ const propertyType = propertyTypes?.get(definition.key)?.type;
3247
+ const filter = filterStateToPropertyFilter(state, propertyType);
3251
3248
  if (filter !== void 0) {
3252
- clauses.push(liftCompoundPropertyFilter(definition.key, filter));
3249
+ const isExcluding = "isExcluding" in state && state.isExcluding;
3250
+ if (isCompoundFilter(filter)) {
3251
+ const fieldClauses = filter.conditions.map((c) => ({
3252
+ [definition.key]: c
3253
+ }));
3254
+ let rangeClause = fieldClauses.length === 1 ? fieldClauses[0] : {
3255
+ $and: fieldClauses
3256
+ };
3257
+ if (filter.includeNull) {
3258
+ rangeClause = {
3259
+ $or: [rangeClause, {
3260
+ [definition.key]: {
3261
+ $isNull: true
3262
+ }
3263
+ }]
3264
+ };
3265
+ }
3266
+ clauses.push(isExcluding ? {
3267
+ $not: rangeClause
3268
+ } : rangeClause);
3269
+ } else {
3270
+ const clause = {
3271
+ [definition.key]: filter
3272
+ };
3273
+ clauses.push(isExcluding ? {
3274
+ $not: clause
3275
+ } : clause);
3276
+ }
3253
3277
  }
3254
3278
  break;
3255
3279
  }
@@ -3290,11 +3314,16 @@ function buildWhereClause(definitions, filterStates, operator, objectType, exclu
3290
3314
  const properties = definition.properties;
3291
3315
  let propertiesToSearch;
3292
3316
  if (properties === "all") {
3293
- if (objectType?.__DefinitionMetadata?.properties) {
3294
- propertiesToSearch = Object.entries(objectType.__DefinitionMetadata.properties).filter(([, prop]) => prop.type === "string" && !prop.multiplicity).map(([key2]) => key2);
3317
+ if (propertyTypes && propertyTypes.size > 0) {
3318
+ propertiesToSearch = [];
3319
+ for (const [key2, info] of propertyTypes) {
3320
+ if (info.type === "string" && !info.multiplicity) {
3321
+ propertiesToSearch.push(key2);
3322
+ }
3323
+ }
3295
3324
  } else {
3296
3325
  if (process.env.NODE_ENV !== "production") {
3297
- console.warn("[FilterList] Keyword search with properties: 'all' requires objectType to be provided. Filter will be skipped.");
3326
+ console.warn("[FilterList] Keyword search with properties: 'all' requires propertyTypes to be provided. Filter will be skipped.");
3298
3327
  }
3299
3328
  break;
3300
3329
  }
@@ -3306,21 +3335,21 @@ function buildWhereClause(definitions, filterStates, operator, objectType, exclu
3306
3335
  }
3307
3336
  const containsOp = state.operator === "AND" ? "$containsAllTerms" : "$containsAnyTerm";
3308
3337
  const propertySearches = propertiesToSearch.map((prop) => ({
3309
- [prop]: state.isExcluding ? {
3310
- $not: {
3311
- [containsOp]: searchTerm
3312
- }
3313
- } : {
3338
+ [prop]: {
3314
3339
  [containsOp]: searchTerm
3315
3340
  }
3316
3341
  }));
3342
+ let searchClause;
3317
3343
  if (propertySearches.length === 1) {
3318
- clauses.push(propertySearches[0]);
3344
+ searchClause = propertySearches[0];
3319
3345
  } else {
3320
- clauses.push({
3346
+ searchClause = {
3321
3347
  $or: propertySearches
3322
- });
3348
+ };
3323
3349
  }
3350
+ clauses.push(state.isExcluding ? {
3351
+ $not: searchClause
3352
+ } : searchClause);
3324
3353
  break;
3325
3354
  }
3326
3355
  case "CUSTOM": {
@@ -3408,6 +3437,23 @@ function useFilterListState(props) {
3408
3437
  initialFilterStates
3409
3438
  } = props;
3410
3439
  const objectType = objectSet.$objectSetInternals.def;
3440
+ const {
3441
+ metadata
3442
+ } = react.useOsdkMetadata(objectType);
3443
+ const propertyTypes = React54.useMemo(() => {
3444
+ const map = /* @__PURE__ */ new Map();
3445
+ if (metadata?.properties) {
3446
+ for (const [key, prop] of Object.entries(metadata.properties)) {
3447
+ if (typeof prop.type === "string") {
3448
+ map.set(key, {
3449
+ type: prop.type,
3450
+ multiplicity: prop.multiplicity === true
3451
+ });
3452
+ }
3453
+ }
3454
+ }
3455
+ return map;
3456
+ }, [metadata?.properties]);
3411
3457
  const [filterStates, setFilterStates] = React54.useState(() => {
3412
3458
  const states = buildInitialStates(filterDefinitions);
3413
3459
  if (initialFilterStates) {
@@ -3418,22 +3464,22 @@ function useFilterListState(props) {
3418
3464
  return states;
3419
3465
  });
3420
3466
  const setFilterState = React54.useCallback((filterKey, state) => {
3421
- let computedClause;
3467
+ let newWhereClause;
3422
3468
  setFilterStates((prev) => {
3423
3469
  const next = new Map(prev);
3424
3470
  next.set(filterKey, state);
3425
- computedClause = buildWhereClause(filterDefinitions, next, filterOperator, objectType);
3471
+ newWhereClause = buildWhereClause(filterDefinitions, next, filterOperator, propertyTypes);
3426
3472
  return next;
3427
3473
  });
3428
- if (computedClause !== void 0) {
3429
- onFilterClauseChanged?.(computedClause);
3474
+ if (newWhereClause !== void 0) {
3475
+ onFilterClauseChanged?.(newWhereClause);
3430
3476
  }
3431
3477
  const definition = filterDefinitions?.find((d) => getFilterKey(d) === filterKey);
3432
3478
  if (definition) {
3433
3479
  onFilterStateChanged?.(definition, state);
3434
3480
  }
3435
- }, [filterDefinitions, filterOperator, objectType, onFilterClauseChanged, onFilterStateChanged]);
3436
- const whereClause = React54.useMemo(() => buildWhereClause(filterDefinitions, filterStates, filterOperator, objectType), [filterDefinitions, filterStates, filterOperator, objectType]);
3481
+ }, [filterDefinitions, filterOperator, propertyTypes, onFilterClauseChanged, onFilterStateChanged]);
3482
+ const whereClause = React54.useMemo(() => buildWhereClause(filterDefinitions, filterStates, filterOperator, propertyTypes), [filterDefinitions, filterStates, filterOperator, propertyTypes]);
3437
3483
  const perFilterWhereClauses = React54.useMemo(() => {
3438
3484
  const map = /* @__PURE__ */ new Map();
3439
3485
  if (!filterDefinitions) {
@@ -3441,10 +3487,10 @@ function useFilterListState(props) {
3441
3487
  }
3442
3488
  for (const definition of filterDefinitions) {
3443
3489
  const key = getFilterKey(definition);
3444
- map.set(key, buildWhereClause(filterDefinitions, filterStates, filterOperator, objectType, key));
3490
+ map.set(key, buildWhereClause(filterDefinitions, filterStates, filterOperator, propertyTypes, key));
3445
3491
  }
3446
3492
  return map;
3447
- }, [filterDefinitions, filterStates, filterOperator, objectType]);
3493
+ }, [filterDefinitions, filterStates, filterOperator, propertyTypes]);
3448
3494
  const activeFilterCount = React54.useMemo(() => {
3449
3495
  let count = 0;
3450
3496
  for (const state of filterStates.values()) {
@@ -3457,8 +3503,9 @@ function useFilterListState(props) {
3457
3503
  const reset = React54.useCallback(() => {
3458
3504
  const initialStates = buildInitialStates(filterDefinitions);
3459
3505
  setFilterStates(initialStates);
3460
- onFilterClauseChanged?.(buildWhereClause(filterDefinitions, initialStates, filterOperator, objectType));
3461
- }, [filterDefinitions, filterOperator, objectType, onFilterClauseChanged]);
3506
+ const newWhereClause = buildWhereClause(filterDefinitions, initialStates, filterOperator, propertyTypes);
3507
+ onFilterClauseChanged?.(newWhereClause);
3508
+ }, [filterDefinitions, filterOperator, propertyTypes, onFilterClauseChanged]);
3462
3509
  return React54.useMemo(() => ({
3463
3510
  filterStates,
3464
3511
  setFilterState,
@@ -3617,7 +3664,7 @@ function TooltipTrigger({
3617
3664
  ...rest
3618
3665
  }) {
3619
3666
  return /* @__PURE__ */ React54__default.default.createElement(tooltip.Tooltip.Trigger, _extends9({
3620
- className: classnames14__default.default(Tooltip_default.osdkTooltipTrigger, className)
3667
+ className: classnames13__default.default(Tooltip_default.osdkTooltipTrigger, className)
3621
3668
  }, rest), children);
3622
3669
  }
3623
3670
  function TooltipPositioner({
@@ -3627,7 +3674,7 @@ function TooltipPositioner({
3627
3674
  ...rest
3628
3675
  }) {
3629
3676
  return /* @__PURE__ */ React54__default.default.createElement(tooltip.Tooltip.Positioner, _extends9({
3630
- className: classnames14__default.default(Tooltip_default.osdkTooltipPositioner, className),
3677
+ className: classnames13__default.default(Tooltip_default.osdkTooltipPositioner, className),
3631
3678
  sideOffset
3632
3679
  }, rest), children);
3633
3680
  }
@@ -3637,7 +3684,7 @@ function TooltipPopup({
3637
3684
  ...rest
3638
3685
  }) {
3639
3686
  return /* @__PURE__ */ React54__default.default.createElement(tooltip.Tooltip.Popup, _extends9({
3640
- className: classnames14__default.default(Tooltip_default.osdkTooltipPopup, className)
3687
+ className: classnames13__default.default(Tooltip_default.osdkTooltipPopup, className)
3641
3688
  }, rest), children);
3642
3689
  }
3643
3690
  function TooltipArrow() {
@@ -3785,7 +3832,7 @@ function EditableCellInner({
3785
3832
  return /* @__PURE__ */ React54__default.default.createElement(Tooltip.Provider, null, /* @__PURE__ */ React54__default.default.createElement(Tooltip.Root, {
3786
3833
  disabled: !hasValidationError
3787
3834
  }, /* @__PURE__ */ React54__default.default.createElement(Tooltip.Trigger, null, /* @__PURE__ */ React54__default.default.createElement("div", {
3788
- className: classnames14__default.default(EditableCell_default.osdkEditableCell, {
3835
+ className: classnames13__default.default(EditableCell_default.osdkEditableCell, {
3789
3836
  [EditableCell_default.error]: hasValidationError,
3790
3837
  [EditableCell_default.osdkEditedInput]: isEdited
3791
3838
  })
@@ -4505,7 +4552,7 @@ function LoadingCell({
4505
4552
  width
4506
4553
  }
4507
4554
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
4508
- className: classnames14__default.default(LoadingCell_default.osdkLoadingCell, LoadingCell_default.osdkCellSkeleton)
4555
+ className: classnames13__default.default(LoadingCell_default.osdkLoadingCell, LoadingCell_default.osdkCellSkeleton)
4509
4556
  }));
4510
4557
  }
4511
4558
 
@@ -4559,7 +4606,7 @@ function ActionButton({
4559
4606
  ...rest
4560
4607
  }) {
4561
4608
  return /* @__PURE__ */ React54__default.default.createElement(button.Button, _extends10({
4562
- className: classnames14__default.default(ActionButton_default.button, variant === "primary" ? ActionButton_default.primaryButton : ActionButton_default.secondaryButton, className)
4609
+ className: classnames13__default.default(ActionButton_default.button, variant === "primary" ? ActionButton_default.primaryButton : ActionButton_default.secondaryButton, className)
4563
4610
  }, rest));
4564
4611
  }
4565
4612
 
@@ -4581,7 +4628,7 @@ function Dialog({
4581
4628
  }, /* @__PURE__ */ React54__default.default.createElement(dialog.Dialog.Portal, null, /* @__PURE__ */ React54__default.default.createElement(dialog.Dialog.Backdrop, {
4582
4629
  className: Dialog_default.backdrop
4583
4630
  }), /* @__PURE__ */ React54__default.default.createElement(dialog.Dialog.Popup, {
4584
- className: classnames14__default.default(Dialog_default.popup, className)
4631
+ className: classnames13__default.default(Dialog_default.popup, className)
4585
4632
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
4586
4633
  className: Dialog_default.header
4587
4634
  }, /* @__PURE__ */ React54__default.default.createElement(dialog.Dialog.Title, {
@@ -4690,7 +4737,7 @@ function DraggableList({
4690
4737
  const DndContext2 = core.DndContext;
4691
4738
  return /* @__PURE__ */ React54__default.default.createElement("div", {
4692
4739
  ref: containerRef,
4693
- className: classnames14__default.default(DraggableList_default.draggableListContainer, className)
4740
+ className: classnames13__default.default(DraggableList_default.draggableListContainer, className)
4694
4741
  }, /* @__PURE__ */ React54__default.default.createElement(DndContext2, {
4695
4742
  sensors,
4696
4743
  collisionDetection: core.closestCenter,
@@ -4747,7 +4794,7 @@ function SearchBar({
4747
4794
  onKeyDown
4748
4795
  }) {
4749
4796
  return /* @__PURE__ */ React54__default.default.createElement("div", {
4750
- className: classnames14__default.default(SearchBar_default.searchBar, className)
4797
+ className: classnames13__default.default(SearchBar_default.searchBar, className)
4751
4798
  }, /* @__PURE__ */ React54__default.default.createElement(icons.Search, {
4752
4799
  className: SearchBar_default.searchIcon
4753
4800
  }), /* @__PURE__ */ React54__default.default.createElement(input.Input, {
@@ -4928,7 +4975,7 @@ function AvailableColumnsList({
4928
4975
  return /* @__PURE__ */ React54__default.default.createElement("div", {
4929
4976
  className: ColumnConfigDialog_default.availableColumnsContainer
4930
4977
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
4931
- className: classnames14__default.default(ColumnConfigDialog_default.sectionHeader, ColumnConfigDialog_default.sectionTitle)
4978
+ className: classnames13__default.default(ColumnConfigDialog_default.sectionHeader, ColumnConfigDialog_default.sectionTitle)
4932
4979
  }, "Add or Remove Columns"), /* @__PURE__ */ React54__default.default.createElement(SearchBar, {
4933
4980
  value: searchQuery,
4934
4981
  onChange: onSearchChange,
@@ -5080,7 +5127,7 @@ function MultiColumnSortDialog({
5080
5127
  content: /* @__PURE__ */ React54__default.default.createElement("div", {
5081
5128
  className: MultiColumnSortDialog_default.sortColumnItem
5082
5129
  }, /* @__PURE__ */ React54__default.default.createElement("span", {
5083
- className: classnames14__default.default(MultiColumnSortDialog_default.sortColumnName, MultiColumnSortDialog_default.truncate)
5130
+ className: classnames13__default.default(MultiColumnSortDialog_default.sortColumnName, MultiColumnSortDialog_default.truncate)
5084
5131
  }, item.name), /* @__PURE__ */ React54__default.default.createElement(button.Button, {
5085
5132
  className: MultiColumnSortDialog_default.sortDirectionButton,
5086
5133
  onClick: () => handleToggleSortDirection(item.id),
@@ -5154,7 +5201,7 @@ function AvailableColumnMenuItem({
5154
5201
  }) {
5155
5202
  const onClick = React54.useCallback(() => onAddColumn(column), [onAddColumn, column]);
5156
5203
  return /* @__PURE__ */ React54__default.default.createElement(menu.Menu.Item, {
5157
- className: classnames14__default.default(MultiColumnSortDialog_default.dropdownItem, MultiColumnSortDialog_default.truncate),
5204
+ className: classnames13__default.default(MultiColumnSortDialog_default.dropdownItem, MultiColumnSortDialog_default.truncate),
5158
5205
  onClick
5159
5206
  }, column.name);
5160
5207
  }
@@ -5186,7 +5233,7 @@ function HeaderMenuItem({
5186
5233
  }) {
5187
5234
  return /* @__PURE__ */ React54__default.default.createElement(menu.Menu.Item, {
5188
5235
  closeOnClick: true,
5189
- className: classnames14__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderMenuItem, active && TableHeaderWithPopover_default.osdkHeaderActiveMenuItem),
5236
+ className: classnames13__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderMenuItem, active && TableHeaderWithPopover_default.osdkHeaderActiveMenuItem),
5190
5237
  onClick
5191
5238
  }, /* @__PURE__ */ React54__default.default.createElement(Icon, {
5192
5239
  className: TableHeaderWithPopover_default.osdkHeaderIcon,
@@ -5275,17 +5322,17 @@ function TableHeaderWithPopover({
5275
5322
  open: isOpen,
5276
5323
  onOpenChange: setIsOpen
5277
5324
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
5278
- className: classnames14__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContainer),
5325
+ className: classnames13__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContainer),
5279
5326
  onContextMenu: handleInteraction
5280
5327
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
5281
- className: classnames14__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentLeft)
5328
+ className: classnames13__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentLeft)
5282
5329
  }, isColumnPinned && /* @__PURE__ */ React54__default.default.createElement(icons.Pin, {
5283
5330
  className: TableHeaderWithPopover_default.osdkHeaderIcon,
5284
5331
  color: "currentColor"
5285
5332
  }), /* @__PURE__ */ React54__default.default.createElement(TableHeaderContent, {
5286
5333
  header
5287
5334
  })), /* @__PURE__ */ React54__default.default.createElement("div", {
5288
- className: classnames14__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentRight)
5335
+ className: classnames13__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkContentGap, TableHeaderWithPopover_default.osdkHeaderContentRight)
5289
5336
  }, isSorted && /* @__PURE__ */ React54__default.default.createElement("div", {
5290
5337
  className: TableHeaderWithPopover_default.osdkCenterContainer
5291
5338
  }, isSorted === "asc" ? /* @__PURE__ */ React54__default.default.createElement(icons.SortAlphabetical, {
@@ -5296,7 +5343,7 @@ function TableHeaderWithPopover({
5296
5343
  className: TableHeaderWithPopover_default.sortIndex
5297
5344
  }, sortIndex + 1)), hasAnyMenuItems && /* @__PURE__ */ React54__default.default.createElement(menu.Menu.Trigger, {
5298
5345
  "aria-label": `Open header menu for column with id=${header.column.id}`,
5299
- className: classnames14__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkHeaderPopoverTrigger)
5346
+ className: classnames13__default.default(TableHeaderWithPopover_default.osdkCenterContainer, TableHeaderWithPopover_default.osdkHeaderPopoverTrigger)
5300
5347
  }, /* @__PURE__ */ React54__default.default.createElement(icons.ChevronDown, {
5301
5348
  className: TableHeaderWithPopover_default.osdkHeaderIcon
5302
5349
  }))), /* @__PURE__ */ React54__default.default.createElement(menu.Menu.Portal, {
@@ -5441,7 +5488,9 @@ function TableHeader({
5441
5488
  return /* @__PURE__ */ React54__default.default.createElement("th", {
5442
5489
  key: header.id,
5443
5490
  "data-pinned": header.column.getIsPinned(),
5444
- className: TableHeader_default.osdkTableHeaderCell,
5491
+ className: classnames13__default.default(TableHeader_default.osdkTableHeaderCell, {
5492
+ [TableHeader_default.osdkTableSelectionHeaderCell]: isSelectColumn
5493
+ }),
5445
5494
  style: columnStyles
5446
5495
  }, header.isPlaceholder ? null : isSelectColumn ? /* @__PURE__ */ React54__default.default.createElement(TableHeaderContent, {
5447
5496
  header
@@ -5533,7 +5582,7 @@ function LoadingStateTable({
5533
5582
  width
5534
5583
  }
5535
5584
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
5536
- className: classnames14__default.default(TableHeader_default.osdkLoadingHeaderCell, LoadingCell_default.osdkCellSkeleton)
5585
+ className: classnames13__default.default(TableHeader_default.osdkLoadingHeaderCell, LoadingCell_default.osdkCellSkeleton)
5537
5586
  }));
5538
5587
  }))), /* @__PURE__ */ React54__default.default.createElement("tbody", {
5539
5588
  className: TableBody_default.osdkTableBody,
@@ -5880,7 +5929,7 @@ function BaseTable({
5880
5929
  };
5881
5930
  }, []);
5882
5931
  return /* @__PURE__ */ React54__default.default.createElement("div", {
5883
- className: classnames14__default.default(Table_default.osdkTableWrapper, className)
5932
+ className: classnames13__default.default(Table_default.osdkTableWrapper, className)
5884
5933
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
5885
5934
  ref: tableContainerRef,
5886
5935
  className: Table_default.osdkTableContainer,