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

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 (133) hide show
  1. package/CHANGELOG.md +35 -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 +30 -11
  32. package/build/browser/filter-list/hooks/useFilterListState.js.map +1 -1
  33. package/build/browser/filter-list/inputs/LinkedPropertyInput.js +1 -1
  34. package/build/browser/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
  35. package/build/browser/filter-list/utils/filterStateToWhereClause.js +120 -105
  36. package/build/browser/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  37. package/build/browser/filter-list/utils/getFilterKey.js +1 -1
  38. package/build/browser/filter-list/utils/getFilterKey.js.map +1 -1
  39. package/build/browser/filter-list/utils/getFilterLabel.js +1 -1
  40. package/build/browser/filter-list/utils/getFilterLabel.js.map +1 -1
  41. package/build/browser/object-table/TableHeader.js +4 -1
  42. package/build/browser/object-table/TableHeader.js.map +1 -1
  43. package/build/browser/object-table/TableHeader.module.css +2 -1
  44. package/build/browser/object-table/TableHeader.module.css.js +1 -0
  45. package/build/browser/{filter-list/utils → shared}/assertUnreachable.js +1 -1
  46. package/build/browser/{filter-list/utils → shared}/assertUnreachable.js.map +1 -1
  47. package/build/browser/shared/typedMemo.js +25 -0
  48. package/build/browser/shared/typedMemo.js.map +1 -0
  49. package/build/browser/styles.css +72 -55
  50. package/build/cjs/public/experimental.cjs +293 -244
  51. package/build/cjs/public/experimental.cjs.map +1 -1
  52. package/build/cjs/public/experimental.css +64 -47
  53. package/build/cjs/public/experimental.css.map +1 -1
  54. package/build/esm/action-form/ActionForm.js +109 -0
  55. package/build/esm/action-form/ActionForm.js.map +1 -0
  56. package/build/esm/action-form/ActionFormApi.js.map +1 -1
  57. package/build/esm/action-form/BaseForm.js +74 -0
  58. package/build/esm/action-form/BaseForm.js.map +1 -0
  59. package/build/esm/action-form/FormFieldApi.js.map +1 -1
  60. package/build/esm/action-form/fields/FieldBridge.js +45 -0
  61. package/build/esm/action-form/fields/FieldBridge.js.map +1 -0
  62. package/build/esm/action-form/fields/FormFieldRenderer.js +68 -0
  63. package/build/esm/action-form/fields/FormFieldRenderer.js.map +1 -0
  64. package/build/esm/action-form/fields/TextInputField.js +38 -0
  65. package/build/esm/action-form/fields/TextInputField.js.map +1 -0
  66. package/build/esm/action-form/utils/coerceFieldValue.js +93 -0
  67. package/build/esm/action-form/utils/coerceFieldValue.js.map +1 -0
  68. package/build/esm/action-form/utils/getDefaultFieldComponent.js +56 -0
  69. package/build/esm/action-form/utils/getDefaultFieldComponent.js.map +1 -0
  70. package/build/esm/action-form/utils/getDefaultFieldDefinitions.js +33 -0
  71. package/build/esm/action-form/utils/getDefaultFieldDefinitions.js.map +1 -0
  72. package/build/esm/filter-list/base/BaseFilterList.js +23 -11
  73. package/build/esm/filter-list/base/BaseFilterList.js.map +1 -1
  74. package/build/esm/filter-list/base/FilterIcons.js +48 -13
  75. package/build/esm/filter-list/base/FilterIcons.js.map +1 -1
  76. package/build/esm/filter-list/base/FilterList.module.css +57 -13
  77. package/build/esm/filter-list/base/FilterListHeader.js +10 -15
  78. package/build/esm/filter-list/base/FilterListHeader.js.map +1 -1
  79. package/build/esm/filter-list/base/FilterListHeader.module.css +13 -41
  80. package/build/esm/filter-list/hooks/useFilterListState.js +30 -11
  81. package/build/esm/filter-list/hooks/useFilterListState.js.map +1 -1
  82. package/build/esm/filter-list/inputs/LinkedPropertyInput.js +1 -1
  83. package/build/esm/filter-list/inputs/LinkedPropertyInput.js.map +1 -1
  84. package/build/esm/filter-list/utils/filterStateToWhereClause.js +120 -105
  85. package/build/esm/filter-list/utils/filterStateToWhereClause.js.map +1 -1
  86. package/build/esm/filter-list/utils/getFilterKey.js +1 -1
  87. package/build/esm/filter-list/utils/getFilterKey.js.map +1 -1
  88. package/build/esm/filter-list/utils/getFilterLabel.js +1 -1
  89. package/build/esm/filter-list/utils/getFilterLabel.js.map +1 -1
  90. package/build/esm/object-table/TableHeader.js +4 -1
  91. package/build/esm/object-table/TableHeader.js.map +1 -1
  92. package/build/esm/object-table/TableHeader.module.css +2 -1
  93. package/build/esm/{filter-list/utils → shared}/assertUnreachable.js +1 -1
  94. package/build/esm/{filter-list/utils → shared}/assertUnreachable.js.map +1 -1
  95. package/build/esm/shared/typedMemo.js +25 -0
  96. package/build/esm/shared/typedMemo.js.map +1 -0
  97. package/build/types/action-form/ActionForm.d.ts +4 -0
  98. package/build/types/action-form/ActionForm.d.ts.map +1 -0
  99. package/build/types/action-form/ActionFormApi.d.ts +48 -32
  100. package/build/types/action-form/ActionFormApi.d.ts.map +1 -1
  101. package/build/types/action-form/BaseForm.d.ts +3 -0
  102. package/build/types/action-form/BaseForm.d.ts.map +1 -0
  103. package/build/types/action-form/FormFieldApi.d.ts +58 -18
  104. package/build/types/action-form/FormFieldApi.d.ts.map +1 -1
  105. package/build/types/action-form/fields/FieldBridge.d.ts +9 -0
  106. package/build/types/action-form/fields/FieldBridge.d.ts.map +1 -0
  107. package/build/types/action-form/fields/FormFieldRenderer.d.ts +8 -0
  108. package/build/types/action-form/fields/FormFieldRenderer.d.ts.map +1 -0
  109. package/build/types/action-form/fields/TextInputField.d.ts +3 -0
  110. package/build/types/action-form/fields/TextInputField.d.ts.map +1 -0
  111. package/build/types/action-form/utils/coerceFieldValue.d.ts +10 -0
  112. package/build/types/action-form/utils/coerceFieldValue.d.ts.map +1 -0
  113. package/build/types/action-form/utils/getDefaultFieldComponent.d.ts +6 -0
  114. package/build/types/action-form/utils/getDefaultFieldComponent.d.ts.map +1 -0
  115. package/build/types/action-form/utils/getDefaultFieldDefinitions.d.ts +6 -0
  116. package/build/types/action-form/utils/getDefaultFieldDefinitions.d.ts.map +1 -0
  117. package/build/types/filter-list/base/BaseFilterList.d.ts.map +1 -1
  118. package/build/types/filter-list/base/FilterIcons.d.ts +7 -0
  119. package/build/types/filter-list/base/FilterIcons.d.ts.map +1 -1
  120. package/build/types/filter-list/base/FilterListHeader.d.ts.map +1 -1
  121. package/build/types/filter-list/hooks/useFilterListState.d.ts.map +1 -1
  122. package/build/types/filter-list/inputs/LinkedPropertyInput.d.ts.map +1 -1
  123. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts +5 -1
  124. package/build/types/filter-list/utils/filterStateToWhereClause.d.ts.map +1 -1
  125. package/build/types/filter-list/utils/getFilterKey.d.ts.map +1 -1
  126. package/build/types/filter-list/utils/getFilterLabel.d.ts.map +1 -1
  127. package/build/types/object-table/TableHeader.d.ts.map +1 -1
  128. package/build/types/shared/assertUnreachable.d.ts.map +1 -0
  129. package/build/types/shared/typedMemo.d.ts +6 -0
  130. package/build/types/shared/typedMemo.d.ts.map +1 -0
  131. package/package.json +7 -6
  132. package/build/types/filter-list/utils/assertUnreachable.d.ts.map +0 -1
  133. /package/build/types/{filter-list/utils → shared}/assertUnreachable.d.ts +0 -0
@@ -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,
@@ -729,6 +745,11 @@ function ToggleInputInner({
729
745
  }
730
746
  var ToggleInput = /* @__PURE__ */ React54.memo(ToggleInputInner);
731
747
 
748
+ // src/shared/assertUnreachable.ts
749
+ function assertUnreachable(value) {
750
+ throw new Error(`Unhandled value: ${String(value)}`);
751
+ }
752
+
732
753
  // src/base-components/checkbox/Checkbox.module.css
733
754
  var Checkbox_default = {};
734
755
 
@@ -749,10 +770,10 @@ function Checkbox({
749
770
  ...rest
750
771
  }) {
751
772
  return /* @__PURE__ */ React54__default.default.createElement(checkbox.Checkbox.Root, _extends3({
752
- className: classnames14__default.default(Checkbox_default.osdkCheckboxRoot, className),
773
+ className: classnames13__default.default(Checkbox_default.osdkCheckboxRoot, className),
753
774
  indeterminate
754
775
  }, rest), /* @__PURE__ */ React54__default.default.createElement(checkbox.Checkbox.Indicator, _extends3({}, indicatorProps, {
755
- className: classnames14__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
776
+ className: classnames13__default.default(Checkbox_default.osdkCheckboxIndicator, indicatorProps?.className)
756
777
  }), indeterminate ? /* @__PURE__ */ React54__default.default.createElement(icons.Minus, {
757
778
  color: "currentColor"
758
779
  }) : /* @__PURE__ */ React54__default.default.createElement(icons.Tick, {
@@ -796,7 +817,7 @@ function CheckboxListInputInner({
796
817
  }
797
818
  }, [allSelected, displayValues, onChange]);
798
819
  return /* @__PURE__ */ React54__default.default.createElement("div", {
799
- className: classnames14__default.default(CheckboxListInput_default.checkboxList, className),
820
+ className: classnames13__default.default(CheckboxListInput_default.checkboxList, className),
800
821
  style,
801
822
  "data-loading": isLoading
802
823
  }, error && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -990,7 +1011,7 @@ function RangeInputInner({
990
1011
  debouncedMaxChange(newValue);
991
1012
  }, [debouncedMaxChange]);
992
1013
  return /* @__PURE__ */ React54__default.default.createElement("div", {
993
- className: classnames14__default.default(RangeInput_default.rangeInput, className),
1014
+ className: classnames13__default.default(RangeInput_default.rangeInput, className),
994
1015
  style,
995
1016
  "data-loading": isLoading
996
1017
  }, showHistogram && buckets.length > 0 && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -1104,7 +1125,7 @@ function ListogramInputInner({
1104
1125
  }, [values, maxVisibleItems, isExpanded]);
1105
1126
  const hasMore = maxVisibleItems != null && values.length > maxVisibleItems;
1106
1127
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1107
- className: classnames14__default.default(ListogramInput_default.listogram, className),
1128
+ className: classnames13__default.default(ListogramInput_default.listogram, className),
1108
1129
  style,
1109
1130
  "data-loading": isLoading
1110
1131
  }, isLoading && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -1184,7 +1205,7 @@ function MultiDateInputInner({
1184
1205
  }
1185
1206
  }, [addDate]);
1186
1207
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1187
- className: classnames14__default.default(MultiDateInput_default.multiDate, className),
1208
+ className: classnames13__default.default(MultiDateInput_default.multiDate, className),
1188
1209
  style
1189
1210
  }, selectedDates.length > 0 && /* @__PURE__ */ React54__default.default.createElement("div", {
1190
1211
  className: shared_default.tagContainer
@@ -1230,7 +1251,7 @@ function ComboboxInput({
1230
1251
  ...rest
1231
1252
  }) {
1232
1253
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1233
- className: classnames14__default.default(Combobox_default.osdkComboboxInputWrapper, className)
1254
+ className: classnames13__default.default(Combobox_default.osdkComboboxInputWrapper, className)
1234
1255
  }, /* @__PURE__ */ React54__default.default.createElement(icons.Search, {
1235
1256
  className: Combobox_default.osdkComboboxSearchIcon,
1236
1257
  color: "currentColor"
@@ -1244,7 +1265,7 @@ function ComboboxPositioner({
1244
1265
  ...rest
1245
1266
  }) {
1246
1267
  return /* @__PURE__ */ React54__default.default.createElement(combobox.Combobox.Positioner, _extends6({
1247
- className: classnames14__default.default(Combobox_default.osdkComboboxPositioner, className),
1268
+ className: classnames13__default.default(Combobox_default.osdkComboboxPositioner, className),
1248
1269
  sideOffset: 4
1249
1270
  }, rest), children);
1250
1271
  }
@@ -1254,7 +1275,7 @@ function ComboboxPopup({
1254
1275
  ...rest
1255
1276
  }) {
1256
1277
  return /* @__PURE__ */ React54__default.default.createElement(combobox.Combobox.Popup, _extends6({
1257
- className: classnames14__default.default(Combobox_default.osdkComboboxPopup, className)
1278
+ className: classnames13__default.default(Combobox_default.osdkComboboxPopup, className)
1258
1279
  }, rest), children);
1259
1280
  }
1260
1281
  function ComboboxItem({
@@ -1263,7 +1284,7 @@ function ComboboxItem({
1263
1284
  ...rest
1264
1285
  }) {
1265
1286
  return /* @__PURE__ */ React54__default.default.createElement(combobox.Combobox.Item, _extends6({
1266
- className: classnames14__default.default(Combobox_default.osdkComboboxItem, className)
1287
+ className: classnames13__default.default(Combobox_default.osdkComboboxItem, className)
1267
1288
  }, rest), children);
1268
1289
  }
1269
1290
  function ComboboxClear({
@@ -1271,7 +1292,7 @@ function ComboboxClear({
1271
1292
  ...rest
1272
1293
  }) {
1273
1294
  return /* @__PURE__ */ React54__default.default.createElement(combobox.Combobox.Clear, _extends6({
1274
- className: classnames14__default.default(Combobox_default.osdkComboboxClear, className),
1295
+ className: classnames13__default.default(Combobox_default.osdkComboboxClear, className),
1275
1296
  "aria-label": "Clear all"
1276
1297
  }, rest), /* @__PURE__ */ React54__default.default.createElement(icons.Cross, {
1277
1298
  color: "currentColor"
@@ -1282,7 +1303,7 @@ function ComboboxEmpty({
1282
1303
  className
1283
1304
  }) {
1284
1305
  return /* @__PURE__ */ React54__default.default.createElement(combobox.Combobox.Empty, {
1285
- className: classnames14__default.default(Combobox_default.osdkComboboxEmpty, className)
1306
+ className: classnames13__default.default(Combobox_default.osdkComboboxEmpty, className)
1286
1307
  }, children);
1287
1308
  }
1288
1309
  var Combobox = {
@@ -1325,7 +1346,7 @@ function MultiSelectInputInner({
1325
1346
  const displayedTags = selectedValues.slice(0, maxDisplayedTags);
1326
1347
  const remainingCount = selectedValues.length - maxDisplayedTags;
1327
1348
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1328
- className: classnames14__default.default(MultiSelectInput_default.multiSelect, className),
1349
+ className: classnames13__default.default(MultiSelectInput_default.multiSelect, className),
1329
1350
  style,
1330
1351
  "data-loading": isLoading
1331
1352
  }, error && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -1390,7 +1411,7 @@ function NullValueWrapperInner({
1390
1411
  onIncludeNullChange(!includeNull);
1391
1412
  }, [includeNull, onIncludeNullChange]);
1392
1413
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1393
- className: classnames14__default.default(NullValueWrapper_default.nullWrapper, className),
1414
+ className: classnames13__default.default(NullValueWrapper_default.nullWrapper, className),
1394
1415
  style
1395
1416
  }, children, /* @__PURE__ */ React54__default.default.createElement("div", {
1396
1417
  className: NullValueWrapper_default.nullValueRow,
@@ -1470,7 +1491,7 @@ function SingleDateInputInner({
1470
1491
  onChange(void 0);
1471
1492
  }, [onChange]);
1472
1493
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1473
- className: classnames14__default.default(SingleDateInput_default.singleDate, className),
1494
+ className: classnames13__default.default(SingleDateInput_default.singleDate, className),
1474
1495
  style
1475
1496
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
1476
1497
  className: SingleDateInput_default.dateContainer
@@ -1517,7 +1538,7 @@ function SelectTrigger({
1517
1538
  ...rest
1518
1539
  }) {
1519
1540
  return /* @__PURE__ */ React54__default.default.createElement(select.Select.Trigger, _extends8({
1520
- className: classnames14__default.default(Select_default.osdkSelectTrigger, className)
1541
+ className: classnames13__default.default(Select_default.osdkSelectTrigger, className)
1521
1542
  }, 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
1543
  className: Select_default.osdkSelectIcon
1523
1544
  }, /* @__PURE__ */ React54__default.default.createElement(icons.CaretDown, {
@@ -1530,7 +1551,7 @@ function SelectPositioner({
1530
1551
  ...rest
1531
1552
  }) {
1532
1553
  return /* @__PURE__ */ React54__default.default.createElement(select.Select.Positioner, _extends8({
1533
- className: classnames14__default.default(Select_default.osdkSelectPositioner, className),
1554
+ className: classnames13__default.default(Select_default.osdkSelectPositioner, className),
1534
1555
  sideOffset: 4
1535
1556
  }, rest), children);
1536
1557
  }
@@ -1540,7 +1561,7 @@ function SelectPopup({
1540
1561
  ...rest
1541
1562
  }) {
1542
1563
  return /* @__PURE__ */ React54__default.default.createElement(select.Select.Popup, _extends8({
1543
- className: classnames14__default.default(Select_default.osdkSelectPopup, className)
1564
+ className: classnames13__default.default(Select_default.osdkSelectPopup, className)
1544
1565
  }, rest), children);
1545
1566
  }
1546
1567
  function SelectItem({
@@ -1549,7 +1570,7 @@ function SelectItem({
1549
1570
  ...rest
1550
1571
  }) {
1551
1572
  return /* @__PURE__ */ React54__default.default.createElement(select.Select.Item, _extends8({
1552
- className: classnames14__default.default(Select_default.osdkSelectItem, className)
1573
+ className: classnames13__default.default(Select_default.osdkSelectItem, className)
1553
1574
  }, rest), /* @__PURE__ */ React54__default.default.createElement(select.Select.ItemText, null, children));
1554
1575
  }
1555
1576
  var Select = {
@@ -1595,7 +1616,7 @@ function SingleSelectInputInner({
1595
1616
  return result;
1596
1617
  }, [values, showCounts]);
1597
1618
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1598
- className: classnames14__default.default(SingleSelectInput_default.singleSelect, className),
1619
+ className: classnames13__default.default(SingleSelectInput_default.singleSelect, className),
1599
1620
  style,
1600
1621
  "data-loading": isLoading
1601
1622
  }, isLoading && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -1710,7 +1731,7 @@ function TextTagsInputInner({
1710
1731
  }
1711
1732
  }, [tags, onChange]);
1712
1733
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1713
- className: classnames14__default.default(TextTagsInput_default.textTags, className),
1734
+ className: classnames13__default.default(TextTagsInput_default.textTags, className),
1714
1735
  style,
1715
1736
  "data-loading": isLoading
1716
1737
  }, error && /* @__PURE__ */ React54__default.default.createElement("div", {
@@ -1771,7 +1792,7 @@ function TimelineInputInner({
1771
1792
  const startInputMax = React54.useMemo(() => endDate ?? maxDate, [endDate, maxDate]);
1772
1793
  const endInputMin = React54.useMemo(() => startDate ?? minDate, [startDate, minDate]);
1773
1794
  return /* @__PURE__ */ React54__default.default.createElement("div", {
1774
- className: classnames14__default.default(TimelineInput_default.timeline, className)
1795
+ className: classnames13__default.default(TimelineInput_default.timeline, className)
1775
1796
  }, /* @__PURE__ */ React54__default.default.createElement("div", {
1776
1797
  className: TimelineInput_default.labels
1777
1798
  }, /* @__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,11 +1915,6 @@ function createNullWhereClause(propertyKey) {
1894
1915
  };
1895
1916
  }
1896
1917
 
1897
- // src/filter-list/utils/assertUnreachable.ts
1898
- function assertUnreachable(value) {
1899
- throw new Error(`Unhandled value: ${String(value)}`);
1900
- }
1901
-
1902
1918
  // src/filter-list/utils/coerceFilterValue.ts
1903
1919
  function coerceToString(value) {
1904
1920
  if (value === void 0) return void 0;
@@ -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,