@nnkogift/dhis2-form-utils-dhis2-ui 0.1.0-alpha.1 → 0.1.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -510,7 +510,7 @@ function D2ImageField({ control }) {
510
510
  ] });
511
511
  }
512
512
 
513
- // ../../packages/map/dist/coordinateValue.js
513
+ // ../../packages/map/src/coordinateValue.ts
514
514
  var LNG_MIN = -180;
515
515
  var LNG_MAX = 180;
516
516
  var LAT_MIN = -90;
@@ -535,7 +535,7 @@ function joinCoordinateValue(lng, lat) {
535
535
  return JSON.stringify([lng, lat]);
536
536
  }
537
537
 
538
- // ../../packages/map/dist/geojsonValue.js
538
+ // ../../packages/map/src/geojsonValue.ts
539
539
  var GEOMETRY_TYPES = /* @__PURE__ */ new Set([
540
540
  "Point",
541
541
  "MultiPoint",
@@ -566,7 +566,7 @@ function stringifyGeojsonGeometry(geometry) {
566
566
  return JSON.stringify(geometry);
567
567
  }
568
568
 
569
- // ../../packages/map/dist/defaultMapStyle.js
569
+ // ../../packages/map/src/defaultMapStyle.ts
570
570
  var defaultMapStyle = {
571
571
  version: 8,
572
572
  sources: {
@@ -607,8 +607,6 @@ function useMapLibreMap({ style }) {
607
607
  }, []);
608
608
  return { containerRef, map };
609
609
  }
610
-
611
- // ../../packages/map/dist/CoordinateMapPicker.js
612
610
  function CoordinateMapPicker({
613
611
  value,
614
612
  onChange,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/fields/widgets/TextField.tsx","../src/fields/widgets/LongTextField.tsx","../src/fields/widgets/NumericFields.tsx","../src/fields/widgets/DateFields.tsx","../src/fields/widgets/ChoiceFields.tsx","../src/fields/widgets/OrgUnitField.tsx","../src/fields/widgets/FileFields.tsx","../../../packages/map/src/coordinateValue.ts","../../../packages/map/src/geojsonValue.ts","../../../packages/map/src/defaultMapStyle.ts","../../../packages/map/src/useMapLibreMap.ts","../../../packages/map/src/CoordinateMapPicker.tsx","../../../packages/map/src/GeoJsonMapEditor.tsx","../src/fields/widgets/MapFields.tsx","../src/fields/widgets/UnsupportedField.tsx","../src/fields/D2Field.tsx","../src/components/FormSection.tsx","../src/components/FormFeedback.tsx"],"names":["resolveFieldValidation","jsx","InputField","TextAreaField","CalendarInput","computeAgeFromDob","useMemo","Field","Radio","CheckboxField","jsxs","SingleSelectField","SingleSelectOption","parseMultiTextValue","MultiSelectField","joinMultiTextValue","MultiSelectOption","useOrgUnitPickerContext","useOrganisationUnitsQuery","Button","OrganisationUnitTree","useFileResourceUpload","useState","FileInputField","useConfig","useRef","useEffect","MapLibreMap","NavigationControl","Marker","TerraDrawPointMode","TerraDrawLineStringMode","TerraDrawPolygonMode","TerraDraw","TerraDrawMapLibreGLAdapter","useFieldControl","useSectionState","Fragment","NoticeBox","useFormFeedback"],"mappings":"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","file":"index.cjs","sourcesContent":["import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2TextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import { TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2LongTextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <TextAreaField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { InputField } from '@dhis2/ui';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport { D2TextField } from './TextField';\n\nfunction D2TypedTextField({ control, type }: WidgetProps & { type?: 'email' | 'tel' | 'number' }) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type={type}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2EmailField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"email\" />;\n}\n\nexport function D2PhoneField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"tel\" />;\n}\n\nexport function D2NumberField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2IntegerField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2PercentageField({ control }: WidgetProps) {\n return (\n <D2TextField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n label: `${control.fieldConfig.label} (%)`,\n },\n }}\n />\n );\n}\n","import { CalendarInput, InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { computeAgeFromDob, resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nconst todayIso = (): string => new Date().toISOString().slice(0, 10);\n\ntype DateSelectPayload = {\n calendarDateString?: string;\n} | null;\n\nconst readDatePart = (value: string): string => {\n if (!value) return '';\n return value.includes('T') ? value.slice(0, 10) : value;\n};\n\nconst readTimePart = (value: string): string => {\n if (!value.includes('T')) return '';\n return value.slice(11, 16);\n};\n\nexport function D2DateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const dateValue = field.value as string;\n\n return (\n <CalendarInput\n name={field.name}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={dateValue || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n field.onChange(payload?.calendarDateString ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2TimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2DateTimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const datePart = readDatePart(value);\n const timePart = readTimePart(value);\n\n const commit = (nextDate: string, nextTime: string) => {\n if (!nextDate && !nextTime) {\n field.onChange('');\n return;\n }\n field.onChange(`${nextDate}T${nextTime || '00:00'}`);\n };\n\n return (\n <div>\n <CalendarInput\n name={`${field.name}-date`}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={datePart || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n commit(payload?.calendarDateString ?? '', timePart);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-time`}\n value={timePart}\n label={`${fieldConfig.label} (time)`}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n onChange={({ value: nextTime }) => {\n commit(datePart, nextTime ?? '');\n }}\n onBlur={field.onBlur}\n />\n </div>\n );\n}\n\nexport function D2AgeField({ control }: WidgetProps) {\n const age = computeAgeFromDob(control.field.value as string);\n const helpText = [control.fieldConfig.description, age ? `Age: ${age} years` : undefined]\n .filter(Boolean)\n .join(' · ');\n\n return (\n <D2DateField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n description: helpText || control.fieldConfig.description,\n },\n }}\n />\n );\n}\n","import {\n CheckboxField,\n Field,\n MultiSelectField,\n MultiSelectOption,\n Radio,\n SingleSelectField,\n SingleSelectOption,\n} from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n joinMultiTextValue,\n parseMultiTextValue,\n resolveFieldValidation,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport { useMemo } from 'react';\n\nconst BOOLEAN_OPTIONS = [\n { label: 'Yes', value: 'true' },\n { label: 'No', value: 'false' },\n] as const;\n\nconst RADIO_RENDER_HINTS = new Set(['RADIO', 'VERTICAL_RADIOBUTTONS', 'HORIZONTAL_RADIOBUTTONS']);\n\nexport function D2BooleanField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = useMemo(() => control, [control]);\n const { validationText, hasError, hasWarning } = useMemo(\n () => resolveFieldValidation(control),\n [control]\n );\n\n return (\n <Field\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n warning={hasWarning}\n error={hasError}\n required={isMandatory}\n disabled={isDisabled}\n validationText={validationText}\n >\n <div\n style={{\n display: 'flex',\n gap: 16,\n }}\n >\n {BOOLEAN_OPTIONS.map((option) => (\n <Radio\n key={option.label}\n name={field.name}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n ))}\n </div>\n </Field>\n );\n}\n\nexport function D2TrueOnlyField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = useMemo(() => control, [control]);\n const { validationText, hasError, hasWarning } = useMemo(\n () => resolveFieldValidation(control),\n [control]\n );\n\n return (\n <CheckboxField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n checked={field.value === 'true'}\n onChange={({ checked }) => {\n field.onChange(checked ? 'true' : '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2SelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map(\n (option) => ({\n label: option.label,\n value: option.code,\n })\n );\n\n if (fieldConfig.renderTypeHint && RADIO_RENDER_HINTS.has(fieldConfig.renderTypeHint)) {\n return (\n <fieldset>\n <legend>{fieldConfig.label}</legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {options.map((option) => (\n <Radio\n key={option.value}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n />\n ))}\n {validationText ? <p>{validationText}</p> : null}\n </fieldset>\n );\n }\n\n return (\n <SingleSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={field.value as string}\n onChange={({ selected }) => {\n field.onChange(selected);\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <SingleSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </SingleSelectField>\n );\n}\n\nexport function D2MultiSelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = useMemo(\n () =>\n (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map((option) => ({\n label: option.label,\n value: option.code,\n })),\n [control.visibleOptions, fieldConfig.optionSet?.options]\n );\n const selected = parseMultiTextValue(field.value as string);\n\n return (\n <MultiSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={selected}\n onChange={({ selected: nextSelected }) => {\n field.onChange(joinMultiTextValue(nextSelected));\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <MultiSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </MultiSelectField>\n );\n}\n","import { Button, OrganisationUnitTree } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n resolveFieldValidation,\n useOrgUnitPickerContext,\n useOrganisationUnitsQuery,\n} from '@nnkogift/dhis2-form-utils-hooks';\n\n// fallow-ignore-next-line complexity\nexport function D2OrgUnitField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const pickerContext = useOrgUnitPickerContext();\n const { organisationUnits, roots, loading, error } = useOrganisationUnitsQuery(\n pickerContext?.roots\n );\n\n const value = field.value as string;\n const selectedUnit = organisationUnits.find((ou) => ou.id === value);\n const selectedLabel = selectedUnit?.displayName ?? value;\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {selectedLabel ? (\n <p>\n Selected: {selectedLabel}{' '}\n <Button\n small\n disabled={isDisabled}\n onClick={() => {\n field.onChange('');\n }}\n >\n Clear\n </Button>\n </p>\n ) : null}\n {roots.length > 0 ? (\n <OrganisationUnitTree\n roots={roots}\n singleSelection\n disableSelection={isDisabled}\n initiallyExpanded={roots.map((id) => `/${id}`)}\n onChange={({ id }) => {\n field.onChange(id);\n }}\n />\n ) : loading ? (\n <p>Loading organisation units…</p>\n ) : error ? (\n <p>Failed to load organisation units.</p>\n ) : null}\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n","import { useConfig } from '@dhis2/app-runtime';\nimport { FileInputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation, useFileResourceUpload } from '@nnkogift/dhis2-form-utils-hooks';\nimport { useState } from 'react';\n\nfunction useFileFieldUpload(onChange: (id: string) => void) {\n const { upload, uploading, error } = useFileResourceUpload();\n const [uploadError, setUploadError] = useState<string | undefined>(undefined);\n\n const handleFiles = (files: FileList) => {\n const file = files.item(0);\n if (!file) return;\n // fallow-ignore-next-line code-duplication\n setUploadError(undefined);\n upload(file)\n .then((result) => {\n onChange(result.id);\n })\n .catch((uploadFailure: unknown) => {\n setUploadError(\n uploadFailure instanceof Error ? uploadFailure.message : 'Upload failed'\n );\n });\n };\n\n return { handleFiles, uploading, uploadError: uploadError ?? error?.message };\n}\n\n// fallow-ignore-next-line complexity\nexport function D2FileField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const { handleFiles, uploading, uploadError } = useFileFieldUpload(field.onChange);\n\n return (\n <FileInputField\n name={field.name}\n label={fieldConfig.label}\n helpText={\n uploadError ??\n fieldConfig.description ??\n (uploading ? 'Uploading…' : 'Max size depends on server configuration.')\n }\n required={isMandatory}\n disabled={isDisabled || uploading}\n warning={hasWarning}\n error={hasError || Boolean(uploadError)}\n validationText={validationText}\n buttonLabel={(field.value as string) ? 'Replace file' : 'Select file'}\n onChange={({ files }) => {\n handleFiles(files);\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\n// fallow-ignore-next-line complexity\nexport function D2ImageField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const { handleFiles, uploading, uploadError } = useFileFieldUpload(field.onChange);\n const { baseUrl } = useConfig();\n const value = field.value as string;\n\n return (\n <div>\n <FileInputField\n name={field.name}\n label={fieldConfig.label}\n accept=\"image/*\"\n helpText={\n uploadError ??\n fieldConfig.description ??\n (uploading ? 'Uploading…' : 'Max size depends on server configuration.')\n }\n required={isMandatory}\n disabled={isDisabled || uploading}\n warning={hasWarning}\n error={hasError || Boolean(uploadError)}\n validationText={validationText}\n buttonLabel={value ? 'Replace image' : 'Select image'}\n onChange={({ files }) => {\n handleFiles(files);\n }}\n onBlur={field.onBlur}\n />\n {value ? (\n <img\n src={`${baseUrl}/api/fileResources/${value}/data`}\n alt={fieldConfig.label}\n style={{ maxWidth: '200px', maxHeight: '200px', marginTop: '8px' }}\n />\n ) : null}\n </div>\n );\n}\n","export type CoordinateValue = { lng: number; lat: number };\n\nconst LNG_MIN = -180;\nconst LNG_MAX = 180;\nconst LAT_MIN = -90;\nconst LAT_MAX = 90;\n\n/**\n * Parses a DHIS2 `COORDINATE` value-type string, wire format `\"[lng,lat]\"`\n * (matches DHIS2 tracker API's coordinate/GeoJSON Point ordering).\n * Returns `null` for empty, malformed, or out-of-range input.\n */\nexport function parseCoordinateValue(value: string): CoordinateValue | null {\n if (!value) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n if (!Array.isArray(parsed) || parsed.length !== 2) return null;\n const lng: unknown = parsed[0];\n const lat: unknown = parsed[1];\n if (typeof lng !== 'number' || typeof lat !== 'number') return null;\n if (!Number.isFinite(lng) || !Number.isFinite(lat)) return null;\n if (lng < LNG_MIN || lng > LNG_MAX || lat < LAT_MIN || lat > LAT_MAX) return null;\n\n return { lng, lat };\n}\n\n/** Serializes a longitude/latitude pair to the DHIS2 `\"[lng,lat]\"` wire format. */\nexport function joinCoordinateValue(lng: number, lat: number): string {\n return JSON.stringify([lng, lat]);\n}\n","import type { Geometry } from 'geojson';\n\n/**\n * DHIS2 `GEOJSON` value-type strings hold a single GeoJSON *geometry*\n * (Point/LineString/Polygon/...), not a full `Feature` or `FeatureCollection`.\n *\n * This assumption was NOT conclusively verified against DHIS2's own API docs\n * during planning — verify against a live DHIS2 instance (create a\n * GEOJSON-valueType data element, submit a value via Capture/Tracker Capture,\n * inspect the stored/returned JSON shape) before treating this as final. If\n * DHIS2 actually expects/returns a `Feature` wrapper, this module's\n * parse/stringify pair — and the `buildFieldSchema`/`buildTeaFieldSchema`\n * validators built on top of it — need a follow-up patch.\n */\n\nconst GEOMETRY_TYPES = new Set([\n 'Point',\n 'MultiPoint',\n 'LineString',\n 'MultiLineString',\n 'Polygon',\n 'MultiPolygon',\n 'GeometryCollection',\n]);\n\nfunction isGeometryShape(value: unknown): value is Geometry {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as { type?: unknown; coordinates?: unknown; geometries?: unknown };\n if (typeof candidate.type !== 'string' || !GEOMETRY_TYPES.has(candidate.type)) return false;\n if (candidate.type === 'GeometryCollection') return Array.isArray(candidate.geometries);\n return Array.isArray(candidate.coordinates);\n}\n\n/** Parses a `GEOJSON` value-type string into a GeoJSON geometry, or `null` if invalid/empty. */\nexport function parseGeojsonGeometry(value: string): Geometry | null {\n if (!value) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n return isGeometryShape(parsed) ? parsed : null;\n}\n\n/** Serializes a GeoJSON geometry to the DHIS2 `GEOJSON` value-type wire format. */\nexport function stringifyGeojsonGeometry(geometry: Geometry): string {\n return JSON.stringify(geometry);\n}\n\n/** Returns `true` when `value` is a valid, non-empty GeoJSON geometry string. */\nexport function isValidGeojsonGeometry(value: string): boolean {\n return parseGeojsonGeometry(value) !== null;\n}\n","import type { StyleSpecification } from 'maplibre-gl';\n\n/**\n * Free, no-API-key OpenStreetMap raster basemap used as the default `mapStyle`\n * for `CoordinateMapPicker`/`GeoJsonMapEditor`.\n *\n * OSM's tile usage policy (https://operations.osmfoundation.org/policies/tiles/)\n * disallows heavy automated/production traffic against `tile.openstreetmap.org`\n * without self-hosting or a paid provider. Swap this out via the `mapStyle` prop\n * (a full MapLibre `StyleSpecification` or a style URL) before deploying a\n * production app at scale — e.g. MapTiler, Protomaps, or a DHIS2-hosted tile\n * server. This default exists so the widgets work out of the box in\n * development, tests, and Storybook.\n */\nexport const defaultMapStyle: StyleSpecification = {\n version: 8,\n sources: {\n osm: {\n type: 'raster',\n tiles: ['https://tile.openstreetmap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '&copy; OpenStreetMap contributors',\n },\n },\n layers: [\n {\n id: 'osm',\n type: 'raster',\n source: 'osm',\n },\n ],\n};\n","import { Map as MapLibreMap, NavigationControl, type StyleSpecification } from 'maplibre-gl';\nimport { useEffect, useRef, useState, type RefObject } from 'react';\n\nexport type UseMapLibreMapOptions = {\n style: StyleSpecification | string;\n};\n\nexport type UseMapLibreMapResult = {\n containerRef: RefObject<HTMLDivElement>;\n map: MapLibreMap | null;\n};\n\n/**\n * Creates a MapLibre GL map instance on a ref'd container and tears it down\n * on unmount. Shared by `CoordinateMapPicker` and `GeoJsonMapEditor`.\n *\n * `map` stays `null` until the map's `'load'` event fires — consumers that\n * add sources/layers (e.g. terra-draw's GeoJSON source) must wait for style\n * load, or MapLibre throws \"Style is not done loading\".\n *\n * The `style` used is the one active when the map is first created — changing\n * `style` on a later render does not re-initialize the map (out of scope for v1).\n */\nexport function useMapLibreMap({ style }: UseMapLibreMapOptions): UseMapLibreMapResult {\n const containerRef = useRef<HTMLDivElement>(null);\n const [map, setMap] = useState<MapLibreMap | null>(null);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n const instance = new MapLibreMap({\n container: containerRef.current,\n style,\n center: [0, 0],\n zoom: 1,\n });\n instance.addControl(new NavigationControl(), 'top-right');\n instance.once('load', () => {\n setMap(instance);\n });\n\n return () => {\n instance.remove();\n setMap(null);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { containerRef, map };\n}\n","import { Marker, type MapMouseEvent } from 'maplibre-gl';\nimport { useEffect, useRef } from 'react';\nimport { joinCoordinateValue, parseCoordinateValue } from './coordinateValue.js';\nimport { defaultMapStyle } from './defaultMapStyle.js';\nimport type { MapPickerProps } from './types.js';\nimport { useMapLibreMap } from './useMapLibreMap.js';\n\nexport type CoordinateMapPickerProps = MapPickerProps;\n\n/**\n * Single draggable/click-to-place marker over a MapLibre map. Renders only the\n * map canvas — the accessible numeric lng/lat inputs are adapter-owned (each\n * UI kit composes this alongside its own number inputs bound to the same\n * `value`/`onChange`).\n */\nexport function CoordinateMapPicker({\n value,\n onChange,\n mapStyle,\n disabled,\n className,\n}: CoordinateMapPickerProps) {\n const { containerRef, map } = useMapLibreMap({ style: mapStyle ?? defaultMapStyle });\n const markerRef = useRef<Marker | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!map) return;\n\n const ensureMarker = (lng: number, lat: number) => {\n if (markerRef.current) {\n markerRef.current.setLngLat([lng, lat]);\n return markerRef.current;\n }\n const marker = new Marker({ draggable: !disabled }).setLngLat([lng, lat]).addTo(map);\n marker.on('dragend', () => {\n const lngLat = marker.getLngLat();\n onChangeRef.current(joinCoordinateValue(lngLat.lng, lngLat.lat));\n });\n markerRef.current = marker;\n return marker;\n };\n\n const handleClick = (event: MapMouseEvent) => {\n if (disabled) return;\n ensureMarker(event.lngLat.lng, event.lngLat.lat);\n onChangeRef.current(joinCoordinateValue(event.lngLat.lng, event.lngLat.lat));\n };\n\n map.on('click', handleClick);\n\n const parsed = parseCoordinateValue(value);\n if (parsed) {\n ensureMarker(parsed.lng, parsed.lat);\n map.setCenter([parsed.lng, parsed.lat]);\n }\n\n return () => {\n map.off('click', handleClick);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, disabled]);\n\n useEffect(() => {\n if (!markerRef.current) return;\n const parsed = parseCoordinateValue(value);\n if (parsed) {\n markerRef.current.setLngLat([parsed.lng, parsed.lat]);\n }\n }, [value]);\n\n useEffect(() => {\n markerRef.current?.setDraggable(!disabled);\n }, [disabled]);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ width: '100%', height: '300px' }}\n aria-hidden=\"true\"\n />\n );\n}\n","import { useEffect, useRef } from 'react';\nimport {\n TerraDraw,\n TerraDrawLineStringMode,\n TerraDrawPointMode,\n TerraDrawPolygonMode,\n type GeoJSONStoreGeometries,\n} from 'terra-draw';\nimport { TerraDrawMapLibreGLAdapter } from 'terra-draw-maplibre-gl-adapter';\nimport { defaultMapStyle } from './defaultMapStyle.js';\nimport { parseGeojsonGeometry, stringifyGeojsonGeometry } from './geojsonValue.js';\nimport type { MapPickerProps } from './types.js';\nimport { useMapLibreMap } from './useMapLibreMap.js';\n\nexport type GeoJsonDrawMode = 'point' | 'linestring' | 'polygon';\n\nexport type GeoJsonMapEditorProps = MapPickerProps & {\n /** Draw modes offered to the user. Defaults to all three. */\n modes?: GeoJsonDrawMode[];\n};\n\nconst DEFAULT_MODES: GeoJsonDrawMode[] = ['point', 'linestring', 'polygon'];\n\nfunction createDrawMode(mode: GeoJsonDrawMode) {\n switch (mode) {\n case 'point':\n return new TerraDrawPointMode();\n case 'linestring':\n return new TerraDrawLineStringMode();\n case 'polygon':\n return new TerraDrawPolygonMode();\n }\n}\n\n/**\n * MapLibre + terra-draw point/line/polygon editor for a single GeoJSON\n * geometry (DHIS2 `GEOJSON` DE/TEA value is one geometry, not a\n * FeatureCollection — starting a new draw clears any existing feature).\n * Renders only the map + draw-mode controls — the raw-JSON textarea fallback\n * is adapter-owned.\n */\nexport function GeoJsonMapEditor({\n value,\n onChange,\n mapStyle,\n disabled,\n className,\n modes = DEFAULT_MODES,\n}: GeoJsonMapEditorProps) {\n const { containerRef, map } = useMapLibreMap({ style: mapStyle ?? defaultMapStyle });\n const drawRef = useRef<TerraDraw | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!map) return;\n\n const draw = new TerraDraw({\n adapter: new TerraDrawMapLibreGLAdapter({ map }),\n modes: modes.map(createDrawMode),\n });\n drawRef.current = draw;\n draw.start();\n\n const initial = parseGeojsonGeometry(value);\n if (initial) {\n draw.addFeatures([\n { type: 'Feature', geometry: initial as GeoJSONStoreGeometries, properties: {} },\n ]);\n }\n\n const handleFinish = (id: Parameters<typeof draw.getSnapshotFeature>[0]) => {\n const feature = draw.getSnapshotFeature(id);\n if (feature) {\n onChangeRef.current(stringifyGeojsonGeometry(feature.geometry));\n }\n };\n draw.on('finish', handleFinish);\n\n return () => {\n draw.off('finish', handleFinish);\n try {\n // terra-draw's adapter can throw during its own teardown if the underlying\n // MapLibre map is torn down first (e.g. rapid unmount) — a widget unmounting\n // must never crash the host app, so this is defensive, not expected to fire.\n draw.stop();\n } catch {\n // Intentionally ignored — see comment above.\n }\n drawRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map]);\n\n const startDrawing = (mode: GeoJsonDrawMode) => {\n const draw = drawRef.current;\n if (!draw || disabled) return;\n draw.clear();\n draw.setMode(mode);\n };\n\n return (\n <div className={className}>\n <div ref={containerRef} style={{ width: '100%', height: '300px' }} aria-hidden=\"true\" />\n {!disabled ? (\n <div role=\"group\" aria-label=\"Draw geometry\">\n {modes.map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => {\n startDrawing(mode);\n }}\n >\n Draw {mode}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","// fallow-ignore-file code-duplication\nimport { InputField, TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n CoordinateMapPicker,\n GeoJsonMapEditor,\n joinCoordinateValue,\n parseCoordinateValue,\n parseGeojsonGeometry,\n stringifyGeojsonGeometry,\n} from '@nnkogift/dhis2-form-utils-map';\nimport 'maplibre-gl/dist/maplibre-gl.css';\nimport { useEffect, useState } from 'react';\n\n// fallow-ignore-next-line complexity\nexport function D2CoordinateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n\n // Local text buffers, not derived directly from field.value on every render — a controlled\n // number input driven straight off `parseCoordinateValue(value)` rejects intermediate\n // keystrokes (e.g. typing \"-\" alone parses to NaN and gets silently dropped, so a user can\n // never type a negative number). These stay in sync with external value changes (map clicks,\n // RHF reset) via the effect below, but aren't clobbered by the widget's own in-progress typing.\n const [lngText, setLngText] = useState(() => parseCoordinateValue(value)?.lng.toString() ?? '');\n const [latText, setLatText] = useState(() => parseCoordinateValue(value)?.lat.toString() ?? '');\n\n useEffect(() => {\n const parsed = parseCoordinateValue(value);\n setLngText(parsed ? parsed.lng.toString() : '');\n setLatText(parsed ? parsed.lat.toString() : '');\n }, [value]);\n\n const commit = (lngRaw: string, latRaw: string) => {\n const lng = parseFloat(lngRaw);\n const lat = parseFloat(latRaw);\n if (Number.isFinite(lng) && Number.isFinite(lat)) {\n field.onChange(joinCoordinateValue(lng, lat));\n }\n };\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n <CoordinateMapPicker value={value} onChange={field.onChange} disabled={isDisabled} />\n <InputField\n name={`${field.name}-lng`}\n type=\"number\"\n label=\"Longitude\"\n value={lngText}\n disabled={isDisabled}\n onChange={({ value: next }) => {\n const text = next ?? '';\n setLngText(text);\n commit(text, latText);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-lat`}\n type=\"number\"\n label=\"Latitude\"\n value={latText}\n disabled={isDisabled}\n onChange={({ value: next }) => {\n const text = next ?? '';\n setLatText(text);\n commit(lngText, text);\n }}\n onBlur={field.onBlur}\n />\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n\n// fallow-ignore-next-line complexity\nexport function D2GeoJsonField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const [textValue, setTextValue] = useState(value);\n const [textError, setTextError] = useState<string | undefined>(undefined);\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n <GeoJsonMapEditor\n value={value}\n onChange={(next) => {\n field.onChange(next);\n const geometry = parseGeojsonGeometry(next);\n setTextValue(geometry ? JSON.stringify(geometry, null, 2) : next);\n setTextError(undefined);\n }}\n disabled={isDisabled}\n />\n <TextAreaField\n name={`${field.name}-geometry`}\n label=\"Geometry (JSON)\"\n value={textValue}\n disabled={isDisabled}\n warning={Boolean(textError)}\n validationText={textError}\n onChange={({ value: next }) => {\n setTextValue(next ?? '');\n }}\n onBlur={() => {\n if (!textValue) {\n field.onChange('');\n setTextError(undefined);\n return;\n }\n const geometry = parseGeojsonGeometry(textValue);\n if (geometry) {\n field.onChange(stringifyGeojsonGeometry(geometry));\n setTextError(undefined);\n } else {\n setTextError('Not a valid GeoJSON geometry');\n }\n field.onBlur();\n }}\n />\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n","import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2UnsupportedField({ control }: WidgetProps) {\n const { fieldConfig, field, widgetKind, isMandatory } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={`Widget not yet implemented: ${widgetKind}`}\n required={isMandatory}\n disabled\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","// fallow-ignore-file code-duplication\nimport {\n type FieldControlInput,\n useFieldControl,\n type WidgetProps,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport type { WidgetKind } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ComponentType } from 'react';\nimport {\n D2AgeField,\n D2BooleanField,\n D2CoordinateField,\n D2DateField,\n D2DateTimeField,\n D2EmailField,\n D2FileField,\n D2GeoJsonField,\n D2ImageField,\n D2IntegerField,\n D2LongTextField,\n D2MultiSelectField,\n D2NumberField,\n D2OrgUnitField,\n D2PercentageField,\n D2PhoneField,\n D2SelectField,\n D2TextField,\n D2TimeField,\n D2TrueOnlyField,\n D2UnsupportedField,\n} from './widgets';\n\nexport type D2FieldProps = {\n field: FieldControlInput;\n};\n\nexport type D2FieldWidgetProps = WidgetProps;\n\nconst WIDGET_BY_KIND: Record<WidgetKind, ComponentType<WidgetProps>> = {\n text: D2TextField,\n longText: D2LongTextField,\n email: D2EmailField,\n phone: D2PhoneField,\n number: D2NumberField,\n integer: D2IntegerField,\n percentage: D2PercentageField,\n boolean: D2BooleanField,\n trueOnly: D2TrueOnlyField,\n date: D2DateField,\n time: D2TimeField,\n age: D2AgeField,\n select: D2SelectField,\n multiSelect: D2MultiSelectField,\n datetime: D2DateTimeField,\n coordinate: D2CoordinateField,\n geojson: D2GeoJsonField,\n orgUnit: D2OrgUnitField,\n file: D2FileField,\n image: D2ImageField,\n unsupported: D2UnsupportedField,\n};\n\n/** Dispatches an already-resolved `FieldControlReturn` to its widget component, without re-deriving field control state. Reused by consumers that build their own chrome (labels, badges, ghost placeholders) around a field. */\nexport function D2FieldWidget({ control }: D2FieldWidgetProps) {\n const Widget = WIDGET_BY_KIND[control.widgetKind];\n return <Widget control={control} />;\n}\n\nexport function D2Field({ field }: D2FieldProps) {\n const fieldControl = useFieldControl({ ...field });\n\n if (fieldControl.isHidden) return null;\n\n return <D2FieldWidget control={fieldControl} />;\n}\n","import { useSectionState } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ReactNode } from 'react';\n\nexport type FormSectionProps = {\n sectionId: string;\n children: ReactNode;\n};\n\nexport function FormSection({ sectionId, children }: FormSectionProps) {\n const state = useSectionState(sectionId);\n\n if (state.hidden) {\n return null;\n }\n\n return <>{children}</>;\n}\n","import { NoticeBox } from '@dhis2/ui';\nimport { useFormFeedback } from '@nnkogift/dhis2-form-utils-hooks';\n\ntype FeedbackItem = ReturnType<typeof useFormFeedback>[string];\n\nfunction FeedbackPanel({ title, items }: { title: string; items: FeedbackItem[] }) {\n if (!items.length) {\n return null;\n }\n\n return (\n <div style={{ marginBottom: 'var(--spacers-dp16)' }}>\n <h3 style={{ margin: '0 0 var(--spacers-dp8)' }}>{title}</h3>\n {items.map((item) => (\n <NoticeBox key={`${item.location}:${item.content}`} title={item.content}>\n {item.value ? (\n <>\n <strong>{item.content}</strong>: {item.value}\n </>\n ) : (\n item.content\n )}\n </NoticeBox>\n ))}\n </div>\n );\n}\n\nexport function FormFeedback() {\n const feedback = useFormFeedback();\n const items = Object.values(feedback);\n const feedbackItems = items.filter((item) => item.location === 'feedback');\n const indicatorItems = items.filter((item) => item.location === 'indicators');\n\n if (!feedbackItems.length && !indicatorItems.length) {\n return null;\n }\n\n return (\n <div>\n <FeedbackPanel title=\"Feedback\" items={feedbackItems} />\n <FeedbackPanel title=\"Program indicators\" items={indicatorItems} />\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/fields/widgets/TextField.tsx","../src/fields/widgets/LongTextField.tsx","../src/fields/widgets/NumericFields.tsx","../src/fields/widgets/DateFields.tsx","../src/fields/widgets/ChoiceFields.tsx","../src/fields/widgets/OrgUnitField.tsx","../src/fields/widgets/FileFields.tsx","../../../packages/map/src/coordinateValue.ts","../../../packages/map/src/geojsonValue.ts","../../../packages/map/src/defaultMapStyle.ts","../../../packages/map/src/useMapLibreMap.ts","../../../packages/map/src/CoordinateMapPicker.tsx","../../../packages/map/src/GeoJsonMapEditor.tsx","../src/fields/widgets/MapFields.tsx","../src/fields/widgets/UnsupportedField.tsx","../src/fields/D2Field.tsx","../src/components/FormSection.tsx","../src/components/FormFeedback.tsx"],"names":["resolveFieldValidation","jsx","InputField","TextAreaField","CalendarInput","computeAgeFromDob","useMemo","Field","Radio","CheckboxField","jsxs","SingleSelectField","SingleSelectOption","parseMultiTextValue","MultiSelectField","joinMultiTextValue","MultiSelectOption","useOrgUnitPickerContext","useOrganisationUnitsQuery","Button","OrganisationUnitTree","useFileResourceUpload","useState","FileInputField","useConfig","useRef","useEffect","MapLibreMap","NavigationControl","Marker","TerraDrawPointMode","TerraDrawLineStringMode","TerraDrawPolygonMode","TerraDraw","TerraDrawMapLibreGLAdapter","useFieldControl","useSectionState","Fragment","NoticeBox","useFormFeedback"],"mappings":"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","file":"index.cjs","sourcesContent":["import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2TextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import { TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2LongTextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <TextAreaField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { InputField } from '@dhis2/ui';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport { D2TextField } from './TextField';\n\nfunction D2TypedTextField({ control, type }: WidgetProps & { type?: 'email' | 'tel' | 'number' }) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type={type}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2EmailField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"email\" />;\n}\n\nexport function D2PhoneField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"tel\" />;\n}\n\nexport function D2NumberField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2IntegerField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2PercentageField({ control }: WidgetProps) {\n return (\n <D2TextField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n label: `${control.fieldConfig.label} (%)`,\n },\n }}\n />\n );\n}\n","import { CalendarInput, InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { computeAgeFromDob, resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nconst todayIso = (): string => new Date().toISOString().slice(0, 10);\n\ntype DateSelectPayload = {\n calendarDateString?: string;\n} | null;\n\nconst readDatePart = (value: string): string => {\n if (!value) return '';\n return value.includes('T') ? value.slice(0, 10) : value;\n};\n\nconst readTimePart = (value: string): string => {\n if (!value.includes('T')) return '';\n return value.slice(11, 16);\n};\n\nexport function D2DateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const dateValue = field.value as string;\n\n return (\n <CalendarInput\n name={field.name}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={dateValue || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n field.onChange(payload?.calendarDateString ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2TimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2DateTimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const datePart = readDatePart(value);\n const timePart = readTimePart(value);\n\n const commit = (nextDate: string, nextTime: string) => {\n if (!nextDate && !nextTime) {\n field.onChange('');\n return;\n }\n field.onChange(`${nextDate}T${nextTime || '00:00'}`);\n };\n\n return (\n <div>\n <CalendarInput\n name={`${field.name}-date`}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={datePart || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n commit(payload?.calendarDateString ?? '', timePart);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-time`}\n value={timePart}\n label={`${fieldConfig.label} (time)`}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n onChange={({ value: nextTime }) => {\n commit(datePart, nextTime ?? '');\n }}\n onBlur={field.onBlur}\n />\n </div>\n );\n}\n\nexport function D2AgeField({ control }: WidgetProps) {\n const age = computeAgeFromDob(control.field.value as string);\n const helpText = [control.fieldConfig.description, age ? `Age: ${age} years` : undefined]\n .filter(Boolean)\n .join(' · ');\n\n return (\n <D2DateField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n description: helpText || control.fieldConfig.description,\n },\n }}\n />\n );\n}\n","import {\n CheckboxField,\n Field,\n MultiSelectField,\n MultiSelectOption,\n Radio,\n SingleSelectField,\n SingleSelectOption,\n} from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n joinMultiTextValue,\n parseMultiTextValue,\n resolveFieldValidation,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport { useMemo } from 'react';\n\nconst BOOLEAN_OPTIONS = [\n { label: 'Yes', value: 'true' },\n { label: 'No', value: 'false' },\n] as const;\n\nconst RADIO_RENDER_HINTS = new Set(['RADIO', 'VERTICAL_RADIOBUTTONS', 'HORIZONTAL_RADIOBUTTONS']);\n\nexport function D2BooleanField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = useMemo(() => control, [control]);\n const { validationText, hasError, hasWarning } = useMemo(\n () => resolveFieldValidation(control),\n [control]\n );\n\n return (\n <Field\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n warning={hasWarning}\n error={hasError}\n required={isMandatory}\n disabled={isDisabled}\n validationText={validationText}\n >\n <div\n style={{\n display: 'flex',\n gap: 16,\n }}\n >\n {BOOLEAN_OPTIONS.map((option) => (\n <Radio\n key={option.label}\n name={field.name}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n ))}\n </div>\n </Field>\n );\n}\n\nexport function D2TrueOnlyField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = useMemo(() => control, [control]);\n const { validationText, hasError, hasWarning } = useMemo(\n () => resolveFieldValidation(control),\n [control]\n );\n\n return (\n <CheckboxField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n checked={field.value === 'true'}\n onChange={({ checked }) => {\n field.onChange(checked ? 'true' : '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2SelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map(\n (option) => ({\n label: option.label,\n value: option.code,\n })\n );\n\n if (fieldConfig.renderTypeHint && RADIO_RENDER_HINTS.has(fieldConfig.renderTypeHint)) {\n return (\n <fieldset>\n <legend>{fieldConfig.label}</legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {options.map((option) => (\n <Radio\n key={option.value}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n />\n ))}\n {validationText ? <p>{validationText}</p> : null}\n </fieldset>\n );\n }\n\n return (\n <SingleSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={field.value as string}\n onChange={({ selected }) => {\n field.onChange(selected);\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <SingleSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </SingleSelectField>\n );\n}\n\nexport function D2MultiSelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = useMemo(\n () =>\n (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map((option) => ({\n label: option.label,\n value: option.code,\n })),\n [control.visibleOptions, fieldConfig.optionSet?.options]\n );\n const selected = parseMultiTextValue(field.value as string);\n\n return (\n <MultiSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={selected}\n onChange={({ selected: nextSelected }) => {\n field.onChange(joinMultiTextValue(nextSelected));\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <MultiSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </MultiSelectField>\n );\n}\n","import { Button, OrganisationUnitTree } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n resolveFieldValidation,\n useOrgUnitPickerContext,\n useOrganisationUnitsQuery,\n} from '@nnkogift/dhis2-form-utils-hooks';\n\n// fallow-ignore-next-line complexity\nexport function D2OrgUnitField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const pickerContext = useOrgUnitPickerContext();\n const { organisationUnits, roots, loading, error } = useOrganisationUnitsQuery(\n pickerContext?.roots\n );\n\n const value = field.value as string;\n const selectedUnit = organisationUnits.find((ou) => ou.id === value);\n const selectedLabel = selectedUnit?.displayName ?? value;\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {selectedLabel ? (\n <p>\n Selected: {selectedLabel}{' '}\n <Button\n small\n disabled={isDisabled}\n onClick={() => {\n field.onChange('');\n }}\n >\n Clear\n </Button>\n </p>\n ) : null}\n {roots.length > 0 ? (\n <OrganisationUnitTree\n roots={roots}\n singleSelection\n disableSelection={isDisabled}\n initiallyExpanded={roots.map((id) => `/${id}`)}\n onChange={({ id }) => {\n field.onChange(id);\n }}\n />\n ) : loading ? (\n <p>Loading organisation units…</p>\n ) : error ? (\n <p>Failed to load organisation units.</p>\n ) : null}\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n","import { useConfig } from '@dhis2/app-runtime';\nimport { FileInputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation, useFileResourceUpload } from '@nnkogift/dhis2-form-utils-hooks';\nimport { useState } from 'react';\n\nfunction useFileFieldUpload(onChange: (id: string) => void) {\n const { upload, uploading, error } = useFileResourceUpload();\n const [uploadError, setUploadError] = useState<string | undefined>(undefined);\n\n const handleFiles = (files: FileList) => {\n const file = files.item(0);\n if (!file) return;\n // fallow-ignore-next-line code-duplication\n setUploadError(undefined);\n upload(file)\n .then((result) => {\n onChange(result.id);\n })\n .catch((uploadFailure: unknown) => {\n setUploadError(\n uploadFailure instanceof Error ? uploadFailure.message : 'Upload failed'\n );\n });\n };\n\n return { handleFiles, uploading, uploadError: uploadError ?? error?.message };\n}\n\n// fallow-ignore-next-line complexity\nexport function D2FileField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const { handleFiles, uploading, uploadError } = useFileFieldUpload(field.onChange);\n\n return (\n <FileInputField\n name={field.name}\n label={fieldConfig.label}\n helpText={\n uploadError ??\n fieldConfig.description ??\n (uploading ? 'Uploading…' : 'Max size depends on server configuration.')\n }\n required={isMandatory}\n disabled={isDisabled || uploading}\n warning={hasWarning}\n error={hasError || Boolean(uploadError)}\n validationText={validationText}\n buttonLabel={(field.value as string) ? 'Replace file' : 'Select file'}\n onChange={({ files }) => {\n handleFiles(files);\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\n// fallow-ignore-next-line complexity\nexport function D2ImageField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const { handleFiles, uploading, uploadError } = useFileFieldUpload(field.onChange);\n const { baseUrl } = useConfig();\n const value = field.value as string;\n\n return (\n <div>\n <FileInputField\n name={field.name}\n label={fieldConfig.label}\n accept=\"image/*\"\n helpText={\n uploadError ??\n fieldConfig.description ??\n (uploading ? 'Uploading…' : 'Max size depends on server configuration.')\n }\n required={isMandatory}\n disabled={isDisabled || uploading}\n warning={hasWarning}\n error={hasError || Boolean(uploadError)}\n validationText={validationText}\n buttonLabel={value ? 'Replace image' : 'Select image'}\n onChange={({ files }) => {\n handleFiles(files);\n }}\n onBlur={field.onBlur}\n />\n {value ? (\n <img\n src={`${baseUrl}/api/fileResources/${value}/data`}\n alt={fieldConfig.label}\n style={{ maxWidth: '200px', maxHeight: '200px', marginTop: '8px' }}\n />\n ) : null}\n </div>\n );\n}\n","export type CoordinateValue = { lng: number; lat: number };\n\nconst LNG_MIN = -180;\nconst LNG_MAX = 180;\nconst LAT_MIN = -90;\nconst LAT_MAX = 90;\n\n/**\n * Parses a DHIS2 `COORDINATE` value-type string, wire format `\"[lng,lat]\"`\n * (matches DHIS2 tracker API's coordinate/GeoJSON Point ordering).\n * Returns `null` for empty, malformed, or out-of-range input.\n */\nexport function parseCoordinateValue(value: string): CoordinateValue | null {\n if (!value) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n if (!Array.isArray(parsed) || parsed.length !== 2) return null;\n const lng: unknown = parsed[0];\n const lat: unknown = parsed[1];\n if (typeof lng !== 'number' || typeof lat !== 'number') return null;\n if (!Number.isFinite(lng) || !Number.isFinite(lat)) return null;\n if (lng < LNG_MIN || lng > LNG_MAX || lat < LAT_MIN || lat > LAT_MAX) return null;\n\n return { lng, lat };\n}\n\n/** Serializes a longitude/latitude pair to the DHIS2 `\"[lng,lat]\"` wire format. */\nexport function joinCoordinateValue(lng: number, lat: number): string {\n return JSON.stringify([lng, lat]);\n}\n","import type { Geometry } from 'geojson';\n\n/**\n * DHIS2 `GEOJSON` value-type strings hold a single GeoJSON *geometry*\n * (Point/LineString/Polygon/...), not a full `Feature` or `FeatureCollection`.\n *\n * This assumption was NOT conclusively verified against DHIS2's own API docs\n * during planning — verify against a live DHIS2 instance (create a\n * GEOJSON-valueType data element, submit a value via Capture/Tracker Capture,\n * inspect the stored/returned JSON shape) before treating this as final. If\n * DHIS2 actually expects/returns a `Feature` wrapper, this module's\n * parse/stringify pair — and the `buildFieldSchema`/`buildTeaFieldSchema`\n * validators built on top of it — need a follow-up patch.\n */\n\nconst GEOMETRY_TYPES = new Set([\n 'Point',\n 'MultiPoint',\n 'LineString',\n 'MultiLineString',\n 'Polygon',\n 'MultiPolygon',\n 'GeometryCollection',\n]);\n\nfunction isGeometryShape(value: unknown): value is Geometry {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as { type?: unknown; coordinates?: unknown; geometries?: unknown };\n if (typeof candidate.type !== 'string' || !GEOMETRY_TYPES.has(candidate.type)) return false;\n if (candidate.type === 'GeometryCollection') return Array.isArray(candidate.geometries);\n return Array.isArray(candidate.coordinates);\n}\n\n/** Parses a `GEOJSON` value-type string into a GeoJSON geometry, or `null` if invalid/empty. */\nexport function parseGeojsonGeometry(value: string): Geometry | null {\n if (!value) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n return isGeometryShape(parsed) ? parsed : null;\n}\n\n/** Serializes a GeoJSON geometry to the DHIS2 `GEOJSON` value-type wire format. */\nexport function stringifyGeojsonGeometry(geometry: Geometry): string {\n return JSON.stringify(geometry);\n}\n\n/** Returns `true` when `value` is a valid, non-empty GeoJSON geometry string. */\nexport function isValidGeojsonGeometry(value: string): boolean {\n return parseGeojsonGeometry(value) !== null;\n}\n","import type { StyleSpecification } from 'maplibre-gl';\n\n/**\n * Free, no-API-key OpenStreetMap raster basemap used as the default `mapStyle`\n * for `CoordinateMapPicker`/`GeoJsonMapEditor`.\n *\n * OSM's tile usage policy (https://operations.osmfoundation.org/policies/tiles/)\n * disallows heavy automated/production traffic against `tile.openstreetmap.org`\n * without self-hosting or a paid provider. Swap this out via the `mapStyle` prop\n * (a full MapLibre `StyleSpecification` or a style URL) before deploying a\n * production app at scale — e.g. MapTiler, Protomaps, or a DHIS2-hosted tile\n * server. This default exists so the widgets work out of the box in\n * development, tests, and Storybook.\n */\nexport const defaultMapStyle: StyleSpecification = {\n version: 8,\n sources: {\n osm: {\n type: 'raster',\n tiles: ['https://tile.openstreetmap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '&copy; OpenStreetMap contributors',\n },\n },\n layers: [\n {\n id: 'osm',\n type: 'raster',\n source: 'osm',\n },\n ],\n};\n","import { Map as MapLibreMap, NavigationControl, type StyleSpecification } from 'maplibre-gl';\nimport { useEffect, useRef, useState, type RefObject } from 'react';\n\nexport type UseMapLibreMapOptions = {\n style: StyleSpecification | string;\n};\n\nexport type UseMapLibreMapResult = {\n containerRef: RefObject<HTMLDivElement>;\n map: MapLibreMap | null;\n};\n\n/**\n * Creates a MapLibre GL map instance on a ref'd container and tears it down\n * on unmount. Shared by `CoordinateMapPicker` and `GeoJsonMapEditor`.\n *\n * `map` stays `null` until the map's `'load'` event fires — consumers that\n * add sources/layers (e.g. terra-draw's GeoJSON source) must wait for style\n * load, or MapLibre throws \"Style is not done loading\".\n *\n * The `style` used is the one active when the map is first created — changing\n * `style` on a later render does not re-initialize the map (out of scope for v1).\n */\nexport function useMapLibreMap({ style }: UseMapLibreMapOptions): UseMapLibreMapResult {\n const containerRef = useRef<HTMLDivElement>(null);\n const [map, setMap] = useState<MapLibreMap | null>(null);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n const instance = new MapLibreMap({\n container: containerRef.current,\n style,\n center: [0, 0],\n zoom: 1,\n });\n instance.addControl(new NavigationControl(), 'top-right');\n instance.once('load', () => {\n setMap(instance);\n });\n\n return () => {\n instance.remove();\n setMap(null);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { containerRef, map };\n}\n","import { Marker, type MapMouseEvent } from 'maplibre-gl';\nimport { useEffect, useRef } from 'react';\nimport { joinCoordinateValue, parseCoordinateValue } from './coordinateValue';\nimport { defaultMapStyle } from './defaultMapStyle';\nimport type { MapPickerProps } from './types';\nimport { useMapLibreMap } from './useMapLibreMap';\n\nexport type CoordinateMapPickerProps = MapPickerProps;\n\n/**\n * Single draggable/click-to-place marker over a MapLibre map. Renders only the\n * map canvas — the accessible numeric lng/lat inputs are adapter-owned (each\n * UI kit composes this alongside its own number inputs bound to the same\n * `value`/`onChange`).\n */\nexport function CoordinateMapPicker({\n value,\n onChange,\n mapStyle,\n disabled,\n className,\n}: CoordinateMapPickerProps) {\n const { containerRef, map } = useMapLibreMap({ style: mapStyle ?? defaultMapStyle });\n const markerRef = useRef<Marker | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!map) return;\n\n const ensureMarker = (lng: number, lat: number) => {\n if (markerRef.current) {\n markerRef.current.setLngLat([lng, lat]);\n return markerRef.current;\n }\n const marker = new Marker({ draggable: !disabled }).setLngLat([lng, lat]).addTo(map);\n marker.on('dragend', () => {\n const lngLat = marker.getLngLat();\n onChangeRef.current(joinCoordinateValue(lngLat.lng, lngLat.lat));\n });\n markerRef.current = marker;\n return marker;\n };\n\n const handleClick = (event: MapMouseEvent) => {\n if (disabled) return;\n ensureMarker(event.lngLat.lng, event.lngLat.lat);\n onChangeRef.current(joinCoordinateValue(event.lngLat.lng, event.lngLat.lat));\n };\n\n map.on('click', handleClick);\n\n const parsed = parseCoordinateValue(value);\n if (parsed) {\n ensureMarker(parsed.lng, parsed.lat);\n map.setCenter([parsed.lng, parsed.lat]);\n }\n\n return () => {\n map.off('click', handleClick);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, disabled]);\n\n useEffect(() => {\n if (!markerRef.current) return;\n const parsed = parseCoordinateValue(value);\n if (parsed) {\n markerRef.current.setLngLat([parsed.lng, parsed.lat]);\n }\n }, [value]);\n\n useEffect(() => {\n markerRef.current?.setDraggable(!disabled);\n }, [disabled]);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ width: '100%', height: '300px' }}\n aria-hidden=\"true\"\n />\n );\n}\n","import { useEffect, useRef } from 'react';\nimport {\n TerraDraw,\n TerraDrawLineStringMode,\n TerraDrawPointMode,\n TerraDrawPolygonMode,\n type GeoJSONStoreGeometries,\n} from 'terra-draw';\nimport { TerraDrawMapLibreGLAdapter } from 'terra-draw-maplibre-gl-adapter';\nimport { defaultMapStyle } from './defaultMapStyle';\nimport { parseGeojsonGeometry, stringifyGeojsonGeometry } from './geojsonValue';\nimport type { MapPickerProps } from './types';\nimport { useMapLibreMap } from './useMapLibreMap';\n\nexport type GeoJsonDrawMode = 'point' | 'linestring' | 'polygon';\n\nexport type GeoJsonMapEditorProps = MapPickerProps & {\n /** Draw modes offered to the user. Defaults to all three. */\n modes?: GeoJsonDrawMode[];\n};\n\nconst DEFAULT_MODES: GeoJsonDrawMode[] = ['point', 'linestring', 'polygon'];\n\nfunction createDrawMode(mode: GeoJsonDrawMode) {\n switch (mode) {\n case 'point':\n return new TerraDrawPointMode();\n case 'linestring':\n return new TerraDrawLineStringMode();\n case 'polygon':\n return new TerraDrawPolygonMode();\n }\n}\n\n/**\n * MapLibre + terra-draw point/line/polygon editor for a single GeoJSON\n * geometry (DHIS2 `GEOJSON` DE/TEA value is one geometry, not a\n * FeatureCollection — starting a new draw clears any existing feature).\n * Renders only the map + draw-mode controls — the raw-JSON textarea fallback\n * is adapter-owned.\n */\nexport function GeoJsonMapEditor({\n value,\n onChange,\n mapStyle,\n disabled,\n className,\n modes = DEFAULT_MODES,\n}: GeoJsonMapEditorProps) {\n const { containerRef, map } = useMapLibreMap({ style: mapStyle ?? defaultMapStyle });\n const drawRef = useRef<TerraDraw | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!map) return;\n\n const draw = new TerraDraw({\n adapter: new TerraDrawMapLibreGLAdapter({ map }),\n modes: modes.map(createDrawMode),\n });\n drawRef.current = draw;\n draw.start();\n\n const initial = parseGeojsonGeometry(value);\n if (initial) {\n draw.addFeatures([\n { type: 'Feature', geometry: initial as GeoJSONStoreGeometries, properties: {} },\n ]);\n }\n\n const handleFinish = (id: Parameters<typeof draw.getSnapshotFeature>[0]) => {\n const feature = draw.getSnapshotFeature(id);\n if (feature) {\n onChangeRef.current(stringifyGeojsonGeometry(feature.geometry));\n }\n };\n draw.on('finish', handleFinish);\n\n return () => {\n draw.off('finish', handleFinish);\n try {\n // terra-draw's adapter can throw during its own teardown if the underlying\n // MapLibre map is torn down first (e.g. rapid unmount) — a widget unmounting\n // must never crash the host app, so this is defensive, not expected to fire.\n draw.stop();\n } catch {\n // Intentionally ignored — see comment above.\n }\n drawRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map]);\n\n const startDrawing = (mode: GeoJsonDrawMode) => {\n const draw = drawRef.current;\n if (!draw || disabled) return;\n draw.clear();\n draw.setMode(mode);\n };\n\n return (\n <div className={className}>\n <div ref={containerRef} style={{ width: '100%', height: '300px' }} aria-hidden=\"true\" />\n {!disabled ? (\n <div role=\"group\" aria-label=\"Draw geometry\">\n {modes.map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => {\n startDrawing(mode);\n }}\n >\n Draw {mode}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","// fallow-ignore-file code-duplication\nimport { InputField, TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n CoordinateMapPicker,\n GeoJsonMapEditor,\n joinCoordinateValue,\n parseCoordinateValue,\n parseGeojsonGeometry,\n stringifyGeojsonGeometry,\n} from '@nnkogift/dhis2-form-utils-map';\nimport 'maplibre-gl/dist/maplibre-gl.css';\nimport { useEffect, useState } from 'react';\n\n// fallow-ignore-next-line complexity\nexport function D2CoordinateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n\n // Local text buffers, not derived directly from field.value on every render — a controlled\n // number input driven straight off `parseCoordinateValue(value)` rejects intermediate\n // keystrokes (e.g. typing \"-\" alone parses to NaN and gets silently dropped, so a user can\n // never type a negative number). These stay in sync with external value changes (map clicks,\n // RHF reset) via the effect below, but aren't clobbered by the widget's own in-progress typing.\n const [lngText, setLngText] = useState(() => parseCoordinateValue(value)?.lng.toString() ?? '');\n const [latText, setLatText] = useState(() => parseCoordinateValue(value)?.lat.toString() ?? '');\n\n useEffect(() => {\n const parsed = parseCoordinateValue(value);\n setLngText(parsed ? parsed.lng.toString() : '');\n setLatText(parsed ? parsed.lat.toString() : '');\n }, [value]);\n\n const commit = (lngRaw: string, latRaw: string) => {\n const lng = parseFloat(lngRaw);\n const lat = parseFloat(latRaw);\n if (Number.isFinite(lng) && Number.isFinite(lat)) {\n field.onChange(joinCoordinateValue(lng, lat));\n }\n };\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n <CoordinateMapPicker value={value} onChange={field.onChange} disabled={isDisabled} />\n <InputField\n name={`${field.name}-lng`}\n type=\"number\"\n label=\"Longitude\"\n value={lngText}\n disabled={isDisabled}\n onChange={({ value: next }) => {\n const text = next ?? '';\n setLngText(text);\n commit(text, latText);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-lat`}\n type=\"number\"\n label=\"Latitude\"\n value={latText}\n disabled={isDisabled}\n onChange={({ value: next }) => {\n const text = next ?? '';\n setLatText(text);\n commit(lngText, text);\n }}\n onBlur={field.onBlur}\n />\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n\n// fallow-ignore-next-line complexity\nexport function D2GeoJsonField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const [textValue, setTextValue] = useState(value);\n const [textError, setTextError] = useState<string | undefined>(undefined);\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n <GeoJsonMapEditor\n value={value}\n onChange={(next) => {\n field.onChange(next);\n const geometry = parseGeojsonGeometry(next);\n setTextValue(geometry ? JSON.stringify(geometry, null, 2) : next);\n setTextError(undefined);\n }}\n disabled={isDisabled}\n />\n <TextAreaField\n name={`${field.name}-geometry`}\n label=\"Geometry (JSON)\"\n value={textValue}\n disabled={isDisabled}\n warning={Boolean(textError)}\n validationText={textError}\n onChange={({ value: next }) => {\n setTextValue(next ?? '');\n }}\n onBlur={() => {\n if (!textValue) {\n field.onChange('');\n setTextError(undefined);\n return;\n }\n const geometry = parseGeojsonGeometry(textValue);\n if (geometry) {\n field.onChange(stringifyGeojsonGeometry(geometry));\n setTextError(undefined);\n } else {\n setTextError('Not a valid GeoJSON geometry');\n }\n field.onBlur();\n }}\n />\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n","import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2UnsupportedField({ control }: WidgetProps) {\n const { fieldConfig, field, widgetKind, isMandatory } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={`Widget not yet implemented: ${widgetKind}`}\n required={isMandatory}\n disabled\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","// fallow-ignore-file code-duplication\nimport {\n type FieldControlInput,\n useFieldControl,\n type WidgetProps,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport type { WidgetKind } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ComponentType } from 'react';\nimport {\n D2AgeField,\n D2BooleanField,\n D2CoordinateField,\n D2DateField,\n D2DateTimeField,\n D2EmailField,\n D2FileField,\n D2GeoJsonField,\n D2ImageField,\n D2IntegerField,\n D2LongTextField,\n D2MultiSelectField,\n D2NumberField,\n D2OrgUnitField,\n D2PercentageField,\n D2PhoneField,\n D2SelectField,\n D2TextField,\n D2TimeField,\n D2TrueOnlyField,\n D2UnsupportedField,\n} from './widgets';\n\nexport type D2FieldProps = {\n field: FieldControlInput;\n};\n\nexport type D2FieldWidgetProps = WidgetProps;\n\nconst WIDGET_BY_KIND: Record<WidgetKind, ComponentType<WidgetProps>> = {\n text: D2TextField,\n longText: D2LongTextField,\n email: D2EmailField,\n phone: D2PhoneField,\n number: D2NumberField,\n integer: D2IntegerField,\n percentage: D2PercentageField,\n boolean: D2BooleanField,\n trueOnly: D2TrueOnlyField,\n date: D2DateField,\n time: D2TimeField,\n age: D2AgeField,\n select: D2SelectField,\n multiSelect: D2MultiSelectField,\n datetime: D2DateTimeField,\n coordinate: D2CoordinateField,\n geojson: D2GeoJsonField,\n orgUnit: D2OrgUnitField,\n file: D2FileField,\n image: D2ImageField,\n unsupported: D2UnsupportedField,\n};\n\n/** Dispatches an already-resolved `FieldControlReturn` to its widget component, without re-deriving field control state. Reused by consumers that build their own chrome (labels, badges, ghost placeholders) around a field. */\nexport function D2FieldWidget({ control }: D2FieldWidgetProps) {\n const Widget = WIDGET_BY_KIND[control.widgetKind];\n return <Widget control={control} />;\n}\n\nexport function D2Field({ field }: D2FieldProps) {\n const fieldControl = useFieldControl({ ...field });\n\n if (fieldControl.isHidden) return null;\n\n return <D2FieldWidget control={fieldControl} />;\n}\n","import { useSectionState } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ReactNode } from 'react';\n\nexport type FormSectionProps = {\n sectionId: string;\n children: ReactNode;\n};\n\nexport function FormSection({ sectionId, children }: FormSectionProps) {\n const state = useSectionState(sectionId);\n\n if (state.hidden) {\n return null;\n }\n\n return <>{children}</>;\n}\n","import { NoticeBox } from '@dhis2/ui';\nimport { useFormFeedback } from '@nnkogift/dhis2-form-utils-hooks';\n\ntype FeedbackItem = ReturnType<typeof useFormFeedback>[string];\n\nfunction FeedbackPanel({ title, items }: { title: string; items: FeedbackItem[] }) {\n if (!items.length) {\n return null;\n }\n\n return (\n <div style={{ marginBottom: 'var(--spacers-dp16)' }}>\n <h3 style={{ margin: '0 0 var(--spacers-dp8)' }}>{title}</h3>\n {items.map((item) => (\n <NoticeBox key={`${item.location}:${item.content}`} title={item.content}>\n {item.value ? (\n <>\n <strong>{item.content}</strong>: {item.value}\n </>\n ) : (\n item.content\n )}\n </NoticeBox>\n ))}\n </div>\n );\n}\n\nexport function FormFeedback() {\n const feedback = useFormFeedback();\n const items = Object.values(feedback);\n const feedbackItems = items.filter((item) => item.location === 'feedback');\n const indicatorItems = items.filter((item) => item.location === 'indicators');\n\n if (!feedbackItems.length && !indicatorItems.length) {\n return null;\n }\n\n return (\n <div>\n <FeedbackPanel title=\"Feedback\" items={feedbackItems} />\n <FeedbackPanel title=\"Program indicators\" items={indicatorItems} />\n </div>\n );\n}\n"]}
package/dist/index.js CHANGED
@@ -508,7 +508,7 @@ function D2ImageField({ control }) {
508
508
  ] });
509
509
  }
510
510
 
511
- // ../../packages/map/dist/coordinateValue.js
511
+ // ../../packages/map/src/coordinateValue.ts
512
512
  var LNG_MIN = -180;
513
513
  var LNG_MAX = 180;
514
514
  var LAT_MIN = -90;
@@ -533,7 +533,7 @@ function joinCoordinateValue(lng, lat) {
533
533
  return JSON.stringify([lng, lat]);
534
534
  }
535
535
 
536
- // ../../packages/map/dist/geojsonValue.js
536
+ // ../../packages/map/src/geojsonValue.ts
537
537
  var GEOMETRY_TYPES = /* @__PURE__ */ new Set([
538
538
  "Point",
539
539
  "MultiPoint",
@@ -564,7 +564,7 @@ function stringifyGeojsonGeometry(geometry) {
564
564
  return JSON.stringify(geometry);
565
565
  }
566
566
 
567
- // ../../packages/map/dist/defaultMapStyle.js
567
+ // ../../packages/map/src/defaultMapStyle.ts
568
568
  var defaultMapStyle = {
569
569
  version: 8,
570
570
  sources: {
@@ -605,8 +605,6 @@ function useMapLibreMap({ style }) {
605
605
  }, []);
606
606
  return { containerRef, map };
607
607
  }
608
-
609
- // ../../packages/map/dist/CoordinateMapPicker.js
610
608
  function CoordinateMapPicker({
611
609
  value,
612
610
  onChange,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/fields/widgets/TextField.tsx","../src/fields/widgets/LongTextField.tsx","../src/fields/widgets/NumericFields.tsx","../src/fields/widgets/DateFields.tsx","../src/fields/widgets/ChoiceFields.tsx","../src/fields/widgets/OrgUnitField.tsx","../src/fields/widgets/FileFields.tsx","../../../packages/map/src/coordinateValue.ts","../../../packages/map/src/geojsonValue.ts","../../../packages/map/src/defaultMapStyle.ts","../../../packages/map/src/useMapLibreMap.ts","../../../packages/map/src/CoordinateMapPicker.tsx","../../../packages/map/src/GeoJsonMapEditor.tsx","../src/fields/widgets/MapFields.tsx","../src/fields/widgets/UnsupportedField.tsx","../src/fields/D2Field.tsx","../src/components/FormSection.tsx","../src/components/FormFeedback.tsx"],"names":["resolveFieldValidation","jsx","InputField","jsxs","useState","MapLibreMap","useRef","useEffect","TextAreaField","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2TextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import { TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2LongTextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <TextAreaField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { InputField } from '@dhis2/ui';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport { D2TextField } from './TextField';\n\nfunction D2TypedTextField({ control, type }: WidgetProps & { type?: 'email' | 'tel' | 'number' }) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type={type}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2EmailField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"email\" />;\n}\n\nexport function D2PhoneField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"tel\" />;\n}\n\nexport function D2NumberField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2IntegerField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2PercentageField({ control }: WidgetProps) {\n return (\n <D2TextField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n label: `${control.fieldConfig.label} (%)`,\n },\n }}\n />\n );\n}\n","import { CalendarInput, InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { computeAgeFromDob, resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nconst todayIso = (): string => new Date().toISOString().slice(0, 10);\n\ntype DateSelectPayload = {\n calendarDateString?: string;\n} | null;\n\nconst readDatePart = (value: string): string => {\n if (!value) return '';\n return value.includes('T') ? value.slice(0, 10) : value;\n};\n\nconst readTimePart = (value: string): string => {\n if (!value.includes('T')) return '';\n return value.slice(11, 16);\n};\n\nexport function D2DateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const dateValue = field.value as string;\n\n return (\n <CalendarInput\n name={field.name}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={dateValue || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n field.onChange(payload?.calendarDateString ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2TimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2DateTimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const datePart = readDatePart(value);\n const timePart = readTimePart(value);\n\n const commit = (nextDate: string, nextTime: string) => {\n if (!nextDate && !nextTime) {\n field.onChange('');\n return;\n }\n field.onChange(`${nextDate}T${nextTime || '00:00'}`);\n };\n\n return (\n <div>\n <CalendarInput\n name={`${field.name}-date`}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={datePart || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n commit(payload?.calendarDateString ?? '', timePart);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-time`}\n value={timePart}\n label={`${fieldConfig.label} (time)`}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n onChange={({ value: nextTime }) => {\n commit(datePart, nextTime ?? '');\n }}\n onBlur={field.onBlur}\n />\n </div>\n );\n}\n\nexport function D2AgeField({ control }: WidgetProps) {\n const age = computeAgeFromDob(control.field.value as string);\n const helpText = [control.fieldConfig.description, age ? `Age: ${age} years` : undefined]\n .filter(Boolean)\n .join(' · ');\n\n return (\n <D2DateField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n description: helpText || control.fieldConfig.description,\n },\n }}\n />\n );\n}\n","import {\n CheckboxField,\n Field,\n MultiSelectField,\n MultiSelectOption,\n Radio,\n SingleSelectField,\n SingleSelectOption,\n} from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n joinMultiTextValue,\n parseMultiTextValue,\n resolveFieldValidation,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport { useMemo } from 'react';\n\nconst BOOLEAN_OPTIONS = [\n { label: 'Yes', value: 'true' },\n { label: 'No', value: 'false' },\n] as const;\n\nconst RADIO_RENDER_HINTS = new Set(['RADIO', 'VERTICAL_RADIOBUTTONS', 'HORIZONTAL_RADIOBUTTONS']);\n\nexport function D2BooleanField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = useMemo(() => control, [control]);\n const { validationText, hasError, hasWarning } = useMemo(\n () => resolveFieldValidation(control),\n [control]\n );\n\n return (\n <Field\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n warning={hasWarning}\n error={hasError}\n required={isMandatory}\n disabled={isDisabled}\n validationText={validationText}\n >\n <div\n style={{\n display: 'flex',\n gap: 16,\n }}\n >\n {BOOLEAN_OPTIONS.map((option) => (\n <Radio\n key={option.label}\n name={field.name}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n ))}\n </div>\n </Field>\n );\n}\n\nexport function D2TrueOnlyField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = useMemo(() => control, [control]);\n const { validationText, hasError, hasWarning } = useMemo(\n () => resolveFieldValidation(control),\n [control]\n );\n\n return (\n <CheckboxField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n checked={field.value === 'true'}\n onChange={({ checked }) => {\n field.onChange(checked ? 'true' : '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2SelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map(\n (option) => ({\n label: option.label,\n value: option.code,\n })\n );\n\n if (fieldConfig.renderTypeHint && RADIO_RENDER_HINTS.has(fieldConfig.renderTypeHint)) {\n return (\n <fieldset>\n <legend>{fieldConfig.label}</legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {options.map((option) => (\n <Radio\n key={option.value}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n />\n ))}\n {validationText ? <p>{validationText}</p> : null}\n </fieldset>\n );\n }\n\n return (\n <SingleSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={field.value as string}\n onChange={({ selected }) => {\n field.onChange(selected);\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <SingleSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </SingleSelectField>\n );\n}\n\nexport function D2MultiSelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = useMemo(\n () =>\n (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map((option) => ({\n label: option.label,\n value: option.code,\n })),\n [control.visibleOptions, fieldConfig.optionSet?.options]\n );\n const selected = parseMultiTextValue(field.value as string);\n\n return (\n <MultiSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={selected}\n onChange={({ selected: nextSelected }) => {\n field.onChange(joinMultiTextValue(nextSelected));\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <MultiSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </MultiSelectField>\n );\n}\n","import { Button, OrganisationUnitTree } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n resolveFieldValidation,\n useOrgUnitPickerContext,\n useOrganisationUnitsQuery,\n} from '@nnkogift/dhis2-form-utils-hooks';\n\n// fallow-ignore-next-line complexity\nexport function D2OrgUnitField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const pickerContext = useOrgUnitPickerContext();\n const { organisationUnits, roots, loading, error } = useOrganisationUnitsQuery(\n pickerContext?.roots\n );\n\n const value = field.value as string;\n const selectedUnit = organisationUnits.find((ou) => ou.id === value);\n const selectedLabel = selectedUnit?.displayName ?? value;\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {selectedLabel ? (\n <p>\n Selected: {selectedLabel}{' '}\n <Button\n small\n disabled={isDisabled}\n onClick={() => {\n field.onChange('');\n }}\n >\n Clear\n </Button>\n </p>\n ) : null}\n {roots.length > 0 ? (\n <OrganisationUnitTree\n roots={roots}\n singleSelection\n disableSelection={isDisabled}\n initiallyExpanded={roots.map((id) => `/${id}`)}\n onChange={({ id }) => {\n field.onChange(id);\n }}\n />\n ) : loading ? (\n <p>Loading organisation units…</p>\n ) : error ? (\n <p>Failed to load organisation units.</p>\n ) : null}\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n","import { useConfig } from '@dhis2/app-runtime';\nimport { FileInputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation, useFileResourceUpload } from '@nnkogift/dhis2-form-utils-hooks';\nimport { useState } from 'react';\n\nfunction useFileFieldUpload(onChange: (id: string) => void) {\n const { upload, uploading, error } = useFileResourceUpload();\n const [uploadError, setUploadError] = useState<string | undefined>(undefined);\n\n const handleFiles = (files: FileList) => {\n const file = files.item(0);\n if (!file) return;\n // fallow-ignore-next-line code-duplication\n setUploadError(undefined);\n upload(file)\n .then((result) => {\n onChange(result.id);\n })\n .catch((uploadFailure: unknown) => {\n setUploadError(\n uploadFailure instanceof Error ? uploadFailure.message : 'Upload failed'\n );\n });\n };\n\n return { handleFiles, uploading, uploadError: uploadError ?? error?.message };\n}\n\n// fallow-ignore-next-line complexity\nexport function D2FileField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const { handleFiles, uploading, uploadError } = useFileFieldUpload(field.onChange);\n\n return (\n <FileInputField\n name={field.name}\n label={fieldConfig.label}\n helpText={\n uploadError ??\n fieldConfig.description ??\n (uploading ? 'Uploading…' : 'Max size depends on server configuration.')\n }\n required={isMandatory}\n disabled={isDisabled || uploading}\n warning={hasWarning}\n error={hasError || Boolean(uploadError)}\n validationText={validationText}\n buttonLabel={(field.value as string) ? 'Replace file' : 'Select file'}\n onChange={({ files }) => {\n handleFiles(files);\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\n// fallow-ignore-next-line complexity\nexport function D2ImageField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const { handleFiles, uploading, uploadError } = useFileFieldUpload(field.onChange);\n const { baseUrl } = useConfig();\n const value = field.value as string;\n\n return (\n <div>\n <FileInputField\n name={field.name}\n label={fieldConfig.label}\n accept=\"image/*\"\n helpText={\n uploadError ??\n fieldConfig.description ??\n (uploading ? 'Uploading…' : 'Max size depends on server configuration.')\n }\n required={isMandatory}\n disabled={isDisabled || uploading}\n warning={hasWarning}\n error={hasError || Boolean(uploadError)}\n validationText={validationText}\n buttonLabel={value ? 'Replace image' : 'Select image'}\n onChange={({ files }) => {\n handleFiles(files);\n }}\n onBlur={field.onBlur}\n />\n {value ? (\n <img\n src={`${baseUrl}/api/fileResources/${value}/data`}\n alt={fieldConfig.label}\n style={{ maxWidth: '200px', maxHeight: '200px', marginTop: '8px' }}\n />\n ) : null}\n </div>\n );\n}\n","export type CoordinateValue = { lng: number; lat: number };\n\nconst LNG_MIN = -180;\nconst LNG_MAX = 180;\nconst LAT_MIN = -90;\nconst LAT_MAX = 90;\n\n/**\n * Parses a DHIS2 `COORDINATE` value-type string, wire format `\"[lng,lat]\"`\n * (matches DHIS2 tracker API's coordinate/GeoJSON Point ordering).\n * Returns `null` for empty, malformed, or out-of-range input.\n */\nexport function parseCoordinateValue(value: string): CoordinateValue | null {\n if (!value) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n if (!Array.isArray(parsed) || parsed.length !== 2) return null;\n const lng: unknown = parsed[0];\n const lat: unknown = parsed[1];\n if (typeof lng !== 'number' || typeof lat !== 'number') return null;\n if (!Number.isFinite(lng) || !Number.isFinite(lat)) return null;\n if (lng < LNG_MIN || lng > LNG_MAX || lat < LAT_MIN || lat > LAT_MAX) return null;\n\n return { lng, lat };\n}\n\n/** Serializes a longitude/latitude pair to the DHIS2 `\"[lng,lat]\"` wire format. */\nexport function joinCoordinateValue(lng: number, lat: number): string {\n return JSON.stringify([lng, lat]);\n}\n","import type { Geometry } from 'geojson';\n\n/**\n * DHIS2 `GEOJSON` value-type strings hold a single GeoJSON *geometry*\n * (Point/LineString/Polygon/...), not a full `Feature` or `FeatureCollection`.\n *\n * This assumption was NOT conclusively verified against DHIS2's own API docs\n * during planning — verify against a live DHIS2 instance (create a\n * GEOJSON-valueType data element, submit a value via Capture/Tracker Capture,\n * inspect the stored/returned JSON shape) before treating this as final. If\n * DHIS2 actually expects/returns a `Feature` wrapper, this module's\n * parse/stringify pair — and the `buildFieldSchema`/`buildTeaFieldSchema`\n * validators built on top of it — need a follow-up patch.\n */\n\nconst GEOMETRY_TYPES = new Set([\n 'Point',\n 'MultiPoint',\n 'LineString',\n 'MultiLineString',\n 'Polygon',\n 'MultiPolygon',\n 'GeometryCollection',\n]);\n\nfunction isGeometryShape(value: unknown): value is Geometry {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as { type?: unknown; coordinates?: unknown; geometries?: unknown };\n if (typeof candidate.type !== 'string' || !GEOMETRY_TYPES.has(candidate.type)) return false;\n if (candidate.type === 'GeometryCollection') return Array.isArray(candidate.geometries);\n return Array.isArray(candidate.coordinates);\n}\n\n/** Parses a `GEOJSON` value-type string into a GeoJSON geometry, or `null` if invalid/empty. */\nexport function parseGeojsonGeometry(value: string): Geometry | null {\n if (!value) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n return isGeometryShape(parsed) ? parsed : null;\n}\n\n/** Serializes a GeoJSON geometry to the DHIS2 `GEOJSON` value-type wire format. */\nexport function stringifyGeojsonGeometry(geometry: Geometry): string {\n return JSON.stringify(geometry);\n}\n\n/** Returns `true` when `value` is a valid, non-empty GeoJSON geometry string. */\nexport function isValidGeojsonGeometry(value: string): boolean {\n return parseGeojsonGeometry(value) !== null;\n}\n","import type { StyleSpecification } from 'maplibre-gl';\n\n/**\n * Free, no-API-key OpenStreetMap raster basemap used as the default `mapStyle`\n * for `CoordinateMapPicker`/`GeoJsonMapEditor`.\n *\n * OSM's tile usage policy (https://operations.osmfoundation.org/policies/tiles/)\n * disallows heavy automated/production traffic against `tile.openstreetmap.org`\n * without self-hosting or a paid provider. Swap this out via the `mapStyle` prop\n * (a full MapLibre `StyleSpecification` or a style URL) before deploying a\n * production app at scale — e.g. MapTiler, Protomaps, or a DHIS2-hosted tile\n * server. This default exists so the widgets work out of the box in\n * development, tests, and Storybook.\n */\nexport const defaultMapStyle: StyleSpecification = {\n version: 8,\n sources: {\n osm: {\n type: 'raster',\n tiles: ['https://tile.openstreetmap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '&copy; OpenStreetMap contributors',\n },\n },\n layers: [\n {\n id: 'osm',\n type: 'raster',\n source: 'osm',\n },\n ],\n};\n","import { Map as MapLibreMap, NavigationControl, type StyleSpecification } from 'maplibre-gl';\nimport { useEffect, useRef, useState, type RefObject } from 'react';\n\nexport type UseMapLibreMapOptions = {\n style: StyleSpecification | string;\n};\n\nexport type UseMapLibreMapResult = {\n containerRef: RefObject<HTMLDivElement>;\n map: MapLibreMap | null;\n};\n\n/**\n * Creates a MapLibre GL map instance on a ref'd container and tears it down\n * on unmount. Shared by `CoordinateMapPicker` and `GeoJsonMapEditor`.\n *\n * `map` stays `null` until the map's `'load'` event fires — consumers that\n * add sources/layers (e.g. terra-draw's GeoJSON source) must wait for style\n * load, or MapLibre throws \"Style is not done loading\".\n *\n * The `style` used is the one active when the map is first created — changing\n * `style` on a later render does not re-initialize the map (out of scope for v1).\n */\nexport function useMapLibreMap({ style }: UseMapLibreMapOptions): UseMapLibreMapResult {\n const containerRef = useRef<HTMLDivElement>(null);\n const [map, setMap] = useState<MapLibreMap | null>(null);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n const instance = new MapLibreMap({\n container: containerRef.current,\n style,\n center: [0, 0],\n zoom: 1,\n });\n instance.addControl(new NavigationControl(), 'top-right');\n instance.once('load', () => {\n setMap(instance);\n });\n\n return () => {\n instance.remove();\n setMap(null);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { containerRef, map };\n}\n","import { Marker, type MapMouseEvent } from 'maplibre-gl';\nimport { useEffect, useRef } from 'react';\nimport { joinCoordinateValue, parseCoordinateValue } from './coordinateValue.js';\nimport { defaultMapStyle } from './defaultMapStyle.js';\nimport type { MapPickerProps } from './types.js';\nimport { useMapLibreMap } from './useMapLibreMap.js';\n\nexport type CoordinateMapPickerProps = MapPickerProps;\n\n/**\n * Single draggable/click-to-place marker over a MapLibre map. Renders only the\n * map canvas — the accessible numeric lng/lat inputs are adapter-owned (each\n * UI kit composes this alongside its own number inputs bound to the same\n * `value`/`onChange`).\n */\nexport function CoordinateMapPicker({\n value,\n onChange,\n mapStyle,\n disabled,\n className,\n}: CoordinateMapPickerProps) {\n const { containerRef, map } = useMapLibreMap({ style: mapStyle ?? defaultMapStyle });\n const markerRef = useRef<Marker | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!map) return;\n\n const ensureMarker = (lng: number, lat: number) => {\n if (markerRef.current) {\n markerRef.current.setLngLat([lng, lat]);\n return markerRef.current;\n }\n const marker = new Marker({ draggable: !disabled }).setLngLat([lng, lat]).addTo(map);\n marker.on('dragend', () => {\n const lngLat = marker.getLngLat();\n onChangeRef.current(joinCoordinateValue(lngLat.lng, lngLat.lat));\n });\n markerRef.current = marker;\n return marker;\n };\n\n const handleClick = (event: MapMouseEvent) => {\n if (disabled) return;\n ensureMarker(event.lngLat.lng, event.lngLat.lat);\n onChangeRef.current(joinCoordinateValue(event.lngLat.lng, event.lngLat.lat));\n };\n\n map.on('click', handleClick);\n\n const parsed = parseCoordinateValue(value);\n if (parsed) {\n ensureMarker(parsed.lng, parsed.lat);\n map.setCenter([parsed.lng, parsed.lat]);\n }\n\n return () => {\n map.off('click', handleClick);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, disabled]);\n\n useEffect(() => {\n if (!markerRef.current) return;\n const parsed = parseCoordinateValue(value);\n if (parsed) {\n markerRef.current.setLngLat([parsed.lng, parsed.lat]);\n }\n }, [value]);\n\n useEffect(() => {\n markerRef.current?.setDraggable(!disabled);\n }, [disabled]);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ width: '100%', height: '300px' }}\n aria-hidden=\"true\"\n />\n );\n}\n","import { useEffect, useRef } from 'react';\nimport {\n TerraDraw,\n TerraDrawLineStringMode,\n TerraDrawPointMode,\n TerraDrawPolygonMode,\n type GeoJSONStoreGeometries,\n} from 'terra-draw';\nimport { TerraDrawMapLibreGLAdapter } from 'terra-draw-maplibre-gl-adapter';\nimport { defaultMapStyle } from './defaultMapStyle.js';\nimport { parseGeojsonGeometry, stringifyGeojsonGeometry } from './geojsonValue.js';\nimport type { MapPickerProps } from './types.js';\nimport { useMapLibreMap } from './useMapLibreMap.js';\n\nexport type GeoJsonDrawMode = 'point' | 'linestring' | 'polygon';\n\nexport type GeoJsonMapEditorProps = MapPickerProps & {\n /** Draw modes offered to the user. Defaults to all three. */\n modes?: GeoJsonDrawMode[];\n};\n\nconst DEFAULT_MODES: GeoJsonDrawMode[] = ['point', 'linestring', 'polygon'];\n\nfunction createDrawMode(mode: GeoJsonDrawMode) {\n switch (mode) {\n case 'point':\n return new TerraDrawPointMode();\n case 'linestring':\n return new TerraDrawLineStringMode();\n case 'polygon':\n return new TerraDrawPolygonMode();\n }\n}\n\n/**\n * MapLibre + terra-draw point/line/polygon editor for a single GeoJSON\n * geometry (DHIS2 `GEOJSON` DE/TEA value is one geometry, not a\n * FeatureCollection — starting a new draw clears any existing feature).\n * Renders only the map + draw-mode controls — the raw-JSON textarea fallback\n * is adapter-owned.\n */\nexport function GeoJsonMapEditor({\n value,\n onChange,\n mapStyle,\n disabled,\n className,\n modes = DEFAULT_MODES,\n}: GeoJsonMapEditorProps) {\n const { containerRef, map } = useMapLibreMap({ style: mapStyle ?? defaultMapStyle });\n const drawRef = useRef<TerraDraw | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!map) return;\n\n const draw = new TerraDraw({\n adapter: new TerraDrawMapLibreGLAdapter({ map }),\n modes: modes.map(createDrawMode),\n });\n drawRef.current = draw;\n draw.start();\n\n const initial = parseGeojsonGeometry(value);\n if (initial) {\n draw.addFeatures([\n { type: 'Feature', geometry: initial as GeoJSONStoreGeometries, properties: {} },\n ]);\n }\n\n const handleFinish = (id: Parameters<typeof draw.getSnapshotFeature>[0]) => {\n const feature = draw.getSnapshotFeature(id);\n if (feature) {\n onChangeRef.current(stringifyGeojsonGeometry(feature.geometry));\n }\n };\n draw.on('finish', handleFinish);\n\n return () => {\n draw.off('finish', handleFinish);\n try {\n // terra-draw's adapter can throw during its own teardown if the underlying\n // MapLibre map is torn down first (e.g. rapid unmount) — a widget unmounting\n // must never crash the host app, so this is defensive, not expected to fire.\n draw.stop();\n } catch {\n // Intentionally ignored — see comment above.\n }\n drawRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map]);\n\n const startDrawing = (mode: GeoJsonDrawMode) => {\n const draw = drawRef.current;\n if (!draw || disabled) return;\n draw.clear();\n draw.setMode(mode);\n };\n\n return (\n <div className={className}>\n <div ref={containerRef} style={{ width: '100%', height: '300px' }} aria-hidden=\"true\" />\n {!disabled ? (\n <div role=\"group\" aria-label=\"Draw geometry\">\n {modes.map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => {\n startDrawing(mode);\n }}\n >\n Draw {mode}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","// fallow-ignore-file code-duplication\nimport { InputField, TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n CoordinateMapPicker,\n GeoJsonMapEditor,\n joinCoordinateValue,\n parseCoordinateValue,\n parseGeojsonGeometry,\n stringifyGeojsonGeometry,\n} from '@nnkogift/dhis2-form-utils-map';\nimport 'maplibre-gl/dist/maplibre-gl.css';\nimport { useEffect, useState } from 'react';\n\n// fallow-ignore-next-line complexity\nexport function D2CoordinateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n\n // Local text buffers, not derived directly from field.value on every render — a controlled\n // number input driven straight off `parseCoordinateValue(value)` rejects intermediate\n // keystrokes (e.g. typing \"-\" alone parses to NaN and gets silently dropped, so a user can\n // never type a negative number). These stay in sync with external value changes (map clicks,\n // RHF reset) via the effect below, but aren't clobbered by the widget's own in-progress typing.\n const [lngText, setLngText] = useState(() => parseCoordinateValue(value)?.lng.toString() ?? '');\n const [latText, setLatText] = useState(() => parseCoordinateValue(value)?.lat.toString() ?? '');\n\n useEffect(() => {\n const parsed = parseCoordinateValue(value);\n setLngText(parsed ? parsed.lng.toString() : '');\n setLatText(parsed ? parsed.lat.toString() : '');\n }, [value]);\n\n const commit = (lngRaw: string, latRaw: string) => {\n const lng = parseFloat(lngRaw);\n const lat = parseFloat(latRaw);\n if (Number.isFinite(lng) && Number.isFinite(lat)) {\n field.onChange(joinCoordinateValue(lng, lat));\n }\n };\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n <CoordinateMapPicker value={value} onChange={field.onChange} disabled={isDisabled} />\n <InputField\n name={`${field.name}-lng`}\n type=\"number\"\n label=\"Longitude\"\n value={lngText}\n disabled={isDisabled}\n onChange={({ value: next }) => {\n const text = next ?? '';\n setLngText(text);\n commit(text, latText);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-lat`}\n type=\"number\"\n label=\"Latitude\"\n value={latText}\n disabled={isDisabled}\n onChange={({ value: next }) => {\n const text = next ?? '';\n setLatText(text);\n commit(lngText, text);\n }}\n onBlur={field.onBlur}\n />\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n\n// fallow-ignore-next-line complexity\nexport function D2GeoJsonField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const [textValue, setTextValue] = useState(value);\n const [textError, setTextError] = useState<string | undefined>(undefined);\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n <GeoJsonMapEditor\n value={value}\n onChange={(next) => {\n field.onChange(next);\n const geometry = parseGeojsonGeometry(next);\n setTextValue(geometry ? JSON.stringify(geometry, null, 2) : next);\n setTextError(undefined);\n }}\n disabled={isDisabled}\n />\n <TextAreaField\n name={`${field.name}-geometry`}\n label=\"Geometry (JSON)\"\n value={textValue}\n disabled={isDisabled}\n warning={Boolean(textError)}\n validationText={textError}\n onChange={({ value: next }) => {\n setTextValue(next ?? '');\n }}\n onBlur={() => {\n if (!textValue) {\n field.onChange('');\n setTextError(undefined);\n return;\n }\n const geometry = parseGeojsonGeometry(textValue);\n if (geometry) {\n field.onChange(stringifyGeojsonGeometry(geometry));\n setTextError(undefined);\n } else {\n setTextError('Not a valid GeoJSON geometry');\n }\n field.onBlur();\n }}\n />\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n","import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2UnsupportedField({ control }: WidgetProps) {\n const { fieldConfig, field, widgetKind, isMandatory } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={`Widget not yet implemented: ${widgetKind}`}\n required={isMandatory}\n disabled\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","// fallow-ignore-file code-duplication\nimport {\n type FieldControlInput,\n useFieldControl,\n type WidgetProps,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport type { WidgetKind } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ComponentType } from 'react';\nimport {\n D2AgeField,\n D2BooleanField,\n D2CoordinateField,\n D2DateField,\n D2DateTimeField,\n D2EmailField,\n D2FileField,\n D2GeoJsonField,\n D2ImageField,\n D2IntegerField,\n D2LongTextField,\n D2MultiSelectField,\n D2NumberField,\n D2OrgUnitField,\n D2PercentageField,\n D2PhoneField,\n D2SelectField,\n D2TextField,\n D2TimeField,\n D2TrueOnlyField,\n D2UnsupportedField,\n} from './widgets';\n\nexport type D2FieldProps = {\n field: FieldControlInput;\n};\n\nexport type D2FieldWidgetProps = WidgetProps;\n\nconst WIDGET_BY_KIND: Record<WidgetKind, ComponentType<WidgetProps>> = {\n text: D2TextField,\n longText: D2LongTextField,\n email: D2EmailField,\n phone: D2PhoneField,\n number: D2NumberField,\n integer: D2IntegerField,\n percentage: D2PercentageField,\n boolean: D2BooleanField,\n trueOnly: D2TrueOnlyField,\n date: D2DateField,\n time: D2TimeField,\n age: D2AgeField,\n select: D2SelectField,\n multiSelect: D2MultiSelectField,\n datetime: D2DateTimeField,\n coordinate: D2CoordinateField,\n geojson: D2GeoJsonField,\n orgUnit: D2OrgUnitField,\n file: D2FileField,\n image: D2ImageField,\n unsupported: D2UnsupportedField,\n};\n\n/** Dispatches an already-resolved `FieldControlReturn` to its widget component, without re-deriving field control state. Reused by consumers that build their own chrome (labels, badges, ghost placeholders) around a field. */\nexport function D2FieldWidget({ control }: D2FieldWidgetProps) {\n const Widget = WIDGET_BY_KIND[control.widgetKind];\n return <Widget control={control} />;\n}\n\nexport function D2Field({ field }: D2FieldProps) {\n const fieldControl = useFieldControl({ ...field });\n\n if (fieldControl.isHidden) return null;\n\n return <D2FieldWidget control={fieldControl} />;\n}\n","import { useSectionState } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ReactNode } from 'react';\n\nexport type FormSectionProps = {\n sectionId: string;\n children: ReactNode;\n};\n\nexport function FormSection({ sectionId, children }: FormSectionProps) {\n const state = useSectionState(sectionId);\n\n if (state.hidden) {\n return null;\n }\n\n return <>{children}</>;\n}\n","import { NoticeBox } from '@dhis2/ui';\nimport { useFormFeedback } from '@nnkogift/dhis2-form-utils-hooks';\n\ntype FeedbackItem = ReturnType<typeof useFormFeedback>[string];\n\nfunction FeedbackPanel({ title, items }: { title: string; items: FeedbackItem[] }) {\n if (!items.length) {\n return null;\n }\n\n return (\n <div style={{ marginBottom: 'var(--spacers-dp16)' }}>\n <h3 style={{ margin: '0 0 var(--spacers-dp8)' }}>{title}</h3>\n {items.map((item) => (\n <NoticeBox key={`${item.location}:${item.content}`} title={item.content}>\n {item.value ? (\n <>\n <strong>{item.content}</strong>: {item.value}\n </>\n ) : (\n item.content\n )}\n </NoticeBox>\n ))}\n </div>\n );\n}\n\nexport function FormFeedback() {\n const feedback = useFormFeedback();\n const items = Object.values(feedback);\n const feedbackItems = items.filter((item) => item.location === 'feedback');\n const indicatorItems = items.filter((item) => item.location === 'indicators');\n\n if (!feedbackItems.length && !indicatorItems.length) {\n return null;\n }\n\n return (\n <div>\n <FeedbackPanel title=\"Feedback\" items={feedbackItems} />\n <FeedbackPanel title=\"Program indicators\" items={indicatorItems} />\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/fields/widgets/TextField.tsx","../src/fields/widgets/LongTextField.tsx","../src/fields/widgets/NumericFields.tsx","../src/fields/widgets/DateFields.tsx","../src/fields/widgets/ChoiceFields.tsx","../src/fields/widgets/OrgUnitField.tsx","../src/fields/widgets/FileFields.tsx","../../../packages/map/src/coordinateValue.ts","../../../packages/map/src/geojsonValue.ts","../../../packages/map/src/defaultMapStyle.ts","../../../packages/map/src/useMapLibreMap.ts","../../../packages/map/src/CoordinateMapPicker.tsx","../../../packages/map/src/GeoJsonMapEditor.tsx","../src/fields/widgets/MapFields.tsx","../src/fields/widgets/UnsupportedField.tsx","../src/fields/D2Field.tsx","../src/components/FormSection.tsx","../src/components/FormFeedback.tsx"],"names":["resolveFieldValidation","jsx","InputField","jsxs","useState","MapLibreMap","useRef","useEffect","TextAreaField","Fragment"],"mappings":";;;;;;;;;;;AAIO,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAAgB;AAClD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAI,uBAAuB,OAAO,CAAA;AAE/E,EAAA,uBACI,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACG,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,UAAU,WAAA,CAAY,WAAA;AAAA,MACtB,QAAA,EAAU,WAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,cAAA;AAAA,MACA,QAAA,EAAU,CAAC,EAAE,KAAA,EAAM,KAAM;AACrB,QAAA,KAAA,CAAM,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,MAC9B,CAAA;AAAA,MACA,QAAQ,KAAA,CAAM;AAAA;AAAA,GAClB;AAER;ACrBO,SAAS,eAAA,CAAgB,EAAE,OAAA,EAAQ,EAAgB;AACtD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAIA,uBAAuB,OAAO,CAAA;AAE/E,EAAA,uBACIC,GAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACG,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,UAAU,WAAA,CAAY,WAAA;AAAA,MACtB,QAAA,EAAU,WAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,cAAA;AAAA,MACA,QAAA,EAAU,CAAC,EAAE,KAAA,EAAM,KAAM;AACrB,QAAA,KAAA,CAAM,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,MAC9B,CAAA;AAAA,MACA,QAAQ,KAAA,CAAM;AAAA;AAAA,GAClB;AAER;ACpBA,SAAS,gBAAA,CAAiB,EAAE,OAAA,EAAS,IAAA,EAAK,EAAwD;AAC9F,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAID,uBAAuB,OAAO,CAAA;AAE/E,EAAA,uBACIC,GAAAA;AAAA,IAACC,UAAAA;AAAA,IAAA;AAAA,MACG,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,UAAU,WAAA,CAAY,WAAA;AAAA,MACtB,QAAA,EAAU,WAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,IAAA;AAAA,MACA,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,cAAA;AAAA,MACA,QAAA,EAAU,CAAC,EAAE,KAAA,EAAM,KAAM;AACrB,QAAA,KAAA,CAAM,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,MAC9B,CAAA;AAAA,MACA,QAAQ,KAAA,CAAM;AAAA;AAAA,GAClB;AAER;AAEO,SAAS,aAAa,KAAA,EAAoB;AAC7C,EAAA,uBAAOD,GAAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO,MAAK,OAAA,EAAQ,CAAA;AACrD;AAEO,SAAS,aAAa,KAAA,EAAoB;AAC7C,EAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO,MAAK,KAAA,EAAM,CAAA;AACnD;AAEO,SAAS,cAAc,KAAA,EAAoB;AAC9C,EAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO,MAAK,QAAA,EAAS,CAAA;AACtD;AAEO,SAAS,eAAe,KAAA,EAAoB;AAC/C,EAAA,uBAAOA,GAAAA,CAAC,gBAAA,EAAA,EAAkB,GAAG,KAAA,EAAO,MAAK,QAAA,EAAS,CAAA;AACtD;AAEO,SAAS,iBAAA,CAAkB,EAAE,OAAA,EAAQ,EAAgB;AACxD,EAAA,uBACIA,GAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAS;AAAA,QACL,GAAG,OAAA;AAAA,QACH,WAAA,EAAa;AAAA,UACT,GAAG,OAAA,CAAQ,WAAA;AAAA,UACX,KAAA,EAAO,CAAA,EAAG,OAAA,CAAQ,WAAA,CAAY,KAAK,CAAA,IAAA;AAAA;AACvC;AACJ;AAAA,GACJ;AAER;ACrDA,IAAM,QAAA,GAAW,uBAAc,IAAI,IAAA,IAAO,WAAA,EAAY,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAMnE,IAAM,YAAA,GAAe,CAAC,KAAA,KAA0B;AAC5C,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,OAAO,KAAA,CAAM,SAAS,GAAG,CAAA,GAAI,MAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,KAAA;AACtD,CAAA;AAEA,IAAM,YAAA,GAAe,CAAC,KAAA,KAA0B;AAC5C,EAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,GAAG,GAAG,OAAO,EAAA;AACjC,EAAA,OAAO,KAAA,CAAM,KAAA,CAAM,EAAA,EAAI,EAAE,CAAA;AAC7B,CAAA;AAEO,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAAgB;AAClD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAID,uBAAuB,OAAO,CAAA;AAC/E,EAAA,MAAM,YAAY,KAAA,CAAM,KAAA;AAExB,EAAA,uBACIC,GAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACG,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,UAAU,WAAA,CAAY,WAAA;AAAA,MACtB,QAAA,EAAU,WAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,cAAA;AAAA,MACA,QAAA,EAAS,SAAA;AAAA,MACT,MAAA,EAAO,YAAA;AAAA,MACP,MAAM,SAAA,IAAa,MAAA;AAAA,MACnB,WAAW,CAAC,WAAA;AAAA,MACZ,QAAA,EAAU,CAAC,WAAA,CAAY,eAAA;AAAA,MACvB,OAAA,EAAS,WAAA,CAAY,eAAA,GAAkB,MAAA,GAAY,QAAA,EAAS;AAAA,MAC5D,YAAA,EAAc,CAAC,OAAA,KAA+B;AAC1C,QAAA,KAAA,CAAM,QAAA,CAAS,OAAA,EAAS,kBAAA,IAAsB,EAAE,CAAA;AAAA,MACpD,CAAA;AAAA,MACA,QAAQ,KAAA,CAAM;AAAA;AAAA,GAClB;AAER;AAEO,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAAgB;AAClD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAID,uBAAuB,OAAO,CAAA;AAE/E,EAAA,uBACIC,GAAAA;AAAA,IAACC,UAAAA;AAAA,IAAA;AAAA,MACG,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,UAAU,WAAA,CAAY,WAAA;AAAA,MACtB,QAAA,EAAU,WAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,IAAA,EAAK,MAAA;AAAA,MACL,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,cAAA;AAAA,MACA,QAAA,EAAU,CAAC,EAAE,KAAA,EAAM,KAAM;AACrB,QAAA,KAAA,CAAM,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,MAC9B,CAAA;AAAA,MACA,QAAQ,KAAA,CAAM;AAAA;AAAA,GAClB;AAER;AAEO,SAAS,eAAA,CAAgB,EAAE,OAAA,EAAQ,EAAgB;AACtD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAIF,uBAAuB,OAAO,CAAA;AAC/E,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,EAAA,MAAM,QAAA,GAAW,aAAa,KAAK,CAAA;AACnC,EAAA,MAAM,QAAA,GAAW,aAAa,KAAK,CAAA;AAEnC,EAAA,MAAM,MAAA,GAAS,CAAC,QAAA,EAAkB,QAAA,KAAqB;AACnD,IAAA,IAAI,CAAC,QAAA,IAAY,CAAC,QAAA,EAAU;AACxB,MAAA,KAAA,CAAM,SAAS,EAAE,CAAA;AACjB,MAAA;AAAA,IACJ;AACA,IAAA,KAAA,CAAM,SAAS,CAAA,EAAG,QAAQ,CAAA,CAAA,EAAI,QAAA,IAAY,OAAO,CAAA,CAAE,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,4BACK,KAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAC,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,KAAA,CAAA;AAAA,QACnB,OAAO,WAAA,CAAY,KAAA;AAAA,QACnB,UAAU,WAAA,CAAY,WAAA;AAAA,QACtB,QAAA,EAAU,WAAA;AAAA,QACV,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,KAAA,EAAO,QAAA;AAAA,QACP,cAAA;AAAA,QACA,QAAA,EAAS,SAAA;AAAA,QACT,MAAA,EAAO,YAAA;AAAA,QACP,MAAM,QAAA,IAAY,MAAA;AAAA,QAClB,WAAW,CAAC,WAAA;AAAA,QACZ,QAAA,EAAU,CAAC,WAAA,CAAY,eAAA;AAAA,QACvB,OAAA,EAAS,WAAA,CAAY,eAAA,GAAkB,MAAA,GAAY,QAAA,EAAS;AAAA,QAC5D,YAAA,EAAc,CAAC,OAAA,KAA+B;AAC1C,UAAA,MAAA,CAAO,OAAA,EAAS,kBAAA,IAAsB,EAAA,EAAI,QAAQ,CAAA;AAAA,QACtD,CAAA;AAAA,QACA,QAAQ,KAAA,CAAM;AAAA;AAAA,KAClB;AAAA,oBACAA,GAAAA;AAAA,MAACC,UAAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,KAAA,CAAA;AAAA,QACnB,KAAA,EAAO,QAAA;AAAA,QACP,KAAA,EAAO,CAAA,EAAG,WAAA,CAAY,KAAK,CAAA,OAAA,CAAA;AAAA,QAC3B,QAAA,EAAU,WAAA;AAAA,QACV,QAAA,EAAU,UAAA;AAAA,QACV,IAAA,EAAK,MAAA;AAAA,QACL,OAAA,EAAS,UAAA;AAAA,QACT,KAAA,EAAO,QAAA;AAAA,QACP,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,UAAS,KAAM;AAC/B,UAAA,MAAA,CAAO,QAAA,EAAU,YAAY,EAAE,CAAA;AAAA,QACnC,CAAA;AAAA,QACA,QAAQ,KAAA,CAAM;AAAA;AAAA;AAClB,GAAA,EACJ,CAAA;AAER;AAEO,SAAS,UAAA,CAAW,EAAE,OAAA,EAAQ,EAAgB;AACjD,EAAA,MAAM,GAAA,GAAM,iBAAA,CAAkB,OAAA,CAAQ,KAAA,CAAM,KAAe,CAAA;AAC3D,EAAA,MAAM,QAAA,GAAW,CAAC,OAAA,CAAQ,WAAA,CAAY,aAAa,GAAA,GAAM,CAAA,KAAA,EAAQ,GAAG,CAAA,MAAA,CAAA,GAAW,MAAS,CAAA,CACnF,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,QAAK,CAAA;AAEf,EAAA,uBACID,GAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAS;AAAA,QACL,GAAG,OAAA;AAAA,QACH,WAAA,EAAa;AAAA,UACT,GAAG,OAAA,CAAQ,WAAA;AAAA,UACX,WAAA,EAAa,QAAA,IAAY,OAAA,CAAQ,WAAA,CAAY;AAAA;AACjD;AACJ;AAAA,GACJ;AAER;AChIA,IAAM,eAAA,GAAkB;AAAA,EACpB,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,MAAA,EAAO;AAAA,EAC9B,EAAE,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,OAAA;AAC1B,CAAA;AAEA,IAAM,qCAAqB,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,uBAAA,EAAyB,yBAAyB,CAAC,CAAA;AAEzF,SAAS,cAAA,CAAe,EAAE,OAAA,EAAQ,EAAgB;AACrD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,UAAA,EAAW,GAAI,OAAA,CAAQ,MAAM,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AACxF,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAI,OAAA;AAAA,IAC7C,MAAMD,uBAAuB,OAAO,CAAA;AAAA,IACpC,CAAC,OAAO;AAAA,GACZ;AAEA,EAAA,uBACIC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,UAAU,WAAA,CAAY,WAAA;AAAA,MACtB,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,QAAA,EAAU,WAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,cAAA;AAAA,MAEA,QAAA,kBAAAA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACG,KAAA,EAAO;AAAA,YACH,OAAA,EAAS,MAAA;AAAA,YACT,GAAA,EAAK;AAAA,WACT;AAAA,UAEC,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,MAAA,qBAClBA,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cAEG,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,OAAO,MAAA,CAAO,KAAA;AAAA,cACd,OAAA,EAAS,KAAA,CAAM,KAAA,KAAU,MAAA,CAAO,KAAA;AAAA,cAChC,QAAA,EAAU,UAAA;AAAA,cACV,QAAA,EAAU,CAAC,EAAE,KAAA,EAAM,KAAM;AACrB,gBAAA,KAAA,CAAM,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,cAC9B,CAAA;AAAA,cACA,QAAQ,KAAA,CAAM;AAAA,aAAA;AAAA,YATT,MAAA,CAAO;AAAA,WAWnB;AAAA;AAAA;AACL;AAAA,GACJ;AAER;AAEO,SAAS,eAAA,CAAgB,EAAE,OAAA,EAAQ,EAAgB;AACtD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,UAAA,EAAW,GAAI,OAAA,CAAQ,MAAM,OAAA,EAAS,CAAC,OAAO,CAAC,CAAA;AACxF,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAI,OAAA;AAAA,IAC7C,MAAMD,uBAAuB,OAAO,CAAA;AAAA,IACpC,CAAC,OAAO;AAAA,GACZ;AAEA,EAAA,uBACIC,GAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACG,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,UAAU,WAAA,CAAY,WAAA;AAAA,MACtB,QAAA,EAAU,WAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,cAAA;AAAA,MACA,OAAA,EAAS,MAAM,KAAA,KAAU,MAAA;AAAA,MACzB,QAAA,EAAU,CAAC,EAAE,OAAA,EAAQ,KAAM;AACvB,QAAA,KAAA,CAAM,QAAA,CAAS,OAAA,GAAU,MAAA,GAAS,EAAE,CAAA;AAAA,MACxC,CAAA;AAAA,MACA,QAAQ,KAAA,CAAM;AAAA;AAAA,GAClB;AAER;AAEO,SAAS,aAAA,CAAc,EAAE,OAAA,EAAQ,EAAgB;AACpD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAID,uBAAuB,OAAO,CAAA;AAC/E,EAAA,MAAM,WAAW,OAAA,CAAQ,cAAA,IAAkB,YAAY,SAAA,EAAW,OAAA,IAAW,EAAC,EAAG,GAAA;AAAA,IAC7E,CAAC,MAAA,MAAY;AAAA,MACT,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,OAAO,MAAA,CAAO;AAAA,KAClB;AAAA,GACJ;AAEA,EAAA,IAAI,YAAY,cAAA,IAAkB,kBAAA,CAAmB,GAAA,CAAI,WAAA,CAAY,cAAc,CAAA,EAAG;AAClF,IAAA,uBACIG,KAAC,UAAA,EAAA,EACG,QAAA,EAAA;AAAA,sBAAAF,GAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,WAAA,CAAY,KAAA,EAAM,CAAA;AAAA,MAC1B,YAAY,WAAA,mBAAcA,IAAC,GAAA,EAAA,EAAG,QAAA,EAAA,WAAA,CAAY,aAAY,CAAA,GAAO,IAAA;AAAA,MAC7D,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACVA,GAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEG,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,OAAA,EAAS,KAAA,CAAM,KAAA,KAAU,MAAA,CAAO,KAAA;AAAA,UAChC,QAAA,EAAU,UAAA;AAAA,UACV,QAAA,EAAU,CAAC,EAAE,KAAA,EAAM,KAAM;AACrB,YAAA,KAAA,CAAM,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,UAC9B;AAAA,SAAA;AAAA,QAPK,MAAA,CAAO;AAAA,OASnB,CAAA;AAAA,MACA,cAAA,mBAAiBA,GAAAA,CAAC,GAAA,EAAA,EAAG,0BAAe,CAAA,GAAO;AAAA,KAAA,EAChD,CAAA;AAAA,EAER;AAEA,EAAA,uBACIA,GAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACG,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,UAAU,WAAA,CAAY,WAAA;AAAA,MACtB,QAAA,EAAU,WAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,cAAA;AAAA,MACA,UAAU,KAAA,CAAM,KAAA;AAAA,MAChB,QAAA,EAAU,CAAC,EAAE,QAAA,EAAS,KAAM;AACxB,QAAA,KAAA,CAAM,SAAS,QAAQ,CAAA;AAAA,MAC3B,CAAA;AAAA,MACA,QAAQ,KAAA,CAAM,MAAA;AAAA,MAEb,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACVA,GAAAA,CAAC,kBAAA,EAAA,EAAsC,KAAA,EAAO,MAAA,CAAO,OAAO,KAAA,EAAO,MAAA,CAAO,KAAA,EAAA,EAAjD,MAAA,CAAO,KAAiD,CACpF;AAAA;AAAA,GACL;AAER;AAEO,SAAS,kBAAA,CAAmB,EAAE,OAAA,EAAQ,EAAgB;AACzD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAID,uBAAuB,OAAO,CAAA;AAC/E,EAAA,MAAM,OAAA,GAAU,OAAA;AAAA,IACZ,MAAA,CACK,OAAA,CAAQ,cAAA,IAAkB,WAAA,CAAY,SAAA,EAAW,WAAW,EAAC,EAAG,GAAA,CAAI,CAAC,MAAA,MAAY;AAAA,MAC9E,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,OAAO,MAAA,CAAO;AAAA,KAClB,CAAE,CAAA;AAAA,IACN,CAAC,OAAA,CAAQ,cAAA,EAAgB,WAAA,CAAY,WAAW,OAAO;AAAA,GAC3D;AACA,EAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,KAAA,CAAM,KAAe,CAAA;AAE1D,EAAA,uBACIC,GAAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACG,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,UAAU,WAAA,CAAY,WAAA;AAAA,MACtB,QAAA,EAAU,WAAA;AAAA,MACV,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,cAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA,EAAU,CAAC,EAAE,QAAA,EAAU,cAAa,KAAM;AACtC,QAAA,KAAA,CAAM,QAAA,CAAS,kBAAA,CAAmB,YAAY,CAAC,CAAA;AAAA,MACnD,CAAA;AAAA,MACA,QAAQ,KAAA,CAAM,MAAA;AAAA,MAEb,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACVA,GAAAA,CAAC,iBAAA,EAAA,EAAqC,KAAA,EAAO,MAAA,CAAO,OAAO,KAAA,EAAO,MAAA,CAAO,KAAA,EAAA,EAAjD,MAAA,CAAO,KAAiD,CACnF;AAAA;AAAA,GACL;AAER;ACzKO,SAAS,cAAA,CAAe,EAAE,OAAA,EAAQ,EAAgB;AACrD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAID,uBAAuB,OAAO,CAAA;AAC/E,EAAA,MAAM,gBAAgB,uBAAA,EAAwB;AAC9C,EAAA,MAAM,EAAE,iBAAA,EAAmB,KAAA,EAAO,OAAA,EAAS,OAAM,GAAI,yBAAA;AAAA,IACjD,aAAA,EAAe;AAAA,GACnB;AAEA,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,EAAA,MAAM,eAAe,iBAAA,CAAkB,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,OAAO,KAAK,CAAA;AACnE,EAAA,MAAM,aAAA,GAAgB,cAAc,WAAA,IAAe,KAAA;AAEnD,EAAA,uBACIG,KAAC,UAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAA,KAAC,QAAA,EAAA,EACI,QAAA,EAAA;AAAA,MAAA,WAAA,CAAY,KAAA;AAAA,MACZ,cAAc,IAAA,GAAO;AAAA,KAAA,EAC1B,CAAA;AAAA,IACC,YAAY,WAAA,mBAAcF,IAAC,GAAA,EAAA,EAAG,QAAA,EAAA,WAAA,CAAY,aAAY,CAAA,GAAO,IAAA;AAAA,IAC7D,aAAA,mBACGE,IAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA;AAAA,MAAA,YAAA;AAAA,MACY,aAAA;AAAA,MAAe,GAAA;AAAA,sBAC1BF,GAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACG,KAAA,EAAK,IAAA;AAAA,UACL,QAAA,EAAU,UAAA;AAAA,UACV,SAAS,MAAM;AACX,YAAA,KAAA,CAAM,SAAS,EAAE,CAAA;AAAA,UACrB,CAAA;AAAA,UACH,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACJ,CAAA,GACA,IAAA;AAAA,IACH,KAAA,CAAM,MAAA,GAAS,CAAA,mBACZA,GAAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACG,KAAA;AAAA,QACA,eAAA,EAAe,IAAA;AAAA,QACf,gBAAA,EAAkB,UAAA;AAAA,QAClB,mBAAmB,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,KAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAA;AAAA,QAC7C,QAAA,EAAU,CAAC,EAAE,EAAA,EAAG,KAAM;AAClB,UAAA,KAAA,CAAM,SAAS,EAAE,CAAA;AAAA,QACrB;AAAA;AAAA,KACJ,GACA,OAAA,mBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,kCAAA,EAA2B,CAAA,GAC9B,KAAA,mBACAA,GAAAA,CAAC,GAAA,EAAA,EAAE,QAAA,EAAA,oCAAA,EAAkC,CAAA,GACrC,IAAA;AAAA,IACH,cAAA,mBACGA,GAAAA,CAAC,GAAA,EAAA,EAAE,YAAA,EAAY,QAAA,IAAY,MAAA,EAAW,cAAA,EAAc,UAAA,IAAc,MAAA,EAC7D,QAAA,EAAA,cAAA,EACL,CAAA,GACA;AAAA,GAAA,EACR,CAAA;AAER;AC1DA,SAAS,mBAAmB,QAAA,EAAgC;AACxD,EAAA,MAAM,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,KAAU,qBAAA,EAAsB;AAC3D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAA6B,MAAS,CAAA;AAE5E,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAoB;AACrC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA;AACzB,IAAA,IAAI,CAAC,IAAA,EAAM;AAEX,IAAA,cAAA,CAAe,MAAS,CAAA;AACxB,IAAA,MAAA,CAAO,IAAI,CAAA,CACN,IAAA,CAAK,CAAC,MAAA,KAAW;AACd,MAAA,QAAA,CAAS,OAAO,EAAE,CAAA;AAAA,IACtB,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,aAAA,KAA2B;AAC/B,MAAA,cAAA;AAAA,QACI,aAAA,YAAyB,KAAA,GAAQ,aAAA,CAAc,OAAA,GAAU;AAAA,OAC7D;AAAA,IACJ,CAAC,CAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,SAAA,EAAW,WAAA,EAAa,WAAA,IAAe,OAAO,OAAA,EAAQ;AAChF;AAGO,SAAS,WAAA,CAAY,EAAE,OAAA,EAAQ,EAAgB;AAClD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAID,uBAAuB,OAAO,CAAA;AAC/E,EAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAW,aAAY,GAAI,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AAEjF,EAAA,uBACIC,GAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACG,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,QAAA,EACI,WAAA,IACA,WAAA,CAAY,WAAA,KACX,YAAY,iBAAA,GAAe,2CAAA,CAAA;AAAA,MAEhC,QAAA,EAAU,WAAA;AAAA,MACV,UAAU,UAAA,IAAc,SAAA;AAAA,MACxB,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA,IAAY,OAAA,CAAQ,WAAW,CAAA;AAAA,MACtC,cAAA;AAAA,MACA,WAAA,EAAc,KAAA,CAAM,KAAA,GAAmB,cAAA,GAAiB,aAAA;AAAA,MACxD,QAAA,EAAU,CAAC,EAAE,KAAA,EAAM,KAAM;AACrB,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA,MACrB,CAAA;AAAA,MACA,QAAQ,KAAA,CAAM;AAAA;AAAA,GAClB;AAER;AAGO,SAAS,YAAA,CAAa,EAAE,OAAA,EAAQ,EAAgB;AACnD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAID,uBAAuB,OAAO,CAAA;AAC/E,EAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAW,aAAY,GAAI,kBAAA,CAAmB,MAAM,QAAQ,CAAA;AACjF,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,SAAA,EAAU;AAC9B,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AAEpB,EAAA,uBACIG,KAAC,KAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAF,GAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACG,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,OAAO,WAAA,CAAY,KAAA;AAAA,QACnB,MAAA,EAAO,SAAA;AAAA,QACP,QAAA,EACI,WAAA,IACA,WAAA,CAAY,WAAA,KACX,YAAY,iBAAA,GAAe,2CAAA,CAAA;AAAA,QAEhC,QAAA,EAAU,WAAA;AAAA,QACV,UAAU,UAAA,IAAc,SAAA;AAAA,QACxB,OAAA,EAAS,UAAA;AAAA,QACT,KAAA,EAAO,QAAA,IAAY,OAAA,CAAQ,WAAW,CAAA;AAAA,QACtC,cAAA;AAAA,QACA,WAAA,EAAa,QAAQ,eAAA,GAAkB,cAAA;AAAA,QACvC,QAAA,EAAU,CAAC,EAAE,KAAA,EAAM,KAAM;AACrB,UAAA,WAAA,CAAY,KAAK,CAAA;AAAA,QACrB,CAAA;AAAA,QACA,QAAQ,KAAA,CAAM;AAAA;AAAA,KAClB;AAAA,IACC,wBACGA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACG,GAAA,EAAK,CAAA,EAAG,OAAO,CAAA,mBAAA,EAAsB,KAAK,CAAA,KAAA,CAAA;AAAA,QAC1C,KAAK,WAAA,CAAY,KAAA;AAAA,QACjB,OAAO,EAAE,QAAA,EAAU,SAAS,SAAA,EAAW,OAAA,EAAS,WAAW,KAAA;AAAM;AAAA,KACrE,GACA;AAAA,GAAA,EACR,CAAA;AAER;;;AC/FA,IAAM,OAAA,GAAU,IAAA;AAChB,IAAM,OAAA,GAAU,GAAA;AAChB,IAAM,OAAA,GAAU,GAAA;AAChB,IAAM,OAAA,GAAU,EAAA;AAOT,SAAS,qBAAqB,KAAA,EAAuC;AACxE,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACA,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAM,KAAK,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,IAAA;AAC1D,EAAA,MAAM,GAAA,GAAe,OAAO,CAAC,CAAA;AAC7B,EAAA,MAAM,GAAA,GAAe,OAAO,CAAC,CAAA;AAC7B,EAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,OAAO,GAAA,KAAQ,UAAU,OAAO,IAAA;AAC/D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,IAAK,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG,OAAO,IAAA;AAC3D,EAAA,IAAI,GAAA,GAAM,WAAW,GAAA,GAAM,OAAA,IAAW,MAAM,OAAA,IAAW,GAAA,GAAM,SAAS,OAAO,IAAA;AAE7E,EAAA,OAAO,EAAE,KAAK,GAAA,EAAI;AACtB;AAGO,SAAS,mBAAA,CAAoB,KAAa,GAAA,EAAqB;AAClE,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AACpC;;;ACpBA,IAAM,cAAA,uBAAqB,GAAA,CAAI;AAAA,EAC3B,OAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA;AACJ,CAAC,CAAA;AAED,SAAS,gBAAgB,KAAA,EAAmC;AACxD,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,MAAM,OAAO,KAAA;AACxD,EAAA,MAAM,SAAA,GAAY,KAAA;AAClB,EAAA,IAAI,OAAO,SAAA,CAAU,IAAA,KAAS,QAAA,IAAY,CAAC,eAAe,GAAA,CAAI,SAAA,CAAU,IAAI,CAAA,EAAG,OAAO,KAAA;AACtF,EAAA,IAAI,UAAU,IAAA,KAAS,oBAAA,SAA6B,KAAA,CAAM,OAAA,CAAQ,UAAU,UAAU,CAAA;AACtF,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,SAAA,CAAU,WAAW,CAAA;AAC9C;AAGO,SAAS,qBAAqB,KAAA,EAAgC;AACjE,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAEnB,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACA,IAAA,MAAA,GAAS,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EAC7B,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,OAAO,eAAA,CAAgB,MAAM,CAAA,GAAI,MAAA,GAAS,IAAA;AAC9C;AAGO,SAAS,yBAAyB,QAAA,EAA4B;AACjE,EAAA,OAAO,IAAA,CAAK,UAAU,QAAQ,CAAA;AAClC;;;ACpCO,IAAM,eAAA,GAAsC;AAAA,EAC/C,OAAA,EAAS,CAAA;AAAA,EACT,OAAA,EAAS;AAAA,IACL,GAAA,EAAK;AAAA,MACD,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,CAAC,gDAAgD,CAAA;AAAA,MACxD,QAAA,EAAU,GAAA;AAAA,MACV,WAAA,EAAa;AAAA;AACjB,GACJ;AAAA,EACA,MAAA,EAAQ;AAAA,IACJ;AAAA,MACI,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,MAAA,EAAQ;AAAA;AACZ;AAER,CAAA;ACRO,SAAS,cAAA,CAAe,EAAE,KAAA,EAAM,EAAgD;AACnF,EAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAIG,SAA6B,IAAI,CAAA;AAEvD,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,aAAa,OAAA,EAAS;AAE3B,IAAA,MAAM,QAAA,GAAW,IAAIC,GAAA,CAAY;AAAA,MAC7B,WAAW,YAAA,CAAa,OAAA;AAAA,MACxB,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,MACb,IAAA,EAAM;AAAA,KACT,CAAA;AACD,IAAA,QAAA,CAAS,UAAA,CAAW,IAAI,iBAAA,EAAkB,EAAG,WAAW,CAAA;AACxD,IAAA,QAAA,CAAS,IAAA,CAAK,QAAQ,MAAM;AACxB,MAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,IACnB,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACT,MAAA,QAAA,CAAS,MAAA,EAAO;AAChB,MAAA,MAAA,CAAO,IAAI,CAAA;AAAA,IACf,CAAA;AAAA,EAEJ,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,cAAc,GAAA,EAAI;AAC/B;AClCO,SAAS,mBAAA,CAAoB;AAAA,EAChC,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACJ,CAAA,EAA6B;AACzB,EAAA,MAAM,EAAE,cAAc,GAAA,EAAI,GAAI,eAAe,EAAE,KAAA,EAAO,QAAA,IAAY,eAAA,EAAiB,CAAA;AACnF,EAAA,MAAM,SAAA,GAAYC,OAAsB,IAAI,CAAA;AAC5C,EAAA,MAAM,WAAA,GAAcA,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAAC,UAAU,MAAM;AACZ,IAAA,IAAI,CAAC,GAAA,EAAK;AAEV,IAAA,MAAM,YAAA,GAAe,CAAC,GAAA,EAAa,GAAA,KAAgB;AAC/C,MAAA,IAAI,UAAU,OAAA,EAAS;AACnB,QAAA,SAAA,CAAU,OAAA,CAAQ,SAAA,CAAU,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AACtC,QAAA,OAAO,SAAA,CAAU,OAAA;AAAA,MACrB;AACA,MAAA,MAAM,SAAS,IAAI,MAAA,CAAO,EAAE,SAAA,EAAW,CAAC,QAAA,EAAU,CAAA,CAAE,SAAA,CAAU,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA;AACnF,MAAA,MAAA,CAAO,EAAA,CAAG,WAAW,MAAM;AACvB,QAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,QAAA,WAAA,CAAY,QAAQ,mBAAA,CAAoB,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,MACnE,CAAC,CAAA;AACD,MAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,MAAA,OAAO,MAAA;AAAA,IACX,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAyB;AAC1C,MAAA,IAAI,QAAA,EAAU;AACd,MAAA,YAAA,CAAa,KAAA,CAAM,MAAA,CAAO,GAAA,EAAK,KAAA,CAAM,OAAO,GAAG,CAAA;AAC/C,MAAA,WAAA,CAAY,OAAA,CAAQ,oBAAoB,KAAA,CAAM,MAAA,CAAO,KAAK,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IAC/E,CAAA;AAEA,IAAA,GAAA,CAAI,EAAA,CAAG,SAAS,WAAW,CAAA;AAE3B,IAAA,MAAM,MAAA,GAAS,qBAAqB,KAAK,CAAA;AACzC,IAAA,IAAI,MAAA,EAAQ;AACR,MAAA,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,GAAG,CAAA;AACnC,MAAA,GAAA,CAAI,UAAU,CAAC,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IAC1C;AAEA,IAAA,OAAO,MAAM;AACT,MAAA,GAAA,CAAI,GAAA,CAAI,SAAS,WAAW,CAAA;AAAA,IAChC,CAAA;AAAA,EAEJ,CAAA,EAAG,CAAC,GAAA,EAAK,QAAQ,CAAC,CAAA;AAElB,EAAAA,UAAU,MAAM;AACZ,IAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AACxB,IAAA,MAAM,MAAA,GAAS,qBAAqB,KAAK,CAAA;AACzC,IAAA,IAAI,MAAA,EAAQ;AACR,MAAA,SAAA,CAAU,QAAQ,SAAA,CAAU,CAAC,OAAO,GAAA,EAAK,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IACxD;AAAA,EACJ,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAAA,UAAU,MAAM;AACZ,IAAA,SAAA,CAAU,OAAA,EAAS,YAAA,CAAa,CAAC,QAAQ,CAAA;AAAA,EAC7C,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,uBACIN,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACG,GAAA,EAAK,YAAA;AAAA,MACL,SAAA;AAAA,MACA,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAQ,OAAA,EAAQ;AAAA,MACxC,aAAA,EAAY;AAAA;AAAA,GAChB;AAER;AC/DA,IAAM,aAAA,GAAmC,CAAC,OAAA,EAAS,YAAA,EAAc,SAAS,CAAA;AAE1E,SAAS,eAAe,IAAA,EAAuB;AAC3C,EAAA,QAAQ,IAAA;AAAM,IACV,KAAK,OAAA;AACD,MAAA,OAAO,IAAI,kBAAA,EAAmB;AAAA,IAClC,KAAK,YAAA;AACD,MAAA,OAAO,IAAI,uBAAA,EAAwB;AAAA,IACvC,KAAK,SAAA;AACD,MAAA,OAAO,IAAI,oBAAA,EAAqB;AAAA;AAE5C;AASO,SAAS,gBAAA,CAAiB;AAAA,EAC7B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA,GAAQ;AACZ,CAAA,EAA0B;AACtB,EAAA,MAAM,EAAE,cAAc,GAAA,EAAI,GAAI,eAAe,EAAE,KAAA,EAAO,QAAA,IAAY,eAAA,EAAiB,CAAA;AACnF,EAAA,MAAM,OAAA,GAAUK,OAAyB,IAAI,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAcA,OAAO,QAAQ,CAAA;AACnC,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAEtB,EAAAC,UAAU,MAAM;AACZ,IAAA,IAAI,CAAC,GAAA,EAAK;AAEV,IAAA,MAAM,IAAA,GAAO,IAAI,SAAA,CAAU;AAAA,MACvB,OAAA,EAAS,IAAI,0BAAA,CAA2B,EAAE,KAAK,CAAA;AAAA,MAC/C,KAAA,EAAO,KAAA,CAAM,GAAA,CAAI,cAAc;AAAA,KAClC,CAAA;AACD,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,IAAA,IAAA,CAAK,KAAA,EAAM;AAEX,IAAA,MAAM,OAAA,GAAU,qBAAqB,KAAK,CAAA;AAC1C,IAAA,IAAI,OAAA,EAAS;AACT,MAAA,IAAA,CAAK,WAAA,CAAY;AAAA,QACb,EAAE,IAAA,EAAM,SAAA,EAAW,UAAU,OAAA,EAAmC,UAAA,EAAY,EAAC;AAAE,OAClF,CAAA;AAAA,IACL;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,EAAA,KAAsD;AACxE,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,kBAAA,CAAmB,EAAE,CAAA;AAC1C,MAAA,IAAI,OAAA,EAAS;AACT,QAAA,WAAA,CAAY,OAAA,CAAQ,wBAAA,CAAyB,OAAA,CAAQ,QAAQ,CAAC,CAAA;AAAA,MAClE;AAAA,IACJ,CAAA;AACA,IAAA,IAAA,CAAK,EAAA,CAAG,UAAU,YAAY,CAAA;AAE9B,IAAA,OAAO,MAAM;AACT,MAAA,IAAA,CAAK,GAAA,CAAI,UAAU,YAAY,CAAA;AAC/B,MAAA,IAAI;AAIA,QAAA,IAAA,CAAK,IAAA,EAAK;AAAA,MACd,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,IACtB,CAAA;AAAA,EAEJ,CAAA,EAAG,CAAC,GAAG,CAAC,CAAA;AAER,EAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAA0B;AAC5C,IAAA,MAAM,OAAO,OAAA,CAAQ,OAAA;AACrB,IAAA,IAAI,CAAC,QAAQ,QAAA,EAAU;AACvB,IAAA,IAAA,CAAK,KAAA,EAAM;AACX,IAAA,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,uBACIJ,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EACD,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EAAc,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAQ,EAAG,aAAA,EAAY,MAAA,EAAO,CAAA;AAAA,IACrF,CAAC,QAAA,mBACEA,GAAAA,CAAC,KAAA,EAAA,EAAI,IAAA,EAAK,OAAA,EAAQ,YAAA,EAAW,eAAA,EACxB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,yBACRE,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEG,IAAA,EAAK,QAAA;AAAA,QACL,SAAS,MAAM;AACX,UAAA,YAAA,CAAa,IAAI,CAAA;AAAA,QACrB,CAAA;AAAA,QACH,QAAA,EAAA;AAAA,UAAA,OAAA;AAAA,UACS;AAAA;AAAA,OAAA;AAAA,MAND;AAAA,KAQZ,GACL,CAAA,GACA;AAAA,GAAA,EACR,CAAA;AAER;ACzGO,SAAS,iBAAA,CAAkB,EAAE,OAAA,EAAQ,EAAgB;AACxD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAIH,uBAAuB,OAAO,CAAA;AAC/E,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AAOpB,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAII,QAAAA,CAAS,MAAM,oBAAA,CAAqB,KAAK,CAAA,EAAG,GAAA,CAAI,QAAA,EAAS,IAAK,EAAE,CAAA;AAC9F,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,QAAAA,CAAS,MAAM,oBAAA,CAAqB,KAAK,CAAA,EAAG,GAAA,CAAI,QAAA,EAAS,IAAK,EAAE,CAAA;AAE9F,EAAAG,UAAU,MAAM;AACZ,IAAA,MAAM,MAAA,GAAS,qBAAqB,KAAK,CAAA;AACzC,IAAA,UAAA,CAAW,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,QAAA,KAAa,EAAE,CAAA;AAC9C,IAAA,UAAA,CAAW,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,QAAA,KAAa,EAAE,CAAA;AAAA,EAClD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,MAAA,GAAS,CAAC,MAAA,EAAgB,MAAA,KAAmB;AAC/C,IAAA,MAAM,GAAA,GAAM,WAAW,MAAM,CAAA;AAC7B,IAAA,MAAM,GAAA,GAAM,WAAW,MAAM,CAAA;AAC7B,IAAA,IAAI,OAAO,QAAA,CAAS,GAAG,KAAK,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AAC9C,MAAA,KAAA,CAAM,QAAA,CAAS,mBAAA,CAAoB,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,IAChD;AAAA,EACJ,CAAA;AAEA,EAAA,uBACIJ,KAAC,UAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAA,KAAC,QAAA,EAAA,EACI,QAAA,EAAA;AAAA,MAAA,WAAA,CAAY,KAAA;AAAA,MACZ,cAAc,IAAA,GAAO;AAAA,KAAA,EAC1B,CAAA;AAAA,IACC,YAAY,WAAA,mBAAcF,IAAC,GAAA,EAAA,EAAG,QAAA,EAAA,WAAA,CAAY,aAAY,CAAA,GAAO,IAAA;AAAA,oBAC9DA,IAAC,mBAAA,EAAA,EAAoB,KAAA,EAAc,UAAU,KAAA,CAAM,QAAA,EAAU,UAAU,UAAA,EAAY,CAAA;AAAA,oBACnFA,GAAAA;AAAA,MAACC,UAAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,IAAA,CAAA;AAAA,QACnB,IAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAM,WAAA;AAAA,QACN,KAAA,EAAO,OAAA;AAAA,QACP,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,MAAK,KAAM;AAC3B,UAAA,MAAM,OAAO,IAAA,IAAQ,EAAA;AACrB,UAAA,UAAA,CAAW,IAAI,CAAA;AACf,UAAA,MAAA,CAAO,MAAM,OAAO,CAAA;AAAA,QACxB,CAAA;AAAA,QACA,QAAQ,KAAA,CAAM;AAAA;AAAA,KAClB;AAAA,oBACAD,GAAAA;AAAA,MAACC,UAAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,IAAA,CAAA;AAAA,QACnB,IAAA,EAAK,QAAA;AAAA,QACL,KAAA,EAAM,UAAA;AAAA,QACN,KAAA,EAAO,OAAA;AAAA,QACP,QAAA,EAAU,UAAA;AAAA,QACV,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,MAAK,KAAM;AAC3B,UAAA,MAAM,OAAO,IAAA,IAAQ,EAAA;AACrB,UAAA,UAAA,CAAW,IAAI,CAAA;AACf,UAAA,MAAA,CAAO,SAAS,IAAI,CAAA;AAAA,QACxB,CAAA;AAAA,QACA,QAAQ,KAAA,CAAM;AAAA;AAAA,KAClB;AAAA,IACC,cAAA,mBACGD,GAAAA,CAAC,GAAA,EAAA,EAAE,YAAA,EAAY,QAAA,IAAY,MAAA,EAAW,cAAA,EAAc,UAAA,IAAc,MAAA,EAC7D,QAAA,EAAA,cAAA,EACL,CAAA,GACA;AAAA,GAAA,EACR,CAAA;AAER;AAGO,SAAS,cAAA,CAAe,EAAE,OAAA,EAAQ,EAAgB;AACrD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,WAAA,EAAa,YAAW,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAID,uBAAuB,OAAO,CAAA;AAC/E,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAII,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAA6B,MAAS,CAAA;AAExE,EAAA,uBACID,KAAC,UAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAA,KAAC,QAAA,EAAA,EACI,QAAA,EAAA;AAAA,MAAA,WAAA,CAAY,KAAA;AAAA,MACZ,cAAc,IAAA,GAAO;AAAA,KAAA,EAC1B,CAAA;AAAA,IACC,YAAY,WAAA,mBAAcF,IAAC,GAAA,EAAA,EAAG,QAAA,EAAA,WAAA,CAAY,aAAY,CAAA,GAAO,IAAA;AAAA,oBAC9DA,GAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACG,KAAA;AAAA,QACA,QAAA,EAAU,CAAC,IAAA,KAAS;AAChB,UAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,UAAA,MAAM,QAAA,GAAW,qBAAqB,IAAI,CAAA;AAC1C,UAAA,YAAA,CAAa,WAAW,IAAA,CAAK,SAAA,CAAU,UAAU,IAAA,EAAM,CAAC,IAAI,IAAI,CAAA;AAChE,UAAA,YAAA,CAAa,MAAS,CAAA;AAAA,QAC1B,CAAA;AAAA,QACA,QAAA,EAAU;AAAA;AAAA,KACd;AAAA,oBACAA,GAAAA;AAAA,MAACO,aAAAA;AAAA,MAAA;AAAA,QACG,IAAA,EAAM,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,SAAA,CAAA;AAAA,QACnB,KAAA,EAAM,iBAAA;AAAA,QACN,KAAA,EAAO,SAAA;AAAA,QACP,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,QAAQ,SAAS,CAAA;AAAA,QAC1B,cAAA,EAAgB,SAAA;AAAA,QAChB,QAAA,EAAU,CAAC,EAAE,KAAA,EAAO,MAAK,KAAM;AAC3B,UAAA,YAAA,CAAa,QAAQ,EAAE,CAAA;AAAA,QAC3B,CAAA;AAAA,QACA,QAAQ,MAAM;AACV,UAAA,IAAI,CAAC,SAAA,EAAW;AACZ,YAAA,KAAA,CAAM,SAAS,EAAE,CAAA;AACjB,YAAA,YAAA,CAAa,MAAS,CAAA;AACtB,YAAA;AAAA,UACJ;AACA,UAAA,MAAM,QAAA,GAAW,qBAAqB,SAAS,CAAA;AAC/C,UAAA,IAAI,QAAA,EAAU;AACV,YAAA,KAAA,CAAM,QAAA,CAAS,wBAAA,CAAyB,QAAQ,CAAC,CAAA;AACjD,YAAA,YAAA,CAAa,MAAS,CAAA;AAAA,UAC1B,CAAA,MAAO;AACH,YAAA,YAAA,CAAa,8BAA8B,CAAA;AAAA,UAC/C;AACA,UAAA,KAAA,CAAM,MAAA,EAAO;AAAA,QACjB;AAAA;AAAA,KACJ;AAAA,IACC,cAAA,mBACGP,GAAAA,CAAC,GAAA,EAAA,EAAE,YAAA,EAAY,QAAA,IAAY,MAAA,EAAW,cAAA,EAAc,UAAA,IAAc,MAAA,EAC7D,QAAA,EAAA,cAAA,EACL,CAAA,GACA;AAAA,GAAA,EACR,CAAA;AAER;AC5IO,SAAS,kBAAA,CAAmB,EAAE,OAAA,EAAQ,EAAgB;AACzD,EAAA,MAAM,EAAE,WAAA,EAAa,KAAA,EAAO,UAAA,EAAY,aAAY,GAAI,OAAA;AACxD,EAAA,MAAM,EAAE,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAW,GAAID,uBAAuB,OAAO,CAAA;AAE/E,EAAA,uBACIC,GAAAA;AAAA,IAACC,UAAAA;AAAA,IAAA;AAAA,MACG,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,OAAO,WAAA,CAAY,KAAA;AAAA,MACnB,QAAA,EAAU,+BAA+B,UAAU,CAAA,CAAA;AAAA,MACnD,QAAA,EAAU,WAAA;AAAA,MACV,QAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAS,UAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,cAAA;AAAA,MACA,QAAA,EAAU,CAAC,EAAE,KAAA,EAAM,KAAM;AACrB,QAAA,KAAA,CAAM,QAAA,CAAS,SAAS,EAAE,CAAA;AAAA,MAC9B,CAAA;AAAA,MACA,QAAQ,KAAA,CAAM;AAAA;AAAA,GAClB;AAER;ACaA,IAAM,cAAA,GAAiE;AAAA,EACnE,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU,eAAA;AAAA,EACV,KAAA,EAAO,YAAA;AAAA,EACP,KAAA,EAAO,YAAA;AAAA,EACP,MAAA,EAAQ,aAAA;AAAA,EACR,OAAA,EAAS,cAAA;AAAA,EACT,UAAA,EAAY,iBAAA;AAAA,EACZ,OAAA,EAAS,cAAA;AAAA,EACT,QAAA,EAAU,eAAA;AAAA,EACV,IAAA,EAAM,WAAA;AAAA,EACN,IAAA,EAAM,WAAA;AAAA,EACN,GAAA,EAAK,UAAA;AAAA,EACL,MAAA,EAAQ,aAAA;AAAA,EACR,WAAA,EAAa,kBAAA;AAAA,EACb,QAAA,EAAU,eAAA;AAAA,EACV,UAAA,EAAY,iBAAA;AAAA,EACZ,OAAA,EAAS,cAAA;AAAA,EACT,OAAA,EAAS,cAAA;AAAA,EACT,IAAA,EAAM,WAAA;AAAA,EACN,KAAA,EAAO,YAAA;AAAA,EACP,WAAA,EAAa;AACjB,CAAA;AAGO,SAAS,aAAA,CAAc,EAAE,OAAA,EAAQ,EAAuB;AAC3D,EAAA,MAAM,MAAA,GAAS,cAAA,CAAe,OAAA,CAAQ,UAAU,CAAA;AAChD,EAAA,uBAAOD,GAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAkB,CAAA;AACrC;AAEO,SAAS,OAAA,CAAQ,EAAE,KAAA,EAAM,EAAiB;AAC7C,EAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,EAAE,GAAG,OAAO,CAAA;AAEjD,EAAA,IAAI,YAAA,CAAa,UAAU,OAAO,IAAA;AAElC,EAAA,uBAAOA,GAAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,YAAA,EAAc,CAAA;AACjD;AClEO,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,QAAA,EAAS,EAAqB;AACnE,EAAA,MAAM,KAAA,GAAQ,gBAAgB,SAAS,CAAA;AAEvC,EAAA,IAAI,MAAM,MAAA,EAAQ;AACd,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,uBAAOA,GAAAA,CAAA,QAAA,EAAA,EAAG,QAAA,EAAS,CAAA;AACvB;ACXA,SAAS,aAAA,CAAc,EAAE,KAAA,EAAO,KAAA,EAAM,EAA6C;AAC/E,EAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACf,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,uBACIE,IAAAA,CAAC,KAAA,EAAA,EAAI,OAAO,EAAE,YAAA,EAAc,uBAAsB,EAC9C,QAAA,EAAA;AAAA,oBAAAF,IAAC,IAAA,EAAA,EAAG,KAAA,EAAO,EAAE,MAAA,EAAQ,wBAAA,IAA6B,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IACvD,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACRA,GAAAA,CAAC,SAAA,EAAA,EAAmD,KAAA,EAAO,IAAA,CAAK,SAC3D,QAAA,EAAA,IAAA,CAAK,KAAA,mBACFE,IAAAA,CAAAM,UAAA,EACI,QAAA,EAAA;AAAA,sBAAAR,GAAAA,CAAC,QAAA,EAAA,EAAQ,QAAA,EAAA,IAAA,CAAK,OAAA,EAAQ,CAAA;AAAA,MAAS,IAAA;AAAA,MAAG,IAAA,CAAK;AAAA,KAAA,EAC3C,CAAA,GAEA,IAAA,CAAK,OAAA,EAAA,EANG,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAA,CAAA,EAAI,IAAA,CAAK,OAAO,CAAA,CAQhD,CACH;AAAA,GAAA,EACL,CAAA;AAER;AAEO,SAAS,YAAA,GAAe;AAC3B,EAAA,MAAM,WAAW,eAAA,EAAgB;AACjC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AACpC,EAAA,MAAM,gBAAgB,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,UAAU,CAAA;AACzE,EAAA,MAAM,iBAAiB,KAAA,CAAM,MAAA,CAAO,CAAC,IAAA,KAAS,IAAA,CAAK,aAAa,YAAY,CAAA;AAE5E,EAAA,IAAI,CAAC,aAAA,CAAc,MAAA,IAAU,CAAC,eAAe,MAAA,EAAQ;AACjD,IAAA,OAAO,IAAA;AAAA,EACX;AAEA,EAAA,uBACIE,KAAC,KAAA,EAAA,EACG,QAAA,EAAA;AAAA,oBAAAF,GAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAM,UAAA,EAAW,OAAO,aAAA,EAAe,CAAA;AAAA,oBACtDA,GAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAM,oBAAA,EAAqB,OAAO,cAAA,EAAgB;AAAA,GAAA,EACrE,CAAA;AAER","file":"index.js","sourcesContent":["import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2TextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import { TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2LongTextField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <TextAreaField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","import type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { InputField } from '@dhis2/ui';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport { D2TextField } from './TextField';\n\nfunction D2TypedTextField({ control, type }: WidgetProps & { type?: 'email' | 'tel' | 'number' }) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type={type}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2EmailField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"email\" />;\n}\n\nexport function D2PhoneField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"tel\" />;\n}\n\nexport function D2NumberField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2IntegerField(props: WidgetProps) {\n return <D2TypedTextField {...props} type=\"number\" />;\n}\n\nexport function D2PercentageField({ control }: WidgetProps) {\n return (\n <D2TextField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n label: `${control.fieldConfig.label} (%)`,\n },\n }}\n />\n );\n}\n","import { CalendarInput, InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { computeAgeFromDob, resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nconst todayIso = (): string => new Date().toISOString().slice(0, 10);\n\ntype DateSelectPayload = {\n calendarDateString?: string;\n} | null;\n\nconst readDatePart = (value: string): string => {\n if (!value) return '';\n return value.includes('T') ? value.slice(0, 10) : value;\n};\n\nconst readTimePart = (value: string): string => {\n if (!value.includes('T')) return '';\n return value.slice(11, 16);\n};\n\nexport function D2DateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const dateValue = field.value as string;\n\n return (\n <CalendarInput\n name={field.name}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={dateValue || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n field.onChange(payload?.calendarDateString ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2TimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2DateTimeField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const datePart = readDatePart(value);\n const timePart = readTimePart(value);\n\n const commit = (nextDate: string, nextTime: string) => {\n if (!nextDate && !nextTime) {\n field.onChange('');\n return;\n }\n field.onChange(`${nextDate}T${nextTime || '00:00'}`);\n };\n\n return (\n <div>\n <CalendarInput\n name={`${field.name}-date`}\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n calendar=\"gregory\"\n format=\"YYYY-MM-DD\"\n date={datePart || undefined}\n clearable={!isMandatory}\n pastOnly={!fieldConfig.allowFutureDate}\n maxDate={fieldConfig.allowFutureDate ? undefined : todayIso()}\n onDateSelect={(payload: DateSelectPayload) => {\n commit(payload?.calendarDateString ?? '', timePart);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-time`}\n value={timePart}\n label={`${fieldConfig.label} (time)`}\n required={isMandatory}\n disabled={isDisabled}\n type=\"time\"\n warning={hasWarning}\n error={hasError}\n onChange={({ value: nextTime }) => {\n commit(datePart, nextTime ?? '');\n }}\n onBlur={field.onBlur}\n />\n </div>\n );\n}\n\nexport function D2AgeField({ control }: WidgetProps) {\n const age = computeAgeFromDob(control.field.value as string);\n const helpText = [control.fieldConfig.description, age ? `Age: ${age} years` : undefined]\n .filter(Boolean)\n .join(' · ');\n\n return (\n <D2DateField\n control={{\n ...control,\n fieldConfig: {\n ...control.fieldConfig,\n description: helpText || control.fieldConfig.description,\n },\n }}\n />\n );\n}\n","import {\n CheckboxField,\n Field,\n MultiSelectField,\n MultiSelectOption,\n Radio,\n SingleSelectField,\n SingleSelectOption,\n} from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n joinMultiTextValue,\n parseMultiTextValue,\n resolveFieldValidation,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport { useMemo } from 'react';\n\nconst BOOLEAN_OPTIONS = [\n { label: 'Yes', value: 'true' },\n { label: 'No', value: 'false' },\n] as const;\n\nconst RADIO_RENDER_HINTS = new Set(['RADIO', 'VERTICAL_RADIOBUTTONS', 'HORIZONTAL_RADIOBUTTONS']);\n\nexport function D2BooleanField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = useMemo(() => control, [control]);\n const { validationText, hasError, hasWarning } = useMemo(\n () => resolveFieldValidation(control),\n [control]\n );\n\n return (\n <Field\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n warning={hasWarning}\n error={hasError}\n required={isMandatory}\n disabled={isDisabled}\n validationText={validationText}\n >\n <div\n style={{\n display: 'flex',\n gap: 16,\n }}\n >\n {BOOLEAN_OPTIONS.map((option) => (\n <Radio\n key={option.label}\n name={field.name}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n ))}\n </div>\n </Field>\n );\n}\n\nexport function D2TrueOnlyField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = useMemo(() => control, [control]);\n const { validationText, hasError, hasWarning } = useMemo(\n () => resolveFieldValidation(control),\n [control]\n );\n\n return (\n <CheckboxField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n checked={field.value === 'true'}\n onChange={({ checked }) => {\n field.onChange(checked ? 'true' : '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\nexport function D2SelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map(\n (option) => ({\n label: option.label,\n value: option.code,\n })\n );\n\n if (fieldConfig.renderTypeHint && RADIO_RENDER_HINTS.has(fieldConfig.renderTypeHint)) {\n return (\n <fieldset>\n <legend>{fieldConfig.label}</legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {options.map((option) => (\n <Radio\n key={option.value}\n label={option.label}\n value={option.value}\n checked={field.value === option.value}\n disabled={isDisabled}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n />\n ))}\n {validationText ? <p>{validationText}</p> : null}\n </fieldset>\n );\n }\n\n return (\n <SingleSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={field.value as string}\n onChange={({ selected }) => {\n field.onChange(selected);\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <SingleSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </SingleSelectField>\n );\n}\n\nexport function D2MultiSelectField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const options = useMemo(\n () =>\n (control.visibleOptions ?? fieldConfig.optionSet?.options ?? []).map((option) => ({\n label: option.label,\n value: option.code,\n })),\n [control.visibleOptions, fieldConfig.optionSet?.options]\n );\n const selected = parseMultiTextValue(field.value as string);\n\n return (\n <MultiSelectField\n label={fieldConfig.label}\n helpText={fieldConfig.description}\n required={isMandatory}\n disabled={isDisabled}\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n selected={selected}\n onChange={({ selected: nextSelected }) => {\n field.onChange(joinMultiTextValue(nextSelected));\n }}\n onBlur={field.onBlur}\n >\n {options.map((option) => (\n <MultiSelectOption key={option.value} label={option.label} value={option.value} />\n ))}\n </MultiSelectField>\n );\n}\n","import { Button, OrganisationUnitTree } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n resolveFieldValidation,\n useOrgUnitPickerContext,\n useOrganisationUnitsQuery,\n} from '@nnkogift/dhis2-form-utils-hooks';\n\n// fallow-ignore-next-line complexity\nexport function D2OrgUnitField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const pickerContext = useOrgUnitPickerContext();\n const { organisationUnits, roots, loading, error } = useOrganisationUnitsQuery(\n pickerContext?.roots\n );\n\n const value = field.value as string;\n const selectedUnit = organisationUnits.find((ou) => ou.id === value);\n const selectedLabel = selectedUnit?.displayName ?? value;\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n {selectedLabel ? (\n <p>\n Selected: {selectedLabel}{' '}\n <Button\n small\n disabled={isDisabled}\n onClick={() => {\n field.onChange('');\n }}\n >\n Clear\n </Button>\n </p>\n ) : null}\n {roots.length > 0 ? (\n <OrganisationUnitTree\n roots={roots}\n singleSelection\n disableSelection={isDisabled}\n initiallyExpanded={roots.map((id) => `/${id}`)}\n onChange={({ id }) => {\n field.onChange(id);\n }}\n />\n ) : loading ? (\n <p>Loading organisation units…</p>\n ) : error ? (\n <p>Failed to load organisation units.</p>\n ) : null}\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n","import { useConfig } from '@dhis2/app-runtime';\nimport { FileInputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation, useFileResourceUpload } from '@nnkogift/dhis2-form-utils-hooks';\nimport { useState } from 'react';\n\nfunction useFileFieldUpload(onChange: (id: string) => void) {\n const { upload, uploading, error } = useFileResourceUpload();\n const [uploadError, setUploadError] = useState<string | undefined>(undefined);\n\n const handleFiles = (files: FileList) => {\n const file = files.item(0);\n if (!file) return;\n // fallow-ignore-next-line code-duplication\n setUploadError(undefined);\n upload(file)\n .then((result) => {\n onChange(result.id);\n })\n .catch((uploadFailure: unknown) => {\n setUploadError(\n uploadFailure instanceof Error ? uploadFailure.message : 'Upload failed'\n );\n });\n };\n\n return { handleFiles, uploading, uploadError: uploadError ?? error?.message };\n}\n\n// fallow-ignore-next-line complexity\nexport function D2FileField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const { handleFiles, uploading, uploadError } = useFileFieldUpload(field.onChange);\n\n return (\n <FileInputField\n name={field.name}\n label={fieldConfig.label}\n helpText={\n uploadError ??\n fieldConfig.description ??\n (uploading ? 'Uploading…' : 'Max size depends on server configuration.')\n }\n required={isMandatory}\n disabled={isDisabled || uploading}\n warning={hasWarning}\n error={hasError || Boolean(uploadError)}\n validationText={validationText}\n buttonLabel={(field.value as string) ? 'Replace file' : 'Select file'}\n onChange={({ files }) => {\n handleFiles(files);\n }}\n onBlur={field.onBlur}\n />\n );\n}\n\n// fallow-ignore-next-line complexity\nexport function D2ImageField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const { handleFiles, uploading, uploadError } = useFileFieldUpload(field.onChange);\n const { baseUrl } = useConfig();\n const value = field.value as string;\n\n return (\n <div>\n <FileInputField\n name={field.name}\n label={fieldConfig.label}\n accept=\"image/*\"\n helpText={\n uploadError ??\n fieldConfig.description ??\n (uploading ? 'Uploading…' : 'Max size depends on server configuration.')\n }\n required={isMandatory}\n disabled={isDisabled || uploading}\n warning={hasWarning}\n error={hasError || Boolean(uploadError)}\n validationText={validationText}\n buttonLabel={value ? 'Replace image' : 'Select image'}\n onChange={({ files }) => {\n handleFiles(files);\n }}\n onBlur={field.onBlur}\n />\n {value ? (\n <img\n src={`${baseUrl}/api/fileResources/${value}/data`}\n alt={fieldConfig.label}\n style={{ maxWidth: '200px', maxHeight: '200px', marginTop: '8px' }}\n />\n ) : null}\n </div>\n );\n}\n","export type CoordinateValue = { lng: number; lat: number };\n\nconst LNG_MIN = -180;\nconst LNG_MAX = 180;\nconst LAT_MIN = -90;\nconst LAT_MAX = 90;\n\n/**\n * Parses a DHIS2 `COORDINATE` value-type string, wire format `\"[lng,lat]\"`\n * (matches DHIS2 tracker API's coordinate/GeoJSON Point ordering).\n * Returns `null` for empty, malformed, or out-of-range input.\n */\nexport function parseCoordinateValue(value: string): CoordinateValue | null {\n if (!value) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n if (!Array.isArray(parsed) || parsed.length !== 2) return null;\n const lng: unknown = parsed[0];\n const lat: unknown = parsed[1];\n if (typeof lng !== 'number' || typeof lat !== 'number') return null;\n if (!Number.isFinite(lng) || !Number.isFinite(lat)) return null;\n if (lng < LNG_MIN || lng > LNG_MAX || lat < LAT_MIN || lat > LAT_MAX) return null;\n\n return { lng, lat };\n}\n\n/** Serializes a longitude/latitude pair to the DHIS2 `\"[lng,lat]\"` wire format. */\nexport function joinCoordinateValue(lng: number, lat: number): string {\n return JSON.stringify([lng, lat]);\n}\n","import type { Geometry } from 'geojson';\n\n/**\n * DHIS2 `GEOJSON` value-type strings hold a single GeoJSON *geometry*\n * (Point/LineString/Polygon/...), not a full `Feature` or `FeatureCollection`.\n *\n * This assumption was NOT conclusively verified against DHIS2's own API docs\n * during planning — verify against a live DHIS2 instance (create a\n * GEOJSON-valueType data element, submit a value via Capture/Tracker Capture,\n * inspect the stored/returned JSON shape) before treating this as final. If\n * DHIS2 actually expects/returns a `Feature` wrapper, this module's\n * parse/stringify pair — and the `buildFieldSchema`/`buildTeaFieldSchema`\n * validators built on top of it — need a follow-up patch.\n */\n\nconst GEOMETRY_TYPES = new Set([\n 'Point',\n 'MultiPoint',\n 'LineString',\n 'MultiLineString',\n 'Polygon',\n 'MultiPolygon',\n 'GeometryCollection',\n]);\n\nfunction isGeometryShape(value: unknown): value is Geometry {\n if (typeof value !== 'object' || value === null) return false;\n const candidate = value as { type?: unknown; coordinates?: unknown; geometries?: unknown };\n if (typeof candidate.type !== 'string' || !GEOMETRY_TYPES.has(candidate.type)) return false;\n if (candidate.type === 'GeometryCollection') return Array.isArray(candidate.geometries);\n return Array.isArray(candidate.coordinates);\n}\n\n/** Parses a `GEOJSON` value-type string into a GeoJSON geometry, or `null` if invalid/empty. */\nexport function parseGeojsonGeometry(value: string): Geometry | null {\n if (!value) return null;\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(value);\n } catch {\n return null;\n }\n\n return isGeometryShape(parsed) ? parsed : null;\n}\n\n/** Serializes a GeoJSON geometry to the DHIS2 `GEOJSON` value-type wire format. */\nexport function stringifyGeojsonGeometry(geometry: Geometry): string {\n return JSON.stringify(geometry);\n}\n\n/** Returns `true` when `value` is a valid, non-empty GeoJSON geometry string. */\nexport function isValidGeojsonGeometry(value: string): boolean {\n return parseGeojsonGeometry(value) !== null;\n}\n","import type { StyleSpecification } from 'maplibre-gl';\n\n/**\n * Free, no-API-key OpenStreetMap raster basemap used as the default `mapStyle`\n * for `CoordinateMapPicker`/`GeoJsonMapEditor`.\n *\n * OSM's tile usage policy (https://operations.osmfoundation.org/policies/tiles/)\n * disallows heavy automated/production traffic against `tile.openstreetmap.org`\n * without self-hosting or a paid provider. Swap this out via the `mapStyle` prop\n * (a full MapLibre `StyleSpecification` or a style URL) before deploying a\n * production app at scale — e.g. MapTiler, Protomaps, or a DHIS2-hosted tile\n * server. This default exists so the widgets work out of the box in\n * development, tests, and Storybook.\n */\nexport const defaultMapStyle: StyleSpecification = {\n version: 8,\n sources: {\n osm: {\n type: 'raster',\n tiles: ['https://tile.openstreetmap.org/{z}/{x}/{y}.png'],\n tileSize: 256,\n attribution: '&copy; OpenStreetMap contributors',\n },\n },\n layers: [\n {\n id: 'osm',\n type: 'raster',\n source: 'osm',\n },\n ],\n};\n","import { Map as MapLibreMap, NavigationControl, type StyleSpecification } from 'maplibre-gl';\nimport { useEffect, useRef, useState, type RefObject } from 'react';\n\nexport type UseMapLibreMapOptions = {\n style: StyleSpecification | string;\n};\n\nexport type UseMapLibreMapResult = {\n containerRef: RefObject<HTMLDivElement>;\n map: MapLibreMap | null;\n};\n\n/**\n * Creates a MapLibre GL map instance on a ref'd container and tears it down\n * on unmount. Shared by `CoordinateMapPicker` and `GeoJsonMapEditor`.\n *\n * `map` stays `null` until the map's `'load'` event fires — consumers that\n * add sources/layers (e.g. terra-draw's GeoJSON source) must wait for style\n * load, or MapLibre throws \"Style is not done loading\".\n *\n * The `style` used is the one active when the map is first created — changing\n * `style` on a later render does not re-initialize the map (out of scope for v1).\n */\nexport function useMapLibreMap({ style }: UseMapLibreMapOptions): UseMapLibreMapResult {\n const containerRef = useRef<HTMLDivElement>(null);\n const [map, setMap] = useState<MapLibreMap | null>(null);\n\n useEffect(() => {\n if (!containerRef.current) return;\n\n const instance = new MapLibreMap({\n container: containerRef.current,\n style,\n center: [0, 0],\n zoom: 1,\n });\n instance.addControl(new NavigationControl(), 'top-right');\n instance.once('load', () => {\n setMap(instance);\n });\n\n return () => {\n instance.remove();\n setMap(null);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return { containerRef, map };\n}\n","import { Marker, type MapMouseEvent } from 'maplibre-gl';\nimport { useEffect, useRef } from 'react';\nimport { joinCoordinateValue, parseCoordinateValue } from './coordinateValue';\nimport { defaultMapStyle } from './defaultMapStyle';\nimport type { MapPickerProps } from './types';\nimport { useMapLibreMap } from './useMapLibreMap';\n\nexport type CoordinateMapPickerProps = MapPickerProps;\n\n/**\n * Single draggable/click-to-place marker over a MapLibre map. Renders only the\n * map canvas — the accessible numeric lng/lat inputs are adapter-owned (each\n * UI kit composes this alongside its own number inputs bound to the same\n * `value`/`onChange`).\n */\nexport function CoordinateMapPicker({\n value,\n onChange,\n mapStyle,\n disabled,\n className,\n}: CoordinateMapPickerProps) {\n const { containerRef, map } = useMapLibreMap({ style: mapStyle ?? defaultMapStyle });\n const markerRef = useRef<Marker | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!map) return;\n\n const ensureMarker = (lng: number, lat: number) => {\n if (markerRef.current) {\n markerRef.current.setLngLat([lng, lat]);\n return markerRef.current;\n }\n const marker = new Marker({ draggable: !disabled }).setLngLat([lng, lat]).addTo(map);\n marker.on('dragend', () => {\n const lngLat = marker.getLngLat();\n onChangeRef.current(joinCoordinateValue(lngLat.lng, lngLat.lat));\n });\n markerRef.current = marker;\n return marker;\n };\n\n const handleClick = (event: MapMouseEvent) => {\n if (disabled) return;\n ensureMarker(event.lngLat.lng, event.lngLat.lat);\n onChangeRef.current(joinCoordinateValue(event.lngLat.lng, event.lngLat.lat));\n };\n\n map.on('click', handleClick);\n\n const parsed = parseCoordinateValue(value);\n if (parsed) {\n ensureMarker(parsed.lng, parsed.lat);\n map.setCenter([parsed.lng, parsed.lat]);\n }\n\n return () => {\n map.off('click', handleClick);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map, disabled]);\n\n useEffect(() => {\n if (!markerRef.current) return;\n const parsed = parseCoordinateValue(value);\n if (parsed) {\n markerRef.current.setLngLat([parsed.lng, parsed.lat]);\n }\n }, [value]);\n\n useEffect(() => {\n markerRef.current?.setDraggable(!disabled);\n }, [disabled]);\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ width: '100%', height: '300px' }}\n aria-hidden=\"true\"\n />\n );\n}\n","import { useEffect, useRef } from 'react';\nimport {\n TerraDraw,\n TerraDrawLineStringMode,\n TerraDrawPointMode,\n TerraDrawPolygonMode,\n type GeoJSONStoreGeometries,\n} from 'terra-draw';\nimport { TerraDrawMapLibreGLAdapter } from 'terra-draw-maplibre-gl-adapter';\nimport { defaultMapStyle } from './defaultMapStyle';\nimport { parseGeojsonGeometry, stringifyGeojsonGeometry } from './geojsonValue';\nimport type { MapPickerProps } from './types';\nimport { useMapLibreMap } from './useMapLibreMap';\n\nexport type GeoJsonDrawMode = 'point' | 'linestring' | 'polygon';\n\nexport type GeoJsonMapEditorProps = MapPickerProps & {\n /** Draw modes offered to the user. Defaults to all three. */\n modes?: GeoJsonDrawMode[];\n};\n\nconst DEFAULT_MODES: GeoJsonDrawMode[] = ['point', 'linestring', 'polygon'];\n\nfunction createDrawMode(mode: GeoJsonDrawMode) {\n switch (mode) {\n case 'point':\n return new TerraDrawPointMode();\n case 'linestring':\n return new TerraDrawLineStringMode();\n case 'polygon':\n return new TerraDrawPolygonMode();\n }\n}\n\n/**\n * MapLibre + terra-draw point/line/polygon editor for a single GeoJSON\n * geometry (DHIS2 `GEOJSON` DE/TEA value is one geometry, not a\n * FeatureCollection — starting a new draw clears any existing feature).\n * Renders only the map + draw-mode controls — the raw-JSON textarea fallback\n * is adapter-owned.\n */\nexport function GeoJsonMapEditor({\n value,\n onChange,\n mapStyle,\n disabled,\n className,\n modes = DEFAULT_MODES,\n}: GeoJsonMapEditorProps) {\n const { containerRef, map } = useMapLibreMap({ style: mapStyle ?? defaultMapStyle });\n const drawRef = useRef<TerraDraw | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n useEffect(() => {\n if (!map) return;\n\n const draw = new TerraDraw({\n adapter: new TerraDrawMapLibreGLAdapter({ map }),\n modes: modes.map(createDrawMode),\n });\n drawRef.current = draw;\n draw.start();\n\n const initial = parseGeojsonGeometry(value);\n if (initial) {\n draw.addFeatures([\n { type: 'Feature', geometry: initial as GeoJSONStoreGeometries, properties: {} },\n ]);\n }\n\n const handleFinish = (id: Parameters<typeof draw.getSnapshotFeature>[0]) => {\n const feature = draw.getSnapshotFeature(id);\n if (feature) {\n onChangeRef.current(stringifyGeojsonGeometry(feature.geometry));\n }\n };\n draw.on('finish', handleFinish);\n\n return () => {\n draw.off('finish', handleFinish);\n try {\n // terra-draw's adapter can throw during its own teardown if the underlying\n // MapLibre map is torn down first (e.g. rapid unmount) — a widget unmounting\n // must never crash the host app, so this is defensive, not expected to fire.\n draw.stop();\n } catch {\n // Intentionally ignored — see comment above.\n }\n drawRef.current = null;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [map]);\n\n const startDrawing = (mode: GeoJsonDrawMode) => {\n const draw = drawRef.current;\n if (!draw || disabled) return;\n draw.clear();\n draw.setMode(mode);\n };\n\n return (\n <div className={className}>\n <div ref={containerRef} style={{ width: '100%', height: '300px' }} aria-hidden=\"true\" />\n {!disabled ? (\n <div role=\"group\" aria-label=\"Draw geometry\">\n {modes.map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => {\n startDrawing(mode);\n }}\n >\n Draw {mode}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n","// fallow-ignore-file code-duplication\nimport { InputField, TextAreaField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\nimport {\n CoordinateMapPicker,\n GeoJsonMapEditor,\n joinCoordinateValue,\n parseCoordinateValue,\n parseGeojsonGeometry,\n stringifyGeojsonGeometry,\n} from '@nnkogift/dhis2-form-utils-map';\nimport 'maplibre-gl/dist/maplibre-gl.css';\nimport { useEffect, useState } from 'react';\n\n// fallow-ignore-next-line complexity\nexport function D2CoordinateField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n\n // Local text buffers, not derived directly from field.value on every render — a controlled\n // number input driven straight off `parseCoordinateValue(value)` rejects intermediate\n // keystrokes (e.g. typing \"-\" alone parses to NaN and gets silently dropped, so a user can\n // never type a negative number). These stay in sync with external value changes (map clicks,\n // RHF reset) via the effect below, but aren't clobbered by the widget's own in-progress typing.\n const [lngText, setLngText] = useState(() => parseCoordinateValue(value)?.lng.toString() ?? '');\n const [latText, setLatText] = useState(() => parseCoordinateValue(value)?.lat.toString() ?? '');\n\n useEffect(() => {\n const parsed = parseCoordinateValue(value);\n setLngText(parsed ? parsed.lng.toString() : '');\n setLatText(parsed ? parsed.lat.toString() : '');\n }, [value]);\n\n const commit = (lngRaw: string, latRaw: string) => {\n const lng = parseFloat(lngRaw);\n const lat = parseFloat(latRaw);\n if (Number.isFinite(lng) && Number.isFinite(lat)) {\n field.onChange(joinCoordinateValue(lng, lat));\n }\n };\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n <CoordinateMapPicker value={value} onChange={field.onChange} disabled={isDisabled} />\n <InputField\n name={`${field.name}-lng`}\n type=\"number\"\n label=\"Longitude\"\n value={lngText}\n disabled={isDisabled}\n onChange={({ value: next }) => {\n const text = next ?? '';\n setLngText(text);\n commit(text, latText);\n }}\n onBlur={field.onBlur}\n />\n <InputField\n name={`${field.name}-lat`}\n type=\"number\"\n label=\"Latitude\"\n value={latText}\n disabled={isDisabled}\n onChange={({ value: next }) => {\n const text = next ?? '';\n setLatText(text);\n commit(lngText, text);\n }}\n onBlur={field.onBlur}\n />\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n\n// fallow-ignore-next-line complexity\nexport function D2GeoJsonField({ control }: WidgetProps) {\n const { fieldConfig, field, isMandatory, isDisabled } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n const value = field.value as string;\n const [textValue, setTextValue] = useState(value);\n const [textError, setTextError] = useState<string | undefined>(undefined);\n\n return (\n <fieldset>\n <legend>\n {fieldConfig.label}\n {isMandatory ? ' *' : ''}\n </legend>\n {fieldConfig.description ? <p>{fieldConfig.description}</p> : null}\n <GeoJsonMapEditor\n value={value}\n onChange={(next) => {\n field.onChange(next);\n const geometry = parseGeojsonGeometry(next);\n setTextValue(geometry ? JSON.stringify(geometry, null, 2) : next);\n setTextError(undefined);\n }}\n disabled={isDisabled}\n />\n <TextAreaField\n name={`${field.name}-geometry`}\n label=\"Geometry (JSON)\"\n value={textValue}\n disabled={isDisabled}\n warning={Boolean(textError)}\n validationText={textError}\n onChange={({ value: next }) => {\n setTextValue(next ?? '');\n }}\n onBlur={() => {\n if (!textValue) {\n field.onChange('');\n setTextError(undefined);\n return;\n }\n const geometry = parseGeojsonGeometry(textValue);\n if (geometry) {\n field.onChange(stringifyGeojsonGeometry(geometry));\n setTextError(undefined);\n } else {\n setTextError('Not a valid GeoJSON geometry');\n }\n field.onBlur();\n }}\n />\n {validationText ? (\n <p data-error={hasError || undefined} data-warning={hasWarning || undefined}>\n {validationText}\n </p>\n ) : null}\n </fieldset>\n );\n}\n","import { InputField } from '@dhis2/ui';\nimport type { WidgetProps } from '@nnkogift/dhis2-form-utils-hooks';\nimport { resolveFieldValidation } from '@nnkogift/dhis2-form-utils-hooks';\n\nexport function D2UnsupportedField({ control }: WidgetProps) {\n const { fieldConfig, field, widgetKind, isMandatory } = control;\n const { validationText, hasError, hasWarning } = resolveFieldValidation(control);\n\n return (\n <InputField\n name={field.name}\n value={field.value as string}\n label={fieldConfig.label}\n helpText={`Widget not yet implemented: ${widgetKind}`}\n required={isMandatory}\n disabled\n warning={hasWarning}\n error={hasError}\n validationText={validationText}\n onChange={({ value }) => {\n field.onChange(value ?? '');\n }}\n onBlur={field.onBlur}\n />\n );\n}\n","// fallow-ignore-file code-duplication\nimport {\n type FieldControlInput,\n useFieldControl,\n type WidgetProps,\n} from '@nnkogift/dhis2-form-utils-hooks';\nimport type { WidgetKind } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ComponentType } from 'react';\nimport {\n D2AgeField,\n D2BooleanField,\n D2CoordinateField,\n D2DateField,\n D2DateTimeField,\n D2EmailField,\n D2FileField,\n D2GeoJsonField,\n D2ImageField,\n D2IntegerField,\n D2LongTextField,\n D2MultiSelectField,\n D2NumberField,\n D2OrgUnitField,\n D2PercentageField,\n D2PhoneField,\n D2SelectField,\n D2TextField,\n D2TimeField,\n D2TrueOnlyField,\n D2UnsupportedField,\n} from './widgets';\n\nexport type D2FieldProps = {\n field: FieldControlInput;\n};\n\nexport type D2FieldWidgetProps = WidgetProps;\n\nconst WIDGET_BY_KIND: Record<WidgetKind, ComponentType<WidgetProps>> = {\n text: D2TextField,\n longText: D2LongTextField,\n email: D2EmailField,\n phone: D2PhoneField,\n number: D2NumberField,\n integer: D2IntegerField,\n percentage: D2PercentageField,\n boolean: D2BooleanField,\n trueOnly: D2TrueOnlyField,\n date: D2DateField,\n time: D2TimeField,\n age: D2AgeField,\n select: D2SelectField,\n multiSelect: D2MultiSelectField,\n datetime: D2DateTimeField,\n coordinate: D2CoordinateField,\n geojson: D2GeoJsonField,\n orgUnit: D2OrgUnitField,\n file: D2FileField,\n image: D2ImageField,\n unsupported: D2UnsupportedField,\n};\n\n/** Dispatches an already-resolved `FieldControlReturn` to its widget component, without re-deriving field control state. Reused by consumers that build their own chrome (labels, badges, ghost placeholders) around a field. */\nexport function D2FieldWidget({ control }: D2FieldWidgetProps) {\n const Widget = WIDGET_BY_KIND[control.widgetKind];\n return <Widget control={control} />;\n}\n\nexport function D2Field({ field }: D2FieldProps) {\n const fieldControl = useFieldControl({ ...field });\n\n if (fieldControl.isHidden) return null;\n\n return <D2FieldWidget control={fieldControl} />;\n}\n","import { useSectionState } from '@nnkogift/dhis2-form-utils-hooks';\nimport type { ReactNode } from 'react';\n\nexport type FormSectionProps = {\n sectionId: string;\n children: ReactNode;\n};\n\nexport function FormSection({ sectionId, children }: FormSectionProps) {\n const state = useSectionState(sectionId);\n\n if (state.hidden) {\n return null;\n }\n\n return <>{children}</>;\n}\n","import { NoticeBox } from '@dhis2/ui';\nimport { useFormFeedback } from '@nnkogift/dhis2-form-utils-hooks';\n\ntype FeedbackItem = ReturnType<typeof useFormFeedback>[string];\n\nfunction FeedbackPanel({ title, items }: { title: string; items: FeedbackItem[] }) {\n if (!items.length) {\n return null;\n }\n\n return (\n <div style={{ marginBottom: 'var(--spacers-dp16)' }}>\n <h3 style={{ margin: '0 0 var(--spacers-dp8)' }}>{title}</h3>\n {items.map((item) => (\n <NoticeBox key={`${item.location}:${item.content}`} title={item.content}>\n {item.value ? (\n <>\n <strong>{item.content}</strong>: {item.value}\n </>\n ) : (\n item.content\n )}\n </NoticeBox>\n ))}\n </div>\n );\n}\n\nexport function FormFeedback() {\n const feedback = useFormFeedback();\n const items = Object.values(feedback);\n const feedbackItems = items.filter((item) => item.location === 'feedback');\n const indicatorItems = items.filter((item) => item.location === 'indicators');\n\n if (!feedbackItems.length && !indicatorItems.length) {\n return null;\n }\n\n return (\n <div>\n <FeedbackPanel title=\"Feedback\" items={feedbackItems} />\n <FeedbackPanel title=\"Program indicators\" items={indicatorItems} />\n </div>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nnkogift/dhis2-form-utils-dhis2-ui",
3
- "version": "0.1.0-alpha.1",
3
+ "version": "0.1.0-alpha.2",
4
4
  "description": "DHIS2 UI field components and forms for dhis2-form-utils",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -37,7 +37,7 @@
37
37
  "maplibre-gl": "^6.1.0",
38
38
  "terra-draw": "^1.32.2",
39
39
  "terra-draw-maplibre-gl-adapter": "^1.4.1",
40
- "@nnkogift/dhis2-form-utils-hooks": "0.1.0-alpha.1"
40
+ "@nnkogift/dhis2-form-utils-hooks": "0.1.0-alpha.2"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "@dhis2/app-runtime": ">=3.0.0",