@openg2p/registry-widgets 1.1.9-dev.2 → 1.1.9-dev.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/components/PanelRenderer.d.ts.map +1 -1
  2. package/dist/components/SectionBuilder/schemas.d.ts +4 -4
  3. package/dist/components/SectionRenderer/SectionRenderer.d.ts.map +1 -1
  4. package/dist/components/SectionRenderer/components/IntakeFormLayout.d.ts.map +1 -1
  5. package/dist/components/SectionRenderer/components/RegistryViewLayout.d.ts.map +1 -1
  6. package/dist/components/SectionRenderer/components/SectionStyles.d.ts.map +1 -1
  7. package/dist/components/SectionRenderer/types/sectionChanges.d.ts +11 -2
  8. package/dist/components/SectionRenderer/types/sectionChanges.d.ts.map +1 -1
  9. package/dist/components/SectionRenderer/utils/diffSectionChangeRecords.d.ts +2 -1
  10. package/dist/components/SectionRenderer/utils/diffSectionChangeRecords.d.ts.map +1 -1
  11. package/dist/components/SectionRenderer/utils/documentWidgetConfig.d.ts +0 -1
  12. package/dist/components/SectionRenderer/utils/documentWidgetConfig.d.ts.map +1 -1
  13. package/dist/components/SectionRenderer/utils/executeSectionSave.d.ts.map +1 -1
  14. package/dist/components/SectionRenderer/utils/index.d.ts +2 -0
  15. package/dist/components/SectionRenderer/utils/index.d.ts.map +1 -1
  16. package/dist/components/SectionRenderer/utils/sectionFiles.d.ts +52 -0
  17. package/dist/components/SectionRenderer/utils/sectionFiles.d.ts.map +1 -0
  18. package/dist/components/SectionRenderer/utils/sectionSnapshot.d.ts +3 -2
  19. package/dist/components/SectionRenderer/utils/sectionSnapshot.d.ts.map +1 -1
  20. package/dist/components/SectionsContainer.d.ts.map +1 -1
  21. package/dist/hooks/useBaseWidget.d.ts.map +1 -1
  22. package/dist/index.d.ts +53 -21
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.esm.js +638 -744
  25. package/dist/index.esm.js.map +1 -1
  26. package/dist/index.js +640 -745
  27. package/dist/index.js.map +1 -1
  28. package/dist/registry/defaultWidgets.d.ts.map +1 -1
  29. package/dist/registry/widgetTypes.d.ts +1 -1
  30. package/dist/registry/widgetTypes.d.ts.map +1 -1
  31. package/dist/theme/index.d.ts +1 -1
  32. package/dist/theme/index.d.ts.map +1 -1
  33. package/dist/types/index.d.ts +0 -10
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/utils/pathUtils.d.ts.map +1 -1
  36. package/dist/utils/sectionValidate.d.ts +2 -1
  37. package/dist/utils/sectionValidate.d.ts.map +1 -1
  38. package/dist/utils/storedDocument.d.ts +9 -0
  39. package/dist/utils/storedDocument.d.ts.map +1 -0
  40. package/dist/utils/validation.d.ts +1 -2
  41. package/dist/utils/validation.d.ts.map +1 -1
  42. package/dist/widgets/DialogTableWidget.d.ts.map +1 -1
  43. package/dist/widgets/FileInputWidget.d.ts.map +1 -1
  44. package/dist/widgets/HeaderSectionWidget.d.ts.map +1 -1
  45. package/dist/widgets/IdAuthenticationWidget.d.ts.map +1 -1
  46. package/dist/widgets/ProfileWidget.d.ts.map +1 -1
  47. package/dist/widgets/RegisterLookupWidget.d.ts.map +1 -1
  48. package/dist/widgets/TableWidget.d.ts.map +1 -1
  49. package/dist/widgets/index.d.ts +0 -1
  50. package/dist/widgets/index.d.ts.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/widgets/DocsWidget.d.ts +0 -16
  53. package/dist/widgets/DocsWidget.d.ts.map +0 -1
package/dist/index.esm.js CHANGED
@@ -211,10 +211,16 @@ const getWidgetValue = (values, dataPath, widgetId) => {
211
211
  return getValueByPath(values, dataPath);
212
212
  }
213
213
  const result = {};
214
+ let hasDefined = false;
214
215
  for (const [key, path] of Object.entries(dataPath)) {
215
- result[key] = getValueByPath(values, path);
216
+ const pathValue = getValueByPath(values, path);
217
+ result[key] = pathValue;
218
+ if (pathValue !== undefined) {
219
+ hasDefined = true;
220
+ }
216
221
  }
217
- return result;
222
+ // Avoid returning `{ label: undefined, ... }` which looks like an empty select option.
223
+ return hasDefined ? result : undefined;
218
224
  };
219
225
  /**
220
226
  * Set value in widget state using data path.
@@ -274,79 +280,6 @@ const setWidgetValue = (currentValues, dataPath, widgetId, value) => {
274
280
  return widgetId ? { ...newValues, [widgetId]: value } : newValues;
275
281
  };
276
282
 
277
- const isFile = (value) => {
278
- return value instanceof File;
279
- };
280
- const isSerializedFile = (value) => {
281
- return value && typeof value === 'object' && value.__type === 'File';
282
- };
283
- const serializeFile = async (file) => {
284
- return new Promise((resolve, reject) => {
285
- const reader = new FileReader();
286
- reader.onload = () => {
287
- const base64 = reader.result.split(',')[1];
288
- resolve({
289
- __type: 'File',
290
- name: file.name,
291
- type: file.type,
292
- size: file.size,
293
- lastModified: file.lastModified,
294
- data: base64,
295
- });
296
- };
297
- reader.onerror = reject;
298
- reader.readAsDataURL(file);
299
- });
300
- };
301
- const deserializeFile = (serialized) => {
302
- const byteCharacters = atob(serialized.data);
303
- const byteNumbers = new Array(byteCharacters.length);
304
- for (let i = 0; i < byteCharacters.length; i++) {
305
- byteNumbers[i] = byteCharacters.charCodeAt(i);
306
- }
307
- const byteArray = new Uint8Array(byteNumbers);
308
- const blob = new Blob([byteArray], { type: serialized.type });
309
- return new File([blob], serialized.name, {
310
- type: serialized.type,
311
- lastModified: serialized.lastModified,
312
- });
313
- };
314
- const serializeValue = async (value) => {
315
- if (value === null || value === undefined) {
316
- return value;
317
- }
318
- if (isFile(value)) {
319
- return await serializeFile(value);
320
- }
321
- if (Array.isArray(value)) {
322
- return Promise.all(value.map(item => serializeValue(item)));
323
- }
324
- if (value && typeof value === 'object' && !(value instanceof Date) && !(value instanceof RegExp)) {
325
- const result = {};
326
- for (const [key, val] of Object.entries(value)) {
327
- result[key] = await serializeValue(val);
328
- }
329
- return result;
330
- }
331
- return value;
332
- };
333
- const deserializeValue = (value) => {
334
- if (isSerializedFile(value)) {
335
- return deserializeFile(value);
336
- }
337
- if (Array.isArray(value)) {
338
- return value.map(item => deserializeValue(item));
339
- }
340
- if (value && typeof value === 'object') {
341
- const result = {};
342
- for (const [key, val] of Object.entries(value)) {
343
- result[key] = deserializeValue(val);
344
- }
345
- return result;
346
- }
347
- return value;
348
- };
349
-
350
283
  const VALIDATION_PATTERNS = {
351
284
  email: {
352
285
  pattern: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,
@@ -445,35 +378,6 @@ const validateWidget = (value, validation, required = false, skipRequired = fals
445
378
  }
446
379
  return errors;
447
380
  };
448
- const isDocsSlotFilled = (stored) => {
449
- if (stored == null || stored === '') {
450
- return false;
451
- }
452
- if (typeof stored === 'string') {
453
- return stored.trim().length > 0;
454
- }
455
- if (typeof File !== 'undefined' && stored instanceof File) {
456
- return true;
457
- }
458
- return isSerializedFile(stored);
459
- };
460
- const validateDocsWidget = (value, documents, skipRequired = false) => {
461
- if (skipRequired || !documents?.length) {
462
- return [];
463
- }
464
- const docsValue = value && typeof value === 'object' && !Array.isArray(value)
465
- ? value
466
- : {};
467
- const errors = [];
468
- for (const doc of documents) {
469
- if (!doc['document-required'])
470
- continue;
471
- if (!isDocsSlotFilled(docsValue[doc['document-key']])) {
472
- errors.push('This document is required');
473
- }
474
- }
475
- return errors;
476
- };
477
381
  const createZodSchema = (validation, required = false) => {
478
382
  if (!validation && !required) {
479
383
  return null;
@@ -1808,6 +1712,9 @@ const OWT_FIELD_STYLES = `
1808
1712
  .owt-text-muted {
1809
1713
  color: var(--owt-color-text-muted);
1810
1714
  }
1715
+ .owt-field-label {
1716
+ color: var(--owt-color-text-muted);
1717
+ }
1811
1718
  .owt-bg {
1812
1719
  background-color: var(--owt-color-bg);
1813
1720
  }
@@ -1952,6 +1859,93 @@ const WidgetProvider = ({ store, dataSourceRequestHandler, schemaData, hostConte
1952
1859
  }, children: [jsxRuntimeExports.jsx("style", { className: "owt-field-styles", children: OWT_FIELD_STYLES }), children] }) }) }) }) }));
1953
1860
  };
1954
1861
 
1862
+ const isFile = (value) => {
1863
+ return value instanceof File;
1864
+ };
1865
+ const isSerializedFile = (value) => {
1866
+ return value && typeof value === 'object' && value.__type === 'File';
1867
+ };
1868
+ const serializeFile = async (file) => {
1869
+ return new Promise((resolve, reject) => {
1870
+ const reader = new FileReader();
1871
+ reader.onload = () => {
1872
+ const base64 = reader.result.split(',')[1];
1873
+ resolve({
1874
+ __type: 'File',
1875
+ name: file.name,
1876
+ type: file.type,
1877
+ size: file.size,
1878
+ lastModified: file.lastModified,
1879
+ data: base64,
1880
+ });
1881
+ };
1882
+ reader.onerror = reject;
1883
+ reader.readAsDataURL(file);
1884
+ });
1885
+ };
1886
+ const deserializeFile = (serialized) => {
1887
+ const byteCharacters = atob(serialized.data);
1888
+ const byteNumbers = new Array(byteCharacters.length);
1889
+ for (let i = 0; i < byteCharacters.length; i++) {
1890
+ byteNumbers[i] = byteCharacters.charCodeAt(i);
1891
+ }
1892
+ const byteArray = new Uint8Array(byteNumbers);
1893
+ const blob = new Blob([byteArray], { type: serialized.type });
1894
+ return new File([blob], serialized.name, {
1895
+ type: serialized.type,
1896
+ lastModified: serialized.lastModified,
1897
+ });
1898
+ };
1899
+ const serializeValue = async (value) => {
1900
+ if (value === null || value === undefined) {
1901
+ return value;
1902
+ }
1903
+ if (isFile(value)) {
1904
+ return await serializeFile(value);
1905
+ }
1906
+ if (Array.isArray(value)) {
1907
+ return Promise.all(value.map(item => serializeValue(item)));
1908
+ }
1909
+ if (value && typeof value === 'object' && !(value instanceof Date) && !(value instanceof RegExp)) {
1910
+ const result = {};
1911
+ for (const [key, val] of Object.entries(value)) {
1912
+ result[key] = await serializeValue(val);
1913
+ }
1914
+ return result;
1915
+ }
1916
+ return value;
1917
+ };
1918
+ const deserializeValue = (value) => {
1919
+ if (isSerializedFile(value)) {
1920
+ return deserializeFile(value);
1921
+ }
1922
+ if (Array.isArray(value)) {
1923
+ return value.map(item => deserializeValue(item));
1924
+ }
1925
+ if (value && typeof value === 'object') {
1926
+ const result = {};
1927
+ for (const [key, val] of Object.entries(value)) {
1928
+ result[key] = deserializeValue(val);
1929
+ }
1930
+ return result;
1931
+ }
1932
+ return value;
1933
+ };
1934
+
1935
+ const isStoredDocumentRef = (value) => {
1936
+ if (!value || typeof value !== 'object' || Array.isArray(value))
1937
+ return false;
1938
+ if (isSerializedFile(value))
1939
+ return false;
1940
+ const doc = value;
1941
+ return (typeof doc.label === 'string' &&
1942
+ doc.label.length > 0 &&
1943
+ typeof doc.document_id === 'string' &&
1944
+ doc.document_id.length > 0 &&
1945
+ typeof doc.presigned_url === 'string' &&
1946
+ doc.presigned_url.length > 0);
1947
+ };
1948
+
1955
1949
  const EMPTY_ERRORS = [];
1956
1950
  const EMPTY_DATA_SOURCE = [];
1957
1951
  const useBaseWidget = (options) => {
@@ -1967,7 +1961,6 @@ const useBaseWidget = (options) => {
1967
1961
  const loading = useSelector((state) => state.widget.loading[widgetId] || false);
1968
1962
  const dataSourceOptions = useSelector((state) => state.widget.dataSources[widgetId] ?? EMPTY_DATA_SOURCE);
1969
1963
  const isLayoutWidget = config['widget-type'] === 'layout';
1970
- const isDocsWidget = config.widget === 'docs';
1971
1964
  const userHasSetValueRef = useRef(false);
1972
1965
  const valuesRef = useRef(values);
1973
1966
  const loadingRef = useRef(loading);
@@ -1982,6 +1975,15 @@ const useBaseWidget = (options) => {
1982
1975
  if (!obj || typeof obj !== 'object' || Array.isArray(obj)) {
1983
1976
  return obj;
1984
1977
  }
1978
+ if (typeof File !== 'undefined' && obj instanceof File) {
1979
+ return obj;
1980
+ }
1981
+ if (isSerializedFile(obj) || isStoredDocumentRef(obj)) {
1982
+ return obj;
1983
+ }
1984
+ if ('document_id' in obj && ('presigned_url' in obj || 'source_filename' in obj || 'label' in obj)) {
1985
+ return obj;
1986
+ }
1985
1987
  if ('value' in obj) {
1986
1988
  return obj.value;
1987
1989
  }
@@ -2000,19 +2002,6 @@ const useBaseWidget = (options) => {
2000
2002
  if (isLayoutWidget) {
2001
2003
  return undefined; // Layout widgets don't have values
2002
2004
  }
2003
- if (isDocsWidget) {
2004
- let docsValue = values[widgetId];
2005
- if (docsValue === undefined && config['widget-data-path']) {
2006
- docsValue = getWidgetValue(values, config['widget-data-path'], widgetId);
2007
- }
2008
- if (userHasSetValueRef.current) {
2009
- return docsValue;
2010
- }
2011
- if (docsValue === null) {
2012
- return null;
2013
- }
2014
- return docsValue !== undefined ? docsValue : config['widget-data-default'];
2015
- }
2016
2005
  let value = config['widget-data-path']
2017
2006
  ? getWidgetValue(values, config['widget-data-path'], widgetId)
2018
2007
  : values[widgetId];
@@ -2035,13 +2024,13 @@ const useBaseWidget = (options) => {
2035
2024
  return null; // User explicitly cleared it, don't use default
2036
2025
  }
2037
2026
  return value !== undefined ? value : config['widget-data-default'];
2038
- }, [values, config, widgetId, isLayoutWidget, isDocsWidget, extractValueFromObject]);
2027
+ }, [values, config, widgetId, isLayoutWidget, extractValueFromObject]);
2039
2028
  const lastMirroredValueRef = useRef(null);
2040
2029
  // Mirror value from dataPath to widgetId in Redux state if it's not already there.
2041
2030
  // This is essential for widgets that depend on this widget via 'dependsOn' using its widgetId,
2042
2031
  // CRITICAL: This ensures that dependencies are resolved correctly when entering Edit mode.
2043
2032
  useEffect(() => {
2044
- if (isLayoutWidget || isDocsWidget || !config['widget-data-path']) {
2033
+ if (isLayoutWidget || !config['widget-data-path']) {
2045
2034
  return;
2046
2035
  }
2047
2036
  const rawValue = getWidgetValue(values, config['widget-data-path'], widgetId);
@@ -2121,9 +2110,7 @@ const useBaseWidget = (options) => {
2121
2110
  dispatch(setValues(updatedValues));
2122
2111
  }
2123
2112
  if (validate) {
2124
- const validationErrors = isDocsWidget
2125
- ? validateDocsWidget(newValue, config['documents'])
2126
- : validateWidget(newValue, config['widget-data-validation'], resolveIsRequired(currentValues));
2113
+ const validationErrors = validateWidget(newValue, config['widget-data-validation'], resolveIsRequired(currentValues));
2127
2114
  dispatch(setError({ widgetId, errors: validationErrors }));
2128
2115
  }
2129
2116
  if (onValueChange) {
@@ -2137,16 +2124,11 @@ const useBaseWidget = (options) => {
2137
2124
  timestamp: Date.now(),
2138
2125
  });
2139
2126
  }
2140
- }, [config, widgetId, dispatch, onValueChange, eventBus, resolveIsRequired, isDocsWidget]);
2127
+ }, [config, widgetId, dispatch, onValueChange, eventBus, resolveIsRequired]);
2141
2128
  const handleBlur = useCallback(() => {
2142
2129
  dispatch(setTouched({ widgetId, touched: true }));
2143
2130
  const latestValues = valuesRef.current;
2144
- const valueToValidate = isDocsWidget
2145
- ? latestValues[widgetId] ?? getWidgetValue(latestValues, config['widget-data-path'], widgetId)
2146
- : currentValue;
2147
- const validationErrors = isDocsWidget
2148
- ? validateDocsWidget(valueToValidate, config['documents'])
2149
- : validateWidget(valueToValidate, config['widget-data-validation'], resolveIsRequired(latestValues));
2131
+ const validationErrors = validateWidget(currentValue, config['widget-data-validation'], resolveIsRequired(latestValues));
2150
2132
  dispatch(setError({ widgetId, errors: validationErrors }));
2151
2133
  if (eventBus) {
2152
2134
  eventBus.publish({
@@ -2156,7 +2138,7 @@ const useBaseWidget = (options) => {
2156
2138
  timestamp: Date.now(),
2157
2139
  });
2158
2140
  }
2159
- }, [currentValue, config, widgetId, dispatch, eventBus, resolveIsRequired, isDocsWidget]);
2141
+ }, [currentValue, config, widgetId, dispatch, eventBus, resolveIsRequired]);
2160
2142
  const getFieldValue = useCallback((path) => {
2161
2143
  return getWidgetValue(values, path, '');
2162
2144
  }, [values]);
@@ -2517,7 +2499,9 @@ const PanelRenderer = ({ panel, dataSourceRequestHandler, schemaData, onValueCha
2517
2499
  top: 0,
2518
2500
  bottom: '5px',
2519
2501
  width: '1px',
2520
- backgroundColor: isEditMode ? 'var(--owt-color-primary)' : 'var(--owt-panel-divider-color)',
2502
+ backgroundColor: isEditMode
2503
+ ? 'var(--owt-color-primary-dark)'
2504
+ : 'var(--owt-panel-divider-color)',
2521
2505
  } }))] }) }, nestedPanel['panel-id'] || `panel-${index}`));
2522
2506
  }), widgets.map((widgetConfig, index) => (jsxRuntimeExports.jsx(WidgetRenderer, { config: widgetConfig, dataSourceRequestHandler: dataSourceRequestHandler, schemaData: schemaData, onValueChange: onValueChange }, widgetConfig['widget-id'] || `widget-${index}`)))] }));
2523
2507
  return (jsxRuntimeExports.jsx("div", { className: `panel panel-${orientation}`, "data-panel-id": panel['panel-id'], style: orientation === 'horizontal' ? { width: '100%' } : {}, children: content }));
@@ -2645,8 +2629,9 @@ const collectWidgets = (panels) => {
2645
2629
  /**
2646
2630
  * @param skipRequired - Skip required checks for per-section Save/Next navigation;
2647
2631
  * format and range validation still run.
2632
+ * @param includeSupportingDocuments - When false (e.g. IntakeForm), skip supporting-doc checks.
2648
2633
  */
2649
- const sectionValidate = (section, currentSchemaData, dispatch, skipRequired = false) => {
2634
+ const sectionValidate = (section, currentSchemaData, dispatch, skipRequired = false, includeSupportingDocuments = true) => {
2650
2635
  const allWidgets = collectWidgets(section.panels);
2651
2636
  let isValid = true;
2652
2637
  for (const widget of allWidgets) {
@@ -2666,9 +2651,7 @@ const sectionValidate = (section, currentSchemaData, dispatch, skipRequired = fa
2666
2651
  }
2667
2652
  const value = getWidgetValue(currentSchemaData, widget['widget-data-path'], widgetId);
2668
2653
  const isRequired = shouldRequireWidget(widget['widget-data-options'], currentSchemaData, widget['widget-required'] ?? false);
2669
- const errors = widget.widget === 'docs'
2670
- ? validateDocsWidget(value, widget['documents'], skipRequired)
2671
- : validateWidget(value, widget['widget-data-validation'], isRequired, skipRequired);
2654
+ const errors = validateWidget(value, widget['widget-data-validation'], isRequired, skipRequired);
2672
2655
  if (errors.length > 0) {
2673
2656
  isValid = false;
2674
2657
  dispatch(setTouched({ widgetId, touched: true }));
@@ -2679,24 +2662,26 @@ const sectionValidate = (section, currentSchemaData, dispatch, skipRequired = fa
2679
2662
  dispatch(setError({ widgetId, errors: [] }));
2680
2663
  }
2681
2664
  }
2682
- section['section-supporting-documents']?.forEach((doc, index) => {
2683
- const widgetId = `supporting-doc-${section['section-id']}-${index}`;
2684
- if (!skipRequired && doc['document-required']) {
2685
- const file = getValueByPath(currentSchemaData, doc['document-data-path']);
2686
- if (!file) {
2687
- isValid = false;
2688
- dispatch(setTouched({ widgetId, touched: true }));
2689
- dispatch(setError({
2690
- widgetId,
2691
- errors: ['This document is required'],
2692
- }));
2693
- }
2694
- else {
2695
- dispatch(setTouched({ widgetId, touched: false }));
2696
- dispatch(setError({ widgetId, errors: [] }));
2665
+ if (includeSupportingDocuments) {
2666
+ section['section-supporting-documents']?.forEach((doc, index) => {
2667
+ const widgetId = `supporting-doc-${section['section-id']}-${index}`;
2668
+ if (!skipRequired && doc['document-required']) {
2669
+ const file = getValueByPath(currentSchemaData, doc['document-data-path']);
2670
+ if (!file) {
2671
+ isValid = false;
2672
+ dispatch(setTouched({ widgetId, touched: true }));
2673
+ dispatch(setError({
2674
+ widgetId,
2675
+ errors: ['This document is required'],
2676
+ }));
2677
+ }
2678
+ else {
2679
+ dispatch(setTouched({ widgetId, touched: false }));
2680
+ dispatch(setError({ widgetId, errors: [] }));
2681
+ }
2697
2682
  }
2698
- }
2699
- });
2683
+ });
2684
+ }
2700
2685
  return isValid;
2701
2686
  };
2702
2687
 
@@ -2842,12 +2827,225 @@ const createDocumentWidgetConfig = (doc, sectionId, index, mode, isDraft) => {
2842
2827
  'widget-readonly': mode === 'IntakeForm' && isDraft === false,
2843
2828
  'widget-data-options': {
2844
2829
  accept,
2845
- multiple: false,
2846
2830
  maxSize: doc['document-max-size'],
2847
2831
  },
2848
2832
  };
2849
2833
  };
2850
2834
 
2835
+ /** Origin tags attached to entries in `SectionChanges.section_files`. */
2836
+ const SECTION_FILE_TAG = {
2837
+ PROFILE: '_profile',
2838
+ SUPPORTING_DOCS: '_supporting_docs',
2839
+ DIRECT_FILE: '_direct_file',
2840
+ };
2841
+ const fieldFromPath = (path) => path.includes('.') ? path.split('.').slice(1).join('.') : path;
2842
+ const isFreshUpload = (value) => (typeof File !== 'undefined' && value instanceof File) || isSerializedFile(value);
2843
+ const isCollectableFileValue = (value) => isFreshUpload(value) || isStoredDocumentRef(value);
2844
+ const isFreshSectionFileEntry = (entry) => isSerializedFile(entry);
2845
+ const getProfileImageUrlPaths = (panels) => {
2846
+ const paths = [];
2847
+ collectWidgets(panels)
2848
+ .filter((widget) => widget.widget === 'header-section')
2849
+ .forEach((widget) => {
2850
+ const widgetPath = widget['widget-data-path'];
2851
+ if (!widgetPath || typeof widgetPath !== 'object' || Array.isArray(widgetPath))
2852
+ return;
2853
+ const imageUrlPath = widgetPath.imageUrl;
2854
+ if (imageUrlPath)
2855
+ paths.push(imageUrlPath);
2856
+ });
2857
+ return paths;
2858
+ };
2859
+ const collectProfileFiles = (widgets, sourceData) => {
2860
+ const files = [];
2861
+ for (const widget of widgets) {
2862
+ if (widget.widget !== 'header-section')
2863
+ continue;
2864
+ const widgetPath = widget['widget-data-path'];
2865
+ if (!widgetPath || typeof widgetPath !== 'object' || Array.isArray(widgetPath))
2866
+ continue;
2867
+ const paths = widgetPath;
2868
+ if (!paths.imageUrl)
2869
+ continue;
2870
+ const value = getValueByPath(sourceData, paths.imageUrl);
2871
+ if (!isCollectableFileValue(value))
2872
+ continue;
2873
+ const field = paths.image ? fieldFromPath(paths.image) : 'record_image_document_id';
2874
+ files.push({
2875
+ value,
2876
+ tag: SECTION_FILE_TAG.PROFILE,
2877
+ field,
2878
+ label: isStoredDocumentRef(value) ? value.label : 'profile image',
2879
+ });
2880
+ }
2881
+ return files;
2882
+ };
2883
+ const collectSupportingDocFiles = (section, sourceData, skipPaths) => {
2884
+ const files = [];
2885
+ const supportingDocuments = section['section-supporting-documents'] || [];
2886
+ for (const doc of supportingDocuments) {
2887
+ const path = doc['document-data-path'];
2888
+ if (!path || skipPaths.has(path))
2889
+ continue;
2890
+ const value = getValueByPath(sourceData, path);
2891
+ if (!isCollectableFileValue(value))
2892
+ continue;
2893
+ files.push({
2894
+ value,
2895
+ tag: SECTION_FILE_TAG.SUPPORTING_DOCS,
2896
+ field: fieldFromPath(path),
2897
+ label: (isStoredDocumentRef(value) ? value.label : undefined) ||
2898
+ doc['document-label'] ||
2899
+ fieldFromPath(path),
2900
+ });
2901
+ }
2902
+ return files;
2903
+ };
2904
+ const collectDirectFileWidgetFiles = (widgets, sourceData, skipPaths) => {
2905
+ const files = [];
2906
+ for (const widget of widgets) {
2907
+ if (widget.widget !== 'file')
2908
+ continue;
2909
+ const widgetId = widget['widget-id'] || '';
2910
+ // Supporting-doc slots are collected via section-supporting-documents.
2911
+ if (widgetId.startsWith('supporting-doc-'))
2912
+ continue;
2913
+ const widgetPath = widget['widget-data-path'];
2914
+ if (!widgetPath || typeof widgetPath !== 'string' || skipPaths.has(widgetPath))
2915
+ continue;
2916
+ const value = getValueByPath(sourceData, widgetPath);
2917
+ if (!isCollectableFileValue(value))
2918
+ continue;
2919
+ const field = fieldFromPath(widgetPath);
2920
+ files.push({
2921
+ value,
2922
+ tag: SECTION_FILE_TAG.DIRECT_FILE,
2923
+ field,
2924
+ label: (isStoredDocumentRef(value) ? value.label : undefined) ||
2925
+ widget['widget-label'] ||
2926
+ field,
2927
+ });
2928
+ }
2929
+ return files;
2930
+ };
2931
+ /**
2932
+ * Sync collection for dirty checks / snapshots.
2933
+ * Fresh uploads and existing stored document refs are returned with origin tags.
2934
+ */
2935
+ const collectAllSectionFilesSync = (section, sourceData, options) => {
2936
+ const widgets = collectWidgets(section.panels);
2937
+ const profilePaths = getProfileImageUrlPaths(section.panels);
2938
+ const skipPaths = new Set(profilePaths);
2939
+ const includeSupportingDocuments = options?.includeSupportingDocuments !== false;
2940
+ return [
2941
+ ...collectProfileFiles(widgets, sourceData),
2942
+ ...(includeSupportingDocuments
2943
+ ? collectSupportingDocFiles(section, sourceData, skipPaths)
2944
+ : []),
2945
+ ...collectDirectFileWidgetFiles(widgets, sourceData, skipPaths),
2946
+ ];
2947
+ };
2948
+ /** Fingerprint for dirty comparison (avoids File / base64 noise). */
2949
+ const fingerprintSectionFiles = (files) => files.map(({ value, tag, field, label }) => {
2950
+ if (isStoredDocumentRef(value)) {
2951
+ return {
2952
+ tag,
2953
+ field,
2954
+ label,
2955
+ document_id: value.document_id,
2956
+ source_filename: value.source_filename,
2957
+ presigned_url: value.presigned_url,
2958
+ };
2959
+ }
2960
+ return {
2961
+ tag,
2962
+ field,
2963
+ label,
2964
+ name: value.name,
2965
+ size: value.size,
2966
+ type: value.type,
2967
+ lastModified: value.lastModified,
2968
+ };
2969
+ });
2970
+ /**
2971
+ * Collect every section file into `section_files`:
2972
+ * - fresh uploads as serialized File blobs (`__type: "File"`)
2973
+ * - unchanged existing docs as `{ label, document_id, presigned_url, source_filename }`
2974
+ */
2975
+ const collectAllSectionFiles = async (section, sourceData, options) => {
2976
+ const rawFiles = collectAllSectionFilesSync(section, sourceData, options);
2977
+ const result = [];
2978
+ for (const raw of rawFiles) {
2979
+ if (isStoredDocumentRef(raw.value)) {
2980
+ result.push({
2981
+ label: raw.value.label,
2982
+ document_id: raw.value.document_id,
2983
+ presigned_url: raw.value.presigned_url,
2984
+ ...(raw.value.source_filename
2985
+ ? { source_filename: raw.value.source_filename }
2986
+ : {}),
2987
+ tag: raw.tag,
2988
+ ...(raw.field ? { field: raw.field } : {}),
2989
+ ...(raw.document_key ? { document_key: raw.document_key } : {}),
2990
+ });
2991
+ continue;
2992
+ }
2993
+ const serialized = raw.value instanceof File ? await serializeFile(raw.value) : raw.value;
2994
+ result.push({
2995
+ ...serialized,
2996
+ tag: raw.tag,
2997
+ ...(raw.label ? { label: raw.label } : {}),
2998
+ ...(raw.field ? { field: raw.field } : {}),
2999
+ ...(raw.document_key ? { document_key: raw.document_key } : {}),
3000
+ });
3001
+ }
3002
+ return result;
3003
+ };
3004
+ /** Paths for file widgets / supporting docs — values travel in `section_files`, not `records`. */
3005
+ const getSectionFileBlobPaths = (section, options) => {
3006
+ const paths = [...getProfileImageUrlPaths(section.panels)];
3007
+ const includeSupportingDocuments = options?.includeSupportingDocuments !== false;
3008
+ collectWidgets(section.panels).forEach((widget) => {
3009
+ if (widget.widget !== 'file')
3010
+ return;
3011
+ const widgetId = widget['widget-id'] || '';
3012
+ if (widgetId.startsWith('supporting-doc-'))
3013
+ return;
3014
+ const widgetPath = widget['widget-data-path'];
3015
+ if (typeof widgetPath === 'string' && widgetPath.length > 0) {
3016
+ paths.push(widgetPath);
3017
+ }
3018
+ });
3019
+ if (includeSupportingDocuments) {
3020
+ (section['section-supporting-documents'] || []).forEach((doc) => {
3021
+ const path = doc['document-data-path'];
3022
+ if (path)
3023
+ paths.push(path);
3024
+ });
3025
+ }
3026
+ return paths;
3027
+ };
3028
+ /**
3029
+ * Remove file-widget fields from records (fresh uploads, stored docs, empty placeholders).
3030
+ * Those values are carried only in `section_files`.
3031
+ */
3032
+ const stripSectionFileBlobs = (records, blobPaths) => {
3033
+ if (blobPaths.length === 0)
3034
+ return records;
3035
+ const fieldKeys = blobPaths.map(fieldFromPath);
3036
+ return records.map((record) => {
3037
+ if (typeof record !== 'object' || record === null)
3038
+ return record;
3039
+ const copy = { ...record };
3040
+ for (const key of fieldKeys) {
3041
+ if (!Object.prototype.hasOwnProperty.call(copy, key))
3042
+ continue;
3043
+ delete copy[key];
3044
+ }
3045
+ return copy;
3046
+ });
3047
+ };
3048
+
2851
3049
  const collectWidgetPathSnapshot = (widgets, sourceData) => {
2852
3050
  const snapshot = {};
2853
3051
  let hasTable = false;
@@ -2911,24 +3109,13 @@ const buildSectionRecords = (widgets, sourceData, { sectionRegisterId, editActio
2911
3109
  }
2912
3110
  return extractTableRecordsFromSnapshot(snapshot, widgets);
2913
3111
  };
2914
- const collectSectionSupportingFiles = (section, sourceData) => {
2915
- const files = [];
2916
- const supportingDocuments = section['section-supporting-documents'] || [];
2917
- supportingDocuments.forEach((doc) => {
2918
- const path = doc['document-data-path'];
2919
- if (path) {
2920
- files.push(getValueByPath(sourceData, path));
2921
- }
2922
- });
2923
- return files;
2924
- };
2925
3112
  /** Save flow: records for change detection and onSectionSave payloads. */
2926
3113
  const trackSectionChanges = (widgets, sourceData, sectionRegisterId) => buildSectionRecords(widgets, sourceData, {
2927
3114
  sectionRegisterId,
2928
3115
  editAction: 'always',
2929
3116
  whenEmpty: 'empty-array',
2930
3117
  });
2931
- /** Dirty-state baseline: records + supporting-document files. */
3118
+ /** Dirty-state baseline: records + all section files. */
2932
3119
  const buildSectionSnapshot = (section, sourceData, hasSupportingDocuments, sectionRegisterId) => {
2933
3120
  const sectionWidgets = collectWidgets(section.panels);
2934
3121
  const records = sectionWidgets.length > 0
@@ -2940,26 +3127,51 @@ const buildSectionSnapshot = (section, sourceData, hasSupportingDocuments, secti
2940
3127
  : buildSectionRecords(sectionWidgets, sourceData, {
2941
3128
  whenEmpty: 'raw-snapshot',
2942
3129
  });
2943
- const files = hasSupportingDocuments
2944
- ? collectSectionSupportingFiles(section, sourceData)
2945
- : [];
3130
+ const files = fingerprintSectionFiles(collectAllSectionFilesSync(section, sourceData, {
3131
+ includeSupportingDocuments: hasSupportingDocuments,
3132
+ }));
2946
3133
  return { records, files };
2947
3134
  };
2948
3135
  /** Form submit / draft: full SectionChanges payload for one section. */
2949
3136
  function buildSectionChanges(section, storeValues, options) {
2950
3137
  const sectionWidgets = collectWidgets(section.panels);
2951
- const { sectionRegisterId } = options || {};
2952
- const records = buildSectionRecords(sectionWidgets, storeValues, {
3138
+ const { sectionRegisterId, includeSupportingDocuments = true } = options || {};
3139
+ const fileOptions = { includeSupportingDocuments };
3140
+ const records = stripSectionFileBlobs(buildSectionRecords(sectionWidgets, storeValues, {
2953
3141
  sectionRegisterId,
2954
3142
  editAction: 'when-register-id',
2955
3143
  whenEmpty: 'single-record',
3144
+ }), getSectionFileBlobPaths(section, fileOptions));
3145
+ // Fresh uploads (serialized) + unchanged stored document refs.
3146
+ const sectionFiles = collectAllSectionFilesSync(section, storeValues, fileOptions)
3147
+ .filter((raw) => isSerializedFile(raw.value) || isStoredDocumentRef(raw.value))
3148
+ .map(({ value, tag, label, field, document_key }) => {
3149
+ if (isStoredDocumentRef(value)) {
3150
+ return {
3151
+ label: value.label,
3152
+ document_id: value.document_id,
3153
+ presigned_url: value.presigned_url,
3154
+ ...(value.source_filename
3155
+ ? { source_filename: value.source_filename }
3156
+ : {}),
3157
+ tag,
3158
+ ...(field ? { field } : {}),
3159
+ ...(document_key ? { document_key } : {}),
3160
+ };
3161
+ }
3162
+ return {
3163
+ ...value,
3164
+ tag,
3165
+ ...(label ? { label } : {}),
3166
+ ...(field ? { field } : {}),
3167
+ ...(document_key ? { document_key } : {}),
3168
+ };
2956
3169
  });
2957
- const files = collectSectionSupportingFiles(section, storeValues);
2958
3170
  return {
2959
3171
  section_id: options?.dbSectionId ?? section['section-id'],
2960
3172
  section_register_id: sectionRegisterId,
2961
3173
  records,
2962
- files: files.length > 0 ? files : undefined,
3174
+ ...(sectionFiles.length > 0 ? { section_files: sectionFiles } : {}),
2963
3175
  };
2964
3176
  }
2965
3177
 
@@ -3005,11 +3217,11 @@ const pickAllSectionFields = (baseline, current) => {
3005
3217
  return fields;
3006
3218
  };
3007
3219
  const toRowList = (records) => records.filter(isPlainRecord);
3008
- const diffFormRecord = (baselineRecords, currentRecords, internalRecordId) => {
3220
+ const diffFormRecord = (baselineRecords, currentRecords, internalRecordId, hasFileChanges = false) => {
3009
3221
  const baseline = toRowList(baselineRecords)[0] ?? {};
3010
3222
  const current = toRowList(currentRecords)[0] ?? {};
3011
3223
  const changedFields = pickChangedFields(baseline, current);
3012
- if (Object.keys(changedFields).length === 0)
3224
+ if (Object.keys(changedFields).length === 0 && !hasFileChanges)
3013
3225
  return [];
3014
3226
  const payload = {
3015
3227
  ...pickAllSectionFields(baseline, current),
@@ -3087,10 +3299,10 @@ const diffTableRows = (baselineRecords, currentRecords, tableColumnKeys) => {
3087
3299
  });
3088
3300
  return result;
3089
3301
  };
3090
- function diffSectionChangeRecords(baselineRecords, currentRecords, { isTable, internalRecordId, tableColumnKeys }) {
3302
+ function diffSectionChangeRecords(baselineRecords, currentRecords, { isTable, internalRecordId, tableColumnKeys, hasFileChanges, }) {
3091
3303
  return isTable
3092
3304
  ? diffTableRows(baselineRecords, currentRecords, tableColumnKeys)
3093
- : diffFormRecord(baselineRecords, currentRecords, internalRecordId);
3305
+ : diffFormRecord(baselineRecords, currentRecords, internalRecordId, hasFileChanges);
3094
3306
  }
3095
3307
 
3096
3308
  const cloneValue = (value) => {
@@ -3241,73 +3453,6 @@ const revertSectionValues = ({ section, store, dispatch, schemaData, contextSche
3241
3453
  dispatch(replaceValues(newStoreValues));
3242
3454
  };
3243
3455
 
3244
- const collectDocsWidgetFiles = (panels, sourceData) => {
3245
- const files = [];
3246
- const docsWidgets = collectWidgets(panels).filter((w) => w.widget === 'docs');
3247
- docsWidgets.forEach((widget) => {
3248
- const widgetPath = widget['widget-data-path'];
3249
- if (!widgetPath || typeof widgetPath !== 'string')
3250
- return;
3251
- const docsValue = getValueByPath(sourceData, widgetPath);
3252
- if (!docsValue || typeof docsValue !== 'object' || Array.isArray(docsValue))
3253
- return;
3254
- const documents = widget['documents'] || [];
3255
- documents.forEach((doc) => {
3256
- const key = doc['document-key'];
3257
- const file = docsValue[key];
3258
- if (file && isSerializedFile(file)) {
3259
- files.push({ ...file, label: doc['document-label'] ?? key });
3260
- }
3261
- });
3262
- });
3263
- return files;
3264
- };
3265
- /**
3266
- * Strip the base-64 blobs of freshly-uploaded `docs` files from the save
3267
- * records (they travel in `SectionChanges.files` instead) while preserving
3268
- * already-uploaded documents that are stored as view-URL strings.
3269
- */
3270
- const stripDocsWidgetFields = (records, panels) => {
3271
- const docsWidgets = collectWidgets(panels).filter((w) => w.widget === 'docs');
3272
- if (docsWidgets.length === 0)
3273
- return records;
3274
- const fieldKeys = docsWidgets
3275
- .map((w) => {
3276
- const path = w['widget-data-path'];
3277
- if (!path || typeof path !== 'string')
3278
- return null;
3279
- return path.includes('.') ? path.split('.').slice(1).join('.') : path;
3280
- })
3281
- .filter((k) => k !== null);
3282
- if (fieldKeys.length === 0)
3283
- return records;
3284
- return records.map((record) => {
3285
- if (typeof record !== 'object' || record === null)
3286
- return record;
3287
- const copy = { ...record };
3288
- for (const key of fieldKeys) {
3289
- const docsObject = copy[key];
3290
- if (!docsObject || typeof docsObject !== 'object' || Array.isArray(docsObject)) {
3291
- delete copy[key];
3292
- continue;
3293
- }
3294
- // Keep only the string URLs of already-uploaded docs; drop base-64 blobs.
3295
- const preserved = {};
3296
- for (const [docKey, docValue] of Object.entries(docsObject)) {
3297
- if (typeof docValue === 'string' && docValue.length > 0) {
3298
- preserved[docKey] = docValue;
3299
- }
3300
- }
3301
- if (Object.keys(preserved).length > 0) {
3302
- copy[key] = preserved;
3303
- }
3304
- else {
3305
- delete copy[key];
3306
- }
3307
- }
3308
- return copy;
3309
- });
3310
- };
3311
3456
  const readSectionInternalRecordId = (source, sectionRegisterId) => {
3312
3457
  if (!sectionRegisterId)
3313
3458
  return undefined;
@@ -3318,60 +3463,32 @@ const readSectionInternalRecordId = (source, sectionRegisterId) => {
3318
3463
  const id = sectionData.internal_record_id;
3319
3464
  return typeof id === 'string' && id.length > 0 ? id : undefined;
3320
3465
  };
3321
- const extractProfileImage = (records) => {
3322
- let profileImage = null;
3323
- const clonedRecords = records.map((record) => {
3324
- if (typeof record !== 'object' || record === null)
3325
- return record;
3326
- const copy = { ...record };
3327
- for (const [key, value] of Object.entries(copy)) {
3328
- if (value instanceof File) {
3329
- profileImage = value;
3330
- copy[key] = '';
3331
- }
3332
- else if (isSerializedFile(value)) {
3333
- try {
3334
- profileImage = deserializeFile(value);
3335
- copy[key] = '';
3336
- }
3337
- catch (err) {
3338
- console.error('Failed to deserialize profile image:', err);
3339
- }
3340
- }
3341
- }
3342
- return copy;
3343
- });
3344
- return { records: clonedRecords, profileImage };
3345
- };
3346
3466
  const executeSectionSave = async ({ store, dispatch, section, schemaData, contextSchemaData, hasSupportingDocuments, dbSectionId, sectionRegisterId, sectionFieldsOnly = false, skipRequired = false, onSectionSave, }) => {
3347
3467
  const sectionWidgets = collectWidgets(section.panels);
3348
3468
  const currentState = store.getState().widget;
3349
3469
  let currentSchemaData = currentState.values || {};
3350
- const isSectionValid = sectionValidate(section, currentSchemaData, dispatch, skipRequired);
3470
+ const fileOptions = { includeSupportingDocuments: hasSupportingDocuments };
3471
+ const isSectionValid = sectionValidate(section, currentSchemaData, dispatch, skipRequired, hasSupportingDocuments);
3351
3472
  if (!isSectionValid) {
3352
3473
  return { validated: false, saved: false, currentSchemaData };
3353
3474
  }
3354
3475
  const baselineSource = (schemaData || contextSchemaData || {});
3355
3476
  const baselineRecords = trackSectionChanges(sectionWidgets, baselineSource, sectionRegisterId);
3356
3477
  const newSchemaData = trackSectionChanges(sectionWidgets, currentSchemaData, sectionRegisterId);
3357
- const sectionFiles = [];
3358
- if (hasSupportingDocuments) {
3359
- const supportingDocuments = section['section-supporting-documents'] || [];
3360
- supportingDocuments.forEach((doc) => {
3361
- sectionFiles.push(getValueByPath(currentSchemaData, doc['document-data-path']));
3362
- });
3363
- }
3364
- // Collect files from any docs widgets and add them to the save payload.
3365
- const docsFiles = collectDocsWidgetFiles(section.panels, currentSchemaData);
3366
- sectionFiles.push(...docsFiles);
3367
- if (JSON.stringify(baselineRecords) === JSON.stringify(newSchemaData) && docsFiles.length === 0) {
3478
+ const sectionFiles = await collectAllSectionFiles(section, currentSchemaData, fileOptions);
3479
+ // Existing stored docs are included for payload continuity; only fresh uploads
3480
+ // should drive "file changed" / no-op detection.
3481
+ const freshSectionFiles = sectionFiles.filter(isFreshSectionFileEntry);
3482
+ const blobPaths = getSectionFileBlobPaths(section, fileOptions);
3483
+ if (JSON.stringify(baselineRecords) === JSON.stringify(newSchemaData) &&
3484
+ freshSectionFiles.length === 0) {
3368
3485
  return { validated: true, saved: false, currentSchemaData };
3369
3486
  }
3370
- const { records: recordsWithImage, profileImage } = extractProfileImage([...newSchemaData]);
3371
- // Strip the docs blob objects from records they travel in `files` instead.
3372
- let records = stripDocsWidgetFields(recordsWithImage, section.panels);
3487
+ // Strip file fields from records they travel only in `section_files`.
3488
+ let records = stripSectionFileBlobs([...newSchemaData], blobPaths);
3489
+ const fullCurrentRecords = records;
3373
3490
  if (sectionFieldsOnly) {
3374
- const baselineStripped = stripDocsWidgetFields([...baselineRecords], section.panels);
3491
+ const baselineStripped = stripSectionFileBlobs([...baselineRecords], blobPaths);
3375
3492
  const isTable = sectionWidgets.some((widget) => isTableLikeWidget(widget));
3376
3493
  const internalRecordId = readSectionInternalRecordId(baselineSource, sectionRegisterId) ??
3377
3494
  readSectionInternalRecordId(currentSchemaData, sectionRegisterId);
@@ -3389,18 +3506,28 @@ const executeSectionSave = async ({ store, dispatch, section, schemaData, contex
3389
3506
  isTable,
3390
3507
  internalRecordId,
3391
3508
  tableColumnKeys,
3509
+ hasFileChanges: freshSectionFiles.length > 0,
3392
3510
  });
3393
- if (records.length === 0 && sectionFiles.length === 0 && !profileImage) {
3511
+ if (records.length === 0 && freshSectionFiles.length === 0) {
3394
3512
  return { validated: true, saved: false, currentSchemaData };
3395
3513
  }
3514
+ if (records.length === 0 && freshSectionFiles.length > 0) {
3515
+ const currentRecord = fullCurrentRecords.find((record) => typeof record === 'object' && record !== null);
3516
+ records = [
3517
+ {
3518
+ ...(currentRecord ?? {}),
3519
+ edit_action: 'UPDATE',
3520
+ ...(internalRecordId ? { internal_record_id: internalRecordId } : {}),
3521
+ },
3522
+ ];
3523
+ }
3396
3524
  }
3397
3525
  try {
3398
3526
  await onSectionSave?.({
3399
3527
  section_id: dbSectionId ?? section['section-id'],
3400
3528
  section_register_id: sectionRegisterId,
3401
3529
  records,
3402
- files: [...sectionFiles],
3403
- ...(profileImage ? { image: profileImage } : {}),
3530
+ ...(sectionFiles.length > 0 ? { section_files: sectionFiles } : {}),
3404
3531
  });
3405
3532
  }
3406
3533
  catch (error) {
@@ -3714,45 +3841,9 @@ const WidgetFieldLabel = ({ label, required = false, className = '', title, }) =
3714
3841
  const { t } = useWidgetContext();
3715
3842
  const translatedLabel = tSchema(t, label);
3716
3843
  const tooltip = title !== undefined ? tSchema(t, title) : translatedLabel;
3717
- return (jsxRuntimeExports.jsxs("label", { className: `flex items-baseline min-w-0 max-w-full ${className}`, style: { fontFamily: 'Roboto, sans-serif' }, title: tooltip, children: [jsxRuntimeExports.jsx("span", { className: "min-w-0 truncate", children: translatedLabel }), required && jsxRuntimeExports.jsx("span", { className: "ml-1 shrink-0 owt-field-required", children: "*" })] }));
3844
+ return (jsxRuntimeExports.jsxs("label", { className: `flex items-baseline min-w-0 max-w-full owt-field-label ${className}`, style: { fontFamily: 'Roboto, sans-serif' }, title: tooltip, children: [jsxRuntimeExports.jsx("span", { className: "min-w-0 truncate", children: translatedLabel }), required && jsxRuntimeExports.jsx("span", { className: "ml-1 shrink-0 owt-field-required", children: "*" })] }));
3718
3845
  };
3719
3846
 
3720
- const canPreviewInWeb = (file) => {
3721
- let mimeType;
3722
- let fileName;
3723
- if (file instanceof File) {
3724
- mimeType = file.type;
3725
- fileName = file.name.toLowerCase();
3726
- }
3727
- else {
3728
- try {
3729
- const parsed = new URL(file);
3730
- fileName = parsed.pathname.toLowerCase();
3731
- }
3732
- catch {
3733
- fileName = file.split('?')[0].split('#')[0].toLowerCase();
3734
- }
3735
- mimeType = '';
3736
- }
3737
- if (mimeType) {
3738
- if (mimeType.startsWith('image/'))
3739
- return true;
3740
- if (mimeType === 'application/pdf')
3741
- return true;
3742
- if (mimeType.startsWith('text/'))
3743
- return true;
3744
- if (mimeType === 'application/json')
3745
- return true;
3746
- }
3747
- const extension = fileName.split('.').pop() || '';
3748
- const previewableExtensions = [
3749
- 'jpg', 'jpeg', 'png', 'gif', 'webp', 'svg', 'bmp', 'ico',
3750
- 'pdf',
3751
- 'txt', 'csv', 'json', 'xml', 'html', 'css', 'js', 'ts', 'tsx', 'jsx',
3752
- 'md', 'markdown', 'yaml', 'yml',
3753
- ];
3754
- return previewableExtensions.includes(extension.toLowerCase());
3755
- };
3756
3847
  const openFileInNewTab = (file) => {
3757
3848
  if (typeof file === 'string') {
3758
3849
  window.open(file, '_blank', 'noopener,noreferrer');
@@ -3764,13 +3855,11 @@ const openFileInNewTab = (file) => {
3764
3855
  window.setTimeout(() => URL.revokeObjectURL(url), 60000);
3765
3856
  };
3766
3857
 
3767
- var img$d = "data:image/png;base64,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";
3768
-
3769
- var img$c = "data:image/png;base64,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";
3858
+ var img$c = "data:image/png;base64,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";
3770
3859
 
3771
- var img$b = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACAKADAAQAAAABAAACAAAAAAAL+LWFAAAkvUlEQVR4Ae3d344sVb0H8I1GuMFofAD5p95443ucGwHJifgg8g7wDpoYJecCvOGEIHAFr2ACMeobqES4OCGBsxZ7L2emd/f8urtqVa0/n04qvWemu2rVp35rfX/Tu2fmwQM3AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA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AfCGPyVNIBYYqQnIa5cbAQILBF5Kz+29AfCd/4IC8NTpBEZpAl6c7so5YQIrC+T3aXyStl6bAN/5r1wQdjeFQO9NQF6zvMdsilJ1krUFcifdYwPgO//alWH/Iwv03AT8fOQL49wIbC3wbjpgT02A8N+6QhxvRIEem4D3R7wQzonAngLPp4Pnvw/QQxPgZf89K8WxRxPoqQnIa1Req9wIEFhZ4JW0v9YbAN/5r3zR7Y5AEuilCXjV1SJAoJ7A62nXrTYBvvOvd93tmUDrTUBem9wIEKgo8ETa92/S1loT4Dv/ihfdrgk8Emi1Cfh9Gp93/StTAhsI5EXgd2lrpQnIY8ljciNAoL6A+V/f2BEINC2QXwl4I217NwH5Zb88FjcCBLYTMP+3s3YkAs0K5N8U+I+0bd0IfJaO+ctmVQyMwBwC5v8c19lZEjgp8EL6Sv7Z262agPxXCv2oz8nL4QsENhUw/zfldjACbQrk7wY+TVutRiD/ek+/37vNa29UBMx/NUBgcoH8TtyX0/Zx2tb4U8J5Hx+lLS8u3uWbENwINCxg/jd8cQyNwJYCz6aDvZa2D9P2RdrOfWUgP/aDtP06bc+kzY0Agf4Enk1DNv/7u26bjdi7tzej3v1AT6YR/DRtP0rbc2n7QdqeTlu+fZ62/EbCv6ftL2n7c9q+TJsbAQJjCJj/Y1xHZ0GAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgssD/A1hw9f23AMmGAAAAAElFTkSuQmCC";
3860
+ var img$b = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAgKADAAQAAAABAAAAgAAAAABIjgR3AAAM10lEQVR4Ae2de6wdVRXGAXlY21KgLRTatGmFVqCNiqAtD7G0YEKLFSIKVgSsIYFE+UPFV6T1TUiQGCCIaIxggmBqTWsgyqPVGpBHAbGRtkpBCqVPKwhSqlZ/X3Nv7ul45p691+yZ2fucWcmXc2bu2muv9e09+z3n7rtPejIOl6eAyX2fR/M5CgwFw8AIMBz8G7wGXgav9H3fwudasA6s6fv+Nz57VvaNPPL98G8aOKMPp/GpAg4pL2JseR8e4PM50EiNDBxA3ueAO8BW8N+K8Qz53QjeAxqpkIHjyesasAlUXeh5+ambWAQmgUZKYEBN/LngUZBXCDHc/w/+LQEngUYCMKCCVzO/CsRQwD4+/K7Pdz4asTAwh0QahfuQHqOuBozqthpxZGAsereBGAvT6tO/iOe7YDhoJIeB/bl/FXgVWImOPd3zxHYeaCTDgBZtVoLYCzCUf2rhhmY46NnL2UQe05QuVCF3svMn4p7Ws6VO4GryrwW7QSeyuvXv6u4uAj0nBxHxz0C3FqxvXFrYilpC7gUcSqRLwakVR/wS+WmDR92NNn36N37exHdtDqlPlm/jgTaQDgFVys1k9imgxaSulaOI7Cng+4T46u8gj1+AK4FW5Q4GvnI4CWaCq8FysBP4+uGrr1ZRrWNXyhii+gvwJcVVfyu2bwAzgJ7q0DIEg3PBneB14OqXr97d2NZGV1eJtmafAL5kuOjfj9154EBQlah7uAxoJO/io6+Opokhu13M1ScqmF8DXxI66d+LTT3tdcp+ZH4OeAR08tf379pqTl5E0GLgG/xg+quwF9sevJ7WC8HGwLF+FntJy1fwfrDC9Pnb37GlQV0Z/XsokjWT0JROa/8+seXpakZwFkhSTsdrnbfLC87n/sPYmZgQC5p5rA8U+2bsaPaUlIzGW52h8ynkdrpaJdQuWoqj4pH4vSwAB+JlBYi55cO9AVF/+CvQrkB97mmqde6A2SS/iYuvAZ+483QXpcLAggAB78DGe1MJ2MHPK9BRf55XuC73Na54u0NetaocRu5akHEJKE9HfV70gRpY/jBpig4Of4sNtSrRyi14llewLvdfJv0J0UZX3LH5mNC4xoWLPJ2Li7tRjgWNfIs0c2+Q/sxyXIvK6ufwJq9wXe5vI70GmNHJSjxyCSBP54LoIirPIa3y5fHgcj+67ePTCwZ0U3lcR2lZ09qHCnCmrWxtXUcjRdb6tT08JJpIqnNkAlltBy5PfDudhdW5OnhO6vvbOehyT3vsUwY339V//WgB7lR5hsfAzuICQXw1hgBq9uG+Avx9pmbf9xmNA7uMAehwyJvrDiCC/I/BB+tpI51HqFU+Te4uTX07nQ/U6nlcmet0dDuOXO6dWGcojxkdf5J0Ua9oVUyq5vX/MHKpzbJa5Dhydamh7XQ+VIvHcWd6vZHPLaSrZbfUusv1NA7rpFAjezMwlkvrWOD9e5sKf9WuwGYZs7mVdFoPb2RvBl7k8pd733K+OsNZM5CiXqSwjP61GzYmkA/daGYeQbXrMjvde7RqMs42Omqt4VXHV1d+6svVp3cq8OzfdfSu1KXhbBcw08jQXcZ0vZJMLeQSQ7A6LvY+QzrnJNkKcLJzyr0V79/7srlqw4BWBi1iLRNLXqZNjDWmnHovkdYELOcqlpVJVWsLoOVfHf3ylQd8E/SovjZ5VhtiL3VTrbUCWDPSqmEjbgxYuJqIab2GV4qEqABrS/GsO41auNIvrkwqi47WCmDNZF1ZznWhXet46a1lcdFaAUYYMtFPreu4eCNuDFgfFkvZOHnUWgEsp1C2OeXSKPUzYH1YLGXTn+egn0UrgLY6G3FnwMpXUwHcOY5acxfeCb5SSQUY6usV+q8Z0vR6EksrUEkF0Bs8vlLa/NTXkYT0LeclLWXjREnrGCCqmunkfXpK4vstBrdLa2lbK8CrBsdKa5oMvqSQRHxZzkxWUgH0WpKvlDY/9XUkEX0rX5VUAEsXcBTE9+LrX9b6Zl3R04JbKdLaBWw05KD0RxvS9WoS64bb+rIIa60A1nVqa1BlxRSzXStXlVQAy06VyJ4WM+OR+TbV4M8O0ui3FEsXnT/bCbIHEztd/6Z0z7ojA62ZaDDXic/s30s9GdzaBei4kl7s9JXpJLCsIvrmk7r+DAKwrAFYDpE4c9VaAZRolXPKAUXV7FMGLptvOQxYT1z/PsdekNvZCrDCaLV5I7gzcR/srNJW48G2d0u6OR672T7I5Xo76Q4qyaduMHu8kdetpLOsHDpzlm0BniflM86pBxR1mvjsgcvmW4aBSzLXrpc6ca0HsFL5Prm5PPVZnaWVeplOZhojbTRyemEdYc41OrubdJZ5bh0xVpnnJ418akp+cJWO9uelY8gvgewT7nJ9e7+R5nMPA1pbWQdcuMvq6J9M1SbXk3PWIZdrvQTZ7A0MFNvHjDyK60sHzFT/7YQCjv+8enejzFGLPlrDd3lwsjpa/rUsGgUl4imj8wpmTlBP0jT27QL8XRdDyJcUCOA50vby8vBk4rfsq+jh0WBa6WsX/arFsyDbPLle31h7BPU4oGnfwwV4i+rXVi4vEIgqSi3zWPKtU6wDaPGlp//ddTqfzVtHmPUrV65PfVZP+9jWY1BZX1K41nq/CjHLg+v14hiDvKJAQApcv3s7MsbAAvukmdMrwLWws3r6QSjtGUQnWszQnnTWYZ/rh0jfzYNCtXKbCnL0I9JHK+qXLL9v01pJtLLVjTuGOhmtgzStsfp+30r6USBq+R7e+QaW1V+OjRFRR+nn3CTU/wyycfpez/fLth7tw8jWuqvVSsjj2DminhCC5noS1raA1tgs3+8J6lXJxnSsSYMVS6CtaZ7FRlTTHU/eLkJfr9K1xmT5roM04z3zrl19YYDARZY2jj4PSj3xgv2QommxfsffUtjZNJouzgvpXFW2dIroPpANyHqtla8JVTlfIB+d6l0NrHFm032zgC+1Jx2DBxsCkqHm9AtAy6ixySgc+gEossCTLfzl2NP0OmnRooX6sGxwRa7XYE8j4hjIGY4f6qK2gSIxtUurh2ciSF5OJgLL2y7tSGm9p6nVAlDHuoFWLReC0JW7NT59Xw/GgeRlDhFoQJcNMMS1DkbcBmaDMgeLanGUh/Iqo0LncaHjYkeC5OV8IngD5AUa4r6emFvAR8DhoKjo6Npl4KegjGbeNeY/kr/GGbVIyKdqFhEsAeo7yxaRq/cX1gKNG/QkaZFKP3KhAaVajv2BfDkEDAMTwNvAZHAs0BJuLKLFMfGn3dOk5V14vxm41v5Gb4ArbZhV8fCUXsGOIYenm0pgeghWwFvth0HxobAMwcKtoHnC/Tm4F9604tgV8nGiUJ/cVAQ/Du6BszqmwKVUuqlYXdUDleAOYpwOXggU653Y0fS0K0T7B2oN6pxuldUKafZxXkspaQykeyHy+zF2xF3XyBgiuR3sBiEIqtOGFoy+Bdq9wDmN+6Eq+83YCjldx1z9oqZyGUixIug8hDaHxoLBRFNizetDVNLvDJZRyn97B87fBYqeNwxBcicbeuJvAmriXUV7JVqc6mTb5e9Jbx93ImwKCteBUH2nC6GuOuvx60tgJLDITBL9E7jmN5jely0OpJRGA55Tgdb8Qz05gxGa97fQm1BnEs/rIC8/n/tXYacnRCti2qFbBLQ4sgv4EOWjq379MXANUJ4HgtAyD4MhYtC46fJQzqU0utSmzingOKAuox+j+e4qqhSbwAawGjzRhz/wqQWrsuUCMvgJKDq/VyX4BNA0sZCkVAHyAtU0bBTQ57A+9G+qqNndCfTKlqZlLwA9hXXKpWT+Q1CUew2c5wMtGDWSGAML8DfEFFhd1/mJxd6428fAlXz6jFPydHUQR6eyGkmQgavxOa9gfe5rmjkzwfgbl2FAy8k+hZ2nq4Wq0xpG02Tg2kCVQEvPJ6ZJQW97rRmBNn3ynm6f+1rEemdv05lm9KoE2mTyKew83c3YOTZNGnrbay0Q6WBJXsH63Neax6TepjPN6A/A7aXAp7DzdP+KnQlp0tDbXmsv4m6QV7A+99dh58jepjPN6LUZthz4FHae7hrsHJEmDb3t9VDCXwnyCtbn/pPY0c/8NJIYA4fi7+PAp7DzdB/EzpDE4m/chQFteWv7Oq9gfe5rqtlIggxoIKcBnU9ht9PVNvLUBONvXIaBcWA9aFewPve+0bCZLgNa3NEij0+BZ3U1xdwjOoTZSFoMqAWYDbTcaxXNLvZIUwH6mUjrU/P6s8B2o9sbjOmaZJExoK1fbQFnm/hO1xdHFkfjTgEGppNWh147FXr/3zV+0CpjI13EgI6D6VhYfyHnfepE9KwuirsJpYWBGXzfCPIKXwdF5rboN1+7kAG9D/FF8AhQt6Bzgnr55etA7078n/wP+xBESorPFeEAAAAASUVORK5CYII=";
3772
3861
 
3773
- var img$a = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAkCAYAAACe0YppAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAHqADAAQAAAABAAAAJAAAAAAh0JciAAACrUlEQVRYCcWXPW8TQRCG31kbpNBChGiiRJQ0tFDggPgBtKGhJgEJUGxDFCmJUBKwDUoV2jRxS2NEhZCgAPELKBAhIPFRpKIwUXIe3vFHFJzbs2zWupHWu7e7M8/OenbuVkDReUzoLjbZvGDP/ysiWJQSlpLsiN7HOBp4rco6oBC+Svicz2QWERYULSjh605Q3dvHnk/B138sg1EV1DrjtPVAC9j1eS6NPD5x8lko3rgKch3FfmvbOY2w1a3n89xxlWdsMuvP3UqDPhO2xPLF9NueL3Tbct0dIZ4jJdTh8iH4Irf9H/hQwLZ4edSCs7ltz/Tc4CvWNhka2IwbXDKYZLMDt4Brep61CUFE8Jt26iwj9KbcKGDW7GrDfnGi+csf8zwqoh7MY1nFjhLYBpziKTl3UIDRDthqp5gJ5zENZsrMCXlscQE3DoMO2sJ8wURFr08GBRtAythgZeWIRAVsSDtZBdvqI5QeHamBE7c6yqPKJND/G0sZvIqXmQpmfI57wVrEGI/CFINhIOGCp3lml/mS+B5nwAuWx/iqs5hnDr8ap9ijT7noF+5JPNR0vWAblAqWWVkJLqkFV2rgxK1mVG8ySC4Oss/NqC5j2qfrBdf5RSERrg8c1cBNvYOHsoYfcXAveISvNHpcZIrLxSkm9rXO8SvngZquF2yDTPolVlaCS2rBlRo4cav56fscgvNJ+8wYqDEt3k6aEzfmBVtU82P/Wq+oZiq/pfdQkqf4Fgfw9XnBFtXM1XeZq73nmGPK68871yfUFuMF2yBz9RorK8ElteDiHY2blYI4/ks7xuUCxofNJ2OizfiZZVTW2GGfKJNMkc9cFlUu5k/QRQiOYx9TfHFcMrtkvhWdw2l2fmDnWFCY39i2XWucrOAXb1A5ruKjf26wkfeEXrE71V+iV9IhdJQEvwAAAABJRU5ErkJggg==";
3862
+ var img$a = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACAKADAAQAAAABAAACAAAAAAAL+LWFAAAkvUlEQVR4Ae3d344sVb0H8I1GuMFofAD5p95443ucGwHJifgg8g7wDpoYJecCvOGEIHAFr2ACMeobqES4OCGBsxZ7L2emd/f8urtqVa0/n04qvWemu2rVp35rfX/Tu2fmwQM3AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA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AfCGPyVNIBYYqQnIa5cbAQILBF5Kz+29AfCd/4IC8NTpBEZpAl6c7so5YQIrC+T3aXyStl6bAN/5r1wQdjeFQO9NQF6zvMdsilJ1krUFcifdYwPgO//alWH/Iwv03AT8fOQL49wIbC3wbjpgT02A8N+6QhxvRIEem4D3R7wQzonAngLPp4Pnvw/QQxPgZf89K8WxRxPoqQnIa1Req9wIEFhZ4JW0v9YbAN/5r3zR7Y5AEuilCXjV1SJAoJ7A62nXrTYBvvOvd93tmUDrTUBem9wIEKgo8ETa92/S1loT4Dv/ihfdrgk8Emi1Cfh9Gp93/StTAhsI5EXgd2lrpQnIY8ljciNAoL6A+V/f2BEINC2QXwl4I217NwH5Zb88FjcCBLYTMP+3s3YkAs0K5N8U+I+0bd0IfJaO+ctmVQyMwBwC5v8c19lZEjgp8EL6Sv7Z262agPxXCv2oz8nL4QsENhUw/zfldjACbQrk7wY+TVutRiD/ek+/37vNa29UBMx/NUBgcoH8TtyX0/Zx2tb4U8J5Hx+lLS8u3uWbENwINCxg/jd8cQyNwJYCz6aDvZa2D9P2RdrOfWUgP/aDtP06bc+kzY0Agf4Enk1DNv/7u26bjdi7tzej3v1AT6YR/DRtP0rbc2n7QdqeTlu+fZ62/EbCv6ftL2n7c9q+TJsbAQJjCJj/Y1xHZ0GAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECgssD/A1hw9f23AMmGAAAAAElFTkSuQmCC";
3774
3863
 
3775
3864
  var img$9 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGxmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDYwLCAyMDIwLzA1LzEyLTE2OjA0OjE3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjUtMDktMjRUMTI6Mjc6NDArMDU6MzAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjYtMDEtMDJUMTY6NTA6MDQrMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDI2LTAxLTAyVDE2OjUwOjA0KzA1OjMwIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjljMDI0ZTVhLWJiMWItNDBiMi05NThmLTg5YjExMTE5NGI4MSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjMzZDZiMTBiLTQzNjYtYTc0Ny1iOTZlLWI4ZTBhZjQxMTkzOCIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjI1M2M1ZmRhLTlkYzctNGQ0MC04Y2E3LThmMTQ2MmU4OWMxNSIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MjUzYzVmZGEtOWRjNy00ZDQwLThjYTctOGYxNDYyZTg5YzE1IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDQ5N2Y5YmYtMWZiMi00MWJlLTg5ZGItZGFiMDZmMjEwODE4IiBzdEV2dDp3aGVuPSIyMDI1LTA5LTI0VDEyOjI3OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWMwMjRlNWEtYmIxYi00MGIyLTk1OGYtODliMTExMTk0YjgxIiBzdEV2dDp3aGVuPSIyMDI2LTAxLTAyVDE2OjUwOjA0KzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMiAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7pSLHQ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";
3776
3865
 
@@ -3792,202 +3881,125 @@ var img$1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAasAAAGmCAYAAADCj6uzA
3792
3881
 
3793
3882
  var img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAACAKADAAQAAAABAAACAAAAAAAL+LWFAAAoQklEQVR4Ae3dy49tWV0H8MubEI3GGBFwojwbGmjppsH3pQEnDIz6BzAz4T9QiVPxFZ0ZJ2LigBEDE00g0SADNb7CI4EQE41goBua7r7dPBQEvP52uvftuvU4tc/Ze+21fmt9TrJy6lbts/dan9+q8/3VqbpVN264ESBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgMAOAi+Ka7xwh+sUu8Rzip15nxNPBfjhGP8d49Y+l3QVAgQIEBhM4KWx3l+OcTPGfTF+IsYLYky3b8f49xifjPGxGH8RQx4Fwta3V8cJfz3Gx2N8Mcb/xbh9Zkzv+1CM98V4WQw3AgQIECBwqsAD8cAPx/hOjLNZc+jtb8Wxfx7jnhhuGwi8M87xjzEOoZ//2FSED8a4N4YbAQIECBBYKvCDceCUH+e/yDyfM4f+PTUNfxTjJTHcThB4VTzmIzEOIV/3se/F438nRurv1cT83QgQIECgvMBb4hL/GeO6bFn68c/EuV5Tftp9XeGXYjlPxViKfN1xn4hzTd9CcCNAgAABApcJ3Ix3bpk7cy49GuedGgu3BQLvjWO+G2PG2+r+kTjn6xZc3yEECBAgMJbAQ7Hcb8bYKm/On+crce7pVW23AwLTV/4lwn8uhibgAL4PESBAYECB0uE/58+nw/bFA/ouWvLUHZV4+WXGn+81AYvK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cqPi0586sS/E2LoJ+Eqc8/7is3cBAgQIEMgqMP1gYKn8eUtWlL3n/Yq44D/E2KoJ+GSc65V7L8L1CBAgQCCdwNb586kQkD9HboPpZwLeH+ObMU5tBKb/a/nbMV4cw40AAQIECCwReEEc9Fsx1ubPB+Ic8meJ+BXHTN3Y9FOTT8RY2gh8LY794xg/HsONAAECBAicIvBj8aApf6afH1uaP1+PY1Pkz3NiolluL4qJvuuZcV/cTy+pfH+M6TcJTuD/EePTMf42xkdj/E8MNwIECBAgsFZgyp93x3hnjOl3B0w/sP7SGFP+TD9f9kiMz8X4eIyPxJA/geBGgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAn0I/D/rORE18R9ldgAAAABJRU5ErkJggg==";
3794
3883
 
3884
+ const getFileName = (file) => file instanceof File ? file.name : file.split('/').pop() || file;
3885
+ const iconButtonClass = 'inline-flex items-center justify-center shrink-0 p-0 border-0 bg-transparent focus:outline-none';
3886
+ const docControlClass = 'w-full h-9 min-w-0 flex items-center rounded-lg px-2.5 box-border';
3795
3887
  const FileInputWidget = ({ config }) => {
3796
3888
  const { value, error, touched, isEnabled, isRequired, onChange, onBlur, config: widgetConfig, } = useBaseWidget({ config });
3797
3889
  const { t } = useWidgetContext();
3798
3890
  const accept = widgetConfig['widget-data-options']?.accept;
3799
- const multiple = widgetConfig['widget-data-options']?.multiple || false;
3800
3891
  const maxSize = widgetConfig['widget-data-options']?.maxSize;
3801
- const isSupportingDocument = widgetConfig['widget-id']?.startsWith('supporting-doc-') || false;
3802
- const [localFiles, setLocalFiles] = useState(null);
3892
+ const isReadonly = Boolean(widgetConfig['widget-readonly']);
3893
+ const [localFile, setLocalFile] = useState(null);
3894
+ const fileInputRef = useRef(null);
3803
3895
  const deserializedValue = useMemo(() => {
3804
3896
  if (!value)
3805
3897
  return null;
3806
3898
  return deserializeValue(value);
3807
3899
  }, [value]);
3900
+ const storedDocument = useMemo(() => {
3901
+ if (isStoredDocumentRef(deserializedValue))
3902
+ return deserializedValue;
3903
+ if (isStoredDocumentRef(value))
3904
+ return value;
3905
+ return null;
3906
+ }, [deserializedValue, value]);
3808
3907
  useEffect(() => {
3809
- if (deserializedValue) {
3810
- if (multiple) {
3811
- if (Array.isArray(deserializedValue)) {
3812
- const files = deserializedValue.filter((v) => v instanceof File);
3813
- setLocalFiles(files.length > 0 ? files : null);
3814
- }
3815
- else {
3816
- setLocalFiles(null);
3817
- }
3818
- }
3819
- else {
3820
- if (deserializedValue instanceof File) {
3821
- setLocalFiles(deserializedValue);
3822
- }
3823
- else {
3824
- setLocalFiles(null);
3825
- }
3826
- }
3908
+ if (deserializedValue instanceof File) {
3909
+ setLocalFile(deserializedValue);
3827
3910
  }
3828
3911
  else {
3829
- setLocalFiles(null);
3912
+ setLocalFile(null);
3830
3913
  }
3831
- }, [deserializedValue, multiple]);
3914
+ }, [deserializedValue]);
3832
3915
  const handleFileChange = async (e) => {
3833
3916
  const files = e.target.files;
3834
3917
  if (!files || files.length === 0) {
3835
3918
  onChange(null);
3836
- setLocalFiles(null);
3919
+ setLocalFile(null);
3837
3920
  return;
3838
3921
  }
3839
- if (maxSize) {
3840
- for (let i = 0; i < files.length; i++) {
3841
- if (files[i].size > maxSize) {
3842
- console.error(`File ${files[i].name} exceeds maximum size of ${maxSize} bytes`);
3843
- return;
3844
- }
3845
- }
3846
- }
3847
- const fileArray = Array.from(files);
3848
- if (multiple) {
3849
- setLocalFiles(fileArray);
3850
- }
3851
- else {
3852
- setLocalFiles(fileArray[0]);
3922
+ const file = files[0];
3923
+ if (maxSize && file.size > maxSize) {
3924
+ console.error(`File ${file.name} exceeds maximum size of ${maxSize} bytes`);
3925
+ return;
3853
3926
  }
3927
+ setLocalFile(file);
3854
3928
  try {
3855
- const serialized = await serializeValue(multiple ? fileArray : fileArray[0]);
3929
+ const serialized = await serializeValue(file);
3856
3930
  onChange(serialized);
3857
3931
  }
3858
3932
  catch (error) {
3859
3933
  console.error('Error serializing file:', error);
3860
- if (multiple) {
3861
- onChange(fileArray.map(f => ({ name: f.name, size: f.size, type: f.type })));
3862
- }
3863
- else {
3864
- onChange({ name: fileArray[0].name, size: fileArray[0].size, type: fileArray[0].type });
3865
- }
3934
+ onChange({ name: file.name, size: file.size, type: file.type });
3935
+ }
3936
+ if (fileInputRef.current) {
3937
+ fileInputRef.current.value = '';
3866
3938
  }
3867
3939
  };
3868
- const getFiles = () => {
3869
- if (localFiles) {
3870
- if (multiple && Array.isArray(localFiles)) {
3871
- return localFiles;
3872
- }
3873
- if (!multiple && localFiles instanceof File) {
3874
- return [localFiles];
3875
- }
3940
+ const handleRemove = () => {
3941
+ onChange(null);
3942
+ setLocalFile(null);
3943
+ if (fileInputRef.current) {
3944
+ fileInputRef.current.value = '';
3876
3945
  }
3877
- if (deserializedValue) {
3878
- if (multiple) {
3879
- if (Array.isArray(deserializedValue)) {
3880
- return deserializedValue.filter((v) => v instanceof File || typeof v === 'string');
3881
- }
3882
- return [];
3883
- }
3884
- if (deserializedValue instanceof File) {
3885
- return [deserializedValue];
3886
- }
3887
- if (typeof deserializedValue === 'string') {
3888
- return [deserializedValue];
3946
+ };
3947
+ const getFile = () => {
3948
+ if (localFile instanceof File) {
3949
+ return localFile;
3950
+ }
3951
+ if (deserializedValue instanceof File) {
3952
+ return deserializedValue;
3953
+ }
3954
+ if (typeof deserializedValue === 'string') {
3955
+ return deserializedValue;
3956
+ }
3957
+ if (storedDocument) {
3958
+ return storedDocument.presigned_url;
3959
+ }
3960
+ if (deserializedValue && typeof deserializedValue === 'object' && isSerializedFile(deserializedValue)) {
3961
+ try {
3962
+ return deserializeFile(deserializedValue);
3889
3963
  }
3890
- if (deserializedValue && typeof deserializedValue === 'object' && isSerializedFile(deserializedValue)) {
3891
- try {
3892
- return [deserializeFile(deserializedValue)];
3893
- }
3894
- catch (e) {
3895
- console.error('Error deserializing file:', e);
3896
- }
3964
+ catch (e) {
3965
+ console.error('Error deserializing file:', e);
3897
3966
  }
3898
3967
  }
3899
- return [];
3968
+ return null;
3900
3969
  };
3901
- const files = getFiles();
3902
- const displayValue = files.length > 0
3903
- ? files.map((f) => f instanceof File ? f.name : f.split('/').pop() || f).join(', ')
3904
- : '';
3905
- const handleFileClick = (file, e) => {
3970
+ const file = getFile();
3971
+ const hasFile = !!file || !!storedDocument;
3972
+ const displayFileName = storedDocument
3973
+ ? storedDocument.source_filename || storedDocument.label
3974
+ : file
3975
+ ? getFileName(file)
3976
+ : '';
3977
+ const isEmptyRequired = isRequired && !hasFile;
3978
+ const showValidationError = touched && error.length > 0 && isEmptyRequired;
3979
+ const label = tSchema(t, widgetConfig['widget-label']);
3980
+ const handlePreview = (previewFile, e) => {
3906
3981
  if (e) {
3907
3982
  e.preventDefault();
3908
3983
  e.stopPropagation();
3909
3984
  }
3910
- if (!file) {
3985
+ if (!previewFile)
3911
3986
  return;
3912
- }
3913
- if (canPreviewInWeb(file)) {
3914
- openFileInNewTab(file);
3915
- }
3916
- };
3917
- const renderFileDisplay = () => {
3918
- if (files.length === 0) {
3919
- return null;
3920
- }
3921
- if (files.length === 1) {
3922
- const file = files[0];
3923
- const fileName = file instanceof File ? file.name : file.split('/').pop() || file;
3924
- const canPreview = canPreviewInWeb(file);
3925
- const fileIconElement = (jsxRuntimeExports.jsx("img", { src: img$a, alt: "File icon", style: {
3926
- width: '15px',
3927
- height: '18px',
3928
- aspectRatio: '5/6',
3929
- marginRight: '8px',
3930
- flexShrink: 0
3931
- } }));
3932
- if (canPreview) {
3933
- return (jsxRuntimeExports.jsxs("div", { style: { display: 'flex', alignItems: 'center' }, children: [fileIconElement, jsxRuntimeExports.jsx("button", { type: "button", onClick: (e) => handleFileClick(file, e), className: "text-sm hover:underline focus:outline-none rounded cursor-pointer owt-link", style: { color: isSupportingDocument ? 'var(--owt-color-text)' : 'var(--owt-color-info)' }, title: "Click to preview", children: fileName })] }));
3934
- }
3935
- else {
3936
- return (jsxRuntimeExports.jsxs("div", { style: { display: 'flex', alignItems: 'center' }, children: [fileIconElement, jsxRuntimeExports.jsx("span", { className: "text-sm", style: { color: isSupportingDocument ? 'var(--owt-color-text)' : 'var(--owt-color-text-muted)' }, children: fileName })] }));
3937
- }
3938
- }
3939
- return (jsxRuntimeExports.jsx("div", { className: "flex flex-wrap gap-2", children: files.map((file, index) => {
3940
- const fileName = file instanceof File ? file.name : file.split('/').pop() || file;
3941
- const canPreview = canPreviewInWeb(file);
3942
- const fileIconElement = (jsxRuntimeExports.jsx("img", { src: img$a, alt: "File icon", style: {
3943
- width: '15px',
3944
- height: '18px',
3945
- aspectRatio: '5/6',
3946
- marginRight: '8px',
3947
- flexShrink: 0
3948
- } }));
3949
- if (canPreview) {
3950
- return (jsxRuntimeExports.jsxs("div", { style: { display: 'flex', alignItems: 'center' }, children: [fileIconElement, jsxRuntimeExports.jsx("button", { type: "button", onClick: (e) => handleFileClick(file, e), className: "text-sm hover:underline focus:outline-none rounded cursor-pointer owt-link", style: { color: isSupportingDocument ? 'var(--owt-color-text)' : 'var(--owt-color-info)' }, title: "Click to preview", children: fileName })] }, index));
3951
- }
3952
- else {
3953
- return (jsxRuntimeExports.jsxs("div", { style: { display: 'flex', alignItems: 'center' }, children: [fileIconElement, jsxRuntimeExports.jsx("span", { className: "text-sm", style: { color: isSupportingDocument ? 'var(--owt-color-text)' : 'var(--owt-color-text-muted)' }, children: fileName })] }, index));
3954
- }
3955
- }) }));
3987
+ openFileInNewTab(previewFile);
3956
3988
  };
3957
- if (widgetConfig['widget-readonly']) {
3958
- const label = tSchema(t, widgetConfig['widget-label']);
3959
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] FileDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", title: String(displayValue || ''), children: displayValue ? renderFileDisplay() : jsxRuntimeExports.jsx("span", { className: "text-base owt-text font-medium", children: "-" }) })] }));
3960
- }
3961
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center gap-2 sm:space-x-4", children: [jsxRuntimeExports.jsxs("label", { className: owtFieldInputClass({
3962
- disabled: !isEnabled,
3963
- className: 'cursor-pointer inline-flex items-center justify-between gap-2 owt-shadow-sm text-sm font-medium',
3964
- }), style: {
3965
- width: '100%',
3966
- maxWidth: '180px',
3967
- height: '30px',
3968
- paddingLeft: '12px',
3969
- paddingRight: '12px',
3970
- borderRadius: '10px'
3971
- }, children: [jsxRuntimeExports.jsx("span", { style: {
3972
- color: isSupportingDocument ? 'var(--owt-color-text-muted)' : 'var(--owt-color-text-muted)',
3973
- fontFamily: 'Roboto',
3974
- fontSize: '16px',
3975
- fontStyle: 'normal',
3976
- fontWeight: 400,
3977
- lineHeight: '24px',
3978
- textAlign: 'left'
3979
- }, children: t?.('common.uploadFile') || 'Upload File' }), jsxRuntimeExports.jsx("img", { src: img$9, alt: "Upload", style: {
3980
- width: '18px',
3981
- height: '18px',
3982
- aspectRatio: '1/1',
3983
- display: 'block',
3984
- flexShrink: 0
3985
- } }), jsxRuntimeExports.jsx("input", { type: "file", accept: accept, multiple: multiple, onChange: handleFileChange, onBlur: onBlur, disabled: !isEnabled, className: "hidden" })] }), displayValue && (jsxRuntimeExports.jsx("div", { className: "flex-1 min-w-0", children: renderFileDisplay() }))] }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] })), maxSize && (jsxRuntimeExports.jsx("p", { className: "hidden sm:block owt-text-muted text-xs mt-1", children: t?.('common.maxFileSize', { size: (maxSize / 1024 / 1024).toFixed(2) }) }))] })] }) }));
3989
+ if (isReadonly) {
3990
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] FileDisplayWidget flex flex-row items-start w-full", children: [label && (jsxRuntimeExports.jsxs("div", { className: "w-1/2 min-w-0 pr-2 text-base owt-field-label font-medium truncate", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "w-1/2 min-w-0 flex items-center min-h-[1.5rem]", children: hasFile && file ? (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("span", { className: "w-10/12 min-w-0 truncate text-base owt-text font-medium", title: displayFileName, children: displayFileName }), jsxRuntimeExports.jsx("button", { type: "button", onClick: (e) => handlePreview(file, e), className: `w-2/12 ${iconButtonClass}`, title: displayFileName, children: jsxRuntimeExports.jsx("img", { src: img$1, alt: t?.('common.view') ?? 'View', className: "h-4 w-4" }) })] })) : (jsxRuntimeExports.jsx("span", { className: "text-base owt-text font-medium", children: "-" })) })] }));
3991
+ }
3992
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-row items-start w-full", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "w-1/2 min-w-0 pr-2 text-base font-medium owt-field-label", label: label, required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "w-1/2 min-w-0 flex flex-col justify-center min-h-[1.5rem]", children: [!hasFile && (jsxRuntimeExports.jsxs("label", { className: `${docControlClass} cursor-pointer justify-center gap-2 border border-dashed ${!isEnabled ? 'opacity-50 cursor-not-allowed' : ''}`, style: {
3993
+ borderColor: isEmptyRequired
3994
+ ? 'var(--owt-widget-error-color)'
3995
+ : 'var(--owt-color-primary-dark)',
3996
+ backgroundColor: 'var(--owt-color-bg)',
3997
+ }, children: [jsxRuntimeExports.jsx("img", { src: img$9, alt: "", className: "h-4 w-4 shrink-0" }), jsxRuntimeExports.jsx("span", { className: "text-sm font-medium owt-text", children: t?.('common.upload') ?? 'Upload' }), jsxRuntimeExports.jsx("input", { ref: fileInputRef, type: "file", accept: accept, onChange: (e) => void handleFileChange(e), onBlur: onBlur, disabled: !isEnabled, className: "hidden" })] })), hasFile && file && (jsxRuntimeExports.jsxs("div", { className: `${docControlClass} gap-2 border owt-border owt-bg`, title: displayFileName, children: [jsxRuntimeExports.jsxs("button", { type: "button", onClick: (e) => handlePreview(file, e), className: `${iconButtonClass} min-w-0 flex-1 gap-2 justify-start`, title: displayFileName, children: [jsxRuntimeExports.jsx("img", { src: img$1, alt: "", className: "h-4 w-4 shrink-0" }), jsxRuntimeExports.jsx("span", { className: "min-w-0 truncate text-sm font-medium owt-text", children: displayFileName })] }), jsxRuntimeExports.jsx("button", { type: "button", onClick: handleRemove, disabled: !isEnabled, className: `inline-flex items-center justify-center shrink-0 h-5 w-5 p-0 border-0 rounded-full owt-bg-alt focus:outline-none ${!isEnabled ? 'opacity-50 cursor-not-allowed' : ''}`, title: t?.('common.remove') ?? 'Remove', children: jsxRuntimeExports.jsx("img", { src: img, alt: t?.('common.remove') ?? 'Remove', className: "h-2.5 w-2.5" }) })] })), showValidationError && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] })), touched && error.length > 0 && !isEmptyRequired && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
3986
3998
  };
3987
3999
 
3988
4000
  const SupportingDocuments = ({ sectionId, documents, mode, isDraft, expanded = true, onToggleExpanded, collapsible = false, }) => {
3989
4001
  const { t } = useWidgetContext();
3990
- if (documents.length === 0)
4002
+ if (mode === 'IntakeForm' || documents.length === 0)
3991
4003
  return null;
3992
4004
  const title = t?.('common.supportedDocuments') || 'Supported Documents';
3993
4005
  return (jsxRuntimeExports.jsxs("div", { className: "supporting-documents-container", children: [collapsible ? (jsxRuntimeExports.jsxs("button", { type: "button", onClick: onToggleExpanded, className: "supporting-documents-title-button w-full flex items-center text-left", children: [jsxRuntimeExports.jsx("span", { className: "font-semibold", style: { fontFamily: 'Roboto, sans-serif', fontSize: '16px' }, children: title }), jsxRuntimeExports.jsx("img", { src: expanded ? img$7 : img$6, alt: "Toggle Documents", className: "w-4 h-2.25 transition-transform ml-2" })] })) : (jsxRuntimeExports.jsx("span", { className: "font-semibold", style: { fontFamily: 'Roboto, sans-serif', fontSize: '16px' }, children: title })), expanded && (jsxRuntimeExports.jsx("div", { className: "supporting-documents-grid mt-4", children: documents.map((doc, index) => {
@@ -4022,6 +4034,8 @@ const SectionStyles = ({ sectionClassId, gridId, columnSpan, hasTableWidget, rea
4022
4034
  height: auto !important;
4023
4035
  }
4024
4036
  .${sectionClassId} label.owt-text,
4037
+ .${sectionClassId} label.owt-field-label,
4038
+ .${sectionClassId} .owt-field-label,
4025
4039
  .${sectionClassId} .text-base.owt-text-muted {
4026
4040
  font-weight: 400 !important;
4027
4041
  color: var(--owt-color-text-muted) !important;
@@ -4247,7 +4261,7 @@ const EditSectionPortal = ({ mode, isEditMode, editSectionPosition, sectionClass
4247
4261
  top: 0;
4248
4262
  bottom: 5px;
4249
4263
  width: 1px;
4250
- background-color: var(--owt-color-primary);
4264
+ background-color: var(--owt-color-primary-dark);
4251
4265
  }
4252
4266
  #${editGridId} > .section-divider {
4253
4267
  flex: 0 0 100%;
@@ -4267,14 +4281,14 @@ const EditSectionPortal = ({ mode, isEditMode, editSectionPosition, sectionClass
4267
4281
  width: '100%',
4268
4282
  maxWidth: '100%',
4269
4283
  height: '1px',
4270
- backgroundColor: 'var(--owt-color-primary)',
4284
+ backgroundColor: 'var(--owt-color-primary-dark)',
4271
4285
  margin: '25px 0 0 0',
4272
4286
  } }), jsxRuntimeExports.jsx(SupportingDocuments, { sectionId: sectionId, documents: supportingDocuments, mode: mode, expanded: isDocumentsExpanded, onToggleExpanded: () => setIsDocumentsExpanded(!isDocumentsExpanded), collapsible: true })] })), jsxRuntimeExports.jsx("div", { className: "section-divider", role: "separator", style: {
4273
4287
  flex: '0 0 100%',
4274
4288
  width: '100%',
4275
4289
  maxWidth: '100%',
4276
4290
  height: '1px',
4277
- backgroundColor: 'var(--owt-color-primary)',
4291
+ backgroundColor: 'var(--owt-color-primary-dark)',
4278
4292
  marginTop: hasSupportingDocuments ? '20px' : '25px',
4279
4293
  marginBottom: '20px',
4280
4294
  } }), jsxRuntimeExports.jsx(SectionEditControls, { onCancel: onCancel, onSave: onSave, isDirty: isDirty })] })] })] }), document.body);
@@ -4319,7 +4333,9 @@ const IntakeFormLayout = ({ section, sectionId, gridId, sectionIndex, isExpanded
4319
4333
  width: '100%',
4320
4334
  maxWidth: '100%',
4321
4335
  height: '1px',
4322
- backgroundColor: 'var(--owt-color-primary)',
4336
+ backgroundColor: isDraft !== false
4337
+ ? 'var(--owt-color-primary-dark)'
4338
+ : 'var(--owt-panel-divider-color)',
4323
4339
  margin: '15px 0 0 0',
4324
4340
  } }), hasSupportingDocuments && (jsxRuntimeExports.jsx(SupportingDocuments, { sectionId: sectionId, documents: supportingDocuments, mode: "IntakeForm", isDraft: isDraft })), jsxRuntimeExports.jsxs("div", { className: "intake-form-edit-controls", style: {
4325
4341
  display: 'flex',
@@ -4375,7 +4391,6 @@ const RegistryViewLayout = ({ mode, section, gridId, editableSection, dataSource
4375
4391
  borderRadius: '4px',
4376
4392
  fontSize: '12px',
4377
4393
  fontWeight: 600,
4378
- textTransform: 'uppercase',
4379
4394
  letterSpacing: '0.5px',
4380
4395
  backgroundColor: changeRequestType === 'new'
4381
4396
  ? 'var(--owt-color-success)'
@@ -4385,21 +4400,21 @@ const RegistryViewLayout = ({ mode, section, gridId, editableSection, dataSource
4385
4400
  : 'var(--owt-color-error)',
4386
4401
  whiteSpace: 'nowrap',
4387
4402
  boxShadow: changeRequestType === 'new' ? '0 2px 4px color-mix(in srgb, var(--owt-color-success) 30%, transparent)' : 'none',
4388
- }, children: changeRequestType === 'new' ? 'New' : 'Old' }))] })), jsxRuntimeExports.jsxs("div", { id: gridId, className: "section-panels", style: mode === 'CRView' || (mode === 'RegistryView' && effectiveHideEditButton)
4389
- ? { paddingBottom: '30px' }
4390
- : {}, children: [jsxRuntimeExports.jsx(PanelGrid, { panels: editableSection.panels, dataSourceRequestHandler: dataSourceRequestHandler, schemaData: schemaData, onValueChange: onValueChange, wrapInContainer: false }), mode === 'RegistryView' && !effectiveHideEditButton && (jsxRuntimeExports.jsx("div", { className: "section-divider", role: "separator", style: {
4403
+ }, children: changeRequestType === 'new' ? 'NEW' : 'OLD' }))] })), jsxRuntimeExports.jsxs("div", { id: gridId, className: "section-panels", children: [jsxRuntimeExports.jsx(PanelGrid, { panels: editableSection.panels, dataSourceRequestHandler: dataSourceRequestHandler, schemaData: schemaData, onValueChange: onValueChange, wrapInContainer: false }), jsxRuntimeExports.jsx("div", { className: "section-divider", role: "separator", style: {
4391
4404
  flex: '0 0 100%',
4392
4405
  width: '100%',
4393
4406
  maxWidth: '100%',
4394
4407
  height: '1px',
4395
4408
  marginTop: !isEditMode ? '10px' : 0,
4396
- marginBottom: '14px',
4397
- backgroundColor: 'var(--owt-color-border)',
4398
- } })), mode === 'RegistryView' && !isEditMode && !effectiveHideEditButton && (jsxRuntimeExports.jsx("div", { className: "registry-edit-details flex justify-start items-center", style: { marginBottom: '20px' }, children: jsxRuntimeExports.jsxs("button", { onClick: onEdit, className: "font-normal inline-flex items-center gap-2 bg-transparent border-0 p-0 cursor-pointer hover:opacity-80", style: {
4409
+ marginBottom: mode === 'CRView' ? '28px' : '14px',
4410
+ backgroundColor: isEditMode
4411
+ ? 'var(--owt-color-primary-dark)'
4412
+ : 'var(--owt-panel-divider-color)',
4413
+ } }), mode !== 'CRView' && !isEditMode && !effectiveHideEditButton && (jsxRuntimeExports.jsx("div", { className: "registry-edit-details flex justify-start items-center", style: { marginBottom: '20px' }, children: jsxRuntimeExports.jsxs("button", { onClick: onEdit, className: "font-normal inline-flex items-center gap-2 bg-transparent border-0 p-0 cursor-pointer hover:opacity-80", style: {
4399
4414
  fontFamily: 'Roboto, sans-serif',
4400
4415
  fontSize: '16px',
4401
4416
  color: 'var(--owt-color-text-muted)',
4402
- }, children: [t?.('common.editDetails') || 'Edit Details', jsxRuntimeExports.jsx("img", { src: img$8, alt: "right-arrow", className: "w-3.5 h-3.5 brightness-0 opacity-50" })] }) }))] })] }));
4417
+ }, children: [tSchema(t, 'common.editDetails'), jsxRuntimeExports.jsx("img", { src: img$8, alt: "right-arrow", className: "w-3.5 h-3.5 brightness-0 opacity-50" })] }) }))] })] }));
4403
4418
  };
4404
4419
 
4405
4420
  const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequestHandler, schemaData, onValueChange, gridColumnSpan, onSectionSave, hideEditButton = false, mode = 'RegistryView', changeRequestType, showChangeRequestLabel = true, dbSectionId, sectionRegisterId, onSectionDirtyChange, sectionIndex, expandedSectionIndex, onExpandSection, onSectionSaveSuccess, onPreviousSection, isDraft, isAccessible = false, onEditModeChange, forceExitEdit, }) => {
@@ -4415,7 +4430,7 @@ const SectionRenderer = ({ section, dataSourceRequestHandler: propDataSourceRequ
4415
4430
  const { columnSpan, hasTable: hasTableWidget, hasExplicitTableSpan } = useMemo(() => resolveSectionColumnSpan(section.panels, gridColumnSpan), [section.panels, gridColumnSpan]);
4416
4431
  const readonlyStyles = useMemo(() => buildReadonlyStyleSelectors(sectionClassId), [sectionClassId]);
4417
4432
  const supportingDocuments = section['section-supporting-documents'] || [];
4418
- const hasSupportingDocuments = supportingDocuments.length > 0;
4433
+ const hasSupportingDocuments = mode !== 'IntakeForm' && supportingDocuments.length > 0;
4419
4434
  const { isExpanded, handleAccordionToggle } = useIntakeFormAccordion(mode, sectionIndex, expandedSectionIndex, isAccessible, onExpandSection);
4420
4435
  const { isEditMode, sectionRef, sectionHeight, editSectionPosition, enterEditMode, exitEditMode, } = useSectionEditPortal(forceExitEdit);
4421
4436
  const widgetsEditable = mode === 'IntakeForm' ? isDraft !== false : isEditMode;
@@ -4542,12 +4557,13 @@ const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceR
4542
4557
  validate: async () => {
4543
4558
  if (modeRef.current !== 'IntakeForm')
4544
4559
  checkNoUnsavedChanges();
4560
+ const includeSupportingDocuments = modeRef.current !== 'IntakeForm';
4545
4561
  const values = getValues();
4546
4562
  let allValid = true;
4547
4563
  let firstInvalidIndex = null;
4548
4564
  for (let i = 0; i < safeSections.length; i++) {
4549
4565
  const section = safeSections[i];
4550
- const valid = sectionValidate(section, values, dispatch);
4566
+ const valid = sectionValidate(section, values, dispatch, false, includeSupportingDocuments);
4551
4567
  if (!valid) {
4552
4568
  if (firstInvalidIndex === null)
4553
4569
  firstInvalidIndex = i;
@@ -4563,18 +4579,19 @@ const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceR
4563
4579
  validateAndGetData: async () => {
4564
4580
  if (modeRef.current !== 'IntakeForm')
4565
4581
  checkNoUnsavedChanges();
4582
+ const includeSupportingDocuments = modeRef.current !== 'IntakeForm';
4566
4583
  const values = getValues();
4567
4584
  const results = [];
4568
4585
  let firstInvalidIndex = null;
4569
4586
  for (let i = 0; i < safeSections.length; i++) {
4570
4587
  const section = safeSections[i];
4571
- const valid = sectionValidate(section, values, dispatch);
4588
+ const valid = sectionValidate(section, values, dispatch, false, includeSupportingDocuments);
4572
4589
  if (!valid) {
4573
4590
  if (firstInvalidIndex === null)
4574
4591
  firstInvalidIndex = i;
4575
4592
  }
4576
4593
  else {
4577
- results.push(buildSectionChanges(section, values));
4594
+ results.push(buildSectionChanges(section, values, { includeSupportingDocuments }));
4578
4595
  }
4579
4596
  }
4580
4597
  if (firstInvalidIndex !== null) {
@@ -4586,11 +4603,12 @@ const SectionsContainer = ({ sections, dataSourceRequestHandler: propDataSourceR
4586
4603
  return results;
4587
4604
  },
4588
4605
  getStructuredData: () => {
4606
+ const includeSupportingDocuments = modeRef.current !== 'IntakeForm';
4589
4607
  const values = getValues();
4590
4608
  const results = [];
4591
4609
  for (let i = 0; i < safeSections.length; i++) {
4592
4610
  const section = safeSections[i];
4593
- results.push(buildSectionChanges(section, values));
4611
+ results.push(buildSectionChanges(section, values, { includeSupportingDocuments }));
4594
4612
  }
4595
4613
  return results;
4596
4614
  },
@@ -4709,7 +4727,6 @@ const WIDGET_TYPES = [
4709
4727
  'parent-lookup',
4710
4728
  'multi-select',
4711
4729
  'geo-hierarchy',
4712
- 'docs',
4713
4730
  ];
4714
4731
  function getWidgetCategory(widget) {
4715
4732
  switch (widget) {
@@ -4719,7 +4736,6 @@ function getWidgetCategory(widget) {
4719
4736
  case 'profile':
4720
4737
  case 'header-section':
4721
4738
  case 'scores-display':
4722
- case 'docs':
4723
4739
  return 'layout';
4724
4740
  default:
4725
4741
  return 'input';
@@ -6269,7 +6285,7 @@ const JSONEditorPanel = ({ initialText, onChange, onRawDraftChange, onRawValidat
6269
6285
  border: 'none',
6270
6286
  borderRadius: '4px',
6271
6287
  background: 'transparent',
6272
- color: 'var(--owt-color-text-muted, #727474)',
6288
+ color: 'var(--owt-color-text-muted)',
6273
6289
  cursor: 'pointer',
6274
6290
  display: 'flex',
6275
6291
  alignItems: 'center',
@@ -6280,7 +6296,7 @@ const JSONEditorPanel = ({ initialText, onChange, onRawDraftChange, onRawValidat
6280
6296
  marginBottom: '8px',
6281
6297
  padding: '10px 12px',
6282
6298
  borderRadius: '8px',
6283
- background: 'var(--owt-color-error-light, #fef2f2)',
6299
+ background: 'var(--owt-color-error-light)',
6284
6300
  border: '1px solid var(--owt-color-error)',
6285
6301
  color: 'var(--owt-color-error)',
6286
6302
  fontSize: '12px',
@@ -6290,7 +6306,7 @@ const JSONEditorPanel = ({ initialText, onChange, onRawDraftChange, onRawValidat
6290
6306
  padding: '4px 10px',
6291
6307
  borderRadius: '8px',
6292
6308
  border: '1px solid var(--owt-color-error)',
6293
- background: 'var(--owt-color-bg, #FFFFFF)',
6309
+ background: 'var(--owt-color-bg)',
6294
6310
  color: 'var(--owt-color-error)',
6295
6311
  cursor: 'pointer',
6296
6312
  fontSize: '12px',
@@ -6309,7 +6325,7 @@ const JSONEditorPanel = ({ initialText, onChange, onRawDraftChange, onRawValidat
6309
6325
  width: '52px',
6310
6326
  overflow: 'hidden',
6311
6327
  borderRight: '1px solid var(--owt-color-border-light)',
6312
- background: 'var(--owt-color-bg-alt, #F6F6F6)',
6328
+ background: 'var(--owt-color-bg-alt)',
6313
6329
  padding: '20px 8px 20px 12px',
6314
6330
  boxSizing: 'border-box',
6315
6331
  userSelect: 'none',
@@ -6322,9 +6338,9 @@ const JSONEditorPanel = ({ initialText, onChange, onRawDraftChange, onRawValidat
6322
6338
  fontFamily: 'Monaco, Menlo, "Ubuntu Mono", Consolas, "source-code-pro", monospace',
6323
6339
  fontSize: `${EDITOR_FONT_SIZE}px`,
6324
6340
  textAlign: 'right',
6325
- color: isHighlighted ? 'var(--owt-color-error)' : 'var(--owt-color-text-muted, #727474)',
6341
+ color: isHighlighted ? 'var(--owt-color-error)' : 'var(--owt-color-text-muted)',
6326
6342
  fontWeight: isHighlighted ? 700 : 400,
6327
- background: isHighlighted ? 'var(--owt-color-error-light, #fef2f2)' : 'transparent',
6343
+ background: isHighlighted ? 'var(--owt-color-error-light)' : 'transparent',
6328
6344
  borderRadius: '4px',
6329
6345
  }, children: lineNumber }, lineNumber));
6330
6346
  }) }), jsxRuntimeExports.jsxs("div", { style: {
@@ -6353,7 +6369,7 @@ const JSONEditorPanel = ({ initialText, onChange, onRawDraftChange, onRawValidat
6353
6369
  whiteSpace: 'pre-wrap',
6354
6370
  wordBreak: 'break-word',
6355
6371
  color: 'transparent',
6356
- background: isHighlighted ? 'var(--owt-color-error-light, #fef2f2)' : 'transparent',
6372
+ background: isHighlighted ? 'var(--owt-color-error-light)' : 'transparent',
6357
6373
  boxShadow: isHighlighted ? 'inset 3px 0 0 var(--owt-color-error)' : 'none',
6358
6374
  }, children: line.length > 0 ? line : ' ' }, `highlight-${lineNumber}`));
6359
6375
  }) }), jsxRuntimeExports.jsx("textarea", { ref: textareaRef, value: rawJsonText, onChange: (e) => handleRawJsonChange(e.target.value), onScroll: handleTextareaScroll, style: {
@@ -11251,27 +11267,27 @@ const VisualBuilderPanel = ({ section, selectedNode, onSelectNode, onSectionChan
11251
11267
  minHeight: 0,
11252
11268
  }, children: [jsxRuntimeExports.jsxs("div", { style: {
11253
11269
  padding: '20px',
11254
- background: 'var(--owt-color-bg, #FFFFFF)',
11270
+ background: 'var(--owt-color-bg)',
11255
11271
  display: 'flex',
11256
11272
  justifyContent: 'space-between',
11257
11273
  alignItems: 'center',
11258
11274
  flexShrink: 0,
11259
- }, children: [jsxRuntimeExports.jsx("div", { style: { fontWeight: 600, fontSize: '16px', color: 'var(--owt-color-text, #011627)', paddingTop: '5px' }, children: t?.('sectionBuilder.visualBuilder') || 'Visual Builder' }), jsxRuntimeExports.jsxs("div", { style: { display: 'flex', gap: '10px' }, children: [jsxRuntimeExports.jsx("button", { onClick: handleAddPanel, style: {
11275
+ }, children: [jsxRuntimeExports.jsx("div", { style: { fontWeight: 600, fontSize: '16px', color: 'var(--owt-color-text)', paddingTop: '5px' }, children: t?.('sectionBuilder.visualBuilder') || 'Visual Builder' }), jsxRuntimeExports.jsxs("div", { style: { display: 'flex', gap: '10px' }, children: [jsxRuntimeExports.jsx("button", { onClick: handleAddPanel, style: {
11260
11276
  padding: '8px 16px',
11261
- border: '1px solid var(--owt-color-border, #C4C4C4)',
11277
+ border: '1px solid var(--owt-color-border)',
11262
11278
  borderRadius: '10px',
11263
- background: 'var(--owt-btn-primary-bg, #FFFFFF)',
11264
- color: 'var(--owt-btn-primary-color, #011627)',
11279
+ background: 'var(--owt-btn-primary-bg)',
11280
+ color: 'var(--owt-btn-primary-color)',
11265
11281
  fontWeight: 600,
11266
11282
  cursor: 'pointer',
11267
11283
  fontSize: '12px',
11268
11284
  whiteSpace: 'nowrap',
11269
11285
  }, children: t?.('sectionBuilder.addPanel') || '+ Add Panel' }), jsxRuntimeExports.jsx("button", { onClick: () => handleAddWidget(), style: {
11270
11286
  padding: '8px 16px',
11271
- border: '1px solid var(--owt-color-border, #C4C4C4)',
11287
+ border: '1px solid var(--owt-color-border)',
11272
11288
  borderRadius: '10px',
11273
- background: 'var(--owt-btn-primary-bg, #FFFFFF)',
11274
- color: 'var(--owt-btn-primary-color, #011627)',
11289
+ background: 'var(--owt-btn-primary-bg)',
11290
+ color: 'var(--owt-btn-primary-color)',
11275
11291
  fontWeight: 600,
11276
11292
  cursor: 'pointer',
11277
11293
  fontSize: '12px',
@@ -11281,7 +11297,7 @@ const VisualBuilderPanel = ({ section, selectedNode, onSelectNode, onSectionChan
11281
11297
  border: 'none',
11282
11298
  borderRadius: '4px',
11283
11299
  background: 'transparent',
11284
- color: 'var(--owt-color-text-muted, #727474)',
11300
+ color: 'var(--owt-color-text-muted)',
11285
11301
  cursor: 'pointer',
11286
11302
  display: 'flex',
11287
11303
  alignItems: 'center',
@@ -11292,23 +11308,23 @@ const VisualBuilderPanel = ({ section, selectedNode, onSelectNode, onSectionChan
11292
11308
  flex: '1 1 0%',
11293
11309
  display: 'flex',
11294
11310
  overflow: 'hidden',
11295
- border: '1px solid var(--owt-color-border, #C4C4C4)',
11311
+ border: '1px solid var(--owt-color-border)',
11296
11312
  borderRadius: '10px',
11297
11313
  minHeight: 0,
11298
11314
  }, children: [jsxRuntimeExports.jsxs("div", { style: {
11299
11315
  flex: '1 1 0%',
11300
11316
  width: '45%',
11301
- borderRight: '1px solid var(--owt-color-border, #C4C4C4)',
11317
+ borderRight: '1px solid var(--owt-color-border)',
11302
11318
  display: 'flex',
11303
11319
  flexDirection: 'column',
11304
11320
  minHeight: 0,
11305
11321
  overflow: 'hidden',
11306
11322
  }, children: [jsxRuntimeExports.jsxs("div", { style: {
11307
11323
  padding: '12px 15px',
11308
- borderBottom: '1px solid var(--owt-color-border-light, #E4E4E4)',
11309
- background: 'var(--owt-color-bg, #FFFFFF)',
11324
+ borderBottom: '1px solid var(--owt-color-border-light)',
11325
+ background: 'var(--owt-color-bg)',
11310
11326
  flexShrink: 0,
11311
- }, children: [jsxRuntimeExports.jsx("div", { style: { fontSize: '12px', fontWeight: 700, color: 'var(--owt-color-text, #011627)', marginBottom: '8px' }, children: t?.('sectionBuilder.widgetPalette') || 'Widget Palette' }), jsxRuntimeExports.jsxs("div", { style: { display: 'flex', gap: '8px', alignItems: 'stretch' }, children: [jsxRuntimeExports.jsx("div", { style: { flex: 1, minWidth: 0 }, children: jsxRuntimeExports.jsx(SearchableSelect, { options: WIDGET_TYPES, value: paletteWidgetType, onChange: setPaletteWidgetType, placeholder: t?.('sectionBuilder.searchWidgetType') || 'Search widget type...' }) }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => {
11327
+ }, children: [jsxRuntimeExports.jsx("div", { style: { fontSize: '12px', fontWeight: 700, color: 'var(--owt-color-text)', marginBottom: '8px' }, children: t?.('sectionBuilder.widgetPalette') || 'Widget Palette' }), jsxRuntimeExports.jsxs("div", { style: { display: 'flex', gap: '8px', alignItems: 'stretch' }, children: [jsxRuntimeExports.jsx("div", { style: { flex: 1, minWidth: 0 }, children: jsxRuntimeExports.jsx(SearchableSelect, { options: WIDGET_TYPES, value: paletteWidgetType, onChange: setPaletteWidgetType, placeholder: t?.('sectionBuilder.searchWidgetType') || 'Search widget type...' }) }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => {
11312
11328
  if (selectedNode?.type === 'panel') {
11313
11329
  onAddWidget(selectedNode.id, paletteWidgetType);
11314
11330
  }
@@ -11319,13 +11335,13 @@ const VisualBuilderPanel = ({ section, selectedNode, onSelectNode, onSectionChan
11319
11335
  padding: '8px 12px',
11320
11336
  border: 'none',
11321
11337
  borderRadius: '6px',
11322
- background: 'var(--owt-color-text, #011627)',
11323
- color: 'var(--owt-color-bg, #FFFFFF)',
11338
+ background: 'var(--owt-color-text)',
11339
+ color: 'var(--owt-color-bg)',
11324
11340
  cursor: 'pointer',
11325
11341
  fontSize: '12px',
11326
11342
  fontWeight: 700,
11327
11343
  whiteSpace: 'nowrap',
11328
- }, children: t?.('sectionBuilder.add') || 'Add' })] }), jsxRuntimeExports.jsx("div", { style: { marginTop: '8px', fontSize: '11px', color: 'var(--owt-color-text-muted, #727474)' }, children: t?.('sectionBuilder.paletteTip') ||
11344
+ }, children: t?.('sectionBuilder.add') || 'Add' })] }), jsxRuntimeExports.jsx("div", { style: { marginTop: '8px', fontSize: '11px', color: 'var(--owt-color-text-muted)' }, children: t?.('sectionBuilder.paletteTip') ||
11329
11345
  'Tip: select a panel first to control where widgets land.' })] }), jsxRuntimeExports.jsx("div", { style: { flex: '1 1 0%', minHeight: 0, display: 'flex', flexDirection: 'column', overflow: 'hidden' }, children: jsxRuntimeExports.jsx(SectionTree, { section: section, selectedNode: selectedNode, onSelectNode: onSelectNode, onAddPanel: onAddPanel, onAddWidget: onAddWidget, onDeleteNode: onDeleteNode, onDuplicateNode: onDuplicateNode, onMoveNode: onMoveNode }) })] }), jsxRuntimeExports.jsx("div", { style: {
11330
11346
  flex: '1 1 0%',
11331
11347
  width: '55%',
@@ -11674,7 +11690,7 @@ const SectionBuilder = ({ initialSection, onChange, onSave, onNotify, }) => {
11674
11690
  left: 0,
11675
11691
  right: 0,
11676
11692
  bottom: 0,
11677
- background: 'rgba(0, 0, 0, 0.5)',
11693
+ background: 'var(--owt-color-overlay)',
11678
11694
  zIndex: 9998,
11679
11695
  }, onClick: toggleMaximize })), jsxRuntimeExports.jsxs("div", { style: {
11680
11696
  display: 'flex',
@@ -11683,7 +11699,7 @@ const SectionBuilder = ({ initialSection, onChange, onSave, onNotify, }) => {
11683
11699
  height: isMaximized ? '100vh' : undefined,
11684
11700
  width: isMaximized ? '100vw' : '100%',
11685
11701
  minHeight: 0,
11686
- background: 'var(--owt-color-bg, #FFFFFF)',
11702
+ background: 'var(--owt-color-bg)',
11687
11703
  fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
11688
11704
  overflow: 'hidden',
11689
11705
  border: 'none',
@@ -11693,19 +11709,19 @@ const SectionBuilder = ({ initialSection, onChange, onSave, onNotify, }) => {
11693
11709
  zIndex: isMaximized ? 9999 : 'auto',
11694
11710
  }, children: [jsxRuntimeExports.jsxs("div", { style: {
11695
11711
  padding: '12px 16px',
11696
- borderBottom: '1px solid var(--owt-color-border-light, #E4E4E4)',
11712
+ borderBottom: '1px solid var(--owt-color-border-light)',
11697
11713
  display: 'flex',
11698
11714
  alignItems: 'center',
11699
11715
  justifyContent: 'space-between',
11700
- background: 'var(--owt-color-bg, #FFFFFF)',
11716
+ background: 'var(--owt-color-bg)',
11701
11717
  flexShrink: 0,
11702
- }, children: [jsxRuntimeExports.jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '10px' }, children: [jsxRuntimeExports.jsx("div", { style: { fontWeight: 700, fontSize: '14px', color: 'var(--owt-color-text, #011627)' }, children: t?.('sectionBuilder.title') || 'Section Builder' }), jsxRuntimeExports.jsxs("div", { style: { display: 'flex', gap: '6px', background: 'var(--owt-color-bg-alt, #F6F6F6)', padding: '4px', borderRadius: '9999px' }, children: [jsxRuntimeExports.jsx("button", { type: "button", onClick: switchToGraphical, style: {
11718
+ }, children: [jsxRuntimeExports.jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '10px' }, children: [jsxRuntimeExports.jsx("div", { style: { fontWeight: 700, fontSize: '14px', color: 'var(--owt-color-text)' }, children: t?.('sectionBuilder.title') || 'Section Builder' }), jsxRuntimeExports.jsxs("div", { style: { display: 'flex', gap: '6px', background: 'var(--owt-color-bg-alt)', padding: '4px', borderRadius: '9999px' }, children: [jsxRuntimeExports.jsx("button", { type: "button", onClick: switchToGraphical, style: {
11703
11719
  padding: '6px 10px',
11704
11720
  borderRadius: '9999px',
11705
11721
  border: 'none',
11706
11722
  cursor: 'pointer',
11707
- background: mode === 'graphical' ? 'var(--owt-color-text, #011627)' : 'transparent',
11708
- color: mode === 'graphical' ? 'var(--owt-color-bg, #FFFFFF)' : 'var(--owt-color-text, #011627)',
11723
+ background: mode === 'graphical' ? 'var(--owt-color-text)' : 'transparent',
11724
+ color: mode === 'graphical' ? 'var(--owt-color-bg)' : 'var(--owt-color-text)',
11709
11725
  fontSize: '12px',
11710
11726
  fontWeight: 700,
11711
11727
  }, children: t?.('sectionBuilder.graphical') || 'Graphical' }), jsxRuntimeExports.jsx("button", { type: "button", onClick: switchToRaw, style: {
@@ -11713,28 +11729,28 @@ const SectionBuilder = ({ initialSection, onChange, onSave, onNotify, }) => {
11713
11729
  borderRadius: '9999px',
11714
11730
  border: 'none',
11715
11731
  cursor: 'pointer',
11716
- background: mode === 'raw' ? 'var(--owt-color-text, #011627)' : 'transparent',
11717
- color: mode === 'raw' ? 'var(--owt-color-bg, #FFFFFF)' : 'var(--owt-color-text, #011627)',
11732
+ background: mode === 'raw' ? 'var(--owt-color-text)' : 'transparent',
11733
+ color: mode === 'raw' ? 'var(--owt-color-bg)' : 'var(--owt-color-text)',
11718
11734
  fontSize: '12px',
11719
11735
  fontWeight: 700,
11720
11736
  }, children: t?.('sectionBuilder.rawJson') || 'Raw JSON' })] })] }), jsxRuntimeExports.jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '10px' }, children: [jsxRuntimeExports.jsx("button", { type: "button", onClick: () => setShowPreview(true), style: {
11721
11737
  padding: '8px 12px',
11722
11738
  borderRadius: '10px',
11723
11739
  border: 'none',
11724
- background: 'var(--owt-color-primary-accent, #EE7C22)',
11725
- color: 'var(--owt-color-bg, #FFFFFF)',
11740
+ background: 'var(--owt-color-primary-accent)',
11741
+ color: 'var(--owt-color-bg)',
11726
11742
  cursor: 'pointer',
11727
11743
  fontSize: '12px',
11728
11744
  fontWeight: 700,
11729
11745
  }, title: t?.('sectionBuilder.previewSection') || 'Preview Section', children: t?.('sectionBuilder.preview') || 'Preview' }), jsxRuntimeExports.jsx("button", { type: "button", onClick: handleReset, style: {
11730
11746
  padding: '8px 12px',
11731
11747
  borderRadius: '10px',
11732
- border: '1px solid var(--owt-color-border, #C4C4C4)',
11733
- background: 'var(--owt-color-bg, #FFFFFF)',
11748
+ border: '1px solid var(--owt-color-border)',
11749
+ background: 'var(--owt-color-bg)',
11734
11750
  cursor: 'pointer',
11735
11751
  fontSize: '12px',
11736
11752
  fontWeight: 700,
11737
- color: 'var(--owt-color-text, #011627)',
11753
+ color: 'var(--owt-color-text)',
11738
11754
  }, children: t?.('sectionBuilder.reset') || 'Reset' }), onSave && (jsxRuntimeExports.jsx("button", { type: "button", onClick: () => {
11739
11755
  if (mode === 'raw') {
11740
11756
  const validation = parseSectionJson(rawDraft);
@@ -11752,8 +11768,8 @@ const SectionBuilder = ({ initialSection, onChange, onSave, onNotify, }) => {
11752
11768
  padding: '8px 12px',
11753
11769
  borderRadius: '10px',
11754
11770
  border: 'none',
11755
- background: 'var(--owt-color-text, #011627)',
11756
- color: 'var(--owt-color-bg, #FFFFFF)',
11771
+ background: 'var(--owt-color-text)',
11772
+ color: 'var(--owt-color-bg)',
11757
11773
  cursor: 'pointer',
11758
11774
  fontSize: '12px',
11759
11775
  fontWeight: 700,
@@ -11766,14 +11782,14 @@ const SectionBuilder = ({ initialSection, onChange, onSave, onNotify, }) => {
11766
11782
  left: 0,
11767
11783
  right: 0,
11768
11784
  bottom: 0,
11769
- background: 'rgba(0, 0, 0, 0.5)',
11785
+ background: 'var(--owt-color-overlay)',
11770
11786
  zIndex: 10000,
11771
11787
  display: 'flex',
11772
11788
  alignItems: 'center',
11773
11789
  justifyContent: 'center',
11774
11790
  padding: '20px',
11775
11791
  }, onClick: () => setShowPreview(false), children: jsxRuntimeExports.jsxs("div", { style: {
11776
- background: 'var(--owt-color-bg, #FFFFFF)',
11792
+ background: 'var(--owt-color-bg)',
11777
11793
  borderRadius: '8px',
11778
11794
  width: '100%',
11779
11795
  minWidth: '700px',
@@ -11782,21 +11798,21 @@ const SectionBuilder = ({ initialSection, onChange, onSave, onNotify, }) => {
11782
11798
  maxHeight: '90vh',
11783
11799
  display: 'flex',
11784
11800
  flexDirection: 'column',
11785
- boxShadow: '0 4px 20px rgba(0, 0, 0, 0.3)',
11801
+ boxShadow: '0 4px 20px var(--owt-color-shadow)',
11786
11802
  }, onClick: (e) => e.stopPropagation(), children: [jsxRuntimeExports.jsxs("div", { style: {
11787
11803
  padding: '15px 20px',
11788
- borderBottom: '1px solid var(--owt-color-border-light, #E4E4E4)',
11804
+ borderBottom: '1px solid var(--owt-color-border-light)',
11789
11805
  display: 'flex',
11790
11806
  justifyContent: 'space-between',
11791
11807
  alignItems: 'center',
11792
- background: 'var(--owt-color-bg-alt, #F6F6F6)',
11793
- }, children: [jsxRuntimeExports.jsx("h2", { style: { margin: 0, fontSize: '18px', fontWeight: 600, color: 'var(--owt-color-text, #011627)' }, children: t?.('sectionBuilder.previewTitle') || 'Preview' }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => setShowPreview(false), style: {
11808
+ background: 'var(--owt-color-bg-alt)',
11809
+ }, children: [jsxRuntimeExports.jsx("h2", { style: { margin: 0, fontSize: '18px', fontWeight: 600, color: 'var(--owt-color-text)' }, children: t?.('sectionBuilder.previewTitle') || 'Preview' }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => setShowPreview(false), style: {
11794
11810
  background: 'transparent',
11795
11811
  border: 'none',
11796
11812
  cursor: 'pointer',
11797
11813
  fontSize: '18px',
11798
11814
  padding: '5px 10px',
11799
- color: 'var(--owt-color-text-muted, #727474)',
11815
+ color: 'var(--owt-color-text-muted)',
11800
11816
  }, "aria-label": t?.('sectionBuilder.closePreview') || 'Close preview', children: "\u00D7" })] }), jsxRuntimeExports.jsx("div", { style: { flex: 1, overflow: 'auto', padding: '20px' }, children: jsxRuntimeExports.jsx(Provider, { store: previewStore, children: jsxRuntimeExports.jsx(WidgetProvider, { store: previewStore, dataSourceRequestHandler: widgetContext.dataSourceRequestHandler, schemaData: widgetContext.schemaData, t: widgetContext.t, children: jsxRuntimeExports.jsx("div", { style: { position: 'relative', width: '100%', height: '100%' }, children: jsxRuntimeExports.jsx(SectionRenderer, { section: makeSectionEditable(section), hideEditButton: true }) }) }) }) })] }) }), document.body)] }));
11801
11817
  };
11802
11818
 
@@ -12097,9 +12113,9 @@ const TextInputWidget = ({ config }) => {
12097
12113
  }, [displayValue, widgetConfig, t]);
12098
12114
  if (widgetConfig['widget-readonly']) {
12099
12115
  const label = tSchema(t, widgetConfig['widget-label']);
12100
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] TextDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
12116
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] TextDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
12101
12117
  }
12102
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-1", children: [jsxRuntimeExports.jsx("input", { type: getInputType(), value: displayValue, onChange: handleChange, onBlur: onBlur, disabled: !isEnabled || widgetConfig['widget-readonly'], placeholder: placeholder, maxLength: formatConfig?.mask ? undefined : maxLength, inputMode: formatConfig?.currency
12118
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2 mb-1", children: [jsxRuntimeExports.jsx("input", { type: getInputType(), value: displayValue, onChange: handleChange, onBlur: onBlur, disabled: !isEnabled || widgetConfig['widget-readonly'], placeholder: placeholder, maxLength: formatConfig?.mask ? undefined : maxLength, inputMode: formatConfig?.currency
12103
12119
  ? 'decimal'
12104
12120
  : formatConfig?.characterType === 'numeric' || formatConfig?.characterType === 'numeric-decimal'
12105
12121
  ? 'numeric'
@@ -12227,9 +12243,9 @@ const NumberInputWidget = ({ config }) => {
12227
12243
  const label = tSchema(t, widgetConfig['widget-label']);
12228
12244
  const numValue = getNumericValue();
12229
12245
  const display = numValue !== null ? formatNumber(numValue, formatConfig) : '';
12230
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] NumberDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: `text-base owt-text font-medium ${textAlignClass}`, title: String(display ?? ''), children: display }) })] }));
12246
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] NumberDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: `text-base owt-text font-medium ${textAlignClass}`, title: String(display ?? ''), children: display }) })] }));
12231
12247
  }
12232
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between mb-1", children: [jsxRuntimeExports.jsx("input", { type: "text", inputMode: "decimal", value: displayValue, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, onKeyDown: handleKeyDown, disabled: !isEnabled || widgetConfig['widget-readonly'], placeholder: placeholder, maxLength: maxLength, className: owtFieldInputClass({
12248
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between mb-1", children: [jsxRuntimeExports.jsx("input", { type: "text", inputMode: "decimal", value: displayValue, onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, onKeyDown: handleKeyDown, disabled: !isEnabled || widgetConfig['widget-readonly'], placeholder: placeholder, maxLength: maxLength, className: owtFieldInputClass({
12233
12249
  error: (touched && error.length > 0) || (widgetConfig['widget-required'] && (value === null || value === undefined || value === '')),
12234
12250
  disabled: !isEnabled || widgetConfig['widget-readonly'],
12235
12251
  className: `w-full sm:w-[180px] max-w-full h-[30px] px-3 owt-shadow-sm ${textAlignClass}`,
@@ -12302,10 +12318,10 @@ const BooleanWidget = ({ config }) => {
12302
12318
  else {
12303
12319
  displayValue = falseLabel;
12304
12320
  }
12305
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] BooleanDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
12321
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] BooleanDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
12306
12322
  }
12307
12323
  if (controlType === 'checkbox') {
12308
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-baseline", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium leading-normal owt-text md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0 sm:pt-0.5", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("label", { className: "inline-flex items-baseline cursor-pointer gap-2", children: [jsxRuntimeExports.jsx("input", { type: "checkbox", checked: currentValue === true, onChange: handleCheckboxChange, onBlur: onBlur, disabled: !isEnabled || widgetConfig['widget-readonly'], className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check rounded" }), (currentValue === true || currentValue === false) && (jsxRuntimeExports.jsx("span", { className: "text-base owt-text leading-normal", children: currentValue === true ? trueLabel : falseLabel }))] }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
12324
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-baseline", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium leading-normal owt-field-label md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0 sm:pt-0.5", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("label", { className: "inline-flex items-baseline cursor-pointer gap-2", children: [jsxRuntimeExports.jsx("input", { type: "checkbox", checked: currentValue === true, onChange: handleCheckboxChange, onBlur: onBlur, disabled: !isEnabled || widgetConfig['widget-readonly'], className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check rounded" }), (currentValue === true || currentValue === false) && (jsxRuntimeExports.jsx("span", { className: "text-base owt-text leading-normal", children: currentValue === true ? trueLabel : falseLabel }))] }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
12309
12325
  }
12310
12326
  if (controlType === 'radio') {
12311
12327
  const containerClass = orientation === 'horizontal'
@@ -12313,9 +12329,9 @@ const BooleanWidget = ({ config }) => {
12313
12329
  : 'flex flex-col items-start gap-2';
12314
12330
  const radioDisabled = !isEnabled || widgetConfig['widget-readonly'];
12315
12331
  const optionDisabledClass = radioDisabled ? 'opacity-50 cursor-not-allowed' : '';
12316
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-baseline", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium leading-normal owt-text md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0 sm:pt-0.5", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { className: containerClass, onBlur: onBlur, children: [allowUnset && (jsxRuntimeExports.jsxs("label", { className: `inline-flex items-baseline gap-2 cursor-pointer ${optionDisabledClass}`, children: [jsxRuntimeExports.jsx("input", { type: "radio", name: radioGroupName, checked: currentValue === null, onChange: () => handleRadioChange(null), disabled: radioDisabled, className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check" }), jsxRuntimeExports.jsx("span", { className: "text-base owt-text leading-normal", children: unsetLabel })] })), jsxRuntimeExports.jsxs("label", { className: `inline-flex items-baseline gap-2 cursor-pointer ${optionDisabledClass}`, children: [jsxRuntimeExports.jsx("input", { type: "radio", name: radioGroupName, checked: currentValue === true, onChange: () => handleRadioChange(true), disabled: radioDisabled, className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check" }), jsxRuntimeExports.jsx("span", { className: "text-base owt-text leading-normal", children: trueLabel })] }), jsxRuntimeExports.jsxs("label", { className: `inline-flex items-baseline gap-2 cursor-pointer ${optionDisabledClass}`, children: [jsxRuntimeExports.jsx("input", { type: "radio", name: radioGroupName, checked: currentValue === false, onChange: () => handleRadioChange(false), disabled: radioDisabled, className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check" }), jsxRuntimeExports.jsx("span", { className: "text-base owt-text leading-normal", children: falseLabel })] })] }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
12332
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-baseline", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium leading-normal owt-field-label md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0 sm:pt-0.5", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { className: containerClass, onBlur: onBlur, children: [allowUnset && (jsxRuntimeExports.jsxs("label", { className: `inline-flex items-baseline gap-2 cursor-pointer ${optionDisabledClass}`, children: [jsxRuntimeExports.jsx("input", { type: "radio", name: radioGroupName, checked: currentValue === null, onChange: () => handleRadioChange(null), disabled: radioDisabled, className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check" }), jsxRuntimeExports.jsx("span", { className: "text-base owt-text leading-normal", children: unsetLabel })] })), jsxRuntimeExports.jsxs("label", { className: `inline-flex items-baseline gap-2 cursor-pointer ${optionDisabledClass}`, children: [jsxRuntimeExports.jsx("input", { type: "radio", name: radioGroupName, checked: currentValue === true, onChange: () => handleRadioChange(true), disabled: radioDisabled, className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check" }), jsxRuntimeExports.jsx("span", { className: "text-base owt-text leading-normal", children: trueLabel })] }), jsxRuntimeExports.jsxs("label", { className: `inline-flex items-baseline gap-2 cursor-pointer ${optionDisabledClass}`, children: [jsxRuntimeExports.jsx("input", { type: "radio", name: radioGroupName, checked: currentValue === false, onChange: () => handleRadioChange(false), disabled: radioDisabled, className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check" }), jsxRuntimeExports.jsx("span", { className: "text-base owt-text leading-normal", children: falseLabel })] })] }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
12317
12333
  }
12318
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-baseline", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium leading-normal owt-text sm:min-w-[150px] sm:pr-4 mb-1 sm:mb-0 sm:pt-0.5", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center gap-3", onBlur: onBlur, children: [allowUnset && (jsxRuntimeExports.jsx("button", { type: "button", onClick: () => handleChange(null), disabled: !isEnabled || widgetConfig['widget-readonly'], className: `px-3 py-1 text-sm ${currentValue === null
12334
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-baseline", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium leading-normal owt-field-label sm:min-w-[150px] sm:pr-4 mb-1 sm:mb-0 sm:pt-0.5", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { className: "flex flex-wrap items-center gap-3", onBlur: onBlur, children: [allowUnset && (jsxRuntimeExports.jsx("button", { type: "button", onClick: () => handleChange(null), disabled: !isEnabled || widgetConfig['widget-readonly'], className: `px-3 py-1 text-sm ${currentValue === null
12319
12335
  ? 'owt-boolean-chip owt-boolean-chip-selected'
12320
12336
  : 'owt-boolean-chip'} ${!isEnabled || widgetConfig['widget-readonly'] ? 'opacity-50 cursor-not-allowed' : ''}`, style: { borderRadius: '15px' }, children: unsetLabel })), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => handleChange(true), disabled: !isEnabled || widgetConfig['widget-readonly'], className: `px-3 py-1 text-sm ${currentValue === true
12321
12337
  ? 'owt-boolean-chip owt-boolean-chip-selected'
@@ -12524,9 +12540,9 @@ const DateInputWidget = ({ config }) => {
12524
12540
  else {
12525
12541
  displayValue = '-';
12526
12542
  }
12527
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] DateDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
12543
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] DateDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
12528
12544
  }
12529
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsx("input", { type: inputType, value: getDisplayValue(), onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, disabled: !isEnabled || widgetConfig['widget-readonly'], placeholder: placeholder, min: inputMethod === 'picker' ? effectiveMinDate : undefined, max: inputMethod === 'picker' ? effectiveMaxDate : undefined, className: owtFieldInputClass({
12545
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsx("input", { type: inputType, value: getDisplayValue(), onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, disabled: !isEnabled || widgetConfig['widget-readonly'], placeholder: placeholder, min: inputMethod === 'picker' ? effectiveMinDate : undefined, max: inputMethod === 'picker' ? effectiveMaxDate : undefined, className: owtFieldInputClass({
12530
12546
  error: showValidationError || showRequiredError,
12531
12547
  disabled: !isEnabled || widgetConfig['widget-readonly'],
12532
12548
  className: 'w-full sm:w-[180px] max-w-full h-[30px] px-3 owt-shadow-sm',
@@ -12905,9 +12921,9 @@ const DateTimeInputWidget = ({ config }) => {
12905
12921
  else {
12906
12922
  displayValue = '-';
12907
12923
  }
12908
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] DateTimeDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
12924
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] DateTimeDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
12909
12925
  }
12910
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsx("input", { type: inputType, value: getDisplayValue(), onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, disabled: !isEnabled || widgetConfig['widget-readonly'], placeholder: placeholder, min: inputMethod === 'picker' ? effectiveMinDateTime : undefined, max: inputMethod === 'picker' ? effectiveMaxDateTime : undefined, className: owtFieldInputClass({
12926
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsx("input", { type: inputType, value: getDisplayValue(), onChange: handleChange, onBlur: handleBlur, onFocus: handleFocus, disabled: !isEnabled || widgetConfig['widget-readonly'], placeholder: placeholder, min: inputMethod === 'picker' ? effectiveMinDateTime : undefined, max: inputMethod === 'picker' ? effectiveMaxDateTime : undefined, className: owtFieldInputClass({
12911
12927
  error: (touched && error.length > 0) || (widgetConfig['widget-required'] && (!value || value === '')),
12912
12928
  disabled: !isEnabled || widgetConfig['widget-readonly'],
12913
12929
  className: 'w-full sm:w-[180px] max-w-full h-[30px] px-3 owt-shadow-sm',
@@ -12925,9 +12941,9 @@ const SelectWidget = ({ config }) => {
12925
12941
  : loading
12926
12942
  ? '-'
12927
12943
  : (value != null && value !== '' ? tSchema(t, String(value)) : '-');
12928
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] SelectDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
12944
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] SelectDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
12929
12945
  }
12930
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("select", {
12946
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("select", {
12931
12947
  // value={value || ''}
12932
12948
  // onChange={(e) => onChange(e.target.value === '' ? undefined : e.target.value)}
12933
12949
  value: value === undefined || value === null ? '' : String(value), onChange: (e) => {
@@ -13004,9 +13020,9 @@ const RadioWidget = ({ config }) => {
13004
13020
  const displayValue = selectedOption
13005
13021
  ? tSchema(t, selectedOption.label)
13006
13022
  : (allowUnset && currentValue === null ? '-' : '');
13007
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] RadioDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
13023
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] RadioDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
13008
13024
  }
13009
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsx("div", { className: layoutConfig.className, style: layoutConfig.style, onBlur: onBlur, children: loading ? (jsxRuntimeExports.jsx("p", { className: "text-sm owt-text-muted", children: t?.('common.loading') })) : (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [allowUnset && (jsxRuntimeExports.jsxs("label", { className: `flex items-center cursor-pointer ${!isEnabled || widgetConfig['widget-readonly'] ? 'opacity-50 cursor-not-allowed' : ''}`, children: [jsxRuntimeExports.jsx("input", { type: "radio", name: widgetConfig['widget-id'], checked: currentValue === null, onChange: handleUnset, disabled: !isEnabled || widgetConfig['widget-readonly'], className: "mr-2 h-4 w-4 owt-field-check" }), jsxRuntimeExports.jsx("span", { className: "text-sm owt-text", children: "-" })] })), processedOptions.map((option) => (jsxRuntimeExports.jsxs("label", { className: `flex items-center cursor-pointer ${!isEnabled || widgetConfig['widget-readonly'] ? 'opacity-50 cursor-not-allowed' : ''}`, children: [jsxRuntimeExports.jsx("input", { type: "radio", name: widgetConfig['widget-id'], value: option.value, checked: currentValue === option.value, onChange: () => handleChange(option.value), disabled: !isEnabled || widgetConfig['widget-readonly'], className: "mr-2 h-4 w-4 owt-field-check" }), jsxRuntimeExports.jsx("span", { className: "text-sm owt-text", children: tSchema(t, option.label) })] }, option.value)))] })) }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
13025
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsx("div", { className: layoutConfig.className, style: layoutConfig.style, onBlur: onBlur, children: loading ? (jsxRuntimeExports.jsx("p", { className: "text-sm owt-text-muted", children: t?.('common.loading') })) : (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [allowUnset && (jsxRuntimeExports.jsxs("label", { className: `flex items-center cursor-pointer ${!isEnabled || widgetConfig['widget-readonly'] ? 'opacity-50 cursor-not-allowed' : ''}`, children: [jsxRuntimeExports.jsx("input", { type: "radio", name: widgetConfig['widget-id'], checked: currentValue === null, onChange: handleUnset, disabled: !isEnabled || widgetConfig['widget-readonly'], className: "mr-2 h-4 w-4 owt-field-check" }), jsxRuntimeExports.jsx("span", { className: "text-sm owt-text", children: "-" })] })), processedOptions.map((option) => (jsxRuntimeExports.jsxs("label", { className: `flex items-center cursor-pointer ${!isEnabled || widgetConfig['widget-readonly'] ? 'opacity-50 cursor-not-allowed' : ''}`, children: [jsxRuntimeExports.jsx("input", { type: "radio", name: widgetConfig['widget-id'], value: option.value, checked: currentValue === option.value, onChange: () => handleChange(option.value), disabled: !isEnabled || widgetConfig['widget-readonly'], className: "mr-2 h-4 w-4 owt-field-check" }), jsxRuntimeExports.jsx("span", { className: "text-sm owt-text", children: tSchema(t, option.label) })] }, option.value)))] })) }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
13010
13026
  };
13011
13027
 
13012
13028
  const CheckboxWidget = ({ config }) => {
@@ -13021,9 +13037,9 @@ const CheckboxWidget = ({ config }) => {
13021
13037
  if (widgetConfig['widget-readonly']) {
13022
13038
  const label = tSchema(t, widgetConfig['widget-label']);
13023
13039
  const displayValue = isChecked ? 'Yes' : 'No';
13024
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] CheckboxDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
13040
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] CheckboxDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
13025
13041
  }
13026
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-baseline", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium leading-normal owt-text md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0 sm:pt-0.5", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("label", { className: "inline-flex cursor-pointer items-baseline gap-2", children: [jsxRuntimeExports.jsx("input", { type: "checkbox", checked: isChecked, onChange: (e) => onChange(e.target.checked), onBlur: onBlur, disabled: !isEnabled || widgetConfig['widget-readonly'], className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check rounded" }), jsxRuntimeExports.jsx("span", { className: "text-base leading-normal owt-text", children: isChecked ? 'Yes' : 'No' })] }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
13042
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-baseline", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium leading-normal owt-field-label md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0 sm:pt-0.5", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("label", { className: "inline-flex cursor-pointer items-baseline gap-2", children: [jsxRuntimeExports.jsx("input", { type: "checkbox", checked: isChecked, onChange: (e) => onChange(e.target.checked), onBlur: onBlur, disabled: !isEnabled || widgetConfig['widget-readonly'], className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check rounded" }), jsxRuntimeExports.jsx("span", { className: "text-base leading-normal owt-text", children: isChecked ? 'Yes' : 'No' })] }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
13027
13043
  }
13028
13044
  const processedOptions = useMemo(() => {
13029
13045
  let options = [...dataSourceOptions];
@@ -13080,9 +13096,9 @@ const CheckboxWidget = ({ config }) => {
13080
13096
  const displayValue = selectedOptions.length > 0
13081
13097
  ? selectedOptions.map(opt => tSchema(t, opt.label)).join(', ')
13082
13098
  : '-';
13083
- return (jsxRuntimeExports.jsxs("div", { className: "mb-3 CheckboxDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-sm owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
13099
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-3 CheckboxDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-sm owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
13084
13100
  }
13085
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-baseline", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium leading-normal owt-text md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0 sm:pt-0.5", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsx("div", { className: layoutConfig.className, style: layoutConfig.style, onBlur: onBlur, children: loading ? (jsxRuntimeExports.jsx("p", { className: "text-sm owt-text-muted", children: t?.('common.loading') })) : (processedOptions.map((option) => (jsxRuntimeExports.jsxs("label", { className: `inline-flex cursor-pointer items-baseline gap-2 ${!isEnabled || widgetConfig['widget-readonly'] ? 'opacity-50 cursor-not-allowed' : ''}`, children: [jsxRuntimeExports.jsx("input", { type: "checkbox", value: option.value, checked: selectedValues.includes(option.value), onChange: (e) => handleCheckboxChange(option.value, e.target.checked), disabled: !isEnabled || widgetConfig['widget-readonly'], className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check rounded" }), jsxRuntimeExports.jsx("span", { className: "text-base leading-normal owt-text", children: tSchema(t, option.label) })] }, option.value)))) }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
13101
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-baseline", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium leading-normal owt-field-label md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0 sm:pt-0.5", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsx("div", { className: layoutConfig.className, style: layoutConfig.style, onBlur: onBlur, children: loading ? (jsxRuntimeExports.jsx("p", { className: "text-sm owt-text-muted", children: t?.('common.loading') })) : (processedOptions.map((option) => (jsxRuntimeExports.jsxs("label", { className: `inline-flex cursor-pointer items-baseline gap-2 ${!isEnabled || widgetConfig['widget-readonly'] ? 'opacity-50 cursor-not-allowed' : ''}`, children: [jsxRuntimeExports.jsx("input", { type: "checkbox", value: option.value, checked: selectedValues.includes(option.value), onChange: (e) => handleCheckboxChange(option.value, e.target.checked), disabled: !isEnabled || widgetConfig['widget-readonly'], className: "relative top-[0.2em] h-4 w-4 shrink-0 owt-field-check rounded" }), jsxRuntimeExports.jsx("span", { className: "text-base leading-normal owt-text", children: tSchema(t, option.label) })] }, option.value)))) }), touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }));
13086
13102
  };
13087
13103
 
13088
13104
  const PhoneInputWidget = ({ config }) => {
@@ -13093,9 +13109,9 @@ const PhoneInputWidget = ({ config }) => {
13093
13109
  : (value || '');
13094
13110
  if (widgetConfig['widget-readonly']) {
13095
13111
  const label = tSchema(t, widgetConfig['widget-label']);
13096
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] PhoneDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue || ''), children: displayValue || '-' }) })] }));
13112
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] PhoneDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue || ''), children: displayValue || '-' }) })] }));
13097
13113
  }
13098
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsx("input", { type: "tel", value: displayValue, onChange: (e) => onChange(e.target.value), onBlur: onBlur, disabled: !isEnabled || widgetConfig['widget-readonly'], placeholder: tSchema(t, widgetConfig['widget-data-placeholder']), className: owtFieldInputClass({
13114
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: tSchema(t, widgetConfig['widget-label']), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsx("input", { type: "tel", value: displayValue, onChange: (e) => onChange(e.target.value), onBlur: onBlur, disabled: !isEnabled || widgetConfig['widget-readonly'], placeholder: tSchema(t, widgetConfig['widget-data-placeholder']), className: owtFieldInputClass({
13099
13115
  error: (touched && error.length > 0) || (widgetConfig['widget-required'] && (!value || value === '')),
13100
13116
  disabled: !isEnabled || widgetConfig['widget-readonly'],
13101
13117
  className: 'w-full sm:w-[180px] max-w-full h-[30px] px-3 owt-shadow-sm',
@@ -13133,7 +13149,7 @@ const DisplayWidget = ({ config }) => {
13133
13149
  if (!label || label.trim() === '') {
13134
13150
  return (jsxRuntimeExports.jsx("div", { className: "DisplayFieldWidget mb-3 min-w-0 w-full overflow-hidden text-ellipsis whitespace-nowrap text-base owt-text", title: String(displayValue ?? ''), children: displayValue }));
13135
13151
  }
13136
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] DisplayFieldWidget flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] }), jsxRuntimeExports.jsx("div", { className: "flex-1 min-w-0", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
13152
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] DisplayFieldWidget flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] }), jsxRuntimeExports.jsx("div", { className: "flex-1 min-w-0", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", title: String(displayValue ?? ''), children: displayValue }) })] }));
13137
13153
  };
13138
13154
 
13139
13155
  const getDateColumnConstraintError = (column, cellValue, rowValues, resolveSchemaLabel) => {
@@ -13419,6 +13435,13 @@ const TableWidget = ({ config }) => {
13419
13435
  if (!rowData) {
13420
13436
  return false;
13421
13437
  }
13438
+ const hasValue = columns.some((col) => {
13439
+ const value = rowData[col['column-key']];
13440
+ return value !== null && value !== undefined && value !== '';
13441
+ });
13442
+ if (!hasValue) {
13443
+ return false;
13444
+ }
13422
13445
  return isTableRowDataValid(rowData, columns, isReadonly, resolveSchemaLabel);
13423
13446
  }, [resolveNewRowData, columns, isReadonly, resolveSchemaLabel]);
13424
13447
  const showConfirmation = useCallback((message, onConfirm, onCancel) => {
@@ -14243,6 +14266,8 @@ const DialogTableWidget = ({ config }) => {
14243
14266
  }
14244
14267
  const cleaned = finalizeDialogRowPayload(payload);
14245
14268
  if (dialogMode === 'add') {
14269
+ if (Object.keys(cleaned).length === 0)
14270
+ return;
14246
14271
  const savedRow = { ...cleaned, edit_action: 'ADD' };
14247
14272
  onChange([...rows, savedRow]);
14248
14273
  closeDialog();
@@ -14497,7 +14522,6 @@ const ProfileWidget = ({ config }) => {
14497
14522
  }
14498
14523
  const format = widgetConfig['widget-data-format'] || {};
14499
14524
  const imageSize = format.imageSize || 80;
14500
- const nameColor = format.nameColor || 'var(--owt-color-primary-dark)';
14501
14525
  const showIdLabel = format.showIdLabel !== false;
14502
14526
  const widgetClassId = `profile-widget-${config['widget-id']}`;
14503
14527
  return (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("style", { children: `
@@ -14555,7 +14579,7 @@ const ProfileWidget = ({ config }) => {
14555
14579
  .${widgetClassId} .profile-name {
14556
14580
  font-size: 1.25rem;
14557
14581
  font-weight: 600;
14558
- color: ${nameColor};
14582
+ color: var(--owt-color-primary-dark);
14559
14583
  line-height: 1.4;
14560
14584
  word-wrap: break-word;
14561
14585
  max-width: 100%;
@@ -14585,7 +14609,7 @@ const ProfileWidget = ({ config }) => {
14585
14609
  if (placeholder) {
14586
14610
  placeholder.style.display = 'flex';
14587
14611
  }
14588
- } })) : null, jsxRuntimeExports.jsx("div", { className: "profile-avatar-placeholder", style: { display: imageUrl ? 'none' : 'flex' }, children: jsxRuntimeExports.jsx("img", { src: img$d, alt: t?.('profile.profilePlaceholderAlt') ?? 'Profile Placeholder' }) })] }), jsxRuntimeExports.jsxs("div", { className: "profile-info", children: [displayName && (jsxRuntimeExports.jsx("div", { className: "profile-name", children: displayName })), idValue && (jsxRuntimeExports.jsxs("div", { className: "profile-id", children: [showIdLabel && (jsxRuntimeExports.jsx("span", { className: "profile-id-label", children: t?.('profile.idLabel') ?? 'ID :' })), jsxRuntimeExports.jsx("span", { className: "profile-id-value", children: idValue })] }))] })] })] }));
14612
+ } })) : null, jsxRuntimeExports.jsx("div", { className: "profile-avatar-placeholder", style: { display: imageUrl ? 'none' : 'flex' }, children: jsxRuntimeExports.jsx("img", { src: img$c, alt: t?.('profile.profilePlaceholderAlt') ?? 'Profile Placeholder' }) })] }), jsxRuntimeExports.jsxs("div", { className: "profile-info", children: [displayName && (jsxRuntimeExports.jsx("div", { className: "profile-name", children: displayName })), idValue && (jsxRuntimeExports.jsxs("div", { className: "profile-id", children: [showIdLabel && (jsxRuntimeExports.jsx("span", { className: "profile-id-label", children: t?.('profile.idLabel') ?? 'ID :' })), jsxRuntimeExports.jsx("span", { className: "profile-id-value", children: idValue })] }))] })] })] }));
14589
14613
  };
14590
14614
 
14591
14615
  const TextAreaWidget = ({ config }) => {
@@ -14632,7 +14656,7 @@ const TextAreaWidget = ({ config }) => {
14632
14656
  const errorMessage = hasError ? error[0] : '';
14633
14657
  if (isReadonly) {
14634
14658
  const displayValue = getStringValue() || '-';
14635
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] TextAreaDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { title: String(displayValue), className: "text-base owt-text font-medium overflow-y-auto whitespace-pre-wrap break-words", style: {
14659
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] TextAreaDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [label && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { title: String(displayValue), className: "text-base owt-text font-medium overflow-y-auto whitespace-pre-wrap break-words", style: {
14636
14660
  fontFamily: 'Roboto, sans-serif',
14637
14661
  height: '56px',
14638
14662
  minHeight: '56px',
@@ -14643,7 +14667,7 @@ const TextAreaWidget = ({ config }) => {
14643
14667
  border: 'none',
14644
14668
  }, children: displayValue }) })] }));
14645
14669
  }
14646
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: label, required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { style: { position: 'relative' }, children: [jsxRuntimeExports.jsx("textarea", { id: widgetConfig['widget-id'], rows: rows, value: getStringValue(), onChange: handleChange, onBlur: onBlur, disabled: !isEnabled, placeholder: placeholder, className: owtFieldInputClass({
14670
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: label, required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntimeExports.jsxs("div", { style: { position: 'relative' }, children: [jsxRuntimeExports.jsx("textarea", { id: widgetConfig['widget-id'], rows: rows, value: getStringValue(), onChange: handleChange, onBlur: onBlur, disabled: !isEnabled, placeholder: placeholder, className: owtFieldInputClass({
14647
14671
  error: hasError,
14648
14672
  disabled: !isEnabled,
14649
14673
  className: 'w-full px-3 py-2 owt-shadow-sm',
@@ -14661,11 +14685,6 @@ const TextAreaWidget = ({ config }) => {
14661
14685
  }, children: charCounterText }))] }), hasError && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: errorMessage }))] })] }) }));
14662
14686
  };
14663
14687
 
14664
- const DEFAULT_STATUS_COLORS = {
14665
- active: 'var(--owt-color-success)',
14666
- inactive: 'var(--owt-color-warning)',
14667
- archived: 'var(--owt-color-text-muted)',
14668
- };
14669
14688
  const DEFAULT_LABELS = {
14670
14689
  functionalId: 'Functional Record ID',
14671
14690
  status: 'Record Status',
@@ -14872,11 +14891,6 @@ const HeaderSectionWidget = ({ config }) => {
14872
14891
  }, [completionScoreRaw, idealScoreRaw]);
14873
14892
  const format = (widgetConfig['widget-data-format'] || {});
14874
14893
  const imageSize = format.imageSize || 120;
14875
- const nameColor = format.nameColor || 'var(--owt-color-primary-dark)';
14876
- const statusColors = {
14877
- ...DEFAULT_STATUS_COLORS,
14878
- ...(format.statusColors || {}),
14879
- };
14880
14894
  const updateFieldValue = useCallback((fieldKey, newValue) => {
14881
14895
  const path = paths[fieldKey];
14882
14896
  if (!path)
@@ -14890,7 +14904,6 @@ const HeaderSectionWidget = ({ config }) => {
14890
14904
  const opt = statusOptions.find((o) => String(o.value).toLowerCase() === String(statusValue).toLowerCase());
14891
14905
  return opt ? opt.label : String(statusValue);
14892
14906
  }, [statusValue, statusOptions]);
14893
- const statusColor = statusColors[String(statusValue).toLowerCase()] || 'var(--owt-color-text-muted)';
14894
14907
  const fileInputRef = useRef(null);
14895
14908
  const handleImageUpload = useCallback(async (e) => {
14896
14909
  const file = e.target.files?.[0];
@@ -15084,7 +15097,7 @@ const HeaderSectionWidget = ({ config }) => {
15084
15097
  .${cls} .hdr-name {
15085
15098
  font-size: 1.25rem;
15086
15099
  font-weight: 600;
15087
- color: ${nameColor};
15100
+ color: var(--owt-color-primary-dark);
15088
15101
  line-height: 1.4;
15089
15102
  word-wrap: break-word;
15090
15103
  }
@@ -15124,12 +15137,25 @@ const HeaderSectionWidget = ({ config }) => {
15124
15137
  font-size: 0.75rem;
15125
15138
  font-weight: 600;
15126
15139
  color: var(--owt-color-bg);
15140
+ background-color: var(--owt-color-text-muted);
15127
15141
  max-width: 100%;
15128
15142
  overflow: hidden;
15129
15143
  text-overflow: ellipsis;
15130
15144
  white-space: nowrap;
15131
15145
  }
15132
15146
 
15147
+ .${cls} .hdr-status-badge[data-status="active"] {
15148
+ background-color: var(--owt-color-success);
15149
+ }
15150
+
15151
+ .${cls} .hdr-status-badge[data-status="inactive"] {
15152
+ background-color: var(--owt-color-warning);
15153
+ }
15154
+
15155
+ .${cls} .hdr-status-badge[data-status="archived"] {
15156
+ background-color: var(--owt-color-text-muted);
15157
+ }
15158
+
15133
15159
  .${cls} .hdr-meta-row {
15134
15160
  display: flex;
15135
15161
  align-items: baseline;
@@ -15219,7 +15245,7 @@ const HeaderSectionWidget = ({ config }) => {
15219
15245
  .parentElement?.querySelector('.hdr-avatar-placeholder');
15220
15246
  if (placeholder)
15221
15247
  placeholder.style.display = 'flex';
15222
- } })) : null, jsxRuntimeExports.jsx("div", { className: "hdr-avatar-placeholder", style: { display: displayImageUrl ? 'none' : 'flex' }, children: jsxRuntimeExports.jsx("img", { src: img$d, alt: "Profile Placeholder" }) }), !isReadonly && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs("div", { className: "hdr-avatar-overlay", children: [jsxRuntimeExports.jsxs("button", { type: "button", className: "hdr-avatar-action", onClick: () => fileInputRef.current?.click(), children: [jsxRuntimeExports.jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }), jsxRuntimeExports.jsx("polyline", { points: "17 8 12 3 7 8" }), jsxRuntimeExports.jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })] }), "Upload"] }), jsxRuntimeExports.jsxs("button", { type: "button", className: "hdr-avatar-action hdr-avatar-action--delete", onClick: handleImageDelete, children: [jsxRuntimeExports.jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("polyline", { points: "3 6 5 6 21 6" }), jsxRuntimeExports.jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })] }), "Delete"] })] }), jsxRuntimeExports.jsx("input", { ref: fileInputRef, type: "file", accept: "image/*", style: { display: 'none' }, onChange: handleImageUpload })] }))] }), jsxRuntimeExports.jsxs("div", { className: "hdr-info", children: [displayName && jsxRuntimeExports.jsx("div", { className: "hdr-name", children: displayName }), jsxRuntimeExports.jsxs("div", { className: "hdr-field-row", children: [jsxRuntimeExports.jsxs("span", { className: "hdr-field-label", title: `${getLabel('functionalId')} :`, children: [getLabel('functionalId'), " :"] }), jsxRuntimeExports.jsx("span", { className: "hdr-field-value", title: functionalId || '-', children: functionalId || '-' })] }), jsxRuntimeExports.jsxs("div", { className: "hdr-field-row", children: [jsxRuntimeExports.jsx("span", { className: "hdr-field-label", title: getLabel('status'), children: getLabel('status') }), isReadonly ? (statusLabel ? (jsxRuntimeExports.jsx("span", { className: "hdr-status-badge", style: { backgroundColor: statusColor }, title: statusLabel, children: statusLabel })) : (jsxRuntimeExports.jsx("span", { className: "hdr-field-value", title: "-", children: "-" }))) : (jsxRuntimeExports.jsxs("select", { className: "hdr-select", value: statusValue, onChange: (e) => updateFieldValue('status', e.target.value), children: [jsxRuntimeExports.jsx("option", { value: "", children: getLabel('select') }), statusOptions.map((opt) => (jsxRuntimeExports.jsx("option", { value: opt.value, children: opt.label }, opt.value)))] }))] }), jsxRuntimeExports.jsxs("div", { className: "hdr-field-row", children: [jsxRuntimeExports.jsxs("span", { className: "hdr-field-label", title: `${getLabel('statusReason')} :`, children: [getLabel('statusReason'), " :"] }), isReadonly ? (jsxRuntimeExports.jsx("span", { className: "hdr-field-value", title: statusReason || '-', children: statusReason || '-' })) : (jsxRuntimeExports.jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [jsxRuntimeExports.jsx("input", { type: "text", className: `hdr-input ${(!isReadonly && (showReasonRequired || isReasonMissing) && isReasonMissing) ? 'hdr-input--error' : ''}`, value: statusReason, placeholder: getLabel('enterReason'), required: isStatusChanged, "aria-required": isStatusChanged, "aria-invalid": !isReadonly && (showReasonRequired || isReasonMissing) && isReasonMissing, onBlur: () => {
15248
+ } })) : null, jsxRuntimeExports.jsx("div", { className: "hdr-avatar-placeholder", style: { display: displayImageUrl ? 'none' : 'flex' }, children: jsxRuntimeExports.jsx("img", { src: img$c, alt: "Profile Placeholder" }) }), !isReadonly && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsxs("div", { className: "hdr-avatar-overlay", children: [jsxRuntimeExports.jsxs("button", { type: "button", className: "hdr-avatar-action", onClick: () => fileInputRef.current?.click(), children: [jsxRuntimeExports.jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }), jsxRuntimeExports.jsx("polyline", { points: "17 8 12 3 7 8" }), jsxRuntimeExports.jsx("line", { x1: "12", y1: "3", x2: "12", y2: "15" })] }), "Upload"] }), jsxRuntimeExports.jsxs("button", { type: "button", className: "hdr-avatar-action hdr-avatar-action--delete", onClick: handleImageDelete, children: [jsxRuntimeExports.jsxs("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [jsxRuntimeExports.jsx("polyline", { points: "3 6 5 6 21 6" }), jsxRuntimeExports.jsx("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })] }), "Delete"] })] }), jsxRuntimeExports.jsx("input", { ref: fileInputRef, type: "file", accept: "image/*", style: { display: 'none' }, onChange: handleImageUpload })] }))] }), jsxRuntimeExports.jsxs("div", { className: "hdr-info", children: [displayName && jsxRuntimeExports.jsx("div", { className: "hdr-name", children: displayName }), jsxRuntimeExports.jsxs("div", { className: "hdr-field-row", children: [jsxRuntimeExports.jsxs("span", { className: "hdr-field-label", title: `${getLabel('functionalId')} :`, children: [getLabel('functionalId'), " :"] }), jsxRuntimeExports.jsx("span", { className: "hdr-field-value", title: functionalId || '-', children: functionalId || '-' })] }), jsxRuntimeExports.jsxs("div", { className: "hdr-field-row", children: [jsxRuntimeExports.jsx("span", { className: "hdr-field-label", title: getLabel('status'), children: getLabel('status') }), isReadonly ? (statusLabel ? (jsxRuntimeExports.jsx("span", { className: "hdr-status-badge", "data-status": String(statusValue).toLowerCase(), title: statusLabel, children: statusLabel })) : (jsxRuntimeExports.jsx("span", { className: "hdr-field-value", title: "-", children: "-" }))) : (jsxRuntimeExports.jsxs("select", { className: "hdr-select", value: statusValue, onChange: (e) => updateFieldValue('status', e.target.value), children: [jsxRuntimeExports.jsx("option", { value: "", children: getLabel('select') }), statusOptions.map((opt) => (jsxRuntimeExports.jsx("option", { value: opt.value, children: opt.label }, opt.value)))] }))] }), jsxRuntimeExports.jsxs("div", { className: "hdr-field-row", children: [jsxRuntimeExports.jsxs("span", { className: "hdr-field-label", title: `${getLabel('statusReason')} :`, children: [getLabel('statusReason'), " :"] }), isReadonly ? (jsxRuntimeExports.jsx("span", { className: "hdr-field-value", title: statusReason || '-', children: statusReason || '-' })) : (jsxRuntimeExports.jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 4 }, children: [jsxRuntimeExports.jsx("input", { type: "text", className: `hdr-input ${(!isReadonly && (showReasonRequired || isReasonMissing) && isReasonMissing) ? 'hdr-input--error' : ''}`, value: statusReason, placeholder: getLabel('enterReason'), required: isStatusChanged, "aria-required": isStatusChanged, "aria-invalid": !isReadonly && (showReasonRequired || isReasonMissing) && isReasonMissing, onBlur: () => {
15223
15249
  if (isReasonMissing)
15224
15250
  setShowReasonRequired(true);
15225
15251
  }, onChange: (e) => {
@@ -15534,6 +15560,7 @@ function unwrapPayload(response) {
15534
15560
  }
15535
15561
  const IdAuthenticationWidget = ({ config, schemaData: propSchemaData }) => {
15536
15562
  const { dataSourceRequestHandler, schemaData: ctxSchemaData, t } = useWidgetContext();
15563
+ const themeRoot = useOwtThemeRootProps();
15537
15564
  const values = useSelector((state) => state.widget.values);
15538
15565
  const schemaData = (propSchemaData || ctxSchemaData || {});
15539
15566
  const widgetId = config['widget-id'];
@@ -15827,7 +15854,7 @@ const IdAuthenticationWidget = ({ config, schemaData: propSchemaData }) => {
15827
15854
  font-size: 14px;
15828
15855
  font-weight: 500;
15829
15856
  color: var(--owt-color-text);
15830
- background: transparent;
15857
+ background: var(--owt-color-bg);
15831
15858
  border: none;
15832
15859
  border-radius: 0;
15833
15860
  padding: 0;
@@ -15841,8 +15868,8 @@ const IdAuthenticationWidget = ({ config, schemaData: propSchemaData }) => {
15841
15868
  padding: 8px 24px;
15842
15869
  line-height: 1.5;
15843
15870
  border-radius: var(--owt-btn-border-radius);
15844
- border: 1px solid var(--owt-color-primary-accent);
15845
- background-color: var(--owt-color-primary-accent);
15871
+ border: 1px solid var(--owt-btn-primary-border);
15872
+ background-color: var(--owt-color-primary);
15846
15873
  color: var(--owt-color-bg);
15847
15874
  font-family: Roboto, sans-serif;
15848
15875
  cursor: pointer;
@@ -15856,7 +15883,7 @@ const IdAuthenticationWidget = ({ config, schemaData: propSchemaData }) => {
15856
15883
 
15857
15884
  .${cls} .auth-error {
15858
15885
  font-size: 12px;
15859
- color: var(--owt-color-danger);
15886
+ color: var(--owt-widget-error-color);
15860
15887
  font-weight: 700;
15861
15888
  line-height: 1.3;
15862
15889
  text-align: left;
@@ -15934,7 +15961,7 @@ const IdAuthenticationWidget = ({ config, schemaData: propSchemaData }) => {
15934
15961
  max-width: none;
15935
15962
  }
15936
15963
  }
15937
- ` }), jsxRuntimeExports.jsxs("div", { className: cls, children: [overlayUrl ? (jsxRuntimeExports.jsx("div", { className: "overlay-backdrop", role: "dialog", "aria-modal": "true", "aria-label": t?.('idAuth.overlayAria') ?? 'Authentication', onClick: (e) => {
15964
+ ` }), jsxRuntimeExports.jsxs("div", { className: `${cls} ${themeRoot.className}`, style: themeRoot.style, children: [overlayUrl ? (jsxRuntimeExports.jsx("div", { className: "overlay-backdrop", role: "dialog", "aria-modal": "true", "aria-label": t?.('idAuth.overlayAria') ?? 'Authentication', onClick: (e) => {
15938
15965
  if (e.target === e.currentTarget) {
15939
15966
  setOverlayUrl(null);
15940
15967
  emitHostEvent({ type: 'overlay_closed' });
@@ -16003,6 +16030,7 @@ const RecordDisplayPanel = ({ row, widgetIdPrefix, className = '', isEditMode =
16003
16030
  min-width: 0 !important;
16004
16031
  overflow: hidden !important;
16005
16032
  }
16033
+ .register-lookup-record-panel .DisplayFieldWidget > .text-base.owt-field-label,
16006
16034
  .register-lookup-record-panel .DisplayFieldWidget > .text-base.owt-text-muted {
16007
16035
  width: 50% !important;
16008
16036
  min-width: 50% !important;
@@ -16244,7 +16272,7 @@ const RegisterLookupWidget = ({ config }) => {
16244
16272
  error: hasError,
16245
16273
  disabled: !isEnabled,
16246
16274
  className: 'flex items-center gap-2 w-full sm:w-[180px] max-w-full px-3 h-[30px] text-sm cursor-pointer',
16247
- }), children: [jsxRuntimeExports.jsx("img", { src: img$c, alt: "", className: "w-4 h-4 opacity-50 flex-shrink-0" }), jsxRuntimeExports.jsx("span", { className: "min-w-0 truncate", children: actionLabel }), isRequired && jsxRuntimeExports.jsx("span", { className: "shrink-0 owt-field-required", children: "*" })] }), touched && error.length > 0 && jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] })] })) : null, !isReadonly && isOpen && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("div", { className: "fixed inset-0 z-50", style: { backgroundColor: 'var(--owt-color-overlay)' }, onClick: () => { setIsOpen(false); onBlur(); } }), jsxRuntimeExports.jsxs("div", { className: `${themeRoot.className} flex flex-col overflow-hidden`, style: {
16275
+ }), children: [jsxRuntimeExports.jsx("img", { src: img$b, alt: "", className: "w-4 h-4 opacity-50 flex-shrink-0" }), jsxRuntimeExports.jsx("span", { className: "min-w-0 truncate", children: actionLabel }), isRequired && jsxRuntimeExports.jsx("span", { className: "shrink-0 owt-field-required", children: "*" })] }), touched && error.length > 0 && jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] })] })) : null, !isReadonly && isOpen && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("div", { className: "fixed inset-0 z-50", style: { backgroundColor: 'var(--owt-color-overlay)' }, onClick: () => { setIsOpen(false); onBlur(); } }), jsxRuntimeExports.jsxs("div", { className: `${themeRoot.className} flex flex-col overflow-hidden`, style: {
16248
16276
  ...themeRoot.style,
16249
16277
  position: 'fixed',
16250
16278
  top: modalPos.y,
@@ -16264,14 +16292,14 @@ const RegisterLookupWidget = ({ config }) => {
16264
16292
  e.preventDefault();
16265
16293
  isDragging.current = true;
16266
16294
  dragOrigin.current = { mouseX: e.clientX, mouseY: e.clientY, posX: modalPos.x, posY: modalPos.y };
16267
- }, className: "flex items-center justify-between px-5 py-4 flex-shrink-0 select-none border-b owt-border cursor-grab", children: [jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold owt-text", children: t?.('common.selectTitle', { label, defaultValue: `Select ${label}` }) }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => { setIsOpen(false); onBlur(); }, onMouseDown: (e) => e.stopPropagation(), className: "p-0 border-0 bg-transparent cursor-pointer", "aria-label": t?.('common.close', { defaultValue: 'Close' }), children: jsxRuntimeExports.jsx("img", { src: img$b, alt: "", className: "w-5 h-5 opacity-60" }) })] }), jsxRuntimeExports.jsx("div", { className: "px-5 py-3 flex-shrink-0 border-b owt-border", children: jsxRuntimeExports.jsxs("div", { className: owtFieldInputClass({ className: 'flex items-center gap-2 px-3 h-[30px] rounded-[10px]' }), children: [jsxRuntimeExports.jsx("input", { ref: searchInputRef, type: "text", value: searchText, onChange: (e) => setSearchText(e.target.value), onKeyDown: (e) => {
16295
+ }, className: "flex items-center justify-between px-5 py-4 flex-shrink-0 select-none border-b owt-border cursor-grab", children: [jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold owt-text", children: t?.('common.selectTitle', { label, defaultValue: `Select ${label}` }) }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => { setIsOpen(false); onBlur(); }, onMouseDown: (e) => e.stopPropagation(), className: "p-0 border-0 bg-transparent cursor-pointer", "aria-label": t?.('common.close', { defaultValue: 'Close' }), children: jsxRuntimeExports.jsx("img", { src: img$a, alt: "", className: "w-5 h-5 opacity-60" }) })] }), jsxRuntimeExports.jsx("div", { className: "px-5 py-3 flex-shrink-0 border-b owt-border", children: jsxRuntimeExports.jsxs("div", { className: owtFieldInputClass({ className: 'flex items-center gap-2 px-3 h-[30px] rounded-[10px]' }), children: [jsxRuntimeExports.jsx("input", { ref: searchInputRef, type: "text", value: searchText, onChange: (e) => setSearchText(e.target.value), onKeyDown: (e) => {
16268
16296
  if (e.key === 'Enter') {
16269
16297
  e.preventDefault();
16270
16298
  runSearch(searchText, 1);
16271
16299
  }
16272
- }, placeholder: searchPlaceholder, className: "flex-1 outline-none text-sm owt-text bg-transparent" }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => runSearch(searchText, 1), "aria-label": t?.('common.search', { defaultValue: 'Search' }), className: "flex-shrink-0 p-0 border-0 bg-transparent cursor-pointer", children: jsxRuntimeExports.jsx("img", { src: img$c, alt: "", className: "w-4 h-4 opacity-40" }) })] }) }), jsxRuntimeExports.jsx("div", { className: "overflow-auto flex-1", children: searchResults.length === 0 ? (jsxRuntimeExports.jsx("p", { className: "text-center text-sm owt-text-muted py-10", children: searchText
16300
+ }, placeholder: searchPlaceholder, className: "flex-1 outline-none text-sm owt-text bg-transparent" }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => runSearch(searchText, 1), "aria-label": t?.('common.search', { defaultValue: 'Search' }), className: "flex-shrink-0 p-0 border-0 bg-transparent cursor-pointer", children: jsxRuntimeExports.jsx("img", { src: img$b, alt: "", className: "w-4 h-4 opacity-40" }) })] }) }), jsxRuntimeExports.jsx("div", { className: "overflow-auto flex-1", children: searchResults.length === 0 ? (jsxRuntimeExports.jsx("p", { className: "text-center text-sm owt-text-muted py-10", children: searchText
16273
16301
  ? t?.('common.noResults', { defaultValue: 'No results found' })
16274
- : t?.('common.searchHint', { defaultValue: 'Type and press Enter or click search' }) })) : (jsxRuntimeExports.jsx(ResultsTable, { rows: searchResults, selectedRowKey: pendingRow?.internal_record_id ?? null, onRowClick: setPendingRow, onRowDoubleClick: applySelection })) }), jsxRuntimeExports.jsxs("div", { className: `flex-shrink-0 flex flex-wrap items-center gap-3 px-5 py-3 border-t owt-border ${totalCount !== null ? 'justify-between' : 'justify-end'}`, children: [totalCount !== null && (jsxRuntimeExports.jsx(PaginationFooter, { embedded: true, currentPage: currentPage, totalPages: totalPages, totalCount: totalCount, pageSize: pageSize, onPageChange: (page) => runSearch(searchText, page), onPrev: () => currentPage > 1 && runSearch(searchText, currentPage - 1), onNext: () => currentPage < totalPages && runSearch(searchText, currentPage + 1) })), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => pendingRow && applySelection(pendingRow), disabled: !pendingRow, className: "px-4 h-9 text-sm font-medium rounded-[10px] text-white disabled:opacity-40 disabled:cursor-not-allowed flex-shrink-0", style: { backgroundColor: 'var(--owt-color-info)' }, children: selectRecordLabel })] })] })] }))] }));
16302
+ : t?.('common.searchHint', { defaultValue: 'Type and press Enter or click search' }) })) : (jsxRuntimeExports.jsx(ResultsTable, { rows: searchResults, selectedRowKey: pendingRow?.internal_record_id ?? null, onRowClick: setPendingRow, onRowDoubleClick: applySelection })) }), jsxRuntimeExports.jsxs("div", { className: `flex-shrink-0 flex flex-wrap items-center gap-3 px-5 py-3 border-t owt-border ${totalCount !== null ? 'justify-between' : 'justify-end'}`, children: [totalCount !== null && (jsxRuntimeExports.jsx(PaginationFooter, { embedded: true, currentPage: currentPage, totalPages: totalPages, totalCount: totalCount, pageSize: pageSize, onPageChange: (page) => runSearch(searchText, page), onPrev: () => currentPage > 1 && runSearch(searchText, currentPage - 1), onNext: () => currentPage < totalPages && runSearch(searchText, currentPage + 1) })), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => pendingRow && applySelection(pendingRow), disabled: !pendingRow, className: "px-4 h-9 text-sm font-medium rounded-[10px] disabled:opacity-40 disabled:cursor-not-allowed flex-shrink-0", style: { backgroundColor: 'var(--owt-color-info)', color: 'var(--owt-color-bg)' }, children: selectRecordLabel })] })] })] }))] }));
16275
16303
  };
16276
16304
 
16277
16305
  const parentLookupRecordCache = new Map();
@@ -16553,12 +16581,12 @@ const ParentLookupWidget = ({ config, value: valueProp, error: errorProp, touche
16553
16581
  className: `w-full sm:w-[180px] max-w-full h-[30px] px-3 owt-shadow-sm ${!isEnabled || isReadonly ? '' : 'cursor-pointer'}`,
16554
16582
  }), style: { borderRadius: '10px' }, title: hasValue ? displayName : placeholder, children: [jsxRuntimeExports.jsx("option", { value: "", children: placeholder }), hasValue && jsxRuntimeExports.jsx("option", { value: "__selected__", children: displayName })] }));
16555
16583
  if (isReadonly && !isCompact) {
16556
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] flex flex-col sm:flex-row sm:items-start", children: [rawLabel && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1 text-base owt-text font-medium", children: hasValue ? displayName : '-' })] }));
16584
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] flex flex-col sm:flex-row sm:items-start", children: [rawLabel && (jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: label, children: [label, ":"] })), jsxRuntimeExports.jsx("div", { className: "flex-1 text-base owt-text font-medium", children: hasValue ? displayName : '-' })] }));
16557
16585
  }
16558
16586
  if (isReadonly && isCompact) {
16559
16587
  return (jsxRuntimeExports.jsx("span", { className: "text-sm truncate block", style: { color: 'inherit' }, children: hasValue ? displayName : '-' }));
16560
16588
  }
16561
- return (jsxRuntimeExports.jsxs("div", { className: isCompact ? 'table-cell-field w-full' : 'mb-[10px]', children: [isCompact ? (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [selectTrigger, jsxRuntimeExports.jsx("p", { className: "table-cell-field-error", "aria-hidden": "true", children: '\u00a0' })] })) : (jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [rawLabel && (jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: rawLabel, required: isRequired })), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [selectTrigger, touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] })), isOpen && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("div", { className: "fixed inset-0 z-[100]", style: { backgroundColor: 'var(--owt-color-overlay)' }, onClick: () => {
16589
+ return (jsxRuntimeExports.jsxs("div", { className: isCompact ? 'table-cell-field w-full' : 'mb-[10px]', children: [isCompact ? (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [selectTrigger, jsxRuntimeExports.jsx("p", { className: "table-cell-field-error", "aria-hidden": "true", children: '\u00a0' })] })) : (jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [rawLabel && (jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: rawLabel, required: isRequired })), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [selectTrigger, touched && error.length > 0 && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] })), isOpen && (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("div", { className: "fixed inset-0 z-[100]", style: { backgroundColor: 'var(--owt-color-overlay)' }, onClick: () => {
16562
16590
  setIsOpen(false);
16563
16591
  onBlur();
16564
16592
  } }), jsxRuntimeExports.jsxs("div", { className: `${themeRoot.className} flex flex-col overflow-hidden`, style: {
@@ -16589,12 +16617,12 @@ const ParentLookupWidget = ({ config, value: valueProp, error: errorProp, touche
16589
16617
  }, className: "flex items-center justify-between px-5 py-4 flex-shrink-0 select-none border-b owt-border cursor-grab", children: [jsxRuntimeExports.jsx("h3", { className: "text-lg font-semibold owt-text", children: t?.('common.selectTitle', { label, defaultValue: `Select ${label}` }) }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => {
16590
16618
  setIsOpen(false);
16591
16619
  onBlur();
16592
- }, onMouseDown: (e) => e.stopPropagation(), className: "p-0 border-0 bg-transparent cursor-pointer", "aria-label": t?.('common.close', { defaultValue: 'Close' }), children: jsxRuntimeExports.jsx("img", { src: img$b, alt: "", className: "w-5 h-5 opacity-60" }) })] }), jsxRuntimeExports.jsx("div", { className: "px-5 py-3 flex-shrink-0 border-b owt-border", children: jsxRuntimeExports.jsxs("div", { className: owtFieldInputClass({ className: 'flex items-center gap-2 px-3 h-[30px] rounded-[10px]' }), children: [jsxRuntimeExports.jsx("input", { ref: searchInputRef, type: "text", value: searchText, onChange: (e) => setSearchText(e.target.value), onKeyDown: (e) => {
16620
+ }, onMouseDown: (e) => e.stopPropagation(), className: "p-0 border-0 bg-transparent cursor-pointer", "aria-label": t?.('common.close', { defaultValue: 'Close' }), children: jsxRuntimeExports.jsx("img", { src: img$a, alt: "", className: "w-5 h-5 opacity-60" }) })] }), jsxRuntimeExports.jsx("div", { className: "px-5 py-3 flex-shrink-0 border-b owt-border", children: jsxRuntimeExports.jsxs("div", { className: owtFieldInputClass({ className: 'flex items-center gap-2 px-3 h-[30px] rounded-[10px]' }), children: [jsxRuntimeExports.jsx("input", { ref: searchInputRef, type: "text", value: searchText, onChange: (e) => setSearchText(e.target.value), onKeyDown: (e) => {
16593
16621
  if (e.key === 'Enter') {
16594
16622
  e.preventDefault();
16595
16623
  runSearch(searchText, 1);
16596
16624
  }
16597
- }, placeholder: searchPlaceholder, className: "flex-1 outline-none text-sm owt-text bg-transparent" }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => runSearch(searchText, 1), "aria-label": t?.('common.search', { defaultValue: 'Search' }), className: "flex-shrink-0 p-0 border-0 bg-transparent cursor-pointer", children: jsxRuntimeExports.jsx("img", { src: img$c, alt: "", className: "w-4 h-4 opacity-40" }) })] }) }), jsxRuntimeExports.jsx("div", { className: "overflow-auto flex-1", children: searchResults.length === 0 ? (jsxRuntimeExports.jsx("p", { className: "text-center text-sm owt-text-muted py-10", children: searchText
16625
+ }, placeholder: searchPlaceholder, className: "flex-1 outline-none text-sm owt-text bg-transparent" }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => runSearch(searchText, 1), "aria-label": t?.('common.search', { defaultValue: 'Search' }), className: "flex-shrink-0 p-0 border-0 bg-transparent cursor-pointer", children: jsxRuntimeExports.jsx("img", { src: img$b, alt: "", className: "w-4 h-4 opacity-40" }) })] }) }), jsxRuntimeExports.jsx("div", { className: "overflow-auto flex-1", children: searchResults.length === 0 ? (jsxRuntimeExports.jsx("p", { className: "text-center text-sm owt-text-muted py-10", children: searchText
16598
16626
  ? t?.('common.noResults', { defaultValue: 'No results found' })
16599
16627
  : t?.('common.searchHint', {
16600
16628
  defaultValue: 'Type and press Enter or click search',
@@ -16618,7 +16646,7 @@ const ParentLookupWidget = ({ config, value: valueProp, error: errorProp, touche
16618
16646
  clearSelection();
16619
16647
  setIsOpen(false);
16620
16648
  onBlur();
16621
- }, className: "px-4 h-9 text-sm font-medium rounded-[10px] owt-bg-alt owt-text flex-shrink-0", children: t?.('common.remove', { defaultValue: 'Clear' }) })), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => pendingRow && applySelection(pendingRow), disabled: !pendingRow, className: "px-4 h-9 text-sm font-medium rounded-[10px] text-white disabled:opacity-40 disabled:cursor-not-allowed flex-shrink-0", style: { backgroundColor: 'var(--owt-color-info)' }, children: selectRecordLabel })] })] })] })] }))] }));
16649
+ }, className: "px-4 h-9 text-sm font-medium rounded-[10px] owt-bg-alt owt-text flex-shrink-0", children: t?.('common.remove', { defaultValue: 'Clear' }) })), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => pendingRow && applySelection(pendingRow), disabled: !pendingRow, className: "px-4 h-9 text-sm font-medium rounded-[10px] disabled:opacity-40 disabled:cursor-not-allowed flex-shrink-0", style: { backgroundColor: 'var(--owt-color-info)', color: 'var(--owt-color-bg)' }, children: selectRecordLabel })] })] })] })] }))] }));
16622
16650
  };
16623
16651
 
16624
16652
  const MultiSelectWidget = ({ config }) => {
@@ -16857,7 +16885,7 @@ const MultiSelectWidget = ({ config }) => {
16857
16885
  }) }), jsxRuntimeExports.jsx("div", { className: "overflow-y-auto flex-1 min-h-0 py-1 overscroll-contain", children: selectedLabels.map((label, index) => (jsxRuntimeExports.jsx("div", { className: "px-3 py-1.5 text-sm owt-text", title: label, children: label }, `${selectedValues[index]}-${label}`))) })] })) : null;
16858
16886
  if (widgetConfig['widget-readonly']) {
16859
16887
  const fieldLabel = widgetConfig['widget-label'];
16860
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] MultiSelectDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [fieldLabel && (jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", label: fieldLabel })), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [selectedLabels.length === 0 ? (jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", children: "-" })) : (renderSelectedLabels({ readonly: true })), mounted && listPopupPanel && typeof document !== 'undefined'
16888
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] MultiSelectDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [fieldLabel && (jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", label: fieldLabel })), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", children: [selectedLabels.length === 0 ? (jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", children: "-" })) : (renderSelectedLabels({ readonly: true })), mounted && listPopupPanel && typeof document !== 'undefined'
16861
16889
  ? createPortal(listPopupPanel, document.body)
16862
16890
  : null] })] }));
16863
16891
  }
@@ -16889,7 +16917,7 @@ const MultiSelectWidget = ({ config }) => {
16889
16917
  const isChecked = selectedValues.includes(option.value);
16890
16918
  return (jsxRuntimeExports.jsxs("label", { className: `flex items-center gap-2 px-3 py-1 cursor-pointer owt-highlight-hover ${isChecked ? 'owt-highlight' : ''}`, children: [jsxRuntimeExports.jsx("input", { type: "checkbox", checked: isChecked, onChange: (e) => handleToggle(option.value, e.target.checked), className: "h-4 w-4 shrink-0 owt-field-check rounded" }), jsxRuntimeExports.jsx("span", { className: "text-sm owt-text leading-normal select-none", children: option.label })] }, option.value));
16891
16919
  })) })] })) : null;
16892
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: widgetConfig['widget-label'] ?? '', required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", ref: containerRef, children: [jsxRuntimeExports.jsxs("button", { ref: triggerRef, type: "button", onClick: () => {
16920
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: widgetConfig['widget-label'] ?? '', required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "flex-1 min-w-0", ref: containerRef, children: [jsxRuntimeExports.jsxs("button", { ref: triggerRef, type: "button", onClick: () => {
16893
16921
  if (!disabled)
16894
16922
  setIsOpen((prev) => !prev);
16895
16923
  }, onBlur: () => {
@@ -17838,7 +17866,7 @@ function resolveDisplayValue(levelId, selectedValues, options, resolvedLabels, l
17838
17866
  return loading ? '-' : selected;
17839
17867
  }
17840
17868
  function ReadonlyLevelRow({ level, displayValue, }) {
17841
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] SelectDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsxs("div", { className: "text-base owt-text-muted font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: level.level_mnemonic, children: [level.level_mnemonic, ":"] }), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", style: { fontFamily: 'Roboto, sans-serif' }, title: displayValue, children: displayValue }) })] }));
17869
+ return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] SelectDisplayWidget flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsxs("div", { className: "text-base owt-field-label font-medium md:min-w-[120px] sm:pr-4 mb-1 sm:mb-0", style: { fontFamily: 'Roboto, sans-serif' }, title: level.level_mnemonic, children: [level.level_mnemonic, ":"] }), jsxRuntimeExports.jsx("div", { className: "flex-1", children: jsxRuntimeExports.jsx("div", { className: "text-base owt-text font-medium", style: { fontFamily: 'Roboto, sans-serif' }, title: displayValue, children: displayValue }) })] }));
17842
17870
  }
17843
17871
  function renderFormSteps({ columnSteps, selectedValues, options, loadingLevels, loadingLevelId, isEnabled, isRequired, isComplete, touched, hasError, t, onBlur, handleValueChange, formatLevelLabel, }) {
17844
17872
  return columnSteps.map((step) => {
@@ -17854,7 +17882,7 @@ function renderFormSteps({ columnSteps, selectedValues, options, loadingLevels,
17854
17882
  ((isRequired && !isComplete && !levelHasValue) ||
17855
17883
  (touched && hasError && !levelHasValue));
17856
17884
  const label = formatLevelLabel(level.level_mnemonic);
17857
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: label, required: isRequired }), jsxRuntimeExports.jsx("div", { className: "flex-1 min-w-0", children: jsxRuntimeExports.jsxs("select", { value: selectedValues[level.level_id] || '', onChange: (event) => {
17885
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: label, required: isRequired }), jsxRuntimeExports.jsx("div", { className: "flex-1 min-w-0", children: jsxRuntimeExports.jsxs("select", { value: selectedValues[level.level_id] || '', onChange: (event) => {
17858
17886
  const nextValue = event.target.value;
17859
17887
  void handleValueChange(level.level_id, nextValue === '' ? undefined : nextValue);
17860
17888
  }, onBlur: onBlur, disabled: disabled, className: selectClassName(showLevelError, disabled), style: { borderRadius: '10px' }, children: [jsxRuntimeExports.jsx("option", { value: "", children: t?.('common.select') }), levelOptions.map((option) => (jsxRuntimeExports.jsx("option", { value: option.value, children: tSchema(t, option.label) }, option.value)))] }) })] }) }, step.key));
@@ -17870,7 +17898,7 @@ function renderFormSteps({ columnSteps, selectedValues, options, loadingLevels,
17870
17898
  const showLevelError = !parentUnselected &&
17871
17899
  ((isRequired && !isComplete && !encodedValue) ||
17872
17900
  (touched && hasError && !encodedValue));
17873
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-text md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: formatLevelLabel(activeLevel.level_mnemonic), required: isRequired }), jsxRuntimeExports.jsx("div", { className: "flex-1 min-w-0", children: jsxRuntimeExports.jsxs("select", { value: encodedValue, onChange: (event) => {
17901
+ return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col sm:flex-row sm:items-start", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "text-base font-medium owt-field-label md:min-w-[120px] sm:pr-4 sm:pt-1 mb-1 sm:mb-0", label: formatLevelLabel(activeLevel.level_mnemonic), required: isRequired }), jsxRuntimeExports.jsx("div", { className: "flex-1 min-w-0", children: jsxRuntimeExports.jsxs("select", { value: encodedValue, onChange: (event) => {
17874
17902
  const raw = event.target.value;
17875
17903
  if (!raw) {
17876
17904
  const selectedLevel = chosen ?? step.levels[0];
@@ -17947,139 +17975,6 @@ const GeoHierarchyWidget = ({ config }) => {
17947
17975
  return (jsxRuntimeExports.jsxs("div", { className: isReadonly ? 'GeoHierarchyDisplayWidget' : 'GeoHierarchyWidget', children: [isReadonly ? readonlyContent : editContent, loadingLevels && levels.length === 0 && (jsxRuntimeExports.jsx("p", { className: "text-sm owt-text-muted mb-[10px]", children: t?.('common.loading') })), geoError && jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mb-[10px]", children: geoError }), !isReadonly && touched && hasError && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mb-[10px]", children: error[0] || 'This field is required' }))] }));
17948
17976
  };
17949
17977
 
17950
- const distributeDocsToColumns = (docs, totalDocs) => {
17951
- const total = totalDocs > 0 ? totalDocs : docs.length;
17952
- const rowsPerColumn = Math.ceil(total / 3);
17953
- if (rowsPerColumn <= 0) {
17954
- return [];
17955
- }
17956
- const columns = [];
17957
- for (let index = 0; index < 3; index += 1) {
17958
- const column = docs.slice(index * rowsPerColumn, (index + 1) * rowsPerColumn);
17959
- if (column.length > 0) {
17960
- columns.push(column);
17961
- }
17962
- }
17963
- return columns;
17964
- };
17965
- const getFileName = (file) => file instanceof File ? file.name : file.split('/').pop() || file;
17966
- const iconButtonClass = 'inline-flex items-center justify-center shrink-0 p-0 border-0 bg-transparent focus:outline-none';
17967
- const docControlClass = 'w-full h-9 min-w-0 flex items-center rounded-lg px-2.5 box-border';
17968
- const DocsWidget = ({ config }) => {
17969
- const { value, error, touched, isEnabled, onChange, onBlur, config: widgetConfig, } = useBaseWidget({ config });
17970
- const { t } = useWidgetContext();
17971
- const documents = widgetConfig['documents'] || [];
17972
- const totalDocs = widgetConfig['widget-total-docs'] || documents.length;
17973
- const docColumns = distributeDocsToColumns(documents, totalDocs);
17974
- const isReadonly = Boolean(widgetConfig['widget-readonly']);
17975
- const currentValue = value && typeof value === 'object' && !Array.isArray(value)
17976
- ? value
17977
- : {};
17978
- const fileInputRefs = useRef({});
17979
- const handleFileChange = async (docKey, e) => {
17980
- const files = e.target.files;
17981
- if (!files || files.length === 0)
17982
- return;
17983
- const file = files[0];
17984
- const doc = documents.find((d) => d['document-key'] === docKey);
17985
- const maxSize = doc?.['document-max-size'];
17986
- if (maxSize && file.size > maxSize) {
17987
- console.error(`File "${file.name}" exceeds max size of ${maxSize} bytes`);
17988
- return;
17989
- }
17990
- try {
17991
- const serialized = await serializeFile(file);
17992
- const updated = {
17993
- ...currentValue,
17994
- [docKey]: { ...serialized, label: doc?.['document-label'] ?? docKey },
17995
- [`${docKey}_source_filename`]: file.name,
17996
- };
17997
- onChange(updated);
17998
- }
17999
- catch (err) {
18000
- console.error('Error serializing file:', err);
18001
- }
18002
- if (fileInputRefs.current[docKey]) {
18003
- fileInputRefs.current[docKey].value = '';
18004
- }
18005
- };
18006
- const handleRemove = (docKey) => {
18007
- const updated = {
18008
- ...currentValue,
18009
- [docKey]: null,
18010
- [`${docKey}_source_filename`]: null,
18011
- };
18012
- onChange(updated);
18013
- };
18014
- const handlePreview = (file, e) => {
18015
- if (e) {
18016
- e.preventDefault();
18017
- e.stopPropagation();
18018
- }
18019
- openFileInNewTab(file);
18020
- };
18021
- const getDocValue = (docKey) => {
18022
- const stored = currentValue[docKey];
18023
- if (!stored)
18024
- return null;
18025
- if (typeof stored === 'string')
18026
- return stored;
18027
- if (isSerializedFile(stored)) {
18028
- try {
18029
- return deserializeFile(stored);
18030
- }
18031
- catch {
18032
- return null;
18033
- }
18034
- }
18035
- return null;
18036
- };
18037
- const getSourceFilename = (docKey, file) => {
18038
- const stored = currentValue[`${docKey}_source_filename`];
18039
- if (typeof stored === 'string' && stored)
18040
- return stored;
18041
- return file ? getFileName(file) : '';
18042
- };
18043
- const renderSlot = (doc) => {
18044
- const docKey = doc['document-key'];
18045
- const label = doc['document-label'];
18046
- const isRequired = doc['document-required'] ?? false;
18047
- const accept = doc['document-accept'];
18048
- const file = getDocValue(docKey);
18049
- const hasFile = !!file;
18050
- const displayFileName = getSourceFilename(docKey, file);
18051
- const isEmptyRequired = isRequired && !hasFile;
18052
- const showValidationError = touched && error.length > 0 && isEmptyRequired;
18053
- if (isReadonly) {
18054
- return (jsxRuntimeExports.jsxs("div", { className: "mb-[10px] FileDisplayWidget flex flex-row items-start w-full", children: [jsxRuntimeExports.jsxs("div", { className: "w-1/2 min-w-0 pr-2 text-base owt-text-muted font-medium truncate", style: { fontFamily: 'Roboto, sans-serif' }, title: tSchema(t, label), children: [tSchema(t, label), ":"] }), jsxRuntimeExports.jsx("div", { className: "w-1/2 min-w-0 flex items-center min-h-[1.5rem]", children: hasFile ? (jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [jsxRuntimeExports.jsx("span", { className: "w-10/12 min-w-0 truncate text-base owt-text font-medium", title: displayFileName, children: displayFileName }), jsxRuntimeExports.jsx("button", { type: "button", onClick: (e) => handlePreview(file, e), className: `w-2/12 ${iconButtonClass}`, title: displayFileName, children: jsxRuntimeExports.jsx("img", { src: img$1, alt: t?.('common.view') ?? 'View', className: "h-4 w-4" }) })] })) : (jsxRuntimeExports.jsx("span", { className: "text-base owt-text font-medium", children: "-" })) })] }, docKey));
18055
- }
18056
- return (jsxRuntimeExports.jsx("div", { className: "mb-[10px]", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-row items-start w-full", children: [jsxRuntimeExports.jsx(WidgetFieldLabel, { className: "w-1/2 min-w-0 pr-2 text-base font-medium owt-text", label: tSchema(t, label), required: isRequired }), jsxRuntimeExports.jsxs("div", { className: "w-1/2 min-w-0 flex flex-col justify-center min-h-[1.5rem]", children: [!hasFile && (jsxRuntimeExports.jsxs("label", { className: `${docControlClass} cursor-pointer justify-center gap-2 border border-dashed ${!isEnabled ? 'opacity-50 cursor-not-allowed' : ''}`, style: {
18057
- borderColor: isEmptyRequired
18058
- ? 'var(--owt-widget-error-color)'
18059
- : 'var(--owt-color-primary-dark)',
18060
- backgroundColor: 'var(--owt-color-bg)',
18061
- }, children: [jsxRuntimeExports.jsx("img", { src: img$9, alt: "", className: "h-4 w-4 shrink-0" }), jsxRuntimeExports.jsx("span", { className: "text-sm font-medium owt-text", children: t?.('common.upload') ?? 'Upload' }), jsxRuntimeExports.jsx("input", { type: "file", accept: accept, onChange: (e) => void handleFileChange(docKey, e), onBlur: onBlur, disabled: !isEnabled, className: "hidden", ref: (el) => {
18062
- fileInputRefs.current[docKey] = el;
18063
- } })] })), hasFile && (jsxRuntimeExports.jsxs("div", { className: `${docControlClass} gap-2 border owt-border owt-bg`, title: displayFileName, children: [jsxRuntimeExports.jsxs("button", { type: "button", onClick: (e) => handlePreview(file, e), className: `${iconButtonClass} min-w-0 flex-1 gap-2 justify-start`, title: displayFileName, children: [jsxRuntimeExports.jsx("img", { src: img$1, alt: "", className: "h-4 w-4 shrink-0" }), jsxRuntimeExports.jsx("span", { className: "min-w-0 truncate text-sm font-medium owt-text", children: displayFileName })] }), jsxRuntimeExports.jsx("button", { type: "button", onClick: () => handleRemove(docKey), disabled: !isEnabled, className: `inline-flex items-center justify-center shrink-0 h-5 w-5 p-0 border-0 rounded-full owt-bg-alt focus:outline-none ${!isEnabled ? 'opacity-50 cursor-not-allowed' : ''}`, title: t?.('common.remove') ?? 'Remove', children: jsxRuntimeExports.jsx("img", { src: img, alt: t?.('common.remove') ?? 'Remove', className: "h-2.5 w-2.5" }) })] })), showValidationError && (jsxRuntimeExports.jsx("p", { className: "owt-field-error text-sm mt-1", children: error[0] }))] })] }) }, docKey));
18064
- };
18065
- return (jsxRuntimeExports.jsx("div", { className: isReadonly ? 'DocsDisplayWidget mb-[10px]' : 'DocsWidget mb-[10px]', children: jsxRuntimeExports.jsx("div", { className: "flex flex-col lg:grid w-full", style: { gridTemplateColumns: `repeat(${docColumns.length || 1}, minmax(0, 1fr))` }, children: docColumns.map((column, columnIndex) => {
18066
- const isLast = columnIndex === docColumns.length - 1;
18067
- const columnClassName = [
18068
- 'flex flex-col min-w-0 relative',
18069
- columnIndex > 0 ? 'lg:pl-10' : '',
18070
- isLast ? '' : 'lg:pr-10',
18071
- ]
18072
- .filter(Boolean)
18073
- .join(' ');
18074
- return (jsxRuntimeExports.jsxs("div", { className: columnClassName, children: [!isLast && (jsxRuntimeExports.jsx("div", { className: "hidden lg:block absolute right-0 top-0 w-px", style: {
18075
- bottom: '5px',
18076
- backgroundColor: isReadonly
18077
- ? 'var(--owt-panel-divider-color)'
18078
- : 'var(--owt-color-primary)',
18079
- } })), column.map((doc) => renderSlot(doc))] }, `docs-column-${columnIndex}`));
18080
- }) }) }));
18081
- };
18082
-
18083
17978
  const registerDefaultWidgets = () => {
18084
17979
  widgetRegistry.register({ widget: 'text', component: TextInputWidget });
18085
17980
  widgetRegistry.register({ widget: 'textarea', component: TextAreaWidget });
@@ -18103,7 +17998,6 @@ const registerDefaultWidgets = () => {
18103
17998
  widgetRegistry.register({ widget: 'parent-lookup', component: ParentLookupWidget });
18104
17999
  widgetRegistry.register({ widget: 'multi-select', component: MultiSelectWidget });
18105
18000
  widgetRegistry.register({ widget: 'geo-hierarchy', component: GeoHierarchyWidget });
18106
- widgetRegistry.register({ widget: 'docs', component: DocsWidget });
18107
18001
  };
18108
18002
  registerDefaultWidgets();
18109
18003
 
@@ -18210,5 +18104,5 @@ const translateUISchema = (schema, translate) => {
18210
18104
  };
18211
18105
  };
18212
18106
 
18213
- export { BooleanWidget, CheckboxWidget, DateInputWidget, DateTimeInputWidget, DialogTableWidget, DisplayWidget, DocsWidget, FileInputWidget, GeoHierarchyWidget, HeaderSectionWidget, IdAuthenticationWidget, JSONEditorPanel, MultiSelectWidget, NumberInputWidget, PanelRenderer, ParentLookupWidget, PhoneInputWidget, ProfileWidget, PropertyEditor, RadioWidget, RegisterLookupWidget, ScoresDisplayWidget, SectionBuilder, SectionRenderer, SectionTree, SectionsContainer, SelectWidget, TableWidget, TextAreaWidget, TextInputWidget, VisualBuilderPanel, WIDGET_TYPES, WidgetEventBus, WidgetProvider, WidgetRenderer, applyCaseControl, applyDecimalPrecision, applyMask, createDefaultWidgetConfig, createWidgetStore, createZodSchema, deleteValueByPath, evaluateCondition, evaluateWidgetConditions, filterByCharacterType, formatCurrency, formatDate, formatNumber, formatPhone, formatValue, getApiDataSource, getCachedApiDataSource, getFormattedNumberLength, getSchemaDataSource, getStaticDataSource, getValueByPath, getWidgetCategory, getWidgetValue, hasVisibilityRules, isAllowedKey, isGeoHierarchyDataSource, isWidgetValueEmpty, normalizeNumericDefault, normalizeOptionRules, owtFieldInputClass, parseDataPath, parseNumber, registerDefaultWidgets, removeMask, replaceValues, resetAll, resetWidget, resolveWidgetIdValue, setDataSource, setError, setLoading, setTouched, setValue, setValueByPath, setValues, setWidgetValue, shouldEnableWidget, shouldRequireWidget, shouldShowWidget, themeToCSSVariables, transformDataSourceOptions, translatePanelConfig, translateUISchema, translateWidgetConfig, useBaseWidget, useWidgetCascade, useWidgetContext, useWidgetEventBus, useWidgetTheme, validateDocsWidget, validateNumericValue, validateWidget, widgetRegistry };
18107
+ export { BooleanWidget, CheckboxWidget, DateInputWidget, DateTimeInputWidget, DialogTableWidget, DisplayWidget, FileInputWidget, GeoHierarchyWidget, HeaderSectionWidget, IdAuthenticationWidget, JSONEditorPanel, MultiSelectWidget, NumberInputWidget, PanelRenderer, ParentLookupWidget, PhoneInputWidget, ProfileWidget, PropertyEditor, RadioWidget, RegisterLookupWidget, SECTION_FILE_TAG, ScoresDisplayWidget, SectionBuilder, SectionRenderer, SectionTree, SectionsContainer, SelectWidget, TableWidget, TextAreaWidget, TextInputWidget, VisualBuilderPanel, WIDGET_TYPES, WidgetEventBus, WidgetProvider, WidgetRenderer, applyCaseControl, applyDecimalPrecision, applyMask, createDefaultWidgetConfig, createWidgetStore, createZodSchema, deleteValueByPath, evaluateCondition, evaluateWidgetConditions, filterByCharacterType, formatCurrency, formatDate, formatNumber, formatPhone, formatValue, getApiDataSource, getCachedApiDataSource, getFormattedNumberLength, getSchemaDataSource, getStaticDataSource, getValueByPath, getWidgetCategory, getWidgetValue, hasVisibilityRules, isAllowedKey, isFreshSectionFileEntry, isGeoHierarchyDataSource, isStoredDocumentRef, isWidgetValueEmpty, normalizeNumericDefault, normalizeOptionRules, owtFieldInputClass, parseDataPath, parseNumber, registerDefaultWidgets, removeMask, replaceValues, resetAll, resetWidget, resolveWidgetIdValue, setDataSource, setError, setLoading, setTouched, setValue, setValueByPath, setValues, setWidgetValue, shouldEnableWidget, shouldRequireWidget, shouldShowWidget, themeToCSSVariables, transformDataSourceOptions, translatePanelConfig, translateUISchema, translateWidgetConfig, useBaseWidget, useWidgetCascade, useWidgetContext, useWidgetEventBus, useWidgetTheme, validateNumericValue, validateWidget, widgetRegistry };
18214
18108
  //# sourceMappingURL=index.esm.js.map