xmlui 0.9.15 → 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.
@@ -12,7 +12,7 @@ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "acce
12
12
  var _executor, _DeferredPromise_instances, decorate_fn, _a2;
13
13
  import { delay as delay$1, HttpResponse, http } from "msw";
14
14
  import { isArray, isObject as isObject$1, mapValues } from "lodash-es";
15
- import { r as runEventHandlerCode, g as getDate, d as delay, m as miscellaneousUtils, a as dateFunctions, o as orderBy, T as ThrowStatementError } from "./index-DFC3vDn-.mjs";
15
+ import { r as runEventHandlerCode, g as getDate, d as delay, m as miscellaneousUtils, a as dateFunctions, o as orderBy, T as ThrowStatementError } from "./index-BjVxVHb3.mjs";
16
16
  import Dexie from "dexie";
17
17
  var POSITIONALS_EXP = /(%?)(%([sdijo]))/g;
18
18
  function serializePositional(positional, flag) {
@@ -6988,6 +6988,12 @@ function resolveAndCleanProps(props, extractValue, layoutCss = {}, resourceExtra
6988
6988
  delete resultProps.radiusTopRight;
6989
6989
  delete resultProps.radiusBottomLeft;
6990
6990
  delete resultProps.radiusBottomRight;
6991
+ delete resultProps.paddingHorizontal;
6992
+ delete resultProps.paddingVertical;
6993
+ delete resultProps.marginHorizontal;
6994
+ delete resultProps.marginVertical;
6995
+ delete resultProps.borderHorizontal;
6996
+ delete resultProps.borderVertical;
6991
6997
  return result;
6992
6998
  }
6993
6999
  function removeStylesFromProps(nodeProps, layoutCss = {}) {
@@ -10389,7 +10395,7 @@ function resolveLayoutProps(layoutProps = EMPTY_OBJECT, layoutContext) {
10389
10395
  result.cssProps.flexShrink = 0;
10390
10396
  }
10391
10397
  collectCss("width");
10392
- const horizontalStarSize = getHorizontalStartSize(result.cssProps.width, layoutContext);
10398
+ const horizontalStarSize = getHorizontalStarSize(result.cssProps.width, layoutContext);
10393
10399
  if (horizontalStarSize !== null) {
10394
10400
  result.cssProps.flex = horizontalStarSize;
10395
10401
  result.cssProps.flexShrink = 1;
@@ -10397,7 +10403,7 @@ function resolveLayoutProps(layoutProps = EMPTY_OBJECT, layoutContext) {
10397
10403
  collectCss("minWidth");
10398
10404
  collectCss("maxWidth");
10399
10405
  collectCss("height");
10400
- const verticalStarSize = getVerticalStartSize(result.cssProps.height, layoutContext);
10406
+ const verticalStarSize = getVerticalStarSize(result.cssProps.height, layoutContext);
10401
10407
  if (verticalStarSize !== null) {
10402
10408
  result.cssProps.flex = verticalStarSize;
10403
10409
  result.cssProps.flexShrink = 1;
@@ -10581,12 +10587,12 @@ function resolveLayoutProps(layoutProps = EMPTY_OBJECT, layoutContext) {
10581
10587
  result.cssProps[propCssName || prop] = value;
10582
10588
  }
10583
10589
  }
10584
- function getHorizontalStartSize(size, layoutContext2) {
10590
+ function getHorizontalStarSize(size, layoutContext2) {
10585
10591
  if (!size) return null;
10586
10592
  const orientation = getOrientation(layoutContext2);
10587
10593
  return orientation === "horizontal" && starSizeRegex.test(size.toString()) ? getStarSizeNumber(size.toString()) : null;
10588
10594
  }
10589
- function getVerticalStartSize(size, layoutContext2) {
10595
+ function getVerticalStarSize(size, layoutContext2) {
10590
10596
  if (!size) return null;
10591
10597
  const orientation = getOrientation(layoutContext2);
10592
10598
  return orientation === "vertical" && starSizeRegex.test(size.toString()) ? getStarSizeNumber(size.toString()) : null;
@@ -16158,7 +16164,7 @@ const ComboboxOption = forwardRef(function Combobox(option, forwardedRef) {
16158
16164
  },
16159
16165
  "data-state": selected2 ? "checked" : void 0,
16160
16166
  keywords,
16161
- children: /* @__PURE__ */ jsx("div", { className: styles$x.multiComboboxOptionContent, children: optionRenderer ? optionRenderer({ label: label2, value, enabled: enabled2, keywords }) : /* @__PURE__ */ jsxs(Fragment, { children: [
16167
+ children: /* @__PURE__ */ jsx("div", { className: styles$x.multiComboboxOptionContent, children: optionRenderer ? optionRenderer({ label: label2, value, enabled: enabled2, keywords }, selectedValue, false) : /* @__PURE__ */ jsxs(Fragment, { children: [
16162
16168
  optionLabelRenderer ? optionLabelRenderer({ label: label2, value }) : label2,
16163
16169
  selected2 && /* @__PURE__ */ jsx(Icon, { name: "checkmark" })
16164
16170
  ] }) })
@@ -16186,7 +16192,7 @@ const SelectOption = React__default.forwardRef(
16186
16192
  (option, ref) => {
16187
16193
  const { value, label: label2, enabled: enabled2 = true } = option;
16188
16194
  const { onOptionRemove, onOptionAdd } = useOption();
16189
- const { optionLabelRenderer, optionRenderer } = useSelect();
16195
+ const { optionLabelRenderer, optionRenderer, value: selectedValue, multiSelect } = useSelect();
16190
16196
  useLayoutEffect(() => {
16191
16197
  onOptionAdd(option);
16192
16198
  return () => onOptionRemove(option);
@@ -16195,7 +16201,7 @@ const SelectOption = React__default.forwardRef(
16195
16201
  label: label2,
16196
16202
  value,
16197
16203
  enabled: enabled2
16198
- }) : /* @__PURE__ */ jsxs(Fragment, { children: [
16204
+ }, selectedValue, false) : /* @__PURE__ */ jsxs(Fragment, { children: [
16199
16205
  /* @__PURE__ */ jsx(ItemText, { className: styles$x.selectItemContent, children: optionLabelRenderer ? optionLabelRenderer({ value, label: label2 }) : label2 }),
16200
16206
  /* @__PURE__ */ jsx("span", { className: styles$x.selectItemIndicator, children: /* @__PURE__ */ jsx(ItemIndicator, { children: /* @__PURE__ */ jsx(Icon, { name: "checkmark" }) }) })
16201
16207
  ] }) }) });
@@ -21566,12 +21572,16 @@ const selectComponentRenderer = createComponentRenderer(
21566
21572
  }
21567
21573
  );
21568
21574
  } : void 0,
21569
- optionRenderer: node.props.optionTemplate ? (item2) => {
21575
+ optionRenderer: node.props.optionTemplate ? (item2, val, inTrigger) => {
21570
21576
  return /* @__PURE__ */ jsx(
21571
21577
  MemoizedItem,
21572
21578
  {
21573
21579
  node: node.props.optionTemplate,
21574
21580
  item: item2,
21581
+ contextVars: {
21582
+ $selectedValue: val,
21583
+ $inTrigger: inTrigger
21584
+ },
21575
21585
  renderChild: (...args) => /* @__PURE__ */ jsx(SelectItemText, { children: renderChild2(...args) })
21576
21586
  }
21577
21587
  );
@@ -24062,7 +24072,8 @@ const styles$g = {
24062
24072
  const InspectorContext = createContext(null);
24063
24073
  function InspectorProvider({
24064
24074
  children,
24065
- sources
24075
+ sources,
24076
+ projectCompilation
24066
24077
  }) {
24067
24078
  const { root: root2 } = useTheme();
24068
24079
  const [inspectable, setInspectable] = useState({});
@@ -24112,9 +24123,10 @@ function InspectorProvider({
24112
24123
  setDevToolsSize,
24113
24124
  devToolsSide,
24114
24125
  setDevToolsSide,
24115
- devToolsEnabled: showCode
24126
+ devToolsEnabled: showCode,
24127
+ projectCompilation
24116
24128
  };
24117
- }, [devToolsSide, devToolsSize, sources, inspectedNode, showCode]);
24129
+ }, [devToolsSide, devToolsSize, sources, inspectedNode, showCode, projectCompilation]);
24118
24130
  return /* @__PURE__ */ jsxs(InspectorContext.Provider, { value: contextValue2, children: [
24119
24131
  children,
24120
24132
  process.env.VITE_USER_COMPONENTS_Inspect !== "false" && showCode && inspectedNode !== null && createPortal(devToolsEntry == null ? void 0 : devToolsEntry.renderer({}), root2),
@@ -24225,6 +24237,7 @@ function InspectButton({
24225
24237
  function useDevTools() {
24226
24238
  const context = useContext(InspectorContext);
24227
24239
  return {
24240
+ projectCompilation: context == null ? void 0 : context.projectCompilation,
24228
24241
  inspectedNode: context == null ? void 0 : context.inspectedNode,
24229
24242
  sources: context == null ? void 0 : context.sources,
24230
24243
  setIsOpen: context == null ? void 0 : context.setIsOpen,
@@ -25143,17 +25156,17 @@ function Loader({
25143
25156
  loaderInProgressChanged: loaderInProgressChanged2,
25144
25157
  loaderIsRefetchingChanged: loaderIsRefetchingChanged2,
25145
25158
  loaderError: loaderError2,
25146
- transformResult
25159
+ transformResult,
25160
+ structuralSharing = true
25147
25161
  }) {
25148
25162
  const { uid } = loader;
25149
25163
  const appContext = useAppContext();
25150
- const [isRefetching, setIsRefetching] = useState(false);
25151
- const { data, status, isFetching, error: error2, refetch } = useQuery({
25164
+ const { data, status, isFetching, error: error2, refetch, isRefetching } = useQuery({
25152
25165
  queryKey: useMemo(
25153
25166
  () => queryId ? queryId : [uid, extractParam(state, loader.props, appContext)],
25154
25167
  [appContext, loader.props, queryId, state, uid]
25155
25168
  ),
25156
- structuralSharing: false,
25169
+ structuralSharing,
25157
25170
  queryFn: useCallback(
25158
25171
  async ({ signal }) => {
25159
25172
  try {
@@ -25189,7 +25202,6 @@ function Loader({
25189
25202
  let intervalId;
25190
25203
  if (pollIntervalInSeconds) {
25191
25204
  intervalId = setInterval(() => {
25192
- setIsRefetching(true);
25193
25205
  refetch();
25194
25206
  }, pollIntervalInSeconds * 1e3);
25195
25207
  }
@@ -25212,11 +25224,9 @@ function Loader({
25212
25224
  loaderLoaded2(data);
25213
25225
  setTimeout(() => {
25214
25226
  onLoaded == null ? void 0 : onLoaded(data, isRefetching);
25215
- setIsRefetching(false);
25216
25227
  }, 0);
25217
25228
  } else if (status === "error" && error2 !== prevError) {
25218
25229
  loaderError2(error2);
25219
- setIsRefetching(false);
25220
25230
  }
25221
25231
  }, [data, error2, loaderError2, loaderLoaded2, onLoaded, prevData, prevError, status, isRefetching]);
25222
25232
  useLayoutEffect(() => {
@@ -25227,7 +25237,6 @@ function Loader({
25227
25237
  useEffect(() => {
25228
25238
  registerComponentApi == null ? void 0 : registerComponentApi({
25229
25239
  refetch: async (options2) => {
25230
- setIsRefetching(true);
25231
25240
  refetch(options2);
25232
25241
  },
25233
25242
  update: async (updater) => {
@@ -25268,14 +25277,15 @@ function Loader({
25268
25277
  }, [appContext.queryClient, queryId, refetch, registerComponentApi, data]);
25269
25278
  return null;
25270
25279
  }
25271
- function ApiLoader$1({
25280
+ function ApiLoader({
25272
25281
  loader,
25273
25282
  loaderInProgressChanged: loaderInProgressChanged2,
25274
25283
  loaderIsRefetchingChanged: loaderIsRefetchingChanged2,
25275
25284
  loaderLoaded: loaderLoaded2,
25276
25285
  loaderError: loaderError2,
25277
25286
  state,
25278
- doNotRemoveNulls
25287
+ doNotRemoveNulls,
25288
+ structuralSharing = true
25279
25289
  }) {
25280
25290
  const appContext = useAppContext();
25281
25291
  const url = extractParam(state, loader.props.url, appContext);
@@ -25303,7 +25313,8 @@ function ApiLoader$1({
25303
25313
  loaderIsRefetchingChanged: loaderIsRefetchingChanged2,
25304
25314
  loaderLoaded: loaderLoaded2,
25305
25315
  loaderError: loaderError2,
25306
- loaderFn: doLoad
25316
+ loaderFn: doLoad,
25317
+ structuralSharing
25307
25318
  }
25308
25319
  );
25309
25320
  }
@@ -25318,7 +25329,7 @@ const apiLoaderRenderer = createLoaderRenderer(
25318
25329
  "ApiLoader",
25319
25330
  ({ loader, state, loaderInProgressChanged: loaderInProgressChanged2, loaderIsRefetchingChanged: loaderIsRefetchingChanged2, loaderLoaded: loaderLoaded2, loaderError: loaderError2 }) => {
25320
25331
  return /* @__PURE__ */ jsx(
25321
- ApiLoader$1,
25332
+ ApiLoader,
25322
25333
  {
25323
25334
  loader,
25324
25335
  state,
@@ -25338,7 +25349,8 @@ function ExternalDataLoader({
25338
25349
  loaderError: loaderError2,
25339
25350
  loaderLoaded: loaderLoaded2,
25340
25351
  state,
25341
- doNotRemoveNulls
25352
+ doNotRemoveNulls,
25353
+ structuralSharing = true
25342
25354
  }) {
25343
25355
  const appContext = useAppContext();
25344
25356
  const method = extractParam(state, loader.props.method, appContext);
@@ -25373,7 +25385,8 @@ function ExternalDataLoader({
25373
25385
  loaderIsRefetchingChanged: loaderIsRefetchingChanged2,
25374
25386
  loaderLoaded: loaderLoaded2,
25375
25387
  loaderError: loaderError2,
25376
- loaderFn: doLoad
25388
+ loaderFn: doLoad,
25389
+ structuralSharing
25377
25390
  }
25378
25391
  );
25379
25392
  }
@@ -25403,13 +25416,14 @@ const externalDataLoaderRenderer = createLoaderRenderer(
25403
25416
  },
25404
25417
  ExternalDataLoaderMd
25405
25418
  );
25406
- function ApiLoader({
25419
+ function MockLoader({
25407
25420
  loader,
25408
25421
  loaderInProgressChanged: loaderInProgressChanged2,
25409
25422
  loaderIsRefetchingChanged: loaderIsRefetchingChanged2,
25410
25423
  loaderError: loaderError2,
25411
25424
  loaderLoaded: loaderLoaded2,
25412
- state
25425
+ state,
25426
+ structuralSharing
25413
25427
  }) {
25414
25428
  const appContext = useAppContext();
25415
25429
  const waitTime = extractParam(state, loader.props.waitTime, appContext);
@@ -25427,7 +25441,8 @@ function ApiLoader({
25427
25441
  loaderIsRefetchingChanged: loaderIsRefetchingChanged2,
25428
25442
  loaderLoaded: loaderLoaded2,
25429
25443
  loaderError: loaderError2,
25430
- loaderFn: doLoad
25444
+ loaderFn: doLoad,
25445
+ structuralSharing
25431
25446
  }
25432
25447
  );
25433
25448
  }
@@ -25442,7 +25457,7 @@ const mockLoaderRenderer = createLoaderRenderer(
25442
25457
  "MockLoader",
25443
25458
  ({ loader, state, loaderInProgressChanged: loaderInProgressChanged2, loaderLoaded: loaderLoaded2, loaderError: loaderError2 }) => {
25444
25459
  return /* @__PURE__ */ jsx(
25445
- ApiLoader,
25460
+ MockLoader,
25446
25461
  {
25447
25462
  loader,
25448
25463
  state,
@@ -25467,7 +25482,8 @@ function PageableLoader({
25467
25482
  loaderIsRefetchingChanged: loaderIsRefetchingChanged2,
25468
25483
  loaderLoaded: loaderLoaded2,
25469
25484
  loaderError: loaderError2,
25470
- transformResult
25485
+ transformResult,
25486
+ structuralSharing = true
25471
25487
  }) {
25472
25488
  const { uid } = loader;
25473
25489
  const appContext = useAppContext();
@@ -25476,7 +25492,6 @@ function PageableLoader({
25476
25492
  [appContext, loader.props, queryId, state, uid]
25477
25493
  );
25478
25494
  const thizRef = useRef(queryKey);
25479
- const [isRefetching, setIsRefetching] = useState(false);
25480
25495
  const getPreviousPageParam = useCallback(
25481
25496
  (firstPage) => {
25482
25497
  let prevPageParam = void 0;
@@ -25526,7 +25541,8 @@ function PageableLoader({
25526
25541
  isFetching,
25527
25542
  refetch,
25528
25543
  fetchPreviousPage,
25529
- fetchNextPage
25544
+ fetchNextPage,
25545
+ isRefetching
25530
25546
  } = useInfiniteQuery({
25531
25547
  queryKey,
25532
25548
  queryFn: useCallback(
@@ -25535,6 +25551,7 @@ function PageableLoader({
25535
25551
  },
25536
25552
  [loaderFn]
25537
25553
  ),
25554
+ structuralSharing,
25538
25555
  select: useCallback(
25539
25556
  (data2) => {
25540
25557
  let result = [];
@@ -25594,11 +25611,9 @@ function PageableLoader({
25594
25611
  loaderLoaded2(data, pageInfo);
25595
25612
  setTimeout(() => {
25596
25613
  onLoaded == null ? void 0 : onLoaded(data, isRefetching);
25597
- setIsRefetching(false);
25598
25614
  }, 0);
25599
25615
  } else if (status === "error" && prevError !== error2) {
25600
25616
  loaderError2(error2);
25601
- setIsRefetching(false);
25602
25617
  }
25603
25618
  }, [
25604
25619
  data,
@@ -25616,7 +25631,6 @@ function PageableLoader({
25616
25631
  let intervalId;
25617
25632
  if (pollIntervalInSeconds) {
25618
25633
  intervalId = setInterval(() => {
25619
- setIsRefetching(true);
25620
25634
  refetch();
25621
25635
  }, pollIntervalInSeconds * 1e3);
25622
25636
  }
@@ -25637,7 +25651,6 @@ function PageableLoader({
25637
25651
  fetchPrevPage,
25638
25652
  fetchNextPage: stableFetchNextPage,
25639
25653
  refetch: async (options2) => {
25640
- setIsRefetching(true);
25641
25654
  refetch(options2);
25642
25655
  },
25643
25656
  update: async (updater) => {
@@ -25704,7 +25717,8 @@ function DataLoader({
25704
25717
  loaderIsRefetchingChanged: loaderIsRefetchingChanged2,
25705
25718
  loaderLoaded: loaderLoaded2,
25706
25719
  loaderError: loaderError2,
25707
- transformResult
25720
+ transformResult,
25721
+ structuralSharing = true
25708
25722
  }) {
25709
25723
  const appContext = useAppContext();
25710
25724
  const url = extractParam(state, loader.props.url, appContext);
@@ -25964,7 +25978,8 @@ function DataLoader({
25964
25978
  registerComponentApi,
25965
25979
  pollIntervalInSeconds,
25966
25980
  onLoaded,
25967
- transformResult
25981
+ transformResult,
25982
+ structuralSharing
25968
25983
  },
25969
25984
  queryId == null ? void 0 : queryId.join("")
25970
25985
  ) : /* @__PURE__ */ jsx(
@@ -25981,7 +25996,8 @@ function DataLoader({
25981
25996
  pollIntervalInSeconds,
25982
25997
  registerComponentApi,
25983
25998
  onLoaded,
25984
- transformResult
25999
+ transformResult,
26000
+ structuralSharing
25985
26001
  },
25986
26002
  queryId == null ? void 0 : queryId.join("")
25987
26003
  );
@@ -26003,7 +26019,8 @@ const DataLoaderMd = createMetadata({
26003
26019
  completedNotificationMessage: d("The message to show when the loader completes"),
26004
26020
  errorNotificationMessage: d("The message to show when an error occurs"),
26005
26021
  transformResult: d("Function for transforming the datasource result"),
26006
- dataType: d("Type of data to fetch (default: json, or csv, or sql)")
26022
+ dataType: d("Type of data to fetch (default: json, or csv, or sql)"),
26023
+ structuralSharing: d("Whether to use structural sharing for the data")
26007
26024
  },
26008
26025
  events: {
26009
26026
  loaded: d("Event to trigger when the data is loaded"),
@@ -26021,7 +26038,8 @@ const dataLoaderRenderer = createLoaderRenderer(
26021
26038
  loaderError: loaderError2,
26022
26039
  registerComponentApi,
26023
26040
  lookupAction,
26024
- lookupSyncCallback
26041
+ lookupSyncCallback,
26042
+ extractValue
26025
26043
  }) => {
26026
26044
  var _a, _b, _c;
26027
26045
  if (!((_a = loader.props) == null ? void 0 : _a.url) || !loader.props.url.trim()) {
@@ -26039,7 +26057,8 @@ const dataLoaderRenderer = createLoaderRenderer(
26039
26057
  registerComponentApi,
26040
26058
  transformResult: lookupSyncCallback(loader.props.transformResult),
26041
26059
  onLoaded: lookupAction((_b = loader.events) == null ? void 0 : _b.loaded, { eventName: "loaded" }),
26042
- onError: lookupAction((_c = loader.events) == null ? void 0 : _c.error, { eventName: "error" })
26060
+ onError: lookupAction((_c = loader.events) == null ? void 0 : _c.error, { eventName: "error" }),
26061
+ structuralSharing: extractValue.asOptionalBoolean(loader.props.structuralSharing)
26043
26062
  }
26044
26063
  );
26045
26064
  },
@@ -31596,7 +31615,7 @@ function IconProvider({ children }) {
31596
31615
  /* @__PURE__ */ jsx("svg", { style: { display: "none" }, ref: spriteRootRef })
31597
31616
  ] });
31598
31617
  }
31599
- const version = "0.9.15";
31618
+ const version = "0.9.16";
31600
31619
  const ApiInterceptorContext = createContext(null);
31601
31620
  function useApiInterceptorContext() {
31602
31621
  return useContext(ApiInterceptorContext);
@@ -35180,7 +35199,8 @@ function renderChild({
35180
35199
  return nodeValue ?? "";
35181
35200
  }
35182
35201
  if (node.type === "TextNode") {
35183
- return extractParam(state, nodeValue, appContext, true);
35202
+ const extractedValue = extractParam(state, nodeValue, appContext, true);
35203
+ return typeof extractedValue === "boolean" ? extractedValue.toString() : extractedValue;
35184
35204
  }
35185
35205
  if (node.type === "Slot") {
35186
35206
  let slotChildren;
@@ -35628,7 +35648,8 @@ const AppWrapper = ({
35628
35648
  resources,
35629
35649
  resourceMap,
35630
35650
  sources,
35631
- children
35651
+ children,
35652
+ projectCompilation
35632
35653
  }) => {
35633
35654
  if (previewMode) {
35634
35655
  HelmetProvider.canUseDOM = false;
@@ -35647,7 +35668,7 @@ const AppWrapper = ({
35647
35668
  defaultTheme,
35648
35669
  defaultTone,
35649
35670
  resources,
35650
- children: /* @__PURE__ */ jsx(InspectorProvider, { sources, children: /* @__PURE__ */ jsx(ConfirmationModalContextProvider, { children: /* @__PURE__ */ jsx(
35671
+ children: /* @__PURE__ */ jsx(InspectorProvider, { sources, projectCompilation, children: /* @__PURE__ */ jsx(ConfirmationModalContextProvider, { children: /* @__PURE__ */ jsx(
35651
35672
  AppContent,
35652
35673
  {
35653
35674
  rootContainer: node,
@@ -35781,7 +35802,7 @@ function ApiInterceptorProvider({
35781
35802
  let interceptorWorker;
35782
35803
  (async () => {
35783
35804
  if (process.env.VITE_MOCK_ENABLED) {
35784
- const { createApiInterceptorWorker } = await import("./apiInterceptorWorker-DHw39GG3.mjs");
35805
+ const { createApiInterceptorWorker } = await import("./apiInterceptorWorker-E5ylKYVg.mjs");
35785
35806
  if (interceptor) {
35786
35807
  interceptorWorker = await createApiInterceptorWorker(interceptor, apiWorker);
35787
35808
  if (!apiWorker) {
@@ -36108,6 +36129,10 @@ const DataSourceMd = createMetadata({
36108
36129
  },
36109
36130
  nextPageSelector: {
36110
36131
  description: `When using \`${COMP}\` with paging, the response may contain information about the previous and next page. This property defines the selector that extracts the next page information from the response deserialized to an object.`
36132
+ },
36133
+ structuralSharing: {
36134
+ description: "This property allows structural sharing. When turned on, `DataSource` will keep the original reference if nothing has changed in the data. If a subset has changed, `DataSource` will keep the unchanged parts and only replace the changed parts. If you do not need this behavior, set this property to `false`.",
36135
+ defaultValue: "true"
36111
36136
  }
36112
36137
  },
36113
36138
  events: {
@@ -36117,7 +36142,9 @@ const DataSourceMd = createMetadata({
36117
36142
  error: d(`This event fires when a request results in an error.`)
36118
36143
  },
36119
36144
  apis: {
36120
- value: d("This property retrieves the data queried from the source after optional transformations."),
36145
+ value: d(
36146
+ "This property retrieves the data queried from the source after optional transformations."
36147
+ ),
36121
36148
  inProgress: d("This property indicates if the data is being fetched."),
36122
36149
  isRefetching: d("This property indicates if the data is being re-fetched."),
36123
36150
  loaded: d("This property indicates if the data has been loaded."),
@@ -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";
@@ -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`,