@helpwave/hightide 0.6.8 → 0.6.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -6909,277 +6909,7 @@ var TagIcon = ({
6909
6909
 
6910
6910
  // src/components/form/FieldLayout.tsx
6911
6911
  import { useId, useMemo as useMemo2, forwardRef as forwardRef2 } from "react";
6912
-
6913
- // src/utils/array.ts
6914
- var equalSizeGroups = (array, groupSize) => {
6915
- if (groupSize <= 0) {
6916
- console.warn(`group size should be greater than 0: groupSize = ${groupSize}`);
6917
- return [[...array]];
6918
- }
6919
- const groups = [];
6920
- for (let i = 0; i < array.length; i += groupSize) {
6921
- groups.push(array.slice(i, Math.min(i + groupSize, array.length)));
6922
- }
6923
- return groups;
6924
- };
6925
- var defaultRangeOptions = {
6926
- allowEmptyRange: false,
6927
- stepSize: 1,
6928
- exclusiveStart: false,
6929
- exclusiveEnd: true
6930
- };
6931
- var range = (endOrRange, options) => {
6932
- const { allowEmptyRange, stepSize, exclusiveStart, exclusiveEnd } = { ...defaultRangeOptions, ...options };
6933
- let start = 0;
6934
- let end;
6935
- if (typeof endOrRange === "number") {
6936
- end = endOrRange;
6937
- } else {
6938
- start = endOrRange[0];
6939
- end = endOrRange[1];
6940
- }
6941
- if (!exclusiveEnd) {
6942
- end -= 1;
6943
- }
6944
- if (exclusiveStart) {
6945
- start += 1;
6946
- }
6947
- if (end - 1 < start) {
6948
- if (!allowEmptyRange) {
6949
- console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set options.allowEmptyRange to true`);
6950
- }
6951
- return [];
6952
- }
6953
- return Array.from({ length: end - start }, (_, index) => index * stepSize + start);
6954
- };
6955
- var closestMatch = (list, firstCloser) => {
6956
- return list.reduce((item1, item2) => {
6957
- return firstCloser(item1, item2) ? item1 : item2;
6958
- });
6959
- };
6960
- var getNeighbours = (list, item, neighbourDistance = 2) => {
6961
- const index = list.indexOf(item);
6962
- const totalItems = neighbourDistance * 2 + 1;
6963
- if (list.length < totalItems) {
6964
- console.warn("List is to short");
6965
- return list;
6966
- }
6967
- if (index === -1) {
6968
- console.error("item not found in list");
6969
- return list.splice(0, totalItems);
6970
- }
6971
- let start = index - neighbourDistance;
6972
- if (start < 0) {
6973
- start += list.length;
6974
- }
6975
- const end = (index + neighbourDistance + 1) % list.length;
6976
- const result = [];
6977
- let ignoreOnce = list.length === totalItems;
6978
- for (let i = start; i !== end || ignoreOnce; i = (i + 1) % list.length) {
6979
- result.push(list[i]);
6980
- if (end === i && ignoreOnce) {
6981
- ignoreOnce = false;
6982
- }
6983
- }
6984
- return result;
6985
- };
6986
- var createLoopingListWithIndex = (list, startIndex = 0, length = 0, forwards = true) => {
6987
- if (length < 0) {
6988
- console.warn(`createLoopingList: length must be >= 0, given ${length}`);
6989
- } else if (length === 0) {
6990
- length = list.length;
6991
- }
6992
- const returnList = [];
6993
- if (forwards) {
6994
- for (let i = startIndex; returnList.length < length; i = (i + 1) % list.length) {
6995
- returnList.push([i, list[i]]);
6996
- }
6997
- } else {
6998
- for (let i = startIndex; returnList.length < length; i = i === 0 ? i = list.length - 1 : i - 1) {
6999
- returnList.push([i, list[i]]);
7000
- }
7001
- }
7002
- return returnList;
7003
- };
7004
- var createLoopingList = (list, startIndex = 0, length = 0, forwards = true) => {
7005
- return createLoopingListWithIndex(list, startIndex, length, forwards).map(([_, item]) => item);
7006
- };
7007
- var moveItems = (list, move = 0) => {
7008
- const result = [];
7009
- let start = move;
7010
- if (start < 0) {
7011
- start = list.length - move;
7012
- }
7013
- start = start % list.length;
7014
- for (let i = 0; i < list.length; i++) {
7015
- result[i] = list[(i + start) % list.length];
7016
- }
7017
- return result;
7018
- };
7019
- function resolveSingleOrArray(value) {
7020
- if (Array.isArray(value)) {
7021
- return value;
7022
- } else if (value) {
7023
- return [value];
7024
- }
7025
- return [];
7026
- }
7027
- var ArrayUtil = {
7028
- unique: (list) => {
7029
- const seen = /* @__PURE__ */ new Set();
7030
- return list.filter((item) => {
7031
- if (seen.has(item)) {
7032
- return false;
7033
- }
7034
- seen.add(item);
7035
- return true;
7036
- });
7037
- },
7038
- difference: (list, removeList) => {
7039
- const remove = new Set(removeList);
7040
- return list.filter((item) => !remove.has(item));
7041
- },
7042
- moveItems,
7043
- resolveSingleOrArray
7044
- };
7045
-
7046
- // src/utils/propsUtil.ts
7047
- function bool(isActive) {
7048
- return isActive ? "" : void 0;
7049
- }
7050
- function name(name2, props = {}) {
7051
- return props["data-name"] ? String(props["data-name"]) : name2;
7052
- }
7053
- function interactionStatesData(interactionStates) {
7054
- return {
7055
- "data-disabled": bool(!!interactionStates.disabled),
7056
- "data-invalid": bool(!!interactionStates.invalid),
7057
- "data-readonly": bool(!!interactionStates.readOnly),
7058
- "data-required": bool(!!interactionStates.required)
7059
- };
7060
- }
7061
- var dataAttributes = {
7062
- bool,
7063
- name,
7064
- interactionStates: interactionStatesData
7065
- };
7066
- function mouseEventExtender({
7067
- fromProps,
7068
- extensions
7069
- }) {
7070
- return (event) => {
7071
- fromProps?.(event);
7072
- ArrayUtil.resolveSingleOrArray(extensions).forEach((element) => element(event));
7073
- };
7074
- }
7075
- function keyboardEventExtender({
7076
- fromProps,
7077
- extensions
7078
- }) {
7079
- return (event) => {
7080
- fromProps?.(event);
7081
- ArrayUtil.resolveSingleOrArray(extensions).forEach((element) => element(event));
7082
- };
7083
- }
7084
- var extender = {
7085
- mouseEvent: mouseEventExtender,
7086
- keyboardEvent: keyboardEventExtender
7087
- };
7088
- function click(onClick) {
7089
- const keyboardEventHandler = (event) => {
7090
- if (event.key === "Enter" || event.key === " ") {
7091
- event.preventDefault();
7092
- event.stopPropagation();
7093
- onClick();
7094
- }
7095
- };
7096
- return {
7097
- onClick,
7098
- onKeyDown: keyboardEventHandler
7099
- };
7100
- }
7101
- function close2(onClose) {
7102
- return (event) => {
7103
- if (event.key === "Escape") {
7104
- event.preventDefault();
7105
- event.stopPropagation();
7106
- onClose?.();
7107
- }
7108
- };
7109
- }
7110
- function navigate({
7111
- left,
7112
- right,
7113
- up: up2,
7114
- down: down2
7115
- }) {
7116
- return (event) => {
7117
- switch (event.key) {
7118
- case "ArrowLeft":
7119
- left(event);
7120
- event.preventDefault();
7121
- event.stopPropagation();
7122
- break;
7123
- case "ArrowRight":
7124
- right(event);
7125
- event.preventDefault();
7126
- event.stopPropagation();
7127
- break;
7128
- case "ArrowUp":
7129
- up2(event);
7130
- event.preventDefault();
7131
- event.stopPropagation();
7132
- break;
7133
- case "ArrowDown":
7134
- down2(event);
7135
- event.preventDefault();
7136
- event.stopPropagation();
7137
- break;
7138
- }
7139
- };
7140
- }
7141
- function mergeProps(slotProps, childProps) {
7142
- const result = { ...childProps };
7143
- for (const key in slotProps) {
7144
- const slotValue = slotProps[key];
7145
- const childValue = childProps[key];
7146
- if (key === "className") {
7147
- result.className = [slotValue, childValue].filter(Boolean).join(" ");
7148
- } else if (key === "style") {
7149
- result.style = { ...slotValue, ...childValue };
7150
- } else if (key.startsWith("on") && typeof slotValue === "function" && typeof childValue === "function") {
7151
- result[key] = (...args) => {
7152
- slotValue(...args);
7153
- childValue(...args);
7154
- };
7155
- } else {
7156
- result[key] = childValue ?? slotValue;
7157
- }
7158
- }
7159
- return result;
7160
- }
7161
- function interactionStatesAria(interactionStates, props = {}) {
7162
- return {
7163
- "aria-disabled": props["aria-disabled"] ?? interactionStates.disabled,
7164
- "aria-invalid": props["aria-invalid"] ?? interactionStates.invalid,
7165
- "aria-readonly": props["aria-readonly"] ?? interactionStates.readOnly,
7166
- "aria-required": props["aria-required"] ?? interactionStates.required
7167
- };
7168
- }
7169
- var aria = {
7170
- close: close2,
7171
- click,
7172
- navigate,
7173
- interactionStates: interactionStatesAria
7174
- };
7175
- var PropsUtil = {
7176
- extender,
7177
- dataAttributes,
7178
- aria,
7179
- mergeProps
7180
- };
7181
-
7182
- // src/components/form/FieldLayout.tsx
6912
+ import clsx5 from "clsx";
7183
6913
  import { jsx as jsx12, jsxs as jsxs6 } from "react/jsx-runtime";
7184
6914
  var FormFieldLayout = forwardRef2(function FormFieldLayout2({
7185
6915
  children,
@@ -7193,6 +6923,7 @@ var FormFieldLayout = forwardRef2(function FormFieldLayout2({
7193
6923
  invalidDescriptionProps,
7194
6924
  description,
7195
6925
  descriptionProps,
6926
+ showRequiredIndicator = true,
7196
6927
  ...props
7197
6928
  }, ref) {
7198
6929
  const generatedId = useId();
@@ -7230,7 +6961,7 @@ var FormFieldLayout = forwardRef2(function FormFieldLayout2({
7230
6961
  {
7231
6962
  ...props,
7232
6963
  ref,
7233
- "data-name": PropsUtil.dataAttributes.name("form-field-container", props),
6964
+ className: clsx5("form-field-container", props.className),
7234
6965
  children: [
7235
6966
  label && /* @__PURE__ */ jsxs6(
7236
6967
  "label",
@@ -7238,10 +6969,10 @@ var FormFieldLayout = forwardRef2(function FormFieldLayout2({
7238
6969
  ...labelProps,
7239
6970
  id: ids.label,
7240
6971
  htmlFor: ids.input,
7241
- "data-name": "form-field-label",
6972
+ className: clsx5("form-field-label", labelProps?.className),
7242
6973
  children: [
7243
6974
  label,
7244
- required && /* @__PURE__ */ jsx12("div", { role: "none", className: "bg-primary w-2 h-2 rounded-full" })
6975
+ showRequiredIndicator && required && /* @__PURE__ */ jsx12("div", { role: "none", className: "bg-primary w-2 h-2 rounded-full" })
7245
6976
  ]
7246
6977
  }
7247
6978
  ),
@@ -7250,7 +6981,7 @@ var FormFieldLayout = forwardRef2(function FormFieldLayout2({
7250
6981
  {
7251
6982
  ...descriptionProps,
7252
6983
  id: ids.description,
7253
- "data-name": "form-field-description",
6984
+ className: clsx5("form-field-description", descriptionProps?.className),
7254
6985
  children: description
7255
6986
  }
7256
6987
  ),
@@ -7260,10 +6991,10 @@ var FormFieldLayout = forwardRef2(function FormFieldLayout2({
7260
6991
  {
7261
6992
  ...invalidDescriptionProps,
7262
6993
  id: ids.description,
7263
- "data-name": "form-field-error",
7264
6994
  role: "alert",
7265
6995
  "aria-hidden": !invalid,
7266
6996
  "aria-live": "polite",
6997
+ className: clsx5("form-field-error", invalidDescriptionProps?.className),
7267
6998
  children: invalidDescription
7268
6999
  }
7269
7000
  )
@@ -7284,13 +7015,18 @@ function useForm() {
7284
7015
  if (!ctx) throw new Error("FormContext is only available inside a <Form>");
7285
7016
  return ctx;
7286
7017
  }
7287
- function useFormField(key, { triggerUpdate = true }) {
7018
+ function useFormField(key, { triggerUpdate = true, validationBehaviour = "touched" }) {
7288
7019
  const context = useContext(FormContext);
7289
7020
  const subscribe = useCallback2((cb) => {
7290
7021
  if (!context) return () => {
7291
7022
  };
7292
7023
  return context.store.subscribe(key, cb);
7293
7024
  }, [context, key]);
7025
+ const subscribeAll = useCallback2((cb) => {
7026
+ if (!context) return () => {
7027
+ };
7028
+ return context.store.subscribe("ALL", cb);
7029
+ }, [context]);
7294
7030
  const value = useSyncExternalStore(
7295
7031
  subscribe,
7296
7032
  () => context ? context.store.getValue(key) : void 0
@@ -7299,31 +7035,85 @@ function useFormField(key, { triggerUpdate = true }) {
7299
7035
  subscribe,
7300
7036
  () => context ? context.store.getError(key) : void 0
7301
7037
  );
7038
+ const touched = useSyncExternalStore(
7039
+ subscribe,
7040
+ () => context ? context.store.getTouched(key) : void 0
7041
+ );
7042
+ const hasTriedSubmitting = useSyncExternalStore(
7043
+ subscribeAll,
7044
+ () => context ? context.store.getHasTriedSubmitting() : void 0
7045
+ );
7046
+ const isShowingErrors = validationBehaviour === "always" || validationBehaviour === "touched" && (touched ?? false) || validationBehaviour === "submit" && (hasTriedSubmitting ?? false);
7302
7047
  const getDataProps = useCallback2(() => {
7303
7048
  return {
7304
- value: context ? context.store.getValue(key) : void 0,
7049
+ value,
7305
7050
  onValueChange: (val) => context?.store.setValue(key, val),
7306
7051
  onEditComplete: (val) => {
7307
7052
  context?.store.setTouched(key);
7308
7053
  context?.store.setValue(key, val, triggerUpdate);
7309
7054
  }
7310
7055
  };
7311
- }, [context, key, triggerUpdate]);
7056
+ }, [context?.store, key, triggerUpdate, value]);
7312
7057
  if (!context) return null;
7313
7058
  const { registerRef } = context;
7314
7059
  return {
7315
7060
  store: context.store,
7316
7061
  value,
7317
- error,
7062
+ error: isShowingErrors ? error : void 0,
7063
+ touched: touched ?? false,
7064
+ hasTriedSubmitting: hasTriedSubmitting ?? false,
7318
7065
  dataProps: getDataProps(),
7319
7066
  registerRef: registerRef(key)
7320
7067
  };
7321
7068
  }
7069
+ function useFormObserver({ formStore } = {}) {
7070
+ const context = useContext(FormContext);
7071
+ const store = formStore ?? context?.store;
7072
+ const subscribe = useCallback2((cb) => {
7073
+ if (!store) return () => {
7074
+ };
7075
+ return store.subscribe("ALL", cb);
7076
+ }, [store]);
7077
+ const values = useSyncExternalStore(subscribe, () => store ? store.getAllValues() : void 0);
7078
+ const errors = useSyncExternalStore(subscribe, () => store ? store.getErrors() : void 0);
7079
+ const touched = useSyncExternalStore(subscribe, () => store ? store.getAllTouched() : void 0);
7080
+ const hasErrors = useSyncExternalStore(subscribe, () => store ? store.getHasError() : void 0);
7081
+ const hasTriedSubmitting = useSyncExternalStore(subscribe, () => store ? store.getHasTriedSubmitting() : void 0);
7082
+ if (!store) return null;
7083
+ return {
7084
+ store,
7085
+ values,
7086
+ errors,
7087
+ touched,
7088
+ hasErrors,
7089
+ hasTriedSubmitting
7090
+ };
7091
+ }
7092
+ function useFormObserverKey({ formStore, key }) {
7093
+ const context = useContext(FormContext);
7094
+ const store = formStore ?? context?.store;
7095
+ const subscribe = useCallback2((cb) => {
7096
+ if (!store) return () => {
7097
+ };
7098
+ return store.subscribe(key, cb);
7099
+ }, [store, key]);
7100
+ const value = useSyncExternalStore(subscribe, () => store ? store.getValue(key) : void 0);
7101
+ const error = useSyncExternalStore(subscribe, () => store ? store.getError(key) : void 0);
7102
+ const touched = useSyncExternalStore(subscribe, () => store ? store.getTouched(key) : void 0);
7103
+ if (!store) return null;
7104
+ return {
7105
+ store,
7106
+ value,
7107
+ error,
7108
+ touched,
7109
+ hasError: !!error
7110
+ };
7111
+ }
7322
7112
 
7323
7113
  // src/components/form/FormField.tsx
7324
7114
  import { jsx as jsx14 } from "react/jsx-runtime";
7325
- var FormField = ({ children, name: name2, triggerUpdateOnEditComplete, ...props }) => {
7326
- const formField = useFormField(name2, { triggerUpdate: triggerUpdateOnEditComplete });
7115
+ var FormField = ({ children, name: name2, triggerUpdateOnEditComplete, validationBehaviour, ...props }) => {
7116
+ const formField = useFormField(name2, { triggerUpdate: triggerUpdateOnEditComplete, validationBehaviour });
7327
7117
  if (!formField) {
7328
7118
  throw new Error("<FormField> can only be used inside a FormContext try wrapping your app in a <FormProvider>");
7329
7119
  }
@@ -7335,20 +7125,47 @@ var FormField = ({ children, name: name2, triggerUpdateOnEditComplete, ...props
7335
7125
  ref: formField.registerRef
7336
7126
  },
7337
7127
  interactionStates: formFieldLayoutBag.interactionStates,
7128
+ touched: formField.touched,
7338
7129
  other: {
7339
7130
  updateValue: (value) => formField.store.setValue(name2, value, true)
7340
7131
  }
7341
7132
  }) });
7342
7133
  };
7343
7134
 
7135
+ // src/utils/bagFunctions.ts
7136
+ var resolve = (bagFunctionOrValue, bag) => {
7137
+ if (typeof bagFunctionOrValue === "function") {
7138
+ return bagFunctionOrValue(bag);
7139
+ }
7140
+ return bagFunctionOrValue;
7141
+ };
7142
+ var BagFunctionUtil = {
7143
+ resolve
7144
+ };
7145
+
7146
+ // src/components/form/FormObserver.tsx
7147
+ var FormObserver = ({ children, formStore }) => {
7148
+ const formObserver = useFormObserver({ formStore });
7149
+ if (!formObserver) {
7150
+ throw new Error("<FormObserver> can only be used inside a <FormProvider>");
7151
+ }
7152
+ return BagFunctionUtil.resolve(children, formObserver);
7153
+ };
7154
+ var FormObserverKey = ({ children, formStore, key }) => {
7155
+ const formObserver = useFormObserverKey({ formStore, key });
7156
+ if (!formObserver) {
7157
+ throw new Error("<FormObserverKey> can only be used inside a <FormProvider>");
7158
+ }
7159
+ return BagFunctionUtil.resolve(children, formObserver);
7160
+ };
7161
+
7344
7162
  // src/components/form/FormStore.ts
7345
7163
  var FormStore = class {
7346
7164
  constructor({
7347
7165
  initialValues,
7348
7166
  hasTriedSubmitting,
7349
7167
  submittingTouchesAll = true,
7350
- validators = {},
7351
- validationBehaviour = "touched"
7168
+ validators = {}
7352
7169
  }) {
7353
7170
  this.hasTriedSubmitting = false;
7354
7171
  this.errors = {};
@@ -7365,7 +7182,6 @@ var FormStore = class {
7365
7182
  });
7366
7183
  }
7367
7184
  this.validators = validators;
7368
- this.validationBehaviour = validationBehaviour;
7369
7185
  this.validateAll();
7370
7186
  }
7371
7187
  // Values
@@ -7378,8 +7194,8 @@ var FormStore = class {
7378
7194
  setValue(key, value, triggerUpdate = false) {
7379
7195
  if (this.values[key] !== value) {
7380
7196
  this.values[key] = value;
7381
- this.validate(key);
7382
7197
  this.notify({ type: "onChange", key, value, values: this.values });
7198
+ this.validate(key);
7383
7199
  }
7384
7200
  if (triggerUpdate) {
7385
7201
  this.notify({
@@ -7411,10 +7227,12 @@ var FormStore = class {
7411
7227
  getTouched(key) {
7412
7228
  return !!this.touched[key];
7413
7229
  }
7230
+ getAllTouched() {
7231
+ return { ...this.touched };
7232
+ }
7414
7233
  setTouched(key, isTouched = true) {
7415
7234
  if (this.touched[key] === isTouched) return;
7416
7235
  this.touched[key] = isTouched;
7417
- this.validate(key);
7418
7236
  this.notify({ type: "onTouched", key, value: this.values[key], values: { ...this.values } });
7419
7237
  }
7420
7238
  // Error and Validation
@@ -7436,10 +7254,8 @@ var FormStore = class {
7436
7254
  }
7437
7255
  this.notify({ type: "onError", key, value: this.values[key], error, values: { ...this.values } });
7438
7256
  }
7439
- changeValidationBehavoir(validationBehaviour) {
7440
- if (validationBehaviour === this.validationBehaviour) return;
7441
- this.validationBehaviour = validationBehaviour;
7442
- this.validateAll();
7257
+ getHasTriedSubmitting() {
7258
+ return this.hasTriedSubmitting;
7443
7259
  }
7444
7260
  changeValidators(validators) {
7445
7261
  this.validators = { ...this.validators, ...validators };
@@ -7447,8 +7263,7 @@ var FormStore = class {
7447
7263
  }
7448
7264
  validate(key) {
7449
7265
  const validator = this.validators[key];
7450
- const shouldValidate = this.validationBehaviour === "always" || this.validationBehaviour === "touched" && this.touched[key] || this.validationBehaviour === "submit" && this.hasTriedSubmitting;
7451
- if (!validator || !shouldValidate) {
7266
+ if (!validator) {
7452
7267
  this.setError(key, void 0);
7453
7268
  return;
7454
7269
  }
@@ -7486,7 +7301,6 @@ var FormStore = class {
7486
7301
  if (this.submittingTouchesAll) {
7487
7302
  Object.keys(this.initialValues).forEach((k) => {
7488
7303
  this.touched[k] = true;
7489
- this.validate(k);
7490
7304
  });
7491
7305
  }
7492
7306
  const hasErrors = Object.keys(this.errors).length > 0;
@@ -7521,7 +7335,6 @@ function useCreateForm({
7521
7335
  initialValues,
7522
7336
  hasTriedSubmitting,
7523
7337
  validators,
7524
- validationBehaviour,
7525
7338
  scrollToElements = true,
7526
7339
  scrollOptions = { behavior: "smooth", block: "center" }
7527
7340
  }) {
@@ -7529,13 +7342,9 @@ function useCreateForm({
7529
7342
  new FormStore({
7530
7343
  initialValues,
7531
7344
  hasTriedSubmitting,
7532
- validators,
7533
- validationBehaviour
7345
+ validators
7534
7346
  })
7535
7347
  );
7536
- useEffect3(() => {
7537
- storeRef.current.changeValidationBehavoir(validationBehaviour);
7538
- }, [validationBehaviour]);
7539
7348
  useEffect3(() => {
7540
7349
  storeRef.current.changeValidators(validators);
7541
7350
  }, [validators]);
@@ -7606,12 +7415,7 @@ function useCreateForm({
7606
7415
  storeRef.current.setValues(updater);
7607
7416
  }
7608
7417
  },
7609
- validateAll: () => storeRef.current.validateAll(),
7610
- getError: (key) => storeRef.current.getError(key),
7611
- getErrors: () => storeRef.current.getErrors(),
7612
- getIsValid: () => !storeRef.current.getHasError(),
7613
- getValue: (key) => storeRef.current.getValue(key),
7614
- getValues: () => storeRef.current.getAllValues()
7418
+ validateAll: () => storeRef.current.validateAll()
7615
7419
  }), []);
7616
7420
  return {
7617
7421
  store: storeRef.current,
@@ -7914,9 +7718,142 @@ import {
7914
7718
  useRef as useRef3,
7915
7719
  useState as useState7
7916
7720
  } from "react";
7917
- import clsx5 from "clsx";
7721
+ import clsx6 from "clsx";
7918
7722
  import { ChevronLeft, ChevronRight } from "lucide-react";
7919
7723
 
7724
+ // src/utils/array.ts
7725
+ var equalSizeGroups = (array, groupSize) => {
7726
+ if (groupSize <= 0) {
7727
+ console.warn(`group size should be greater than 0: groupSize = ${groupSize}`);
7728
+ return [[...array]];
7729
+ }
7730
+ const groups = [];
7731
+ for (let i = 0; i < array.length; i += groupSize) {
7732
+ groups.push(array.slice(i, Math.min(i + groupSize, array.length)));
7733
+ }
7734
+ return groups;
7735
+ };
7736
+ var defaultRangeOptions = {
7737
+ allowEmptyRange: false,
7738
+ stepSize: 1,
7739
+ exclusiveStart: false,
7740
+ exclusiveEnd: true
7741
+ };
7742
+ var range = (endOrRange, options) => {
7743
+ const { allowEmptyRange, stepSize, exclusiveStart, exclusiveEnd } = { ...defaultRangeOptions, ...options };
7744
+ let start = 0;
7745
+ let end;
7746
+ if (typeof endOrRange === "number") {
7747
+ end = endOrRange;
7748
+ } else {
7749
+ start = endOrRange[0];
7750
+ end = endOrRange[1];
7751
+ }
7752
+ if (!exclusiveEnd) {
7753
+ end -= 1;
7754
+ }
7755
+ if (exclusiveStart) {
7756
+ start += 1;
7757
+ }
7758
+ if (end - 1 < start) {
7759
+ if (!allowEmptyRange) {
7760
+ console.warn(`range: end (${end}) < start (${start}) should be allowed explicitly, set options.allowEmptyRange to true`);
7761
+ }
7762
+ return [];
7763
+ }
7764
+ return Array.from({ length: end - start }, (_, index) => index * stepSize + start);
7765
+ };
7766
+ var closestMatch = (list, firstCloser) => {
7767
+ return list.reduce((item1, item2) => {
7768
+ return firstCloser(item1, item2) ? item1 : item2;
7769
+ });
7770
+ };
7771
+ var getNeighbours = (list, item, neighbourDistance = 2) => {
7772
+ const index = list.indexOf(item);
7773
+ const totalItems = neighbourDistance * 2 + 1;
7774
+ if (list.length < totalItems) {
7775
+ console.warn("List is to short");
7776
+ return list;
7777
+ }
7778
+ if (index === -1) {
7779
+ console.error("item not found in list");
7780
+ return list.splice(0, totalItems);
7781
+ }
7782
+ let start = index - neighbourDistance;
7783
+ if (start < 0) {
7784
+ start += list.length;
7785
+ }
7786
+ const end = (index + neighbourDistance + 1) % list.length;
7787
+ const result = [];
7788
+ let ignoreOnce = list.length === totalItems;
7789
+ for (let i = start; i !== end || ignoreOnce; i = (i + 1) % list.length) {
7790
+ result.push(list[i]);
7791
+ if (end === i && ignoreOnce) {
7792
+ ignoreOnce = false;
7793
+ }
7794
+ }
7795
+ return result;
7796
+ };
7797
+ var createLoopingListWithIndex = (list, startIndex = 0, length = 0, forwards = true) => {
7798
+ if (length < 0) {
7799
+ console.warn(`createLoopingList: length must be >= 0, given ${length}`);
7800
+ } else if (length === 0) {
7801
+ length = list.length;
7802
+ }
7803
+ const returnList = [];
7804
+ if (forwards) {
7805
+ for (let i = startIndex; returnList.length < length; i = (i + 1) % list.length) {
7806
+ returnList.push([i, list[i]]);
7807
+ }
7808
+ } else {
7809
+ for (let i = startIndex; returnList.length < length; i = i === 0 ? i = list.length - 1 : i - 1) {
7810
+ returnList.push([i, list[i]]);
7811
+ }
7812
+ }
7813
+ return returnList;
7814
+ };
7815
+ var createLoopingList = (list, startIndex = 0, length = 0, forwards = true) => {
7816
+ return createLoopingListWithIndex(list, startIndex, length, forwards).map(([_, item]) => item);
7817
+ };
7818
+ var moveItems = (list, move = 0) => {
7819
+ const result = [];
7820
+ let start = move;
7821
+ if (start < 0) {
7822
+ start = list.length - move;
7823
+ }
7824
+ start = start % list.length;
7825
+ for (let i = 0; i < list.length; i++) {
7826
+ result[i] = list[(i + start) % list.length];
7827
+ }
7828
+ return result;
7829
+ };
7830
+ function resolveSingleOrArray(value) {
7831
+ if (Array.isArray(value)) {
7832
+ return value;
7833
+ } else if (value) {
7834
+ return [value];
7835
+ }
7836
+ return [];
7837
+ }
7838
+ var ArrayUtil = {
7839
+ unique: (list) => {
7840
+ const seen = /* @__PURE__ */ new Set();
7841
+ return list.filter((item) => {
7842
+ if (seen.has(item)) {
7843
+ return false;
7844
+ }
7845
+ seen.add(item);
7846
+ return true;
7847
+ });
7848
+ },
7849
+ difference: (list, removeList) => {
7850
+ const remove = new Set(removeList);
7851
+ return list.filter((item) => !remove.has(item));
7852
+ },
7853
+ moveItems,
7854
+ resolveSingleOrArray
7855
+ };
7856
+
7920
7857
  // src/global-contexts/LocaleContext.tsx
7921
7858
  import { createContext as createContext3, useContext as useContext3, useEffect as useEffect5, useMemo as useMemo5, useState as useState6 } from "react";
7922
7859
 
@@ -8830,7 +8767,7 @@ function CarouselTabs({
8830
8767
  },
8831
8768
  onClick: () => onChange(index),
8832
8769
  onKeyDown: (e) => handleKeyDown(e, index),
8833
- className: clsx5(
8770
+ className: clsx6(
8834
8771
  "w-8 min-w-8 h-3 min-h-3 first:rounded-l-md last:rounded-r-md",
8835
8772
  {
8836
8773
  "bg-carousel-dot-disabled hover:bg-carousel-dot-active": currentIndex !== index,
@@ -8865,7 +8802,7 @@ var CarouselSlide = forwardRef4(
8865
8802
  ...props,
8866
8803
  ref,
8867
8804
  id: `${id}-slide-${index}`,
8868
- className: clsx5("focus-style-none group/slide", props.className),
8805
+ className: clsx6("focus-style-none group/slide", props.className),
8869
8806
  tabIndex: isSelected ? 0 : void 0,
8870
8807
  role: "group",
8871
8808
  "aria-roledescription": translation("slide"),
@@ -9014,7 +8951,7 @@ var Carousel = ({
9014
8951
  {
9015
8952
  ref: carouselContainerRef,
9016
8953
  ...props,
9017
- className: clsx5("flex-col-2 items-center w-full", props.className),
8954
+ className: clsx6("flex-col-2 items-center w-full", props.className),
9018
8955
  id,
9019
8956
  role: "region",
9020
8957
  "aria-roledescription": translation("slide"),
@@ -9023,7 +8960,7 @@ var Carousel = ({
9023
8960
  "div",
9024
8961
  {
9025
8962
  ...slideContainerProps,
9026
- className: clsx5(`relative w-full overflow-hidden`, heightClassName, slideContainerProps?.className),
8963
+ className: clsx6(`relative w-full overflow-hidden`, heightClassName, slideContainerProps?.className),
9027
8964
  children: [
9028
8965
  hintNext ? /* @__PURE__ */ jsxs7(
9029
8966
  "div",
@@ -9032,7 +8969,7 @@ var Carousel = ({
9032
8969
  onPointerMove: handlePointerMove,
9033
8970
  onPointerUp: handlePointerUp,
9034
8971
  onPointerLeave: handlePointerUp,
9035
- className: clsx5(`flex-row-2 relative h-full`, heightClassName),
8972
+ className: clsx6(`flex-row-2 relative h-full`, heightClassName),
9036
8973
  children: [
9037
8974
  /* @__PURE__ */ jsx18("div", { className: "flex-row-2 relative h-full w-full px-2 overflow-hidden", children: items.map(({
9038
8975
  item,
@@ -9045,7 +8982,7 @@ var Carousel = ({
9045
8982
  ref: isInItems ? slideRefs[index] : void 0,
9046
8983
  index,
9047
8984
  isSelected: isInItems && currentIndex === index,
9048
- className: clsx5(
8985
+ className: clsx6(
9049
8986
  `absolute left-[50%] h-full overflow-hidden transition-transform ease-in-out`,
9050
8987
  slideClassName
9051
8988
  ),
@@ -9062,13 +8999,13 @@ var Carousel = ({
9062
8999
  /* @__PURE__ */ jsx18(
9063
9000
  "div",
9064
9001
  {
9065
- className: clsx5(`hidden desktop:block pointer-events-none absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)
9002
+ className: clsx6(`hidden desktop:block pointer-events-none absolute left-0 h-full w-[20%] bg-gradient-to-r to-transparent`, blurColor)
9066
9003
  }
9067
9004
  ),
9068
9005
  /* @__PURE__ */ jsx18(
9069
9006
  "div",
9070
9007
  {
9071
- className: clsx5(`hidden desktop:block pointer-events-none absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)
9008
+ className: clsx6(`hidden desktop:block pointer-events-none absolute right-0 h-full w-[20%] bg-gradient-to-l to-transparent`, blurColor)
9072
9009
  }
9073
9010
  )
9074
9011
  ]
@@ -9077,7 +9014,7 @@ var Carousel = ({
9077
9014
  "div",
9078
9015
  {
9079
9016
  ref: slideRefs[currentIndex],
9080
- className: clsx5("px-16 h-full"),
9017
+ className: clsx6("px-16 h-full"),
9081
9018
  tabIndex: 0,
9082
9019
  role: "group",
9083
9020
  "aria-roledescription": translation("slide"),
@@ -9094,7 +9031,7 @@ var Carousel = ({
9094
9031
  {
9095
9032
  layout: "icon",
9096
9033
  color: "neutral",
9097
- className: clsx5("absolute z-10 left-2 top-1/2 -translate-y-1/2 shadow-md", { hidden: !canGoLeft() }),
9034
+ className: clsx6("absolute z-10 left-2 top-1/2 -translate-y-1/2 shadow-md", { hidden: !canGoLeft() }),
9098
9035
  disabled: !canGoLeft(),
9099
9036
  onClick: () => left(),
9100
9037
  children: /* @__PURE__ */ jsx18(ChevronLeft, { size: 24 })
@@ -9105,7 +9042,7 @@ var Carousel = ({
9105
9042
  {
9106
9043
  layout: "icon",
9107
9044
  color: "neutral",
9108
- className: clsx5("absolute z-10 right-2 top-1/2 -translate-y-1/2 shadow-md", { hidden: !canGoRight() }),
9045
+ className: clsx6("absolute z-10 right-2 top-1/2 -translate-y-1/2 shadow-md", { hidden: !canGoRight() }),
9109
9046
  disabled: !canGoRight(),
9110
9047
  onClick: () => right(),
9111
9048
  children: /* @__PURE__ */ jsx18(ChevronRight, { size: 24 })
@@ -9122,7 +9059,7 @@ var Carousel = ({
9122
9059
  };
9123
9060
 
9124
9061
  // src/components/layout/DividerInserter.tsx
9125
- import clsx6 from "clsx";
9062
+ import clsx7 from "clsx";
9126
9063
  import { jsx as jsx19 } from "react/jsx-runtime";
9127
9064
  var DividerInserter = ({
9128
9065
  children,
@@ -9140,7 +9077,7 @@ var DividerInserter = ({
9140
9077
  }
9141
9078
  }
9142
9079
  }
9143
- return /* @__PURE__ */ jsx19("div", { className: clsx6(className), ...restProps, children: nodes });
9080
+ return /* @__PURE__ */ jsx19("div", { className: clsx7(className), ...restProps, children: nodes });
9144
9081
  };
9145
9082
 
9146
9083
  // src/hooks/focus/useFocusTrap.ts
@@ -9547,6 +9484,142 @@ var useTransitionState = ({
9547
9484
  };
9548
9485
  };
9549
9486
 
9487
+ // src/utils/propsUtil.ts
9488
+ function bool(isActive) {
9489
+ return isActive ? "" : void 0;
9490
+ }
9491
+ function name(name2, props = {}) {
9492
+ return props["data-name"] ? String(props["data-name"]) : name2;
9493
+ }
9494
+ function interactionStatesData(interactionStates) {
9495
+ return {
9496
+ "data-disabled": bool(!!interactionStates.disabled),
9497
+ "data-invalid": bool(!!interactionStates.invalid),
9498
+ "data-readonly": bool(!!interactionStates.readOnly),
9499
+ "data-required": bool(!!interactionStates.required)
9500
+ };
9501
+ }
9502
+ var dataAttributes = {
9503
+ bool,
9504
+ name,
9505
+ interactionStates: interactionStatesData
9506
+ };
9507
+ function mouseEventExtender({
9508
+ fromProps,
9509
+ extensions
9510
+ }) {
9511
+ return (event) => {
9512
+ fromProps?.(event);
9513
+ ArrayUtil.resolveSingleOrArray(extensions).forEach((element) => element(event));
9514
+ };
9515
+ }
9516
+ function keyboardEventExtender({
9517
+ fromProps,
9518
+ extensions
9519
+ }) {
9520
+ return (event) => {
9521
+ fromProps?.(event);
9522
+ ArrayUtil.resolveSingleOrArray(extensions).forEach((element) => element(event));
9523
+ };
9524
+ }
9525
+ var extender = {
9526
+ mouseEvent: mouseEventExtender,
9527
+ keyboardEvent: keyboardEventExtender
9528
+ };
9529
+ function click(onClick) {
9530
+ const keyboardEventHandler = (event) => {
9531
+ if (event.key === "Enter" || event.key === " ") {
9532
+ event.preventDefault();
9533
+ event.stopPropagation();
9534
+ onClick();
9535
+ }
9536
+ };
9537
+ return {
9538
+ onClick,
9539
+ onKeyDown: keyboardEventHandler
9540
+ };
9541
+ }
9542
+ function close2(onClose) {
9543
+ return (event) => {
9544
+ if (event.key === "Escape") {
9545
+ event.preventDefault();
9546
+ event.stopPropagation();
9547
+ onClose?.();
9548
+ }
9549
+ };
9550
+ }
9551
+ function navigate({
9552
+ left,
9553
+ right,
9554
+ up: up2,
9555
+ down: down2
9556
+ }) {
9557
+ return (event) => {
9558
+ switch (event.key) {
9559
+ case "ArrowLeft":
9560
+ left(event);
9561
+ event.preventDefault();
9562
+ event.stopPropagation();
9563
+ break;
9564
+ case "ArrowRight":
9565
+ right(event);
9566
+ event.preventDefault();
9567
+ event.stopPropagation();
9568
+ break;
9569
+ case "ArrowUp":
9570
+ up2(event);
9571
+ event.preventDefault();
9572
+ event.stopPropagation();
9573
+ break;
9574
+ case "ArrowDown":
9575
+ down2(event);
9576
+ event.preventDefault();
9577
+ event.stopPropagation();
9578
+ break;
9579
+ }
9580
+ };
9581
+ }
9582
+ function mergeProps(slotProps, childProps) {
9583
+ const result = { ...childProps };
9584
+ for (const key in slotProps) {
9585
+ const slotValue = slotProps[key];
9586
+ const childValue = childProps[key];
9587
+ if (key === "className") {
9588
+ result.className = [slotValue, childValue].filter(Boolean).join(" ");
9589
+ } else if (key === "style") {
9590
+ result.style = { ...slotValue, ...childValue };
9591
+ } else if (key.startsWith("on") && typeof slotValue === "function" && typeof childValue === "function") {
9592
+ result[key] = (...args) => {
9593
+ slotValue(...args);
9594
+ childValue(...args);
9595
+ };
9596
+ } else {
9597
+ result[key] = childValue ?? slotValue;
9598
+ }
9599
+ }
9600
+ return result;
9601
+ }
9602
+ function interactionStatesAria(interactionStates, props = {}) {
9603
+ return {
9604
+ "aria-disabled": props["aria-disabled"] ?? interactionStates.disabled,
9605
+ "aria-invalid": props["aria-invalid"] ?? interactionStates.invalid,
9606
+ "aria-readonly": props["aria-readonly"] ?? interactionStates.readOnly,
9607
+ "aria-required": props["aria-required"] ?? interactionStates.required
9608
+ };
9609
+ }
9610
+ var aria = {
9611
+ close: close2,
9612
+ click,
9613
+ navigate,
9614
+ interactionStates: interactionStatesAria
9615
+ };
9616
+ var PropsUtil = {
9617
+ extender,
9618
+ dataAttributes,
9619
+ aria,
9620
+ mergeProps
9621
+ };
9622
+
9550
9623
  // src/components/layout/Drawer.tsx
9551
9624
  import { jsx as jsx20, jsxs as jsxs8 } from "react/jsx-runtime";
9552
9625
  var Drawer = forwardRef5(function Drawer2({
@@ -9655,7 +9728,7 @@ var Drawer = forwardRef5(function Drawer2({
9655
9728
  import { useEffect as useEffect11, useImperativeHandle as useImperativeHandle3, useRef as useRef7 } from "react";
9656
9729
  import { useState as useState12 } from "react";
9657
9730
  import { createContext as createContext5, forwardRef as forwardRef6, useCallback as useCallback9, useContext as useContext5, useId as useId6, useMemo as useMemo10 } from "react";
9658
- import clsx7 from "clsx";
9731
+ import clsx8 from "clsx";
9659
9732
 
9660
9733
  // src/hooks/useOverwritableState.ts
9661
9734
  import { useEffect as useEffect10, useState as useState11 } from "react";
@@ -9821,7 +9894,7 @@ var Expandable = forwardRef6(function Expandable2({
9821
9894
  /* @__PURE__ */ jsx21(ExpandableContext.Consumer, { children: (ctx) => /* @__PURE__ */ jsx21(
9822
9895
  ExpandableContent,
9823
9896
  {
9824
- className: clsx7(contentClassName, { [contentExpandedClassName ?? ""]: !!ctx?.isExpanded }),
9897
+ className: clsx8(contentClassName, { [contentExpandedClassName ?? ""]: !!ctx?.isExpanded }),
9825
9898
  children
9826
9899
  }
9827
9900
  ) })
@@ -9872,7 +9945,7 @@ import {
9872
9945
  useMemo as useMemo11,
9873
9946
  useCallback as useCallback10
9874
9947
  } from "react";
9875
- import clsx8 from "clsx";
9948
+ import clsx9 from "clsx";
9876
9949
  import { ChevronDown as ChevronDown2, ChevronUp } from "lucide-react";
9877
9950
  import { jsx as jsx23, jsxs as jsxs11 } from "react/jsx-runtime";
9878
9951
  function InfiniteScroll({
@@ -9949,7 +10022,7 @@ function InfiniteScroll({
9949
10022
  {
9950
10023
  ref: containerRef,
9951
10024
  onScroll: isUsingInfiteScroll ? handleScroll : void 0,
9952
- className: clsx8("overflow-y-auto", className),
10025
+ className: clsx9("overflow-y-auto", className),
9953
10026
  style,
9954
10027
  children: [
9955
10028
  /* @__PURE__ */ jsx23(Visibility, { isVisible: windowState.start > 0, children: /* @__PURE__ */ jsx23(Button, { color: "neutral", onClick: () => addToStart(), children: /* @__PURE__ */ jsx23(ChevronUp, {}) }) }),
@@ -9962,7 +10035,7 @@ function InfiniteScroll({
9962
10035
 
9963
10036
  // src/components/layout/ListBox.tsx
9964
10037
  import React2, { createContext as createContext6, forwardRef as forwardRef7, useCallback as useCallback11, useContext as useContext6, useEffect as useEffect12, useRef as useRef9, useState as useState14 } from "react";
9965
- import { clsx as clsx9 } from "clsx";
10038
+ import { clsx as clsx10 } from "clsx";
9966
10039
 
9967
10040
  // src/utils/match.ts
9968
10041
  var match = (key, values) => {
@@ -10012,7 +10085,7 @@ var ListBoxItem = forwardRef7(
10012
10085
  "data-highlighted": isHighlighted ? "" : void 0,
10013
10086
  "data-selected": selected ? "" : void 0,
10014
10087
  "data-disabled": disabled ? "" : void 0,
10015
- className: clsx9(
10088
+ className: clsx10(
10016
10089
  "flex-row-1 items-center px-2 py-1 rounded-md",
10017
10090
  "data-highlighted:bg-primary/20",
10018
10091
  "data-disabled:text-disabled data-disabled:cursor-not-allowed",
@@ -10627,7 +10700,7 @@ function TabPanel({ label, ...props }) {
10627
10700
  }
10628
10701
 
10629
10702
  // src/components/layout/TextImage.tsx
10630
- import clsx10 from "clsx";
10703
+ import clsx11 from "clsx";
10631
10704
  import { jsx as jsx27, jsxs as jsxs12 } from "react/jsx-runtime";
10632
10705
  var TextImage = ({
10633
10706
  title,
@@ -10653,7 +10726,7 @@ var TextImage = ({
10653
10726
  return /* @__PURE__ */ jsx27(
10654
10727
  "div",
10655
10728
  {
10656
- className: clsx10("rounded-2xl w-full", className),
10729
+ className: clsx11("rounded-2xl w-full", className),
10657
10730
  style: {
10658
10731
  backgroundImage: `url(${imageUrl})`,
10659
10732
  backgroundSize: "cover"
@@ -10661,9 +10734,9 @@ var TextImage = ({
10661
10734
  children: /* @__PURE__ */ jsxs12(
10662
10735
  "div",
10663
10736
  {
10664
- className: clsx10(`flex-col-2 px-6 py-12 rounded-2xl h-full`, colorMapping[color], contentClassName),
10737
+ className: clsx11(`flex-col-2 px-6 py-12 rounded-2xl h-full`, colorMapping[color], contentClassName),
10665
10738
  children: [
10666
- badge && /* @__PURE__ */ jsx27("div", { className: clsx10(`chip-full mb-2 py-2 px-4 w-fit`, chipColorMapping[color]), children: /* @__PURE__ */ jsx27("span", { className: "text-lg font-bold", children: badge }) }),
10739
+ badge && /* @__PURE__ */ jsx27("div", { className: clsx11(`chip-full mb-2 py-2 px-4 w-fit`, chipColorMapping[color]), children: /* @__PURE__ */ jsx27("span", { className: "text-lg font-bold", children: badge }) }),
10667
10740
  /* @__PURE__ */ jsxs12("div", { className: "flex-col-1 overflow-hidden", children: [
10668
10741
  /* @__PURE__ */ jsx27("span", { className: "typography-title-lg", children: title }),
10669
10742
  /* @__PURE__ */ jsx27("span", { className: "text-ellipsis overflow-hidden", children: description })
@@ -10774,7 +10847,7 @@ var Portal = ({ children, container }) => {
10774
10847
  };
10775
10848
 
10776
10849
  // src/components/layout/dialog/Dialog.tsx
10777
- import clsx11 from "clsx";
10850
+ import clsx12 from "clsx";
10778
10851
 
10779
10852
  // src/components/utils/FocusTrap.tsx
10780
10853
  import { useRef as useRef11 } from "react";
@@ -10886,7 +10959,7 @@ var Dialog = forwardRef9(function Dialog2({
10886
10959
  ref: containerRef,
10887
10960
  id: ids.container,
10888
10961
  "data-open": PropsUtil.dataAttributes.bool(isOpen),
10889
- className: clsx11("dialog-container", containerClassName),
10962
+ className: clsx12("dialog-container", containerClassName),
10890
10963
  style: { zIndex },
10891
10964
  children: [
10892
10965
  /* @__PURE__ */ jsx30(
@@ -10896,7 +10969,7 @@ var Dialog = forwardRef9(function Dialog2({
10896
10969
  onClick: onCloseWrapper,
10897
10970
  "data-state": transitionState,
10898
10971
  "aria-hidden": true,
10899
- className: clsx11("dialog-background", backgroundClassName)
10972
+ className: clsx12("dialog-background", backgroundClassName)
10900
10973
  }
10901
10974
  ),
10902
10975
  /* @__PURE__ */ jsx30(FocusTrap, { active: isPresent && isOpen, container: ref, children: /* @__PURE__ */ jsxs14(
@@ -10912,7 +10985,7 @@ var Dialog = forwardRef9(function Dialog2({
10912
10985
  "aria-modal": isModal,
10913
10986
  "aria-labelledby": ids.title,
10914
10987
  "aria-describedby": hasDescription ? ids.description : void 0,
10915
- className: clsx11("dialog-content", props.className),
10988
+ className: clsx12("dialog-content", props.className),
10916
10989
  children: [
10917
10990
  /* @__PURE__ */ jsx30("div", { className: "typography-title-lg mr-8", children: titleElement }),
10918
10991
  /* @__PURE__ */ jsx30(Visibility, { isVisible: hasDescription, children: /* @__PURE__ */ jsx30("div", { className: "text-description", children: description }) }),
@@ -10948,19 +11021,6 @@ var Dialog = forwardRef9(function Dialog2({
10948
11021
 
10949
11022
  // src/components/layout/dialog/DialogOpener.tsx
10950
11023
  import { useMemo as useMemo13 } from "react";
10951
-
10952
- // src/utils/bagFunctions.ts
10953
- var resolve = (bagFunctionOrValue, bag) => {
10954
- if (typeof bagFunctionOrValue === "function") {
10955
- return bagFunctionOrValue(bag);
10956
- }
10957
- return bagFunctionOrValue;
10958
- };
10959
- var BagFunctionUtil = {
10960
- resolve
10961
- };
10962
-
10963
- // src/components/layout/dialog/DialogOpener.tsx
10964
11024
  function DialogOpenerWrapper({ children }) {
10965
11025
  const context = useDialogContext();
10966
11026
  const bag = useMemo13(() => ({
@@ -11020,7 +11080,7 @@ function DialogRoot({
11020
11080
  }
11021
11081
 
11022
11082
  // src/components/layout/dialog/premade/ConfirmDialog.tsx
11023
- import clsx12 from "clsx";
11083
+ import clsx13 from "clsx";
11024
11084
  import { jsx as jsx32, jsxs as jsxs15 } from "react/jsx-runtime";
11025
11085
  var ConfirmDialog = ({
11026
11086
  children,
@@ -11039,7 +11099,7 @@ var ConfirmDialog = ({
11039
11099
  positive: "positive",
11040
11100
  primary: "primary"
11041
11101
  };
11042
- return /* @__PURE__ */ jsxs15(Dialog, { ...restProps, onClose: onCancel, className: clsx12("justify-between", className), children: [
11102
+ return /* @__PURE__ */ jsxs15(Dialog, { ...restProps, onClose: onCancel, className: clsx13("justify-between", className), children: [
11043
11103
  /* @__PURE__ */ jsx32("div", { className: "flex-col-2 grow", children }),
11044
11104
  /* @__PURE__ */ jsxs15("div", { className: "flex-row-4 mt-3 justify-end", children: [
11045
11105
  onCancel && /* @__PURE__ */ jsx32(
@@ -11549,12 +11609,12 @@ var MultiSelectRoot = ({ value, onValueChange, onEditComplete, ...props }) => {
11549
11609
 
11550
11610
  // src/components/user-interaction/select/SelectComponents.tsx
11551
11611
  import { forwardRef as forwardRef12, useEffect as useEffect19, useImperativeHandle as useImperativeHandle8, useRef as useRef16 } from "react";
11552
- import clsx14 from "clsx";
11612
+ import clsx15 from "clsx";
11553
11613
  import { CheckIcon } from "lucide-react";
11554
11614
 
11555
11615
  // src/components/layout/popup/PopUp.tsx
11556
11616
  import { forwardRef as forwardRef11, useContext as useContext12, useImperativeHandle as useImperativeHandle7, useMemo as useMemo15 } from "react";
11557
- import { clsx as clsx13 } from "clsx";
11617
+ import { clsx as clsx14 } from "clsx";
11558
11618
 
11559
11619
  // src/hooks/useOutsideClick.ts
11560
11620
  import { useEffect as useEffect18 } from "react";
@@ -11644,7 +11704,7 @@ var PopUp = forwardRef11(function PopUp2({
11644
11704
  transition: `top ${props.options?.pollingInterval ?? 100}ms linear, left ${props.options?.pollingInterval ?? 100}ms linear`,
11645
11705
  ...props.style
11646
11706
  },
11647
- className: clsx13("pop-up", props.className),
11707
+ className: clsx14("pop-up", props.className),
11648
11708
  children
11649
11709
  }
11650
11710
  ) }) }) });
@@ -11686,7 +11746,7 @@ var SelectOption = forwardRef12(
11686
11746
  "data-highlighted": isHighlighted ? "" : void 0,
11687
11747
  "data-selected": isSelected ? "" : void 0,
11688
11748
  "data-disabled": disabled ? "" : void 0,
11689
- className: clsx14(
11749
+ className: clsx15(
11690
11750
  "flex-row-1 items-center px-2 py-1 rounded-md",
11691
11751
  "data-highlighted:bg-primary/20",
11692
11752
  "data-disabled:text-disabled data-disabled:cursor-not-allowed",
@@ -11712,7 +11772,7 @@ var SelectOption = forwardRef12(
11712
11772
  iconAppearance === "left" && (state.value.length > 0 || config.isMultiSelect) && /* @__PURE__ */ jsx38(
11713
11773
  CheckIcon,
11714
11774
  {
11715
- className: clsx14("w-4 h-4", { "opacity-0": !isSelected || disabled }),
11775
+ className: clsx15("w-4 h-4", { "opacity-0": !isSelected || disabled }),
11716
11776
  "aria-hidden": true
11717
11777
  }
11718
11778
  ),
@@ -11720,7 +11780,7 @@ var SelectOption = forwardRef12(
11720
11780
  iconAppearance === "right" && (state.value.length > 0 || config.isMultiSelect) && /* @__PURE__ */ jsx38(
11721
11781
  CheckIcon,
11722
11782
  {
11723
- className: clsx14("w-4 h-4", { "opacity-0": !isSelected || disabled }),
11783
+ className: clsx15("w-4 h-4", { "opacity-0": !isSelected || disabled }),
11724
11784
  "aria-hidden": true
11725
11785
  }
11726
11786
  )
@@ -11792,7 +11852,7 @@ var SelectButton = forwardRef12(function SelectButton2({
11792
11852
  "aria-expanded": state.isOpen,
11793
11853
  "aria-controls": state.isOpen ? ids.content : void 0,
11794
11854
  children: [
11795
- hasValue ? selectedDisplay?.(state.value) ?? /* @__PURE__ */ jsx38("div", { className: clsx14("flex flex-wrap gap-x-1 gap-y-2"), children: state.selectedOptions.map(({ value, label }, index) => /* @__PURE__ */ jsxs16("span", { className: "flex-row-0", children: [
11855
+ hasValue ? selectedDisplay?.(state.value) ?? /* @__PURE__ */ jsx38("div", { className: clsx15("flex flex-wrap gap-x-1 gap-y-2"), children: state.selectedOptions.map(({ value, label }, index) => /* @__PURE__ */ jsxs16("span", { className: "flex-row-0", children: [
11796
11856
  label,
11797
11857
  index < state.value.length - 1 && /* @__PURE__ */ jsx38("span", { children: "," })
11798
11858
  ] }, value)) }) : placeholder ?? translation("clickToSelect"),
@@ -11864,7 +11924,7 @@ var SelectContent = forwardRef12(function SelectContent2({
11864
11924
  break;
11865
11925
  }
11866
11926
  },
11867
- className: clsx14("flex-col-0 p-2 bg-menu-background text-menu-text rounded-md shadow-hw-bottom focus-outline-within overflow-auto", props.className),
11927
+ className: clsx15("flex-col-0 p-2 bg-menu-background text-menu-text rounded-md shadow-hw-bottom focus-outline-within overflow-auto", props.className),
11868
11928
  role: "listbox",
11869
11929
  "aria-multiselectable": config.isMultiSelect,
11870
11930
  "aria-orientation": "vertical",
@@ -11957,7 +12017,7 @@ var LanguageDialog = ({
11957
12017
 
11958
12018
  // src/components/layout/dialog/premade/ThemeDialog.tsx
11959
12019
  import { MonitorCog, MoonIcon, SunIcon } from "lucide-react";
11960
- import clsx15 from "clsx";
12020
+ import clsx16 from "clsx";
11961
12021
 
11962
12022
  // src/global-contexts/ThemeContext.tsx
11963
12023
  import { createContext as createContext11, useCallback as useCallback16, useContext as useContext13, useEffect as useEffect20, useMemo as useMemo16, useState as useState21 } from "react";
@@ -12048,11 +12108,11 @@ var useTheme = () => {
12048
12108
  import { jsx as jsx42, jsxs as jsxs19 } from "react/jsx-runtime";
12049
12109
  var ThemeIcon = ({ theme, className }) => {
12050
12110
  if (theme === "dark") {
12051
- return /* @__PURE__ */ jsx42(MoonIcon, { className: clsx15("w-4 h-4", className) });
12111
+ return /* @__PURE__ */ jsx42(MoonIcon, { className: clsx16("w-4 h-4", className) });
12052
12112
  } else if (theme === "light") {
12053
- return /* @__PURE__ */ jsx42(SunIcon, { className: clsx15("w-4 h-4", className) });
12113
+ return /* @__PURE__ */ jsx42(SunIcon, { className: clsx16("w-4 h-4", className) });
12054
12114
  } else {
12055
- return /* @__PURE__ */ jsx42(MonitorCog, { className: clsx15("w-4 h-4", className) });
12115
+ return /* @__PURE__ */ jsx42(MonitorCog, { className: clsx16("w-4 h-4", className) });
12056
12116
  }
12057
12117
  };
12058
12118
  var ThemeDialog = ({
@@ -12098,14 +12158,14 @@ var ThemeDialog = ({
12098
12158
 
12099
12159
  // src/components/layout/loading/ErrorComponent.tsx
12100
12160
  import { AlertOctagon } from "lucide-react";
12101
- import clsx16 from "clsx";
12161
+ import clsx17 from "clsx";
12102
12162
  import { jsx as jsx43, jsxs as jsxs20 } from "react/jsx-runtime";
12103
12163
  var ErrorComponent = ({
12104
12164
  errorText,
12105
12165
  classname
12106
12166
  }) => {
12107
12167
  const translation = useHightideTranslation();
12108
- return /* @__PURE__ */ jsxs20("div", { className: clsx16("flex-col-4 items-center justify-center w-full h-24", classname), children: [
12168
+ return /* @__PURE__ */ jsxs20("div", { className: clsx17("flex-col-4 items-center justify-center w-full h-24", classname), children: [
12109
12169
  /* @__PURE__ */ jsx43(AlertOctagon, { size: 64, className: "text-warning" }),
12110
12170
  errorText ?? `${translation("errorOccurred")} :(`
12111
12171
  ] });
@@ -12115,14 +12175,14 @@ var ErrorComponent = ({
12115
12175
  import { useState as useState22 } from "react";
12116
12176
 
12117
12177
  // src/components/layout/loading/LoadingContainer.tsx
12118
- import { clsx as clsx17 } from "clsx";
12178
+ import { clsx as clsx18 } from "clsx";
12119
12179
  import { jsx as jsx44 } from "react/jsx-runtime";
12120
12180
  var LoadingContainer = ({ className }) => {
12121
- return /* @__PURE__ */ jsx44("div", { className: clsx17("relative overflow-hidden shimmer bg-disabled/30 rounded-md", className) });
12181
+ return /* @__PURE__ */ jsx44("div", { className: clsx18("relative overflow-hidden shimmer bg-disabled/30 rounded-md", className) });
12122
12182
  };
12123
12183
 
12124
12184
  // src/components/layout/loading/LoadingAndErrorComponent.tsx
12125
- import { clsx as clsx18 } from "clsx";
12185
+ import { clsx as clsx19 } from "clsx";
12126
12186
  import { Fragment as Fragment4, jsx as jsx45 } from "react/jsx-runtime";
12127
12187
  var LoadingAndErrorComponent = ({
12128
12188
  children,
@@ -12143,23 +12203,23 @@ var LoadingAndErrorComponent = ({
12143
12203
  }, minimumLoadingDuration);
12144
12204
  }
12145
12205
  if (isLoading || minimumLoadingDuration && isInMinimumLoading) {
12146
- return /* @__PURE__ */ jsx45(Fragment4, { children: loadingComponent ?? /* @__PURE__ */ jsx45(LoadingContainer, { className: clsx18(className) }) });
12206
+ return /* @__PURE__ */ jsx45(Fragment4, { children: loadingComponent ?? /* @__PURE__ */ jsx45(LoadingContainer, { className: clsx19(className) }) });
12147
12207
  }
12148
12208
  if (hasError) {
12149
- return /* @__PURE__ */ jsx45(Fragment4, { children: errorComponent ?? /* @__PURE__ */ jsx45(LoadingContainer, { className: clsx18("bg-negative", className) }) });
12209
+ return /* @__PURE__ */ jsx45(Fragment4, { children: errorComponent ?? /* @__PURE__ */ jsx45(LoadingContainer, { className: clsx19("bg-negative", className) }) });
12150
12210
  }
12151
12211
  return /* @__PURE__ */ jsx45(Fragment4, { children });
12152
12212
  };
12153
12213
 
12154
12214
  // src/components/layout/loading/LoadingAnimation.tsx
12155
- import clsx19 from "clsx";
12215
+ import clsx20 from "clsx";
12156
12216
  import { jsx as jsx46, jsxs as jsxs21 } from "react/jsx-runtime";
12157
12217
  var LoadingAnimation = ({
12158
12218
  loadingText,
12159
12219
  classname
12160
12220
  }) => {
12161
12221
  const translation = useHightideTranslation();
12162
- return /* @__PURE__ */ jsxs21("div", { className: clsx19("flex-col-2 items-center justify-center w-full h-24", classname), children: [
12222
+ return /* @__PURE__ */ jsxs21("div", { className: clsx20("flex-col-2 items-center justify-center w-full h-24", classname), children: [
12163
12223
  /* @__PURE__ */ jsx46(HelpwaveLogo, { animate: "loading" }),
12164
12224
  loadingText ?? `${translation("loading")}...`
12165
12225
  ] });
@@ -12199,7 +12259,7 @@ var import_link2 = __toESM(require_link2());
12199
12259
  import { Menu as MenuIcon, XIcon } from "lucide-react";
12200
12260
  import { useEffect as useEffect21 } from "react";
12201
12261
  import { useCallback as useCallback17, useId as useId10, useRef as useRef17, useState as useState23 } from "react";
12202
- import clsx20 from "clsx";
12262
+ import clsx21 from "clsx";
12203
12263
  import { Fragment as Fragment5, jsx as jsx48, jsxs as jsxs23 } from "react/jsx-runtime";
12204
12264
  function isSubItem(item) {
12205
12265
  return "items" in item && Array.isArray(item.items);
@@ -12263,7 +12323,7 @@ var NavigationItemWithSubItem = ({
12263
12323
  },
12264
12324
  onBlur,
12265
12325
  hidden: !isOpen,
12266
- className: clsx20(
12326
+ className: clsx21(
12267
12327
  "fixed flex-col-4 p-4 bg-surface text-on-surface shadow-side shadow-hw-bottom rounded-md",
12268
12328
  { "opacity-0": !style }
12269
12329
  ),
@@ -12282,7 +12342,7 @@ var NavigationItemWithSubItem = ({
12282
12342
  ] });
12283
12343
  };
12284
12344
  var NavigationItemList = ({ items, ...restProps }) => {
12285
- return /* @__PURE__ */ jsx48("ul", { ...restProps, className: clsx20("flex-row-6 items-center", restProps.className), children: items.map((item, index) => /* @__PURE__ */ jsx48("li", { children: isSubItem(item) ? /* @__PURE__ */ jsx48(NavigationItemWithSubItem, { ...item }) : /* @__PURE__ */ jsx48(import_link2.default, { href: item.link, target: item.external ? "_blank" : void 0, className: "link", children: item.label }) }, index)) });
12345
+ return /* @__PURE__ */ jsx48("ul", { ...restProps, className: clsx21("flex-row-6 items-center", restProps.className), children: items.map((item, index) => /* @__PURE__ */ jsx48("li", { children: isSubItem(item) ? /* @__PURE__ */ jsx48(NavigationItemWithSubItem, { ...item }) : /* @__PURE__ */ jsx48(import_link2.default, { href: item.link, target: item.external ? "_blank" : void 0, className: "link", children: item.label }) }, index)) });
12286
12346
  };
12287
12347
  var Navigation = ({ ...props }) => {
12288
12348
  const [isMobileOpen, setIsMobileOpen] = useState23(false);
@@ -12297,7 +12357,7 @@ var Navigation = ({ ...props }) => {
12297
12357
  NavigationItemList,
12298
12358
  {
12299
12359
  ...props,
12300
- className: clsx20("hidden", { "desktop:flex": !isMobileOpen }, props.className)
12360
+ className: clsx21("hidden", { "desktop:flex": !isMobileOpen }, props.className)
12301
12361
  }
12302
12362
  ),
12303
12363
  /* @__PURE__ */ jsx48(
@@ -12327,7 +12387,7 @@ var Navigation = ({ ...props }) => {
12327
12387
  event.stopPropagation();
12328
12388
  }
12329
12389
  },
12330
- className: clsx20(
12390
+ className: clsx21(
12331
12391
  "flex-col-8 items-center justify-center fixed inset-0 p-8 w-screen h-screen bg-surface text-on-surface",
12332
12392
  {
12333
12393
  "desktop:hidden": isMobileOpen
@@ -12346,7 +12406,7 @@ var Navigation = ({ ...props }) => {
12346
12406
  children: /* @__PURE__ */ jsx48(XIcon, {})
12347
12407
  }
12348
12408
  ),
12349
- /* @__PURE__ */ jsx48(NavigationItemList, { ...props, className: clsx20("flex-col-8", props.className) })
12409
+ /* @__PURE__ */ jsx48(NavigationItemList, { ...props, className: clsx21("flex-col-8", props.className) })
12350
12410
  ]
12351
12411
  }
12352
12412
  )
@@ -12355,14 +12415,14 @@ var Navigation = ({ ...props }) => {
12355
12415
 
12356
12416
  // src/components/layout/navigation/Pagination.tsx
12357
12417
  import { ChevronFirst, ChevronLast, ChevronLeft as ChevronLeft2, ChevronRight as ChevronRight2 } from "lucide-react";
12358
- import clsx22 from "clsx";
12418
+ import clsx23 from "clsx";
12359
12419
  import { useEffect as useEffect23, useState as useState25 } from "react";
12360
12420
 
12361
12421
  // src/components/user-interaction/Tooltip.tsx
12362
12422
  import { useEffect as useEffect22 } from "react";
12363
12423
  import { useId as useId11 } from "react";
12364
12424
  import { useCallback as useCallback18, useMemo as useMemo17, useRef as useRef18, useState as useState24 } from "react";
12365
- import { clsx as clsx21 } from "clsx";
12425
+ import { clsx as clsx22 } from "clsx";
12366
12426
  import { jsx as jsx49, jsxs as jsxs24 } from "react/jsx-runtime";
12367
12427
  var Tooltip = ({
12368
12428
  tooltip,
@@ -12442,7 +12502,7 @@ var Tooltip = ({
12442
12502
  "div",
12443
12503
  {
12444
12504
  ref: anchor,
12445
- className: clsx21("relative inline-block", containerClassName),
12505
+ className: clsx22("relative inline-block", containerClassName),
12446
12506
  "aria-describedby": isVisible ? id : void 0,
12447
12507
  onPointerEnter: openWithDelay,
12448
12508
  onPointerLeave: close3,
@@ -12465,7 +12525,7 @@ var Tooltip = ({
12465
12525
  "data-state": transitionState,
12466
12526
  "data-animated": isAnimated ? "" : void 0,
12467
12527
  role: "tooltip",
12468
- className: clsx21("tooltip", tooltipClassName),
12528
+ className: clsx22("tooltip", tooltipClassName),
12469
12529
  style: { zIndex, position: "fixed" },
12470
12530
  children: tooltip
12471
12531
  }
@@ -12499,7 +12559,7 @@ var Pagination = ({
12499
12559
  const changePage = (page) => {
12500
12560
  onPageIndexChanged(page);
12501
12561
  };
12502
- return /* @__PURE__ */ jsxs25("div", { className: clsx22("flex-row-1", className), style, children: [
12562
+ return /* @__PURE__ */ jsxs25("div", { className: clsx23("flex-row-1", className), style, children: [
12503
12563
  /* @__PURE__ */ jsx50(Tooltip, { tooltip: translation("first"), children: /* @__PURE__ */ jsx50(
12504
12564
  Button,
12505
12565
  {
@@ -12527,7 +12587,7 @@ var Pagination = ({
12527
12587
  Input,
12528
12588
  {
12529
12589
  value,
12530
- className: clsx22(
12590
+ className: clsx23(
12531
12591
  "w-24 text-center font-bold input-indicator-hidden h-10"
12532
12592
  ),
12533
12593
  type: "number",
@@ -12583,7 +12643,7 @@ var Pagination = ({
12583
12643
 
12584
12644
  // src/components/layout/navigation/StepperBar.tsx
12585
12645
  import { Check, ChevronLeft as ChevronLeft3, ChevronRight as ChevronRight3 } from "lucide-react";
12586
- import clsx23 from "clsx";
12646
+ import clsx24 from "clsx";
12587
12647
  import { jsx as jsx51, jsxs as jsxs26 } from "react/jsx-runtime";
12588
12648
  var defaultState = {
12589
12649
  currentStep: 0,
@@ -12609,7 +12669,7 @@ var StepperBar = ({
12609
12669
  return /* @__PURE__ */ jsxs26(
12610
12670
  "div",
12611
12671
  {
12612
- className: clsx23("flex-row-2 justify-between", className),
12672
+ className: clsx24("flex-row-2 justify-between", className),
12613
12673
  children: [
12614
12674
  /* @__PURE__ */ jsx51("div", { className: "flex-row-2 flex-[2] justify-start", children: /* @__PURE__ */ jsxs26(
12615
12675
  Button,
@@ -12631,7 +12691,7 @@ var StepperBar = ({
12631
12691
  "div",
12632
12692
  {
12633
12693
  onClick: () => seen && update(index),
12634
- className: clsx23(
12694
+ className: clsx24(
12635
12695
  "rounded-full w-4 h-4",
12636
12696
  {
12637
12697
  "bg-stepperbar-dot-active hover:brightness-75": index === currentStep && seen && !disabledSteps.has(currentStep),
@@ -12748,7 +12808,7 @@ function PopUpRoot({
12748
12808
  }
12749
12809
 
12750
12810
  // src/components/layout/table/FillerCell.tsx
12751
- import clsx24 from "clsx";
12811
+ import clsx25 from "clsx";
12752
12812
  import { Minus } from "lucide-react";
12753
12813
  import { jsx as jsx53 } from "react/jsx-runtime";
12754
12814
  var FillerCell = ({ ...props }) => {
@@ -12756,7 +12816,7 @@ var FillerCell = ({ ...props }) => {
12756
12816
  "div",
12757
12817
  {
12758
12818
  ...props,
12759
- className: clsx24("table-filler-cell", props.className),
12819
+ className: clsx25("table-filler-cell", props.className),
12760
12820
  children: /* @__PURE__ */ jsx53(Minus, { className: "max-w-4 max-h-4" })
12761
12821
  }
12762
12822
  );
@@ -13107,13 +13167,13 @@ var useResizeCallbackWrapper = (callback) => {
13107
13167
  };
13108
13168
 
13109
13169
  // src/components/layout/table/TableCell.tsx
13110
- import { clsx as clsx25 } from "clsx";
13170
+ import { clsx as clsx26 } from "clsx";
13111
13171
  import { jsx as jsx54 } from "react/jsx-runtime";
13112
13172
  var TableCell = ({
13113
13173
  children,
13114
13174
  className
13115
13175
  }) => {
13116
- return /* @__PURE__ */ jsx54("span", { className: clsx25("table-default-cell", className), children });
13176
+ return /* @__PURE__ */ jsx54("span", { className: clsx26("table-default-cell", className), children });
13117
13177
  };
13118
13178
 
13119
13179
  // src/components/layout/table/TableProvider.tsx
@@ -13121,9 +13181,10 @@ import { jsx as jsx55 } from "react/jsx-runtime";
13121
13181
  var TableProvider = ({
13122
13182
  data,
13123
13183
  isUsingFillerRows = true,
13124
- fillerRow,
13184
+ fillerRowCell,
13125
13185
  initialState,
13126
13186
  onRowClick,
13187
+ onFillerRowClick,
13127
13188
  defaultColumn: defaultColumnOverwrite,
13128
13189
  state,
13129
13190
  columns: columnsProp,
@@ -13262,15 +13323,16 @@ var TableProvider = ({
13262
13323
  pagination,
13263
13324
  rowSelection,
13264
13325
  isUsingFillerRows,
13265
- fillerRow,
13326
+ fillerRowCell,
13266
13327
  onRowClick,
13328
+ onFillerRowClick,
13267
13329
  rows,
13268
13330
  columnOrder,
13269
13331
  columnFilters,
13270
13332
  columnVisibility,
13271
13333
  columnPinning,
13272
13334
  columnSorting
13273
- }), [table, data, pagination, rowSelection, isUsingFillerRows, fillerRow, onRowClick, columns, rows, columnOrder, columnFilters, columnVisibility, columnPinning, columnSorting]);
13335
+ }), [table, data, pagination, rowSelection, isUsingFillerRows, fillerRowCell, onRowClick, onFillerRowClick, columns, rows, columnOrder, columnFilters, columnVisibility, columnPinning, columnSorting]);
13274
13336
  const tableColumnDefinitionContextValue = useMemo20(() => ({
13275
13337
  table,
13276
13338
  registerColumn
@@ -13289,11 +13351,24 @@ var TableProvider = ({
13289
13351
  // src/components/layout/table/TableBody.tsx
13290
13352
  import { flexRender } from "@tanstack/react-table";
13291
13353
  import React5 from "react";
13292
- import clsx26 from "clsx";
13354
+ import clsx27 from "clsx";
13293
13355
  import { jsx as jsx56, jsxs as jsxs27 } from "react/jsx-runtime";
13294
13356
  var TableBody = React5.memo(function TableBodyVisual() {
13295
- const { table, onRowClick, isUsingFillerRows, fillerRow, pagination, rows } = useTableDataContext();
13296
- const columns = table.getAllColumns();
13357
+ const { table, onRowClick, onFillerRowClick, isUsingFillerRows, fillerRowCell, pagination, rows } = useTableDataContext();
13358
+ const state = table.getState();
13359
+ const baseOrder = state.columnOrder?.length ? state.columnOrder : table.getVisibleLeafColumns().map((col) => col.id);
13360
+ const pinnedLeft = state.columnPinning?.left ?? [];
13361
+ const pinnedRight = state.columnPinning?.right ?? [];
13362
+ const columnOrder = [
13363
+ ...pinnedLeft,
13364
+ ...baseOrder.filter(
13365
+ (id) => !pinnedLeft.includes(id) && !pinnedRight.includes(id)
13366
+ ),
13367
+ ...pinnedRight
13368
+ ];
13369
+ const columns = columnOrder.map((id) => table.getColumn(id)).filter(
13370
+ (col) => !!col && state.columnVisibility?.[col.id] !== false
13371
+ );
13297
13372
  return /* @__PURE__ */ jsxs27("tbody", { children: [
13298
13373
  rows.map((row) => {
13299
13374
  return /* @__PURE__ */ jsx56(
@@ -13301,9 +13376,9 @@ var TableBody = React5.memo(function TableBodyVisual() {
13301
13376
  {
13302
13377
  onClick: () => onRowClick?.(row, table),
13303
13378
  "data-clickable": PropsUtil.dataAttributes.bool(!!onRowClick),
13304
- className: clsx26("table-body-row", BagFunctionUtil.resolve(table.options.meta?.bodyRowClassName, row.original)),
13379
+ className: clsx27("table-body-row", BagFunctionUtil.resolve(table.options.meta?.bodyRowClassName, row.original)),
13305
13380
  children: row.getVisibleCells().map((cell) => {
13306
- return /* @__PURE__ */ jsx56("td", { className: clsx26("table-body-cell", cell.column.columnDef.meta?.className), children: flexRender(
13381
+ return /* @__PURE__ */ jsx56("td", { className: clsx27("table-body-cell", cell.column.columnDef.meta?.className), children: flexRender(
13307
13382
  cell.column.columnDef.cell,
13308
13383
  cell.getContext()
13309
13384
  ) }, cell.id);
@@ -13312,21 +13387,30 @@ var TableBody = React5.memo(function TableBodyVisual() {
13312
13387
  row.id
13313
13388
  );
13314
13389
  }),
13315
- isUsingFillerRows && range(pagination.pageSize - rows.length, { allowEmptyRange: true }).map((row, index) => {
13316
- return /* @__PURE__ */ jsx56("tr", { className: clsx26("table-body-filler-row"), children: columns.map((column) => {
13317
- return /* @__PURE__ */ jsx56("td", { className: clsx26("table-body-filler-cell", column.columnDef.meta?.className), children: fillerRow ? fillerRow(column.id, table) : /* @__PURE__ */ jsx56(FillerCell, {}) }, column.id);
13318
- }) }, "filler-row-" + index);
13319
- })
13390
+ /* @__PURE__ */ jsx56(Visibility, { isVisible: isUsingFillerRows, children: range(pagination.pageSize - rows.length, { allowEmptyRange: true }).map((index) => {
13391
+ return /* @__PURE__ */ jsx56(
13392
+ "tr",
13393
+ {
13394
+ className: clsx27("table-body-filler-row"),
13395
+ onClick: () => onFillerRowClick?.(index, table),
13396
+ "data-clickable": PropsUtil.dataAttributes.bool(!!onFillerRowClick),
13397
+ children: columns.map((column) => {
13398
+ return /* @__PURE__ */ jsx56("td", { className: clsx27("table-body-filler-cell", column.columnDef.meta?.className), children: fillerRowCell ? fillerRowCell(column.id, table) : /* @__PURE__ */ jsx56(FillerCell, {}) }, column.id);
13399
+ })
13400
+ },
13401
+ "filler-row-" + index
13402
+ );
13403
+ }) })
13320
13404
  ] });
13321
13405
  });
13322
13406
 
13323
13407
  // src/components/layout/table/TableHeader.tsx
13324
13408
  import { flexRender as flexRender2 } from "@tanstack/react-table";
13325
- import clsx32 from "clsx";
13409
+ import clsx33 from "clsx";
13326
13410
 
13327
13411
  // src/components/layout/table/TableSortButton.tsx
13328
13412
  import { ChevronDown as ChevronDown3, ChevronsUpDown, ChevronUp as ChevronUp2 } from "lucide-react";
13329
- import clsx27 from "clsx";
13413
+ import clsx28 from "clsx";
13330
13414
  import { jsx as jsx57, jsxs as jsxs28 } from "react/jsx-runtime";
13331
13415
  var TableSortButton = ({
13332
13416
  sortDirection,
@@ -13354,13 +13438,13 @@ var TableSortButton = ({
13354
13438
  layout: hasSortingIndex ? "default" : "icon",
13355
13439
  color,
13356
13440
  size,
13357
- className: clsx27("relative", className),
13441
+ className: clsx28("relative", className),
13358
13442
  ...props,
13359
13443
  children: [
13360
13444
  /* @__PURE__ */ jsx57(Visibility, { isVisible: hasSortingIndex, children: /* @__PURE__ */ jsx57(
13361
13445
  "div",
13362
13446
  {
13363
- className: clsx27("absolute bottom-0 right-1/2 translate-x-1/2 translate-y-2/3 z-1 primary coloring-solid rounded-full h-4 w-5 text-sm"),
13447
+ className: clsx28("absolute bottom-0 right-1/2 translate-x-1/2 translate-y-2/3 z-1 primary coloring-solid rounded-full h-4 w-5 text-sm"),
13364
13448
  children: `${index}.`
13365
13449
  }
13366
13450
  ) }),
@@ -13377,7 +13461,7 @@ import { useEffect as useEffect30, useId as useId14, useMemo as useMemo26, useRe
13377
13461
  // src/components/user-interaction/input/DateTimeInput.tsx
13378
13462
  import { forwardRef as forwardRef14, useCallback as useCallback21, useEffect as useEffect29, useId as useId13, useImperativeHandle as useImperativeHandle9, useMemo as useMemo24, useRef as useRef23, useState as useState30 } from "react";
13379
13463
  import { CalendarIcon } from "lucide-react";
13380
- import clsx31 from "clsx";
13464
+ import clsx32 from "clsx";
13381
13465
 
13382
13466
  // src/utils/date.ts
13383
13467
  var monthsList = ["january", "february", "march", "april", "may", "june", "july", "august", "september", "october", "november", "december"];
@@ -13550,7 +13634,7 @@ var DateUtils = {
13550
13634
  };
13551
13635
 
13552
13636
  // src/components/user-interaction/date/DateTimePicker.tsx
13553
- import clsx30 from "clsx";
13637
+ import clsx31 from "clsx";
13554
13638
 
13555
13639
  // src/components/user-interaction/date/TimePicker.tsx
13556
13640
  import { useEffect as useEffect27, useRef as useRef21 } from "react";
@@ -13672,7 +13756,7 @@ var TimePickerUncontrolled = ({
13672
13756
  // src/components/user-interaction/date/DatePicker.tsx
13673
13757
  import { useState as useState29 } from "react";
13674
13758
  import { ArrowDown, ArrowUp, Calendar, ChevronDown as ChevronDown4 } from "lucide-react";
13675
- import clsx29 from "clsx";
13759
+ import clsx30 from "clsx";
13676
13760
 
13677
13761
  // src/components/user-interaction/date/DayPicker.tsx
13678
13762
  import { useMemo as useMemo21 } from "react";
@@ -13752,7 +13836,7 @@ var DayPickerUncontrolled = ({
13752
13836
 
13753
13837
  // src/components/user-interaction/date/YearMonthPicker.tsx
13754
13838
  import { memo, useCallback as useCallback20, useEffect as useEffect28, useLayoutEffect as useLayoutEffect4, useMemo as useMemo22, useRef as useRef22, useState as useState28 } from "react";
13755
- import clsx28 from "clsx";
13839
+ import clsx29 from "clsx";
13756
13840
  import { jsx as jsx60, jsxs as jsxs31 } from "react/jsx-runtime";
13757
13841
  var YearRow = memo(function YearRow2({
13758
13842
  year,
@@ -13778,7 +13862,7 @@ var YearRow = memo(function YearRow2({
13778
13862
  isExpanded,
13779
13863
  onExpandedChange: setIsExpanded,
13780
13864
  children: [
13781
- /* @__PURE__ */ jsx60(ExpandableHeader, { className: clsx28("px-2", { "text-primary font-bold": isSelectedYear }), children: year }),
13865
+ /* @__PURE__ */ jsx60(ExpandableHeader, { className: clsx29("px-2", { "text-primary font-bold": isSelectedYear }), children: year }),
13782
13866
  /* @__PURE__ */ jsx60(ExpandableContent, { className: "gap-y-1 px-2 expandable-content-h-39", children: isExpanded && monthGrid.map((group, groupIdx) => /* @__PURE__ */ jsx60("div", { className: "flex-row-1", children: group.map((month) => {
13783
13867
  const monthIndex = DateUtils.monthsList.indexOf(month);
13784
13868
  const currentTimestamp = new Date(year, monthIndex).getTime();
@@ -13847,7 +13931,7 @@ var YearMonthPicker = ({
13847
13931
  InfiniteScroll,
13848
13932
  {
13849
13933
  itemCount: years.length,
13850
- className: clsx28("flex-col-1 h-full select-none", className),
13934
+ className: clsx29("flex-col-1 h-full select-none", className),
13851
13935
  initialIndex: years.findIndex((year) => year === value.getFullYear()),
13852
13936
  children: (index) => {
13853
13937
  const year = years[index];
@@ -13902,14 +13986,14 @@ var DatePicker = ({
13902
13986
  const { locale } = useLocale();
13903
13987
  const [displayedMonth, setDisplayedMonth] = useState29(new Date(value.getFullYear(), value.getMonth(), 1));
13904
13988
  const [displayMode, setDisplayMode] = useState29(initialDisplay);
13905
- return /* @__PURE__ */ jsxs32("div", { className: clsx29("flex-col-3", className), children: [
13989
+ return /* @__PURE__ */ jsxs32("div", { className: clsx30("flex-col-3", className), children: [
13906
13990
  /* @__PURE__ */ jsxs32("div", { className: "flex-row-2 items-center justify-between", children: [
13907
13991
  /* @__PURE__ */ jsxs32(
13908
13992
  Button,
13909
13993
  {
13910
13994
  size: "sm",
13911
13995
  coloringStyle: "text",
13912
- className: clsx29("flex-row-1 items-center cursor-pointer select-none", {
13996
+ className: clsx30("flex-row-1 items-center cursor-pointer select-none", {
13913
13997
  "text-disabled": displayMode !== "day"
13914
13998
  }),
13915
13999
  onClick: () => setDisplayMode(displayMode === "day" ? "yearMonth" : "day"),
@@ -14049,7 +14133,7 @@ var DateTimePicker = ({
14049
14133
  ...timePickerProps,
14050
14134
  is24HourFormat,
14051
14135
  minuteIncrement,
14052
- className: clsx30({ "justify-between": mode === "time" }),
14136
+ className: clsx31({ "justify-between": mode === "time" }),
14053
14137
  value,
14054
14138
  onValueChange,
14055
14139
  onEditComplete
@@ -14205,11 +14289,7 @@ var DateTimeInput = forwardRef14(function DateTimeInput2({
14205
14289
  label: `date-time-input-label-${id}`
14206
14290
  }), [id]);
14207
14291
  const innerRef = useRef23(null);
14208
- const containerRef = useRef23(null);
14209
- useImperativeHandle9(forwardedRef, () => ({
14210
- input: innerRef.current,
14211
- popup: containerRef.current
14212
- }));
14292
+ useImperativeHandle9(forwardedRef, () => innerRef.current);
14213
14293
  useEffect29(() => {
14214
14294
  if (readOnly || disabled) {
14215
14295
  changeOpenWrapper(false);
@@ -14217,11 +14297,12 @@ var DateTimeInput = forwardRef14(function DateTimeInput2({
14217
14297
  }, [changeOpenWrapper, readOnly, disabled]);
14218
14298
  const clickHandler = PropsUtil.aria.click(() => changeOpenWrapper(true));
14219
14299
  return /* @__PURE__ */ jsxs35(Fragment7, { children: [
14220
- /* @__PURE__ */ jsxs35("div", { ...containerProps, ref: innerRef, className: clsx31("relative w-full", containerProps?.className), children: [
14300
+ /* @__PURE__ */ jsxs35("div", { ...containerProps, className: clsx32("relative w-full", containerProps?.className), children: [
14221
14301
  /* @__PURE__ */ jsx64(
14222
14302
  "div",
14223
14303
  {
14224
14304
  ...props,
14305
+ ref: innerRef,
14225
14306
  id: ids.input,
14226
14307
  onClick: (event) => {
14227
14308
  clickHandler.onClick();
@@ -14229,13 +14310,14 @@ var DateTimeInput = forwardRef14(function DateTimeInput2({
14229
14310
  },
14230
14311
  onKeyDown: clickHandler.onKeyDown,
14231
14312
  ...PropsUtil.dataAttributes.interactionStates({ disabled, readOnly, invalid, required }),
14313
+ "data-value": PropsUtil.dataAttributes.bool(!!state),
14232
14314
  ...PropsUtil.aria.interactionStates({ disabled, readOnly, invalid, required }, props),
14233
14315
  tabIndex: 0,
14234
14316
  role: "combobox",
14235
14317
  "aria-haspopup": "dialog",
14236
14318
  "aria-expanded": isOpen,
14237
14319
  "aria-controls": isOpen ? ids.popup : void 0,
14238
- className: clsx31(
14320
+ className: clsx32(
14239
14321
  "pr-10 w-full flex-row-2 items-center justify-between h-10 px-3 rounded-md input-element",
14240
14322
  "outline-offset-0 outline-primary focus:outline-1 focus:outline-offset-1 focus:border-primary duration-(--animation-duration-in)",
14241
14323
  { "hover:cursor-pointer": !readOnly },
@@ -14267,7 +14349,6 @@ var DateTimeInput = forwardRef14(function DateTimeInput2({
14267
14349
  /* @__PURE__ */ jsx64(
14268
14350
  PopUp,
14269
14351
  {
14270
- ref: containerRef,
14271
14352
  id: ids.popup,
14272
14353
  isOpen,
14273
14354
  anchor: innerRef,
@@ -14983,13 +15064,13 @@ var TableHeader = ({ table: tableOverride, isSticky = false }) => {
14983
15064
  },
14984
15065
  header.id
14985
15066
  )) }, headerGroup.id)),
14986
- /* @__PURE__ */ jsx68("thead", { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx68("tr", { className: clsx32("table-header-row", table.options.meta?.headerRowClassName), children: headerGroup.headers.map((header) => {
15067
+ /* @__PURE__ */ jsx68("thead", { children: table.getHeaderGroups().map((headerGroup) => /* @__PURE__ */ jsx68("tr", { className: clsx33("table-header-row", table.options.meta?.headerRowClassName), children: headerGroup.headers.map((header) => {
14987
15068
  return /* @__PURE__ */ jsxs39(
14988
15069
  "th",
14989
15070
  {
14990
15071
  colSpan: header.colSpan,
14991
15072
  "data-sticky": isSticky ? "" : void 0,
14992
- className: clsx32("table-header-cell group/table-header-cell", header.column.columnDef.meta?.className),
15073
+ className: clsx33("table-header-cell group/table-header-cell", header.column.columnDef.meta?.className),
14993
15074
  children: [
14994
15075
  /* @__PURE__ */ jsx68(Visibility, { isVisible: !header.isPlaceholder, children: /* @__PURE__ */ jsxs39("div", { className: "flex-row-1 items-center", children: [
14995
15076
  /* @__PURE__ */ jsx68(Visibility, { isVisible: header.column.getCanSort(), children: /* @__PURE__ */ jsx68(
@@ -15061,7 +15142,7 @@ var TableHeader = ({ table: tableOverride, isSticky = false }) => {
15061
15142
  };
15062
15143
 
15063
15144
  // src/components/layout/table/TableDisplay.tsx
15064
- import clsx33 from "clsx";
15145
+ import clsx34 from "clsx";
15065
15146
  import { jsx as jsx69, jsxs as jsxs40 } from "react/jsx-runtime";
15066
15147
  var TableDisplay = ({
15067
15148
  children,
@@ -15072,11 +15153,11 @@ var TableDisplay = ({
15072
15153
  const { table } = useTableDataContext();
15073
15154
  const { containerRef } = useTableContainerContext();
15074
15155
  const { sizeVars } = useTableHeaderContext();
15075
- return /* @__PURE__ */ jsx69("div", { ...containerProps, ref: containerRef, className: clsx33("table-container", containerProps?.className), children: /* @__PURE__ */ jsxs40(
15156
+ return /* @__PURE__ */ jsx69("div", { ...containerProps, ref: containerRef, className: clsx34("table-container", containerProps?.className), children: /* @__PURE__ */ jsxs40(
15076
15157
  "table",
15077
15158
  {
15078
15159
  ...props,
15079
- className: clsx33("table", props.className),
15160
+ className: clsx34("table", props.className),
15080
15161
  style: {
15081
15162
  ...sizeVars,
15082
15163
  width: Math.floor(Math.max(table.getTotalSize(), containerRef.current?.offsetWidth ?? table.getTotalSize()))
@@ -15092,7 +15173,7 @@ var TableDisplay = ({
15092
15173
 
15093
15174
  // src/components/layout/table/TablePagination.tsx
15094
15175
  import { useEffect as useEffect32 } from "react";
15095
- import clsx34 from "clsx";
15176
+ import clsx35 from "clsx";
15096
15177
  import { jsx as jsx70, jsxs as jsxs41 } from "react/jsx-runtime";
15097
15178
  var TablePaginationMenu = () => {
15098
15179
  const { table } = useTableDataContext();
@@ -15130,7 +15211,7 @@ var TablePageSizeSelect = ({
15130
15211
  );
15131
15212
  };
15132
15213
  var TablePagination = ({ allowChangingPageSize = true, pageSizeOptions, ...props }) => {
15133
- return /* @__PURE__ */ jsx70("div", { ...props, className: clsx34("flex-row-2 items-center justify-center", props.className), children: /* @__PURE__ */ jsxs41("div", { className: "relative", children: [
15214
+ return /* @__PURE__ */ jsx70("div", { ...props, className: clsx35("flex-row-2 items-center justify-center", props.className), children: /* @__PURE__ */ jsxs41("div", { className: "relative", children: [
15134
15215
  /* @__PURE__ */ jsx70(TablePaginationMenu, {}),
15135
15216
  /* @__PURE__ */ jsx70(Visibility, { isVisible: allowChangingPageSize, children: /* @__PURE__ */ jsx70(TablePageSizeSelect, { pageSizeOptions, buttonProps: { className: "absolute left-1/1 top-1/2 -translate-y-1/2 translate-x-4 h-10 min-w-24" } }) })
15136
15217
  ] }) });
@@ -15139,7 +15220,7 @@ var TablePagination = ({ allowChangingPageSize = true, pageSizeOptions, ...props
15139
15220
  // src/components/user-interaction/Checkbox.tsx
15140
15221
  import { Check as Check2, Minus as Minus2 } from "lucide-react";
15141
15222
  import { useCallback as useCallback23 } from "react";
15142
- import clsx35 from "clsx";
15223
+ import clsx36 from "clsx";
15143
15224
  import { jsx as jsx71, jsxs as jsxs42 } from "react/jsx-runtime";
15144
15225
  var Checkbox = ({
15145
15226
  value = false,
@@ -15183,7 +15264,7 @@ var Checkbox = ({
15183
15264
  tabIndex: disabled ? -1 : 0,
15184
15265
  "aria-checked": indeterminate ? "mixed" : value,
15185
15266
  ...PropsUtil.aria.interactionStates({ disabled, invalid, readOnly, required }, props),
15186
- className: clsx35("checkbox", props.className),
15267
+ className: clsx36("checkbox", props.className),
15187
15268
  children: [
15188
15269
  /* @__PURE__ */ jsx71(Visibility, { isVisible: indeterminate, children: /* @__PURE__ */ jsx71(Minus2, { className: "checkbox-indicator", "aria-hidden": true }) }),
15189
15270
  /* @__PURE__ */ jsx71(Visibility, { isVisible: !indeterminate && (alwaysShowCheckIcon || value), children: /* @__PURE__ */ jsx71(Check2, { className: "checkbox-indicator", "aria-hidden": true }) })
@@ -15213,7 +15294,7 @@ import { jsx as jsx72 } from "react/jsx-runtime";
15213
15294
  var TableWithSelectionProvider = ({
15214
15295
  children,
15215
15296
  state,
15216
- fillerRow,
15297
+ fillerRowCell,
15217
15298
  rowSelection,
15218
15299
  disableClickRowClickSelection = false,
15219
15300
  selectionRowId = "selection",
@@ -15237,7 +15318,14 @@ var TableWithSelectionProvider = ({
15237
15318
  );
15238
15319
  },
15239
15320
  cell: ({ row }) => {
15240
- return /* @__PURE__ */ jsx72(Checkbox, { disabled: !row.getCanSelect(), value: row.getIsSelected(), onValueChange: row.getToggleSelectedHandler() });
15321
+ return /* @__PURE__ */ jsx72(
15322
+ Checkbox,
15323
+ {
15324
+ disabled: !row.getCanSelect(),
15325
+ value: row.getIsSelected(),
15326
+ onValueChange: row.getToggleSelectedHandler()
15327
+ }
15328
+ );
15241
15329
  },
15242
15330
  size: 60,
15243
15331
  minSize: 60,
@@ -15253,12 +15341,12 @@ var TableWithSelectionProvider = ({
15253
15341
  TableProvider,
15254
15342
  {
15255
15343
  ...props,
15256
- fillerRow: useCallback24((columnId, table) => {
15344
+ fillerRowCell: useCallback24((columnId, table) => {
15257
15345
  if (columnId === selectionRowId) {
15258
- return /* @__PURE__ */ jsx72(Checkbox, { value: false, disabled: true, className: "max-w-6" });
15346
+ return /* @__PURE__ */ jsx72(Checkbox, { value: false, disabled: true });
15259
15347
  }
15260
- return fillerRow?.(columnId, table) ?? /* @__PURE__ */ jsx72(FillerCell, {});
15261
- }, [fillerRow, selectionRowId]),
15348
+ return fillerRowCell?.(columnId, table) ?? /* @__PURE__ */ jsx72(FillerCell, {});
15349
+ }, [fillerRowCell, selectionRowId]),
15262
15350
  columns: columnDef,
15263
15351
  initialState: {
15264
15352
  ...props.initialState,
@@ -15283,11 +15371,11 @@ var TableWithSelectionProvider = ({
15283
15371
  };
15284
15372
 
15285
15373
  // src/components/layout/table/Table.tsx
15286
- import clsx36 from "clsx";
15374
+ import clsx37 from "clsx";
15287
15375
  import { jsx as jsx73, jsxs as jsxs43 } from "react/jsx-runtime";
15288
15376
  var Table = ({ children, table, paginationOptions, displayProps, header, footer, ...props }) => {
15289
15377
  const { showPagination = true, allowChangingPageSize, pageSizeOptions } = paginationOptions ?? {};
15290
- return /* @__PURE__ */ jsx73("div", { ...props, className: clsx36("flex-col-3", props.className), children: /* @__PURE__ */ jsxs43(TableProvider, { ...table, children: [
15378
+ return /* @__PURE__ */ jsx73("div", { ...props, className: clsx37("flex-col-3", props.className), children: /* @__PURE__ */ jsxs43(TableProvider, { ...table, children: [
15291
15379
  header,
15292
15380
  /* @__PURE__ */ jsx73(TableDisplay, { ...displayProps, children }),
15293
15381
  /* @__PURE__ */ jsx73(Visibility, { isVisible: showPagination, children: /* @__PURE__ */ jsx73(TablePagination, { allowChangingPageSize, pageSizeOptions }) }),
@@ -15304,7 +15392,7 @@ var TableWithSelection = ({
15304
15392
  ...props
15305
15393
  }) => {
15306
15394
  const { showPagination = true, allowChangingPageSize, pageSizeOptions } = paginationOptions ?? {};
15307
- return /* @__PURE__ */ jsx73("div", { ...props, className: clsx36("flex-col-3", props.className), children: /* @__PURE__ */ jsxs43(TableWithSelectionProvider, { ...table, children: [
15395
+ return /* @__PURE__ */ jsx73("div", { ...props, className: clsx37("flex-col-3", props.className), children: /* @__PURE__ */ jsxs43(TableWithSelectionProvider, { ...table, children: [
15308
15396
  header,
15309
15397
  /* @__PURE__ */ jsx73(TableDisplay, { ...displayProps, children }),
15310
15398
  /* @__PURE__ */ jsx73(Visibility, { isVisible: showPagination, children: /* @__PURE__ */ jsx73(TablePagination, { allowChangingPageSize, pageSizeOptions }) }),
@@ -15614,7 +15702,7 @@ var TableColumnSwitcher = ({ buttonProps, ...props }) => {
15614
15702
 
15615
15703
  // src/components/user-interaction/CopyToClipboardWrapper.tsx
15616
15704
  import { useState as useState34 } from "react";
15617
- import { clsx as clsx37 } from "clsx";
15705
+ import { clsx as clsx38 } from "clsx";
15618
15706
 
15619
15707
  // src/utils/writeToClipboard.ts
15620
15708
  var writeToClipboard = (text) => {
@@ -15657,7 +15745,7 @@ var CopyToClipboardWrapper = ({
15657
15745
  return /* @__PURE__ */ jsxs45(
15658
15746
  "div",
15659
15747
  {
15660
- className: clsx37("relative inline-block cursor-copy", containerClassName),
15748
+ className: clsx38("relative inline-block cursor-copy", containerClassName),
15661
15749
  onMouseEnter: () => {
15662
15750
  setIsShowingIndication(true);
15663
15751
  },
@@ -15675,7 +15763,7 @@ var CopyToClipboardWrapper = ({
15675
15763
  /* @__PURE__ */ jsxs45(
15676
15764
  "div",
15677
15765
  {
15678
- className: clsx37(
15766
+ className: clsx38(
15679
15767
  `absolute text-xs font-semibold text-tooltip-text px-2 py-1 rounded whitespace-nowrap
15680
15768
  shadow-around-md bg-tooltip-background cursor-default pointer-events-none`,
15681
15769
  "transition-opacity duration-200",
@@ -15698,7 +15786,7 @@ var CopyToClipboardWrapper = ({
15698
15786
  /* @__PURE__ */ jsx76(
15699
15787
  "div",
15700
15788
  {
15701
- className: clsx37(`absolute w-0 h-0`, triangleClasses[position]),
15789
+ className: clsx38(`absolute w-0 h-0`, triangleClasses[position]),
15702
15790
  style: { ...triangleStyle[position], zIndex: zIndex + 1 }
15703
15791
  }
15704
15792
  )
@@ -15712,7 +15800,7 @@ var CopyToClipboardWrapper = ({
15712
15800
 
15713
15801
  // src/components/user-interaction/Menu.tsx
15714
15802
  import { useCallback as useCallback25, useRef as useRef26 } from "react";
15715
- import clsx38 from "clsx";
15803
+ import clsx39 from "clsx";
15716
15804
 
15717
15805
  // src/hooks/useHoverState.ts
15718
15806
  import { useEffect as useEffect34, useState as useState35 } from "react";
@@ -15768,7 +15856,7 @@ var MenuItem = ({
15768
15856
  }) => /* @__PURE__ */ jsx77(
15769
15857
  "div",
15770
15858
  {
15771
- className: clsx38("block px-3 py-1.5 first:rounded-t-md last:rounded-b-md text-sm font-semibold text-nowrap", {
15859
+ className: clsx39("block px-3 py-1.5 first:rounded-t-md last:rounded-b-md text-sm font-semibold text-nowrap", {
15772
15860
  "text-disabled cursor-not-allowed": isDisabled,
15773
15861
  "text-menu-text hover:bg-primary/20": !isDisabled,
15774
15862
  "cursor-pointer": !!onClick
@@ -15816,7 +15904,7 @@ var Menu = ({
15816
15904
 
15817
15905
  // src/components/user-interaction/ScrollPicker.tsx
15818
15906
  import { useCallback as useCallback26, useEffect as useEffect35, useState as useState36 } from "react";
15819
- import clsx39 from "clsx";
15907
+ import clsx40 from "clsx";
15820
15908
  import { jsx as jsx78, jsxs as jsxs47 } from "react/jsx-runtime";
15821
15909
  var up = 1;
15822
15910
  var down = -1;
@@ -15986,7 +16074,7 @@ var ScrollPicker = ({
15986
16074
  children: shownItems.map(({ name: name2, index }, arrayIndex) => /* @__PURE__ */ jsx78(
15987
16075
  "div",
15988
16076
  {
15989
- className: clsx39(
16077
+ className: clsx40(
15990
16078
  `flex-col-2 items-center justify-center rounded-md`,
15991
16079
  {
15992
16080
  "text-primary font-bold": currentIndex === index,
@@ -16014,7 +16102,7 @@ var ScrollPicker = ({
16014
16102
 
16015
16103
  // src/components/user-interaction/Textarea.tsx
16016
16104
  import { forwardRef as forwardRef16, useId as useId16 } from "react";
16017
- import clsx40 from "clsx";
16105
+ import clsx41 from "clsx";
16018
16106
  import { jsx as jsx79, jsxs as jsxs48 } from "react/jsx-runtime";
16019
16107
  var Textarea = forwardRef16(function Textarea2({
16020
16108
  invalid = false,
@@ -16081,7 +16169,7 @@ var TextareaWithHeadline = ({
16081
16169
  return /* @__PURE__ */ jsxs48(
16082
16170
  "div",
16083
16171
  {
16084
- className: clsx40(
16172
+ className: clsx41(
16085
16173
  "group flex-col-3 border-2 rounded-lg",
16086
16174
  {
16087
16175
  "bg-input-background text-input-text hover:border-primary focus-within:border-primary": !disabled,
@@ -16090,13 +16178,13 @@ var TextareaWithHeadline = ({
16090
16178
  containerClassName
16091
16179
  ),
16092
16180
  children: [
16093
- headline && /* @__PURE__ */ jsx79("label", { ...headlineProps, htmlFor: usedId, className: clsx40("typography-lable-md text-label", headlineProps.className), children: headline }),
16181
+ headline && /* @__PURE__ */ jsx79("label", { ...headlineProps, htmlFor: usedId, className: clsx41("typography-lable-md text-label", headlineProps.className), children: headline }),
16094
16182
  /* @__PURE__ */ jsx79(
16095
16183
  Textarea,
16096
16184
  {
16097
16185
  ...props,
16098
16186
  id: usedId,
16099
- className: clsx40(
16187
+ className: clsx41(
16100
16188
  "border-transparent focus:ring-0 focus-visible:ring-0 resize-none h-32",
16101
16189
  className
16102
16190
  )
@@ -16151,7 +16239,7 @@ var TimeDisplay = ({
16151
16239
  // src/components/user-interaction/input/InsideLabelInput.tsx
16152
16240
  import { useId as useId17 } from "react";
16153
16241
  import { forwardRef as forwardRef17, useState as useState37 } from "react";
16154
- import clsx41 from "clsx";
16242
+ import clsx42 from "clsx";
16155
16243
  import { jsx as jsx81, jsxs as jsxs49 } from "react/jsx-runtime";
16156
16244
  var InsideLabelInput = forwardRef17(function InsideLabelInput2({
16157
16245
  id: customId,
@@ -16162,13 +16250,13 @@ var InsideLabelInput = forwardRef17(function InsideLabelInput2({
16162
16250
  const [isFocused, setIsFocused] = useState37(false);
16163
16251
  const generatedId = useId17();
16164
16252
  const id = customId ?? generatedId;
16165
- return /* @__PURE__ */ jsxs49("div", { className: clsx41("relative"), children: [
16253
+ return /* @__PURE__ */ jsxs49("div", { className: clsx42("relative"), children: [
16166
16254
  /* @__PURE__ */ jsx81(
16167
16255
  Input,
16168
16256
  {
16169
16257
  ...props,
16170
16258
  id,
16171
- className: clsx41("h-14 px-4 pb-2 py-6.5", props.className),
16259
+ className: clsx42("h-14 px-4 pb-2 py-6.5", props.className),
16172
16260
  ref: forwardedRef,
16173
16261
  "aria-labelledby": id + "-label",
16174
16262
  onFocus: (event) => {
@@ -16187,7 +16275,7 @@ var InsideLabelInput = forwardRef17(function InsideLabelInput2({
16187
16275
  id: id + "-label",
16188
16276
  "aria-hidden": true,
16189
16277
  "data-display": isFocused || !!value ? "small" : "full",
16190
- className: clsx41(
16278
+ className: clsx42(
16191
16279
  // margin left to account for the border which is ignored for absolute positions
16192
16280
  "absolute left-4 ml-0.5 top-2 transition-all delay-25 pointer-events-none touch-none",
16193
16281
  "data-[display=small]:top-2 data-[display=small]:h-force-4.5 data-[display=small]:typography-caption-sm data-[display=small]:overflow-y-hidden",
@@ -16215,7 +16303,7 @@ var InsideLabelInputUncontrolled = ({
16215
16303
 
16216
16304
  // src/components/user-interaction/input/SearchBar.tsx
16217
16305
  import { Search } from "lucide-react";
16218
- import { clsx as clsx42 } from "clsx";
16306
+ import { clsx as clsx43 } from "clsx";
16219
16307
  import { jsx as jsx82, jsxs as jsxs50 } from "react/jsx-runtime";
16220
16308
  var SearchBar = ({
16221
16309
  value: initialValue,
@@ -16227,7 +16315,7 @@ var SearchBar = ({
16227
16315
  }) => {
16228
16316
  const translation = useHightideTranslation();
16229
16317
  const [value, setValue] = useOverwritableState(initialValue, onValueChange);
16230
- return /* @__PURE__ */ jsxs50("div", { ...containerProps, className: clsx42("relative", containerProps?.className), children: [
16318
+ return /* @__PURE__ */ jsxs50("div", { ...containerProps, className: clsx43("relative", containerProps?.className), children: [
16231
16319
  /* @__PURE__ */ jsx82(
16232
16320
  InputUncontrolled,
16233
16321
  {
@@ -16236,7 +16324,7 @@ var SearchBar = ({
16236
16324
  onValueChange: setValue,
16237
16325
  onEditComplete: onSearch,
16238
16326
  placeholder: inputProps.placeholder ?? translation("search"),
16239
- className: clsx42("pr-10 w-full", inputProps.className)
16327
+ className: clsx43("pr-10 w-full", inputProps.className)
16240
16328
  }
16241
16329
  ),
16242
16330
  /* @__PURE__ */ jsx82(
@@ -16248,7 +16336,7 @@ var SearchBar = ({
16248
16336
  color: "neutral",
16249
16337
  coloringStyle: "text",
16250
16338
  onClick: () => onSearch(value),
16251
- className: clsx42("absolute right-1 top-1/2 -translate-y-1/2", searchButtonProps?.className),
16339
+ className: clsx43("absolute right-1 top-1/2 -translate-y-1/2", searchButtonProps?.className),
16252
16340
  children: /* @__PURE__ */ jsx82(Search, { className: "w-full h-full" })
16253
16341
  }
16254
16342
  )
@@ -16258,7 +16346,7 @@ var SearchBar = ({
16258
16346
  // src/components/user-interaction/input/ToggleableInput.tsx
16259
16347
  import { forwardRef as forwardRef18, useEffect as useEffect36, useImperativeHandle as useImperativeHandle10, useRef as useRef27, useState as useState38 } from "react";
16260
16348
  import { Pencil } from "lucide-react";
16261
- import clsx43 from "clsx";
16349
+ import clsx44 from "clsx";
16262
16350
  import { jsx as jsx83, jsxs as jsxs51 } from "react/jsx-runtime";
16263
16351
  var ToggleableInput = forwardRef18(function ToggleableInput2({
16264
16352
  value,
@@ -16274,7 +16362,7 @@ var ToggleableInput = forwardRef18(function ToggleableInput2({
16274
16362
  innerRef.current?.focus();
16275
16363
  }
16276
16364
  }, [isEditing]);
16277
- return /* @__PURE__ */ jsxs51("div", { className: clsx43("relative flex-row-2", { "flex-1": isEditing }), children: [
16365
+ return /* @__PURE__ */ jsxs51("div", { className: clsx44("relative flex-row-2", { "flex-1": isEditing }), children: [
16278
16366
  /* @__PURE__ */ jsx83(
16279
16367
  Input,
16280
16368
  {
@@ -16296,14 +16384,14 @@ var ToggleableInput = forwardRef18(function ToggleableInput2({
16296
16384
  },
16297
16385
  "data-name": props["data-name"] ?? "togglable-input",
16298
16386
  "data-isEditing": isEditing ? "" : void 0,
16299
- className: clsx43(`w-full rounded-md`, {
16387
+ className: clsx44(`w-full rounded-md`, {
16300
16388
  "text-transparent": !isEditing
16301
16389
  })
16302
16390
  }
16303
16391
  ),
16304
16392
  !isEditing && /* @__PURE__ */ jsxs51("div", { className: "absolute left-0 flex-row-2 items-center pointer-events-none touch-none w-full overflow-hidden", children: [
16305
- /* @__PURE__ */ jsx83("span", { className: clsx43(" truncate"), children: value }),
16306
- /* @__PURE__ */ jsx83(Pencil, { className: clsx43(`size-force-4`, { "text-transparent": isEditing }) })
16393
+ /* @__PURE__ */ jsx83("span", { className: clsx44(" truncate"), children: value }),
16394
+ /* @__PURE__ */ jsx83(Pencil, { className: clsx44(`size-force-4`, { "text-transparent": isEditing }) })
16307
16395
  ] })
16308
16396
  ] });
16309
16397
  });
@@ -17451,6 +17539,8 @@ export {
17451
17539
  FormContext,
17452
17540
  FormField,
17453
17541
  FormFieldLayout,
17542
+ FormObserver,
17543
+ FormObserverKey,
17454
17544
  FormProvider,
17455
17545
  FormStore,
17456
17546
  GenericFilter,
@@ -17615,6 +17705,8 @@ export {
17615
17705
  useFocusTrap,
17616
17706
  useForm,
17617
17707
  useFormField,
17708
+ useFormObserver,
17709
+ useFormObserverKey,
17618
17710
  useHandleRefs,
17619
17711
  useHightideConfig,
17620
17712
  useHightideTranslation,