xmlui 0.9.14 → 0.9.16

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 (29) hide show
  1. package/dist/{apiInterceptorWorker-B9XuRkxC.mjs → apiInterceptorWorker-E5ylKYVg.mjs} +1 -1
  2. package/dist/{index-D82p1y9A.mjs → index-BjVxVHb3.mjs} +141 -77
  3. package/dist/index.css +33 -31
  4. package/dist/scripts/bin/build-lib.js +1 -1
  5. package/dist/scripts/src/components/List/List.js +10 -3
  6. package/dist/scripts/src/components/List/ListNative.js +8 -5
  7. package/dist/scripts/src/components/Select/Select.js +5 -2
  8. package/dist/scripts/src/components/Select/SelectNative.js +3 -3
  9. package/dist/scripts/src/components/Tabs/Tabs.js +6 -5
  10. package/dist/scripts/src/components/Tabs/TabsNative.js +6 -3
  11. package/dist/scripts/src/components-core/InspectorContext.js +4 -2
  12. package/dist/scripts/src/components-core/loader/ApiLoader.js +2 -2
  13. package/dist/scripts/src/components-core/loader/DataLoader.js +5 -4
  14. package/dist/scripts/src/components-core/loader/ExternalDataLoader.js +2 -2
  15. package/dist/scripts/src/components-core/loader/Loader.js +3 -8
  16. package/dist/scripts/src/components-core/loader/MockLoaderRenderer.js +3 -3
  17. package/dist/scripts/src/components-core/loader/PageableLoader.js +3 -7
  18. package/dist/scripts/src/components-core/rendering/renderChild.js +2 -1
  19. package/dist/scripts/src/components-core/theming/layout-resolver.js +4 -4
  20. package/dist/scripts/src/components-core/theming/themes/root.js +4 -1
  21. package/dist/scripts/src/components-core/theming/transformThemeVars.js +8 -0
  22. package/dist/scripts/src/components-core/utils/extractParam.js +7 -0
  23. package/dist/style.css +33 -23
  24. package/dist/xmlui-metadata.mjs +31 -16
  25. package/dist/xmlui-metadata.umd.js +31 -16
  26. package/dist/xmlui-standalone.umd.js +172 -106
  27. package/dist/xmlui.d.ts +25 -0
  28. package/dist/xmlui.mjs +6 -4
  29. package/package.json +1 -1
package/dist/index.css CHANGED
@@ -78,23 +78,15 @@
78
78
  }
79
79
  button {
80
80
  -webkit-appearance: button;
81
- background-color: transparent;
82
- background-image: none;
83
81
  }
84
82
  [type=button] {
85
83
  -webkit-appearance: button;
86
- background-color: transparent;
87
- background-image: none;
88
84
  }
89
85
  [type=reset] {
90
86
  -webkit-appearance: button;
91
- background-color: transparent;
92
- background-image: none;
93
87
  }
94
88
  [type=submit] {
95
89
  -webkit-appearance: button;
96
- background-color: transparent;
97
- background-image: none;
98
90
  }
99
91
  :-moz-focusring {
100
92
  outline: auto;
@@ -7132,76 +7124,86 @@ li .htmlOl {
7132
7124
  * This function allows other CSS modules to get the value of the CSS variable specified in $componentVariable.
7133
7125
  Optionally, you can provide a $fallbackValue to set the variable's value if that is not defined.
7134
7126
  */
7135
- ._tabs_1mgc2_13 {
7127
+ ._tabs_1ggvi_13 {
7136
7128
  display: flex;
7137
- flex: 1 1 auto;
7138
7129
  width: 100%;
7139
7130
  background-color: var(--xmlui-backgroundColor-Tabs);
7140
7131
  overflow: hidden;
7141
7132
  }
7142
- ._tabs_1mgc2_13[data-orientation=horizontal] {
7133
+ ._tabs_1ggvi_13[data-orientation=vertical] {
7143
7134
  flex-direction: row;
7144
7135
  }
7145
- ._tabs_1mgc2_13[data-orientation=vertical] {
7136
+ ._tabs_1ggvi_13[data-orientation=horizontal] {
7146
7137
  flex-direction: column;
7147
7138
  }
7148
7139
 
7149
- ._filler_1mgc2_27 {
7140
+ ._filler_1ggvi_26 {
7150
7141
  flex: 1 1 auto;
7151
7142
  }
7152
- ._filler_1mgc2_27[data-orientation=horizontal] {
7143
+ ._filler_1ggvi_26[data-orientation=vertical] {
7153
7144
  border-right-width: var(--xmlui-borderWidth-Tabs);
7154
7145
  border-right-style: solid;
7155
7146
  border-right-color: var(--xmlui-borderColor-Tabs);
7156
7147
  }
7157
- ._filler_1mgc2_27[data-orientation=vertical] {
7148
+ ._filler_1ggvi_26[data-orientation=horizontal] {
7158
7149
  border-bottom-width: var(--xmlui-borderWidth-Tabs);
7159
7150
  border-bottom-style: solid;
7160
7151
  border-bottom-color: var(--xmlui-borderColor-Tabs);
7161
7152
  }
7162
7153
 
7163
- ._tabTrigger_1mgc2_41 {
7164
- font-family: inherit;
7154
+ ._tabTrigger_1ggvi_40 {
7155
+ padding: var(--xmlui-padding-trigger-Tabs);
7156
+ padding-left: var(--xmlui-paddingLeft-trigger-Tabs, var(--xmlui-paddingHorizontal-trigger-Tabs, var(--xmlui-padding-trigger-Tabs)));
7157
+ padding-right: var(--xmlui-paddingRight-trigger-Tabs, var(--xmlui-paddingHorizontal-trigger-Tabs, var(--xmlui-padding-trigger-Tabs)));
7158
+ padding-top: var(--xmlui-paddingTop-trigger-Tabs, var(--xmlui-paddingVertical-trigger-Tabs, var(--xmlui-padding-trigger-Tabs)));
7159
+ padding-bottom: var(--xmlui-paddingBottom-trigger-Tabs, var(--xmlui-paddingVertical-trigger-Tabs, var(--xmlui-padding-trigger-Tabs)));
7165
7160
  color: var(--xmlui-textColor-trigger-Tabs);
7166
7161
  background-color: var(--xmlui-backgroundColor-trigger-Tabs);
7167
- padding: var(--xmlui-space-4);
7162
+ border-radius: var(--xmlui-borderRadius-trigger-Tabs);
7168
7163
  display: flex;
7169
7164
  align-items: center;
7170
7165
  justify-content: center;
7171
- font-size: 15px;
7166
+ font-size: var(--xmlui-fontSize-normal);
7172
7167
  line-height: 1;
7173
7168
  user-select: none;
7174
- border-color: transparent;
7169
+ border: var(--xmlui-border-trigger-Tabs);
7170
+ }
7171
+ ._tabTrigger_1ggvi_40._distributeEvenly_1ggvi_57 {
7172
+ flex: 1 1 auto;
7175
7173
  }
7176
- ._tabTrigger_1mgc2_41:hover {
7174
+ ._tabTrigger_1ggvi_40:hover {
7177
7175
  background-color: var(--xmlui-backgroundColor-trigger-Tabs--hover);
7178
7176
  }
7179
- ._tabTrigger_1mgc2_41[data-orientation=horizontal] {
7177
+ ._tabTrigger_1ggvi_40[data-orientation=vertical] {
7180
7178
  border-right-width: var(--xmlui-borderWidth-Tabs);
7181
7179
  border-right-style: solid;
7182
7180
  border-right-color: var(--xmlui-borderColor-Tabs);
7183
7181
  }
7184
- ._tabTrigger_1mgc2_41[data-orientation=horizontal][data-state=active] {
7182
+ ._tabTrigger_1ggvi_40[data-orientation=vertical][data-state=active] {
7185
7183
  border-right-width: var(--xmlui-borderWidth-Tabs);
7186
7184
  border-right-style: solid;
7187
7185
  border-right-color: var(--xmlui-borderColor-active-Tabs);
7186
+ background-color: var(--xmlui-backgroundColor-trigger-Tabs--active);
7188
7187
  }
7189
- ._tabTrigger_1mgc2_41[data-orientation=vertical] {
7188
+ ._tabTrigger_1ggvi_40[data-orientation=horizontal] {
7190
7189
  border-bottom-width: var(--xmlui-borderWidth-Tabs);
7191
7190
  border-bottom-style: solid;
7192
7191
  border-bottom-color: var(--xmlui-borderColor-Tabs);
7193
7192
  }
7194
- ._tabTrigger_1mgc2_41[data-orientation=vertical][data-state=active] {
7193
+ ._tabTrigger_1ggvi_40[data-orientation=horizontal][data-state=active] {
7195
7194
  border-bottom-width: var(--xmlui-borderWidth-Tabs);
7196
7195
  border-bottom-style: solid;
7197
7196
  border-bottom-color: var(--xmlui-borderColor-active-Tabs);
7197
+ background-color: var(--xmlui-backgroundColor-trigger-Tabs--active);
7198
7198
  }
7199
- ._tabTrigger_1mgc2_41:hover {
7199
+ ._tabTrigger_1ggvi_40:hover {
7200
7200
  cursor: pointer;
7201
7201
  }
7202
7202
 
7203
- ._tabsList_1mgc2_81 {
7203
+ ._tabsList_1ggvi_89 {
7204
7204
  background-color: var(--xmlui-backgroundColor-list-Tabs);
7205
+ border-radius: var(--xmlui-borderRadius-list-Tabs);
7206
+ border: var(--xmlui-border-list-Tabs);
7205
7207
  position: relative;
7206
7208
  z-index: 99;
7207
7209
  overflow: hidden;
@@ -7209,18 +7211,18 @@ li .htmlOl {
7209
7211
  flex-shrink: 0;
7210
7212
  scrollbar-width: thin;
7211
7213
  }
7212
- ._tabsList_1mgc2_81[data-orientation=horizontal] {
7214
+ ._tabsList_1ggvi_89[data-orientation=vertical] {
7213
7215
  flex-direction: column;
7214
7216
  }
7215
- ._tabsList_1mgc2_81[data-orientation=vertical] {
7217
+ ._tabsList_1ggvi_89[data-orientation=horizontal] {
7216
7218
  flex-direction: row;
7217
7219
  }
7218
7220
 
7219
- ._tabsList_1mgc2_81:hover {
7221
+ ._tabsList_1ggvi_89:hover {
7220
7222
  overflow: auto;
7221
7223
  }
7222
7224
 
7223
- ._tabsContent_1mgc2_101 {
7225
+ ._tabsContent_1ggvi_111 {
7224
7226
  flex-grow: 1;
7225
7227
  outline: none;
7226
7228
  }/*
@@ -99,7 +99,7 @@ const buildLib = (_a) => __awaiter(void 0, [_a], void 0, function* ({ watchMode,
99
99
  output: {
100
100
  footer: (chunk) => {
101
101
  if (chunk.name === "index" && chunk.fileName === umdFileName) {
102
- return `if(typeof window.xmlui !== "undefined"){window.xmlui.standalone.registerExtension(window['${env.npm_package_name}']);}`;
102
+ return `if(typeof window.xmlui !== "undefined"){window.xmlui.standalone.registerExtension(window['${env.npm_package_name}'].default || window['${env.npm_package_name}']);}`;
103
103
  }
104
104
  return "";
105
105
  },
@@ -71,7 +71,7 @@ exports.ListMd = (0, ComponentDefs_1.createMetadata)({
71
71
  defaultValue: true,
72
72
  },
73
73
  },
74
- childrenAsTemplate: 'itemTemplate',
74
+ childrenAsTemplate: "itemTemplate",
75
75
  apis: {
76
76
  scrollToTop: (0, ComponentDefs_1.d)("This method scrolls the list to the top."),
77
77
  scrollToBottom: (0, ComponentDefs_1.d)("This method scrolls the list to the bottom."),
@@ -80,6 +80,9 @@ exports.ListMd = (0, ComponentDefs_1.createMetadata)({
80
80
  },
81
81
  contextVars: {
82
82
  $item: (0, ComponentDefs_1.d)(`This property represents the value of an item in the data list.`),
83
+ $itemIndex: (0, metadata_helpers_1.dComponent)("This integer value represents the current row index (zero-based) while rendering children."),
84
+ $isFirst: (0, metadata_helpers_1.dComponent)("This boolean value indicates if the component renders its first item."),
85
+ $isLast: (0, metadata_helpers_1.dComponent)("This boolean value indicates if the component renders its last item."),
83
86
  },
84
87
  themeVars: (0, themeVars_1.parseScssVar)(List_module_scss_1.default.themeVars),
85
88
  });
@@ -87,8 +90,12 @@ exports.dynamicHeightListComponentRenderer = (0, renderers_1.createComponentRend
87
90
  const itemTemplate = node.props.itemTemplate;
88
91
  const hideEmptyGroups = extractValue.asOptionalBoolean(node.props.hideEmptyGroups, true);
89
92
  return ((0, jsx_runtime_1.jsx)(ListNative_1.ListNative, { registerComponentApi: registerComponentApi, style: layoutCss, loading: extractValue.asOptionalBoolean(node.props.loading), items: extractValue(node.props.items) || extractValue(node.props.data), limit: extractValue(node.props.limit), groupBy: extractValue(node.props.groupBy), orderBy: extractValue(node.props.orderBy), availableGroups: extractValue(node.props.availableGroups), scrollAnchor: node.props.scrollAnchor, pageInfo: extractValue(node.props.pageInfo), idKey: extractValue(node.props.idKey), requestFetchPrevPage: lookupEventHandler("requestFetchPrevPage"), requestFetchNextPage: lookupEventHandler("requestFetchNextPage"), emptyListPlaceholder: renderChild(node.props.emptyListTemplate), groupsInitiallyExpanded: extractValue.asOptionalBoolean(node.props.groupsInitiallyExpanded), defaultGroups: extractValue(node.props.defaultGroups), borderCollapse: extractValue.asOptionalBoolean(node.props.borderCollapse, true), itemRenderer: itemTemplate &&
90
- ((item, key) => {
91
- return ((0, jsx_runtime_1.jsx)(container_helpers_1.MemoizedItem, { node: itemTemplate, item: item, renderChild: renderChild, layoutContext: layoutContext }, key));
93
+ ((item, key, rowIndex, count) => {
94
+ return ((0, jsx_runtime_1.jsx)(container_helpers_1.MemoizedItem, { node: itemTemplate, item: item, renderChild: renderChild, layoutContext: layoutContext, contextVars: {
95
+ $itemIndex: rowIndex,
96
+ $isFirst: rowIndex === 0,
97
+ $isLast: rowIndex === count - 1,
98
+ } }, key));
92
99
  }), sectionRenderer: node.props.groupBy
93
100
  ? (item, key) => {
94
101
  var _a, _b, _c;
@@ -334,7 +334,7 @@ exports.ListNative = (0, react_1.forwardRef)(function DynamicHeightList({ items
334
334
  if (rows.length) {
335
335
  (_a = virtualizerRef.current) === null || _a === void 0 ? void 0 : _a.scrollToIndex(rows.length + 1, {
336
336
  align: "end",
337
- offset: scrollPaddingTop
337
+ offset: scrollPaddingTop,
338
338
  });
339
339
  }
340
340
  });
@@ -367,6 +367,7 @@ exports.ListNative = (0, react_1.forwardRef)(function DynamicHeightList({ items
367
367
  });
368
368
  }, [registerComponentApi, scrollToBottom, scrollToId, scrollToIndex, scrollToTop]);
369
369
  const rowTypeContextValue = (0, react_1.useCallback)((index) => rows[index]._row_type, [rows]);
370
+ const rowCount = (_a = rows === null || rows === void 0 ? void 0 : rows.length) !== null && _a !== void 0 ? _a : 0;
370
371
  return ((0, jsx_runtime_1.jsx)(ListItemTypeContext.Provider, { value: rowTypeContextValue, children: (0, jsx_runtime_1.jsx)(exports.ListContext.Provider, { value: expandContextValue, children: (0, jsx_runtime_1.jsxs)("div", { ref: rootRef, style: style, className: (0, classnames_1.default)(List_module_scss_1.default.outerWrapper, {
371
372
  [List_module_scss_1.default.hasOutsideScroll]: hasOutsideScroll,
372
373
  }), children: [loading && rows.length === 0 && ((0, jsx_runtime_1.jsx)("div", { className: List_module_scss_1.default.loadingWrapper, children: (0, jsx_runtime_1.jsx)(SpinnerNative_1.Spinner, {}) })), !loading &&
@@ -375,7 +376,9 @@ exports.ListNative = (0, react_1.forwardRef)(function DynamicHeightList({ items
375
376
  [List_module_scss_1.default.reverse]: scrollAnchor === "bottom",
376
377
  [List_module_scss_1.default.borderCollapse]: borderCollapse,
377
378
  [List_module_scss_1.default.sectioned]: groupBy !== undefined,
378
- }), "data-list-container": true, children: (0, jsx_runtime_1.jsx)(virtua_1.Virtualizer, { ref: virtualizerRef, scrollRef: scrollElementRef, shift: shift, onScroll: onScroll, startMargin: hasOutsideScroll ? ((((_a = parentRef.current) === null || _a === void 0 ? void 0 : _a.offsetTop) - ((_b = scrollRef.current) === null || _b === void 0 ? void 0 : _b.offsetTop)) || 0) : 0, item: Item, count: (_c = rows.length) !== null && _c !== void 0 ? _c : 0, children: (rowIndex) => {
379
+ }), "data-list-container": true, children: (0, jsx_runtime_1.jsx)(virtua_1.Virtualizer, { ref: virtualizerRef, scrollRef: scrollElementRef, shift: shift, onScroll: onScroll, startMargin: hasOutsideScroll
380
+ ? ((_b = parentRef.current) === null || _b === void 0 ? void 0 : _b.offsetTop) - ((_c = scrollRef.current) === null || _c === void 0 ? void 0 : _c.offsetTop) || 0
381
+ : 0, item: Item, count: rowCount, children: (rowIndex) => {
379
382
  const row = rows[rowIndex];
380
383
  const key = row[idKey];
381
384
  switch (row._row_type) {
@@ -384,12 +387,12 @@ exports.ListNative = (0, react_1.forwardRef)(function DynamicHeightList({ items
384
387
  case RowType.SECTION_FOOTER:
385
388
  return ((0, jsx_runtime_1.jsx)(react_1.Fragment, { children: (sectionFooterRenderer === null || sectionFooterRenderer === void 0 ? void 0 : sectionFooterRenderer(row, key)) || (0, jsx_runtime_1.jsx)("div", {}) }, key));
386
389
  default:
387
- return (0, jsx_runtime_1.jsx)(react_1.Fragment, { children: itemRenderer(row, key) || (0, jsx_runtime_1.jsx)("div", {}) }, key);
390
+ return ((0, jsx_runtime_1.jsx)(react_1.Fragment, { children: itemRenderer(row, key, rowIndex, rowCount) || (0, jsx_runtime_1.jsx)("div", {}) }, key));
388
391
  }
389
392
  } }) }))] }) }) }));
390
393
  });
391
394
  // --- Helper function for List item rendering
392
- function MemoizedSection({ node, renderChild, item, }) {
395
+ function MemoizedSection({ node, renderChild, item, contextVars = constants_1.EMPTY_OBJECT, }) {
393
396
  const { isExpanded, toggleExpanded } = (0, react_1.useContext)(exports.ListContext);
394
397
  const id = item.id;
395
398
  const expanded = isExpanded(id);
@@ -401,5 +404,5 @@ function MemoizedSection({ node, renderChild, item, }) {
401
404
  },
402
405
  };
403
406
  }, [expanded, id, toggleExpanded]);
404
- return ((0, jsx_runtime_1.jsx)(container_helpers_1.MemoizedItem, { node: node, renderChild: renderChild, item: item, context: sectionContext, itemKey: "$group", contextKey: "$group" }));
407
+ return ((0, jsx_runtime_1.jsx)(container_helpers_1.MemoizedItem, { node: node, renderChild: renderChild, item: item, context: sectionContext, itemKey: "$group", contextKey: "$group", contextVars: Object.assign(Object.assign({}, contextVars), { $isFirst: item.index === 0, $isLast: item.index === item.count - 1 }) }));
405
408
  }
@@ -88,8 +88,11 @@ exports.selectComponentRenderer = (0, renderers_1.createComponentRenderer)(COMP,
88
88
  return ((0, jsx_runtime_1.jsx)(container_helpers_1.MemoizedItem, { node: node.props.optionLabelTemplate, item: item, renderChild: renderChild }));
89
89
  }
90
90
  : undefined, optionRenderer: node.props.optionTemplate
91
- ? (item) => {
92
- return ((0, jsx_runtime_1.jsx)(container_helpers_1.MemoizedItem, { node: node.props.optionTemplate, item: item, renderChild: (...args) => ((0, jsx_runtime_1.jsx)(react_select_1.SelectItemText, { children: renderChild(...args) })) }));
91
+ ? (item, val, inTrigger) => {
92
+ return ((0, jsx_runtime_1.jsx)(container_helpers_1.MemoizedItem, { node: node.props.optionTemplate, item: item, contextVars: {
93
+ $selectedValue: val,
94
+ $inTrigger: inTrigger
95
+ }, renderChild: (...args) => ((0, jsx_runtime_1.jsx)(react_select_1.SelectItemText, { children: renderChild(...args) })) }));
93
96
  }
94
97
  : undefined, valueRenderer: node.props.valueTemplate
95
98
  ? (item, removeItem) => {
@@ -200,7 +200,7 @@ exports.ComboboxOption = (0, react_1.forwardRef)(function Combobox(option, forwa
200
200
  }, [selectedValue, value, multiSelect]);
201
201
  return ((0, jsx_runtime_1.jsx)(cmdk_1.CommandItem, { id: id, ref: forwardedRef, disabled: !enabled, value: `${value}`, className: Select_module_scss_1.default.multiComboboxOption, onSelect: () => {
202
202
  onChange(value);
203
- }, "data-state": selected ? "checked" : undefined, keywords: keywords, children: (0, jsx_runtime_1.jsx)("div", { className: Select_module_scss_1.default.multiComboboxOptionContent, children: optionRenderer ? (optionRenderer({ label, value, enabled, keywords })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [optionLabelRenderer ? optionLabelRenderer({ label, value }) : label, selected && (0, jsx_runtime_1.jsx)(IconNative_1.default, { name: "checkmark" })] })) }) }, id));
203
+ }, "data-state": selected ? "checked" : undefined, keywords: keywords, children: (0, jsx_runtime_1.jsx)("div", { className: Select_module_scss_1.default.multiComboboxOptionContent, children: optionRenderer ? (optionRenderer({ label, value, enabled, keywords }, selectedValue, false)) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [optionLabelRenderer ? optionLabelRenderer({ label, value }) : label, selected && (0, jsx_runtime_1.jsx)(IconNative_1.default, { name: "checkmark" })] })) }) }, id));
204
204
  });
205
205
  function HiddenOption(option) {
206
206
  const { onOptionRemove, onOptionAdd } = (0, OptionContext_1.useOption)();
@@ -218,7 +218,7 @@ function HiddenOption(option) {
218
218
  const SelectOption = react_1.default.forwardRef((option, ref) => {
219
219
  const { value, label, enabled = true } = option;
220
220
  const { onOptionRemove, onOptionAdd } = (0, OptionContext_1.useOption)();
221
- const { optionLabelRenderer, optionRenderer } = (0, SelectContext_1.useSelect)();
221
+ const { optionLabelRenderer, optionRenderer, value: selectedValue, multiSelect } = (0, SelectContext_1.useSelect)();
222
222
  (0, react_1.useLayoutEffect)(() => {
223
223
  onOptionAdd(option);
224
224
  return () => onOptionRemove(option);
@@ -227,6 +227,6 @@ const SelectOption = react_1.default.forwardRef((option, ref) => {
227
227
  label,
228
228
  value,
229
229
  enabled,
230
- })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_select_1.ItemText, { className: Select_module_scss_1.default.selectItemContent, children: optionLabelRenderer ? optionLabelRenderer({ value, label }) : label }), (0, jsx_runtime_1.jsx)("span", { className: Select_module_scss_1.default.selectItemIndicator, children: (0, jsx_runtime_1.jsx)(react_select_1.ItemIndicator, { children: (0, jsx_runtime_1.jsx)(IconNative_1.default, { name: "checkmark" }) }) })] })) }) }));
230
+ }, selectedValue, false)) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_select_1.ItemText, { className: Select_module_scss_1.default.selectItemContent, children: optionLabelRenderer ? optionLabelRenderer({ value, label }) : label }), (0, jsx_runtime_1.jsx)("span", { className: Select_module_scss_1.default.selectItemIndicator, children: (0, jsx_runtime_1.jsx)(react_select_1.ItemIndicator, { children: (0, jsx_runtime_1.jsx)(IconNative_1.default, { name: "checkmark" }) }) })] })) }) }));
231
231
  });
232
232
  SelectOption.displayName = "SelectOption";
@@ -34,15 +34,16 @@ exports.TabsMd = (0, ComponentDefs_1.createMetadata)({
34
34
  },
35
35
  themeVars: (0, themeVars_1.parseScssVar)(Tabs_module_scss_1.default.themeVars),
36
36
  defaultThemeVars: {
37
- [`backgroundColor-${COMP}`]: "$backgroundColor-primary",
37
+ // [`backgroundColor-${COMP}`]: "transparent",
38
38
  [`borderStyle-${COMP}`]: "solid",
39
39
  [`borderColor-${COMP}`]: "$borderColor",
40
40
  [`borderColor-active-${COMP}`]: "$color-primary",
41
41
  [`borderWidth-${COMP}`]: "2px",
42
- [`backgroundColor-trigger-${COMP}`]: "$backgroundColor-primary",
43
- [`backgroundColor-trigger-${COMP}--hover`]: "$color-primary-50",
44
- [`backgroundColor-list-${COMP}`]: "$color-primary-50",
45
- [`textColor-trigger-${COMP}`]: "$color-primary-100",
42
+ // [`backgroundColor-trigger-${COMP}`]: "transparent",
43
+ [`backgroundColor-trigger-${COMP}--hover`]: "$color-surface-100",
44
+ [`padding-trigger-${COMP}`]: "$space-4",
45
+ // [`backgroundColor-list-${COMP}`]: "$color-primary-50",
46
+ // [`textColor-trigger-${COMP}`]: "$color-primary-100",
46
47
  },
47
48
  });
48
49
  exports.tabsComponentRenderer = (0, renderers_1.createComponentRenderer)(COMP, exports.TabsMd, ({ extractValue, node, renderChild, layoutCss, registerComponentApi }) => {
@@ -43,7 +43,8 @@ const RTabs = __importStar(require("@radix-ui/react-tabs"));
43
43
  const Tabs_module_scss_1 = __importDefault(require("./Tabs.module.scss"));
44
44
  const misc_1 = require("../../components-core/utils/misc");
45
45
  const TabContext_1 = require("../Tabs/TabContext");
46
- exports.Tabs = (0, react_1.forwardRef)(function Tabs({ activeTab = 0, orientation = "vertical", tabRenderer, style, children, registerComponentApi, }, forwardedRef) {
46
+ const classnames_1 = __importDefault(require("classnames"));
47
+ exports.Tabs = (0, react_1.forwardRef)(function Tabs({ activeTab = 0, orientation = "horizontal", tabRenderer, style, children, registerComponentApi, className, distributeEvenly = false, }, forwardedRef) {
47
48
  const { tabItems, tabContextValue } = (0, TabContext_1.useTabContextValue)();
48
49
  const [activeIndex, setActiveIndex] = (0, react_1.useState)(activeTab);
49
50
  const currentTab = (0, react_1.useMemo)(() => {
@@ -73,11 +74,13 @@ exports.Tabs = (0, react_1.forwardRef)(function Tabs({ activeTab = 0, orientatio
73
74
  next,
74
75
  });
75
76
  }, [next, registerComponentApi]);
76
- return ((0, jsx_runtime_1.jsx)(TabContext_1.TabContext.Provider, { value: tabContextValue, children: (0, jsx_runtime_1.jsxs)(RTabs.Root, { ref: forwardedRef, className: Tabs_module_scss_1.default.tabs, value: `${currentTab}`, onValueChange: (tab) => {
77
+ return ((0, jsx_runtime_1.jsx)(TabContext_1.TabContext.Provider, { value: tabContextValue, children: (0, jsx_runtime_1.jsxs)(RTabs.Root, { ref: forwardedRef, className: (0, classnames_1.default)(Tabs_module_scss_1.default.tabs, className), value: `${currentTab}`, onValueChange: (tab) => {
77
78
  const newIndex = tabItems.findIndex((item) => item.id === tab);
78
79
  if (newIndex !== activeIndex) {
79
80
  tabContextValue.setActiveTabId(tab);
80
81
  setActiveIndex(newIndex);
81
82
  }
82
- }, orientation: orientation, style: style, children: [(0, jsx_runtime_1.jsxs)(RTabs.List, { className: Tabs_module_scss_1.default.tabsList, children: [tabItems.map((tab) => tabRenderer ? ((0, jsx_runtime_1.jsx)(RTabs.Trigger, { value: tab.id, children: tabRenderer({ label: tab.label, isActive: tab.id === currentTab }) }, tab.id)) : ((0, jsx_runtime_1.jsx)(RTabs.Trigger, { className: Tabs_module_scss_1.default.tabTrigger, value: tab.id, children: tab.label }, tab.id))), (0, jsx_runtime_1.jsx)("div", { className: Tabs_module_scss_1.default.filler, "data-orientation": orientation })] }), children] }) }));
83
+ }, orientation: orientation, style: style, children: [(0, jsx_runtime_1.jsxs)(RTabs.List, { className: Tabs_module_scss_1.default.tabsList, children: [tabItems.map((tab) => tabRenderer ? ((0, jsx_runtime_1.jsx)(RTabs.Trigger, { value: tab.id, asChild: true, children: tabRenderer({ label: tab.label, isActive: tab.id === currentTab }) }, tab.id)) : ((0, jsx_runtime_1.jsx)(RTabs.Trigger, { className: (0, classnames_1.default)(Tabs_module_scss_1.default.tabTrigger, {
84
+ [Tabs_module_scss_1.default.distributeEvenly]: distributeEvenly
85
+ }), value: tab.id, children: tab.label }, tab.id))), (!distributeEvenly && !tabRenderer) && (0, jsx_runtime_1.jsx)("div", { className: Tabs_module_scss_1.default.filler, "data-orientation": orientation })] }), children] }) }));
83
86
  });
@@ -19,7 +19,7 @@ const InspectorButton_module_scss_1 = __importDefault(require("./InspectorButton
19
19
  const ComponentRegistryContext_1 = require("../components/ComponentRegistryContext");
20
20
  // --- The context object that is used to store the inspector information.
21
21
  exports.InspectorContext = (0, react_1.createContext)(null);
22
- function InspectorProvider({ children, sources, }) {
22
+ function InspectorProvider({ children, sources, projectCompilation, }) {
23
23
  const { root } = (0, ThemeContext_1.useTheme)();
24
24
  const [inspectable, setInspectable] = (0, react_1.useState)({});
25
25
  const [inspectedNode, setInspectedNode] = (0, react_1.useState)(null);
@@ -60,8 +60,9 @@ function InspectorProvider({ children, sources, }) {
60
60
  devToolsSide,
61
61
  setDevToolsSide,
62
62
  devToolsEnabled: showCode,
63
+ projectCompilation: projectCompilation,
63
64
  };
64
- }, [devToolsSide, devToolsSize, sources, inspectedNode, showCode]);
65
+ }, [devToolsSide, devToolsSize, sources, inspectedNode, showCode, projectCompilation]);
65
66
  return ((0, jsx_runtime_1.jsxs)(exports.InspectorContext.Provider, { value: contextValue, children: [children, process.env.VITE_USER_COMPONENTS_Inspect !== "false" &&
66
67
  showCode &&
67
68
  inspectedNode !== null &&
@@ -145,6 +146,7 @@ function InspectButton({ inspectId, node, setInspectedNode, setShowCode, }) {
145
146
  function useDevTools() {
146
147
  const context = (0, react_1.useContext)(exports.InspectorContext);
147
148
  return {
149
+ projectCompilation: context === null || context === void 0 ? void 0 : context.projectCompilation,
148
150
  inspectedNode: context === null || context === void 0 ? void 0 : context.inspectedNode,
149
151
  sources: context === null || context === void 0 ? void 0 : context.sources,
150
152
  setIsOpen: context === null || context === void 0 ? void 0 : context.setIsOpen,
@@ -21,7 +21,7 @@ const Loader_1 = require("./Loader");
21
21
  /**
22
22
  * Represents a non-displayed React component, which handles the specified API loader
23
23
  */
24
- function ApiLoader({ loader, loaderInProgressChanged, loaderIsRefetchingChanged, loaderLoaded, loaderError, state, doNotRemoveNulls, }) {
24
+ function ApiLoader({ loader, loaderInProgressChanged, loaderIsRefetchingChanged, loaderLoaded, loaderError, state, doNotRemoveNulls, structuralSharing = true, }) {
25
25
  const appContext = (0, AppContext_1.useAppContext)();
26
26
  const url = (0, extractParam_1.extractParam)(state, loader.props.url, appContext);
27
27
  const loadable = !!url;
@@ -39,7 +39,7 @@ function ApiLoader({ loader, loaderInProgressChanged, loaderIsRefetchingChanged,
39
39
  }
40
40
  return responseObj;
41
41
  }), [doNotRemoveNulls, loadable, loader.props.raw, url]);
42
- return ((0, jsx_runtime_1.jsx)(Loader_1.Loader, { state: state, loader: loader, loaderInProgressChanged: loaderInProgressChanged, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaderLoaded, loaderError: loaderError, loaderFn: doLoad }));
42
+ return ((0, jsx_runtime_1.jsx)(Loader_1.Loader, { state: state, loader: loader, loaderInProgressChanged: loaderInProgressChanged, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaderLoaded, loaderError: loaderError, loaderFn: doLoad, structuralSharing: structuralSharing }));
43
43
  }
44
44
  const ApiLoaderMd = (0, ComponentDefs_1.createMetadata)({
45
45
  description: `Represents a loader that calls an API through an HTTP/HTTPS GET request`,
@@ -26,7 +26,7 @@ const PageableLoader_1 = require("../loader/PageableLoader");
26
26
  const Loader_1 = require("../loader/Loader");
27
27
  const AppContext_1 = require("../AppContext");
28
28
  const hooks_1 = require("../utils/hooks");
29
- function DataLoader({ loader, state, registerComponentApi, onLoaded, onError, loaderInProgressChanged, loaderIsRefetchingChanged, loaderLoaded, loaderError, transformResult, }) {
29
+ function DataLoader({ loader, state, registerComponentApi, onLoaded, onError, loaderInProgressChanged, loaderIsRefetchingChanged, loaderLoaded, loaderError, transformResult, structuralSharing = true, }) {
30
30
  const appContext = (0, AppContext_1.useAppContext)();
31
31
  const url = (0, extractParam_1.extractParam)(state, loader.props.url, appContext);
32
32
  const queryParamsInner = (0, react_1.useMemo)(() => {
@@ -290,7 +290,7 @@ function DataLoader({ loader, state, registerComponentApi, onLoaded, onError, lo
290
290
  }
291
291
  }), [appContext, loader.props.errorNotificationMessage, loaderError, onError]);
292
292
  const pollIntervalInSeconds = (0, extractParam_1.extractParam)(state, loader.props.pollIntervalInSeconds, appContext);
293
- return hasPaging ? ((0, jsx_runtime_1.jsx)(PageableLoader_1.PageableLoader, { queryId: queryId, state: state, loader: loader, loaderInProgressChanged: inProgress, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaded, loaderError: error, loaderFn: doLoad, registerComponentApi: registerComponentApi, pollIntervalInSeconds: pollIntervalInSeconds, onLoaded: onLoaded, transformResult: transformResult }, queryId === null || queryId === void 0 ? void 0 : queryId.join(""))) : ((0, jsx_runtime_1.jsx)(Loader_1.Loader, { queryId: queryId, state: state, loader: loader, loaderInProgressChanged: inProgress, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaded, loaderError: error, loaderFn: doLoad, pollIntervalInSeconds: pollIntervalInSeconds, registerComponentApi: registerComponentApi, onLoaded: onLoaded, transformResult: transformResult }, queryId === null || queryId === void 0 ? void 0 : queryId.join("")));
293
+ return hasPaging ? ((0, jsx_runtime_1.jsx)(PageableLoader_1.PageableLoader, { queryId: queryId, state: state, loader: loader, loaderInProgressChanged: inProgress, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaded, loaderError: error, loaderFn: doLoad, registerComponentApi: registerComponentApi, pollIntervalInSeconds: pollIntervalInSeconds, onLoaded: onLoaded, transformResult: transformResult, structuralSharing: structuralSharing }, queryId === null || queryId === void 0 ? void 0 : queryId.join(""))) : ((0, jsx_runtime_1.jsx)(Loader_1.Loader, { queryId: queryId, state: state, loader: loader, loaderInProgressChanged: inProgress, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaded, loaderError: error, loaderFn: doLoad, pollIntervalInSeconds: pollIntervalInSeconds, registerComponentApi: registerComponentApi, onLoaded: onLoaded, transformResult: transformResult, structuralSharing: structuralSharing }, queryId === null || queryId === void 0 ? void 0 : queryId.join("")));
294
294
  }
295
295
  exports.DataLoaderMd = (0, ComponentDefs_1.createMetadata)({
296
296
  description: "This component manages data fetching from a web API",
@@ -310,17 +310,18 @@ exports.DataLoaderMd = (0, ComponentDefs_1.createMetadata)({
310
310
  errorNotificationMessage: (0, ComponentDefs_1.d)("The message to show when an error occurs"),
311
311
  transformResult: (0, ComponentDefs_1.d)("Function for transforming the datasource result"),
312
312
  dataType: (0, ComponentDefs_1.d)("Type of data to fetch (default: json, or csv, or sql)"),
313
+ structuralSharing: (0, ComponentDefs_1.d)("Whether to use structural sharing for the data"),
313
314
  },
314
315
  events: {
315
316
  loaded: (0, ComponentDefs_1.d)("Event to trigger when the data is loaded"),
316
317
  error: (0, ComponentDefs_1.d)("This event fires when an error occurs while fetching data"),
317
318
  },
318
319
  });
319
- exports.dataLoaderRenderer = (0, renderers_1.createLoaderRenderer)("DataLoader", ({ loader, state, loaderLoaded, loaderInProgressChanged, loaderIsRefetchingChanged, loaderError, registerComponentApi, lookupAction, lookupSyncCallback, }) => {
320
+ exports.dataLoaderRenderer = (0, renderers_1.createLoaderRenderer)("DataLoader", ({ loader, state, loaderLoaded, loaderInProgressChanged, loaderIsRefetchingChanged, loaderError, registerComponentApi, lookupAction, lookupSyncCallback, extractValue }) => {
320
321
  var _a, _b, _c;
321
322
  // --- Check for required properties
322
323
  if (!((_a = loader.props) === null || _a === void 0 ? void 0 : _a.url) || !loader.props.url.trim()) {
323
324
  throw new Error("You must specify a non-empty (not whitespace-only) 'url' property for DataSource");
324
325
  }
325
- return ((0, jsx_runtime_1.jsx)(DataLoader, { loader: loader, state: state, loaderInProgressChanged: loaderInProgressChanged, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaderLoaded, loaderError: loaderError, registerComponentApi: registerComponentApi, transformResult: lookupSyncCallback(loader.props.transformResult), onLoaded: lookupAction((_b = loader.events) === null || _b === void 0 ? void 0 : _b.loaded, { eventName: "loaded" }), onError: lookupAction((_c = loader.events) === null || _c === void 0 ? void 0 : _c.error, { eventName: "error" }) }));
326
+ return ((0, jsx_runtime_1.jsx)(DataLoader, { loader: loader, state: state, loaderInProgressChanged: loaderInProgressChanged, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaderLoaded, loaderError: loaderError, registerComponentApi: registerComponentApi, transformResult: lookupSyncCallback(loader.props.transformResult), onLoaded: lookupAction((_b = loader.events) === null || _b === void 0 ? void 0 : _b.loaded, { eventName: "loaded" }), onError: lookupAction((_c = loader.events) === null || _c === void 0 ? void 0 : _c.error, { eventName: "error" }), structuralSharing: extractValue.asOptionalBoolean(loader.props.structuralSharing) }));
326
327
  }, exports.DataLoaderMd);
@@ -21,7 +21,7 @@ const Loader_1 = require("./Loader");
21
21
  /**
22
22
  * Represents a non-displayed React component, which handles the specified API loader
23
23
  */
24
- function ExternalDataLoader({ loader, loaderInProgressChanged, loaderIsRefetchingChanged, loaderError, loaderLoaded, state, doNotRemoveNulls, }) {
24
+ function ExternalDataLoader({ loader, loaderInProgressChanged, loaderIsRefetchingChanged, loaderError, loaderLoaded, state, doNotRemoveNulls, structuralSharing = true, }) {
25
25
  const appContext = (0, AppContext_1.useAppContext)();
26
26
  const method = (0, extractParam_1.extractParam)(state, loader.props.method, appContext);
27
27
  const headers = (0, extractParam_1.extractParam)(state, loader.props.headers, appContext);
@@ -43,7 +43,7 @@ function ExternalDataLoader({ loader, loaderInProgressChanged, loaderIsRefetchin
43
43
  }
44
44
  return responseObj;
45
45
  }), [urlLoadable, headers, data, url, method, doNotRemoveNulls]);
46
- return ((0, jsx_runtime_1.jsx)(Loader_1.Loader, { state: state, loader: loader, loaderInProgressChanged: loaderInProgressChanged, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaderLoaded, loaderError: loaderError, loaderFn: doLoad }));
46
+ return ((0, jsx_runtime_1.jsx)(Loader_1.Loader, { state: state, loader: loader, loaderInProgressChanged: loaderInProgressChanged, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaderLoaded, loaderError: loaderError, loaderFn: doLoad, structuralSharing: structuralSharing }));
47
47
  }
48
48
  exports.ExternalDataLoaderMd = (0, ComponentDefs_1.createMetadata)({
49
49
  description: `Represents a loader that calls an API through an HTTP/HTTPS GET request`,
@@ -16,19 +16,18 @@ const immer_1 = require("immer");
16
16
  const extractParam_1 = require("../utils/extractParam");
17
17
  const AppContext_1 = require("../AppContext");
18
18
  const hooks_1 = require("../utils/hooks");
19
- function Loader({ state, loader, loaderFn, queryId, pollIntervalInSeconds, registerComponentApi, onLoaded, loaderLoaded, loaderInProgressChanged, loaderIsRefetchingChanged, loaderError, transformResult, }) {
19
+ function Loader({ state, loader, loaderFn, queryId, pollIntervalInSeconds, registerComponentApi, onLoaded, loaderLoaded, loaderInProgressChanged, loaderIsRefetchingChanged, loaderError, transformResult, structuralSharing = true }) {
20
20
  const { uid } = loader;
21
21
  const appContext = (0, AppContext_1.useAppContext)();
22
- const [isRefetching, setIsRefetching] = (0, react_1.useState)(false);
23
22
  // --- Rely on react-query to decide when data fetching should use the cache or when is should fetch the data from
24
23
  // --- its data source.
25
24
  // --- data: The data obtained by the query
26
25
  // --- status: Query execution status
27
26
  // --- error: Error information about the current query error (in "error" state)
28
27
  // --- refetch: The function that can be used to re-fetch the data (because of data/state changes)
29
- const { data, status, isFetching, error, refetch } = (0, react_query_1.useQuery)({
28
+ const { data, status, isFetching, error, refetch, isRefetching } = (0, react_query_1.useQuery)({
30
29
  queryKey: (0, react_1.useMemo)(() => (queryId ? queryId : [uid, (0, extractParam_1.extractParam)(state, loader.props, appContext)]), [appContext, loader.props, queryId, state, uid]),
31
- structuralSharing: false,
30
+ structuralSharing,
32
31
  queryFn: (0, react_1.useCallback)((_a) => __awaiter(this, [_a], void 0, function* ({ signal }) {
33
32
  // console.log("[Loader queryFn] Starting to fetch data...");
34
33
  try {
@@ -66,7 +65,6 @@ function Loader({ state, loader, loaderFn, queryId, pollIntervalInSeconds, regis
66
65
  let intervalId;
67
66
  if (pollIntervalInSeconds) {
68
67
  intervalId = setInterval(() => {
69
- setIsRefetching(true);
70
68
  refetch();
71
69
  }, pollIntervalInSeconds * 1000);
72
70
  }
@@ -100,13 +98,11 @@ function Loader({ state, loader, loaderFn, queryId, pollIntervalInSeconds, regis
100
98
  // console.log("[Loader] Calling onLoaded with data:", data);
101
99
  // console.log("[Loader] onLoaded function exists:", !!onLoaded);
102
100
  onLoaded === null || onLoaded === void 0 ? void 0 : onLoaded(data, isRefetching);
103
- setIsRefetching(false);
104
101
  }, 0);
105
102
  }
106
103
  else if (status === "error" && error !== prevError) {
107
104
  // console.log("[Loader] Calling loaderError with error:", error);
108
105
  loaderError(error);
109
- setIsRefetching(false);
110
106
  }
111
107
  }, [data, error, loaderError, loaderLoaded, onLoaded, prevData, prevError, status, isRefetching]);
112
108
  (0, react_1.useLayoutEffect)(() => {
@@ -117,7 +113,6 @@ function Loader({ state, loader, loaderFn, queryId, pollIntervalInSeconds, regis
117
113
  (0, react_1.useEffect)(() => {
118
114
  registerComponentApi === null || registerComponentApi === void 0 ? void 0 : registerComponentApi({
119
115
  refetch: (options) => __awaiter(this, void 0, void 0, function* () {
120
- setIsRefetching(true);
121
116
  refetch(options);
122
117
  }),
123
118
  update: (updater) => __awaiter(this, void 0, void 0, function* () {
@@ -18,7 +18,7 @@ const extractParam_1 = require("../utils/extractParam");
18
18
  const renderers_1 = require("../renderers");
19
19
  const AppContext_1 = require("../AppContext");
20
20
  const Loader_1 = require("./Loader");
21
- function ApiLoader({ loader, loaderInProgressChanged, loaderIsRefetchingChanged, loaderError, loaderLoaded, state, }) {
21
+ function MockLoader({ loader, loaderInProgressChanged, loaderIsRefetchingChanged, loaderError, loaderLoaded, state, structuralSharing }) {
22
22
  const appContext = (0, AppContext_1.useAppContext)();
23
23
  const waitTime = (0, extractParam_1.extractParam)(state, loader.props.waitTime, appContext);
24
24
  const responseObj = (0, extractParam_1.extractParam)(state, loader.props.data, appContext);
@@ -26,7 +26,7 @@ function ApiLoader({ loader, loaderInProgressChanged, loaderIsRefetchingChanged,
26
26
  waitTime && (yield (0, misc_1.asyncWait)(waitTime));
27
27
  return responseObj;
28
28
  }), [responseObj, waitTime]);
29
- return ((0, jsx_runtime_1.jsx)(Loader_1.Loader, { state: state, loader: loader, loaderInProgressChanged: loaderInProgressChanged, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaderLoaded, loaderError: loaderError, loaderFn: doLoad }));
29
+ return ((0, jsx_runtime_1.jsx)(Loader_1.Loader, { state: state, loader: loader, loaderInProgressChanged: loaderInProgressChanged, loaderIsRefetchingChanged: loaderIsRefetchingChanged, loaderLoaded: loaderLoaded, loaderError: loaderError, loaderFn: doLoad, structuralSharing: structuralSharing }));
30
30
  }
31
31
  exports.MockLoaderMd = (0, ComponentDefs_1.createMetadata)({
32
32
  description: "A loader that simulates a delay and returns a predefined response",
@@ -36,5 +36,5 @@ exports.MockLoaderMd = (0, ComponentDefs_1.createMetadata)({
36
36
  },
37
37
  });
38
38
  exports.mockLoaderRenderer = (0, renderers_1.createLoaderRenderer)("MockLoader", ({ loader, state, loaderInProgressChanged, loaderLoaded, loaderError }) => {
39
- return ((0, jsx_runtime_1.jsx)(ApiLoader, { loader: loader, state: state, loaderInProgressChanged: loaderInProgressChanged, loaderIsRefetchingChanged: loaderInProgressChanged, loaderLoaded: loaderLoaded, loaderError: loaderError }));
39
+ return ((0, jsx_runtime_1.jsx)(MockLoader, { loader: loader, state: state, loaderInProgressChanged: loaderInProgressChanged, loaderIsRefetchingChanged: loaderInProgressChanged, loaderLoaded: loaderLoaded, loaderError: loaderError }));
40
40
  }, exports.MockLoaderMd);
@@ -49,12 +49,11 @@ const immer_1 = __importStar(require("immer"));
49
49
  const extractParam_1 = require("../utils/extractParam");
50
50
  const AppContext_1 = require("../AppContext");
51
51
  const hooks_1 = require("../utils/hooks");
52
- function PageableLoader({ state, loader, loaderFn, queryId, registerComponentApi, pollIntervalInSeconds, onLoaded, loaderInProgressChanged, loaderIsRefetchingChanged, loaderLoaded, loaderError, transformResult, }) {
52
+ function PageableLoader({ state, loader, loaderFn, queryId, registerComponentApi, pollIntervalInSeconds, onLoaded, loaderInProgressChanged, loaderIsRefetchingChanged, loaderLoaded, loaderError, transformResult, structuralSharing = true, }) {
53
53
  const { uid } = loader;
54
54
  const appContext = (0, AppContext_1.useAppContext)();
55
55
  const queryKey = (0, react_1.useMemo)(() => (queryId ? queryId : [uid, (0, extractParam_1.extractParam)(state, loader.props, appContext)]), [appContext, loader.props, queryId, state, uid]);
56
56
  const thizRef = (0, react_1.useRef)(queryKey);
57
- const [isRefetching, setIsRefetching] = (0, react_1.useState)(false);
58
57
  const getPreviousPageParam = (0, react_1.useCallback)((firstPage) => {
59
58
  let prevPageParam = undefined;
60
59
  const prevPageSelector = loader.props.prevPageSelector;
@@ -84,11 +83,12 @@ function PageableLoader({ state, loader, loaderFn, queryId, registerComponentApi
84
83
  // useEffect(()=>{
85
84
  // console.log("TRANSFORM RESULT CHANGED", transformResult);
86
85
  // }, [transformResult]);
87
- const { data, status, error, hasNextPage, isFetchingNextPage, hasPreviousPage, isFetchingPreviousPage, isFetching, refetch, fetchPreviousPage, fetchNextPage, } = (0, react_query_1.useInfiniteQuery)({
86
+ const { data, status, error, hasNextPage, isFetchingNextPage, hasPreviousPage, isFetchingPreviousPage, isFetching, refetch, fetchPreviousPage, fetchNextPage, isRefetching, } = (0, react_query_1.useInfiniteQuery)({
88
87
  queryKey,
89
88
  queryFn: (0, react_1.useCallback)((_a) => __awaiter(this, [_a], void 0, function* ({ signal, pageParam }) {
90
89
  return yield loaderFn(signal, pageParam);
91
90
  }), [loaderFn]),
91
+ structuralSharing,
92
92
  select: (0, react_1.useCallback)((data) => {
93
93
  let result = [];
94
94
  if (data) {
@@ -156,12 +156,10 @@ function PageableLoader({ state, loader, loaderFn, queryId, registerComponentApi
156
156
  // access to the latest loader value
157
157
  setTimeout(() => {
158
158
  onLoaded === null || onLoaded === void 0 ? void 0 : onLoaded(data, isRefetching);
159
- setIsRefetching(false);
160
159
  }, 0);
161
160
  }
162
161
  else if (status === "error" && prevError !== error) {
163
162
  loaderError(error);
164
- setIsRefetching(false);
165
163
  }
166
164
  }, [
167
165
  data,
@@ -179,7 +177,6 @@ function PageableLoader({ state, loader, loaderFn, queryId, registerComponentApi
179
177
  let intervalId;
180
178
  if (pollIntervalInSeconds) {
181
179
  intervalId = setInterval(() => {
182
- setIsRefetching(true);
183
180
  refetch();
184
181
  }, pollIntervalInSeconds * 1000);
185
182
  }
@@ -200,7 +197,6 @@ function PageableLoader({ state, loader, loaderFn, queryId, registerComponentApi
200
197
  fetchPrevPage,
201
198
  fetchNextPage: stableFetchNextPage,
202
199
  refetch: (options) => __awaiter(this, void 0, void 0, function* () {
203
- setIsRefetching(true);
204
200
  refetch(options);
205
201
  }),
206
202
  update: (updater) => __awaiter(this, void 0, void 0, function* () {
@@ -32,7 +32,8 @@ function renderChild({ node, state, dispatch, appContext, lookupAction, lookupSy
32
32
  }
33
33
  // --- A TextNode value may contain nexted expressions, so we extract it.
34
34
  if (node.type === "TextNode") {
35
- return (0, extractParam_1.extractParam)(state, nodeValue, appContext, true);
35
+ const extractedValue = (0, extractParam_1.extractParam)(state, nodeValue, appContext, true);
36
+ return typeof extractedValue === "boolean" ? extractedValue.toString() : extractedValue;
36
37
  }
37
38
  // --- Rendering a Slot requires some preparations, as TextNode and
38
39
  // --- TextNodeCData are virtual nodes. Also, slots may have default templates