@axdspub/axiom-ui-forms 0.3.3 → 0.3.5

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 (122) hide show
  1. package/library/axiom-ui-forms.d.ts +56 -26
  2. package/library/esm/_virtual/index10.js +2 -2
  3. package/library/esm/_virtual/index3.js +2 -2
  4. package/library/esm/_virtual/index4.js +2 -2
  5. package/library/esm/_virtual/index9.js +2 -2
  6. package/library/esm/node_modules/@axdspub/axiom-maps/library/index.js +1 -1
  7. package/library/esm/node_modules/@axdspub/axiom-maps/library/openlayers/index.esm.js +1 -1
  8. package/library/esm/node_modules/@axdspub/axiom-maps/node_modules/@axdspub/axiom-ui-utilities/library/index.js +15219 -0
  9. package/library/esm/node_modules/@axdspub/axiom-maps/node_modules/@axdspub/axiom-ui-utilities/library/index.js.map +1 -0
  10. package/library/esm/node_modules/@axdspub/axiom-ui-utilities/library/index.js +122 -90
  11. package/library/esm/node_modules/@axdspub/axiom-ui-utilities/library/index.js.map +1 -1
  12. package/library/esm/node_modules/@radix-ui/react-icons/dist/react-icons.esm.js +23 -1
  13. package/library/esm/node_modules/@radix-ui/react-icons/dist/react-icons.esm.js.map +1 -1
  14. package/library/esm/node_modules/ajv/dist/compile/validate/index.js +1 -1
  15. package/library/esm/node_modules/ajv/dist/vocabularies/core/index.js +1 -1
  16. package/library/esm/node_modules/ajv/dist/vocabularies/discriminator/index.js +1 -1
  17. package/library/esm/node_modules/ajv/dist/vocabularies/format/index.js +1 -1
  18. package/library/esm/node_modules/lodash-es/_SetCache.js +28 -0
  19. package/library/esm/node_modules/lodash-es/_SetCache.js.map +1 -0
  20. package/library/esm/node_modules/lodash-es/_arrayLikeKeys.js +8 -1
  21. package/library/esm/node_modules/lodash-es/_arrayLikeKeys.js.map +1 -1
  22. package/library/esm/node_modules/lodash-es/_arraySome.js +24 -0
  23. package/library/esm/node_modules/lodash-es/_arraySome.js.map +1 -0
  24. package/library/esm/node_modules/lodash-es/_baseIsEqual.js +29 -0
  25. package/library/esm/node_modules/lodash-es/_baseIsEqual.js.map +1 -0
  26. package/library/esm/node_modules/lodash-es/_baseIsEqualDeep.js +84 -0
  27. package/library/esm/node_modules/lodash-es/_baseIsEqualDeep.js.map +1 -0
  28. package/library/esm/node_modules/lodash-es/_baseKeys.js +31 -0
  29. package/library/esm/node_modules/lodash-es/_baseKeys.js.map +1 -0
  30. package/library/esm/node_modules/lodash-es/_baseTrim.js +20 -0
  31. package/library/esm/node_modules/lodash-es/_baseTrim.js.map +1 -0
  32. package/library/esm/node_modules/lodash-es/_cacheHas.js +14 -0
  33. package/library/esm/node_modules/lodash-es/_cacheHas.js.map +1 -0
  34. package/library/esm/node_modules/lodash-es/_equalArrays.js +85 -0
  35. package/library/esm/node_modules/lodash-es/_equalArrays.js.map +1 -0
  36. package/library/esm/node_modules/lodash-es/_equalByTag.js +113 -0
  37. package/library/esm/node_modules/lodash-es/_equalByTag.js.map +1 -0
  38. package/library/esm/node_modules/lodash-es/_equalObjects.js +91 -0
  39. package/library/esm/node_modules/lodash-es/_equalObjects.js.map +1 -0
  40. package/library/esm/node_modules/lodash-es/_getAllKeys.js +17 -0
  41. package/library/esm/node_modules/lodash-es/_getAllKeys.js.map +1 -0
  42. package/library/esm/node_modules/lodash-es/_mapToArray.js +19 -0
  43. package/library/esm/node_modules/lodash-es/_mapToArray.js.map +1 -0
  44. package/library/esm/node_modules/lodash-es/_nativeKeys.js +7 -0
  45. package/library/esm/node_modules/lodash-es/_nativeKeys.js.map +1 -0
  46. package/library/esm/node_modules/lodash-es/_setCacheAdd.js +20 -0
  47. package/library/esm/node_modules/lodash-es/_setCacheAdd.js.map +1 -0
  48. package/library/esm/node_modules/lodash-es/_setCacheHas.js +15 -0
  49. package/library/esm/node_modules/lodash-es/_setCacheHas.js.map +1 -0
  50. package/library/esm/node_modules/lodash-es/_setToArray.js +19 -0
  51. package/library/esm/node_modules/lodash-es/_setToArray.js.map +1 -0
  52. package/library/esm/node_modules/lodash-es/_trimmedEndIndex.js +20 -0
  53. package/library/esm/node_modules/lodash-es/_trimmedEndIndex.js.map +1 -0
  54. package/library/esm/node_modules/lodash-es/debounce.js +192 -0
  55. package/library/esm/node_modules/lodash-es/debounce.js.map +1 -0
  56. package/library/esm/node_modules/lodash-es/isEqual.js +36 -0
  57. package/library/esm/node_modules/lodash-es/isEqual.js.map +1 -0
  58. package/library/esm/node_modules/lodash-es/keys.js +38 -0
  59. package/library/esm/node_modules/lodash-es/keys.js.map +1 -0
  60. package/library/esm/node_modules/lodash-es/keysIn.js +1 -1
  61. package/library/esm/node_modules/lodash-es/keysIn.js.map +1 -1
  62. package/library/esm/node_modules/lodash-es/now.js +24 -0
  63. package/library/esm/node_modules/lodash-es/now.js.map +1 -0
  64. package/library/esm/node_modules/lodash-es/toNumber.js +65 -0
  65. package/library/esm/node_modules/lodash-es/toNumber.js.map +1 -0
  66. package/library/esm/src/Form/Components/FieldCreator.js +86 -31
  67. package/library/esm/src/Form/Components/FieldCreator.js.map +1 -1
  68. package/library/esm/src/Form/Components/FieldLabel.js +90 -19
  69. package/library/esm/src/Form/Components/FieldLabel.js.map +1 -1
  70. package/library/esm/src/Form/Components/InlineMarkdown.js +4 -0
  71. package/library/esm/src/Form/Components/InlineMarkdown.js.map +1 -1
  72. package/library/esm/src/Form/Components/Inputs/Boolean.js +8 -6
  73. package/library/esm/src/Form/Components/Inputs/Boolean.js.map +1 -1
  74. package/library/esm/src/Form/Components/Inputs/Constant.js +2 -2
  75. package/library/esm/src/Form/Components/Inputs/Constant.js.map +1 -1
  76. package/library/esm/src/Form/Components/Inputs/Date.js +3 -4
  77. package/library/esm/src/Form/Components/Inputs/Date.js.map +1 -1
  78. package/library/esm/src/Form/Components/Inputs/DateTime.js +3 -4
  79. package/library/esm/src/Form/Components/Inputs/DateTime.js.map +1 -1
  80. package/library/esm/src/Form/Components/Inputs/GeoJSON.js +5 -4
  81. package/library/esm/src/Form/Components/Inputs/GeoJSON.js.map +1 -1
  82. package/library/esm/src/Form/Components/Inputs/Geometry.js +20 -11
  83. package/library/esm/src/Form/Components/Inputs/Geometry.js.map +1 -1
  84. package/library/esm/src/Form/Components/Inputs/JSON.js +6 -5
  85. package/library/esm/src/Form/Components/Inputs/JSON.js.map +1 -1
  86. package/library/esm/src/Form/Components/Inputs/LongString.js +5 -5
  87. package/library/esm/src/Form/Components/Inputs/LongString.js.map +1 -1
  88. package/library/esm/src/Form/Components/Inputs/Number.js +49 -35
  89. package/library/esm/src/Form/Components/Inputs/Number.js.map +1 -1
  90. package/library/esm/src/Form/Components/Inputs/Object.js +46 -11
  91. package/library/esm/src/Form/Components/Inputs/Object.js.map +1 -1
  92. package/library/esm/src/Form/Components/Inputs/RadioGroup.js +2 -3
  93. package/library/esm/src/Form/Components/Inputs/RadioGroup.js.map +1 -1
  94. package/library/esm/src/Form/Components/Inputs/SingleSelect.js +2 -3
  95. package/library/esm/src/Form/Components/Inputs/SingleSelect.js.map +1 -1
  96. package/library/esm/src/Form/Components/Inputs/String.js +5 -11
  97. package/library/esm/src/Form/Components/Inputs/String.js.map +1 -1
  98. package/library/esm/src/Form/Components/Inputs/Time.js +2 -3
  99. package/library/esm/src/Form/Components/Inputs/Time.js.map +1 -1
  100. package/library/esm/src/Form/Creator/FormCreator.js +6 -6
  101. package/library/esm/src/Form/Creator/FormCreator.js.map +1 -1
  102. package/library/esm/src/Form/Creator/FormFields.js +1 -1
  103. package/library/esm/src/Form/Creator/FormFields.js.map +1 -1
  104. package/library/esm/src/Form/Creator/FormHeader.js +2 -1
  105. package/library/esm/src/Form/Creator/FormHeader.js.map +1 -1
  106. package/library/esm/src/Form/Creator/FormSection.js +1 -1
  107. package/library/esm/src/Form/Creator/FormSection.js.map +1 -1
  108. package/library/esm/src/Form/Creator/Page.js +7 -2
  109. package/library/esm/src/Form/Creator/Page.js.map +1 -1
  110. package/library/esm/src/Form/Creator/Wizard.js +6 -6
  111. package/library/esm/src/Form/Creator/Wizard.js.map +1 -1
  112. package/library/esm/src/utils/getters.js +36 -6
  113. package/library/esm/src/utils/getters.js.map +1 -1
  114. package/library/esm/src/utils/helpers.js +11 -0
  115. package/library/esm/src/utils/helpers.js.map +1 -0
  116. package/library/esm/src/utils/manipulators.js +30 -11
  117. package/library/esm/src/utils/manipulators.js.map +1 -1
  118. package/library/esm/src/utils/schemaToFormHelpers.js +2 -2
  119. package/library/esm/src/utils/schemaToFormHelpers.js.map +1 -1
  120. package/library/esm/src/utils/validators.js +94 -15
  121. package/library/esm/src/utils/validators.js.map +1 -1
  122. package/package.json +5 -3
@@ -1,10 +1,9 @@
1
- import { __assign } from '../../../../node_modules/tslib/tslib.es6.js';
2
1
  import FieldLabel from '../FieldLabel.js';
3
2
  import React__default, { useState } from 'react';
4
3
 
5
4
  var DateInput = function (_a) {
6
5
  var _b;
7
- var field = _a.field, onChange = _a.onChange, value = _a.value;
6
+ var field = _a.field, onChange = _a.onChange, value = _a.value, disabled = _a.disabled;
8
7
  if (field.type !== 'date') {
9
8
  return React__default.createElement("p", null,
10
9
  "Field config for ",
@@ -81,9 +80,9 @@ var DateInput = function (_a) {
81
80
  return (React__default.createElement("div", null,
82
81
  React__default.createElement("div", { className: "flex flex-wrap items-baseline gap-2" },
83
82
  React__default.createElement("label", { htmlFor: field.id, className: "flex-1 min-w-[200px]" },
84
- React__default.createElement(FieldLabel, __assign({}, field))),
83
+ React__default.createElement(FieldLabel, { field: field, disabled: disabled, value: value, onChange: onChange })),
85
84
  constraintMessage && (React__default.createElement("span", { className: "text-sm text-slate-500 italic" }, constraintMessage))),
86
- React__default.createElement("input", { id: field.id, className: "border ".concat(error ? 'border-red-500' : 'border-slate-300', " p-2 w-full"), "data-testid": field.id, type: "date", value: inputValue, onChange: handleChange, min: minDate ? formatValue(minDate) : undefined, max: maxDate ? formatValue(maxDate) : undefined }),
85
+ React__default.createElement("input", { id: field.id, disabled: disabled, className: "border ".concat(error ? 'border-red-500' : 'border-slate-300', " p-2 w-full").concat(disabled ? ' opacity-50 cursor-not-allowed' : ''), "data-testid": field.id, type: "date", value: inputValue, onChange: handleChange, min: minDate ? formatValue(minDate) : undefined, max: maxDate ? formatValue(maxDate) : undefined }),
87
86
  error && React__default.createElement("p", { className: "text-red-500 text-sm mt-1" }, error)));
88
87
  };
89
88
 
@@ -1 +1 @@
1
- {"version":3,"file":"Date.js","sources":["../../../../../../src/Form/Components/Inputs/Date.tsx"],"sourcesContent":["import FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\nimport React, { type ReactElement, useState } from 'react'\r\n\r\nconst DateInput = ({ field, onChange, value }: IFieldInputProps): ReactElement => {\r\n if (field.type !== 'date') {\r\n return <p>Field config for {field.id} is missing &apos;options&apos;</p>\r\n }\r\n\r\n const [error, setError] = useState<string | null>(null)\r\n const { minDate, maxDate } = field.constraints ?? {}\r\n\r\n // Convert the value to the format expected by date input (YYYY-MM-DD)\r\n const formatValue = (val: string | undefined | null): string => {\r\n if (!val) return ''\r\n try {\r\n // Ensure the value is in the correct format\r\n const date = new Date(val)\r\n if (isNaN(date.getTime())) return ''\r\n\r\n // Format to YYYY-MM-DD using UTC to avoid timezone issues\r\n const year = date.getUTCFullYear()\r\n const month = String(date.getUTCMonth() + 1).padStart(2, '0')\r\n const day = String(date.getUTCDate()).padStart(2, '0')\r\n\r\n return `${year}-${month}-${day}`\r\n } catch {\r\n return ''\r\n }\r\n }\r\n\r\n const inputValue = formatValue(value as string)\r\n\r\n const validateDate = (dateStr: string): string | null => {\r\n if (!minDate && !maxDate) return null\r\n\r\n const inputDate = new Date(dateStr + 'T00:00:00Z')\r\n const minDateObj = minDate ? new Date(minDate) : null\r\n const maxDateObj = maxDate ? new Date(maxDate) : null\r\n\r\n if (minDateObj && inputDate < minDateObj) {\r\n return `Date must be after ${formatValue(minDate)}`\r\n }\r\n if (maxDateObj && inputDate > maxDateObj) {\r\n return `Date must be before ${formatValue(maxDate)}`\r\n }\r\n return null\r\n }\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\r\n const newValue = e.target.value\r\n // Only notify parent of change if we have a complete valid date\r\n if (newValue) {\r\n // Create date in UTC by appending T00:00:00Z to the input value\r\n const date = new Date(newValue + 'T00:00:00Z')\r\n // Check if it's a valid date and the year is reasonable (4 digits)\r\n if (!isNaN(date.getTime()) && date.getUTCFullYear() > 999) {\r\n const validationError = validateDate(newValue)\r\n setError(validationError)\r\n if (!validationError) {\r\n onChange(date.toISOString())\r\n }\r\n }\r\n } else {\r\n setError(null)\r\n onChange(undefined)\r\n }\r\n }\r\n\r\n const getConstraintMessage = (): string | null => {\r\n if (!minDate && !maxDate) return null\r\n const parts = []\r\n if (minDate) parts.push(`after ${formatValue(minDate)}`)\r\n if (maxDate) parts.push(`before ${formatValue(maxDate)}`)\r\n return `Must be ${parts.join(' and ')}`\r\n }\r\n\r\n const constraintMessage = getConstraintMessage()\r\n\r\n return (\r\n <div>\r\n <div className=\"flex flex-wrap items-baseline gap-2\">\r\n <label htmlFor={field.id} className=\"flex-1 min-w-[200px]\">\r\n <FieldLabel {...field} />\r\n </label>\r\n {constraintMessage && (\r\n <span className=\"text-sm text-slate-500 italic\">\r\n {constraintMessage}\r\n </span>\r\n )}\r\n </div>\r\n <input\r\n id={field.id}\r\n className={`border ${error ? 'border-red-500' : 'border-slate-300'} p-2 w-full`}\r\n data-testid={field.id}\r\n type=\"date\"\r\n value={inputValue}\r\n onChange={handleChange}\r\n min={minDate ? formatValue(minDate) : undefined}\r\n max={maxDate ? formatValue(maxDate) : undefined}\r\n />\r\n {error && <p className=\"text-red-500 text-sm mt-1\">{error}</p>}\r\n </div>\r\n )\r\n}\r\n\r\nexport default DateInput\r\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"Date.js","sources":["../../../../../../src/Form/Components/Inputs/Date.tsx"],"sourcesContent":["import FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\nimport React, { type ReactElement, useState } from 'react'\r\n\r\nconst DateInput = ({ field, onChange, value, disabled }: IFieldInputProps): ReactElement => {\r\n if (field.type !== 'date') {\r\n return <p>Field config for {field.id} is missing &apos;options&apos;</p>\r\n }\r\n\r\n const [error, setError] = useState<string | null>(null)\r\n const { minDate, maxDate } = field.constraints ?? {}\r\n\r\n // Convert the value to the format expected by date input (YYYY-MM-DD)\r\n const formatValue = (val: string | undefined | null): string => {\r\n if (!val) return ''\r\n try {\r\n // Ensure the value is in the correct format\r\n const date = new Date(val)\r\n if (isNaN(date.getTime())) return ''\r\n\r\n // Format to YYYY-MM-DD using UTC to avoid timezone issues\r\n const year = date.getUTCFullYear()\r\n const month = String(date.getUTCMonth() + 1).padStart(2, '0')\r\n const day = String(date.getUTCDate()).padStart(2, '0')\r\n\r\n return `${year}-${month}-${day}`\r\n } catch {\r\n return ''\r\n }\r\n }\r\n\r\n const inputValue = formatValue(value as string)\r\n\r\n const validateDate = (dateStr: string): string | null => {\r\n if (!minDate && !maxDate) return null\r\n\r\n const inputDate = new Date(dateStr + 'T00:00:00Z')\r\n const minDateObj = minDate ? new Date(minDate) : null\r\n const maxDateObj = maxDate ? new Date(maxDate) : null\r\n\r\n if (minDateObj && inputDate < minDateObj) {\r\n return `Date must be after ${formatValue(minDate)}`\r\n }\r\n if (maxDateObj && inputDate > maxDateObj) {\r\n return `Date must be before ${formatValue(maxDate)}`\r\n }\r\n return null\r\n }\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\r\n const newValue = e.target.value\r\n // Only notify parent of change if we have a complete valid date\r\n if (newValue) {\r\n // Create date in UTC by appending T00:00:00Z to the input value\r\n const date = new Date(newValue + 'T00:00:00Z')\r\n // Check if it's a valid date and the year is reasonable (4 digits)\r\n if (!isNaN(date.getTime()) && date.getUTCFullYear() > 999) {\r\n const validationError = validateDate(newValue)\r\n setError(validationError)\r\n if (!validationError) {\r\n onChange(date.toISOString())\r\n }\r\n }\r\n } else {\r\n setError(null)\r\n onChange(undefined)\r\n }\r\n }\r\n\r\n const getConstraintMessage = (): string | null => {\r\n if (!minDate && !maxDate) return null\r\n const parts = []\r\n if (minDate) parts.push(`after ${formatValue(minDate)}`)\r\n if (maxDate) parts.push(`before ${formatValue(maxDate)}`)\r\n return `Must be ${parts.join(' and ')}`\r\n }\r\n\r\n const constraintMessage = getConstraintMessage()\r\n\r\n return (\r\n <div>\r\n <div className=\"flex flex-wrap items-baseline gap-2\">\r\n <label htmlFor={field.id} className=\"flex-1 min-w-[200px]\">\r\n <FieldLabel field={field} disabled={disabled} value={value} onChange={onChange} />\r\n </label>\r\n {constraintMessage && (\r\n <span className=\"text-sm text-slate-500 italic\">\r\n {constraintMessage}\r\n </span>\r\n )}\r\n </div>\r\n <input\r\n id={field.id}\r\n disabled={disabled}\r\n className={`border ${error ? 'border-red-500' : 'border-slate-300'} p-2 w-full${disabled ? ' opacity-50 cursor-not-allowed' : ''}`}\r\n data-testid={field.id}\r\n type=\"date\"\r\n value={inputValue}\r\n onChange={handleChange}\r\n min={minDate ? formatValue(minDate) : undefined}\r\n max={maxDate ? formatValue(maxDate) : undefined}\r\n />\r\n {error && <p className=\"text-red-500 text-sm mt-1\">{error}</p>}\r\n </div>\r\n )\r\n}\r\n\r\nexport default DateInput\r\n"],"names":["React"],"mappings":";;;AAIM,IAAA,SAAS,GAAG,UAAC,EAAsD,EAAA;;QAApD,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,QAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,QAAA;AACnD,IAAA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;QACzB,OAAOA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA;;AAAqB,YAAA,KAAK,CAAC,EAAE;oCAAoC;;IAGpE,IAAA,EAAA,GAAoB,QAAQ,CAAgB,IAAI,CAAC,EAAhD,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAiC;AACjD,IAAA,IAAA,EAAuB,GAAA,CAAA,EAAA,GAAA,KAAK,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,EAA5C,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,OAAO,aAA4B;;IAGpD,IAAM,WAAW,GAAG,UAAC,GAA8B,EAAA;AACjD,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;AACnB,QAAA,IAAI;;AAEF,YAAA,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;AAC1B,YAAA,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAAE,gBAAA,OAAO,EAAE;;AAGpC,YAAA,IAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE;AAClC,YAAA,IAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAC7D,YAAA,IAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;AAEtD,YAAA,OAAO,UAAG,IAAI,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,KAAK,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,GAAG,CAAE;;AAChC,QAAA,OAAA,EAAA,EAAM;AACN,YAAA,OAAO,EAAE;;AAEb,KAAC;AAED,IAAA,IAAM,UAAU,GAAG,WAAW,CAAC,KAAe,CAAC;IAE/C,IAAM,YAAY,GAAG,UAAC,OAAe,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QAErC,IAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;AAClD,QAAA,IAAM,UAAU,GAAG,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;AACrD,QAAA,IAAM,UAAU,GAAG,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI;AAErD,QAAA,IAAI,UAAU,IAAI,SAAS,GAAG,UAAU,EAAE;AACxC,YAAA,OAAO,6BAAsB,WAAW,CAAC,OAAO,CAAC,CAAE;;AAErD,QAAA,IAAI,UAAU,IAAI,SAAS,GAAG,UAAU,EAAE;AACxC,YAAA,OAAO,8BAAuB,WAAW,CAAC,OAAO,CAAC,CAAE;;AAEtD,QAAA,OAAO,IAAI;AACb,KAAC;IAED,IAAM,YAAY,GAAG,UAAC,CAAsC,EAAA;AAC1D,QAAA,IAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK;;QAE/B,IAAI,QAAQ,EAAE;;YAEZ,IAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC;;AAE9C,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,GAAG,GAAG,EAAE;AACzD,gBAAA,IAAM,eAAe,GAAG,YAAY,CAAC,QAAQ,CAAC;gBAC9C,QAAQ,CAAC,eAAe,CAAC;gBACzB,IAAI,CAAC,eAAe,EAAE;AACpB,oBAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;;;;aAG3B;YACL,QAAQ,CAAC,IAAI,CAAC;YACd,QAAQ,CAAC,SAAS,CAAC;;AAEvB,KAAC;AAED,IAAA,IAAM,oBAAoB,GAAG,YAAA;AAC3B,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,IAAI;QACrC,IAAM,KAAK,GAAG,EAAE;AAChB,QAAA,IAAI,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,QAAS,CAAA,MAAA,CAAA,WAAW,CAAC,OAAO,CAAC,CAAE,CAAC;AACxD,QAAA,IAAI,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,SAAU,CAAA,MAAA,CAAA,WAAW,CAAC,OAAO,CAAC,CAAE,CAAC;QACzD,OAAO,UAAA,CAAA,MAAA,CAAW,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAE;AACzC,KAAC;AAED,IAAA,IAAM,iBAAiB,GAAG,oBAAoB,EAAE;AAEhD,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;QACEA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,qCAAqC,EAAA;YAClDA,cAAO,CAAA,aAAA,CAAA,OAAA,EAAA,EAAA,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAC,sBAAsB,EAAA;AACxD,gBAAAA,cAAA,CAAA,aAAA,CAAC,UAAU,EAAC,EAAA,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAC5E;YACP,iBAAiB,KAChBA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,+BAA+B,EAC5C,EAAA,iBAAiB,CACb,CACR,CACG;AACN,QAAAA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,EAAE,EAAE,KAAK,CAAC,EAAE,EACZ,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAA,CAAA,MAAA,CAAU,KAAK,GAAG,gBAAgB,GAAG,kBAAkB,EAAA,aAAA,CAAA,CAAA,MAAA,CAAc,QAAQ,GAAG,gCAAgC,GAAG,EAAE,CAAE,iBACrH,KAAK,CAAC,EAAE,EACrB,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,YAAY,EACtB,GAAG,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,EAC/C,GAAG,EAAE,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,EAC/C,CAAA;QACD,KAAK,IAAIA,cAAG,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,SAAS,EAAC,2BAA2B,IAAE,KAAK,CAAK,CAC1D;AAEV;;;;"}
@@ -1,10 +1,9 @@
1
- import { __assign } from '../../../../node_modules/tslib/tslib.es6.js';
2
1
  import FieldLabel from '../FieldLabel.js';
3
2
  import React__default, { useState } from 'react';
4
3
 
5
4
  var DateTimeInput = function (_a) {
6
5
  var _b;
7
- var field = _a.field, onChange = _a.onChange, value = _a.value;
6
+ var field = _a.field, onChange = _a.onChange, value = _a.value, disabled = _a.disabled;
8
7
  var _c = useState(null), error = _c[0], setError = _c[1];
9
8
  if (field.type !== 'datetime') {
10
9
  return React__default.createElement("p", null,
@@ -78,9 +77,9 @@ var DateTimeInput = function (_a) {
78
77
  return (React__default.createElement("div", null,
79
78
  React__default.createElement("div", { className: "flex flex-wrap items-baseline gap-2" },
80
79
  React__default.createElement("label", { htmlFor: field.id, className: "flex-1 min-w-[200px]" },
81
- React__default.createElement(FieldLabel, __assign({}, field))),
80
+ React__default.createElement(FieldLabel, { field: field, disabled: disabled, value: value, onChange: onChange })),
82
81
  constraintMessage && (React__default.createElement("span", { className: "text-sm text-slate-500 italic" }, constraintMessage))),
83
- React__default.createElement("input", { id: field.id, className: "border ".concat(error ? 'border-red-500' : 'border-slate-300', " p-2 w-full"), "data-testid": field.id, type: "datetime-local", value: formatValue(value), onChange: handleChange, min: minDateTime ? formatValue(minDateTime) : undefined, max: maxDateTime ? formatValue(maxDateTime) : undefined }),
82
+ React__default.createElement("input", { id: field.id, disabled: disabled, className: "border ".concat(error ? 'border-red-500' : 'border-slate-300', " p-2 w-full").concat(disabled ? ' opacity-50 cursor-not-allowed' : ''), "data-testid": field.id, type: "datetime-local", value: formatValue(value), onChange: handleChange, min: minDateTime ? formatValue(minDateTime) : undefined, max: maxDateTime ? formatValue(maxDateTime) : undefined }),
84
83
  error && React__default.createElement("p", { className: "text-red-500 text-sm mt-1" }, error)));
85
84
  };
86
85
 
@@ -1 +1 @@
1
- {"version":3,"file":"DateTime.js","sources":["../../../../../../src/Form/Components/Inputs/DateTime.tsx"],"sourcesContent":["import FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\nimport React, { type ReactElement, useState } from 'react'\r\n\r\nconst DateTimeInput = ({ field, onChange, value }: IFieldInputProps): ReactElement => {\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n if (field.type !== 'datetime') {\r\n return <p>Field config for {field.id} is missing &apos;options&apos;</p>\r\n }\r\n const { minDateTime, maxDateTime } = field.constraints ?? {}\r\n\r\n // Convert the value to the format expected by datetime-local input (YYYY-MM-DDThh:mm)\r\n const formatValue = (val: string | undefined | null): string => {\r\n if (!val) return ''\r\n try {\r\n // Ensure the value is in the correct format\r\n const date = new Date(val)\r\n if (isNaN(date.getTime())) return ''\r\n\r\n // Format to YYYY-MM-DDThh:mm\r\n const year = date.getFullYear()\r\n const month = String(date.getMonth() + 1).padStart(2, '0')\r\n const day = String(date.getDate()).padStart(2, '0')\r\n const hours = String(date.getHours()).padStart(2, '0')\r\n const minutes = String(date.getMinutes()).padStart(2, '0')\r\n\r\n return `${year}-${month}-${day}T${hours}:${minutes}`\r\n } catch {\r\n return ''\r\n }\r\n }\r\n\r\n const validateDateTime = (date: Date): string | null => {\r\n if (minDateTime && date < new Date(minDateTime)) {\r\n return `Date must be after ${new Date(minDateTime).toLocaleString()}`\r\n }\r\n if (maxDateTime && date > new Date(maxDateTime)) {\r\n return `Date must be before ${new Date(maxDateTime).toLocaleString()}`\r\n }\r\n return null\r\n }\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\r\n const inputValue = e.target.value\r\n\r\n // If we have a partial datetime (e.g., just started typing), don't update\r\n if (inputValue && inputValue.length < 16) { // 16 is the length of a complete datetime-local value\r\n return\r\n }\r\n\r\n if (inputValue) {\r\n const date = new Date(inputValue)\r\n if (!isNaN(date.getTime())) {\r\n const validationError = validateDateTime(date)\r\n setError(validationError)\r\n if (!validationError) {\r\n onChange(date.toISOString())\r\n }\r\n }\r\n } else {\r\n setError(null)\r\n onChange(undefined)\r\n }\r\n }\r\n\r\n const getConstraintMessage = (): string | null => {\r\n if (!minDateTime && !maxDateTime) return null\r\n const parts = []\r\n if (minDateTime) parts.push(`after ${new Date(minDateTime).toLocaleString()}`)\r\n if (maxDateTime) parts.push(`before ${new Date(maxDateTime).toLocaleString()}`)\r\n return `Must be ${parts.join(' and ')}`\r\n }\r\n\r\n const constraintMessage = getConstraintMessage()\r\n\r\n return (\r\n <div>\r\n <div className=\"flex flex-wrap items-baseline gap-2\">\r\n <label htmlFor={field.id} className=\"flex-1 min-w-[200px]\">\r\n <FieldLabel {...field} />\r\n </label>\r\n {constraintMessage && (\r\n <span className=\"text-sm text-slate-500 italic\">\r\n {constraintMessage}\r\n </span>\r\n )}\r\n </div>\r\n <input\r\n id={field.id}\r\n className={`border ${error ? 'border-red-500' : 'border-slate-300'} p-2 w-full`}\r\n data-testid={field.id}\r\n type=\"datetime-local\"\r\n value={formatValue(value as string)}\r\n onChange={handleChange}\r\n min={minDateTime ? formatValue(minDateTime) : undefined}\r\n max={maxDateTime ? formatValue(maxDateTime) : undefined}\r\n />\r\n {error && <p className=\"text-red-500 text-sm mt-1\">{error}</p>}\r\n </div>\r\n )\r\n}\r\n\r\nexport default DateTimeInput\r\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"DateTime.js","sources":["../../../../../../src/Form/Components/Inputs/DateTime.tsx"],"sourcesContent":["import FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\nimport React, { type ReactElement, useState } from 'react'\r\n\r\nconst DateTimeInput = ({ field, onChange, value, disabled }: IFieldInputProps): ReactElement => {\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n if (field.type !== 'datetime') {\r\n return <p>Field config for {field.id} is missing &apos;options&apos;</p>\r\n }\r\n const { minDateTime, maxDateTime } = field.constraints ?? {}\r\n\r\n // Convert the value to the format expected by datetime-local input (YYYY-MM-DDThh:mm)\r\n const formatValue = (val: string | undefined | null): string => {\r\n if (!val) return ''\r\n try {\r\n // Ensure the value is in the correct format\r\n const date = new Date(val)\r\n if (isNaN(date.getTime())) return ''\r\n\r\n // Format to YYYY-MM-DDThh:mm\r\n const year = date.getFullYear()\r\n const month = String(date.getMonth() + 1).padStart(2, '0')\r\n const day = String(date.getDate()).padStart(2, '0')\r\n const hours = String(date.getHours()).padStart(2, '0')\r\n const minutes = String(date.getMinutes()).padStart(2, '0')\r\n\r\n return `${year}-${month}-${day}T${hours}:${minutes}`\r\n } catch {\r\n return ''\r\n }\r\n }\r\n\r\n const validateDateTime = (date: Date): string | null => {\r\n if (minDateTime && date < new Date(minDateTime)) {\r\n return `Date must be after ${new Date(minDateTime).toLocaleString()}`\r\n }\r\n if (maxDateTime && date > new Date(maxDateTime)) {\r\n return `Date must be before ${new Date(maxDateTime).toLocaleString()}`\r\n }\r\n return null\r\n }\r\n\r\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\r\n const inputValue = e.target.value\r\n\r\n // If we have a partial datetime (e.g., just started typing), don't update\r\n if (inputValue && inputValue.length < 16) { // 16 is the length of a complete datetime-local value\r\n return\r\n }\r\n\r\n if (inputValue) {\r\n const date = new Date(inputValue)\r\n if (!isNaN(date.getTime())) {\r\n const validationError = validateDateTime(date)\r\n setError(validationError)\r\n if (!validationError) {\r\n onChange(date.toISOString())\r\n }\r\n }\r\n } else {\r\n setError(null)\r\n onChange(undefined)\r\n }\r\n }\r\n\r\n const getConstraintMessage = (): string | null => {\r\n if (!minDateTime && !maxDateTime) return null\r\n const parts = []\r\n if (minDateTime) parts.push(`after ${new Date(minDateTime).toLocaleString()}`)\r\n if (maxDateTime) parts.push(`before ${new Date(maxDateTime).toLocaleString()}`)\r\n return `Must be ${parts.join(' and ')}`\r\n }\r\n\r\n const constraintMessage = getConstraintMessage()\r\n\r\n return (\r\n <div>\r\n <div className=\"flex flex-wrap items-baseline gap-2\">\r\n <label htmlFor={field.id} className=\"flex-1 min-w-[200px]\">\r\n <FieldLabel field={field} disabled={disabled} value={value} onChange={onChange} />\r\n </label>\r\n {constraintMessage && (\r\n <span className=\"text-sm text-slate-500 italic\">\r\n {constraintMessage}\r\n </span>\r\n )}\r\n </div>\r\n <input\r\n id={field.id}\r\n disabled={disabled}\r\n className={`border ${error ? 'border-red-500' : 'border-slate-300'} p-2 w-full${disabled ? ' opacity-50 cursor-not-allowed' : ''}`}\r\n data-testid={field.id}\r\n type=\"datetime-local\"\r\n value={formatValue(value as string)}\r\n onChange={handleChange}\r\n min={minDateTime ? formatValue(minDateTime) : undefined}\r\n max={maxDateTime ? formatValue(maxDateTime) : undefined}\r\n />\r\n {error && <p className=\"text-red-500 text-sm mt-1\">{error}</p>}\r\n </div>\r\n )\r\n}\r\n\r\nexport default DateTimeInput\r\n"],"names":["React"],"mappings":"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"}
@@ -87,7 +87,7 @@ var calculateCenterFromGeoJSON = function (geo) {
87
87
  };
88
88
  };
89
89
  var GeoJSONInput = function (_a) {
90
- var field = _a.field, onChange = _a.onChange, value = _a.value;
90
+ var field = _a.field, onChange = _a.onChange, value = _a.value, disabled = _a.disabled;
91
91
  console.log('INITIAL VALUE', value);
92
92
  var initialGeoJSON = value;
93
93
  var initialMapConfig = calculateCenterFromGeoJSON(initialGeoJSON);
@@ -402,7 +402,7 @@ var GeoJSONInput = function (_a) {
402
402
  // setShowShapeTypeButtons(false)
403
403
  };
404
404
  return React__default.createElement("div", null,
405
- React__default.createElement(FieldLabel, __assign({}, field)),
405
+ React__default.createElement(FieldLabel, { field: field, disabled: disabled }),
406
406
  React__default.createElement("div", { className: "relative" },
407
407
  React__default.createElement("div", { className: "absolute z-20 top-12 right-4 flex flex-col gap-2" },
408
408
  React__default.createElement("div", { className: "tooltip-container relative group" },
@@ -427,6 +427,7 @@ var GeoJSONInput = function (_a) {
427
427
  React__default.createElement(Button, { onClick: clearShape, className: "p-2 rounded-lg shadow-lg bg-red-500 hover:bg-red-600 text-white w-10 h-10 flex items-center justify-center" },
428
428
  React__default.createElement(TrashIcon, { className: "w-5 h-5" }),
429
429
  React__default.createElement("span", { className: "tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none" }, "Clear Shape"))))),
430
+ disabled && (React__default.createElement("div", { className: "absolute z-50 bg-white bg-opacity-20 cursor-not-allowed top-0 right-0 left-0 bottom-0" })),
430
431
  React__default.createElement(OpenLayersMapComponent, __assign({}, MAP_CONFIG, { setState: setMapState })),
431
432
  React__default.createElement("div", { className: "mt-4" },
432
433
  React__default.createElement("div", { className: "flex justify-between items-center mb-2" },
@@ -440,8 +441,8 @@ var GeoJSONInput = function (_a) {
440
441
  React__default.createElement(Button, { onClick: function () { applyShapeType(EMapShape.polygon); }, className: "px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2" },
441
442
  React__default.createElement(SquareIcon, { className: "w-4 h-4 rotate-45" }),
442
443
  "Create Polygon")))),
443
- React__default.createElement(TextArea, { error: error, className: 'min-h-[100px] bg-slate-50 rounded-lg shadow-inner', id: "".concat(field.id, "-coordinates"), testId: "".concat(field.id, "-coordinates"), value: coordinates, onChange: handleCoordinatesChange, placeholder: "61.2181, -149.9003\n61.2182, -149.9004\n61.2183, -149.9005" })),
444
- showGeoJSONInput && React__default.createElement(TextArea, { error: error, className: 'min-h-[500px] bg-slate-50 rounded-lg shadow-inner', id: field.id, testId: field.id, label: React__default.createElement(FieldLabel, __assign({}, field)), value: getValue(), onChange: function (e) {
444
+ React__default.createElement(TextArea, { disabled: disabled, error: error, className: 'min-h-[100px] bg-slate-50 rounded-lg shadow-inner', id: "".concat(field.id, "-coordinates"), testId: "".concat(field.id, "-coordinates"), value: coordinates, onChange: handleCoordinatesChange, placeholder: "61.2181, -149.9003\n61.2182, -149.9004\n61.2183, -149.9005" })),
445
+ showGeoJSONInput && React__default.createElement(TextArea, { error: error, className: 'min-h-[500px] bg-slate-50 rounded-lg shadow-inner', id: field.id, testId: field.id, label: React__default.createElement(FieldLabel, { field: field, disabled: disabled }), value: getValue(), onChange: function (e) {
445
446
  try {
446
447
  JSON.parse(e !== null && e !== void 0 ? e : '');
447
448
  onChange(JSON.parse(e !== null && e !== void 0 ? e : ''));
@@ -1 +1 @@
1
- {"version":3,"file":"GeoJSON.js","sources":["../../../../../../src/Form/Components/Inputs/GeoJSON.tsx"],"sourcesContent":["import { Button, TextArea } from '@axdspub/axiom-ui-utilities'\r\nimport FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\n\r\nimport { EMapShape, type IMap, type IMapDrawEvent, type IStyleableMapProps } from '@axdspub/axiom-maps'\r\nimport { OpenLayersMap as Map } from '@axdspub/axiom-maps/library/openlayers'\r\nimport { type GeoJSON } from 'geojson'\r\nimport React, { useEffect, useState, type ReactElement } from 'react'\r\nimport { TrashIcon, SquareIcon, BorderSolidIcon, DrawingPinFilledIcon } from '@radix-ui/react-icons'\r\n\r\n/*\r\nList of coordinates for testing. Around Anchorage.\r\n61.44480592425796, -150.3785489314675\r\n61.26059021199541, -150.7356022485971\r\n61.05235501381105, -150.61435734866856\r\n61.06014246374005, -149.9221328461051\r\n61.441517540302925, -149.16102284579276\r\n61.44480592425796, -150.3785489314675\r\n*/\r\n\r\nconst calculateCenterFromGeoJSON = (geo: GeoJSON | undefined): { lat: number, lon: number, zoom: number } => {\r\n if (!geo || !('features' in geo) || !Array.isArray(geo.features) || geo.features.length === 0) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 } // Default to Anchorage\r\n }\r\n\r\n const feature = geo.features[0]\r\n if (!feature?.geometry) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n const geometry = feature.geometry\r\n let coordinates: GeoJSON.Position[] = []\r\n\r\n switch (geometry.type) {\r\n case 'Polygon':\r\n coordinates = geometry.coordinates[0] // Get first ring (ignore holes)\r\n break\r\n case 'LineString':\r\n coordinates = geometry.coordinates\r\n break\r\n case 'Point':\r\n coordinates = [geometry.coordinates]\r\n break\r\n default:\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n if (!Array.isArray(coordinates) || coordinates.length === 0) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n // Calculate bounds\r\n let minLat = Infinity\r\n let maxLat = -Infinity\r\n let minLon = Infinity\r\n let maxLon = -Infinity\r\n let sumLat = 0\r\n let sumLon = 0\r\n let count = 0\r\n\r\n coordinates.forEach((coord: GeoJSON.Position) => {\r\n const [lon, lat] = coord\r\n minLat = Math.min(minLat, lat)\r\n maxLat = Math.max(maxLat, lat)\r\n minLon = Math.min(minLon, lon)\r\n maxLon = Math.max(maxLon, lon)\r\n sumLat += lat\r\n sumLon += lon\r\n count++\r\n })\r\n\r\n // Calculate center\r\n const centerLat = sumLat / count\r\n const centerLon = sumLon / count\r\n\r\n // Calculate zoom level based on bounds\r\n const latDiff = maxLat - minLat\r\n const lonDiff = maxLon - minLon\r\n const maxDiff = Math.max(latDiff, lonDiff)\r\n\r\n // Adjust zoom based on the size of the shape\r\n let zoom = 8 // default zoom\r\n if (maxDiff < 0.1) zoom = 12 // very small shape\r\n else if (maxDiff < 0.5) zoom = 10 // small shape\r\n else if (maxDiff < 1) zoom = 9 // medium shape\r\n else if (maxDiff < 2) zoom = 8 // large shape\r\n else if (maxDiff < 5) zoom = 7 // very large shape\r\n else zoom = 6 // huge shape\r\n\r\n return {\r\n lat: centerLat,\r\n lon: centerLon,\r\n zoom\r\n }\r\n}\r\n\r\nexport const GeoJSONInput = ({ field, onChange, value }: IFieldInputProps): ReactElement => {\r\n console.log('INITIAL VALUE', value)\r\n const initialGeoJSON = value as unknown as GeoJSON\r\n const initialMapConfig = calculateCenterFromGeoJSON(initialGeoJSON)\r\n const [currentDrawType, setCurrentDrawType] = useState<EMapShape>(EMapShape.polygon)\r\n const [isDrawing, setIsDrawing] = useState<boolean>(false)\r\n\r\n const MAP_CONFIG: IStyleableMapProps = {\r\n baseLayerKey: 'hybrid',\r\n height: '500px',\r\n width: '100%',\r\n style: {\r\n left: '0px',\r\n top: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n padding: '0'\r\n },\r\n center: { lat: initialMapConfig.lat, lon: initialMapConfig.lon },\r\n zoom: initialMapConfig.zoom,\r\n tools: {\r\n draw: {\r\n shape: currentDrawType,\r\n enabled: true\r\n }\r\n }\r\n }\r\n\r\n const [map, setMapState] = useState<IMap | undefined>(undefined)\r\n const [error, setError] = useState<string | undefined>(undefined)\r\n const [geojson, setGeojson] = useState<GeoJSON | undefined>(() => {\r\n if (!value) return undefined\r\n return value as unknown as GeoJSON\r\n })\r\n const [showGeoJSONInput] = useState<boolean>(false) // For debugging purposes\r\n const [coordinates, setCoordinates] = useState<string>(() => {\r\n if (!value) return ''\r\n const geoValue = value as unknown as GeoJSON.FeatureCollection\r\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\r\n const feature = geoValue.features[0]\r\n const geometry = feature?.geometry\r\n if (!geometry) return ''\r\n\r\n if (geometry.type === 'Polygon') {\r\n const coords = geometry.coordinates[0]\r\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'LineString') {\r\n const coords = geometry.coordinates\r\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'Point') {\r\n const coords = geometry.coordinates\r\n return `${coords[1]}, ${coords[0]}`\r\n }\r\n }\r\n return ''\r\n })\r\n\r\n const getValue = (): string => {\r\n return geojson !== undefined && geojson !== null\r\n ? typeof geojson === 'object'\r\n ? JSON.stringify(geojson, null, 2)\r\n : String(geojson)\r\n : ''\r\n }\r\n\r\n const createGeoJSONFromCoordinates = (coordString: string, forceType?: EMapShape): GeoJSON | undefined => {\r\n if (!coordString.trim()) {\r\n setError(undefined)\r\n return undefined\r\n }\r\n\r\n try {\r\n const points = coordString\r\n .split('\\n')\r\n .map(line => line.trim())\r\n .filter(line => line.length > 0)\r\n .map(line => {\r\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\r\n if (isNaN(lat) || isNaN(lon)) {\r\n throw new Error('Invalid coordinate format')\r\n }\r\n return [lon, lat]\r\n })\r\n\r\n if (points.length === 0) {\r\n throw new Error('No valid coordinates found')\r\n }\r\n\r\n // Single point\r\n if (points.length === 1) {\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'Point',\r\n coordinates: points[0]\r\n }\r\n }]\r\n }\r\n }\r\n\r\n // For polygon or line, based on forceType or number of points\r\n if (forceType === EMapShape.polygon || (!forceType && points.length >= 3)) {\r\n // Close the polygon by adding the first point at the end if not already closed\r\n if (JSON.stringify(points[0]) !== JSON.stringify(points[points.length - 1])) {\r\n points.push(points[0])\r\n }\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'Polygon',\r\n coordinates: [points]\r\n }\r\n }]\r\n }\r\n }\r\n\r\n // LineString\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'LineString',\r\n coordinates: points\r\n }\r\n }]\r\n }\r\n } catch (e) {\r\n setError('Invalid coordinate format. Use \"lat, lon\" format, one per line')\r\n return undefined\r\n }\r\n }\r\n\r\n const [showShapeTypeButtons, setShowShapeTypeButtons] = useState<boolean>(() => {\r\n // Show buttons if initial value has 2+ coordinates\r\n if (!value) return false\r\n const geoValue = value as unknown as GeoJSON.FeatureCollection\r\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\r\n const feature = geoValue.features[0]\r\n const geometry = feature?.geometry\r\n if (!geometry) return false\r\n\r\n if (geometry.type === 'Polygon' || geometry.type === 'LineString') {\r\n return geometry.coordinates.length >= 2\r\n }\r\n }\r\n return false\r\n })\r\n\r\n const updateCoordinatesFromGeoJSON = (geo: GeoJSON | undefined): void => {\r\n if (!geo || geo.type !== 'FeatureCollection' || !geo.features?.[0]?.geometry) return\r\n\r\n const feature = geo.features[0]\r\n const geometry = feature.geometry\r\n let newCoords = ''\r\n\r\n if (geometry.type === 'Polygon') {\r\n const coords = geometry.coordinates[0]\r\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'LineString') {\r\n const coords = geometry.coordinates\r\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'Point') {\r\n const coords = geometry.coordinates\r\n newCoords = `${coords[1]}, ${coords[0]}`\r\n }\r\n\r\n setCoordinates(newCoords)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\r\n }\r\n\r\n useEffect(() => {\r\n if (map === undefined) return\r\n\r\n map.onDrawComplete((e: IMapDrawEvent) => {\r\n console.log('draw complete', e)\r\n setGeojson(e.data?.geojson)\r\n updateCoordinatesFromGeoJSON(e.data?.geojson)\r\n setIsDrawing(false)\r\n // Disable drawing after shape is completed\r\n map.disableDraw(currentDrawType)\r\n })\r\n\r\n // On modify drawing\r\n map.onDrawUpdate((e: IMapDrawEvent) => {\r\n console.log('draw update', e)\r\n setGeojson(e.data?.geojson)\r\n updateCoordinatesFromGeoJSON(e.data?.geojson)\r\n })\r\n }, [map])\r\n\r\n useEffect(() => {\r\n if (geojson !== undefined) {\r\n onChange(geojson)\r\n }\r\n }, [geojson])\r\n\r\n const hasValidShape = (geo: GeoJSON | undefined): boolean => {\r\n return geo !== undefined &&\r\n 'features' in geo &&\r\n Array.isArray(geo.features) &&\r\n geo.features.length > 0\r\n }\r\n\r\n const clearShape = (): void => {\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n setCoordinates('')\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.enableDraw(currentDrawType) // Re-enable drawing when shape is cleared\r\n setIsDrawing(true)\r\n }\r\n }\r\n\r\n const handleDrawTypeChange = (shapeType: EMapShape): void => {\r\n if (map) {\r\n // Clear existing shape if any\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n setCoordinates('')\r\n setShowShapeTypeButtons(false)\r\n setCurrentDrawType(shapeType)\r\n map.enableDraw(shapeType)\r\n setIsDrawing(true)\r\n }\r\n }\r\n\r\n const shouldShowShapeButtons = (coords: string): boolean => {\r\n const validLines = coords.trim().split('\\n')\r\n .map(line => line.trim())\r\n .filter(line => line.length > 0)\r\n .filter(line => {\r\n try {\r\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\r\n return !isNaN(lat) && !isNaN(lon)\r\n } catch {\r\n return false\r\n }\r\n })\r\n return validLines.length >= 3\r\n }\r\n\r\n const handleCoordinatesChange = (e: string | undefined): void => {\r\n const newCoords = e ?? ''\r\n setCoordinates(newCoords)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\r\n\r\n try {\r\n const newGeoJSON = createGeoJSONFromCoordinates(newCoords)\r\n if (newGeoJSON) {\r\n setGeojson(newGeoJSON)\r\n setError(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.setDrawGeojson(newGeoJSON as GeoJSON.FeatureCollection)\r\n map.disableDraw(currentDrawType) // Disable drawing when coordinates are entered\r\n }\r\n } else {\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n }\r\n }\r\n } catch (e) {\r\n setError('Invalid coordinate format')\r\n }\r\n }\r\n\r\n // Reload shape on the map\r\n useEffect(() => {\r\n if (map === undefined) return\r\n\r\n if (geojson !== undefined && 'features' in geojson) {\r\n map.setDrawGeojson(geojson)\r\n map.disableDraw(currentDrawType) // Disable drawing when there's a shape\r\n setIsDrawing(false)\r\n // Update coordinates display and shape type buttons\r\n updateCoordinatesFromGeoJSON(geojson)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(coordinates))\r\n } else {\r\n map.enableDraw(currentDrawType)\r\n setIsDrawing(true)\r\n }\r\n }, [map, currentDrawType])\r\n\r\n const applyShapeType = (shapeType: EMapShape): void => {\r\n const newGeoJSON = createGeoJSONFromCoordinates(coordinates, shapeType)\r\n if (newGeoJSON) {\r\n setGeojson(newGeoJSON)\r\n setError(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.setDrawGeojson(newGeoJSON as GeoJSON.FeatureCollection)\r\n }\r\n }\r\n // Don't hide the buttons anymore\r\n // setShowShapeTypeButtons(false)\r\n }\r\n\r\n return <div>\r\n <FieldLabel {...field} />\r\n <div className=\"relative\">\r\n <div className=\"absolute z-20 top-12 right-4 flex flex-col gap-2\">\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.polygon) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.polygon && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <SquareIcon className=\"w-5 h-5 rotate-45\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Polygon\r\n </span>\r\n </Button>\r\n </div>\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.linestring) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.linestring && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <BorderSolidIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Path\r\n </span>\r\n </Button>\r\n </div>\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.point) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.point && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <DrawingPinFilledIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Point\r\n </span>\r\n </Button>\r\n </div>\r\n {hasValidShape(geojson) && (\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={clearShape}\r\n className=\"p-2 rounded-lg shadow-lg bg-red-500 hover:bg-red-600 text-white w-10 h-10 flex items-center justify-center\"\r\n >\r\n <TrashIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Clear Shape\r\n </span>\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n <Map {...MAP_CONFIG} setState={setMapState} />\r\n <div className=\"mt-4\">\r\n <div className=\"flex justify-between items-center mb-2\">\r\n <span>Draw on map or enter coordinates <pre className=\"inline-block text-sm\">(latitude, longitude)</pre></span>\r\n {showShapeTypeButtons && (\r\n <div className=\"flex gap-2\">\r\n <Button\r\n onClick={() => { applyShapeType(EMapShape.linestring) }}\r\n className=\"px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2\"\r\n >\r\n <BorderSolidIcon className=\"w-4 h-4\" />\r\n Create Path\r\n </Button>\r\n <Button\r\n onClick={() => { applyShapeType(EMapShape.polygon) }}\r\n className=\"px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2\"\r\n >\r\n <SquareIcon className=\"w-4 h-4 rotate-45\" />\r\n Create Polygon\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n <TextArea\r\n error={error}\r\n className='min-h-[100px] bg-slate-50 rounded-lg shadow-inner'\r\n id={`${field.id}-coordinates`}\r\n testId={`${field.id}-coordinates`}\r\n value={coordinates}\r\n onChange={handleCoordinatesChange}\r\n placeholder=\"61.2181, -149.9003&#10;61.2182, -149.9004&#10;61.2183, -149.9005\"\r\n />\r\n </div>\r\n {showGeoJSONInput && <TextArea\r\n error={error}\r\n className='min-h-[500px] bg-slate-50 rounded-lg shadow-inner'\r\n id={field.id}\r\n testId={field.id}\r\n label={<FieldLabel {...field} />}\r\n value={getValue()}\r\n onChange={(e) => {\r\n try {\r\n JSON.parse(e ?? '')\r\n onChange(JSON.parse(e ?? ''))\r\n setError(undefined)\r\n } catch (e) {\r\n setError('Invalid JSON')\r\n }\r\n }} />}\r\n </div>\r\n </div>\r\n}\r\n\r\nexport default GeoJSONInput\r\n"],"names":["React","Map"],"mappings":"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"}
1
+ {"version":3,"file":"GeoJSON.js","sources":["../../../../../../src/Form/Components/Inputs/GeoJSON.tsx"],"sourcesContent":["import { Button, TextArea } from '@axdspub/axiom-ui-utilities'\r\nimport FieldLabel from '@/Form/Components/FieldLabel'\r\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\r\n\r\nimport { EMapShape, type IMap, type IMapDrawEvent, type IStyleableMapProps } from '@axdspub/axiom-maps'\r\nimport { OpenLayersMap as Map } from '@axdspub/axiom-maps/library/openlayers'\r\nimport { type GeoJSON } from 'geojson'\r\nimport React, { useEffect, useState, type ReactElement } from 'react'\r\nimport { TrashIcon, SquareIcon, BorderSolidIcon, DrawingPinFilledIcon } from '@radix-ui/react-icons'\r\n\r\n/*\r\nList of coordinates for testing. Around Anchorage.\r\n61.44480592425796, -150.3785489314675\r\n61.26059021199541, -150.7356022485971\r\n61.05235501381105, -150.61435734866856\r\n61.06014246374005, -149.9221328461051\r\n61.441517540302925, -149.16102284579276\r\n61.44480592425796, -150.3785489314675\r\n*/\r\n\r\nconst calculateCenterFromGeoJSON = (geo: GeoJSON | undefined): { lat: number, lon: number, zoom: number } => {\r\n if (!geo || !('features' in geo) || !Array.isArray(geo.features) || geo.features.length === 0) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 } // Default to Anchorage\r\n }\r\n\r\n const feature = geo.features[0]\r\n if (!feature?.geometry) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n const geometry = feature.geometry\r\n let coordinates: GeoJSON.Position[] = []\r\n\r\n switch (geometry.type) {\r\n case 'Polygon':\r\n coordinates = geometry.coordinates[0] // Get first ring (ignore holes)\r\n break\r\n case 'LineString':\r\n coordinates = geometry.coordinates\r\n break\r\n case 'Point':\r\n coordinates = [geometry.coordinates]\r\n break\r\n default:\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n if (!Array.isArray(coordinates) || coordinates.length === 0) {\r\n return { lat: 61.2181, lon: -149.9003, zoom: 8 }\r\n }\r\n\r\n // Calculate bounds\r\n let minLat = Infinity\r\n let maxLat = -Infinity\r\n let minLon = Infinity\r\n let maxLon = -Infinity\r\n let sumLat = 0\r\n let sumLon = 0\r\n let count = 0\r\n\r\n coordinates.forEach((coord: GeoJSON.Position) => {\r\n const [lon, lat] = coord\r\n minLat = Math.min(minLat, lat)\r\n maxLat = Math.max(maxLat, lat)\r\n minLon = Math.min(minLon, lon)\r\n maxLon = Math.max(maxLon, lon)\r\n sumLat += lat\r\n sumLon += lon\r\n count++\r\n })\r\n\r\n // Calculate center\r\n const centerLat = sumLat / count\r\n const centerLon = sumLon / count\r\n\r\n // Calculate zoom level based on bounds\r\n const latDiff = maxLat - minLat\r\n const lonDiff = maxLon - minLon\r\n const maxDiff = Math.max(latDiff, lonDiff)\r\n\r\n // Adjust zoom based on the size of the shape\r\n let zoom = 8 // default zoom\r\n if (maxDiff < 0.1) zoom = 12 // very small shape\r\n else if (maxDiff < 0.5) zoom = 10 // small shape\r\n else if (maxDiff < 1) zoom = 9 // medium shape\r\n else if (maxDiff < 2) zoom = 8 // large shape\r\n else if (maxDiff < 5) zoom = 7 // very large shape\r\n else zoom = 6 // huge shape\r\n\r\n return {\r\n lat: centerLat,\r\n lon: centerLon,\r\n zoom\r\n }\r\n}\r\n\r\nexport const GeoJSONInput = ({ field, onChange, value, disabled }: IFieldInputProps): ReactElement => {\r\n console.log('INITIAL VALUE', value)\r\n const initialGeoJSON = value as unknown as GeoJSON\r\n const initialMapConfig = calculateCenterFromGeoJSON(initialGeoJSON)\r\n const [currentDrawType, setCurrentDrawType] = useState<EMapShape>(EMapShape.polygon)\r\n const [isDrawing, setIsDrawing] = useState<boolean>(false)\r\n\r\n const MAP_CONFIG: IStyleableMapProps = {\r\n baseLayerKey: 'hybrid',\r\n height: '500px',\r\n width: '100%',\r\n style: {\r\n left: '0px',\r\n top: '0px',\r\n right: '0px',\r\n bottom: '0px',\r\n padding: '0'\r\n },\r\n center: { lat: initialMapConfig.lat, lon: initialMapConfig.lon },\r\n zoom: initialMapConfig.zoom,\r\n tools: {\r\n draw: {\r\n shape: currentDrawType,\r\n enabled: true\r\n }\r\n }\r\n }\r\n\r\n const [map, setMapState] = useState<IMap | undefined>(undefined)\r\n const [error, setError] = useState<string | undefined>(undefined)\r\n const [geojson, setGeojson] = useState<GeoJSON | undefined>(() => {\r\n if (!value) return undefined\r\n return value as unknown as GeoJSON\r\n })\r\n const [showGeoJSONInput] = useState<boolean>(false) // For debugging purposes\r\n const [coordinates, setCoordinates] = useState<string>(() => {\r\n if (!value) return ''\r\n const geoValue = value as unknown as GeoJSON.FeatureCollection\r\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\r\n const feature = geoValue.features[0]\r\n const geometry = feature?.geometry\r\n if (!geometry) return ''\r\n\r\n if (geometry.type === 'Polygon') {\r\n const coords = geometry.coordinates[0]\r\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'LineString') {\r\n const coords = geometry.coordinates\r\n return coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'Point') {\r\n const coords = geometry.coordinates\r\n return `${coords[1]}, ${coords[0]}`\r\n }\r\n }\r\n return ''\r\n })\r\n\r\n const getValue = (): string => {\r\n return geojson !== undefined && geojson !== null\r\n ? typeof geojson === 'object'\r\n ? JSON.stringify(geojson, null, 2)\r\n : String(geojson)\r\n : ''\r\n }\r\n\r\n const createGeoJSONFromCoordinates = (coordString: string, forceType?: EMapShape): GeoJSON | undefined => {\r\n if (!coordString.trim()) {\r\n setError(undefined)\r\n return undefined\r\n }\r\n\r\n try {\r\n const points = coordString\r\n .split('\\n')\r\n .map(line => line.trim())\r\n .filter(line => line.length > 0)\r\n .map(line => {\r\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\r\n if (isNaN(lat) || isNaN(lon)) {\r\n throw new Error('Invalid coordinate format')\r\n }\r\n return [lon, lat]\r\n })\r\n\r\n if (points.length === 0) {\r\n throw new Error('No valid coordinates found')\r\n }\r\n\r\n // Single point\r\n if (points.length === 1) {\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'Point',\r\n coordinates: points[0]\r\n }\r\n }]\r\n }\r\n }\r\n\r\n // For polygon or line, based on forceType or number of points\r\n if (forceType === EMapShape.polygon || (!forceType && points.length >= 3)) {\r\n // Close the polygon by adding the first point at the end if not already closed\r\n if (JSON.stringify(points[0]) !== JSON.stringify(points[points.length - 1])) {\r\n points.push(points[0])\r\n }\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'Polygon',\r\n coordinates: [points]\r\n }\r\n }]\r\n }\r\n }\r\n\r\n // LineString\r\n return {\r\n type: 'FeatureCollection',\r\n features: [{\r\n type: 'Feature',\r\n properties: {},\r\n geometry: {\r\n type: 'LineString',\r\n coordinates: points\r\n }\r\n }]\r\n }\r\n } catch (e) {\r\n setError('Invalid coordinate format. Use \"lat, lon\" format, one per line')\r\n return undefined\r\n }\r\n }\r\n\r\n const [showShapeTypeButtons, setShowShapeTypeButtons] = useState<boolean>(() => {\r\n // Show buttons if initial value has 2+ coordinates\r\n if (!value) return false\r\n const geoValue = value as unknown as GeoJSON.FeatureCollection\r\n if (geoValue?.type === 'FeatureCollection' && Array.isArray(geoValue.features) && geoValue.features.length > 0) {\r\n const feature = geoValue.features[0]\r\n const geometry = feature?.geometry\r\n if (!geometry) return false\r\n\r\n if (geometry.type === 'Polygon' || geometry.type === 'LineString') {\r\n return geometry.coordinates.length >= 2\r\n }\r\n }\r\n return false\r\n })\r\n\r\n const updateCoordinatesFromGeoJSON = (geo: GeoJSON | undefined): void => {\r\n if (!geo || geo.type !== 'FeatureCollection' || !geo.features?.[0]?.geometry) return\r\n\r\n const feature = geo.features[0]\r\n const geometry = feature.geometry\r\n let newCoords = ''\r\n\r\n if (geometry.type === 'Polygon') {\r\n const coords = geometry.coordinates[0]\r\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'LineString') {\r\n const coords = geometry.coordinates\r\n newCoords = coords.map((pos: GeoJSON.Position) => `${pos[1]}, ${pos[0]}`).join('\\n')\r\n } else if (geometry.type === 'Point') {\r\n const coords = geometry.coordinates\r\n newCoords = `${coords[1]}, ${coords[0]}`\r\n }\r\n\r\n setCoordinates(newCoords)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\r\n }\r\n\r\n useEffect(() => {\r\n if (map === undefined) return\r\n\r\n map.onDrawComplete((e: IMapDrawEvent) => {\r\n console.log('draw complete', e)\r\n setGeojson(e.data?.geojson)\r\n updateCoordinatesFromGeoJSON(e.data?.geojson)\r\n setIsDrawing(false)\r\n // Disable drawing after shape is completed\r\n map.disableDraw(currentDrawType)\r\n })\r\n\r\n // On modify drawing\r\n map.onDrawUpdate((e: IMapDrawEvent) => {\r\n console.log('draw update', e)\r\n setGeojson(e.data?.geojson)\r\n updateCoordinatesFromGeoJSON(e.data?.geojson)\r\n })\r\n }, [map])\r\n\r\n useEffect(() => {\r\n if (geojson !== undefined) {\r\n onChange(geojson)\r\n }\r\n }, [geojson])\r\n\r\n const hasValidShape = (geo: GeoJSON | undefined): boolean => {\r\n return geo !== undefined &&\r\n 'features' in geo &&\r\n Array.isArray(geo.features) &&\r\n geo.features.length > 0\r\n }\r\n\r\n const clearShape = (): void => {\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n setCoordinates('')\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.enableDraw(currentDrawType) // Re-enable drawing when shape is cleared\r\n setIsDrawing(true)\r\n }\r\n }\r\n\r\n const handleDrawTypeChange = (shapeType: EMapShape): void => {\r\n if (map) {\r\n // Clear existing shape if any\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n setCoordinates('')\r\n setShowShapeTypeButtons(false)\r\n setCurrentDrawType(shapeType)\r\n map.enableDraw(shapeType)\r\n setIsDrawing(true)\r\n }\r\n }\r\n\r\n const shouldShowShapeButtons = (coords: string): boolean => {\r\n const validLines = coords.trim().split('\\n')\r\n .map(line => line.trim())\r\n .filter(line => line.length > 0)\r\n .filter(line => {\r\n try {\r\n const [lat, lon] = line.split(',').map(coord => parseFloat(coord.trim()))\r\n return !isNaN(lat) && !isNaN(lon)\r\n } catch {\r\n return false\r\n }\r\n })\r\n return validLines.length >= 3\r\n }\r\n\r\n const handleCoordinatesChange = (e: string | undefined): void => {\r\n const newCoords = e ?? ''\r\n setCoordinates(newCoords)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(newCoords))\r\n\r\n try {\r\n const newGeoJSON = createGeoJSONFromCoordinates(newCoords)\r\n if (newGeoJSON) {\r\n setGeojson(newGeoJSON)\r\n setError(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.setDrawGeojson(newGeoJSON as GeoJSON.FeatureCollection)\r\n map.disableDraw(currentDrawType) // Disable drawing when coordinates are entered\r\n }\r\n } else {\r\n setGeojson(undefined)\r\n onChange(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n }\r\n }\r\n } catch (e) {\r\n setError('Invalid coordinate format')\r\n }\r\n }\r\n\r\n // Reload shape on the map\r\n useEffect(() => {\r\n if (map === undefined) return\r\n\r\n if (geojson !== undefined && 'features' in geojson) {\r\n map.setDrawGeojson(geojson)\r\n map.disableDraw(currentDrawType) // Disable drawing when there's a shape\r\n setIsDrawing(false)\r\n // Update coordinates display and shape type buttons\r\n updateCoordinatesFromGeoJSON(geojson)\r\n setShowShapeTypeButtons(shouldShowShapeButtons(coordinates))\r\n } else {\r\n map.enableDraw(currentDrawType)\r\n setIsDrawing(true)\r\n }\r\n }, [map, currentDrawType])\r\n\r\n const applyShapeType = (shapeType: EMapShape): void => {\r\n const newGeoJSON = createGeoJSONFromCoordinates(coordinates, shapeType)\r\n if (newGeoJSON) {\r\n setGeojson(newGeoJSON)\r\n setError(undefined)\r\n if (map) {\r\n map.setDrawGeojson({\r\n type: 'FeatureCollection',\r\n features: []\r\n })\r\n map.setDrawGeojson(newGeoJSON as GeoJSON.FeatureCollection)\r\n }\r\n }\r\n // Don't hide the buttons anymore\r\n // setShowShapeTypeButtons(false)\r\n }\r\n\r\n return <div>\r\n <FieldLabel field={field} disabled={disabled} />\r\n <div className=\"relative\">\r\n <div className=\"absolute z-20 top-12 right-4 flex flex-col gap-2\">\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.polygon) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.polygon && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <SquareIcon className=\"w-5 h-5 rotate-45\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Polygon\r\n </span>\r\n </Button>\r\n </div>\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.linestring) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.linestring && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <BorderSolidIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Path\r\n </span>\r\n </Button>\r\n </div>\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={() => { handleDrawTypeChange(EMapShape.point) }}\r\n className={`p-2 rounded-lg shadow-lg ${\r\n currentDrawType === EMapShape.point && isDrawing\r\n ? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'\r\n : 'bg-gray-100 hover:bg-gray-50'\r\n } text-black w-10 h-10 flex items-center justify-center`}\r\n >\r\n <DrawingPinFilledIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Draw Point\r\n </span>\r\n </Button>\r\n </div>\r\n {hasValidShape(geojson) && (\r\n <div className=\"tooltip-container relative group\">\r\n <Button\r\n onClick={clearShape}\r\n className=\"p-2 rounded-lg shadow-lg bg-red-500 hover:bg-red-600 text-white w-10 h-10 flex items-center justify-center\"\r\n >\r\n <TrashIcon className=\"w-5 h-5\" />\r\n <span className=\"tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none\">\r\n Clear Shape\r\n </span>\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n {\r\n disabled && (\r\n <div className=\"absolute z-50 bg-white bg-opacity-20 cursor-not-allowed top-0 right-0 left-0 bottom-0\"></div>\r\n )\r\n }\r\n <Map {...MAP_CONFIG} setState={setMapState} />\r\n\r\n <div className=\"mt-4\">\r\n <div className=\"flex justify-between items-center mb-2\">\r\n <span>Draw on map or enter coordinates <pre className=\"inline-block text-sm\">(latitude, longitude)</pre></span>\r\n {showShapeTypeButtons && (\r\n <div className=\"flex gap-2\">\r\n <Button\r\n onClick={() => { applyShapeType(EMapShape.linestring) }}\r\n className=\"px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2\"\r\n >\r\n <BorderSolidIcon className=\"w-4 h-4\" />\r\n Create Path\r\n </Button>\r\n <Button\r\n onClick={() => { applyShapeType(EMapShape.polygon) }}\r\n className=\"px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2\"\r\n >\r\n <SquareIcon className=\"w-4 h-4 rotate-45\" />\r\n Create Polygon\r\n </Button>\r\n </div>\r\n )}\r\n </div>\r\n <TextArea\r\n disabled={disabled}\r\n error={error}\r\n className='min-h-[100px] bg-slate-50 rounded-lg shadow-inner'\r\n id={`${field.id}-coordinates`}\r\n testId={`${field.id}-coordinates`}\r\n value={coordinates}\r\n onChange={handleCoordinatesChange}\r\n placeholder=\"61.2181, -149.9003&#10;61.2182, -149.9004&#10;61.2183, -149.9005\"\r\n />\r\n </div>\r\n {showGeoJSONInput && <TextArea\r\n error={error}\r\n className='min-h-[500px] bg-slate-50 rounded-lg shadow-inner'\r\n id={field.id}\r\n testId={field.id}\r\n label={<FieldLabel field={field} disabled={disabled} />}\r\n value={getValue()}\r\n onChange={(e) => {\r\n try {\r\n JSON.parse(e ?? '')\r\n onChange(JSON.parse(e ?? ''))\r\n setError(undefined)\r\n } catch (e) {\r\n setError('Invalid JSON')\r\n }\r\n }} />}\r\n </div>\r\n </div>\r\n}\r\n\r\nexport default GeoJSONInput\r\n"],"names":["React","Map"],"mappings":"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"}
@@ -3,8 +3,9 @@ import { Button, TextArea } from '../../../../node_modules/@axdspub/axiom-ui-uti
3
3
  import FieldLabel from '../FieldLabel.js';
4
4
  import { EMapShape } from '../../../../node_modules/@axdspub/axiom-maps/library/index.js';
5
5
  import { OpenLayersMap as OpenLayersMapComponent } from '../../../../node_modules/@axdspub/axiom-maps/library/openlayers/index.esm.js';
6
- import React__default, { useState, useCallback, useEffect } from 'react';
6
+ import React__default, { useState, useEffect, useCallback } from 'react';
7
7
  import { DrawingPinFilledIcon, BorderSolidIcon, SquareIcon, TrashIcon } from '../../../../node_modules/@radix-ui/react-icons/dist/react-icons.esm.js';
8
+ import isEqual from '../../../../node_modules/lodash-es/isEqual.js';
8
9
 
9
10
  /*
10
11
  List of coordinates for testing. Around Anchorage.
@@ -130,19 +131,26 @@ var getInitialDrawType = function (field) {
130
131
  };
131
132
  var GeometryInput = function (_a) {
132
133
  var _b, _c, _d, _e, _f, _g, _h, _j;
133
- var field = _a.field, onChange = _a.onChange, value = _a.value;
134
+ var field = _a.field, onChange = _a.onChange, value = _a.value, disabled = _a.disabled;
134
135
  var _k = useState(undefined), map = _k[0], setMapState = _k[1];
135
136
  var _l = useState(undefined), error = _l[0], setError = _l[1];
136
137
  var showGeoJSONInput = useState(false)[0];
137
- var _m = useState(function () {
138
- if (value && typeof value === 'object' && 'type' in value && value.type !== 'FeatureCollection' && value.type !== 'Feature') {
139
- return { type: 'Feature', properties: {}, geometry: value };
138
+ var convertToGeoJSON = function (geo) {
139
+ if (geo && typeof geo === 'object' && 'type' in geo && geo.type !== 'FeatureCollection' && geo.type !== 'Feature') {
140
+ return { type: 'Feature', properties: {}, geometry: geo };
140
141
  }
141
- if (value && typeof value === 'object' && 'type' in value && value.type === 'Feature') {
142
- return value;
142
+ if (geo && typeof geo === 'object' && 'type' in geo && geo.type === 'Feature') {
143
+ return geo;
143
144
  }
144
145
  return undefined;
145
- }), geojson = _m[0], setGeojson = _m[1];
146
+ };
147
+ var _m = useState(convertToGeoJSON(value)), geojson = _m[0], setGeojson = _m[1];
148
+ useEffect(function () {
149
+ if (!isEqual(geojson, convertToGeoJSON(value))) {
150
+ console.log('SETTING GEOJSON');
151
+ setGeojson(convertToGeoJSON(value));
152
+ }
153
+ }, [value]);
146
154
  var geomField = field;
147
155
  var drawEnabled = ((_b = geomField.settings) === null || _b === void 0 ? void 0 : _b.drawEnabled) !== false;
148
156
  var drawPointEnabled = ((_c = geomField.settings) === null || _c === void 0 ? void 0 : _c.drawPointEnabled) === true && drawEnabled;
@@ -385,7 +393,7 @@ var GeometryInput = function (_a) {
385
393
  };
386
394
  // ---- JSX Return (Reverting Button ClassNames and removing disabled) ----
387
395
  return (React__default.createElement("div", null,
388
- React__default.createElement(FieldLabel, __assign({}, field)),
396
+ React__default.createElement(FieldLabel, { field: field, disabled: disabled, value: value, onChange: onChange }),
389
397
  React__default.createElement("div", { className: "relative z-0" },
390
398
  drawEnabled && (drawPolygonEnabled || drawPathEnabled || drawPointEnabled) && (React__default.createElement("div", { className: "absolute z-20 top-4 right-4 flex flex-col gap-2" },
391
399
  drawPointEnabled && (React__default.createElement("div", { className: "tooltip-container relative group" },
@@ -416,6 +424,7 @@ var GeometryInput = function (_a) {
416
424
  React__default.createElement(Button, { onClick: clearShape, className: "p-2 rounded-lg shadow-lg bg-red-500 hover:bg-red-600 text-white w-10 h-10 flex items-center justify-center", "aria-label": "Clear Shape" },
417
425
  React__default.createElement(TrashIcon, { className: "w-5 h-5" }),
418
426
  React__default.createElement("span", { className: "tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none" }, "Clear Shape")))))),
427
+ disabled && (React__default.createElement("div", { className: "absolute z-50 bg-white bg-opacity-20 cursor-not-allowed top-0 right-0 left-0 bottom-0" })),
419
428
  React__default.createElement(OpenLayersMapComponent, __assign({}, MAP_CONFIG, { setState: setMapState })),
420
429
  showCoordinateInput && (React__default.createElement("div", { className: "mt-4" },
421
430
  React__default.createElement("div", { className: "flex justify-between items-center mb-2 flex-wrap gap-y-2" },
@@ -430,9 +439,9 @@ var GeometryInput = function (_a) {
430
439
  drawPolygonEnabled && React__default.createElement(Button, { onClick: function () { applyShapeType(EMapShape.polygon); }, className: "px-3 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-xs flex items-center gap-1" },
431
440
  React__default.createElement(SquareIcon, { className: "w-3 h-3 rotate-45" }),
432
441
  "Create Polygon")))),
433
- React__default.createElement(TextArea, { error: error, className: 'min-h-[100px] bg-slate-50 rounded-lg shadow-inner font-mono text-sm', id: "".concat(field.id, "-coordinates"), testId: "".concat(field.id, "-coordinates"), value: coordinates, onChange: handleCoordinatesChange, placeholder: '...', "aria-label": "Coordinates Input" }),
442
+ React__default.createElement(TextArea, { error: error, disabled: disabled, className: 'min-h-[100px] bg-slate-50 rounded-lg shadow-inner font-mono text-sm', id: "".concat(field.id, "-coordinates"), testId: "".concat(field.id, "-coordinates"), value: coordinates, onChange: handleCoordinatesChange, placeholder: '...', "aria-label": "Coordinates Input" }),
434
443
  error && React__default.createElement("p", { className: "text-red-600 text-xs mt-1" }, error))),
435
- showGeoJSONInput && React__default.createElement(TextArea, { error: error, className: '...', id: field.id + '-debug', testId: field.id + '-debug', label: React__default.createElement(FieldLabel, __assign({}, field, { label: "Debug GeoJSON Feature State" })), value: JSON.stringify(value, null, 2) }))));
444
+ showGeoJSONInput && React__default.createElement(TextArea, { error: error, className: '...', id: field.id + '-debug', testId: field.id + '-debug', label: React__default.createElement(FieldLabel, { field: __assign(__assign({}, field), { label: 'Debug GeoJSON Feature State' }), disabled: disabled }), value: JSON.stringify(value, null, 2) }))));
436
445
  };
437
446
 
438
447
  export { GeometryInput, GeometryInput as default };