@dxos/react-ui-form 0.8.4-main.bc674ce → 0.8.4-main.c351d160a8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/README.md +0 -1
  2. package/dist/lib/browser/index.mjs +538 -458
  3. package/dist/lib/browser/index.mjs.map +4 -4
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/node-esm/index.mjs +538 -458
  6. package/dist/lib/node-esm/index.mjs.map +4 -4
  7. package/dist/lib/node-esm/meta.json +1 -1
  8. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts +3 -3
  9. package/dist/types/src/components/FieldEditor/FieldEditor.d.ts.map +1 -1
  10. package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts.map +1 -1
  11. package/dist/types/src/components/Form/Form.d.ts +13 -13
  12. package/dist/types/src/components/Form/Form.d.ts.map +1 -1
  13. package/dist/types/src/components/Form/Form.stories.d.ts +3 -3
  14. package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
  15. package/dist/types/src/components/Form/FormField.d.ts.map +1 -1
  16. package/dist/types/src/components/Form/FormFieldComponent.d.ts +0 -1
  17. package/dist/types/src/components/Form/FormFieldComponent.d.ts.map +1 -1
  18. package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts +2 -2
  19. package/dist/types/src/components/Form/FormFieldComponent.stories.d.ts.map +1 -1
  20. package/dist/types/src/components/Form/FormFieldSet.d.ts +9 -10
  21. package/dist/types/src/components/Form/FormFieldSet.d.ts.map +1 -1
  22. package/dist/types/src/components/Form/fields/ArrayField.d.ts.map +1 -1
  23. package/dist/types/src/components/Form/fields/RefField.d.ts +6 -4
  24. package/dist/types/src/components/Form/fields/RefField.d.ts.map +1 -1
  25. package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts.map +1 -1
  26. package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/Settings/Settings.d.ts +56 -0
  28. package/dist/types/src/components/Settings/Settings.d.ts.map +1 -0
  29. package/dist/types/src/components/{ControlSection/ControlSection.stories.d.ts → Settings/Settings.stories.d.ts} +2 -8
  30. package/dist/types/src/components/Settings/Settings.stories.d.ts.map +1 -0
  31. package/dist/types/src/components/Settings/index.d.ts +2 -0
  32. package/dist/types/src/components/Settings/index.d.ts.map +1 -0
  33. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts +5 -5
  34. package/dist/types/src/components/ViewEditor/ViewEditor.d.ts.map +1 -1
  35. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts +2 -1
  36. package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts.map +1 -1
  37. package/dist/types/src/components/index.d.ts +1 -1
  38. package/dist/types/src/components/index.d.ts.map +1 -1
  39. package/dist/types/src/components/testing.d.ts.map +1 -1
  40. package/dist/types/src/hooks/useFormHandler.d.ts.map +1 -1
  41. package/dist/types/src/util/index.d.ts +0 -1
  42. package/dist/types/src/util/index.d.ts.map +1 -1
  43. package/dist/types/tsconfig.tsbuildinfo +1 -1
  44. package/package.json +35 -37
  45. package/src/components/FieldEditor/FieldEditor.stories.tsx +4 -6
  46. package/src/components/FieldEditor/FieldEditor.tsx +2 -3
  47. package/src/components/Form/Form.stories.tsx +8 -7
  48. package/src/components/Form/Form.tsx +82 -55
  49. package/src/components/Form/FormField.tsx +12 -4
  50. package/src/components/Form/FormFieldComponent.stories.tsx +5 -5
  51. package/src/components/Form/FormFieldComponent.tsx +17 -20
  52. package/src/components/Form/FormFieldSet.tsx +106 -104
  53. package/src/components/Form/fields/ArrayField.tsx +6 -8
  54. package/src/components/Form/fields/MarkdownField.tsx +1 -1
  55. package/src/components/Form/fields/RefField.tsx +28 -15
  56. package/src/components/Form/fields/SelectField.tsx +1 -1
  57. package/src/components/Form/fields/SelectOptionField.stories.tsx +2 -2
  58. package/src/components/Form/fields/SelectOptionField.tsx +4 -4
  59. package/src/components/ObjectPicker/ObjectPicker.stories.tsx +9 -13
  60. package/src/components/Settings/Settings.stories.tsx +56 -0
  61. package/src/components/Settings/Settings.tsx +230 -0
  62. package/src/components/{ControlSection → Settings}/index.ts +1 -1
  63. package/src/components/ViewEditor/ViewEditor.stories.tsx +14 -12
  64. package/src/components/ViewEditor/ViewEditor.test.tsx +3 -6
  65. package/src/components/ViewEditor/ViewEditor.tsx +92 -63
  66. package/src/components/index.ts +1 -1
  67. package/src/components/testing.tsx +9 -6
  68. package/src/hooks/useFormHandler.ts +42 -24
  69. package/src/util/index.ts +0 -1
  70. package/dist/types/src/components/ControlSection/ControlSection.d.ts +0 -23
  71. package/dist/types/src/components/ControlSection/ControlSection.d.ts.map +0 -1
  72. package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts.map +0 -1
  73. package/dist/types/src/components/ControlSection/index.d.ts +0 -2
  74. package/dist/types/src/components/ControlSection/index.d.ts.map +0 -1
  75. package/dist/types/src/components/Form/Form-old.stories.d.ts +0 -131
  76. package/dist/types/src/components/Form/Form-old.stories.d.ts.map +0 -1
  77. package/dist/types/src/util/echo.d.ts +0 -6
  78. package/dist/types/src/util/echo.d.ts.map +0 -1
  79. package/src/components/ControlSection/ControlSection.stories.tsx +0 -38
  80. package/src/components/ControlSection/ControlSection.tsx +0 -153
  81. package/src/components/Form/Form-old.stories.tsx +0 -314
  82. package/src/util/echo.ts +0 -25
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/translations.ts", "../../../src/components/ControlSection/ControlSection.tsx", "../../../src/components/FieldEditor/FieldEditor.tsx", "../../../src/util/echo.ts", "../../../src/util/field.ts", "../../../src/util/formatting.ts", "../../../src/util/properties.ts", "../../../src/util/refs.ts", "../../../src/components/Form/fields/ArrayField.tsx", "../../../src/components/Form/Form.tsx", "../../../src/hooks/useFormHandler.ts", "../../../src/hooks/useKeyHandler.tsx", "../../../src/components/Form/FormFieldComponent.tsx", "../../../src/components/Form/FormFieldSet.tsx", "../../../src/components/Form/FormField.tsx", "../../../src/components/Form/fields/BooleanField.tsx", "../../../src/components/Form/fields/GeoPointField.tsx", "../../../src/components/Form/fields/MarkdownField.tsx", "../../../src/components/Form/fields/NumberField.tsx", "../../../src/components/Form/fields/RefField.tsx", "../../../src/components/ObjectPicker/ObjectPicker.tsx", "../../../src/components/Form/fields/SelectField.tsx", "../../../src/components/Form/fields/SelectOptionField.tsx", "../../../src/components/Form/fields/TextField.tsx", "../../../src/components/Form/fields/TextAreaField.tsx", "../../../src/components/Form/fields/TupleField.tsx", "../../../src/components/ViewEditor/ViewEditor.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = '@dxos/react-ui-form';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {\n 'fields label': 'Fields',\n 'hidden fields label': 'Hidden Fields',\n 'empty readonly ref field label': '(none)',\n\n // TODO(burdon): Standardize field/property.\n 'add property button label': 'Add property',\n 'field property label': 'Property',\n 'field property placeholder': 'Property name',\n 'field format label': 'Type',\n 'field path label': 'Field path',\n 'add field': 'Add field',\n 'delete field': 'Delete field',\n 'field limit reached': 'Maximum number of fields reached',\n 'boolean input true value': 'Yes',\n 'boolean input false value': 'No',\n 'show field label': 'Show field',\n 'hide field label': 'Hide field',\n 'delete field label': 'Delete field',\n 'ref field combobox input placeholder': 'Search…',\n 'ref field placeholder_one': 'Select…',\n 'ref field placeholder_other': 'Select items…',\n\n 'example placeholder': 'Example',\n 'latitude placeholder': 'Latitude (e.g., 40.7128)',\n 'longitude placeholder': 'Longitude (e.g., -74.0060)',\n\n 'cancel button label': 'Cancel',\n 'save button label': 'Save',\n\n // FormatEnum\n 'format boolean': 'Boolean',\n 'format currency': 'Currency',\n 'format date': 'Date',\n 'format date-time': 'DateTime',\n 'format did': 'DID',\n 'format duration': 'Duration',\n 'format dxn': 'DXN',\n 'format email': 'Email',\n 'format formula': 'Formula',\n 'format hostname': 'Hostname',\n 'format integer': 'Integer',\n 'format json': 'JSON',\n 'format lnglat': 'Geopoint',\n 'format markdown': 'Markdown',\n 'format percent': 'Percent',\n 'format ref': 'Reference',\n 'format regex': 'RegExp',\n 'format string': 'String',\n 'format single-select': 'Select',\n 'format multi-select': 'Multi-select',\n 'format text': 'Long text',\n 'format time': 'Time',\n 'format timestamp': 'Timestamp',\n 'format user': 'User',\n 'format number': 'Number',\n 'format uri': 'URI',\n 'format url': 'URL',\n 'format uuid': 'UUID',\n\n // GeoPointField.\n 'latitude label': 'Latitude',\n 'longitude label': 'Longitude',\n\n // SelectOptionsField.\n 'select option label': 'Label',\n 'select option label placeholder': 'Option label',\n 'select option color': 'Color',\n 'select option delete': 'Delete',\n 'select option add': 'Add option',\n\n // System schema message.\n 'system schema title': 'System type',\n 'system schema description': 'System type: cannot add or remove fields.',\n },\n },\n },\n] as const satisfies Resource[];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, type PropsWithChildren } from 'react';\n\nimport {\n Button,\n type ButtonProps,\n Input,\n type Label,\n type ThemedClassName,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\nimport { Layout } from '@dxos/react-ui-mosaic';\nimport { mx } from '@dxos/ui-theme';\n\nimport { translationKey } from '../../translations';\n\nexport type ControlPageParams = ThemedClassName<ComponentPropsWithoutRef<'div'>>;\n\nexport const ControlPage = ({ children, classNames, ...props }: ControlPageParams) => {\n return (\n <Layout.Container scrollable classNames='[--control-spacing:var(--dx-trimMd)]'>\n <div role='none' className={mx('pli-cardSpacingInline pbe-trimMd', classNames)} {...props}>\n {children}\n </div>\n </Layout.Container>\n );\n};\n\nexport type ControlSectionProps = PropsWithChildren<{\n title: Label;\n description?: Label;\n}>;\n\nexport const ControlSection = ({ title, description, children }: ControlSectionProps) => {\n return (\n <>\n <ControlSectionHeading title={title} description={description} />\n {children}\n </>\n );\n};\n\nexport const ControlSectionHeading = ({ title, description }: Omit<ControlSectionProps, 'children'>) => {\n const { t } = useTranslation(translationKey);\n return (\n <>\n <h2 className='pli-trimMd container-max-width text-xl mbs-trimMd mbe-trimMd'>{toLocalizedString(title, t)}</h2>\n {description && (\n <p className='pli-trimMd mlb-trimMd container-max-width text-description'>\n {toLocalizedString(description, t)}\n </p>\n )}\n </>\n );\n};\n\nexport const ControlGroupButton = ({ classNames, ...props }: ButtonProps) => {\n return <Button {...props} classNames={['md:col-span-2', classNames]} />;\n};\n\nexport type ControlGroupProps = ThemedClassName<PropsWithChildren>;\n\nexport const ControlGroup = ({ children, classNames }: ControlGroupProps) => (\n <div\n role='none'\n className={mx(\n 'group container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content] gap-trimMd',\n '[--control-spacing:0px] [&_input]:justify-self-end [&_button]:justify-self-end',\n classNames,\n )}\n >\n {children}\n </div>\n);\n\nexport const ControlFrame = ({ children }: ControlGroupProps) => (\n <div\n role='none'\n className={mx(\n 'container-max-width grid grid-cols-1 md:grid-cols-[1fr_1fr] gap-trimSm md:gap-trimMd p-trimMd',\n 'border border-separator rounded-md',\n )}\n >\n {children}\n </div>\n);\n\nexport const controlItemClasses = mx([\n 'container-max-width grid md:col-span-2 grid-cols-subgrid gap-trimSm items-center',\n // TODO(burdon): Use grid gap consistently or apply margins consistently?\n 'mlb-[--control-spacing] *:first:!mbs-0 *:last:!mbe-0 pli-trimMd plb-trimMd',\n 'border border-separator rounded-md',\n]);\n\nconst controlItemTitleClasses = 'mbe-0 text-lg text-baseText font-normal';\nconst controlItemDescriptionClasses = 'mlb-trimSm md:mbe-0 text-base text-description';\n\nexport type ControlItemProps = PropsWithChildren<{\n title: Label;\n description?: Label;\n}>;\n\nexport const ControlItem = ({ title, description, children }: ControlItemProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <div className={controlItemClasses}>\n <div role='none'>\n <h3 className={controlItemTitleClasses}>{toLocalizedString(title, t)}</h3>\n {description && <p className={controlItemDescriptionClasses}>{toLocalizedString(description, t)}</p>}\n </div>\n {children}\n </div>\n );\n};\n\nexport const ControlItemInput = ({ title, description, children }: ControlItemProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <Input.Root>\n <div className={controlItemClasses}>\n <div role='none'>\n <Input.Label classNames={controlItemTitleClasses}>{toLocalizedString(title, t)}</Input.Label>\n {description && (\n <Input.DescriptionAndValidation>\n <Input.Description classNames={controlItemDescriptionClasses}>\n {toLocalizedString(description, t)}\n </Input.Description>\n </Input.DescriptionAndValidation>\n )}\n </div>\n {children}\n </div>\n </Input.Root>\n );\n};\n\nexport const ControlFrameItem = ({ title, description, children }: ControlItemProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <div role='group' className='min-is-0'>\n <h3 className='text-lg mbe-2'>{toLocalizedString(title, t)}</h3>\n {description && <p className='mlb-trimSm md:mbe-0 text-description'>{toLocalizedString(description, t)}</p>}\n {children}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Obj, type SchemaRegistry } from '@dxos/echo';\nimport { type EchoSchema, Format, FormatEnums, formatToType } from '@dxos/echo/internal';\nimport { type SchemaProperty } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport {\n type FieldType,\n type ProjectionModel,\n type PropertyType,\n formatToAdditionalPropertyAttributes,\n getFormatSchema,\n} from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { getFormProperties } from '../../util';\nimport { Form, type FormFieldMap, type FormRootProps, SelectField, SelectOptionField } from '../Form';\n\nexport type FieldEditorProps = {\n projection: ProjectionModel;\n field: FieldType;\n registry?: SchemaRegistry.SchemaRegistry;\n view?: Obj.Unknown;\n onSave: () => void;\n onCancel?: () => void;\n} & Pick<FormRootProps<any>, 'readonly'>;\n\n/**\n * Displays a Form representing the metadata for a given `Field` and `View`.\n */\nexport const FieldEditor = ({ readonly, projection, field, registry, view, onSave, onCancel }: FieldEditorProps) => {\n const { t } = useTranslation(translationKey);\n const [props, setProps] = useState<PropertyType>(projection.getFieldProjection(field.id).props);\n useEffect(() => setProps(projection.getFieldProjection(field.id).props), [field, projection]);\n\n const [schemas, setSchemas] = useState<EchoSchema[]>([]);\n useAsyncEffect(async () => {\n if (!registry) {\n return;\n }\n\n const subscription = registry.query().subscribe((query) => setSchemas(query.results), { fire: true });\n\n // TODO(dmaretskyi): This shouldn't be needed.\n const schemas = await registry.query().run();\n setSchemas(schemas);\n\n return () => subscription?.();\n }, [registry]);\n\n const [referenceSchema, setReferenceSchema] = useState<EchoSchema>();\n useEffect(() => {\n setReferenceSchema(schemas.find((schema) => schema.typename === props?.referenceSchema));\n }, [schemas, props?.referenceSchema]);\n\n // TODO(burdon): Need to wrap otherwise throws error:\n // Class constructor SchemaClass cannot be invoked without 'new'.\n const [{ fieldSchema }, setFieldSchema] = useState({ fieldSchema: getFormatSchema(props?.format) });\n\n const fieldMap = useMemo<FormFieldMap>(\n () => ({\n ['format' satisfies keyof PropertyType]: (props) => (\n <SelectField\n {...props}\n options={FormatEnums.filter((value) => value !== Format.TypeFormat.None).map((value) => ({\n value,\n label: t(`format ${value}`),\n }))}\n />\n ),\n ['referenceSchema' satisfies keyof PropertyType]: (props) => (\n <SelectField\n {...props}\n options={schemas.map((schema) => ({\n value: schema.typename,\n }))}\n />\n ),\n ['referencePath' satisfies keyof PropertyType]: (props) => (\n <SelectField\n {...props}\n options={\n referenceSchema\n ? getFormProperties(referenceSchema.ast)\n .sort((a, b) => a.name.toString().localeCompare(b.name.toString()))\n .map((p) => ({ value: p.name.toString() }))\n : []\n }\n />\n ),\n ['options' satisfies keyof PropertyType]: (props) => <SelectOptionField {...props} />,\n }),\n [t, schemas, referenceSchema],\n );\n\n const propIsNotType = useCallback((props: SchemaProperty[]) => props.filter((prop) => prop.name !== 'type'), []);\n\n const handleValuesChanged = useCallback<NonNullable<FormRootProps<PropertyType>['onValuesChanged']>>(\n (_props) => {\n // TODO(Zaymon): Workout why old and new format values are the same sometimes even when selecting novel format values.\n setFieldSchema((prev) => {\n const fieldSchema = getFormatSchema(_props.format);\n if (prev.fieldSchema === fieldSchema) {\n return prev;\n }\n return { fieldSchema };\n });\n\n setReferenceSchema((prev) => {\n if (_props.referenceSchema !== prev?.typename) {\n const newSchema = schemas.find((schema) => schema.typename === _props.referenceSchema);\n if (newSchema) {\n return newSchema;\n }\n }\n return prev;\n });\n\n setProps((props) => {\n const type = formatToType[_props.format as keyof typeof formatToType];\n const additionalProps =\n formatToAdditionalPropertyAttributes[_props.format as keyof typeof formatToAdditionalPropertyAttributes];\n if (props.type !== type) {\n return { ...props, ..._props, ...additionalProps, type } as PropertyType;\n }\n\n return _props as PropertyType;\n });\n },\n [schemas, props.format, props.referenceSchema],\n );\n\n const handleValidate = useCallback<NonNullable<FormRootProps<PropertyType>['onValidate']>>(\n ({ property }) => {\n if (property && projection.getFields().find((f) => f.path === property && f.path !== field.path)) {\n return [\n {\n path: 'property',\n message: `property is not unique: '${property}'`,\n },\n ];\n }\n },\n [projection.getFields(), field],\n );\n\n const handleSave = useCallback<NonNullable<FormRootProps<PropertyType>['onSave']>>(\n (props) => {\n if (view) {\n Obj.change(view, () => {\n projection.setFieldProjection({ field, props });\n });\n } else {\n projection.setFieldProjection({ field, props });\n }\n onSave();\n },\n [projection, field, view, onSave],\n );\n\n const handleCancel = useCallback<NonNullable<FormRootProps<PropertyType>['onCancel']>>(() => {\n onSave();\n // Need to defer to allow form to close.\n requestAnimationFrame(() => onCancel?.());\n }, [onSave]);\n\n if (!fieldSchema) {\n log.warn('invalid format', { props });\n return null;\n }\n\n return (\n <Form.Root<PropertyType>\n key={field.id}\n fieldMap={fieldMap}\n autoFocus\n readonly={readonly}\n schema={fieldSchema}\n values={props}\n exclude={propIsNotType}\n sort={['property', 'format']}\n onValuesChanged={handleValuesChanged}\n onValidate={handleValidate}\n onSave={handleSave}\n onCancel={handleCancel}\n >\n <Form.Content>\n <Form.FieldSet />\n <Form.Actions />\n </Form.Content>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Obj } from '@dxos/echo';\nimport { type JsonPath, setValue as setValuePlain, splitJsonPath } from '@dxos/effect';\n\n/**\n * Sets a value on an object, using Obj.change() if it's an ECHO object.\n */\n// TODO(wittjosiah): Consider refactoring Form to not know about ECHO at all.\n// Instead of directly mutating the values object, Form could work with a plain\n// object copy and communicate all mutations through callbacks (e.g., onValuesChanged).\n// The caller would then be responsible for applying changes to ECHO objects via\n// Obj.change(). This would keep Form agnostic to the underlying data layer and\n// avoid coupling react-ui-form to @dxos/echo.\nexport const setValueEchoAware = <T extends object>(obj: T, path: JsonPath, value: any): T => {\n if (Obj.isObject(obj)) {\n Obj.change(obj, (mutableObj) => {\n Obj.setValue(mutableObj, splitJsonPath(path), value);\n });\n return obj;\n }\n return setValuePlain(obj, path, value);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Format, GeoLocation, TypeEnum } from '@dxos/echo/internal';\nimport { type ValidationError } from '@dxos/schema';\n\n/**\n * Parse value by field value type.\n * Used by Table, Sheet, etc.\n * Handles various data types including booleans, numbers, dates, and strings.\n * Returns undefined for empty or null inputs.\n */\nexport type ParseProps = {\n type?: TypeEnum;\n format?: Format.TypeFormat;\n value: any;\n};\n\nexport const parseValue = ({ type, format, value }: ParseProps) => {\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n\n const parseScalar = (type?: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean: {\n if (typeof value === 'string') {\n const lowercaseValue = value.toLowerCase();\n if (lowercaseValue === '0' || lowercaseValue === 'false') {\n return false;\n } else if (lowercaseValue === '1' || lowercaseValue === 'true') {\n return true;\n }\n }\n return Boolean(value);\n }\n\n case TypeEnum.Number: {\n const cleaned = typeof value === 'string' ? value.replace(/[^0-9.-]+/g, '') : value;\n const num = Number(cleaned);\n return Number.isNaN(num) ? null : num;\n }\n\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default: {\n return value;\n }\n }\n };\n\n if (!format) {\n return parseScalar(type);\n }\n\n switch (format) {\n case Format.TypeFormat.Boolean:\n return parseScalar(TypeEnum.Boolean);\n\n case Format.TypeFormat.Number:\n case Format.TypeFormat.Percent:\n case Format.TypeFormat.Currency:\n return parseScalar(TypeEnum.Number);\n\n case Format.TypeFormat.String:\n case Format.TypeFormat.Markdown: {\n return parseScalar(TypeEnum.String);\n }\n\n case Format.TypeFormat.Ref:\n throw new Error(`unexpected format: ${Format.TypeFormat.Ref}`);\n\n case Format.TypeFormat.DateTime:\n case Format.TypeFormat.Date:\n case Format.TypeFormat.Time:\n case Format.TypeFormat.Timestamp: {\n const date = new Date(value as string | number);\n return isNaN(date.getTime()) ? null : date;\n }\n\n case Format.TypeFormat.GeoPoint: {\n // Parse string in format \"lat,long\" to GeoPoint [longitude, latitude].\n if (typeof value === 'string') {\n // Only keep digits, decimal points, minus signs, and commas.\n const cleaned = value.replace(/[^0-9.,-]+/g, '');\n const parts = cleaned.split(',');\n if (parts.length === 2) {\n const lat = parseFloat(parts[0]);\n const long = parseFloat(parts[1]);\n if (!isNaN(lat) && !isNaN(long)) {\n return GeoLocation.toGeoPoint({ latitude: lat, longitude: long });\n }\n }\n }\n\n return [0, 0];\n }\n\n default: {\n return value;\n }\n }\n};\n\n// TODO(burdon): Type and format.\nexport type CellClassesForFieldTypeProps = {\n type?: TypeEnum;\n format?: Format.TypeFormat;\n};\n\nexport const cellClassesForFieldType = ({ type, format }: CellClassesForFieldTypeProps): string[] | undefined => {\n switch (format || type) {\n case Format.TypeFormat.Markdown:\n return undefined;\n case Format.TypeFormat.Time:\n case Format.TypeFormat.Timestamp:\n case Format.TypeFormat.DateTime:\n case Format.TypeFormat.Date:\n case Format.TypeFormat.Duration:\n return ['font-mono', 'text-right'];\n case Format.TypeFormat.Currency:\n return ['text-right'];\n case Format.TypeFormat.JSON:\n case Format.TypeFormat.DID:\n return ['font-mono'];\n case TypeEnum.Number:\n case TypeEnum.Boolean:\n return ['text-right', 'font-mono'];\n case TypeEnum.String:\n return undefined;\n case TypeEnum.Ref:\n return undefined;\n default:\n return undefined;\n }\n};\n\n// TODO(ZaymonFC): How to do this with translations?\nexport const pathNotUniqueError = (path: string): ValidationError => ({\n path: 'path',\n message: `'${path}' is already present`,\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { format as formatDate } from 'date-fns/format';\n\nimport { Format, GeoLocation, TypeEnum } from '@dxos/echo/internal';\n\ntype ValueFormatProps = {\n type: TypeEnum;\n format?: Format.TypeFormat | undefined;\n value: any;\n locale?: string | undefined;\n};\n\n/**\n * Format value by type.\n * Used by Table, Sheet, etc.\n */\n// TODO(burdon): Move to react-ui-form.\n// TODO(burdon): Formatting is different from kind format (e.g., percent is not a data format).\nexport const formatForDisplay = ({ type, format, value, locale = undefined }: ValueFormatProps): string => {\n const formatScalar = (type: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean:\n return (value as boolean).toLocaleString().toUpperCase();\n case TypeEnum.Number:\n return value.toLocaleString(locale);\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default: {\n return String(value);\n }\n }\n };\n\n if (!format) {\n return formatScalar(type);\n }\n\n switch (format) {\n case Format.TypeFormat.Boolean: {\n return formatScalar(TypeEnum.Boolean);\n }\n case Format.TypeFormat.Number: {\n return formatScalar(TypeEnum.Number);\n }\n case Format.TypeFormat.String:\n case Format.TypeFormat.Ref: {\n return formatScalar(TypeEnum.String);\n }\n case Format.TypeFormat.Percent: {\n return `${(value as number) * 100}%`;\n }\n case Format.TypeFormat.Currency: {\n // TODO(burdon): Get from property annotation.\n return (value as number).toLocaleString(locale, {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n case Format.TypeFormat.Date: {\n try {\n return formatDate(new Date(value as number), 'yyyy-MM-dd');\n } catch (error) {\n return 'Invalid Date';\n }\n }\n case Format.TypeFormat.Time: {\n try {\n return formatDate(new Date(value as number), 'HH:mm:ss');\n } catch (error) {\n return 'Invalid Time';\n }\n }\n case Format.TypeFormat.DateTime: {\n try {\n return formatDate(new Date(value as number), 'yyyy-MM-dd HH:mm:ss');\n } catch (error) {\n return 'Invalid DateTime';\n }\n }\n case Format.TypeFormat.GeoPoint: {\n if (value === null || value === undefined) {\n return '';\n }\n\n // For GeoPoint format [longitude, latitude].\n if (Array.isArray(value) && value.length >= 2 && value.every(Number.isFinite)) {\n const { latitude, longitude } = GeoLocation.fromGeoPoint(value as [number, number]);\n return `${latitude},${longitude}`;\n }\n\n return String(value);\n }\n default: {\n if (value === null || value === 'undefined') {\n return '';\n }\n return String(value);\n }\n }\n};\n\nexport const formatForEditing = ({ type, format, value, locale = undefined }: ValueFormatProps): string => {\n const formatScalar = (type: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean:\n case TypeEnum.Number:\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default:\n return String(value);\n }\n };\n\n if (!format) {\n return formatScalar(type);\n }\n\n switch (format) {\n case Format.TypeFormat.Boolean:\n case Format.TypeFormat.Number:\n case Format.TypeFormat.String:\n case Format.TypeFormat.Ref: {\n return formatScalar(type);\n }\n case Format.TypeFormat.Percent: {\n return String(value * 100);\n }\n case Format.TypeFormat.Currency: {\n return String(value);\n }\n case Format.TypeFormat.DateTime: {\n const date = new Date(value as number);\n return date.toISOString();\n }\n case Format.TypeFormat.Date: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[0];\n }\n case Format.TypeFormat.Time: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[1].split('.')[0];\n }\n case Format.TypeFormat.GeoPoint: {\n // Handle null or undefined\n if (value === null || value === undefined) {\n return '';\n }\n\n // For GeoPoint format [longitude, latitude].\n if (Array.isArray(value) && value.length >= 2 && value.every(Number.isFinite)) {\n const { latitude, longitude } = GeoLocation.fromGeoPoint(value as [number, number]);\n return `${latitude},${longitude}`;\n }\n\n return String(value);\n }\n\n default: {\n return String(value);\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport type * as SchemaAST from 'effect/SchemaAST';\n\nimport { Annotation } from '@dxos/echo';\nimport { type SchemaProperty, getProperties } from '@dxos/effect';\n\n/**\n * Get the property types of an AST and filter out properties that are not form inputs.\n */\nexport const getFormProperties = (ast: SchemaAST.AST): SchemaProperty[] => {\n return getProperties(ast).filter((prop) =>\n Annotation.FormInputAnnotation.getFromAst(prop.type).pipe(Option.getOrElse(() => true)),\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as SchemaAST from 'effect/SchemaAST';\n\nimport { Ref } from '@dxos/echo';\nimport { getArrayElementType, isArrayType } from '@dxos/effect';\n\ntype RefProps = {\n ast: SchemaAST.AST;\n isArray: boolean;\n};\n\nexport const getRefProps = (ast: SchemaAST.AST): RefProps | undefined => {\n // Array of references.\n if (isArrayType(ast)) {\n const elementType = getArrayElementType(ast);\n if (elementType) {\n if (Ref.isRefType(elementType)) {\n return { ast: elementType, isArray: true };\n }\n }\n }\n\n // Direct reference.\n if (Ref.isRefType(ast)) {\n return { ast, isArray: false };\n }\n\n return undefined;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport React, { Fragment, useCallback } from 'react';\n\nimport { findNode, getArrayElementType, getDiscriminatedType, isDiscriminatedUnion, isNestedType } from '@dxos/effect';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { translationKey } from '../../../translations';\nimport { getFormProperties } from '../../../util';\nimport { useFormValues } from '../Form';\nimport { FormField, type FormFieldProps } from '../FormField';\nimport { FormFieldLabel, type FormFieldStateProps } from '../FormFieldComponent';\n\nexport type ArrayFieldProps = {\n label: string;\n fieldProps: FormFieldStateProps;\n} & FormFieldProps;\n\nexport const ArrayField = ({\n type,\n path,\n label,\n readonly,\n layout,\n fieldProps: inputProps,\n ...props\n}: ArrayFieldProps) => {\n const { t } = useTranslation(translationKey);\n const elementType = getArrayElementType(type);\n const { onValueChange } = inputProps;\n const values = useFormValues(ArrayField.displayName, path, () => []);\n\n const getDefaultObjectValue = (typeNode: SchemaAST.AST): any => {\n const baseNode = findNode(typeNode, isDiscriminatedUnion);\n const typeLiteral = baseNode ? getDiscriminatedType(baseNode, {}) : findNode(typeNode, SchemaAST.isTypeLiteral);\n if (!typeLiteral) {\n return {};\n }\n\n return Object.fromEntries(\n getFormProperties(typeLiteral).map((prop) => {\n const defaultValue = SchemaAST.getDefaultAnnotation(prop.type).pipe((annotation) =>\n Option.getOrUndefined(annotation),\n );\n return [prop.name, defaultValue];\n }),\n );\n };\n\n const handleAdd = useCallback(() => {\n const defaultValue =\n isNestedType(type) && elementType ? getDefaultObjectValue(elementType) : getDefaultValue(elementType);\n values && onValueChange(type, [...values, defaultValue]);\n }, [onValueChange, type, elementType, values]);\n\n const handleDelete = useCallback(\n (idx: number) => {\n onValueChange(\n type,\n values?.filter((_, i) => i !== idx),\n );\n },\n [onValueChange, type, values],\n );\n\n if (!elementType || ((readonly || layout === 'static') && values && values.length < 1)) {\n return null;\n }\n\n return (\n <>\n {(layout !== 'static' || (values && values.length > 0)) && (\n <FormFieldLabel readonly={readonly} label={label} asChild />\n )}\n\n <div role='none' className='flex flex-col gap-2'>\n {values?.map((_, index) => {\n return (\n <div role='none' key={index} className='grid grid-cols-[1fr_min-content] gap-2 last:mb-3'>\n <FormField\n autoFocus={index === values.length - 1}\n type={elementType}\n path={[...(path ?? []), index]}\n readonly={readonly || layout === 'static'}\n layout='inline'\n {...props}\n />\n\n {!readonly && layout !== 'static' && (\n <div role='none' className='flex flex-col bs-full justify-end'>\n {/* NOTE: Aligns with center of last field if multi-field object. */}\n <div role='none' className='flex items-center bs-[var(--line-height)]'>\n <IconButton\n icon='ph--x--regular'\n iconOnly\n label={t('button remove')}\n onClick={() => handleDelete(index)}\n classNames='self-center'\n />\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* TODO(burdon): Get label from schema. */}\n {!readonly && layout !== 'static' && (\n <IconButton\n classNames='flex is-full _mlb-cardSpacingBlock'\n icon='ph--plus--regular'\n label={t('add field')}\n onClick={handleAdd}\n />\n )}\n </>\n );\n};\n\nArrayField.displayName = 'Form.ArrayField';\n\n/**\n * Returns the default empty value for a given AST.\n * Used for initializing new array values etc.\n */\n// TODO(wittjosiah): Factor out?\nexport const getDefaultValue = (ast?: SchemaAST.AST): any => {\n switch (ast?._tag) {\n case 'StringKeyword': {\n return '';\n }\n case 'NumberKeyword': {\n return 0;\n }\n case 'BooleanKeyword': {\n return false;\n }\n default: {\n if (ast && isNestedType(ast)) {\n return {};\n } else {\n throw new Error(`Unsupported type: ${ast?._tag}`);\n }\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport React, { type PropsWithChildren, useEffect, useMemo, useRef } from 'react';\n\nimport { type AnyProperties } from '@dxos/echo/internal';\nimport { createJsonPath, getValue as getValue$ } from '@dxos/effect';\nimport { IconButton, type IconButtonProps, ScrollArea, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport {\n type FormHandler,\n type FormHandlerProps,\n type FormUpdateMeta,\n useFormHandler,\n useKeyHandler,\n} from '../../hooks';\nimport { translationKey } from '../../translations';\nimport { setValueEchoAware } from '../../util';\n\nimport { FormFieldLabel, type FormFieldLabelProps, type FormFieldStateProps } from './FormFieldComponent';\nimport {\n FormFieldSet as NaturalFormFieldSet,\n type FormFieldSetProps as NaturalFormFieldSetProps,\n} from './FormFieldSet';\n\n// New features/polish\n// [x] Unify readonly/inline modes\n// [ ] Don't call save/autoSave if value hasn't changed\n// [ ] Fix onCancel (restore values)\n// [ ] Fix useSchema Type.Obj.Any cast\n// [ ] Remove @dxos/echo-db deps\n// [ ] TableCellEditor (handleEnter/ModalController).\n// [ ] Use FormFieldWrapper uniformly\n// [ ] Inline tables for object arrays\n// [ ] Defer query until popover\n// [ ] Omit id from sub properties.\n// [x] Refs\n// [x] Single-select (fix popover)\n// [x] Multi-select (array)\n// [ ] auto save doesn't work for combobox + select due to only firing on blur (workaround is to use onValuesChanged)\n\n// TODO(burdon): Move to @dxos/schema (re-export here).\nexport type ExcludeId<S extends Schema.Schema.AnyNoContext> = Omit<Schema.Schema.Type<S>, 'id'>;\n\n// TODO(burdon): Move to @dxos/schema (re-export here).\nexport const omitId = <S extends Schema.Schema.AnyNoContext>(schema: S): Schema.Schema<ExcludeId<S>, ExcludeId<S>> =>\n schema.pipe(Schema.omit('id')) as any;\n\n//\n// Context\n//\n\ntype FormContextValue<T extends AnyProperties = any> = {\n /**\n * Form handler.\n */\n form: FormHandler<T>;\n\n /**\n * Show debug info.\n */\n debug?: boolean;\n\n /**\n * Testing.\n */\n testId?: string;\n} & Pick<NaturalFormFieldSetProps<T>, 'readonly' | 'layout' | 'fieldMap' | 'fieldProvider'>;\n\nconst [FormContextProvider, useFormContext] = createContext<FormContextValue>('Form');\n\n/**\n * Get the current form values.\n */\nconst useFormValues: {\n <T extends AnyProperties>(componentName: string, path?: (string | number)[]): T;\n <T extends AnyProperties>(\n componentName: string,\n path: (string | number)[] | undefined,\n defaultValue: () => T,\n ): T | undefined;\n} = (componentName: string, path: (string | number)[] = [], defaultValue?: () => any) => {\n const jsonPath = createJsonPath(path);\n const {\n form: { values },\n } = useFormContext(componentName);\n\n const value = getValue$(values, jsonPath);\n\n useEffect(() => {\n if (!value && defaultValue) {\n setValueEchoAware(values, jsonPath, defaultValue());\n }\n }, [value, defaultValue]);\n\n return value;\n};\n\n/**\n * Get the state props for the given field.\n */\nconst useFormFieldState = (componentName: string, path: (string | number)[] = []): FormFieldStateProps => {\n const stablePath = useMemo(() => path, [Array.isArray(path) ? path.join('.') : path]);\n const {\n form: { getStatus, getValue, onBlur, onValueChange },\n } = useFormContext(componentName);\n\n return useMemo(\n () => ({\n getStatus: () => getStatus(stablePath),\n getValue: () => getValue(stablePath),\n onBlur: () => onBlur(stablePath),\n onValueChange: (ast: SchemaAST.AST, value: any) => onValueChange(stablePath, ast, value),\n }),\n [getStatus, getValue, onBlur, onValueChange, stablePath],\n );\n};\n\n//\n// Root\n//\n\ntype FormRootProps<T extends AnyProperties = AnyProperties> = PropsWithChildren<\n {\n /**\n * Called when the form is submitted and passes validation.\n */\n onSave?: (values: T, meta: FormUpdateMeta<T>) => void;\n\n /**\n * Called when the form is canceled to abandon/undo any pending changes.\n */\n onCancel?: () => void;\n } & Omit<FormContextValue<T>, 'form'> &\n Pick<FormHandlerProps<T>, 'schema' | 'autoSave' | 'values' | 'defaultValues' | 'onValidate' | 'onValuesChanged'> &\n Omit<NaturalFormFieldSetProps<T>, 'schema' | 'path'>\n>;\n\nconst FormRoot = <T extends AnyProperties = AnyProperties>({\n children,\n schema,\n values,\n onSave,\n onCancel,\n ...props\n}: FormRootProps<T>) => {\n const form = useFormHandler({ schema, values, onSave, onCancel, ...props });\n\n return (\n <FormContextProvider form={form} {...props}>\n {children}\n </FormContextProvider>\n );\n};\n\nFormRoot.displayName = 'Form.Root';\n\n//\n// Viewport\n//\n\ntype FormViewportProps = ThemedClassName<PropsWithChildren<{}>>;\n\nconst FormViewport = ({ classNames, children }: FormViewportProps) => {\n return (\n <ScrollArea.Root>\n <ScrollArea.Viewport classNames={['plb-cardSpacingBlock', classNames]}>{children}</ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n );\n};\n\nFormViewport.displayName = 'Form.Viewport';\n\n//\n// Content\n//\n\ntype FormContentProps = ThemedClassName<PropsWithChildren<{}>>;\n\n// TOOD(burdon): Figure out nesting (indent and testId).\nconst FormContent = ({ classNames, children }: FormContentProps) => {\n const { form, testId } = useFormContext(FormContent.displayName);\n const ref = useRef<HTMLDivElement>(null);\n useKeyHandler(ref.current, form);\n\n return (\n <div\n ref={ref}\n role='form'\n className={mx('flex flex-col is-full pli-cardSpacingInline density-fine', classNames)}\n data-testid={testId}\n >\n {children}\n </div>\n );\n};\n\nFormContent.displayName = 'Form.Content';\n\n//\n// FieldSet\n//\n\ntype FormFieldSetProps = ThemedClassName<{}>;\n\nconst FormFieldSet = ({ classNames }: FormFieldSetProps) => {\n const { form, ...props } = useFormContext(FormFieldSet.displayName);\n\n return <NaturalFormFieldSet classNames={classNames} schema={form.schema} {...props} />;\n};\n\nFormFieldSet.displayName = 'Form.FieldSet';\n\n//\n// Actions\n//\n\ntype FormActionsProps = ThemedClassName<{}>;\n\nconst FormActions = ({ classNames }: FormActionsProps) => {\n const { t } = useTranslation(translationKey);\n const {\n form: { canSave, onSave, onCancel },\n readonly,\n layout,\n } = useFormContext(FormActions.displayName);\n\n if (readonly || layout === 'static') {\n return null;\n }\n\n // TODO(burdon): Currently onCancel is a no-op; implement \"revert values\".\n // Deprecate FormSubmit ans use FormActions without Cancel button if no callback is supplied.\n\n return (\n <div role='none' className={mx('grid grid-flow-col auto-cols-fr gap-2 pbs-cardSpacingBlock', classNames)}>\n {onCancel && (\n <IconButton\n icon='ph--x--regular'\n iconEnd\n label={t('cancel button label')}\n onClick={onCancel}\n data-testid='cancel-button'\n />\n )}\n {onSave && (\n <IconButton\n type='submit'\n variant='primary'\n disabled={!canSave}\n icon='ph--check--regular'\n iconEnd\n label={t('save button label')}\n onClick={onSave}\n data-testid='save-button'\n />\n )}\n </div>\n );\n};\n\nFormActions.displayName = 'Form.Actions';\n\n//\n// Submit\n//\n\ntype FormSubmitProps = ThemedClassName<Partial<Pick<IconButtonProps, 'icon' | 'label'>>>;\n\nconst FormSubmit = ({ classNames, label, icon }: FormSubmitProps) => {\n const { t } = useTranslation(translationKey);\n const {\n form: { canSave, onSave },\n readonly,\n layout,\n } = useFormContext(FormSubmit.displayName);\n\n if (readonly || layout === 'static') {\n return null;\n }\n\n return (\n <div role='none' className={mx('flex is-full pbs-cardSpacingBlock', classNames)}>\n <IconButton\n classNames='is-full'\n type='submit'\n variant='primary'\n disabled={!canSave}\n icon={icon ?? 'ph--check--regular'}\n label={label ?? t('save button label')}\n onClick={onSave}\n data-testid='save-button'\n />\n </div>\n );\n};\n\nFormSubmit.displayName = 'Form.Submit';\n\n//\n// Form\n// https://www.radix-ui.com/primitives/docs/guides/composition\n//\n\nexport const Form = {\n Root: FormRoot,\n Viewport: FormViewport,\n Content: FormContent,\n FieldSet: FormFieldSet,\n Actions: FormActions,\n Submit: FormSubmit,\n Label: FormFieldLabel,\n};\n\nexport { useFormContext, useFormValues, useFormFieldState };\n\nexport type {\n FormRootProps,\n FormViewportProps,\n FormContentProps,\n FormFieldSetProps,\n FormActionsProps,\n FormFieldLabelProps as LabelProps,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport type * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { type AnyProperties } from '@dxos/echo/internal';\nimport {\n type JsonPath,\n createJsonPath,\n fromEffectValidationPath,\n getValue as getValue$,\n setValue as setValue$,\n} from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { useDefaultValue } from '@dxos/react-ui';\nimport { type ValidationError, validateSchema } from '@dxos/schema';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { setValueEchoAware } from '../util';\n\nexport type FormFieldStatus = {\n status?: 'error';\n error?: string;\n};\n\n/**\n * Form properties.\n */\nexport interface FormHandlerProps<T extends AnyProperties> {\n /**\n * Effect schema (Type literal).\n */\n schema?: Schema.Schema<T, any>;\n\n /**\n * Values for the form if controlled.\n */\n values?: Partial<T>;\n\n /**\n * Default values for the form which will be used if values is not provided.\n */\n defaultValues?: Partial<T>;\n\n /**\n * Auto-save the form when the values change.\n */\n autoSave?: boolean;\n\n /**\n * Callback for value changes. Note: This is called even when values are invalid.\n * Sometimes the parent component may want to know about changes even if the form is\n * in an invalid state.\n */\n onValuesChanged?: (values: Partial<T>, meta: FormUpdateMeta<T>) => void;\n\n /**\n * Custom validation function that runs only after schema validation passes.\n * Use this for complex validation logic that can't be expressed in the schema.\n * @returns Array of validation errors, or undefined if validation passes\n */\n onValidate?: (values: T) => ValidationError[] | undefined;\n\n /**\n * Called when the form is submitted and passes validation.\n */\n onSave?: (values: T, meta: FormUpdateMeta<T>) => MaybePromise<void>;\n\n /**\n * Called when the form is canceled.\n */\n onCancel?: () => void;\n}\n\nexport type FormUpdateMeta<T extends AnyProperties> = {\n changed: FormHandler<T>['changed'];\n isValid: boolean;\n};\n\n/**\n * Form handler properties and methods.\n */\nexport type FormHandler<T extends AnyProperties> = Pick<FormHandlerProps<T>, 'schema' | 'autoSave'> & {\n /** Initial values (which may not pass validation). */\n values: Partial<T>;\n\n /** Map of changed fields. */\n changed: Record<JsonPath, boolean>;\n // TODO(burdon): How is this different from above?\n touched: Record<JsonPath, boolean>;\n\n /** Map of error strings. */\n errors: Record<JsonPath, string>;\n\n /** Whether the form can be saved (i.e., data is valid). */\n isValid: boolean;\n // TODO(burdon): Why is this needed separately from isValid?\n canSave: boolean;\n\n onSave: () => void;\n onCancel: () => void;\n\n //\n // Form field state management\n //\n\n getStatus: (path: string | (string | number)[]) => FormFieldStatus;\n getValue: <V>(path: (string | number)[]) => V | undefined;\n onBlur: (path: (string | number)[]) => void;\n onValueChange: <V>(path: (string | number)[], type: SchemaAST.AST, value: V) => void;\n};\n\n/**\n * Creates a hook for managing form state, including values, validation, and submission.\n * Deeply integrated with `@dxos/schema` for schema-based validation.\n */\nexport const useFormHandler = <T extends AnyProperties>({\n schema,\n autoSave,\n values: valuesProp,\n defaultValues: defaultValuesProp,\n onValuesChanged,\n onValidate,\n onSave,\n onCancel,\n ...props\n}: FormHandlerProps<T>): FormHandler<T> => {\n const [changed, setChanged] = useState<Record<JsonPath, boolean>>({});\n const [touched, setTouched] = useState<Record<JsonPath, boolean>>({});\n const [errors, setErrors] = useState<Record<JsonPath, string>>({});\n const [saving, setSaving] = useState(false);\n const defaultValues = useDefaultValue<Partial<T>>(defaultValuesProp, () => ({}));\n const [values$, setValues] = useControllableState<Partial<T>>({\n prop: valuesProp,\n defaultProp: defaultValues,\n onChange: () => {\n setValues(valuesProp ?? defaultValues);\n setChanged({});\n setTouched({});\n setErrors({});\n setSaving(false);\n },\n });\n // TODO(wittjosiah): Upgrade @radix-ui/react-use-controllable-state.\n const values = values$ as Partial<T>;\n\n // Validate.\n const validate = useCallback(\n (values: Partial<T>): values is T => {\n if (!schema) {\n return false;\n }\n\n let errors: ValidationError[] = validateSchema(schema, values) ?? [];\n log('validate', { values, errors });\n if (errors.length === 0 && onValidate) {\n const validatedValues = values as T;\n errors = onValidate(validatedValues) ?? [];\n }\n\n setErrors(flatMap(errors));\n const valid = errors.length === 0;\n return valid;\n },\n [schema, onValidate],\n );\n\n // Validate on schema change.\n const [schemaChanged, setSchemaChanged] = useState(false);\n useEffect(() => setSchemaChanged(true), [schema]);\n useEffect(() => {\n if (schemaChanged) {\n validate(values);\n setSchemaChanged(false);\n }\n }, [validate, values, schemaChanged]);\n\n const isValid = useMemo(() => {\n return Object.keys(errors).length === 0;\n }, [errors]);\n\n /**\n * NOTE: We can submit if there is no touched field that has an error.\n * If there's a validation message visible in the form, submit should be disabled.\n */\n const canSave = useMemo(\n () =>\n !saving &&\n // Check if any error paths that are touched have errors.\n !Object.entries(touched).some(\n ([path, isTouched]) =>\n isTouched &&\n Object.keys(errors).some(\n (errorPath) => errorPath === path || errorPath.startsWith(`${path}.`) || errorPath.startsWith(`${path}[`),\n ),\n ),\n [touched, errors, saving],\n );\n\n const handleSave = useCallback(async () => {\n if (validate(values)) {\n setSaving(true);\n try {\n await onSave?.(values, { changed, isValid });\n } finally {\n setSaving(false);\n }\n }\n }, [values, validate, onSave, changed, isValid]);\n\n const handleCancel = useCallback(() => {\n onCancel?.();\n }, [onCancel]);\n\n //\n // Fields.\n //\n\n const getStatus = useCallback<FormHandler<T>['getStatus']>(\n (path) => {\n const jsonPath = Array.isArray(path) ? createJsonPath(path) : path;\n const [_, error] =\n Object.entries(errors).find(\n ([errorPath]) =>\n errorPath === jsonPath || errorPath.startsWith(`${jsonPath}.`) || errorPath.startsWith(`${jsonPath}[`),\n ) ?? [];\n\n // Only show errors for touched fields.\n const isTouched = touched[jsonPath as JsonPath];\n if (!isTouched) {\n return {\n status: undefined,\n error: undefined,\n };\n }\n\n return {\n status: error ? 'error' : undefined,\n error: error ? (error ?? undefined) : undefined,\n };\n },\n [errors, touched],\n );\n\n const getValue = useCallback<FormHandler<T>['getValue']>(\n (path) => {\n return getValue$(values, createJsonPath(path));\n },\n [values],\n );\n\n const onValueChange = useCallback<FormHandler<T>['onValueChange']>(\n (path, type, value) => {\n log('onValueChange', { path, value });\n\n const jsonPath = createJsonPath(path);\n let parsedValue = value as any;\n try {\n if (type._tag === 'NumberKeyword') {\n parsedValue = parseFloat(value as string) || 0;\n }\n } catch (err) {\n log.catch(err);\n parsedValue = undefined;\n }\n\n // Update.\n // For ECHO objects, mutate in place via Obj.change(); for plain objects, spread to create new reference.\n const newValues = Obj.isObject(values)\n ? (setValueEchoAware(values, jsonPath, parsedValue), values)\n : { ...setValue$(values, jsonPath, parsedValue) };\n setValues(newValues);\n\n // TODO(burdon): Check value has changed from original.\n const newChanged = { [jsonPath]: true };\n setChanged({ ...changed, ...newChanged });\n\n // Validate.\n const isValid = validate(newValues);\n\n // Callback.\n onValuesChanged?.(newValues, { isValid, changed: newChanged });\n },\n [values, changed, validate, onValuesChanged],\n );\n\n const onBlur = useCallback(\n async (path: (string | number)[]) => {\n const jsonPath = createJsonPath(path);\n\n // TODO(burdon): Check value has changed from original.\n setTouched((touched) => ({ ...touched, [jsonPath]: true }));\n const isValid = validate(values);\n\n // Auto-save when a field is blurred and is valid.\n if (Object.keys(changed).length > 0 && isValid && autoSave) {\n await onSave?.(values as T, { changed, isValid });\n }\n },\n [validate, values, changed, autoSave, onSave],\n );\n\n return useMemo<FormHandler<T>>(\n () => ({\n // State.\n schema,\n values,\n errors,\n touched,\n changed,\n isValid,\n canSave,\n autoSave,\n\n // Actions.\n onSave: handleSave,\n onCancel: handleCancel,\n\n // Field utils.\n getStatus,\n getValue,\n onBlur,\n onValueChange,\n\n ...props,\n }),\n [\n schema,\n values,\n errors,\n touched,\n changed,\n canSave,\n isValid,\n getStatus,\n getValue,\n onBlur,\n onValueChange,\n onSave,\n onCancel,\n ],\n );\n};\n\nconst flatMap = (errors: ValidationError[]) => {\n return errors.reduce(\n (result, { path, message }) => {\n // Convert the validation error path format to our JsonPath format.\n const jsonPath = fromEffectValidationPath(path);\n if (!(jsonPath in result)) {\n result[jsonPath] = message;\n }\n return result;\n },\n {} as Record<JsonPath, string>,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect } from 'react';\n\nimport { addEventListener } from '@dxos/async';\n\nimport { type FormHandler } from './useFormHandler';\n\n/**\n * Key handler.\n */\nexport const useKeyHandler = (formElement: HTMLDivElement | null, form: FormHandler<any>) => {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Enter': {\n if (event.metaKey && form.canSave) {\n form.onSave();\n }\n break;\n }\n }\n },\n [form.isValid, form.canSave, form.onSave, form.autoSave],\n );\n\n useEffect(() => {\n if (!formElement) {\n return;\n }\n\n // TODO(burdon): Move to @dxos/dom-util.\n return addEventListener(formElement, 'keydown', handleKeyDown);\n }, [formElement, handleKeyDown]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport React, {\n Component,\n type FC,\n type FocusEvent,\n type PropsWithChildren,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { type Format } from '@dxos/echo/internal';\nimport { Icon, Input, Tooltip } from '@dxos/react-ui';\nimport { errorText, mx } from '@dxos/ui-theme';\n\nimport { type FormFieldStatus } from '../../hooks';\n\nconst labelSpacing = 'mbs-inputSpacingBlock mbe-labelSpacingBlock';\n\n/**\n * Dynamic props passed to input components.\n */\nexport type FormFieldStateProps<T = any> = {\n getStatus: () => FormFieldStatus;\n getValue: () => T | undefined;\n onBlur: (event: FocusEvent<HTMLElement>) => void;\n onValueChange: (type: SchemaAST.AST, value: T) => void;\n};\n\n/**\n * Presentation mode.\n *\n * - full: Show label, control, and status.\n * - compact: Show label and control.\n * - inline: Control only.\n * - static: Plain DOM; omit all undefined values.\n */\n// TODO(burdon): 'inline' should be orthogonal to the layout (e.g., array of inline static).\nexport type Presentation = 'full' | 'compact' | 'inline' | 'static';\n\n/**\n * Props passed to input components.\n */\nexport type FormFieldComponentProps<T = any> = {\n type: SchemaAST.AST;\n format?: Format.TypeFormat;\n readonly?: boolean;\n label: string;\n placeholder?: string;\n autoFocus?: boolean;\n layout?: Presentation;\n} & FormFieldStateProps<T>;\n\n/**\n * Form field component.\n */\nexport type FormFieldComponent = FC<FormFieldComponentProps>;\n\nexport type FormFieldMap = Record<string, FormFieldComponent>;\n\nexport type FormFieldProvider = (props: {\n prop: string; // TODO(burdon): Path?\n schema: Schema.Schema<any>;\n fieldProps: FormFieldComponentProps;\n}) => ReactElement | undefined;\n\n//\n// FormFieldLabel\n//\n\nexport type FormFieldLabelProps = {\n asChild?: boolean;\n error?: string;\n} & Pick<FormFieldComponentProps, 'label' | 'readonly'>;\n\nexport const FormFieldLabel = ({ label, error, readonly, asChild }: FormFieldLabelProps) => {\n const Label = readonly || asChild ? 'span' : Input.Label;\n const labelProps = readonly || asChild ? { className: 'text-description text-sm' } : { classNames: '!mlb-0 text-sm' };\n\n return (\n <div role='none' className={mx('flex justify-between items-center', labelSpacing)}>\n <Label {...labelProps}>{label}</Label>\n {error && (\n <Tooltip.Trigger asChild content={error} side='bottom'>\n <Icon icon='ph--warning--regular' size={4} classNames={errorText} />\n </Tooltip.Trigger>\n )}\n </div>\n );\n};\n\nFormFieldLabel.displayName = 'Form.FieldLabel';\n\n//\n// FormFieldWrapper\n//\n\nexport type FormFieldWrapperProps<T = any> = Pick<\n FormFieldComponentProps,\n 'readonly' | 'label' | 'layout' | 'getStatus' | 'getValue'\n> & {\n children?: (props: { value: T }) => ReactNode;\n};\n\nexport const FormFieldWrapper = <T,>(props: FormFieldWrapperProps<T>) => {\n const { children, readonly, layout, label, getStatus, getValue } = props;\n const { status, error } = getStatus();\n\n const value = getValue();\n if (layout === 'static' && value == null) {\n return null;\n }\n\n const str = String(value ?? '');\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} />}\n {layout === 'static' ? <p>{str}</p> : children ? children({ value }) : null}\n {layout === 'full' && (\n <Input.DescriptionAndValidation>\n <Input.Validation>{error}</Input.Validation>\n </Input.DescriptionAndValidation>\n )}\n </Input.Root>\n );\n};\n\n//\n// FormFieldErrorBoundary\n//\n\ntype FormFieldErrorState = {\n error: Error | undefined;\n};\n\ntype FormFieldErrorBoundaryProps = PropsWithChildren<{\n path?: (string | number)[];\n}>;\n\nexport class FormFieldErrorBoundary extends Component<FormFieldErrorBoundaryProps, FormFieldErrorState> {\n static getDerivedStateFromError(error: Error): { error: Error } {\n return { error };\n }\n\n override state = { error: undefined };\n\n override componentDidUpdate(prevProps: FormFieldErrorBoundaryProps) {\n if (prevProps.path !== this.props.path) {\n this.resetError();\n }\n }\n\n override render() {\n if (this.state.error) {\n return (\n <div className='flex gap-2 border border-roseFill font-mono text-sm'>\n <span className='bg-roseFill text-surfaceText pli-1 font-thin'>ERROR</span>\n {String(this.props.path?.join('.'))}\n </div>\n );\n }\n\n return this.props.children;\n }\n\n private resetError() {\n this.setState({ error: undefined });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useMemo } from 'react';\n\nimport { type AnyProperties } from '@dxos/echo/internal';\nimport { type SchemaProperty } from '@dxos/effect';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\nimport { isTruthy } from '@dxos/util';\n\nimport { type FormHandlerProps } from '../../hooks';\nimport { getFormProperties } from '../../util';\n\nimport { useFormValues } from './Form';\nimport { FormField, type FormFieldProps } from './FormField';\nimport { FormFieldErrorBoundary, FormFieldLabel } from './FormFieldComponent';\n\nexport type FormFieldSetProps<T extends AnyProperties> = ThemedClassName<\n {\n label?: string;\n exclude?: (props: SchemaProperty[]) => SchemaProperty[];\n sort?: string[];\n } & Pick<FormHandlerProps<T>, 'schema'> &\n Pick<\n FormFieldProps,\n | 'path'\n | 'autoFocus'\n | 'readonly'\n | 'layout'\n | 'projection'\n | 'fieldMap'\n | 'fieldProvider'\n | 'createOptionLabel'\n | 'createOptionIcon'\n | 'createInitialValuePath'\n | 'db'\n | 'schemaHook'\n | 'getOptions'\n | 'onCreate'\n >\n>;\n\nexport const FormFieldSet = forwardRef<HTMLDivElement, FormFieldSetProps<any>>(\n ({ classNames, label, schema, readonly, path, exclude, sort, projection, layout, ...props }, forwardRef) => {\n const values = useFormValues(FormFieldSet.displayName!, path);\n\n // TODO(burdon): Updates on every value change.\n // Remove values dep if can remove from getSchemaProperties.\n const properties = useMemo(() => {\n if (!schema) {\n return [];\n }\n\n // TODO(wittjosiah): Reconcile FormInputAnnotation with projection hidden properties & exclude function.\n const props = getFormProperties(schema.ast);\n\n // Use projection-based field management when view and projection are available.\n if (projection) {\n const fieldProjections = projection.getFieldProjections();\n const hiddenProperties = new Set(projection.getHiddenProperties());\n\n // Filter properties to only include visible ones and order by projection.\n const visibleProps = props.filter((prop) => !hiddenProperties.has(prop.name.toString()));\n const orderedProps: SchemaProperty[] = [];\n\n // Add properties in projection field order.\n for (const fieldProjection of fieldProjections) {\n const fieldPath = String(fieldProjection.field.path);\n const prop = visibleProps.find((p) => p.name === fieldPath);\n if (prop) {\n orderedProps.push(prop);\n }\n }\n\n // Add any remaining properties not in projection.\n const projectionPaths = new Set(fieldProjections.map((projection) => String(projection.field.path)));\n const remainingProps = visibleProps.filter((prop) => !projectionPaths.has(prop.name.toString()));\n orderedProps.push(...remainingProps);\n return orderedProps;\n }\n\n // Fallback to legacy filter/sort behavior.\n const filtered = exclude ? exclude(props) : props;\n return sort\n ? filtered.sort(({ name: a }, { name: b }) => sort.indexOf(a.toString()) - sort.indexOf(b.toString()))\n : filtered;\n }, [schema, values, exclude, sort, projection?.fields]);\n\n if ((readonly || layout === 'static') && values == null) {\n return null;\n }\n\n return (\n <div\n role='form'\n className={mx('is-full', layout === 'inline' && 'flex flex-col gap-2', classNames)}\n ref={forwardRef}\n >\n {layout !== 'inline' && label && <FormFieldLabel label={label} asChild />}\n {properties\n .map((property) => {\n const name = property.name.toString();\n return (\n <FormFieldErrorBoundary key={name} path={[...(path ?? []), name]}>\n <FormField\n type={property.type}\n name={name}\n path={[...(path ?? []), name]}\n readonly={readonly}\n layout={layout}\n projection={projection}\n {...props}\n />\n </FormFieldErrorBoundary>\n );\n })\n .filter(isTruthy)}\n </div>\n );\n },\n);\n\nFormFieldSet.displayName = 'Form.Fields';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport * as String from 'effect/String';\nimport React, { useMemo } from 'react';\n\nimport { Format } from '@dxos/echo';\nimport {\n createJsonPath,\n findNode,\n getAnnotation,\n getDiscriminatedType,\n isArrayType,\n isDiscriminatedUnion,\n isLiteralUnion,\n isNestedType,\n} from '@dxos/effect';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type ProjectionModel } from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { getRefProps } from '../../util';\n\nimport {\n ArrayField,\n BooleanField,\n GeoPointField,\n MarkdownField,\n NumberField,\n RefField,\n type RefFieldProps,\n SelectField,\n TextAreaField,\n TextField,\n} from './fields';\nimport { useFormFieldState } from './Form';\nimport {\n type FormFieldComponent,\n type FormFieldComponentProps,\n type FormFieldMap,\n type FormFieldProvider,\n} from './FormFieldComponent';\nimport { FormFieldSet } from './FormFieldSet';\n\nexport type FormFieldProps = {\n /**\n * AST of the property to render.\n */\n type: SchemaAST.AST;\n\n /**\n * Name of the property.\n */\n name: string;\n\n /**\n * Path to the current object from the root. Used with nested forms.\n */\n path?: (string | number)[];\n\n /**\n * Optional projection for projection-based field management.\n */\n projection?: ProjectionModel;\n\n /**\n * Map of custom renderers for specific properties.\n * Prefer fieldProvider for plugin specific input surfaces.\n */\n fieldMap?: FormFieldMap;\n\n /**\n * Function to lookup custom renderers for specific properties.\n */\n fieldProvider?: FormFieldProvider;\n} & Pick<FormFieldComponentProps, 'autoFocus' | 'readonly' | 'layout'> &\n Pick<\n RefFieldProps,\n | 'createOptionLabel'\n | 'createOptionIcon'\n | 'createInitialValuePath'\n | 'db'\n | 'schemaHook'\n | 'getOptions'\n | 'onCreate'\n >;\n\nexport const FormField = (props: FormFieldProps) => {\n const {\n type,\n name,\n path,\n projection,\n fieldMap,\n fieldProvider,\n readonly,\n layout,\n\n // RefFieldProps\n createOptionLabel,\n createOptionIcon,\n createInitialValuePath,\n db,\n schemaHook,\n getOptions: getRefOptions,\n onCreate,\n } = props;\n const { t } = useTranslation(translationKey);\n const title = getAnnotation<string>(SchemaAST.TitleAnnotationId)(type);\n const description = getAnnotation<string>(SchemaAST.DescriptionAnnotationId)(type);\n const examples = getAnnotation<string[]>(SchemaAST.ExamplesAnnotationId)(type);\n\n const label = useMemo(() => title ?? String.capitalize(name), [title, name]);\n const placeholder = useMemo(\n () => (examples?.length ? `${t('example placeholder')}: ${examples[0]}` : (description ?? label)),\n [examples, description, label],\n );\n\n const fieldState = useFormFieldState(FormField.displayName, path);\n const fieldProps: FormFieldComponentProps = {\n type,\n format: Format.FormatAnnotation.getFromAst(type).pipe((annotation) => Option.getOrUndefined(annotation)),\n readonly,\n label,\n placeholder,\n layout,\n ...fieldState,\n };\n\n //\n // Custom field.\n //\n\n const jsonPath = createJsonPath(path ?? []);\n const CustomField = fieldMap?.[jsonPath];\n if (CustomField) {\n return <CustomField {...fieldProps} />;\n }\n\n // TODO(burdon): Expensive to create schema each time; pass AST?\n const component = fieldProvider?.({ schema: Schema.make(type), prop: name, fieldProps });\n if (component) {\n return component;\n }\n\n //\n // Array field.\n //\n\n if (isArrayType(type)) {\n return <ArrayField fieldProps={fieldState} label={label} {...props} />;\n }\n\n //\n // Regular field.\n //\n\n const Field = getFormField(fieldProps);\n if (Field) {\n return <Field {...fieldProps} />;\n }\n\n //\n // Select field.\n //\n\n const options = getOptions(type);\n if (options) {\n return (\n <SelectField\n {...fieldProps}\n options={options.map((option) => ({\n value: option,\n label: option.toString(),\n }))}\n />\n );\n }\n\n //\n // Ref field.\n //\n\n const refProps = getRefProps(type);\n if (refProps) {\n return (\n <RefField\n {...fieldProps}\n {...refProps}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n createInitialValuePath={createInitialValuePath}\n db={db}\n schemaHook={schemaHook}\n getOptions={getRefOptions}\n onCreate={onCreate}\n />\n );\n }\n\n //\n // Nested Object field.\n //\n\n if (isNestedType(type)) {\n const baseNode = findNode(type, isDiscriminatedUnion);\n const typeLiteral = baseNode\n ? getDiscriminatedType(baseNode, fieldState.getValue() as any)\n : findNode(type, SchemaAST.isTypeLiteral);\n\n if (typeLiteral) {\n const schema = Schema.make(typeLiteral);\n return (\n <FormFieldSet\n schema={schema}\n path={path}\n readonly={readonly}\n layout={layout}\n label={label}\n projection={projection}\n fieldMap={fieldMap}\n fieldProvider={fieldProvider}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n createInitialValuePath={createInitialValuePath}\n db={db}\n schemaHook={schemaHook}\n getOptions={getRefOptions}\n onCreate={onCreate}\n />\n );\n }\n }\n\n return null;\n};\n\nFormField.displayName = 'Form.FormField';\n\n/**\n * Get property input component.\n */\nconst getFormField = ({ type, format }: FormFieldComponentProps): FormFieldComponent | undefined => {\n //\n // Standard formats.\n //\n\n const formatField = Match.value(format).pipe(\n Match.withReturnType<FormFieldComponent | undefined>(),\n Match.when(Format.TypeFormat.GeoPoint, () => GeoPointField),\n Match.when(Format.TypeFormat.Markdown, () => MarkdownField),\n Match.when(Format.TypeFormat.Text, () => TextAreaField),\n Match.orElse(() => undefined),\n );\n if (formatField) {\n return formatField;\n }\n\n //\n // Standard types.\n //\n\n switch (type._tag) {\n // TODO(wittjosiah): Schema.Any is currently used to represent template inputs.\n case 'AnyKeyword':\n case 'StringKeyword':\n return TextField;\n case 'NumberKeyword':\n return NumberField;\n case 'BooleanKeyword':\n return BooleanField;\n }\n};\n\nconst getOptions = (ast: SchemaAST.AST): Format.Options[] | undefined => {\n if (isLiteralUnion(ast)) {\n return ast.types.map((type) => type.literal).filter((v): v is string | number => v !== null);\n }\n\n return Format.OptionsAnnotation.getFromAst(ast).pipe((annotation) => Option.getOrUndefined(annotation));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type SwitchProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const BooleanField = ({ type, readonly, onValueChange, ...props }: FormFieldComponentProps<boolean>) => {\n const handleChange = useCallback<NonNullable<SwitchProps['onCheckedChange']>>(\n (value) => onValueChange?.(type, value),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<boolean> readonly={readonly} {...props}>\n {({ value }) => <Input.Switch disabled={!!readonly} checked={value} onCheckedChange={handleChange} />}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { GeoLocation, type GeoPoint } from '@dxos/echo/internal';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { translationKey } from '../../../translations';\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport const GeoPointField = ({\n type,\n label,\n readonly,\n layout,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: FormFieldComponentProps<GeoPoint>) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const geoPoint = useMemo<GeoPoint>(() => getValue() ?? [0, 0], [getValue]);\n const value = useMemo(() => GeoLocation.fromGeoPoint(geoPoint), [geoPoint]);\n\n const [longitudeText, setLongitudeText] = useState(value.longitude?.toString());\n const [latitudeText, setLatitudeText] = useState(value.latitude?.toString());\n useEffect(() => {\n const location = GeoLocation.fromGeoPoint(geoPoint);\n setLongitudeText(location.longitude?.toString());\n setLatitudeText(location.latitude?.toString());\n }, [geoPoint]);\n\n const handleChange = useCallback(\n (coordinateType: keyof Pick<GeoLocation, 'longitude' | 'latitude'>, setText: (text: string) => void) =>\n (event: ChangeEvent<HTMLInputElement>) => {\n const inputText = event.target.value;\n setText(inputText);\n if (inputText !== '' && inputText !== '-') {\n const coord = safeParseFloat(inputText);\n if (coord !== undefined && !isNaN(coord)) {\n const currentLocation = GeoLocation.fromGeoPoint(getValue() ?? [0, 0]);\n const newLocation = { ...currentLocation, [coordinateType]: coord };\n const newValue = GeoLocation.toGeoPoint(newLocation);\n onValueChange(type, newValue);\n }\n }\n },\n [type, getValue, onValueChange],\n );\n\n if ((readonly || layout === 'static') && !value?.latitude && !value?.longitude) {\n return null;\n }\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} asChild />}\n {layout === 'static' ? (\n <LatLng {...value} />\n ) : (\n <div role='none' className='grid grid-cols-2 gap-2'>\n <div>\n <Input.Root>\n {layout !== 'inline' && <Input.Label>{t('latitude label')}</Input.Label>}\n <Input.TextInput\n type='number'\n step='0.00001'\n min='-90'\n max='90'\n disabled={!!readonly}\n placeholder={t('latitude placeholder')}\n value={latitudeText ?? ''}\n onChange={handleChange('latitude', setLatitudeText)}\n onBlur={onBlur}\n />\n </Input.Root>\n </div>\n <div>\n <Input.Root>\n {layout !== 'inline' && <Input.Label>{t('longitude label')}</Input.Label>}\n <Input.TextInput\n type='number'\n step='0.00001'\n min='-180'\n max='180'\n disabled={!!readonly}\n placeholder={t('longitude placeholder')}\n value={longitudeText ?? ''}\n onChange={handleChange('longitude', setLongitudeText)}\n onBlur={onBlur}\n />\n </Input.Root>\n </div>\n </div>\n )}\n </Input.Root>\n );\n};\n\nconst LatLng = ({ latitude = 0, longitude = 0 }: GeoLocation) => {\n const latHem = latitude >= 0 ? 'N' : 'S';\n const lngHem = longitude >= 0 ? 'E' : 'W';\n\n return (\n <span className='inline-flex items-center gap-1'>\n <span>\n <span>{Math.abs(latitude).toFixed(5)}</span>\n <span className='text-subdued'>°{latHem}</span>\n </span>\n <span>\n <span>{Math.abs(longitude).toFixed(5)}</span>\n <span className='text-subdued'>°{lngHem}</span>\n </span>\n </span>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useRef } from 'react';\n\nimport { Input, type TextAreaProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport const MarkdownField = ({\n type,\n readonly,\n label,\n placeholder,\n layout,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: FormFieldComponentProps) => {\n const { status, error } = getStatus();\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // TODO(ZaymonFC): If we start using `Enter` for form submission, we should prevent default behavior here\n // since we're using a textarea element and the user needs to be able to enter new lines.\n\n const adjustHeight = useCallback(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.blockSize = 'auto'; // For measurement.\n textarea.style.blockSize = `${textarea.scrollHeight + 2}px`;\n }\n }, []);\n\n // Adjust height on initial render.\n useEffect(() => {\n adjustHeight();\n }, [adjustHeight]);\n\n // Adjust height when the content changes.\n useEffect(() => {\n adjustHeight();\n }, [getValue(), adjustHeight]);\n\n const handleChange = useCallback<NonNullable<TextAreaProps['onChange']>>(\n (event) => onValueChange(type, event.target.value),\n [type, onValueChange],\n );\n\n const value = getValue();\n if ((readonly || layout === 'static') && !value) {\n return null;\n }\n\n // TODO(burdon): Use Markdown Editor.\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} />}\n {layout === 'static' ? (\n <p>{value}</p>\n ) : (\n <Input.TextArea\n ref={textareaRef}\n disabled={!!readonly}\n placeholder={placeholder}\n value={value ?? ''}\n classNames={'min-bs-auto max-bs-40 overflow-auto'}\n onChange={handleChange}\n onBlur={onBlur}\n style={{ resize: 'none' }}\n spellCheck={false}\n />\n )}\n {layout === 'full' && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type TextInputProps } from '@dxos/react-ui';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const NumberField = ({\n type,\n readonly,\n placeholder,\n onValueChange,\n onBlur,\n ...props\n}: FormFieldComponentProps<number>) => {\n const handleChange = useCallback<NonNullable<TextInputProps['onChange']>>(\n (event) => onValueChange(type, safeParseFloat(event.target.value) || 0),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<number> readonly={readonly} {...props}>\n {({ value = '' }) => (\n <Input.TextInput\n type='number'\n disabled={!!readonly}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onBlur={onBlur}\n />\n )}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport '@dxos/lit-ui/dx-tag-picker.pcss';\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { type Database, Entity, Filter, Ref, type Type } from '@dxos/echo';\nimport { ReferenceAnnotationId, type ReferenceAnnotationValue } from '@dxos/echo/internal';\nimport { useQuery, useSchema as useSchema$ } from '@dxos/echo-react';\nimport { findAnnotation } from '@dxos/effect';\nimport { DXN } from '@dxos/keys';\nimport { DxAnchor } from '@dxos/lit-ui/react';\nimport { Button, Icon, Input, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/ui-theme';\n\nimport { translationKey } from '../../../translations';\nimport { ObjectPicker, type ObjectPickerContentProps, type RefOption } from '../../ObjectPicker';\nimport { omitId } from '../Form';\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\n// TODO(burdon): Factor out.\nconst isRefSnapshot = (val: any): val is { '/': string } => {\n return typeof val === 'object' && typeof (val as any)?.['/'] === 'string';\n};\n\nconst defaultGetOptions: NonNullable<RefFieldProps['getOptions']> = (results) =>\n results.map((result) => {\n const id = Entity.getDXN(result).toString();\n const label = Entity.getLabel(result);\n return { id, label: label ?? id };\n });\n\nconst defaultResultsHook: NonNullable<RefFieldProps['resultsHook']> = (db, typename) =>\n useQuery(db, typename ? Filter.typename(typename) : Filter.nothing());\n\nexport type RefFieldProps = FormFieldComponentProps &\n Pick<ObjectPickerContentProps, 'createOptionLabel' | 'createOptionIcon' | 'createInitialValuePath'> & {\n db?: Database.Database;\n resultsHook?: (db?: Database.Database, typename?: string) => Entity.Any[];\n schemaHook?: (db?: Database.Database, typename?: string) => Type.Entity.Any;\n getOptions?: (objects: Entity.Any[]) => RefOption[];\n onCreate?: (schema: Type.Entity.Any, values: any) => void;\n };\n\nexport const RefField = (props: RefFieldProps) => {\n const {\n type,\n readonly,\n label,\n placeholder,\n layout,\n getStatus,\n getValue,\n createOptionLabel,\n createOptionIcon,\n createInitialValuePath,\n db,\n resultsHook: useResults = defaultResultsHook,\n schemaHook: useSchema = useSchema$,\n getOptions = defaultGetOptions,\n onCreate,\n onValueChange,\n } = props;\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n\n const typename = useMemo(\n () => (type ? findAnnotation<ReferenceAnnotationValue>(type, ReferenceAnnotationId)?.typename : undefined),\n [type],\n );\n\n const results = useResults(db, typename);\n const options = useMemo(() => getOptions(results), [results, getOptions]);\n\n const handleGetValue = useCallback(() => {\n const formValue = getValue();\n\n const unknownToRefOption = (value: unknown) => {\n const isRef = Ref.isRef(value);\n if (isRef || isRefSnapshot(value)) {\n const dxnString = isRef ? value.dxn.toString() : value['/'];\n const matchingOption = options.find((option) => option.id === dxnString);\n if (matchingOption) {\n return matchingOption;\n }\n }\n return undefined;\n };\n\n return unknownToRefOption(formValue);\n }, [options, getValue]);\n\n const handleUpdate = useCallback(\n (id: string | undefined) => {\n const item = options.find((option) => option.id === id);\n const ref = item ? Ref.fromDXN(DXN.parse(item.id)) : undefined;\n onValueChange(type, ref);\n },\n [options, type, onValueChange],\n );\n\n const item = handleGetValue();\n const selectedIds = useMemo(() => (item ? [item.id] : []), [item]);\n const createSchema = useSchema(db, typename);\n\n const handleCreate = useCallback(\n (values: any) => {\n if (createSchema && onCreate) {\n onCreate(createSchema, values);\n }\n },\n [createSchema, onCreate],\n );\n\n const handleSelect = useCallback(\n (id: string) => {\n if (item?.id === id) {\n handleUpdate(undefined);\n } else {\n handleUpdate(id);\n }\n },\n [item, handleUpdate],\n );\n\n if (!typename || ((readonly || layout === 'static') && !item)) {\n return null;\n }\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} />}\n <div>\n {readonly ? (\n !item ? (\n <p className={mx(descriptionText, 'mbe-2')}>{t('empty readonly ref field label')}</p>\n ) : (\n <DxAnchor key={item.id} refid={item.id} rootclassname='mie-1'>\n {item.label}\n </DxAnchor>\n )\n ) : (\n <ObjectPicker.Root>\n <ObjectPicker.Trigger asChild classNames='p-0'>\n {item ? (\n <div className='flex gap-2 is-full'>\n <Input.Root key={item.id}>\n <Input.TextInput value={item.label} readOnly classNames='is-full' />\n </Input.Root>\n </div>\n ) : (\n <Button classNames='is-full text-start gap-2'>\n <div role='none' className='grow overflow-hidden'>\n <span className='flex truncate text-description'>{placeholder ?? t('ref field placeholder')}</span>\n </div>\n <Icon size={3} icon='ph--caret-down--bold' />\n </Button>\n )}\n </ObjectPicker.Trigger>\n <ObjectPicker.Portal>\n <ObjectPicker.Content\n classNames='popover-card-width'\n options={options}\n selectedIds={selectedIds}\n createSchema={createSchema && omitId(createSchema)}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n createInitialValuePath={createInitialValuePath}\n onCreate={handleCreate}\n onSelect={handleSelect}\n />\n </ObjectPicker.Portal>\n </ObjectPicker.Root>\n )}\n </div>\n {layout === 'full' && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport React, { type KeyboardEvent, forwardRef, useCallback, useState } from 'react';\n\nimport { type Palette, Popover, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { Combobox, useSearchListInput, useSearchListResults } from '@dxos/react-ui-searchlist';\n\nimport { translationKey } from '../../translations';\nimport { Form } from '../Form';\n\nexport type RefOption = {\n id: string;\n label: string;\n hue?: Palette;\n};\n\nexport type ObjectPickerContentProps = ThemedClassName<{\n options: RefOption[];\n selectedIds?: string[];\n createOptionLabel?: [string, { ns: string }];\n createOptionIcon?: string;\n createSchema?: Schema.Schema.AnyNoContext;\n createInitialValuePath?: string;\n onCreate?: (values: any) => void;\n onSelect: (id: string) => void;\n}>;\n\nconst CreateItem = ({\n createOptionLabel,\n createOptionIcon,\n onCreateItemSelect,\n}: {\n createOptionLabel: [string, { ns: string }];\n createOptionIcon: string;\n onCreateItemSelect: (query: string) => void;\n}) => {\n const { t } = useTranslation(translationKey);\n const { query } = useSearchListInput();\n\n return (\n <Combobox.Item\n value='__create__'\n label={t(createOptionLabel[0], { ns: createOptionLabel[1].ns, text: query })}\n icon={createOptionIcon}\n classNames='flex items-center gap-2'\n closeOnSelect={false}\n onSelect={() => {\n onCreateItemSelect(query);\n }}\n />\n );\n};\n\nconst ObjectPickerContent = forwardRef<HTMLDivElement, ObjectPickerContentProps>(\n (\n {\n options,\n selectedIds,\n createSchema,\n createOptionLabel,\n createOptionIcon,\n createInitialValuePath,\n onSelect,\n onCreate,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation(translationKey);\n const [showForm, setShowForm] = useState(false);\n const [formInitialValue, setFormInitialValue] = useState<string>('');\n\n const { results, handleSearch } = useSearchListResults({\n items: options,\n });\n\n const handleFormSave = useCallback(\n (values: any) => {\n onCreate?.(values);\n setShowForm(false);\n setFormInitialValue('');\n },\n [onCreate],\n );\n\n const handleFormCancel = useCallback(() => {\n setShowForm(false);\n setFormInitialValue('');\n }, []);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (\n event.key === 'Enter' &&\n createSchema &&\n (event.currentTarget as HTMLElement).querySelector(\n '[role=\"option\"][aria-selected=\"true\"][data-value=\"__create__\"]',\n )\n ) {\n event.stopPropagation();\n event.preventDefault();\n // Get the current query from the input element\n const input = (event.currentTarget as HTMLElement).querySelector('input[type=\"text\"]') as HTMLInputElement;\n const currentQuery = input?.value || '';\n setFormInitialValue(currentQuery);\n setShowForm(true);\n }\n },\n [createSchema],\n );\n\n return (\n <Combobox.Content {...props} ref={ref} onSearch={handleSearch} onKeyDownCapture={handleKeyDown}>\n {showForm && createSchema ? (\n <Popover.Viewport>\n <Form.Root\n testId='create-referenced-object-form'\n schema={createSchema}\n values={createInitialValuePath ? { [createInitialValuePath]: formInitialValue } : {}}\n onSave={handleFormSave}\n onCancel={handleFormCancel}\n >\n <Form.Viewport>\n <Form.Content>\n <Form.FieldSet />\n <Form.Actions />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n </Popover.Viewport>\n ) : (\n <>\n <Combobox.Input placeholder={t('ref field combobox input placeholder')} autoFocus />\n <Combobox.List>\n {results.map((option) => (\n <Combobox.Item\n key={option.id}\n value={option.id}\n label={option.label}\n checked={selectedIds?.includes(option.id)}\n onSelect={() => onSelect(option.id)}\n classNames='flex items-center gap-2'\n />\n ))}\n {createOptionLabel && createOptionIcon && createSchema && onCreate && (\n <CreateItem\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n onCreateItemSelect={(query: string) => {\n setFormInitialValue(query);\n setShowForm(true);\n }}\n />\n )}\n </Combobox.List>\n </>\n )}\n <Combobox.Arrow />\n </Combobox.Content>\n );\n },\n);\n\nObjectPickerContent.displayName = 'ObjectPickerContent';\n\nexport const ObjectPicker = {\n Root: Combobox.Root,\n Portal: Combobox.Portal,\n Trigger: Combobox.Trigger,\n VirtualTrigger: Combobox.VirtualTrigger,\n Content: ObjectPickerContent,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, Select, type SelectRootProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport type SelectFieldOptions = FormFieldComponentProps & {\n options?: Array<{ value: string | number; label?: string }>;\n};\n\nexport const SelectField = ({\n type,\n readonly,\n label,\n layout,\n placeholder,\n options,\n getStatus,\n getValue,\n onValueChange,\n}: SelectFieldOptions) => {\n const { status, error } = getStatus();\n const value = getValue() as string | undefined;\n\n const handleValueChange = useCallback<NonNullable<SelectRootProps['onValueChange']>>(\n (value) => onValueChange(type, value),\n [type, onValueChange],\n );\n\n if ((readonly || layout === 'static') && value == null) {\n return null;\n }\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} />}\n {layout === 'static' ? (\n <p>{options?.find(({ value: optionValue }) => optionValue === value)?.label ?? String(value)}</p>\n ) : (\n <Select.Root value={value} onValueChange={handleValueChange}>\n {/* TODO(burdon): Placeholder not working? */}\n <Select.TriggerButton classNames='is-full' disabled={!!readonly} placeholder={placeholder} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {options?.map(({ value, label }) => (\n // NOTE: Numeric values are converted to and from strings.\n <Select.Option key={String(value)} value={String(value)}>\n {label ?? String(value)}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n )}\n {layout === 'full' && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type ChangeEvent, type KeyboardEvent, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { type SelectOption } from '@dxos/echo/internal';\nimport { PublicKey } from '@dxos/keys';\nimport { type ChromaticPalette, IconButton, Input, Tag, useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { HuePicker } from '@dxos/react-ui-pickers';\nimport { hues, osTranslations, subtleHover } from '@dxos/ui-theme';\n\nimport { translationKey } from '../../../translations';\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport const SelectOptionField = ({\n type,\n readonly,\n label,\n getStatus,\n getValue,\n onValueChange,\n}: FormFieldComponentProps<SelectOption[] | undefined>) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const [selected, setSelectedId] = useState<string | null>(null);\n const [isNewOption, setIsNewOption] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const options = getValue();\n\n // Initialization.\n useEffect(() => {\n if (options === undefined) {\n onValueChange(type, []);\n }\n }, [options, type, onValueChange]);\n\n const randomHue = () => {\n const usedHues = new Set(options?.map((option) => option.color) ?? []);\n // Pick a random unused option from hueTokenThemes.\n const unusedHues = hues.filter((hue) => !usedHues.has(hue));\n if (unusedHues.length > 0) {\n return unusedHues[Math.floor(Math.random() * unusedHues.length)];\n }\n\n // Pick a random one that hasn't been used in the last three options\n const lastThree = new Set(options?.slice(-3).map((option) => option.color) ?? []);\n const availableHues = hues.filter((hue) => !lastThree.has(hue));\n return (\n availableHues[Math.floor(Math.random() * availableHues.length)] ?? hues[Math.floor(Math.random() * hues.length)]\n );\n };\n\n const handleAdd = useCallback(() => {\n const newId = PublicKey.random().truncate();\n const newOption = { id: newId, title: '', color: randomHue() };\n onValueChange(type, [...(options ?? []), newOption]);\n setSelectedId(newId);\n setIsNewOption(true);\n }, [options, type, onValueChange]);\n\n const handleDelete = useCallback(\n (id: string) => {\n const newOptions = options?.filter((option) => option.id !== id) ?? [];\n onValueChange(type, newOptions);\n setSelectedId(null);\n },\n [options, type, onValueChange],\n );\n\n const handleMove = useCallback(\n (from: number, to: number) => {\n if (!options) {\n return;\n }\n\n const newOptions = [...options];\n const [removed] = newOptions.splice(from, 1);\n newOptions.splice(to, 0, removed);\n onValueChange(type, newOptions);\n },\n [options, type, onValueChange],\n );\n\n const handleClick = useCallback((id: string) => {\n setSelectedId((current) => (current === id ? null : id));\n }, []);\n\n const handleTitleChange = useCallback(\n (id: string) => (e: ChangeEvent<HTMLInputElement>) => {\n const newOptions = options?.map((o) => (o.id === id ? { ...o, title: e.target.value } : o));\n onValueChange(type, newOptions ?? []);\n },\n [options, type, onValueChange],\n );\n\n const handleKeyDown = useCallback((ev: KeyboardEvent<HTMLInputElement>) => {\n if (ev.key === 'Enter') {\n setSelectedId(null);\n }\n }, []);\n\n const handleColorChange = useCallback(\n (id: string) => (hue: string) => {\n const newOptions = options?.map((o) => (o.id === id ? { ...o, color: hue } : o));\n onValueChange(type, newOptions ?? []);\n },\n [options, type, onValueChange],\n );\n\n useEffect(() => {\n if (selected && isNewOption && inputRef.current) {\n inputRef.current.focus();\n setIsNewOption(false);\n }\n }, [selected, isNewOption]);\n\n return (\n <Input.Root validationValence={status}>\n <FormFieldLabel error={error} readonly={readonly} label={label} />\n <div role='none'>\n {options && (\n <List.Root\n items={options}\n isItem={(_item) => true}\n onMove={readonly ? undefined : handleMove}\n readonly={!!readonly}\n >\n {({ items }) => (\n <div role='list' className='is-full overflow-auto'>\n {items?.map((item) => (\n <div key={item.id}>\n <List.Item\n role='button'\n item={item}\n classNames={[subtleHover, 'flex flex-col cursor-pointer rounded-sm']}\n aria-expanded={selected === item.id}\n >\n <div className='flex items-center'>\n <List.ItemDragHandle disabled={!!readonly} />\n <List.ItemTitle onClick={() => handleClick(item.id)} classNames='flex-1'>\n {/* TODO(ZaymonFC): Move spacer into Tag component. */}\n <Tag palette={item.color as ChromaticPalette}>{item.title || '\\u200b'}</Tag>\n </List.ItemTitle>\n <IconButton\n iconOnly\n variant='ghost'\n label={t(selected === item.id ? 'collapse label' : 'expand label', { ns: osTranslations })}\n icon={selected === item.id ? 'ph--caret-down--regular' : 'ph--caret-right--regular'}\n onClick={() => handleClick(item.id)}\n />\n </div>\n {selected === item.id && (\n <div className='pli-cardSpacingInline plb-cardSpacingBlock flex flex-col gap-1 density-fine'>\n {/* 16px to match drag handle width. */}\n <Input.Label classNames='text-xs'>{t('select option label')}</Input.Label>\n <div className='grid grid-cols-[1fr_min-content_min-content] gap-1'>\n <Input.TextInput\n disabled={!!readonly}\n placeholder={t('select option label placeholder')}\n ref={selected === item.id ? inputRef : undefined}\n value={item.title}\n onChange={handleTitleChange(item.id)}\n onKeyDown={handleKeyDown}\n classNames='flex-1'\n />\n <HuePicker disabled={!!readonly} value={item.color} onChange={handleColorChange(item.id)} />\n <IconButton\n disabled={!!readonly}\n icon='ph--trash--fill'\n iconOnly\n label={t('select option delete')}\n onClick={() => handleDelete(item.id)}\n />\n </div>\n </div>\n )}\n </List.Item>\n </div>\n ))}\n <IconButton\n variant='ghost'\n icon='ph--plus--regular'\n label={t('select option add')}\n onClick={handleAdd}\n disabled={!!readonly}\n classNames='is-full'\n />\n </div>\n )}\n </List.Root>\n )}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type TextInputProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const TextField = ({\n type,\n readonly,\n placeholder,\n onValueChange,\n onBlur,\n ...props\n}: FormFieldComponentProps<string>) => {\n const handleChange = useCallback<NonNullable<TextInputProps['onChange']>>(\n (event) => onValueChange(type, event.target.value),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<string> readonly={readonly} {...props}>\n {({ value = '' }) => (\n <Input.TextInput\n noAutoFill\n disabled={!!readonly}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onBlur={onBlur}\n />\n )}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type TextAreaProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const TextAreaField = ({\n type,\n readonly,\n placeholder,\n onValueChange,\n onBlur,\n ...props\n}: FormFieldComponentProps<string>) => {\n const handleChange = useCallback<NonNullable<TextAreaProps['onChange']>>(\n (event) => onValueChange(type, event.target.value),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<string> readonly={readonly} {...props}>\n {({ value = '' }) => (\n <Input.TextArea\n rows={3}\n disabled={!!readonly}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onBlur={onBlur}\n />\n )}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nconst gridCols = ['grid-cols-1', 'grid-cols-2', 'grid-cols-3', 'grid-cols-4'];\n\nexport const TupleField = ({\n binding,\n type,\n readonly,\n label,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: FormFieldComponentProps<Record<string, number>> & {\n binding: string[];\n}) => {\n const { status, error } = getStatus();\n\n // TODO(burdon): Generalize number/float/string, etc.\n const values: Record<string, number> = getValue() ?? {};\n\n return (\n <Input.Root validationValence={status}>\n <FormFieldLabel error={error} readonly={readonly} label={label} />\n <div className={mx('grid gap-2', gridCols[binding.length - 1])}>\n {binding.map((prop) => (\n <Input.TextInput\n key={prop}\n type='number'\n disabled={!!readonly}\n value={values[prop]}\n onChange={(event) => {\n onValueChange(type, {\n ...values,\n [prop]: safeParseFloat(event.target.value, 0),\n });\n }}\n onBlur={onBlur}\n />\n ))}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport * as Array from 'effect/Array';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport React, { forwardRef, useCallback, useContext, useImperativeHandle, useMemo, useState } from 'react';\n\nimport { Filter, Format, Obj, Query, QueryAST, type SchemaRegistry } from '@dxos/echo';\nimport { EchoSchema, type JsonProp, isMutable, toJsonSchema } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { useObject } from '@dxos/react-client/echo';\nimport { Callout, IconButton, Input, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { QueryForm, type QueryFormProps } from '@dxos/react-ui-components';\nimport { List } from '@dxos/react-ui-list';\nimport {\n FieldSchema,\n type FieldType,\n ProjectionModel,\n VIEW_FIELD_LIMIT,\n type View,\n createEchoChangeCallback,\n getTypenameFromQuery,\n} from '@dxos/schema';\nimport { mx, osTranslations, subtleHover } from '@dxos/ui-theme';\n\nimport { translationKey } from '../../translations';\nimport { FieldEditor } from '../FieldEditor';\nimport {\n Form,\n type FormFieldComponent,\n type FormFieldComponentProps,\n FormFieldLabel,\n type FormFieldMap,\n} from '../Form';\n\nconst listGrid = 'grid grid-cols-[min-content_1fr_min-content_min-content_min-content]';\nconst listItemGrid = 'grid grid-cols-subgrid col-span-5';\n\nexport type ViewEditorProps = ThemedClassName<\n {\n schema: Schema.Schema.AnyNoContext;\n view: View.View;\n mode?: 'schema' | 'tag';\n registry?: SchemaRegistry.SchemaRegistry;\n readonly?: boolean;\n showHeading?: boolean;\n onQueryChanged?: (query: QueryAST.Query, target?: string) => void;\n onDelete?: (fieldId: string) => void;\n } & Pick<QueryFormProps, 'types' | 'tags'>\n>;\n\n/**\n * Schema-based object form.\n */\nexport const ViewEditor = forwardRef<ProjectionModel, ViewEditorProps>(\n (\n {\n classNames,\n schema,\n view,\n mode = 'schema',\n registry,\n readonly,\n showHeading = false,\n types,\n tags,\n onQueryChanged,\n onDelete,\n },\n forwardedRef,\n ) => {\n const atomRegistry = useContext(RegistryContext);\n const schemaReadonly = !isMutable(schema);\n const { t } = useTranslation(translationKey);\n\n const projectionModel = useMemo(() => {\n // Use reactive and mutable version of json schema when schema is mutable.\n const jsonSchema = schema instanceof EchoSchema ? schema.jsonSchema : toJsonSchema(schema);\n\n // Always use createEchoChangeCallback since the view is ECHO-backed.\n // Pass schema only when mutable to allow schema mutations.\n const change = createEchoChangeCallback(view, schema instanceof EchoSchema ? schema : undefined);\n\n const model = new ProjectionModel({\n registry: atomRegistry,\n view,\n baseSchema: jsonSchema,\n change,\n });\n\n return model;\n }, [atomRegistry, schema, view]);\n\n useImperativeHandle(forwardedRef, () => projectionModel, [projectionModel]);\n const [expandedField, setExpandedField] = useState<FieldType['id']>();\n\n const queueTarget = Match.value(view.query.ast).pipe(\n Match.when({ type: 'options' }, ({ options }) => {\n return Option.fromNullable(options.queues).pipe(\n Option.flatMap((queues) => Array.head(queues)),\n Option.getOrUndefined,\n );\n }),\n Match.orElse(() => undefined),\n );\n\n const viewSchema = useMemo(() => {\n const base = Schema.Struct({\n query:\n mode === 'schema'\n ? Format.URL.annotations({ title: 'Record type' })\n : QueryAST.Query.annotations({ title: 'Query' }),\n });\n\n if (mode === 'tag') {\n return Schema.Struct({\n ...base.fields,\n target: Schema.optional(Schema.String.annotations({ title: 'Target Queue' })),\n }).pipe(Schema.mutable);\n }\n\n return base.pipe(Schema.mutable);\n }, [mode]);\n\n // TODO(burdon): Need to warn user of possible consequences of editing.\n // TODO(burdon): Settings should have domain name owned by user.\n const viewValues = useMemo(\n () => ({\n query: mode === 'schema' ? getTypenameFromQuery(view.query.ast) : view.query.ast,\n target: queueTarget,\n }),\n [mode, view.query.ast, queueTarget],\n );\n\n const fieldMap = useMemo<FormFieldMap | undefined>(\n () => (mode === 'tag' ? customFields({ types, tags }) : undefined),\n [mode, types, tags],\n );\n\n // TODO(burdon): Check if mutable.\n const handleAdd = useCallback(() => {\n invariant(!readonly);\n const field = projectionModel.createFieldProjection();\n setExpandedField(field.id);\n }, [projectionModel, readonly]);\n\n const handleUpdate = useCallback(\n (values: any) => {\n requestAnimationFrame(() => {\n const query = mode === 'schema' ? Query.select(Filter.typename(values.query)).ast : values.query;\n onQueryChanged?.(query, values.target);\n });\n },\n [onQueryChanged, view, queueTarget, mode],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => {\n invariant(!readonly);\n if (fieldId === expandedField) {\n setExpandedField(undefined);\n }\n\n onDelete?.(fieldId);\n },\n [expandedField, onDelete, readonly],\n );\n\n return (\n <div role='none' className={mx(classNames)}>\n {/* If readonly is set, then the callout is not needed. */}\n {schemaReadonly && !readonly && (\n <Callout.Root valence='info' classNames='mlb-cardSpacingBlock'>\n <Callout.Title>{t('system schema description')}</Callout.Title>\n </Callout.Root>\n )}\n\n {/* TODO(burdon): Is the form read-only or just the schema? */}\n <Form.Root schema={viewSchema} values={viewValues} fieldMap={fieldMap} autoSave onSave={handleUpdate}>\n <Form.FieldSet />\n\n <FormFieldLabel label={t('fields label')} asChild />\n <FieldList\n schema={schema}\n view={view}\n registry={registry}\n readonly={readonly}\n showHeading={showHeading}\n onDelete={handleDelete}\n />\n </Form.Root>\n\n {!readonly && !expandedField && (\n <div role='none' className='mlb-cardSpacingBlock'>\n <IconButton\n icon='ph--plus--regular'\n label={t('add property button label')}\n onClick={readonly ? undefined : handleAdd}\n // TODO(burdon): Show field limit in ux (not tooltip).\n disabled={view.projection.fields.length >= VIEW_FIELD_LIMIT}\n classNames='is-full'\n />\n </div>\n )}\n </div>\n );\n },\n);\n\ntype FieldListProps = Pick<ViewEditorProps, 'schema' | 'view' | 'registry' | 'readonly' | 'showHeading' | 'onDelete'>;\n\nconst FieldList = ({ schema, view, registry, readonly, showHeading = false, onDelete }: FieldListProps) => {\n const atomRegistry = useContext(RegistryContext);\n const schemaReadonly = !isMutable(schema);\n const { t } = useTranslation(translationKey);\n\n // Subscribe to view changes for reactivity.\n const [viewSnapshot] = useObject(view);\n\n const projectionModel = useMemo(() => {\n // Use reactive and mutable version of json schema when schema is mutable.\n const jsonSchema = schema instanceof EchoSchema ? schema.jsonSchema : toJsonSchema(schema);\n\n // Always use createEchoChangeCallback since the view is ECHO-backed.\n // Pass schema only when mutable to allow schema mutations.\n const change = createEchoChangeCallback(view, schema instanceof EchoSchema ? schema : undefined);\n\n const model = new ProjectionModel({\n registry: atomRegistry,\n view,\n baseSchema: jsonSchema,\n change,\n });\n\n return model;\n }, [atomRegistry, schema, view]);\n\n const [expandedField, setExpandedField] = useState<FieldType['id']>();\n\n const handleToggleField = useCallback(\n (field: FieldType) => {\n setExpandedField((prevExpandedFieldId) => (prevExpandedFieldId === field.id ? undefined : field.id));\n },\n [readonly],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => {\n invariant(!readonly);\n if (fieldId === expandedField) {\n setExpandedField(undefined);\n }\n\n onDelete?.(fieldId);\n },\n [expandedField, onDelete, readonly],\n );\n\n const handleMove = useCallback(\n (fromIndex: number, toIndex: number) => {\n invariant(!readonly);\n Obj.change(view, (v) => {\n // NOTE(ZaymonFC): Using arrayMove here causes a race condition with the kanban model.\n const fields = [...v.projection.fields];\n const [moved] = fields.splice(fromIndex, 1);\n fields.splice(toIndex, 0, moved);\n v.projection.fields = fields;\n });\n },\n [view, readonly],\n );\n\n const handleClose = useCallback(() => setExpandedField(undefined), []);\n\n const handleHide = useCallback(\n (fieldId: string) => {\n setExpandedField(undefined);\n projectionModel.hideFieldProjection(fieldId);\n },\n [projectionModel],\n );\n\n const handleShow = useCallback(\n (property: string) => {\n setExpandedField(undefined);\n projectionModel.showFieldProjection(property as JsonProp);\n },\n [projectionModel],\n );\n\n if (!viewSnapshot) {\n return null;\n }\n\n return (\n <List.Root<FieldType>\n items={viewSnapshot.projection.fields as FieldType[]}\n isItem={Schema.is(FieldSchema)}\n getId={(field) => field.id}\n onMove={readonly ? undefined : handleMove}\n readonly={readonly}\n >\n {({ items: fields }) => (\n <>\n {showHeading && <h3 className='text-sm'>{t('field path label')}</h3>}\n <div role='list' className={listGrid}>\n {fields?.map((field) => {\n const hidden = field.visible === false;\n return (\n <List.Item<FieldType>\n key={field.id}\n item={field}\n classNames={listItemGrid}\n aria-expanded={expandedField === field.id}\n >\n <div role='none' className={mx(subtleHover, listItemGrid, 'rounded-sm cursor-pointer min-bs-10')}>\n <List.ItemDragHandle disabled={readonly || schemaReadonly} />\n <List.ItemTitle classNames={hidden && 'text-subdued'} onClick={() => handleToggleField(field)}>\n {field.path}\n </List.ItemTitle>\n <List.ItemButton\n label={t(hidden ? 'show field label' : 'hide field label')}\n data-testid={hidden ? 'show-field-button' : 'hide-field-button'}\n icon={hidden ? 'ph--eye-closed--regular' : 'ph--eye--regular'}\n autoHide={false}\n disabled={readonly || (!hidden && projectionModel.getFields().length <= 1)}\n onClick={() => (hidden ? handleShow(field.path) : handleHide(field.id))}\n />\n {!readonly && (\n <>\n <List.ItemDeleteButton\n label={t('delete field label')}\n autoHide={false}\n disabled={readonly || schemaReadonly || viewSnapshot.projection.fields.length <= 1}\n onClick={() => handleDelete(field.id)}\n data-testid='field.delete'\n />\n <IconButton\n iconOnly\n variant='ghost'\n label={t('toggle expand label', { ns: osTranslations })}\n icon={expandedField === field.id ? 'ph--caret-down--regular' : 'ph--caret-right--regular'}\n onClick={() => handleToggleField(field)}\n data-testid='field.toggle'\n />\n </>\n )}\n </div>\n {expandedField === field.id && !readonly && (\n <div role='none' className='col-span-5 mbs-1 mbe-1 border border-separator rounded-md'>\n <FieldEditor\n readonly={readonly || schemaReadonly}\n registry={registry}\n projection={projectionModel}\n field={field}\n onSave={handleClose}\n />\n </div>\n )}\n </List.Item>\n );\n })}\n </div>\n </>\n )}\n </List.Root>\n );\n};\n\nconst customFields = ({\n types,\n tags,\n}: Pick<ViewEditorProps, 'types' | 'tags'>): Record<string, FormFieldComponent> => ({\n query: ({ type, readonly, label, getValue, onValueChange }: FormFieldComponentProps) => {\n const handleChange = useCallback<NonNullable<QueryFormProps['onChange']>>(\n (query) => onValueChange(type, query.ast),\n [onValueChange],\n );\n\n return (\n <Input.Root>\n <FormFieldLabel readonly={readonly} label={label} />\n <QueryForm initialQuery={getValue()} types={types} tags={tags} onChange={handleChange} />\n </Input.Root>\n );\n },\n});\n"],
5
- "mappings": "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",
6
- "names": ["translationKey", "translations", "React", "Button", "Input", "toLocalizedString", "useTranslation", "Layout", "mx", "ControlPage", "children", "classNames", "props", "Layout", "Container", "scrollable", "div", "role", "className", "mx", "ControlSection", "title", "description", "ControlSectionHeading", "t", "useTranslation", "translationKey", "h2", "toLocalizedString", "p", "ControlGroupButton", "Button", "ControlGroup", "ControlFrame", "controlItemClasses", "controlItemTitleClasses", "controlItemDescriptionClasses", "ControlItem", "h3", "ControlItemInput", "Input", "Root", "Label", "DescriptionAndValidation", "Description", "ControlFrameItem", "React", "useCallback", "useEffect", "useMemo", "useState", "Obj", "Format", "FormatEnums", "formatToType", "log", "useAsyncEffect", "useTranslation", "formatToAdditionalPropertyAttributes", "getFormatSchema", "Obj", "setValue", "setValuePlain", "splitJsonPath", "setValueEchoAware", "obj", "path", "value", "Obj", "isObject", "change", "mutableObj", "setValue", "splitJsonPath", "setValuePlain", "Format", "GeoLocation", "TypeEnum", "parseValue", "type", "format", "value", "undefined", "parseScalar", "TypeEnum", "Boolean", "lowercaseValue", "toLowerCase", "Number", "cleaned", "replace", "num", "isNaN", "String", "Ref", "Format", "TypeFormat", "Percent", "Currency", "Markdown", "Error", "DateTime", "Date", "Time", "Timestamp", "date", "getTime", "GeoPoint", "parts", "split", "length", "lat", "parseFloat", "long", "GeoLocation", "toGeoPoint", "latitude", "longitude", "cellClassesForFieldType", "Duration", "JSON", "DID", "pathNotUniqueError", "path", "message", "format", "formatDate", "Format", "GeoLocation", "TypeEnum", "formatForDisplay", "type", "format", "value", "locale", "undefined", "formatScalar", "TypeEnum", "Boolean", "toLocaleString", "toUpperCase", "Number", "String", "Ref", "Format", "TypeFormat", "Percent", "Currency", "style", "currency", "minimumFractionDigits", "maximumFractionDigits", "Date", "formatDate", "error", "Time", "DateTime", "GeoPoint", "Array", "isArray", "length", "every", "isFinite", "latitude", "longitude", "GeoLocation", "fromGeoPoint", "formatForEditing", "date", "toISOString", "split", "Option", "Annotation", "getProperties", "getFormProperties", "ast", "getProperties", "filter", "prop", "Annotation", "FormInputAnnotation", "getFromAst", "type", "pipe", "getOrElse", "Ref", "getArrayElementType", "isArrayType", "getRefProps", "ast", "isArrayType", "elementType", "getArrayElementType", "Ref", "isRefType", "isArray", "undefined", "Option", "SchemaAST", "React", "useCallback", "findNode", "getArrayElementType", "getDiscriminatedType", "isDiscriminatedUnion", "isNestedType", "IconButton", "useTranslation", "createContext", "Schema", "React", "useEffect", "useMemo", "useRef", "createJsonPath", "getValue", "getValue$", "IconButton", "ScrollArea", "useTranslation", "mx", "useControllableState", "useCallback", "useEffect", "useMemo", "useState", "Obj", "createJsonPath", "fromEffectValidationPath", "getValue", "getValue$", "setValue", "setValue$", "log", "useDefaultValue", "validateSchema", "useFormHandler", "schema", "autoSave", "values", "valuesProp", "defaultValues", "defaultValuesProp", "onValuesChanged", "onValidate", "onSave", "onCancel", "props", "changed", "setChanged", "useState", "touched", "setTouched", "errors", "setErrors", "saving", "setSaving", "useDefaultValue", "values$", "setValues", "useControllableState", "prop", "defaultProp", "onChange", "validate", "useCallback", "validateSchema", "log", "length", "validatedValues", "flatMap", "valid", "schemaChanged", "setSchemaChanged", "useEffect", "isValid", "useMemo", "Object", "keys", "canSave", "entries", "some", "path", "isTouched", "errorPath", "startsWith", "handleSave", "handleCancel", "getStatus", "jsonPath", "Array", "isArray", "createJsonPath", "_", "error", "find", "status", "undefined", "getValue", "getValue$", "onValueChange", "type", "value", "parsedValue", "_tag", "parseFloat", "err", "catch", "newValues", "Obj", "isObject", "setValueEchoAware", "setValue$", "newChanged", "onBlur", "reduce", "result", "message", "fromEffectValidationPath", "useCallback", "useEffect", "addEventListener", "useKeyHandler", "formElement", "form", "handleKeyDown", "useCallback", "event", "key", "metaKey", "canSave", "onSave", "isValid", "autoSave", "useEffect", "addEventListener", "React", "Component", "Icon", "Input", "Tooltip", "errorText", "mx", "labelSpacing", "FormFieldLabel", "label", "error", "readonly", "asChild", "Label", "Input", "labelProps", "className", "classNames", "React", "div", "role", "mx", "Tooltip", "Trigger", "content", "side", "Icon", "icon", "size", "errorText", "displayName", "FormFieldWrapper", "props", "children", "layout", "getStatus", "getValue", "status", "value", "str", "String", "Root", "validationValence", "p", "DescriptionAndValidation", "Validation", "FormFieldErrorBoundary", "Component", "getDerivedStateFromError", "state", "undefined", "componentDidUpdate", "prevProps", "path", "resetError", "render", "span", "join", "setState", "React", "forwardRef", "useMemo", "mx", "isTruthy", "Match", "Option", "Schema", "SchemaAST", "String", "React", "useMemo", "Format", "createJsonPath", "findNode", "getAnnotation", "getDiscriminatedType", "isArrayType", "isDiscriminatedUnion", "isLiteralUnion", "isNestedType", "useTranslation", "FormField", "props", "type", "name", "path", "projection", "fieldMap", "fieldProvider", "readonly", "layout", "createOptionLabel", "createOptionIcon", "createInitialValuePath", "db", "schemaHook", "getOptions", "getRefOptions", "onCreate", "t", "useTranslation", "translationKey", "title", "getAnnotation", "TitleAnnotationId", "description", "DescriptionAnnotationId", "examples", "ExamplesAnnotationId", "label", "useMemo", "capitalize", "placeholder", "length", "fieldState", "useFormFieldState", "displayName", "fieldProps", "format", "Format", "FormatAnnotation", "getFromAst", "pipe", "annotation", "getOrUndefined", "jsonPath", "createJsonPath", "CustomField", "React", "component", "schema", "make", "prop", "isArrayType", "ArrayField", "Field", "getFormField", "options", "SelectField", "map", "option", "value", "toString", "refProps", "getRefProps", "RefField", "isNestedType", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "getValue", "isTypeLiteral", "FormFieldSet", "formatField", "withReturnType", "when", "TypeFormat", "GeoPoint", "GeoPointField", "Markdown", "MarkdownField", "Text", "TextAreaField", "orElse", "undefined", "_tag", "TextField", "NumberField", "BooleanField", "ast", "isLiteralUnion", "types", "literal", "filter", "v", "OptionsAnnotation", "FormFieldSet", "forwardRef", "classNames", "label", "schema", "readonly", "path", "exclude", "sort", "projection", "layout", "props", "values", "useFormValues", "displayName", "properties", "useMemo", "getFormProperties", "ast", "fieldProjections", "getFieldProjections", "hiddenProperties", "Set", "getHiddenProperties", "visibleProps", "filter", "prop", "has", "name", "toString", "orderedProps", "fieldProjection", "fieldPath", "String", "field", "find", "p", "push", "projectionPaths", "map", "remainingProps", "filtered", "a", "b", "indexOf", "fields", "React", "div", "role", "className", "mx", "ref", "FormFieldLabel", "asChild", "property", "FormFieldErrorBoundary", "key", "FormField", "type", "isTruthy", "omitId", "schema", "pipe", "omit", "FormContextProvider", "useFormContext", "createContext", "useFormValues", "componentName", "path", "defaultValue", "jsonPath", "createJsonPath", "form", "values", "value", "getValue$", "useEffect", "setValueEchoAware", "useFormFieldState", "stablePath", "useMemo", "Array", "isArray", "join", "getStatus", "getValue", "onBlur", "onValueChange", "ast", "FormRoot", "children", "onSave", "onCancel", "props", "useFormHandler", "React", "displayName", "FormViewport", "classNames", "ScrollArea", "Root", "Viewport", "Scrollbar", "orientation", "Thumb", "FormContent", "testId", "ref", "useRef", "useKeyHandler", "current", "div", "role", "className", "mx", "data-testid", "FormFieldSet", "NaturalFormFieldSet", "FormActions", "t", "useTranslation", "translationKey", "canSave", "readonly", "layout", "IconButton", "icon", "iconEnd", "label", "onClick", "type", "variant", "disabled", "FormSubmit", "Form", "Content", "FieldSet", "Actions", "Submit", "Label", "FormFieldLabel", "ArrayField", "type", "path", "label", "readonly", "layout", "fieldProps", "inputProps", "props", "t", "useTranslation", "translationKey", "elementType", "getArrayElementType", "onValueChange", "values", "useFormValues", "displayName", "getDefaultObjectValue", "typeNode", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "isTypeLiteral", "Object", "fromEntries", "getFormProperties", "map", "prop", "defaultValue", "getDefaultAnnotation", "pipe", "annotation", "getOrUndefined", "name", "handleAdd", "useCallback", "isNestedType", "getDefaultValue", "handleDelete", "idx", "filter", "_", "i", "length", "React", "FormFieldLabel", "asChild", "div", "role", "className", "index", "key", "FormField", "autoFocus", "IconButton", "icon", "iconOnly", "onClick", "classNames", "ast", "_tag", "Error", "React", "useCallback", "Input", "BooleanField", "type", "readonly", "onValueChange", "props", "handleChange", "useCallback", "value", "React", "FormFieldWrapper", "Input", "Switch", "disabled", "checked", "onCheckedChange", "React", "useCallback", "useEffect", "useMemo", "useState", "GeoLocation", "Input", "useTranslation", "safeParseFloat", "GeoPointField", "type", "label", "readonly", "layout", "getStatus", "getValue", "onValueChange", "onBlur", "t", "useTranslation", "translationKey", "status", "error", "geoPoint", "useMemo", "value", "GeoLocation", "fromGeoPoint", "longitudeText", "setLongitudeText", "useState", "longitude", "toString", "latitudeText", "setLatitudeText", "latitude", "useEffect", "location", "handleChange", "useCallback", "coordinateType", "setText", "event", "inputText", "target", "coord", "safeParseFloat", "undefined", "isNaN", "currentLocation", "newLocation", "newValue", "toGeoPoint", "React", "Input", "Root", "validationValence", "FormFieldLabel", "asChild", "LatLng", "div", "role", "className", "Label", "TextInput", "step", "min", "max", "disabled", "placeholder", "onChange", "latHem", "lngHem", "span", "Math", "abs", "toFixed", "React", "useCallback", "useEffect", "useRef", "Input", "MarkdownField", "type", "readonly", "label", "placeholder", "layout", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "textareaRef", "useRef", "adjustHeight", "useCallback", "textarea", "current", "style", "blockSize", "scrollHeight", "useEffect", "handleChange", "event", "target", "value", "React", "Input", "Root", "validationValence", "FormFieldLabel", "p", "TextArea", "ref", "disabled", "classNames", "onChange", "resize", "spellCheck", "Validation", "React", "useCallback", "Input", "safeParseFloat", "NumberField", "type", "readonly", "placeholder", "onValueChange", "onBlur", "props", "handleChange", "useCallback", "event", "safeParseFloat", "target", "value", "React", "FormFieldWrapper", "Input", "TextInput", "disabled", "onChange", "React", "useCallback", "useMemo", "Entity", "Filter", "Ref", "ReferenceAnnotationId", "useQuery", "useSchema", "useSchema$", "findAnnotation", "DXN", "DxAnchor", "Button", "Icon", "Input", "useTranslation", "descriptionText", "mx", "React", "forwardRef", "useCallback", "useState", "Popover", "useTranslation", "Combobox", "useSearchListInput", "useSearchListResults", "CreateItem", "createOptionLabel", "createOptionIcon", "onCreateItemSelect", "t", "useTranslation", "translationKey", "query", "useSearchListInput", "React", "Combobox", "Item", "value", "label", "ns", "text", "icon", "classNames", "closeOnSelect", "onSelect", "ObjectPickerContent", "forwardRef", "options", "selectedIds", "createSchema", "createInitialValuePath", "onCreate", "props", "ref", "showForm", "setShowForm", "useState", "formInitialValue", "setFormInitialValue", "results", "handleSearch", "useSearchListResults", "items", "handleFormSave", "useCallback", "values", "handleFormCancel", "handleKeyDown", "event", "key", "currentTarget", "querySelector", "stopPropagation", "preventDefault", "input", "currentQuery", "Content", "onSearch", "onKeyDownCapture", "Popover", "Viewport", "Form", "Root", "testId", "schema", "onSave", "onCancel", "FieldSet", "Actions", "Input", "placeholder", "autoFocus", "List", "map", "option", "id", "checked", "includes", "Arrow", "displayName", "ObjectPicker", "Portal", "Trigger", "VirtualTrigger", "isRefSnapshot", "val", "defaultGetOptions", "results", "map", "result", "id", "Entity", "getDXN", "toString", "label", "getLabel", "defaultResultsHook", "db", "typename", "useQuery", "Filter", "nothing", "RefField", "props", "type", "readonly", "placeholder", "layout", "getStatus", "getValue", "createOptionLabel", "createOptionIcon", "createInitialValuePath", "resultsHook", "useResults", "schemaHook", "useSchema", "useSchema$", "getOptions", "onCreate", "onValueChange", "t", "useTranslation", "translationKey", "status", "error", "useMemo", "findAnnotation", "ReferenceAnnotationId", "undefined", "options", "handleGetValue", "useCallback", "formValue", "unknownToRefOption", "value", "isRef", "Ref", "dxnString", "dxn", "matchingOption", "find", "option", "handleUpdate", "item", "ref", "fromDXN", "DXN", "parse", "selectedIds", "createSchema", "handleCreate", "values", "handleSelect", "React", "Input", "Root", "validationValence", "FormFieldLabel", "div", "p", "className", "mx", "descriptionText", "DxAnchor", "key", "refid", "rootclassname", "ObjectPicker", "Trigger", "asChild", "classNames", "TextInput", "readOnly", "Button", "role", "span", "Icon", "size", "icon", "Portal", "Content", "omitId", "onSelect", "DescriptionAndValidation", "React", "useCallback", "Input", "Select", "SelectField", "type", "readonly", "label", "layout", "placeholder", "options", "getStatus", "getValue", "onValueChange", "status", "error", "value", "handleValueChange", "useCallback", "React", "Input", "Root", "validationValence", "FormFieldLabel", "p", "find", "optionValue", "String", "Select", "TriggerButton", "classNames", "disabled", "Portal", "Content", "Viewport", "map", "Option", "key", "Arrow", "DescriptionAndValidation", "React", "useCallback", "useEffect", "useRef", "useState", "PublicKey", "IconButton", "Input", "Tag", "useTranslation", "List", "HuePicker", "hues", "osTranslations", "subtleHover", "SelectOptionField", "type", "readonly", "label", "getStatus", "getValue", "onValueChange", "t", "useTranslation", "translationKey", "status", "error", "selected", "setSelectedId", "useState", "isNewOption", "setIsNewOption", "inputRef", "useRef", "options", "useEffect", "undefined", "randomHue", "usedHues", "Set", "map", "option", "color", "unusedHues", "hues", "filter", "hue", "has", "length", "Math", "floor", "random", "lastThree", "slice", "availableHues", "handleAdd", "useCallback", "newId", "PublicKey", "truncate", "newOption", "id", "title", "handleDelete", "newOptions", "handleMove", "from", "to", "removed", "splice", "handleClick", "current", "handleTitleChange", "e", "o", "target", "value", "handleKeyDown", "ev", "key", "handleColorChange", "focus", "React", "Input", "Root", "validationValence", "FormFieldLabel", "div", "role", "List", "items", "isItem", "_item", "onMove", "className", "item", "Item", "classNames", "subtleHover", "aria-expanded", "ItemDragHandle", "disabled", "ItemTitle", "onClick", "Tag", "palette", "IconButton", "iconOnly", "variant", "ns", "osTranslations", "icon", "Label", "TextInput", "placeholder", "ref", "onChange", "onKeyDown", "HuePicker", "React", "useCallback", "Input", "TextField", "type", "readonly", "placeholder", "onValueChange", "onBlur", "props", "handleChange", "useCallback", "event", "target", "value", "React", "FormFieldWrapper", "Input", "TextInput", "noAutoFill", "disabled", "onChange", "React", "useCallback", "Input", "TextAreaField", "type", "readonly", "placeholder", "onValueChange", "onBlur", "props", "handleChange", "useCallback", "event", "target", "value", "React", "FormFieldWrapper", "Input", "TextArea", "rows", "disabled", "onChange", "React", "Input", "mx", "safeParseFloat", "gridCols", "TupleField", "binding", "type", "readonly", "label", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "values", "React", "Input", "Root", "validationValence", "FormFieldLabel", "div", "className", "mx", "length", "map", "prop", "TextInput", "key", "disabled", "value", "onChange", "event", "safeParseFloat", "target", "FieldEditor", "readonly", "projection", "field", "registry", "view", "onSave", "onCancel", "t", "useTranslation", "translationKey", "props", "setProps", "useState", "getFieldProjection", "id", "useEffect", "schemas", "setSchemas", "useAsyncEffect", "subscription", "query", "subscribe", "results", "fire", "run", "referenceSchema", "setReferenceSchema", "find", "schema", "typename", "fieldSchema", "setFieldSchema", "getFormatSchema", "format", "fieldMap", "useMemo", "React", "SelectField", "options", "FormatEnums", "filter", "value", "Format", "TypeFormat", "None", "map", "label", "getFormProperties", "ast", "sort", "a", "b", "name", "toString", "localeCompare", "p", "SelectOptionField", "propIsNotType", "useCallback", "prop", "handleValuesChanged", "_props", "prev", "newSchema", "type", "formatToType", "additionalProps", "formatToAdditionalPropertyAttributes", "handleValidate", "property", "getFields", "f", "path", "message", "handleSave", "Obj", "change", "setFieldProjection", "handleCancel", "requestAnimationFrame", "log", "warn", "Form", "Root", "key", "autoFocus", "values", "exclude", "onValuesChanged", "onValidate", "Content", "FieldSet", "Actions", "RegistryContext", "Array", "Match", "Option", "Schema", "React", "forwardRef", "useCallback", "useContext", "useImperativeHandle", "useMemo", "useState", "Filter", "Format", "Obj", "Query", "QueryAST", "EchoSchema", "isMutable", "toJsonSchema", "invariant", "useObject", "Callout", "IconButton", "Input", "useTranslation", "QueryForm", "List", "FieldSchema", "ProjectionModel", "VIEW_FIELD_LIMIT", "createEchoChangeCallback", "getTypenameFromQuery", "mx", "osTranslations", "subtleHover", "listGrid", "listItemGrid", "ViewEditor", "forwardRef", "classNames", "schema", "view", "mode", "registry", "readonly", "showHeading", "types", "tags", "onQueryChanged", "onDelete", "forwardedRef", "atomRegistry", "useContext", "RegistryContext", "schemaReadonly", "isMutable", "t", "useTranslation", "translationKey", "projectionModel", "useMemo", "jsonSchema", "EchoSchema", "toJsonSchema", "change", "createEchoChangeCallback", "undefined", "model", "ProjectionModel", "baseSchema", "useImperativeHandle", "expandedField", "setExpandedField", "useState", "queueTarget", "value", "query", "ast", "pipe", "when", "type", "options", "fromNullable", "queues", "flatMap", "head", "getOrUndefined", "orElse", "viewSchema", "base", "Struct", "Format", "URL", "annotations", "title", "QueryAST", "Query", "fields", "target", "optional", "String", "mutable", "viewValues", "getTypenameFromQuery", "fieldMap", "customFields", "handleAdd", "useCallback", "invariant", "field", "createFieldProjection", "id", "handleUpdate", "values", "requestAnimationFrame", "select", "Filter", "typename", "handleDelete", "fieldId", "React", "div", "role", "className", "mx", "Callout", "Root", "valence", "Title", "Form", "autoSave", "onSave", "FieldSet", "FormFieldLabel", "label", "asChild", "FieldList", "IconButton", "icon", "onClick", "disabled", "projection", "length", "VIEW_FIELD_LIMIT", "viewSnapshot", "useObject", "handleToggleField", "prevExpandedFieldId", "handleMove", "fromIndex", "toIndex", "Obj", "v", "moved", "splice", "handleClose", "handleHide", "hideFieldProjection", "handleShow", "property", "showFieldProjection", "List", "items", "isItem", "is", "FieldSchema", "getId", "onMove", "h3", "map", "hidden", "visible", "Item", "key", "item", "aria-expanded", "subtleHover", "ItemDragHandle", "ItemTitle", "path", "ItemButton", "data-testid", "autoHide", "getFields", "ItemDeleteButton", "iconOnly", "variant", "ns", "osTranslations", "FieldEditor", "getValue", "onValueChange", "handleChange", "Input", "QueryForm", "initialQuery", "onChange"]
3
+ "sources": ["../../../src/translations.ts", "../../../src/components/FieldEditor/FieldEditor.tsx", "../../../src/util/field.ts", "../../../src/util/formatting.ts", "../../../src/util/properties.ts", "../../../src/util/refs.ts", "../../../src/components/Form/fields/ArrayField.tsx", "../../../src/components/Form/Form.tsx", "../../../src/hooks/useFormHandler.ts", "../../../src/hooks/useKeyHandler.tsx", "../../../src/components/Form/FormFieldComponent.tsx", "../../../src/components/Form/FormFieldSet.tsx", "../../../src/components/Form/FormField.tsx", "../../../src/components/Form/fields/BooleanField.tsx", "../../../src/components/Form/fields/GeoPointField.tsx", "../../../src/components/Form/fields/MarkdownField.tsx", "../../../src/components/Form/fields/NumberField.tsx", "../../../src/components/Form/fields/RefField.tsx", "../../../src/components/ObjectPicker/ObjectPicker.tsx", "../../../src/components/Form/fields/SelectField.tsx", "../../../src/components/Form/fields/SelectOptionField.tsx", "../../../src/components/Form/fields/TextField.tsx", "../../../src/components/Form/fields/TextAreaField.tsx", "../../../src/components/Form/fields/TupleField.tsx", "../../../src/components/Settings/Settings.tsx", "../../../src/components/ViewEditor/ViewEditor.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = '@dxos/react-ui-form';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {\n 'fields label': 'Fields',\n 'hidden fields label': 'Hidden Fields',\n 'empty readonly ref field label': '(none)',\n\n // TODO(burdon): Standardize field/property.\n 'add property button label': 'Add property',\n 'field property label': 'Property',\n 'field property placeholder': 'Property name',\n 'field format label': 'Type',\n 'field path label': 'Field path',\n 'add field': 'Add field',\n 'delete field': 'Delete field',\n 'field limit reached': 'Maximum number of fields reached',\n 'boolean input true value': 'Yes',\n 'boolean input false value': 'No',\n 'show field label': 'Show field',\n 'hide field label': 'Hide field',\n 'delete field label': 'Delete field',\n 'ref field combobox input placeholder': 'Search…',\n 'ref field placeholder_one': 'Select…',\n 'ref field placeholder_other': 'Select items…',\n\n 'example placeholder': 'Example',\n 'latitude placeholder': 'Latitude (e.g., 40.7128)',\n 'longitude placeholder': 'Longitude (e.g., -74.0060)',\n\n 'cancel button label': 'Cancel',\n 'save button label': 'Save',\n\n // FormatEnum\n 'format boolean': 'Boolean',\n 'format currency': 'Currency',\n 'format date': 'Date',\n 'format date-time': 'DateTime',\n 'format did': 'DID',\n 'format duration': 'Duration',\n 'format dxn': 'DXN',\n 'format email': 'Email',\n 'format formula': 'Formula',\n 'format hostname': 'Hostname',\n 'format integer': 'Integer',\n 'format json': 'JSON',\n 'format lnglat': 'Geopoint',\n 'format markdown': 'Markdown',\n 'format percent': 'Percent',\n 'format ref': 'Reference',\n 'format regex': 'RegExp',\n 'format string': 'String',\n 'format single-select': 'Select',\n 'format multi-select': 'Multi-select',\n 'format text': 'Long text',\n 'format time': 'Time',\n 'format timestamp': 'Timestamp',\n 'format user': 'User',\n 'format number': 'Number',\n 'format uri': 'URI',\n 'format url': 'URL',\n 'format uuid': 'UUID',\n\n // GeoPointField.\n 'latitude label': 'Latitude',\n 'longitude label': 'Longitude',\n\n // SelectOptionsField.\n 'select option label': 'Label',\n 'select option label placeholder': 'Option label',\n 'select option color': 'Color',\n 'select option delete': 'Delete',\n 'select option add': 'Add option',\n\n // System schema message.\n 'system schema title': 'System type',\n 'system schema description': 'System type: cannot add or remove fields.',\n },\n },\n },\n] as const satisfies Resource[];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Obj, type SchemaRegistry, type View } from '@dxos/echo';\nimport { type EchoSchema, Format, FormatEnums, formatToType } from '@dxos/echo/internal';\nimport { type SchemaProperty } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport {\n type ProjectionModel,\n type PropertyType,\n formatToAdditionalPropertyAttributes,\n getFormatSchema,\n} from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { getFormProperties } from '../../util';\nimport { Form, type FormFieldMap, type FormRootProps, SelectField, SelectOptionField } from '../Form';\n\nexport type FieldEditorProps = {\n projection: ProjectionModel;\n field: View.FieldType;\n registry?: SchemaRegistry.SchemaRegistry;\n view?: Obj.Unknown;\n onSave: () => void;\n onCancel?: () => void;\n} & Pick<FormRootProps<any>, 'readonly'>;\n\n/**\n * Displays a Form representing the metadata for a given `Field` and `View`.\n */\nexport const FieldEditor = ({ readonly, projection, field, registry, view, onSave, onCancel }: FieldEditorProps) => {\n const { t } = useTranslation(translationKey);\n const [props, setProps] = useState<PropertyType>(projection.getFieldProjection(field.id).props);\n useEffect(() => setProps(projection.getFieldProjection(field.id).props), [field, projection]);\n\n const [schemas, setSchemas] = useState<EchoSchema[]>([]);\n useAsyncEffect(async () => {\n if (!registry) {\n return;\n }\n\n const subscription = registry.query().subscribe((query) => setSchemas(query.results), { fire: true });\n\n // TODO(dmaretskyi): This shouldn't be needed.\n const schemas = await registry.query().run();\n setSchemas(schemas);\n\n return () => subscription?.();\n }, [registry]);\n\n const [referenceSchema, setReferenceSchema] = useState<EchoSchema>();\n useEffect(() => {\n setReferenceSchema(schemas.find((schema) => schema.typename === props?.referenceSchema));\n }, [schemas, props?.referenceSchema]);\n\n // TODO(burdon): Need to wrap otherwise throws error:\n // Class constructor SchemaClass cannot be invoked without 'new'.\n const [{ fieldSchema }, setFieldSchema] = useState({ fieldSchema: getFormatSchema(props?.format) });\n\n const fieldMap = useMemo<FormFieldMap>(\n () => ({\n ['format' satisfies keyof PropertyType]: (props) => (\n <SelectField\n {...props}\n options={FormatEnums.filter((value) => value !== Format.TypeFormat.None).map((value) => ({\n value,\n label: t(`format ${value}`),\n }))}\n />\n ),\n ['referenceSchema' satisfies keyof PropertyType]: (props) => (\n <SelectField\n {...props}\n options={schemas.map((schema) => ({\n value: schema.typename,\n }))}\n />\n ),\n ['referencePath' satisfies keyof PropertyType]: (props) => (\n <SelectField\n {...props}\n options={\n referenceSchema\n ? getFormProperties(referenceSchema.ast)\n .sort((a, b) => a.name.toString().localeCompare(b.name.toString()))\n .map((p) => ({ value: p.name.toString() }))\n : []\n }\n />\n ),\n ['options' satisfies keyof PropertyType]: (props) => <SelectOptionField {...props} />,\n }),\n [t, schemas, referenceSchema],\n );\n\n const propIsNotType = useCallback((props: SchemaProperty[]) => props.filter((prop) => prop.name !== 'type'), []);\n\n const handleValuesChanged = useCallback<NonNullable<FormRootProps<PropertyType>['onValuesChanged']>>(\n (_props) => {\n // TODO(Zaymon): Workout why old and new format values are the same sometimes even when selecting novel format values.\n setFieldSchema((prev) => {\n const fieldSchema = getFormatSchema(_props.format);\n if (prev.fieldSchema === fieldSchema) {\n return prev;\n }\n return { fieldSchema };\n });\n\n setReferenceSchema((prev) => {\n if (_props.referenceSchema !== prev?.typename) {\n const newSchema = schemas.find((schema) => schema.typename === _props.referenceSchema);\n if (newSchema) {\n return newSchema;\n }\n }\n return prev;\n });\n\n setProps((props) => {\n const type = formatToType[_props.format as keyof typeof formatToType];\n const additionalProps =\n formatToAdditionalPropertyAttributes[_props.format as keyof typeof formatToAdditionalPropertyAttributes];\n if (props.type !== type) {\n return { ...props, ..._props, ...additionalProps, type } as PropertyType;\n }\n\n return _props as PropertyType;\n });\n },\n [schemas, props.format, props.referenceSchema],\n );\n\n const handleValidate = useCallback<NonNullable<FormRootProps<PropertyType>['onValidate']>>(\n ({ property }) => {\n if (property && projection.getFields().find((f) => f.path === property && f.path !== field.path)) {\n return [\n {\n path: 'property',\n message: `property is not unique: '${property}'`,\n },\n ];\n }\n },\n [projection.getFields(), field],\n );\n\n const handleSave = useCallback<NonNullable<FormRootProps<PropertyType>['onSave']>>(\n (props) => {\n if (view) {\n Obj.change(view, () => {\n projection.setFieldProjection({ field, props });\n });\n } else {\n projection.setFieldProjection({ field, props });\n }\n onSave();\n },\n [projection, field, view, onSave],\n );\n\n const handleCancel = useCallback<NonNullable<FormRootProps<PropertyType>['onCancel']>>(() => {\n onSave();\n // Need to defer to allow form to close.\n requestAnimationFrame(() => onCancel?.());\n }, [onSave]);\n\n if (!fieldSchema) {\n log.warn('invalid format', { props });\n return null;\n }\n\n return (\n <Form.Root<PropertyType>\n key={field.id}\n fieldMap={fieldMap}\n autoFocus\n readonly={readonly}\n schema={fieldSchema}\n values={props}\n exclude={propIsNotType}\n sort={['property', 'format']}\n onValuesChanged={handleValuesChanged}\n onValidate={handleValidate}\n onSave={handleSave}\n onCancel={handleCancel}\n >\n <Form.Content>\n <Form.FieldSet />\n <Form.Actions />\n </Form.Content>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Format, GeoLocation, TypeEnum } from '@dxos/echo/internal';\nimport { type ValidationError } from '@dxos/schema';\n\n/**\n * Parse value by field value type.\n * Used by Table, Sheet, etc.\n * Handles various data types including booleans, numbers, dates, and strings.\n * Returns undefined for empty or null inputs.\n */\nexport type ParseProps = {\n type?: TypeEnum;\n format?: Format.TypeFormat;\n value: any;\n};\n\nexport const parseValue = ({ type, format, value }: ParseProps) => {\n if (value === undefined || value === null || value === '') {\n return undefined;\n }\n\n const parseScalar = (type?: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean: {\n if (typeof value === 'string') {\n const lowercaseValue = value.toLowerCase();\n if (lowercaseValue === '0' || lowercaseValue === 'false') {\n return false;\n } else if (lowercaseValue === '1' || lowercaseValue === 'true') {\n return true;\n }\n }\n return Boolean(value);\n }\n\n case TypeEnum.Number: {\n const cleaned = typeof value === 'string' ? value.replace(/[^0-9.-]+/g, '') : value;\n const num = Number(cleaned);\n return Number.isNaN(num) ? null : num;\n }\n\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default: {\n return value;\n }\n }\n };\n\n if (!format) {\n return parseScalar(type);\n }\n\n switch (format) {\n case Format.TypeFormat.Boolean:\n return parseScalar(TypeEnum.Boolean);\n\n case Format.TypeFormat.Number:\n case Format.TypeFormat.Percent:\n case Format.TypeFormat.Currency:\n return parseScalar(TypeEnum.Number);\n\n case Format.TypeFormat.String:\n case Format.TypeFormat.Markdown: {\n return parseScalar(TypeEnum.String);\n }\n\n case Format.TypeFormat.Ref:\n throw new Error(`unexpected format: ${Format.TypeFormat.Ref}`);\n\n case Format.TypeFormat.DateTime:\n case Format.TypeFormat.Date:\n case Format.TypeFormat.Time:\n case Format.TypeFormat.Timestamp: {\n const date = new Date(value as string | number);\n return isNaN(date.getTime()) ? null : date;\n }\n\n case Format.TypeFormat.GeoPoint: {\n // Parse string in format \"lat,long\" to GeoPoint [longitude, latitude].\n if (typeof value === 'string') {\n // Only keep digits, decimal points, minus signs, and commas.\n const cleaned = value.replace(/[^0-9.,-]+/g, '');\n const parts = cleaned.split(',');\n if (parts.length === 2) {\n const lat = parseFloat(parts[0]);\n const long = parseFloat(parts[1]);\n if (!isNaN(lat) && !isNaN(long)) {\n return GeoLocation.toGeoPoint({ latitude: lat, longitude: long });\n }\n }\n }\n\n return [0, 0];\n }\n\n default: {\n return value;\n }\n }\n};\n\n// TODO(burdon): Type and format.\nexport type CellClassesForFieldTypeProps = {\n type?: TypeEnum;\n format?: Format.TypeFormat;\n};\n\nexport const cellClassesForFieldType = ({ type, format }: CellClassesForFieldTypeProps): string[] | undefined => {\n switch (format || type) {\n case Format.TypeFormat.Markdown:\n return undefined;\n case Format.TypeFormat.Time:\n case Format.TypeFormat.Timestamp:\n case Format.TypeFormat.DateTime:\n case Format.TypeFormat.Date:\n case Format.TypeFormat.Duration:\n return ['font-mono', 'text-right'];\n case Format.TypeFormat.Currency:\n return ['text-right'];\n case Format.TypeFormat.JSON:\n case Format.TypeFormat.DID:\n return ['font-mono'];\n case TypeEnum.Number:\n case TypeEnum.Boolean:\n return ['text-right', 'font-mono'];\n case TypeEnum.String:\n return undefined;\n case TypeEnum.Ref:\n return undefined;\n default:\n return undefined;\n }\n};\n\n// TODO(ZaymonFC): How to do this with translations?\nexport const pathNotUniqueError = (path: string): ValidationError => ({\n path: 'path',\n message: `'${path}' is already present`,\n});\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { format as formatDate } from 'date-fns/format';\n\nimport { Format, GeoLocation, TypeEnum } from '@dxos/echo/internal';\n\ntype ValueFormatProps = {\n type: TypeEnum;\n format?: Format.TypeFormat | undefined;\n value: any;\n locale?: string | undefined;\n};\n\n/**\n * Format value by type.\n * Used by Table, Sheet, etc.\n */\n// TODO(burdon): Move to react-ui-form.\n// TODO(burdon): Formatting is different from kind format (e.g., percent is not a data format).\nexport const formatForDisplay = ({ type, format, value, locale = undefined }: ValueFormatProps): string => {\n const formatScalar = (type: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean:\n return (value as boolean).toLocaleString().toUpperCase();\n case TypeEnum.Number:\n return value.toLocaleString(locale);\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default: {\n return String(value);\n }\n }\n };\n\n if (!format) {\n return formatScalar(type);\n }\n\n switch (format) {\n case Format.TypeFormat.Boolean: {\n return formatScalar(TypeEnum.Boolean);\n }\n case Format.TypeFormat.Number: {\n return formatScalar(TypeEnum.Number);\n }\n case Format.TypeFormat.String:\n case Format.TypeFormat.Ref: {\n return formatScalar(TypeEnum.String);\n }\n case Format.TypeFormat.Percent: {\n return `${(value as number) * 100}%`;\n }\n case Format.TypeFormat.Currency: {\n // TODO(burdon): Get from property annotation.\n return (value as number).toLocaleString(locale, {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n });\n }\n case Format.TypeFormat.Date: {\n try {\n return formatDate(new Date(value as number), 'yyyy-MM-dd');\n } catch (error) {\n return 'Invalid Date';\n }\n }\n case Format.TypeFormat.Time: {\n try {\n return formatDate(new Date(value as number), 'HH:mm:ss');\n } catch (error) {\n return 'Invalid Time';\n }\n }\n case Format.TypeFormat.DateTime: {\n try {\n return formatDate(new Date(value as number), 'yyyy-MM-dd HH:mm:ss');\n } catch (error) {\n return 'Invalid DateTime';\n }\n }\n case Format.TypeFormat.GeoPoint: {\n if (value === null || value === undefined) {\n return '';\n }\n\n // For GeoPoint format [longitude, latitude].\n if (Array.isArray(value) && value.length >= 2 && value.every(Number.isFinite)) {\n const { latitude, longitude } = GeoLocation.fromGeoPoint(value as [number, number]);\n return `${latitude},${longitude}`;\n }\n\n return String(value);\n }\n default: {\n if (value === null || value === 'undefined') {\n return '';\n }\n return String(value);\n }\n }\n};\n\nexport const formatForEditing = ({ type, format, value, locale = undefined }: ValueFormatProps): string => {\n const formatScalar = (type: TypeEnum) => {\n switch (type) {\n case TypeEnum.Boolean:\n case TypeEnum.Number:\n case TypeEnum.String:\n case TypeEnum.Ref:\n return String(value);\n\n default:\n return String(value);\n }\n };\n\n if (!format) {\n return formatScalar(type);\n }\n\n switch (format) {\n case Format.TypeFormat.Boolean:\n case Format.TypeFormat.Number:\n case Format.TypeFormat.String:\n case Format.TypeFormat.Ref: {\n return formatScalar(type);\n }\n case Format.TypeFormat.Percent: {\n return String(value * 100);\n }\n case Format.TypeFormat.Currency: {\n return String(value);\n }\n case Format.TypeFormat.DateTime: {\n const date = new Date(value as number);\n return date.toISOString();\n }\n case Format.TypeFormat.Date: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[0];\n }\n case Format.TypeFormat.Time: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[1].split('.')[0];\n }\n case Format.TypeFormat.GeoPoint: {\n // Handle null or undefined\n if (value === null || value === undefined) {\n return '';\n }\n\n // For GeoPoint format [longitude, latitude].\n if (Array.isArray(value) && value.length >= 2 && value.every(Number.isFinite)) {\n const { latitude, longitude } = GeoLocation.fromGeoPoint(value as [number, number]);\n return `${latitude},${longitude}`;\n }\n\n return String(value);\n }\n\n default: {\n return String(value);\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport type * as SchemaAST from 'effect/SchemaAST';\n\nimport { Annotation } from '@dxos/echo';\nimport { type SchemaProperty, getProperties } from '@dxos/effect';\n\n/**\n * Get the property types of an AST and filter out properties that are not form inputs.\n */\nexport const getFormProperties = (ast: SchemaAST.AST): SchemaProperty[] => {\n return getProperties(ast).filter((prop) =>\n Annotation.FormInputAnnotation.getFromAst(prop.type).pipe(Option.getOrElse(() => true)),\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as SchemaAST from 'effect/SchemaAST';\n\nimport { Ref } from '@dxos/echo';\nimport { getArrayElementType, isArrayType } from '@dxos/effect';\n\ntype RefProps = {\n ast: SchemaAST.AST;\n isArray: boolean;\n};\n\nexport const getRefProps = (ast: SchemaAST.AST): RefProps | undefined => {\n // Array of references.\n if (isArrayType(ast)) {\n const elementType = getArrayElementType(ast);\n if (elementType) {\n if (Ref.isRefType(elementType)) {\n return { ast: elementType, isArray: true };\n }\n }\n }\n\n // Direct reference.\n if (Ref.isRefType(ast)) {\n return { ast, isArray: false };\n }\n\n return undefined;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport React, { Fragment, useCallback } from 'react';\n\nimport { findNode, getArrayElementType, getDiscriminatedType, isDiscriminatedUnion, isNestedType } from '@dxos/effect';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { translationKey } from '../../../translations';\nimport { getFormProperties } from '../../../util';\nimport { useFormValues } from '../Form';\nimport { FormField, type FormFieldProps } from '../FormField';\nimport { FormFieldLabel, type FormFieldStateProps } from '../FormFieldComponent';\n\nexport type ArrayFieldProps = {\n label: string;\n fieldProps: FormFieldStateProps;\n} & FormFieldProps;\n\nexport const ArrayField = ({\n type,\n path,\n label,\n readonly,\n layout,\n fieldProps: inputProps,\n ...props\n}: ArrayFieldProps) => {\n const { t } = useTranslation(translationKey);\n const elementType = getArrayElementType(type);\n const { onValueChange } = inputProps;\n const values = useFormValues(ArrayField.displayName, path, () => []);\n\n const getDefaultObjectValue = (typeNode: SchemaAST.AST): any => {\n const baseNode = findNode(typeNode, isDiscriminatedUnion);\n const typeLiteral = baseNode ? getDiscriminatedType(baseNode, {}) : findNode(typeNode, SchemaAST.isTypeLiteral);\n if (!typeLiteral) {\n return {};\n }\n\n return Object.fromEntries(\n getFormProperties(typeLiteral).map((prop) => {\n const defaultValue = SchemaAST.getDefaultAnnotation(prop.type).pipe((annotation) =>\n Option.getOrUndefined(annotation),\n );\n return [prop.name, defaultValue];\n }),\n );\n };\n\n const handleAdd = useCallback(() => {\n const defaultValue =\n isNestedType(type) && elementType ? getDefaultObjectValue(elementType) : getDefaultValue(elementType);\n values && onValueChange(type, [...values, defaultValue]);\n }, [onValueChange, type, elementType, values]);\n\n const handleDelete = useCallback(\n (idx: number) => {\n onValueChange(\n type,\n values?.filter((_, i) => i !== idx),\n );\n },\n [onValueChange, type, values],\n );\n\n if (!elementType || ((readonly || layout === 'static') && values && values.length < 1)) {\n return null;\n }\n\n return (\n <>\n {(layout !== 'static' || (values && values.length > 0)) && (\n <FormFieldLabel readonly={readonly} label={label} asChild />\n )}\n\n <div role='none' className='flex flex-col gap-2'>\n {values?.map((_, index) => {\n return (\n <div role='none' key={index} className='grid grid-cols-[1fr_min-content] gap-2 last:mb-3'>\n <FormField\n autoFocus={index === values.length - 1}\n type={elementType}\n path={[...(path ?? []), index]}\n readonly={readonly || layout === 'static'}\n layout='inline'\n {...props}\n />\n\n {!readonly && layout !== 'static' && (\n <div role='none' className='flex flex-col h-full justify-end'>\n {/* NOTE: Aligns with center of last field if multi-field object. */}\n <div role='none' className='flex items-center h-[2rem]'>\n <IconButton\n icon='ph--x--regular'\n iconOnly\n label={t('button remove')}\n onClick={() => handleDelete(index)}\n classNames='self-center'\n />\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n\n {/* TODO(burdon): Get label from schema. */}\n {!readonly && layout !== 'static' && (\n <IconButton classNames='flex w-full' icon='ph--plus--regular' label={t('add field')} onClick={handleAdd} />\n )}\n </>\n );\n};\n\nArrayField.displayName = 'Form.ArrayField';\n\n/**\n * Returns the default empty value for a given AST.\n * Used for initializing new array values etc.\n */\n// TODO(wittjosiah): Factor out?\nexport const getDefaultValue = (ast?: SchemaAST.AST): any => {\n switch (ast?._tag) {\n case 'StringKeyword': {\n return '';\n }\n case 'NumberKeyword': {\n return 0;\n }\n case 'BooleanKeyword': {\n return false;\n }\n case 'Suspend': {\n return getDefaultValue(ast.f());\n }\n default: {\n if (ast && isNestedType(ast)) {\n return {};\n } else {\n throw new Error(`Unsupported type: ${ast?._tag}`);\n }\n }\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport React, { type PropsWithChildren, useEffect, useMemo, useRef } from 'react';\n\nimport { type AnyProperties } from '@dxos/echo/internal';\nimport { createJsonPath, getValue as getValue$ } from '@dxos/effect';\nimport {\n IconButton,\n type IconButtonProps,\n ScrollArea,\n type ScrollAreaRootProps,\n type ThemedClassName,\n useTranslation,\n} from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport {\n type FormHandler,\n type FormHandlerProps,\n type FormUpdateMeta,\n useFormHandler,\n useKeyHandler,\n} from '../../hooks';\nimport { translationKey } from '../../translations';\n\nimport { FormFieldLabel, type FormFieldLabelProps, type FormFieldStateProps } from './FormFieldComponent';\nimport {\n FormFieldSet as NaturalFormFieldSet,\n type FormFieldSetProps as NaturalFormFieldSetProps,\n} from './FormFieldSet';\n\n// New features/polish\n// [x] Unify readonly/inline modes.\n// [x] Refs\n// [x] Single-select (fix popover)\n// [x] Multi-select (array)\n// [ ] auto save doesn't work for combobox + select due to only firing on blur (workaround is to use onValuesChanged).\n// [ ] Don't call save/autoSave if value hasn't changed.\n// [ ] Fix onCancel (restore values).\n// [ ] Fix useSchema Type.AnyObj cast.\n// [ ] TableCellEditor (handleEnter/ModalController).\n// [ ] Use FormFieldWrapper uniformly\n// [ ] Inline tables.\n// [ ] Defer query until popover.\n// [ ] Omit id from sub properties.\n\n// TODO(burdon): Move to @dxos/schema (re-export here).\nexport type ExcludeId<S extends Schema.Schema.AnyNoContext> = Omit<Schema.Schema.Type<S>, 'id'>;\n\n// TODO(burdon): Move to @dxos/schema (re-export here).\nexport const omitId = <S extends Schema.Schema.AnyNoContext>(schema: S): Schema.Schema<ExcludeId<S>, ExcludeId<S>> =>\n schema.pipe(Schema.omit('id')) as any;\n\n//\n// Context\n//\n\ntype FormContextValue<T extends AnyProperties = any> = {\n /**\n * Form handler.\n */\n form: FormHandler<T>;\n\n /**\n * Show debug info.\n */\n debug?: boolean;\n\n /**\n * Testing.\n */\n testId?: string;\n} & Pick<NaturalFormFieldSetProps<T>, 'readonly' | 'layout' | 'fieldMap' | 'fieldProvider' | 'projection'>;\n\nconst [FormContextProvider, useFormContext] = createContext<FormContextValue>('Form');\n\n/**\n * Get the current form values.\n */\nconst useFormValues: {\n <T extends AnyProperties>(componentName: string, path?: (string | number)[]): T;\n <T extends AnyProperties>(\n componentName: string,\n path: (string | number)[] | undefined,\n defaultValue: () => T,\n ): T | undefined;\n} = (componentName: string, path?: (string | number)[], defaultValue?: () => any) => {\n const stablePath = useMemo(() => path ?? [], [path ? path.join('.') : undefined]);\n const jsonPath = createJsonPath(stablePath);\n const {\n form: { values, onValueChange },\n } = useFormContext(componentName);\n\n const value = getValue$(values, jsonPath);\n\n // Apply default value once when the field has no value. lastAppliedPathRef prevents\n // re-applying on every render (e.g. when defaultValue() returns null) and ensures\n // we apply per path when the hook is used for different fields.\n const lastAppliedPathRef = useRef<string | null>(null);\n useEffect(() => {\n if (value == null && defaultValue && lastAppliedPathRef.current !== jsonPath) {\n lastAppliedPathRef.current = jsonPath;\n onValueChange(stablePath, SchemaAST.stringKeyword, defaultValue());\n }\n }, [value, defaultValue, onValueChange, stablePath, jsonPath]);\n\n return value;\n};\n\n/**\n * Get the state props for the given field.\n */\nconst useFormFieldState = (componentName: string, path: (string | number)[] = []): FormFieldStateProps => {\n const stablePath = useMemo(() => path, [Array.isArray(path) ? path.join('.') : path]);\n const {\n form: { getStatus, getValue, onBlur, onValueChange },\n } = useFormContext(componentName);\n\n return useMemo(\n () => ({\n getStatus: () => getStatus(stablePath),\n getValue: () => getValue(stablePath),\n onBlur: () => onBlur(stablePath),\n onValueChange: (ast: SchemaAST.AST, value: any) => onValueChange(stablePath, ast, value),\n }),\n [getStatus, getValue, onBlur, onValueChange, stablePath],\n );\n};\n\n//\n// Root\n//\n\ntype FormRootProps<T extends AnyProperties = AnyProperties> = PropsWithChildren<\n {\n /**\n * Called when the form is submitted and passes validation.\n */\n onSave?: (values: T, meta: FormUpdateMeta<T>) => void;\n\n /**\n * Called when the form is canceled to abandon/undo any pending changes.\n */\n onCancel?: () => void;\n } & Omit<FormContextValue<T>, 'form'> &\n Pick<FormHandlerProps<T>, 'schema' | 'autoSave' | 'values' | 'defaultValues' | 'onValidate' | 'onValuesChanged'> &\n Omit<NaturalFormFieldSetProps<T>, 'schema' | 'path'>\n>;\n\nconst FormRoot = <T extends AnyProperties = AnyProperties>({\n children,\n schema,\n values,\n onSave,\n onCancel,\n ...props\n}: FormRootProps<T>) => {\n const form = useFormHandler({ schema, values, onSave, onCancel, ...props });\n\n return (\n <FormContextProvider form={form} {...props}>\n {children}\n </FormContextProvider>\n );\n};\n\nFormRoot.displayName = 'Form.Root';\n\n//\n// Viewport\n//\n\nconst FORM_VIEWPORT_NAME = 'Form.Viewport';\n\ntype FormViewportProps = PropsWithChildren<ScrollAreaRootProps>;\n\nconst FormViewport = ({\n children,\n classNames,\n margin = true,\n padding = true,\n thin = true,\n ...props\n}: FormViewportProps) => {\n return (\n <ScrollArea.Root\n orientation='vertical'\n classNames={classNames}\n margin={margin}\n padding={padding}\n thin={thin}\n {...props}\n >\n <ScrollArea.Viewport>{children}</ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n};\n\nFormViewport.displayName = FORM_VIEWPORT_NAME;\n\n//\n// Content\n//\n\nconst FORM_CONTENT_NAME = 'Form.Content';\n\ntype FormContentProps = ThemedClassName<PropsWithChildren<{}>>;\n\nconst FormContent = ({ classNames, children }: FormContentProps) => {\n const { form, testId } = useFormContext(FORM_CONTENT_NAME);\n const ref = useRef<HTMLDivElement>(null);\n useKeyHandler(ref.current, form);\n\n return (\n <div ref={ref} role='form' className={mx('w-full flex flex-col gap-form-padding', classNames)} data-testid={testId}>\n {children}\n </div>\n );\n};\n\nFormContent.displayName = FORM_CONTENT_NAME;\n\n//\n// FieldSet\n//\n\nconst FORM_FIELDSET_NAME = 'Form.FieldSet';\n\ntype FormFieldSetProps = ThemedClassName<NaturalFormFieldSetProps<any>>;\n\nconst FormFieldSet = (props: FormFieldSetProps) => {\n const { form, ...contextProps } = useFormContext(FORM_FIELDSET_NAME);\n\n return <NaturalFormFieldSet schema={form.schema} {...contextProps} {...props} />;\n};\n\nFormFieldSet.displayName = FORM_FIELDSET_NAME;\n\n//\n// Actions\n//\n\nconst FORM_ACTIONS_NAME = 'Form.Actions';\n\ntype FormActionsProps = ThemedClassName<{}>;\n\nconst FormActions = ({ classNames }: FormActionsProps) => {\n const { t } = useTranslation(translationKey);\n const {\n form: { canSave, onSave, onCancel },\n readonly,\n layout,\n } = useFormContext(FORM_ACTIONS_NAME);\n\n if (readonly || layout === 'static') {\n return null;\n }\n\n // TODO(burdon): Currently onCancel is a no-op; implement \"revert values\".\n // Deprecate FormSubmit ans use FormActions without Cancel button if no callback is supplied.\n\n return (\n <div role='none' className={mx('grid grid-flow-col gap-2 auto-cols-fr py-form-padding', classNames)}>\n {onCancel && (\n <IconButton\n icon='ph--x--regular'\n iconEnd\n label={t('cancel button label')}\n onClick={onCancel}\n data-testid='cancel-button'\n />\n )}\n {onSave && (\n <IconButton\n type='submit'\n variant='primary'\n disabled={!canSave}\n icon='ph--check--regular'\n iconEnd\n label={t('save button label')}\n onClick={onSave}\n data-testid='save-button'\n />\n )}\n </div>\n );\n};\n\nFormActions.displayName = FORM_ACTIONS_NAME;\n\n//\n// Submit\n//\n\nconst FORM_SUBMIT_NAME = 'Form.Submit';\n\ntype FormSubmitProps = ThemedClassName<Partial<Pick<IconButtonProps, 'icon' | 'label' | 'disabled'>>>;\n\nconst FormSubmit = ({ classNames, label, icon, disabled }: FormSubmitProps) => {\n const { t } = useTranslation(translationKey);\n const {\n form: { canSave, onSave },\n readonly,\n layout,\n } = useFormContext(FORM_SUBMIT_NAME);\n\n if (readonly || layout === 'static') {\n return null;\n }\n\n return (\n <div role='none' className={mx('flex w-full pt-form-padding', classNames)}>\n <IconButton\n classNames='w-full'\n type='submit'\n variant='primary'\n disabled={disabled ?? !canSave}\n icon={icon ?? 'ph--check--regular'}\n label={label ?? t('save button label')}\n onClick={onSave}\n data-testid='save-button'\n />\n </div>\n );\n};\n\nFormSubmit.displayName = FORM_SUBMIT_NAME;\n\n//\n// Form\n// https://www.radix-ui.com/primitives/docs/guides/composition\n//\n\nexport const Form = {\n Root: FormRoot,\n Viewport: FormViewport,\n Content: FormContent,\n FieldSet: FormFieldSet,\n Label: FormFieldLabel,\n Actions: FormActions,\n Submit: FormSubmit,\n};\n\nexport { useFormContext, useFormValues, useFormFieldState };\n\nexport type {\n FormRootProps,\n FormViewportProps,\n FormContentProps,\n FormFieldSetProps,\n FormFieldLabelProps,\n FormActionsProps,\n FormSubmitProps,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport type * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type AnyProperties } from '@dxos/echo/internal';\nimport { type JsonPath, createJsonPath, fromEffectValidationPath, getValue as getValue$ } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { useDefaultValue } from '@dxos/react-ui';\nimport { type ValidationError, validateSchema } from '@dxos/schema';\nimport { type MaybePromise } from '@dxos/util';\n\nexport type FormFieldStatus = {\n status?: 'error';\n error?: string;\n};\n\n/**\n * Form properties.\n */\nexport interface FormHandlerProps<T extends AnyProperties> {\n /**\n * Effect schema (Type literal).\n */\n schema?: Schema.Schema<T, any>;\n\n /**\n * Values for the form if controlled.\n */\n values?: Partial<T>;\n\n /**\n * Default values for the form which will be used if values is not provided.\n */\n defaultValues?: Partial<T>;\n\n /**\n * Auto-save the form when the values change.\n */\n autoSave?: boolean;\n\n /**\n * Callback for value changes. Note: This is called even when values are invalid.\n * Sometimes the parent component may want to know about changes even if the form is\n * in an invalid state.\n */\n onValuesChanged?: (values: Partial<T>, meta: FormUpdateMeta<T>) => void;\n\n /**\n * Custom validation function that runs only after schema validation passes.\n * Use this for complex validation logic that can't be expressed in the schema.\n * @returns Array of validation errors, or undefined if validation passes\n */\n onValidate?: (values: T) => ValidationError[] | undefined;\n\n /**\n * Called when the form is submitted and passes validation.\n */\n onSave?: (values: T, meta: FormUpdateMeta<T>) => MaybePromise<void>;\n\n /**\n * Called when the form is canceled.\n */\n onCancel?: () => void;\n}\n\nexport type FormUpdateMeta<T extends AnyProperties> = {\n changed: FormHandler<T>['changed'];\n isValid: boolean;\n};\n\n/**\n * Form handler properties and methods.\n */\nexport type FormHandler<T extends AnyProperties> = Pick<FormHandlerProps<T>, 'schema' | 'autoSave'> & {\n /** Initial values (which may not pass validation). */\n values: Partial<T>;\n\n /** Map of changed fields. */\n changed: Record<JsonPath, boolean>;\n // TODO(burdon): How is this different from above?\n touched: Record<JsonPath, boolean>;\n\n /** Map of error strings. */\n errors: Record<JsonPath, string>;\n\n /** Whether the form can be saved (i.e., data is valid). */\n isValid: boolean;\n // TODO(burdon): Why is this needed separately from isValid?\n canSave: boolean;\n\n onSave: () => void;\n onCancel: () => void;\n\n //\n // Form field state management\n //\n\n getStatus: (path: string | (string | number)[]) => FormFieldStatus;\n getValue: <V>(path: (string | number)[]) => V | undefined;\n onBlur: (path: (string | number)[]) => void;\n onValueChange: <V>(path: (string | number)[], type: SchemaAST.AST, value: V) => void;\n};\n\n/**\n * Creates a hook for managing form state, including values, validation, and submission.\n * Deeply integrated with `@dxos/schema` for schema-based validation.\n */\nexport const useFormHandler = <T extends AnyProperties>({\n schema,\n autoSave,\n values: valuesProp,\n defaultValues: defaultValuesProp,\n onValuesChanged,\n onValidate,\n onSave,\n onCancel,\n ...props\n}: FormHandlerProps<T>): FormHandler<T> => {\n const [changed, setChanged] = useState<Record<JsonPath, boolean>>({});\n const [touched, setTouched] = useState<Record<JsonPath, boolean>>({});\n const [errors, setErrors] = useState<Record<JsonPath, string>>({});\n const [saving, setSaving] = useState(false);\n const defaultValues = useDefaultValue<Partial<T>>(defaultValuesProp, () => ({}));\n const [values$, setValues] = useControllableState<Partial<T>>({\n prop: valuesProp,\n defaultProp: defaultValues,\n onChange: () => {\n // Only reset when controlled: parent passed new values.\n // Uncontrolled updates come from setValues in onValueChange.\n if (valuesProp !== undefined) {\n setValues(valuesProp ?? defaultValues);\n setChanged({});\n setTouched({});\n setErrors({});\n setSaving(false);\n }\n },\n });\n // TODO(wittjosiah): Upgrade @radix-ui/react-use-controllable-state.\n const values = values$ as Partial<T>;\n\n // Validate.\n const validate = useCallback(\n (values: Partial<T>): values is T => {\n if (!schema) {\n return false;\n }\n\n let errors: ValidationError[] = validateSchema(schema, values) ?? [];\n log('validate', { values, errors });\n if (errors.length === 0 && onValidate) {\n const validatedValues = values as T;\n errors = onValidate(validatedValues) ?? [];\n }\n\n setErrors(flatMap(errors));\n const valid = errors.length === 0;\n return valid;\n },\n [schema, onValidate],\n );\n\n // Validate on schema change.\n const [schemaChanged, setSchemaChanged] = useState(false);\n useEffect(() => setSchemaChanged(true), [schema]);\n useEffect(() => {\n if (schemaChanged) {\n validate(values);\n setSchemaChanged(false);\n }\n }, [validate, values, schemaChanged]);\n\n const isValid = useMemo(() => {\n return Object.keys(errors).length === 0;\n }, [errors]);\n\n /**\n * NOTE: We can submit if there is no touched field that has an error.\n * If there's a validation message visible in the form, submit should be disabled.\n */\n const canSave = useMemo(\n () =>\n !saving &&\n // Check if any error paths that are touched have errors.\n !Object.entries(touched).some(\n ([path, isTouched]) =>\n isTouched &&\n Object.keys(errors).some(\n (errorPath) => errorPath === path || errorPath.startsWith(`${path}.`) || errorPath.startsWith(`${path}[`),\n ),\n ),\n [touched, errors, saving],\n );\n\n const handleSave = useCallback(async () => {\n if (validate(values)) {\n setSaving(true);\n try {\n await onSave?.(values, { changed, isValid });\n } finally {\n setSaving(false);\n }\n }\n }, [values, validate, onSave, changed, isValid]);\n\n const handleCancel = useCallback(() => {\n onCancel?.();\n }, [onCancel]);\n\n //\n // Fields.\n //\n\n const getStatus = useCallback<FormHandler<T>['getStatus']>(\n (path) => {\n const jsonPath = Array.isArray(path) ? createJsonPath(path) : path;\n const [_, error] =\n Object.entries(errors).find(\n ([errorPath]) =>\n errorPath === jsonPath || errorPath.startsWith(`${jsonPath}.`) || errorPath.startsWith(`${jsonPath}[`),\n ) ?? [];\n\n // Only show errors for touched fields.\n const isTouched = touched[jsonPath as JsonPath];\n if (!isTouched) {\n return {\n status: undefined,\n error: undefined,\n };\n }\n\n return {\n status: error ? 'error' : undefined,\n error: error ? (error ?? undefined) : undefined,\n };\n },\n [errors, touched],\n );\n\n const getValue = useCallback<FormHandler<T>['getValue']>(\n (path) => {\n return getValue$(values, createJsonPath(path));\n },\n [values],\n );\n\n const onValueChange = useCallback<FormHandler<T>['onValueChange']>(\n (path, type, value) => {\n log('onValueChange', { path, value });\n\n const jsonPath = createJsonPath(path);\n const pathArray = path;\n let parsedValue = value as any;\n try {\n if (type._tag === 'NumberKeyword') {\n parsedValue = parseFloat(value as string) || 0;\n }\n } catch (err) {\n log.catch(err);\n parsedValue = undefined;\n }\n\n // Create merged values for validation and callback. Form never mutates; parent applies via onValuesChanged.\n const newValues = mergeAtPath(values, pathArray as (string | number)[], parsedValue) as Partial<T>;\n\n // TODO(burdon): Check value has changed from original.\n const newChanged = { [jsonPath]: true };\n setChanged((prev) => ({ ...prev, ...newChanged }));\n\n // Validate.\n const isValid = validate(newValues);\n\n // Notify parent; parent is responsible for applying the change.\n onValuesChanged?.(newValues, { isValid, changed: newChanged });\n\n // For uncontrolled mode, update internal state. Controlled mode relies on parent to pass new values.\n if (valuesProp === undefined) {\n setValues(newValues);\n }\n },\n [values, validate, onValuesChanged, valuesProp],\n );\n\n const onBlur = useCallback(\n async (path: (string | number)[]) => {\n const jsonPath = createJsonPath(path);\n\n // TODO(burdon): Check value has changed from original.\n setTouched((touched) => ({ ...touched, [jsonPath]: true }));\n const isValid = validate(values);\n\n // Auto-save when a field is blurred and is valid.\n if (Object.keys(changed).length > 0 && isValid && autoSave) {\n await onSave?.(values as T, { changed, isValid });\n }\n },\n [validate, values, changed, autoSave, onSave],\n );\n\n return useMemo<FormHandler<T>>(\n () => ({\n // State.\n schema,\n values,\n errors,\n touched,\n changed,\n isValid,\n canSave,\n autoSave,\n\n // Actions.\n onSave: handleSave,\n onCancel: handleCancel,\n\n // Field utils.\n getStatus,\n getValue,\n onBlur,\n onValueChange,\n\n ...props,\n }),\n [\n schema,\n values,\n errors,\n touched,\n changed,\n canSave,\n isValid,\n getStatus,\n getValue,\n onBlur,\n onValueChange,\n onSave,\n onCancel,\n ],\n );\n};\n\n/**\n * Creates a new object with value at path. Does not mutate source.\n * Preserves arrays when path segments are numeric indices.\n */\nconst mergeAtPath = (obj: any, path: readonly (string | number)[], value: any): any => {\n if (path.length === 0) {\n return value;\n }\n\n const [head, ...rest] = path;\n const child = rest.length === 0 ? value : mergeAtPath(obj?.[head], rest, value);\n\n if (Array.isArray(obj)) {\n const copy = [...obj];\n copy[head as number] = child;\n return copy;\n }\n\n return { ...obj, [head]: child };\n};\n\nconst flatMap = (errors: ValidationError[]) => {\n return errors.reduce(\n (result, { path, message }) => {\n // Convert the validation error path format to our JsonPath format.\n const jsonPath = fromEffectValidationPath(path);\n if (!(jsonPath in result)) {\n result[jsonPath] = message;\n }\n return result;\n },\n {} as Record<JsonPath, string>,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect } from 'react';\n\nimport { addEventListener } from '@dxos/async';\n\nimport { type FormHandler } from './useFormHandler';\n\n/**\n * Key handler.\n */\nexport const useKeyHandler = (formElement: HTMLDivElement | null, form: FormHandler<any>) => {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n switch (event.key) {\n case 'Enter': {\n if (event.metaKey && form.canSave) {\n form.onSave();\n }\n break;\n }\n }\n },\n [form.isValid, form.canSave, form.onSave, form.autoSave],\n );\n\n useEffect(() => {\n if (!formElement) {\n return;\n }\n\n // TODO(burdon): Move to @dxos/dom-util.\n return addEventListener(formElement, 'keydown', handleKeyDown);\n }, [formElement, handleKeyDown]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport React, {\n Component,\n type FC,\n type FocusEvent,\n type PropsWithChildren,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { type Format } from '@dxos/echo/internal';\nimport { Icon, Input, Tooltip } from '@dxos/react-ui';\nimport { inputTextLabel } from '@dxos/ui-theme';\n\nimport { type FormFieldStatus } from '../../hooks';\n\n/**\n * Dynamic props passed to input components.\n */\nexport type FormFieldStateProps<T = any> = {\n getStatus: () => FormFieldStatus;\n getValue: () => T | undefined;\n onBlur: (event: FocusEvent<HTMLElement>) => void;\n onValueChange: (type: SchemaAST.AST, value: T) => void;\n};\n\n/**\n * Presentation mode.\n * - full: Show label, control, and status.\n * - compact: Show label and control.\n * - inline: Control only.\n * - static: Plain DOM; omit all undefined values.\n */\n// TODO(burdon): 'inline' should be orthogonal to the layout (e.g., array of inline static).\nexport type Presentation = 'full' | 'compact' | 'inline' | 'static';\n\n/**\n * Props passed to input components.\n */\nexport type FormFieldComponentProps<T = any> = {\n type: SchemaAST.AST;\n format?: Format.TypeFormat;\n readonly?: boolean;\n label: string;\n placeholder?: string;\n autoFocus?: boolean;\n layout?: Presentation;\n} & FormFieldStateProps<T>;\n\n/**\n * Form field component.\n */\nexport type FormFieldComponent = FC<FormFieldComponentProps>;\n\nexport type FormFieldMap = Record<string, FormFieldComponent>;\n\nexport type FormFieldProvider = (props: {\n prop: string; // TODO(burdon): Path?\n schema: Schema.Schema<any>;\n fieldProps: FormFieldComponentProps;\n}) => ReactElement | undefined;\n\n//\n// FormFieldLabel\n//\n\nexport type FormFieldLabelProps = {\n asChild?: boolean;\n error?: string;\n} & Pick<FormFieldComponentProps, 'label' | 'readonly'>;\n\nexport const FormFieldLabel = ({ label, error, readonly, asChild }: FormFieldLabelProps) => {\n const Label = readonly || asChild ? 'span' : Input.Label;\n return (\n <div role='none' className='flex items-center justify-between'>\n <Label className={inputTextLabel}>{label}</Label>\n {error && (\n <Tooltip.Trigger asChild content={error} side='bottom'>\n <Icon icon='ph--warning--regular' size={4} classNames='text-error-text' />\n </Tooltip.Trigger>\n )}\n </div>\n );\n};\n\nFormFieldLabel.displayName = 'Form.FieldLabel';\n\n//\n// FormFieldWrapper\n//\n\nexport type FormFieldWrapperProps<T = any> = Pick<\n FormFieldComponentProps,\n 'readonly' | 'label' | 'layout' | 'getStatus' | 'getValue'\n> & {\n children?: (props: { value: T }) => ReactNode;\n};\n\nexport const FormFieldWrapper = <T,>(props: FormFieldWrapperProps<T>) => {\n const { children, readonly, layout, label, getStatus, getValue } = props;\n const { status, error } = getStatus();\n\n const value = getValue();\n if (layout === 'static' && value == null) {\n return null;\n }\n\n const str = String(value ?? '');\n\n return (\n <div role='none' className='contents'>\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} />}\n {layout === 'static' ? <p>{str}</p> : children ? children({ value }) : null}\n {layout === 'full' && (\n <Input.DescriptionAndValidation>\n <Input.Validation>{error}</Input.Validation>\n </Input.DescriptionAndValidation>\n )}\n </Input.Root>\n </div>\n );\n};\n\n//\n// FormFieldErrorBoundary\n//\n\ntype FormFieldErrorState = {\n error: Error | undefined;\n};\n\ntype FormFieldErrorBoundaryProps = PropsWithChildren<{\n path?: (string | number)[];\n}>;\n\nexport class FormFieldErrorBoundary extends Component<FormFieldErrorBoundaryProps, FormFieldErrorState> {\n static getDerivedStateFromError(error: Error): { error: Error } {\n return { error };\n }\n\n override state = { error: undefined };\n\n override componentDidUpdate(prevProps: FormFieldErrorBoundaryProps) {\n if (prevProps.path !== this.props.path) {\n this.resetError();\n }\n }\n\n override render() {\n if (this.state.error) {\n return (\n <div className='flex gap-2 border border-rose-fill font-mono text-sm'>\n <span className='bg-rose-fill text-surface-text px-1 font-thin'>ERROR</span>\n {String(this.props.path?.join('.'))}\n </div>\n );\n }\n\n return this.props.children;\n }\n\n private resetError() {\n this.setState({ error: undefined });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type AnyProperties } from '@dxos/echo/internal';\nimport { type SchemaProperty } from '@dxos/effect';\n\nimport { type FormHandlerProps } from '../../hooks';\nimport { getFormProperties } from '../../util';\n\nimport { useFormValues } from './Form';\nimport { FormField, type FormFieldProps } from './FormField';\nimport { FormFieldErrorBoundary, FormFieldLabel } from './FormFieldComponent';\n\nconst FORM_FIELDSET_NAME = 'Form.FieldSet';\n\nexport type FormFieldSetProps<T extends AnyProperties> = {\n label?: string;\n sort?: string[];\n exclude?: (props: SchemaProperty[]) => SchemaProperty[];\n} & Pick<FormHandlerProps<T>, 'schema'> &\n Pick<\n FormFieldProps,\n | 'path'\n | 'autoFocus'\n | 'readonly'\n | 'layout'\n | 'projection'\n | 'fieldMap'\n | 'fieldProvider'\n | 'createOptionLabel'\n | 'createOptionIcon'\n | 'createInitialValuePath'\n | 'db'\n | 'schemaHook'\n | 'getOptions'\n | 'onCreate'\n >;\n\n/**\n * Renders a set of form fields derived from a schema object.\n */\nexport const FormFieldSet = ({\n label,\n schema,\n readonly,\n path,\n sort,\n exclude,\n projection,\n layout,\n ...props\n}: FormFieldSetProps<any>) => {\n const values = useFormValues(FORM_FIELDSET_NAME, path);\n\n // TODO(burdon): Updates on every value change.\n // Remove values dep if can remove from getSchemaProperties.\n const properties = useMemo(() => {\n if (!schema) {\n return [];\n }\n\n // TODO(wittjosiah): Reconcile FormInputAnnotation with projection hidden properties & exclude function.\n const schemaProps = getFormProperties(schema.ast);\n const filteredProps = exclude ? exclude(schemaProps) : schemaProps;\n\n // Use projection-based field management when view and projection are available.\n if (projection) {\n const fieldProjections = projection.getFieldProjections();\n const hiddenProperties = new Set(projection.getHiddenProperties());\n\n // Filter properties to only include visible ones and order by projection.\n const visibleProps = filteredProps.filter((prop) => !hiddenProperties.has(prop.name.toString()));\n const orderedProps: SchemaProperty[] = [];\n\n // Add properties in projection field order.\n for (const fieldProjection of fieldProjections) {\n const fieldPath = String(fieldProjection.field.path);\n const prop = visibleProps.find((p) => p.name === fieldPath);\n if (prop) {\n orderedProps.push(prop);\n }\n }\n\n // Add any remaining properties not in projection.\n const projectionPaths = new Set(fieldProjections.map((projection) => String(projection.field.path)));\n const remainingProps = visibleProps.filter((prop) => !projectionPaths.has(prop.name.toString()));\n orderedProps.push(...remainingProps);\n return orderedProps;\n }\n\n // Fallback to legacy filter/sort behavior.\n return sort\n ? [...filteredProps].sort(({ name: a }, { name: b }) => sort.indexOf(a.toString()) - sort.indexOf(b.toString()))\n : filteredProps;\n }, [schema, values, exclude, sort, projection]);\n\n if ((readonly || layout === 'static') && values == null) {\n return null;\n }\n\n return (\n <>\n {layout !== 'inline' && label && <FormFieldLabel label={label} asChild />}\n {properties.map((property) => {\n const name = property.name.toString();\n return (\n <FormFieldErrorBoundary key={name} path={[...(path ?? []), name]}>\n <FormField\n type={property.type}\n name={name}\n path={[...(path ?? []), name]}\n readonly={readonly}\n layout={layout}\n projection={projection}\n {...props}\n />\n </FormFieldErrorBoundary>\n );\n })}\n </>\n );\n};\n\nFormFieldSet.displayName = FORM_FIELDSET_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport * as String from 'effect/String';\nimport React, { useMemo } from 'react';\n\nimport { Format } from '@dxos/echo';\nimport {\n createJsonPath,\n findNode,\n getAnnotation,\n getDiscriminatedType,\n isArrayType,\n isDiscriminatedUnion,\n isLiteralUnion,\n isNestedType,\n} from '@dxos/effect';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type ProjectionModel } from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { getRefProps } from '../../util';\n\nimport {\n ArrayField,\n BooleanField,\n GeoPointField,\n MarkdownField,\n NumberField,\n RefField,\n type RefFieldProps,\n SelectField,\n TextAreaField,\n TextField,\n} from './fields';\nimport { useFormFieldState } from './Form';\nimport {\n type FormFieldComponent,\n type FormFieldComponentProps,\n type FormFieldMap,\n type FormFieldProvider,\n} from './FormFieldComponent';\nimport { FormFieldSet } from './FormFieldSet';\n\nexport type FormFieldProps = {\n /**\n * AST of the property to render.\n */\n type: SchemaAST.AST;\n\n /**\n * Name of the property.\n */\n name: string;\n\n /**\n * Path to the current object from the root. Used with nested forms.\n */\n path?: (string | number)[];\n\n /**\n * Optional projection for projection-based field management.\n */\n projection?: ProjectionModel;\n\n /**\n * Map of custom renderers for specific properties.\n * Prefer fieldProvider for plugin specific input surfaces.\n */\n fieldMap?: FormFieldMap;\n\n /**\n * Function to lookup custom renderers for specific properties.\n */\n fieldProvider?: FormFieldProvider;\n} & Pick<FormFieldComponentProps, 'autoFocus' | 'readonly' | 'layout'> &\n Pick<\n RefFieldProps,\n | 'createOptionLabel'\n | 'createOptionIcon'\n | 'createInitialValuePath'\n | 'db'\n | 'schemaHook'\n | 'getOptions'\n | 'onCreate'\n >;\n\nexport const FormField = (props: FormFieldProps) => {\n const {\n type,\n name,\n path,\n projection,\n fieldMap,\n fieldProvider,\n readonly,\n layout,\n\n // RefFieldProps\n createOptionLabel,\n createOptionIcon,\n createInitialValuePath,\n db,\n schemaHook,\n getOptions: getRefOptions,\n onCreate,\n } = props;\n const { t } = useTranslation(translationKey);\n const title = getAnnotation<string>(SchemaAST.TitleAnnotationId)(type);\n const description = getAnnotation<string>(SchemaAST.DescriptionAnnotationId)(type);\n const examples = getAnnotation<string[]>(SchemaAST.ExamplesAnnotationId)(type);\n\n const label = useMemo(() => title ?? String.capitalize(name), [title, name]);\n const placeholder = useMemo(\n () => (examples?.length ? `${t('example placeholder')}: ${examples[0]}` : (description ?? label)),\n [examples, description, label],\n );\n\n const fieldState = useFormFieldState(FormField.displayName, path);\n const fieldProps: FormFieldComponentProps = {\n type,\n format: Format.FormatAnnotation.getFromAst(type).pipe((annotation) => Option.getOrUndefined(annotation)),\n readonly,\n label,\n placeholder,\n layout,\n ...fieldState,\n };\n\n //\n // Custom field.\n //\n\n const jsonPath = createJsonPath(path ?? []);\n const CustomField = fieldMap?.[jsonPath];\n if (CustomField) {\n return <CustomField {...fieldProps} />;\n }\n\n // TODO(burdon): Expensive to create schema each time; pass AST?\n const component = fieldProvider?.({ schema: Schema.make(type), prop: name, fieldProps });\n if (component) {\n return component;\n }\n\n //\n // Array field.\n //\n\n if (isArrayType(type)) {\n return <ArrayField fieldProps={fieldState} label={label} {...props} />;\n }\n\n //\n // Regular field.\n //\n\n const Field = getFormField(fieldProps);\n if (Field) {\n return <Field {...fieldProps} />;\n }\n\n //\n // Select field.\n //\n\n const options = getOptions(type);\n if (options) {\n // Resolve labels from projection metadata when available.\n const fieldProjections = projection?.getFieldProjections();\n const fieldProjection = fieldProjections?.find((fp) => fp.field.path === name);\n const selectOptions = fieldProjection?.props.options;\n\n return (\n <SelectField\n {...fieldProps}\n options={options.map((option) => {\n const selectOption = selectOptions?.find((so) => so.id === globalThis.String(option));\n return {\n value: option,\n label: selectOption?.title ?? option.toString(),\n };\n })}\n />\n );\n }\n\n //\n // Ref field.\n //\n\n const refProps = getRefProps(type);\n if (refProps) {\n return (\n <RefField\n {...fieldProps}\n {...refProps}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n createInitialValuePath={createInitialValuePath}\n db={db}\n schemaHook={schemaHook}\n getOptions={getRefOptions}\n onCreate={onCreate}\n />\n );\n }\n\n //\n // Nested Object field.\n //\n\n if (isNestedType(type)) {\n const baseNode = findNode(type, isDiscriminatedUnion);\n const typeLiteral = baseNode\n ? getDiscriminatedType(baseNode, fieldState.getValue() as any)\n : findNode(type, SchemaAST.isTypeLiteral);\n\n if (typeLiteral) {\n const schema = Schema.make(typeLiteral);\n return (\n <FormFieldSet\n schema={schema}\n path={path}\n readonly={readonly}\n layout={layout}\n label={label}\n projection={projection}\n fieldMap={fieldMap}\n fieldProvider={fieldProvider}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n createInitialValuePath={createInitialValuePath}\n db={db}\n schemaHook={schemaHook}\n getOptions={getRefOptions}\n onCreate={onCreate}\n />\n );\n }\n }\n\n return null;\n};\n\nFormField.displayName = 'Form.FormField';\n\n/**\n * Get property input component.\n */\nconst getFormField = ({ type, format }: FormFieldComponentProps): FormFieldComponent | undefined => {\n //\n // Standard formats.\n //\n\n const formatField = Match.value(format).pipe(\n Match.withReturnType<FormFieldComponent | undefined>(),\n Match.when(Format.TypeFormat.GeoPoint, () => GeoPointField),\n Match.when(Format.TypeFormat.Markdown, () => MarkdownField),\n Match.when(Format.TypeFormat.Text, () => TextAreaField),\n Match.orElse(() => undefined),\n );\n if (formatField) {\n return formatField;\n }\n\n //\n // Standard types.\n //\n\n switch (type._tag) {\n // TODO(wittjosiah): Schema.Any is currently used to represent template inputs.\n case 'AnyKeyword':\n case 'StringKeyword':\n return TextField;\n case 'NumberKeyword':\n return NumberField;\n case 'BooleanKeyword':\n return BooleanField;\n }\n};\n\nconst getOptions = (ast: SchemaAST.AST): Format.Options[] | undefined => {\n if (isLiteralUnion(ast)) {\n return ast.types.map((type) => type.literal).filter((v): v is string | number => v !== null);\n }\n\n return Format.OptionsAnnotation.getFromAst(ast).pipe((annotation) => Option.getOrUndefined(annotation));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type SwitchProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const BooleanField = ({ type, readonly, onValueChange, ...props }: FormFieldComponentProps<boolean>) => {\n const handleChange = useCallback<NonNullable<SwitchProps['onCheckedChange']>>(\n (value) => onValueChange?.(type, value),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<boolean> readonly={readonly} {...props}>\n {({ value }) => <Input.Switch disabled={!!readonly} checked={value} onCheckedChange={handleChange} />}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { GeoLocation, type GeoPoint } from '@dxos/echo/internal';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { translationKey } from '../../../translations';\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport const GeoPointField = ({\n type,\n label,\n readonly,\n layout,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: FormFieldComponentProps<GeoPoint>) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const geoPoint = useMemo<GeoPoint>(() => getValue() ?? [0, 0], [getValue]);\n const value = useMemo(() => GeoLocation.fromGeoPoint(geoPoint), [geoPoint]);\n\n const [longitudeText, setLongitudeText] = useState(value.longitude?.toString());\n const [latitudeText, setLatitudeText] = useState(value.latitude?.toString());\n useEffect(() => {\n const location = GeoLocation.fromGeoPoint(geoPoint);\n setLongitudeText(location.longitude?.toString());\n setLatitudeText(location.latitude?.toString());\n }, [geoPoint]);\n\n const handleChange = useCallback(\n (coordinateType: keyof Pick<GeoLocation, 'longitude' | 'latitude'>, setText: (text: string) => void) =>\n (event: ChangeEvent<HTMLInputElement>) => {\n const inputText = event.target.value;\n setText(inputText);\n if (inputText !== '' && inputText !== '-') {\n const coord = safeParseFloat(inputText);\n if (coord !== undefined && !isNaN(coord)) {\n const currentLocation = GeoLocation.fromGeoPoint(getValue() ?? [0, 0]);\n const newLocation = { ...currentLocation, [coordinateType]: coord };\n const newValue = GeoLocation.toGeoPoint(newLocation);\n onValueChange(type, newValue);\n }\n }\n },\n [type, getValue, onValueChange],\n );\n\n if ((readonly || layout === 'static') && !value?.latitude && !value?.longitude) {\n return null;\n }\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} asChild />}\n {layout === 'static' ? (\n <LatLng {...value} />\n ) : (\n <div role='none' className='grid grid-cols-2 gap-2'>\n <div>\n <Input.Root>\n {layout !== 'inline' && <Input.Label>{t('latitude label')}</Input.Label>}\n <Input.TextInput\n type='number'\n step='0.00001'\n min='-90'\n max='90'\n disabled={!!readonly}\n placeholder={t('latitude placeholder')}\n value={latitudeText ?? ''}\n onChange={handleChange('latitude', setLatitudeText)}\n onBlur={onBlur}\n />\n </Input.Root>\n </div>\n <div>\n <Input.Root>\n {layout !== 'inline' && <Input.Label>{t('longitude label')}</Input.Label>}\n <Input.TextInput\n type='number'\n step='0.00001'\n min='-180'\n max='180'\n disabled={!!readonly}\n placeholder={t('longitude placeholder')}\n value={longitudeText ?? ''}\n onChange={handleChange('longitude', setLongitudeText)}\n onBlur={onBlur}\n />\n </Input.Root>\n </div>\n </div>\n )}\n </Input.Root>\n );\n};\n\nconst LatLng = ({ latitude = 0, longitude = 0 }: GeoLocation) => {\n const latHem = latitude >= 0 ? 'N' : 'S';\n const lngHem = longitude >= 0 ? 'E' : 'W';\n\n return (\n <span className='inline-flex items-center gap-1'>\n <span>\n <span>{Math.abs(latitude).toFixed(5)}</span>\n <span className='text-subdued'>°{latHem}</span>\n </span>\n <span>\n <span>{Math.abs(longitude).toFixed(5)}</span>\n <span className='text-subdued'>°{lngHem}</span>\n </span>\n </span>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useRef } from 'react';\n\nimport { Input, type TextAreaProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport const MarkdownField = ({\n type,\n readonly,\n label,\n placeholder,\n layout,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: FormFieldComponentProps) => {\n const { status, error } = getStatus();\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n // TODO(ZaymonFC): If we start using `Enter` for form submission, we should prevent default behavior here\n // since we're using a textarea element and the user needs to be able to enter new lines.\n\n const adjustHeight = useCallback(() => {\n const textarea = textareaRef.current;\n if (textarea) {\n textarea.style.blockSize = 'auto'; // For measurement.\n textarea.style.blockSize = `${textarea.scrollHeight + 2}px`;\n }\n }, []);\n\n // Adjust height on initial render.\n useEffect(() => {\n adjustHeight();\n }, [adjustHeight]);\n\n // Adjust height when the content changes.\n useEffect(() => {\n adjustHeight();\n }, [getValue(), adjustHeight]);\n\n const handleChange = useCallback<NonNullable<TextAreaProps['onChange']>>(\n (event) => onValueChange(type, event.target.value),\n [type, onValueChange],\n );\n\n const value = getValue();\n if ((readonly || layout === 'static') && !value) {\n return null;\n }\n\n // TODO(burdon): Use Markdown Editor.\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} />}\n {layout === 'static' ? (\n <p>{value}</p>\n ) : (\n <Input.TextArea\n ref={textareaRef}\n disabled={!!readonly}\n placeholder={placeholder}\n value={value ?? ''}\n classNames={'min-h-auto max-h-40 overflow-auto'}\n onChange={handleChange}\n onBlur={onBlur}\n style={{ resize: 'none' }}\n spellCheck={false}\n />\n )}\n {layout === 'full' && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type TextInputProps } from '@dxos/react-ui';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const NumberField = ({\n type,\n readonly,\n placeholder,\n onValueChange,\n onBlur,\n ...props\n}: FormFieldComponentProps<number>) => {\n const handleChange = useCallback<NonNullable<TextInputProps['onChange']>>(\n (event) => onValueChange(type, safeParseFloat(event.target.value) || 0),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<number> readonly={readonly} {...props}>\n {({ value = '' }) => (\n <Input.TextInput\n type='number'\n disabled={!!readonly}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onBlur={onBlur}\n />\n )}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport '@dxos/lit-ui/dx-tag-picker.pcss';\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { type Database, Entity, Filter, Obj, Ref, Type } from '@dxos/echo';\nimport { ReferenceAnnotationId, type ReferenceAnnotationValue } from '@dxos/echo/internal';\nimport { useQuery, useSchema as useSchema$ } from '@dxos/echo-react';\nimport { findAnnotation } from '@dxos/effect';\nimport { DXN } from '@dxos/keys';\nimport { DxAnchor } from '@dxos/lit-ui/react';\nimport { Button, Icon, Input, useTranslation } from '@dxos/react-ui';\nimport { ParentLabelAnnotationId } from '@dxos/schema';\nimport { mx } from '@dxos/ui-theme';\n\nimport { translationKey } from '../../../translations';\nimport { ObjectPicker, type ObjectPickerContentProps, type RefOption } from '../../ObjectPicker';\nimport { omitId } from '../Form';\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\n// TODO(burdon): Factor out.\nconst isRefSnapshot = (val: any): val is { '/': string } => {\n return typeof val === 'object' && typeof (val as any)?.['/'] === 'string';\n};\n\nconst defaultGetOptions: NonNullable<RefFieldProps['getOptions']> = (results, { parentLabel } = {}) =>\n results.map((result) => {\n const id = Entity.getDXN(result).toString();\n const parent = parentLabel ? Obj.getParent(result as Obj.Unknown) : undefined;\n const label = parent ? Entity.getLabel(parent) : Entity.getLabel(result);\n return { id, label: label ?? id };\n });\n\nconst defaultResultsHook: NonNullable<RefFieldProps['resultsHook']> = (db, typename) =>\n useQuery(\n db,\n typename\n ? // For Ref.Ref(Obj.Unknown) we want to show all objects.\n typename === Type.getTypename(Obj.Unknown)\n ? Filter.everything()\n : Filter.typename(typename)\n : Filter.nothing(),\n );\n\nexport type RefFieldProps = FormFieldComponentProps &\n Pick<ObjectPickerContentProps, 'createOptionLabel' | 'createOptionIcon' | 'createInitialValuePath'> & {\n db?: Database.Database;\n resultsHook?: (db?: Database.Database, typename?: string) => Entity.Any[];\n schemaHook?: (db?: Database.Database, typename?: string) => Type.AnyEntity;\n getOptions?: (objects: Entity.Any[], options?: { parentLabel?: boolean }) => RefOption[];\n onCreate?: (schema: Type.AnyEntity, values: any) => void;\n };\n\nexport const RefField = (props: RefFieldProps) => {\n const {\n type,\n readonly,\n label,\n placeholder,\n layout,\n getStatus,\n getValue,\n createOptionLabel,\n createOptionIcon,\n createInitialValuePath,\n db,\n resultsHook: useResults = defaultResultsHook,\n schemaHook: useSchema = useSchema$,\n getOptions = defaultGetOptions,\n onCreate,\n onValueChange,\n } = props;\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n\n const typename = useMemo(\n () => (type ? findAnnotation<ReferenceAnnotationValue>(type, ReferenceAnnotationId)?.typename : undefined),\n [type],\n );\n\n const results = useResults(db, typename);\n const options = useMemo(() => {\n const parentLabel = type ? findAnnotation<boolean>(type, ParentLabelAnnotationId) === true : false;\n return getOptions(results, { parentLabel });\n }, [results, getOptions, type]);\n\n const handleGetValue = useCallback(() => {\n const formValue = getValue();\n\n const unknownToRefOption = (value: unknown) => {\n const isRef = Ref.isRef(value);\n if (isRef || isRefSnapshot(value)) {\n const dxnString = isRef ? value.dxn.toString() : value['/'];\n const matchingOption = options.find((option) => option.id === dxnString);\n if (matchingOption) {\n return matchingOption;\n }\n }\n return undefined;\n };\n\n return unknownToRefOption(formValue);\n }, [options, getValue]);\n\n const handleUpdate = useCallback(\n (id: string | undefined) => {\n const item = options.find((option) => option.id === id);\n const ref = item ? Ref.fromDXN(DXN.parse(item.id)) : undefined;\n onValueChange(type, ref);\n },\n [options, type, onValueChange],\n );\n\n const item = handleGetValue();\n const selectedIds = useMemo(() => (item ? [item.id] : []), [item]);\n const createSchema = useSchema(db, typename);\n\n const handleCreate = useCallback(\n (values: any) => {\n if (createSchema && onCreate) {\n onCreate(createSchema, values);\n }\n },\n [createSchema, onCreate],\n );\n\n const handleSelect = useCallback(\n (id: string) => {\n if (item?.id === id) {\n handleUpdate(undefined);\n } else {\n handleUpdate(id);\n }\n },\n [item, handleUpdate],\n );\n\n if (!typename || ((readonly || layout === 'static') && !item)) {\n return null;\n }\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} />}\n <div>\n {readonly ? (\n !item ? (\n <p className={mx('text-description', 'mb-2')}>{t('empty readonly ref field label')}</p>\n ) : (\n <DxAnchor key={item.id} dxn={item.id} rootclassname='me-1'>\n {item.label}\n </DxAnchor>\n )\n ) : (\n <ObjectPicker.Root>\n <ObjectPicker.Trigger asChild classNames='p-0'>\n {item ? (\n <div className='flex gap-2 w-full'>\n <Input.Root key={item.id}>\n <Input.TextInput value={item.label} readOnly classNames='w-full' />\n </Input.Root>\n </div>\n ) : (\n <Button classNames='w-full text-start gap-2'>\n <div role='none' className='grow overflow-hidden'>\n <span className='flex truncate text-description'>{placeholder ?? t('ref field placeholder')}</span>\n </div>\n <Icon size={3} icon='ph--caret-down--bold' />\n </Button>\n )}\n </ObjectPicker.Trigger>\n <ObjectPicker.Portal>\n <ObjectPicker.Content\n classNames='dx-card-popover-width'\n options={options}\n selectedIds={selectedIds}\n createSchema={createSchema && omitId(createSchema)}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n createInitialValuePath={createInitialValuePath}\n onCreate={handleCreate}\n onSelect={handleSelect}\n />\n </ObjectPicker.Portal>\n </ObjectPicker.Root>\n )}\n </div>\n {layout === 'full' && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport React, { type KeyboardEvent, forwardRef, useCallback, useState } from 'react';\n\nimport { type Palette, Popover, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { Combobox, useSearchListInput, useSearchListResults } from '@dxos/react-ui-searchlist';\n\nimport { translationKey } from '../../translations';\nimport { Form } from '../Form';\n\nexport type RefOption = {\n id: string;\n label: string;\n hue?: Palette;\n};\n\nexport type ObjectPickerContentProps = ThemedClassName<{\n options: RefOption[];\n selectedIds?: string[];\n createOptionLabel?: [string, { ns: string }];\n createOptionIcon?: string;\n createSchema?: Schema.Schema.AnyNoContext;\n createInitialValuePath?: string;\n onCreate?: (values: any) => void;\n onSelect: (id: string) => void;\n}>;\n\nconst CreateItem = ({\n createOptionLabel,\n createOptionIcon,\n onCreateItemSelect,\n}: {\n createOptionLabel: [string, { ns: string }];\n createOptionIcon: string;\n onCreateItemSelect: (query: string) => void;\n}) => {\n const { t } = useTranslation(translationKey);\n const { query } = useSearchListInput();\n\n return (\n <Combobox.Item\n value='__create__'\n label={t(createOptionLabel[0], { ns: createOptionLabel[1].ns, text: query })}\n icon={createOptionIcon}\n classNames='flex items-center gap-2'\n closeOnSelect={false}\n onSelect={() => {\n onCreateItemSelect(query);\n }}\n />\n );\n};\n\nconst ObjectPickerContent = forwardRef<HTMLDivElement, ObjectPickerContentProps>(\n (\n {\n options,\n selectedIds,\n createSchema,\n createOptionLabel,\n createOptionIcon,\n createInitialValuePath,\n onSelect,\n onCreate,\n ...props\n },\n ref,\n ) => {\n const { t } = useTranslation(translationKey);\n const [showForm, setShowForm] = useState(false);\n const [formInitialValue, setFormInitialValue] = useState<string>('');\n\n const { results, handleSearch } = useSearchListResults({\n items: options,\n });\n\n const handleFormSave = useCallback(\n (values: any) => {\n onCreate?.(values);\n setShowForm(false);\n setFormInitialValue('');\n },\n [onCreate],\n );\n\n const handleFormCancel = useCallback(() => {\n setShowForm(false);\n setFormInitialValue('');\n }, []);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (\n event.key === 'Enter' &&\n createSchema &&\n (event.currentTarget as HTMLElement).querySelector(\n '[role=\"option\"][aria-selected=\"true\"][data-value=\"__create__\"]',\n )\n ) {\n event.stopPropagation();\n event.preventDefault();\n // Get the current query from the input element\n const input = (event.currentTarget as HTMLElement).querySelector('input[type=\"text\"]') as HTMLInputElement;\n const currentQuery = input?.value || '';\n setFormInitialValue(currentQuery);\n setShowForm(true);\n }\n },\n [createSchema],\n );\n\n return (\n <Combobox.Content {...props} ref={ref} onSearch={handleSearch} onKeyDownCapture={handleKeyDown}>\n {showForm && createSchema ? (\n <Popover.Viewport>\n <Form.Root\n testId='create-referenced-object-form'\n schema={createSchema}\n values={createInitialValuePath ? { [createInitialValuePath]: formInitialValue } : {}}\n onSave={handleFormSave}\n onCancel={handleFormCancel}\n >\n <Form.Viewport>\n <Form.Content>\n <Form.FieldSet />\n <Form.Actions />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n </Popover.Viewport>\n ) : (\n <>\n <Combobox.Input placeholder={t('ref field combobox input placeholder')} autoFocus />\n <Combobox.List>\n {results.map((option) => (\n <Combobox.Item\n key={option.id}\n value={option.id}\n label={option.label}\n checked={selectedIds?.includes(option.id)}\n onSelect={() => onSelect(option.id)}\n classNames='flex items-center gap-2'\n />\n ))}\n {createOptionLabel && createOptionIcon && createSchema && onCreate && (\n <CreateItem\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n onCreateItemSelect={(query: string) => {\n setFormInitialValue(query);\n setShowForm(true);\n }}\n />\n )}\n </Combobox.List>\n </>\n )}\n <Combobox.Arrow />\n </Combobox.Content>\n );\n },\n);\n\nObjectPickerContent.displayName = 'ObjectPickerContent';\n\nexport const ObjectPicker = {\n Root: Combobox.Root,\n Portal: Combobox.Portal,\n Trigger: Combobox.Trigger,\n VirtualTrigger: Combobox.VirtualTrigger,\n Content: ObjectPickerContent,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, Select, type SelectRootProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport type SelectFieldOptions = FormFieldComponentProps & {\n options?: Array<{ value: string | number; label?: string }>;\n};\n\nexport const SelectField = ({\n type,\n readonly,\n label,\n layout,\n placeholder,\n options,\n getStatus,\n getValue,\n onValueChange,\n}: SelectFieldOptions) => {\n const { status, error } = getStatus();\n const value = getValue() as string | undefined;\n\n const handleValueChange = useCallback<NonNullable<SelectRootProps['onValueChange']>>(\n (value) => onValueChange(type, value),\n [type, onValueChange],\n );\n\n if ((readonly || layout === 'static') && value == null) {\n return null;\n }\n\n return (\n <Input.Root validationValence={status}>\n {layout !== 'inline' && <FormFieldLabel error={error} readonly={readonly} label={label} />}\n {layout === 'static' ? (\n <p>{options?.find(({ value: optionValue }) => optionValue === value)?.label ?? String(value)}</p>\n ) : (\n <Select.Root value={value} onValueChange={handleValueChange}>\n {/* TODO(burdon): Placeholder not working? */}\n <Select.TriggerButton classNames='w-full' disabled={!!readonly} placeholder={placeholder} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {options?.map(({ value, label }) => (\n // NOTE: Numeric values are converted to and from strings.\n <Select.Option key={String(value)} value={String(value)}>\n {label ?? String(value)}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n )}\n {layout === 'full' && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type ChangeEvent, type KeyboardEvent, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { type SelectOption } from '@dxos/echo/internal';\nimport { PublicKey } from '@dxos/keys';\nimport { type ChromaticPalette, IconButton, Input, Tag, useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { HuePicker } from '@dxos/react-ui-pickers';\nimport { hues, osTranslations, subtleHover } from '@dxos/ui-theme';\n\nimport { translationKey } from '../../../translations';\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nexport const SelectOptionField = ({\n type,\n readonly,\n label,\n getStatus,\n getValue,\n onValueChange,\n}: FormFieldComponentProps<SelectOption[] | undefined>) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const [selected, setSelectedId] = useState<string | null>(null);\n const [isNewOption, setIsNewOption] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const options = getValue();\n\n // Initialization.\n useEffect(() => {\n if (options === undefined) {\n onValueChange(type, []);\n }\n }, [options, type, onValueChange]);\n\n const randomHue = () => {\n const usedHues = new Set(options?.map((option) => option.color) ?? []);\n // Pick a random unused option from hueTokenThemes.\n const unusedHues = hues.filter((hue) => !usedHues.has(hue));\n if (unusedHues.length > 0) {\n return unusedHues[Math.floor(Math.random() * unusedHues.length)];\n }\n\n // Pick a random one that hasn't been used in the last three options\n const lastThree = new Set(options?.slice(-3).map((option) => option.color) ?? []);\n const availableHues = hues.filter((hue) => !lastThree.has(hue));\n return (\n availableHues[Math.floor(Math.random() * availableHues.length)] ?? hues[Math.floor(Math.random() * hues.length)]\n );\n };\n\n const handleAdd = useCallback(() => {\n const newId = PublicKey.random().truncate();\n const newOption = { id: newId, title: '', color: randomHue() };\n onValueChange(type, [...(options ?? []), newOption]);\n setSelectedId(newId);\n setIsNewOption(true);\n }, [options, type, onValueChange]);\n\n const handleDelete = useCallback(\n (id: string) => {\n const newOptions = options?.filter((option) => option.id !== id) ?? [];\n onValueChange(type, newOptions);\n setSelectedId(null);\n },\n [options, type, onValueChange],\n );\n\n const handleMove = useCallback(\n (from: number, to: number) => {\n if (!options) {\n return;\n }\n\n const newOptions = [...options];\n const [removed] = newOptions.splice(from, 1);\n newOptions.splice(to, 0, removed);\n onValueChange(type, newOptions);\n },\n [options, type, onValueChange],\n );\n\n const handleClick = useCallback((id: string) => {\n setSelectedId((current) => (current === id ? null : id));\n }, []);\n\n const handleTitleChange = useCallback(\n (id: string) => (e: ChangeEvent<HTMLInputElement>) => {\n const newOptions = options?.map((o) => (o.id === id ? { ...o, title: e.target.value } : o));\n onValueChange(type, newOptions ?? []);\n },\n [options, type, onValueChange],\n );\n\n const handleKeyDown = useCallback((ev: KeyboardEvent<HTMLInputElement>) => {\n if (ev.key === 'Enter') {\n setSelectedId(null);\n }\n }, []);\n\n const handleColorChange = useCallback(\n (id: string) => (hue: string) => {\n const newOptions = options?.map((o) => (o.id === id ? { ...o, color: hue } : o));\n onValueChange(type, newOptions ?? []);\n },\n [options, type, onValueChange],\n );\n\n useEffect(() => {\n if (selected && isNewOption && inputRef.current) {\n inputRef.current.focus();\n setIsNewOption(false);\n }\n }, [selected, isNewOption]);\n\n return (\n <Input.Root validationValence={status}>\n <FormFieldLabel error={error} readonly={readonly} label={label} />\n <div role='none'>\n {options && (\n <List.Root\n items={options}\n isItem={(_item) => true}\n onMove={readonly ? undefined : handleMove}\n readonly={!!readonly}\n >\n {({ items }) => (\n <div role='list' className='w-full overflow-auto'>\n {items?.map((item) => (\n <div key={item.id}>\n <List.Item\n role='button'\n item={item}\n classNames={[subtleHover, 'flex flex-col cursor-pointer rounded-xs']}\n aria-expanded={selected === item.id}\n >\n <div className='flex items-center'>\n <List.ItemDragHandle disabled={!!readonly} />\n <List.ItemTitle onClick={() => handleClick(item.id)} classNames='flex-1'>\n {/* TODO(ZaymonFC): Move spacer into Tag component. */}\n <Tag palette={item.color as ChromaticPalette}>{item.title || '\\u200b'}</Tag>\n </List.ItemTitle>\n <IconButton\n iconOnly\n variant='ghost'\n label={t(selected === item.id ? 'collapse label' : 'expand label', { ns: osTranslations })}\n icon={selected === item.id ? 'ph--caret-down--regular' : 'ph--caret-right--regular'}\n onClick={() => handleClick(item.id)}\n />\n </div>\n {selected === item.id && (\n <div className='flex flex-col p-form-padding gap-1 dx-density-fine'>\n {/* 16px to match drag handle width. */}\n <Input.Label classNames='text-xs'>{t('select option label')}</Input.Label>\n <div className='grid grid-cols-[1fr_min-content_min-content] gap-1'>\n <Input.TextInput\n disabled={!!readonly}\n placeholder={t('select option label placeholder')}\n ref={selected === item.id ? inputRef : undefined}\n value={item.title}\n onChange={handleTitleChange(item.id)}\n onKeyDown={handleKeyDown}\n classNames='flex-1'\n />\n <HuePicker disabled={!!readonly} value={item.color} onChange={handleColorChange(item.id)} />\n <IconButton\n disabled={!!readonly}\n icon='ph--trash--fill'\n iconOnly\n label={t('select option delete')}\n onClick={() => handleDelete(item.id)}\n />\n </div>\n </div>\n )}\n </List.Item>\n </div>\n ))}\n <IconButton\n variant='ghost'\n icon='ph--plus--regular'\n label={t('select option add')}\n onClick={handleAdd}\n disabled={!!readonly}\n classNames='w-full'\n />\n </div>\n )}\n </List.Root>\n )}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type TextInputProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const TextField = ({\n type,\n readonly,\n placeholder,\n onValueChange,\n onBlur,\n ...props\n}: FormFieldComponentProps<string>) => {\n const handleChange = useCallback<NonNullable<TextInputProps['onChange']>>(\n (event) => onValueChange(type, event.target.value),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<string> readonly={readonly} {...props}>\n {({ value = '' }) => (\n <Input.TextInput\n noAutoFill\n disabled={!!readonly}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onBlur={onBlur}\n />\n )}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Input, type TextAreaProps } from '@dxos/react-ui';\n\nimport { type FormFieldComponentProps, FormFieldWrapper } from '../FormFieldComponent';\n\nexport const TextAreaField = ({\n type,\n readonly,\n placeholder,\n onValueChange,\n onBlur,\n ...props\n}: FormFieldComponentProps<string>) => {\n const handleChange = useCallback<NonNullable<TextAreaProps['onChange']>>(\n (event) => onValueChange(type, event.target.value),\n [type, onValueChange],\n );\n\n return (\n <FormFieldWrapper<string> readonly={readonly} {...props}>\n {({ value = '' }) => (\n <Input.TextArea\n rows={3}\n disabled={!!readonly}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onBlur={onBlur}\n />\n )}\n </FormFieldWrapper>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { type FormFieldComponentProps, FormFieldLabel } from '../FormFieldComponent';\n\nconst gridCols = ['grid-cols-1', 'grid-cols-2', 'grid-cols-3', 'grid-cols-4'];\n\nexport const TupleField = ({\n binding,\n type,\n readonly,\n label,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: FormFieldComponentProps<Record<string, number>> & {\n binding: string[];\n}) => {\n const { status, error } = getStatus();\n\n // TODO(burdon): Generalize number/float/string, etc.\n const values: Record<string, number> = getValue() ?? {};\n\n return (\n <Input.Root validationValence={status}>\n <FormFieldLabel error={error} readonly={readonly} label={label} />\n <div className={mx('grid gap-2', gridCols[binding.length - 1])}>\n {binding.map((prop) => (\n <Input.TextInput\n key={prop}\n type='number'\n disabled={!!readonly}\n value={values[prop]}\n onChange={(event) => {\n onValueChange(type, {\n ...values,\n [prop]: safeParseFloat(event.target.value, 0),\n });\n }}\n onBlur={onBlur}\n />\n ))}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport {\n Button,\n type ButtonProps,\n Input,\n type Label,\n ScrollArea,\n type ThemedClassName,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport { translationKey } from '../../translations';\n\nconst SETTINGS_ROOT_NAME = 'Settings.Root';\nconst SETTINGS_SECTION_NAME = 'Settings.Section';\nconst SETTINGS_SECTION_HEADING_NAME = 'Settings.SectionHeading';\nconst SETTINGS_GROUP_NAME = 'Settings.Group';\nconst SETTINGS_GROUP_BUTTON_NAME = 'Settings.GroupButton';\nconst SETTINGS_CONTAINER_NAME = 'Settings.Container';\nconst SETTINGS_FRAME_NAME = 'Settings.Frame';\nconst SETTINGS_FRAME_ITEM_NAME = 'Settings.FrameItem';\nconst SETTINGS_ITEM_NAME = 'Settings.Item';\nconst SETTINGS_ITEM_INPUT_NAME = 'Settings.ItemInput';\n\nconst styles = {\n title: 'pb-trim-md text-base-surface-text text-lg',\n description: 'text-base text-description',\n grid: 'grid grid-cols-1 md:grid-cols-[1fr_1fr] gap-x-trim-lg',\n};\n\n//\n// Root\n//\n\ntype SettingsRootProps = PropsWithChildren;\n\nconst SettingsRoot = ({ children }: SettingsRootProps) => {\n return (\n <ScrollArea.Root className='dx-document' orientation='vertical' margin>\n <ScrollArea.Viewport classNames='p-trim-md'>{children}</ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n};\n\nSettingsRoot.displayName = SETTINGS_ROOT_NAME;\n\n//\n// Section\n//\n\ntype SettingsSectionProps = PropsWithChildren<{\n title: Label;\n description?: Label;\n}>;\n\nconst SettingsSection = ({ title, description, children }: SettingsSectionProps) => {\n return (\n <>\n <SettingsSectionHeading title={title} description={description} />\n <div className='w-full pt-trim-md space-y-trim-md'>{children}</div>\n </>\n );\n};\n\nSettingsSection.displayName = SETTINGS_SECTION_NAME;\n\n//\n// Section Heading\n//\n\nconst SettingsSectionHeading = ({ title, description }: Omit<SettingsSectionProps, 'children'>) => {\n const { t } = useTranslation(translationKey);\n return (\n <>\n <h2 className='px-trim-md mt-trim-md mb-trim-md text-xl'>{toLocalizedString(title, t)}</h2>\n {description && <p className='px-trim-md my-trim-md text-description'>{toLocalizedString(description, t)}</p>}\n </>\n );\n};\n\nSettingsSectionHeading.displayName = SETTINGS_SECTION_HEADING_NAME;\n\n//\n// Group Button\n//\n\nconst SettingsGroupButton = ({ classNames, ...props }: ButtonProps) => {\n return <Button {...props} classNames={['md:col-span-2', classNames]} />;\n};\n\nSettingsGroupButton.displayName = SETTINGS_GROUP_BUTTON_NAME;\n\n//\n// Group\n//\n\ntype SettingsGroupProps = ThemedClassName<PropsWithChildren>;\n\nconst SettingsGroup = ({ children, classNames }: SettingsGroupProps) => (\n <div role='none' className={mx('group space-y-trim-md', classNames)}>\n {children}\n </div>\n);\n\nSettingsGroup.displayName = SETTINGS_GROUP_NAME;\n\n//\n// Frame\n//\n\nconst SettingsFrame = ({ children }: SettingsGroupProps) => (\n <div role='none' className='p-trim-md border border-separator rounded-md'>\n {children}\n </div>\n);\n\nSettingsFrame.displayName = SETTINGS_FRAME_NAME;\n\n//\n// Frame Item\n//\n\nconst SettingsFrameItem = ({ title, description, children }: SettingsItemProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <div role='group' className='min-w-0'>\n <h3 className='text-lg mb-2'>{toLocalizedString(title, t)}</h3>\n {description && <p className='my-trim-sm md:mb-0 text-description'>{toLocalizedString(description, t)}</p>}\n {children}\n </div>\n );\n};\n\nSettingsFrameItem.displayName = SETTINGS_FRAME_ITEM_NAME;\n\n//\n// Container\n//\n\nconst SettingsContainer = ({ classNames, children }: ThemedClassName<PropsWithChildren>) => {\n return (\n <div\n role='none'\n className={mx([\n 'dx-document',\n '*:first:mt-0! *:last:mb-0! px-trim-md py-trim-md',\n 'border border-separator rounded-md',\n classNames,\n ])}\n >\n {children}\n </div>\n );\n};\n\nSettingsContainer.displayName = SETTINGS_CONTAINER_NAME;\n\n//\n// Item\n//\n\ntype SettingsItemProps = PropsWithChildren<{\n title: Label;\n description?: Label;\n}>;\n\nconst SettingsItem = ({ title, description = '', children }: SettingsItemProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <SettingsContainer classNames={styles.grid}>\n <h3 className={mx(styles.title, 'md:col-span-2')}>{toLocalizedString(title, t)}</h3>\n <p className={styles.description}>{toLocalizedString(description, t)}</p>\n <div role='none' className='overflow-hidden text-end py-1'>\n {children}\n </div>\n </SettingsContainer>\n );\n};\n\nSettingsItem.displayName = SETTINGS_ITEM_NAME;\n\n//\n// Item Input\n//\n\nconst SettingsItemInput = ({ title, description = '', children }: SettingsItemProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <Input.Root>\n <SettingsContainer classNames={styles.grid}>\n <Input.Label classNames={mx(styles.title, 'md:col-span-2')}>{toLocalizedString(title, t)}</Input.Label>\n <Input.DescriptionAndValidation>\n <Input.Description classNames={styles.description}>{toLocalizedString(description, t)}</Input.Description>\n </Input.DescriptionAndValidation>\n <div role='none' className='text-end py-1'>\n {children}\n </div>\n </SettingsContainer>\n </Input.Root>\n );\n};\n\nSettingsItemInput.displayName = SETTINGS_ITEM_INPUT_NAME;\n\n//\n// Settings\n//\n\nexport const Settings = {\n Root: SettingsRoot,\n Section: SettingsSection,\n SectionHeading: SettingsSectionHeading,\n Group: SettingsGroup,\n GroupButton: SettingsGroupButton,\n Container: SettingsContainer,\n Frame: SettingsFrame,\n FrameItem: SettingsFrameItem,\n Item: SettingsItem,\n ItemInput: SettingsItemInput,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { RegistryContext } from '@effect-atom/atom-react';\nimport * as Array from 'effect/Array';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport React, { forwardRef, useCallback, useContext, useImperativeHandle, useMemo, useState } from 'react';\n\nimport { Entity, Feed, Filter, Format, Obj, Query, QueryAST, Ref, type SchemaRegistry } from '@dxos/echo';\nimport { View } from '@dxos/echo';\nimport { EchoSchema, type JsonProp, isMutable, toJsonSchema } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { useObject, useQuery } from '@dxos/react-client/echo';\nimport { IconButton, Input, Message, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { QueryForm, type QueryFormProps } from '@dxos/react-ui-components';\nimport { List } from '@dxos/react-ui-list';\nimport {\n ParentLabelAnnotation,\n ProjectionModel,\n VIEW_FIELD_LIMIT,\n createEchoChangeCallback,\n getTypenameFromQuery,\n} from '@dxos/schema';\nimport { mx, osTranslations, subtleHover } from '@dxos/ui-theme';\n\nimport { translationKey } from '../../translations';\nimport { FieldEditor } from '../FieldEditor';\nimport {\n Form,\n type FormFieldComponent,\n type FormFieldComponentProps,\n FormFieldLabel,\n type FormFieldMap,\n type FormRootProps,\n} from '../Form';\n\nexport type ViewEditorProps = ThemedClassName<\n {\n schema: Schema.Schema.AnyNoContext;\n view: View.View;\n mode?: 'schema' | 'tag';\n registry?: SchemaRegistry.SchemaRegistry;\n showHeading?: boolean;\n onQueryChanged?: (query: QueryAST.Query, target?: string) => void;\n onDelete?: (fieldId: string) => void;\n } & Pick<QueryFormProps, 'types' | 'tags'> &\n Pick<FormRootProps<any>, 'readonly' | 'db'>\n>;\n\n/**\n * Schema-based object form.\n */\nexport const ViewEditor = forwardRef<ProjectionModel, ViewEditorProps>(\n (\n {\n classNames,\n schema,\n view,\n mode = 'schema',\n registry,\n db,\n readonly,\n showHeading = false,\n types,\n tags,\n onQueryChanged,\n onDelete,\n },\n forwardedRef,\n ) => {\n const atomRegistry = useContext(RegistryContext);\n const schemaReadonly = !isMutable(schema);\n const { t } = useTranslation(translationKey);\n\n const projectionModel = useMemo(() => {\n // Use reactive and mutable version of json schema when schema is mutable.\n const jsonSchema = schema instanceof EchoSchema ? schema.jsonSchema : toJsonSchema(schema);\n\n // Always use createEchoChangeCallback since the view is ECHO-backed.\n // Pass schema only when mutable to allow schema mutations.\n const change = createEchoChangeCallback(view, schema instanceof EchoSchema ? schema : undefined);\n\n const model = new ProjectionModel({\n registry: atomRegistry,\n view,\n baseSchema: jsonSchema,\n change,\n });\n\n return model;\n }, [atomRegistry, schema, view]);\n\n useImperativeHandle(forwardedRef, () => projectionModel, [projectionModel]);\n\n const queueTarget = Match.value(view.query.ast).pipe(\n Match.when({ type: 'from' }, ({ from }) => {\n if (from._tag !== 'scope') {\n return undefined;\n }\n return Option.fromNullable(from.scope.queues).pipe(\n Option.flatMap((queues) => Array.head(queues)),\n Option.map(String),\n Option.getOrUndefined,\n );\n }),\n Match.orElse(() => undefined),\n );\n\n const feeds = useQuery(db, Filter.type(Feed.Feed));\n\n const targetRef = useMemo(() => {\n if (!queueTarget) {\n return undefined;\n }\n const feed = feeds.find((feed) => Feed.getQueueDxn(feed)?.toString() === queueTarget);\n return feed ? Ref.fromDXN(Entity.getDXN(feed)) : undefined;\n }, [queueTarget, feeds]);\n\n const viewSchema = useMemo(() => {\n const base = Schema.Struct({\n query:\n mode === 'schema'\n ? Format.URL.annotations({ title: 'Record type' })\n : QueryAST.Query.annotations({ title: 'Query' }),\n });\n\n if (mode === 'tag') {\n return Schema.Struct({\n ...base.fields,\n // TODO(wittjosiah): Replace Type.Feed with Dataset.Dataset when Ref.Ref supports unions.\n target: Ref.Ref(Feed.Feed).pipe(\n Schema.annotations({ title: 'Target Feed' }),\n ParentLabelAnnotation.set(true),\n Schema.optional,\n ),\n }).pipe(Schema.mutable);\n }\n\n return base.pipe(Schema.mutable);\n }, [mode]);\n\n // TODO(burdon): Need to warn user of possible consequences of editing.\n // TODO(burdon): Settings should have domain name owned by user.\n const viewValues = useMemo(\n () => ({\n query: mode === 'schema' ? getTypenameFromQuery(view.query.ast) : view.query.ast,\n target: targetRef,\n }),\n [mode, view.query.ast, targetRef],\n );\n\n const fieldMap = useMemo<FormFieldMap | undefined>(\n () => (mode === 'tag' ? customFields({ types, tags }) : undefined),\n [mode, types, tags],\n );\n\n const handleUpdate = useCallback(\n (values: any) => {\n const targetValue = values.target;\n let queueDxn: string | undefined;\n\n if (Ref.isRef(targetValue)) {\n const feedDxn = targetValue.dxn.toString();\n const feed = feeds.find((feed) => Obj.getDXN(feed).toString() === feedDxn);\n if (feed) {\n queueDxn = Feed.getQueueDxn(feed)?.toString();\n }\n }\n\n // TODO(wittjosiah): Deep-clone the AST to plain JS or ECHO proxy arrays become objects with numeric keys.\n const query =\n mode === 'schema'\n ? Query.select(Filter.typename(values.query)).ast\n : JSON.parse(JSON.stringify(values.query));\n onQueryChanged?.(query, queueDxn);\n },\n [onQueryChanged, mode, feeds],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => {\n invariant(!readonly);\n onDelete?.(fieldId);\n },\n [onDelete, readonly],\n );\n\n return (\n <div role='none' className={mx(classNames)}>\n {/* If readonly is set, then the callout is not needed. */}\n {schemaReadonly && !readonly && (\n <Message.Root valence='info' classNames='my-form-padding'>\n <Message.Title>{t('system schema description')}</Message.Title>\n </Message.Root>\n )}\n\n {/* TODO(burdon): Is the form read-only or just the schema? */}\n <Form.Root schema={viewSchema} values={viewValues} fieldMap={fieldMap} db={db} onValuesChanged={handleUpdate}>\n <Form.FieldSet />\n\n <FormFieldLabel label={t('fields label')} asChild />\n <FieldList\n schema={schema}\n view={view}\n registry={registry}\n readonly={readonly}\n showHeading={showHeading}\n onDelete={handleDelete}\n />\n </Form.Root>\n </div>\n );\n },\n);\n\ntype FieldListProps = Pick<ViewEditorProps, 'schema' | 'view' | 'registry' | 'readonly' | 'showHeading' | 'onDelete'>;\n\nconst FieldList = ({ schema, view, registry, readonly, showHeading = false, onDelete }: FieldListProps) => {\n const atomRegistry = useContext(RegistryContext);\n const schemaReadonly = !isMutable(schema);\n const { t } = useTranslation(translationKey);\n\n // Subscribe to view changes for reactivity.\n const [viewSnapshot] = useObject(view);\n\n const projectionModel = useMemo(() => {\n // Use reactive and mutable version of json schema when schema is mutable.\n const jsonSchema = schema instanceof EchoSchema ? schema.jsonSchema : toJsonSchema(schema);\n\n // Always use createEchoChangeCallback since the view is ECHO-backed.\n // Pass schema only when mutable to allow schema mutations.\n const change = createEchoChangeCallback(view, schema instanceof EchoSchema ? schema : undefined);\n\n const model = new ProjectionModel({\n registry: atomRegistry,\n view,\n baseSchema: jsonSchema,\n change,\n });\n\n return model;\n }, [atomRegistry, schema, view]);\n\n const [expandedField, setExpandedField] = useState<View.FieldType['id']>();\n\n const handleAdd = useCallback(() => {\n invariant(!readonly);\n const field = projectionModel.createFieldProjection();\n setExpandedField(field.id);\n }, [projectionModel, readonly]);\n\n const handleToggleField = useCallback(\n (field: View.FieldType) => {\n setExpandedField((prevExpandedFieldId) => (prevExpandedFieldId === field.id ? undefined : field.id));\n },\n [readonly],\n );\n\n const handleDelete = useCallback(\n (fieldId: string) => {\n invariant(!readonly);\n if (fieldId === expandedField) {\n setExpandedField(undefined);\n }\n\n onDelete?.(fieldId);\n },\n [expandedField, onDelete, readonly],\n );\n\n const handleMove = useCallback(\n (fromIndex: number, toIndex: number) => {\n invariant(!readonly);\n Obj.change(view, (v) => {\n // NOTE(ZaymonFC): Using arrayMove here causes a race condition with the kanban model.\n const fields = [...v.projection.fields];\n const [moved] = fields.splice(fromIndex, 1);\n fields.splice(toIndex, 0, moved);\n v.projection.fields = fields;\n });\n },\n [view, readonly],\n );\n\n const handleClose = useCallback(() => setExpandedField(undefined), []);\n\n const handleHide = useCallback(\n (fieldId: string) => {\n setExpandedField(undefined);\n projectionModel.hideFieldProjection(fieldId);\n },\n [projectionModel],\n );\n\n const handleShow = useCallback(\n (property: string) => {\n setExpandedField(undefined);\n projectionModel.showFieldProjection(property as JsonProp);\n },\n [projectionModel],\n );\n\n if (!viewSnapshot) {\n return null;\n }\n\n return (\n <List.Root<View.FieldType>\n items={viewSnapshot.projection.fields as View.FieldType[]}\n isItem={Schema.is(View.FieldSchema)}\n getId={(field) => field.id}\n onMove={readonly ? undefined : handleMove}\n readonly={readonly}\n >\n {({ items: fields }) => (\n <>\n {showHeading && <h3 className='text-sm'>{t('field path label')}</h3>}\n <div role='list' className='grid grid-cols-[min-content_1fr_min-content_min-content_min-content]'>\n {fields?.map((field) => {\n const hidden = field.visible === false;\n return (\n <List.Item<View.FieldType>\n key={field.id}\n item={field}\n classNames={'grid grid-cols-subgrid col-span-5'}\n aria-expanded={expandedField === field.id}\n >\n <div\n role='none'\n className={mx(\n subtleHover,\n 'grid grid-cols-subgrid col-span-5',\n 'rounded-xs cursor-pointer min-h-10',\n )}\n >\n <List.ItemDragHandle disabled={readonly || schemaReadonly} />\n <List.ItemTitle classNames={hidden && 'text-subdued'} onClick={() => handleToggleField(field)}>\n {field.path}\n </List.ItemTitle>\n <List.ItemIconButton\n label={t(hidden ? 'show field label' : 'hide field label')}\n data-testid={hidden ? 'show-field-button' : 'hide-field-button'}\n icon={hidden ? 'ph--eye-closed--regular' : 'ph--eye--regular'}\n autoHide={false}\n disabled={readonly || (!hidden && projectionModel.getFields().length <= 1)}\n onClick={() => (hidden ? handleShow(field.path) : handleHide(field.id))}\n />\n {!readonly && (\n <>\n <List.ItemDeleteButton\n label={t('delete field label')}\n autoHide={false}\n disabled={readonly || schemaReadonly || viewSnapshot.projection.fields.length <= 1}\n onClick={() => handleDelete(field.id)}\n data-testid='field.delete'\n />\n <List.ItemIconButton\n iconOnly\n variant='ghost'\n label={t('toggle expand label', { ns: osTranslations })}\n icon={expandedField === field.id ? 'ph--caret-down--regular' : 'ph--caret-right--regular'}\n onClick={() => handleToggleField(field)}\n data-testid='field.toggle'\n />\n </>\n )}\n </div>\n {expandedField === field.id && !readonly && (\n <div role='none' className='col-span-5 mt-1 mb-1 border border-separator rounded-md'>\n <FieldEditor\n readonly={readonly || schemaReadonly}\n registry={registry}\n projection={projectionModel}\n field={field}\n onSave={handleClose}\n />\n </div>\n )}\n </List.Item>\n );\n })}\n </div>\n {!readonly && !expandedField && (\n <div role='none' className='my-form-padding'>\n <IconButton\n icon='ph--plus--regular'\n label={t('add property button label')}\n onClick={handleAdd}\n disabled={viewSnapshot.projection.fields.length >= VIEW_FIELD_LIMIT}\n classNames='w-full'\n />\n </div>\n )}\n </>\n )}\n </List.Root>\n );\n};\n\nconst customFields = ({\n types,\n tags,\n}: Pick<ViewEditorProps, 'types' | 'tags'>): Record<string, FormFieldComponent> => ({\n query: ({ type, readonly, label, getValue, onValueChange }: FormFieldComponentProps) => {\n const handleChange = useCallback<NonNullable<QueryFormProps['onChange']>>(\n (query) => onValueChange(type, query.ast),\n [onValueChange],\n );\n\n return (\n <Input.Root>\n <FormFieldLabel readonly={readonly} label={label} />\n <QueryForm initialQuery={getValue()} types={types} tags={tags} onChange={handleChange} />\n </Input.Root>\n );\n },\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["translationKey", "translations", "React", "useCallback", "useEffect", "useMemo", "useState", "Obj", "Format", "FormatEnums", "formatToType", "log", "useAsyncEffect", "useTranslation", "formatToAdditionalPropertyAttributes", "getFormatSchema", "Format", "GeoLocation", "TypeEnum", "parseValue", "type", "format", "value", "undefined", "parseScalar", "TypeEnum", "Boolean", "lowercaseValue", "toLowerCase", "Number", "cleaned", "replace", "num", "isNaN", "String", "Ref", "Format", "TypeFormat", "Percent", "Currency", "Markdown", "Error", "DateTime", "Date", "Time", "Timestamp", "date", "getTime", "GeoPoint", "parts", "split", "length", "lat", "parseFloat", "long", "GeoLocation", "toGeoPoint", "latitude", "longitude", "cellClassesForFieldType", "Duration", "JSON", "DID", "pathNotUniqueError", "path", "message", "format", "formatDate", "Format", "GeoLocation", "TypeEnum", "formatForDisplay", "type", "format", "value", "locale", "undefined", "formatScalar", "TypeEnum", "Boolean", "toLocaleString", "toUpperCase", "Number", "String", "Ref", "Format", "TypeFormat", "Percent", "Currency", "style", "currency", "minimumFractionDigits", "maximumFractionDigits", "Date", "formatDate", "error", "Time", "DateTime", "GeoPoint", "Array", "isArray", "length", "every", "isFinite", "latitude", "longitude", "GeoLocation", "fromGeoPoint", "formatForEditing", "date", "toISOString", "split", "Option", "Annotation", "getProperties", "getFormProperties", "ast", "getProperties", "filter", "prop", "Annotation", "FormInputAnnotation", "getFromAst", "type", "pipe", "getOrElse", "Ref", "getArrayElementType", "isArrayType", "getRefProps", "ast", "isArrayType", "elementType", "getArrayElementType", "Ref", "isRefType", "isArray", "undefined", "Option", "SchemaAST", "React", "useCallback", "findNode", "getArrayElementType", "getDiscriminatedType", "isDiscriminatedUnion", "isNestedType", "IconButton", "useTranslation", "createContext", "Schema", "SchemaAST", "React", "useEffect", "useMemo", "useRef", "createJsonPath", "getValue", "getValue$", "IconButton", "ScrollArea", "useTranslation", "mx", "useControllableState", "useCallback", "useEffect", "useMemo", "useState", "createJsonPath", "fromEffectValidationPath", "getValue", "getValue$", "log", "useDefaultValue", "validateSchema", "useFormHandler", "schema", "autoSave", "values", "valuesProp", "defaultValues", "defaultValuesProp", "onValuesChanged", "onValidate", "onSave", "onCancel", "props", "changed", "setChanged", "touched", "setTouched", "errors", "setErrors", "saving", "setSaving", "values$", "setValues", "prop", "defaultProp", "onChange", "undefined", "validate", "length", "validatedValues", "flatMap", "valid", "schemaChanged", "setSchemaChanged", "isValid", "Object", "keys", "canSave", "entries", "some", "path", "isTouched", "errorPath", "startsWith", "handleSave", "handleCancel", "getStatus", "jsonPath", "Array", "isArray", "_", "error", "find", "status", "onValueChange", "type", "value", "pathArray", "parsedValue", "_tag", "parseFloat", "err", "catch", "newValues", "mergeAtPath", "newChanged", "prev", "onBlur", "obj", "head", "rest", "child", "copy", "reduce", "result", "message", "useCallback", "useEffect", "addEventListener", "useKeyHandler", "formElement", "form", "handleKeyDown", "useCallback", "event", "key", "metaKey", "canSave", "onSave", "isValid", "autoSave", "useEffect", "addEventListener", "React", "Component", "Icon", "Input", "Tooltip", "inputTextLabel", "FormFieldLabel", "label", "error", "readonly", "asChild", "Label", "Input", "div", "role", "className", "inputTextLabel", "Tooltip", "Trigger", "content", "side", "Icon", "icon", "size", "classNames", "displayName", "FormFieldWrapper", "props", "children", "layout", "getStatus", "getValue", "status", "value", "str", "String", "Root", "validationValence", "p", "DescriptionAndValidation", "Validation", "FormFieldErrorBoundary", "Component", "getDerivedStateFromError", "state", "undefined", "componentDidUpdate", "prevProps", "path", "resetError", "render", "span", "join", "setState", "React", "useMemo", "Match", "Option", "Schema", "SchemaAST", "String", "React", "useMemo", "Format", "createJsonPath", "findNode", "getAnnotation", "getDiscriminatedType", "isArrayType", "isDiscriminatedUnion", "isLiteralUnion", "isNestedType", "useTranslation", "FormField", "props", "type", "name", "path", "projection", "fieldMap", "fieldProvider", "readonly", "layout", "createOptionLabel", "createOptionIcon", "createInitialValuePath", "db", "schemaHook", "getOptions", "getRefOptions", "onCreate", "t", "useTranslation", "translationKey", "title", "getAnnotation", "TitleAnnotationId", "description", "DescriptionAnnotationId", "examples", "ExamplesAnnotationId", "label", "useMemo", "capitalize", "placeholder", "length", "fieldState", "useFormFieldState", "displayName", "fieldProps", "format", "Format", "FormatAnnotation", "getFromAst", "pipe", "annotation", "getOrUndefined", "jsonPath", "createJsonPath", "CustomField", "React", "component", "schema", "make", "prop", "isArrayType", "ArrayField", "Field", "getFormField", "options", "fieldProjections", "getFieldProjections", "fieldProjection", "find", "fp", "field", "selectOptions", "SelectField", "map", "option", "selectOption", "so", "id", "globalThis", "String", "value", "toString", "refProps", "getRefProps", "RefField", "isNestedType", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "getValue", "isTypeLiteral", "FormFieldSet", "formatField", "withReturnType", "when", "TypeFormat", "GeoPoint", "GeoPointField", "Markdown", "MarkdownField", "Text", "TextAreaField", "orElse", "undefined", "_tag", "TextField", "NumberField", "BooleanField", "ast", "isLiteralUnion", "types", "literal", "filter", "v", "OptionsAnnotation", "FORM_FIELDSET_NAME", "FormFieldSet", "label", "schema", "readonly", "path", "sort", "exclude", "projection", "layout", "props", "values", "useFormValues", "properties", "useMemo", "schemaProps", "getFormProperties", "ast", "filteredProps", "fieldProjections", "getFieldProjections", "hiddenProperties", "Set", "getHiddenProperties", "visibleProps", "filter", "prop", "has", "name", "toString", "orderedProps", "fieldProjection", "fieldPath", "String", "field", "find", "p", "push", "projectionPaths", "map", "remainingProps", "a", "b", "indexOf", "React", "FormFieldLabel", "asChild", "property", "FormFieldErrorBoundary", "key", "FormField", "type", "displayName", "omitId", "schema", "pipe", "omit", "FormContextProvider", "useFormContext", "createContext", "useFormValues", "componentName", "path", "defaultValue", "stablePath", "useMemo", "join", "undefined", "jsonPath", "createJsonPath", "form", "values", "onValueChange", "value", "getValue$", "lastAppliedPathRef", "useRef", "useEffect", "current", "stringKeyword", "useFormFieldState", "Array", "isArray", "getStatus", "getValue", "onBlur", "ast", "FormRoot", "children", "onSave", "onCancel", "props", "useFormHandler", "React", "displayName", "FORM_VIEWPORT_NAME", "FormViewport", "classNames", "margin", "padding", "thin", "ScrollArea", "Root", "orientation", "Viewport", "FORM_CONTENT_NAME", "FormContent", "testId", "ref", "useKeyHandler", "div", "role", "className", "mx", "data-testid", "FORM_FIELDSET_NAME", "FormFieldSet", "contextProps", "NaturalFormFieldSet", "FORM_ACTIONS_NAME", "FormActions", "t", "useTranslation", "translationKey", "canSave", "readonly", "layout", "IconButton", "icon", "iconEnd", "label", "onClick", "type", "variant", "disabled", "FORM_SUBMIT_NAME", "FormSubmit", "Form", "Content", "FieldSet", "Label", "FormFieldLabel", "Actions", "Submit", "ArrayField", "type", "path", "label", "readonly", "layout", "fieldProps", "inputProps", "props", "t", "useTranslation", "translationKey", "elementType", "getArrayElementType", "onValueChange", "values", "useFormValues", "displayName", "getDefaultObjectValue", "typeNode", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "isTypeLiteral", "Object", "fromEntries", "getFormProperties", "map", "prop", "defaultValue", "getDefaultAnnotation", "pipe", "annotation", "getOrUndefined", "name", "handleAdd", "useCallback", "isNestedType", "getDefaultValue", "handleDelete", "idx", "filter", "_", "i", "length", "React", "FormFieldLabel", "asChild", "div", "role", "className", "index", "key", "FormField", "autoFocus", "IconButton", "icon", "iconOnly", "onClick", "classNames", "ast", "_tag", "f", "Error", "React", "useCallback", "Input", "BooleanField", "type", "readonly", "onValueChange", "props", "handleChange", "useCallback", "value", "React", "FormFieldWrapper", "Input", "Switch", "disabled", "checked", "onCheckedChange", "React", "useCallback", "useEffect", "useMemo", "useState", "GeoLocation", "Input", "useTranslation", "safeParseFloat", "GeoPointField", "type", "label", "readonly", "layout", "getStatus", "getValue", "onValueChange", "onBlur", "t", "useTranslation", "translationKey", "status", "error", "geoPoint", "useMemo", "value", "GeoLocation", "fromGeoPoint", "longitudeText", "setLongitudeText", "useState", "longitude", "toString", "latitudeText", "setLatitudeText", "latitude", "useEffect", "location", "handleChange", "useCallback", "coordinateType", "setText", "event", "inputText", "target", "coord", "safeParseFloat", "undefined", "isNaN", "currentLocation", "newLocation", "newValue", "toGeoPoint", "React", "Input", "Root", "validationValence", "FormFieldLabel", "asChild", "LatLng", "div", "role", "className", "Label", "TextInput", "step", "min", "max", "disabled", "placeholder", "onChange", "latHem", "lngHem", "span", "Math", "abs", "toFixed", "React", "useCallback", "useEffect", "useRef", "Input", "MarkdownField", "type", "readonly", "label", "placeholder", "layout", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "textareaRef", "useRef", "adjustHeight", "useCallback", "textarea", "current", "style", "blockSize", "scrollHeight", "useEffect", "handleChange", "event", "target", "value", "React", "Input", "Root", "validationValence", "FormFieldLabel", "p", "TextArea", "ref", "disabled", "classNames", "onChange", "resize", "spellCheck", "Validation", "React", "useCallback", "Input", "safeParseFloat", "NumberField", "type", "readonly", "placeholder", "onValueChange", "onBlur", "props", "handleChange", "useCallback", "event", "safeParseFloat", "target", "value", "React", "FormFieldWrapper", "Input", "TextInput", "disabled", "onChange", "React", "useCallback", "useMemo", "Entity", "Filter", "Obj", "Ref", "Type", "ReferenceAnnotationId", "useQuery", "useSchema", "useSchema$", "findAnnotation", "DXN", "DxAnchor", "Button", "Icon", "Input", "useTranslation", "ParentLabelAnnotationId", "mx", "React", "forwardRef", "useCallback", "useState", "Popover", "useTranslation", "Combobox", "useSearchListInput", "useSearchListResults", "CreateItem", "createOptionLabel", "createOptionIcon", "onCreateItemSelect", "t", "useTranslation", "translationKey", "query", "useSearchListInput", "React", "Combobox", "Item", "value", "label", "ns", "text", "icon", "classNames", "closeOnSelect", "onSelect", "ObjectPickerContent", "forwardRef", "options", "selectedIds", "createSchema", "createInitialValuePath", "onCreate", "props", "ref", "showForm", "setShowForm", "useState", "formInitialValue", "setFormInitialValue", "results", "handleSearch", "useSearchListResults", "items", "handleFormSave", "useCallback", "values", "handleFormCancel", "handleKeyDown", "event", "key", "currentTarget", "querySelector", "stopPropagation", "preventDefault", "input", "currentQuery", "Content", "onSearch", "onKeyDownCapture", "Popover", "Viewport", "Form", "Root", "testId", "schema", "onSave", "onCancel", "FieldSet", "Actions", "Input", "placeholder", "autoFocus", "List", "map", "option", "id", "checked", "includes", "Arrow", "displayName", "ObjectPicker", "Portal", "Trigger", "VirtualTrigger", "isRefSnapshot", "val", "defaultGetOptions", "results", "parentLabel", "map", "result", "id", "Entity", "getDXN", "toString", "parent", "Obj", "getParent", "undefined", "label", "getLabel", "defaultResultsHook", "db", "typename", "useQuery", "Type", "getTypename", "Unknown", "Filter", "everything", "nothing", "RefField", "props", "type", "readonly", "placeholder", "layout", "getStatus", "getValue", "createOptionLabel", "createOptionIcon", "createInitialValuePath", "resultsHook", "useResults", "schemaHook", "useSchema", "useSchema$", "getOptions", "onCreate", "onValueChange", "t", "useTranslation", "translationKey", "status", "error", "useMemo", "findAnnotation", "ReferenceAnnotationId", "options", "ParentLabelAnnotationId", "handleGetValue", "useCallback", "formValue", "unknownToRefOption", "value", "isRef", "Ref", "dxnString", "dxn", "matchingOption", "find", "option", "handleUpdate", "item", "ref", "fromDXN", "DXN", "parse", "selectedIds", "createSchema", "handleCreate", "values", "handleSelect", "React", "Input", "Root", "validationValence", "FormFieldLabel", "div", "p", "className", "mx", "DxAnchor", "key", "rootclassname", "ObjectPicker", "Trigger", "asChild", "classNames", "TextInput", "readOnly", "Button", "role", "span", "Icon", "size", "icon", "Portal", "Content", "omitId", "onSelect", "DescriptionAndValidation", "React", "useCallback", "Input", "Select", "SelectField", "type", "readonly", "label", "layout", "placeholder", "options", "getStatus", "getValue", "onValueChange", "status", "error", "value", "handleValueChange", "useCallback", "React", "Input", "Root", "validationValence", "FormFieldLabel", "p", "find", "optionValue", "String", "Select", "TriggerButton", "classNames", "disabled", "Portal", "Content", "Viewport", "map", "Option", "key", "Arrow", "DescriptionAndValidation", "React", "useCallback", "useEffect", "useRef", "useState", "PublicKey", "IconButton", "Input", "Tag", "useTranslation", "List", "HuePicker", "hues", "osTranslations", "subtleHover", "SelectOptionField", "type", "readonly", "label", "getStatus", "getValue", "onValueChange", "t", "useTranslation", "translationKey", "status", "error", "selected", "setSelectedId", "useState", "isNewOption", "setIsNewOption", "inputRef", "useRef", "options", "useEffect", "undefined", "randomHue", "usedHues", "Set", "map", "option", "color", "unusedHues", "hues", "filter", "hue", "has", "length", "Math", "floor", "random", "lastThree", "slice", "availableHues", "handleAdd", "useCallback", "newId", "PublicKey", "truncate", "newOption", "id", "title", "handleDelete", "newOptions", "handleMove", "from", "to", "removed", "splice", "handleClick", "current", "handleTitleChange", "e", "o", "target", "value", "handleKeyDown", "ev", "key", "handleColorChange", "focus", "React", "Input", "Root", "validationValence", "FormFieldLabel", "div", "role", "List", "items", "isItem", "_item", "onMove", "className", "item", "Item", "classNames", "subtleHover", "aria-expanded", "ItemDragHandle", "disabled", "ItemTitle", "onClick", "Tag", "palette", "IconButton", "iconOnly", "variant", "ns", "osTranslations", "icon", "Label", "TextInput", "placeholder", "ref", "onChange", "onKeyDown", "HuePicker", "React", "useCallback", "Input", "TextField", "type", "readonly", "placeholder", "onValueChange", "onBlur", "props", "handleChange", "useCallback", "event", "target", "value", "React", "FormFieldWrapper", "Input", "TextInput", "noAutoFill", "disabled", "onChange", "React", "useCallback", "Input", "TextAreaField", "type", "readonly", "placeholder", "onValueChange", "onBlur", "props", "handleChange", "useCallback", "event", "target", "value", "React", "FormFieldWrapper", "Input", "TextArea", "rows", "disabled", "onChange", "React", "Input", "mx", "safeParseFloat", "gridCols", "TupleField", "binding", "type", "readonly", "label", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "values", "React", "Input", "Root", "validationValence", "FormFieldLabel", "div", "className", "mx", "length", "map", "prop", "TextInput", "key", "disabled", "value", "onChange", "event", "safeParseFloat", "target", "FieldEditor", "readonly", "projection", "field", "registry", "view", "onSave", "onCancel", "t", "useTranslation", "translationKey", "props", "setProps", "useState", "getFieldProjection", "id", "useEffect", "schemas", "setSchemas", "useAsyncEffect", "subscription", "query", "subscribe", "results", "fire", "run", "referenceSchema", "setReferenceSchema", "find", "schema", "typename", "fieldSchema", "setFieldSchema", "getFormatSchema", "format", "fieldMap", "useMemo", "React", "SelectField", "options", "FormatEnums", "filter", "value", "Format", "TypeFormat", "None", "map", "label", "getFormProperties", "ast", "sort", "a", "b", "name", "toString", "localeCompare", "p", "SelectOptionField", "propIsNotType", "useCallback", "prop", "handleValuesChanged", "_props", "prev", "newSchema", "type", "formatToType", "additionalProps", "formatToAdditionalPropertyAttributes", "handleValidate", "property", "getFields", "f", "path", "message", "handleSave", "Obj", "change", "setFieldProjection", "handleCancel", "requestAnimationFrame", "log", "warn", "Form", "Root", "key", "autoFocus", "values", "exclude", "onValuesChanged", "onValidate", "Content", "FieldSet", "Actions", "React", "Button", "Input", "ScrollArea", "toLocalizedString", "useTranslation", "mx", "SETTINGS_ROOT_NAME", "SETTINGS_SECTION_NAME", "SETTINGS_SECTION_HEADING_NAME", "SETTINGS_GROUP_NAME", "SETTINGS_GROUP_BUTTON_NAME", "SETTINGS_CONTAINER_NAME", "SETTINGS_FRAME_NAME", "SETTINGS_FRAME_ITEM_NAME", "SETTINGS_ITEM_NAME", "SETTINGS_ITEM_INPUT_NAME", "styles", "title", "description", "grid", "SettingsRoot", "children", "React", "ScrollArea", "Root", "className", "orientation", "margin", "Viewport", "classNames", "displayName", "SettingsSection", "SettingsSectionHeading", "div", "t", "useTranslation", "translationKey", "h2", "toLocalizedString", "p", "SettingsGroupButton", "props", "Button", "SettingsGroup", "role", "mx", "SettingsFrame", "SettingsFrameItem", "h3", "SettingsContainer", "SettingsItem", "SettingsItemInput", "Input", "Label", "DescriptionAndValidation", "Description", "Settings", "Section", "SectionHeading", "Group", "GroupButton", "Container", "Frame", "FrameItem", "Item", "ItemInput", "RegistryContext", "Array", "Match", "Option", "Schema", "React", "forwardRef", "useCallback", "useContext", "useImperativeHandle", "useMemo", "useState", "Entity", "Feed", "Filter", "Format", "Obj", "Query", "QueryAST", "Ref", "View", "EchoSchema", "isMutable", "toJsonSchema", "invariant", "useObject", "useQuery", "IconButton", "Input", "Message", "useTranslation", "QueryForm", "List", "ParentLabelAnnotation", "ProjectionModel", "VIEW_FIELD_LIMIT", "createEchoChangeCallback", "getTypenameFromQuery", "mx", "osTranslations", "subtleHover", "ViewEditor", "forwardRef", "classNames", "schema", "view", "mode", "registry", "db", "readonly", "showHeading", "types", "tags", "onQueryChanged", "onDelete", "forwardedRef", "atomRegistry", "useContext", "RegistryContext", "schemaReadonly", "isMutable", "t", "useTranslation", "translationKey", "projectionModel", "useMemo", "jsonSchema", "EchoSchema", "toJsonSchema", "change", "createEchoChangeCallback", "undefined", "model", "ProjectionModel", "baseSchema", "useImperativeHandle", "queueTarget", "value", "query", "ast", "pipe", "when", "type", "from", "_tag", "fromNullable", "scope", "queues", "flatMap", "head", "map", "String", "getOrUndefined", "orElse", "feeds", "useQuery", "Filter", "Feed", "targetRef", "feed", "find", "getQueueDxn", "toString", "Ref", "fromDXN", "Entity", "getDXN", "viewSchema", "base", "Struct", "Format", "URL", "annotations", "title", "QueryAST", "Query", "fields", "target", "ParentLabelAnnotation", "set", "optional", "mutable", "viewValues", "getTypenameFromQuery", "fieldMap", "customFields", "handleUpdate", "useCallback", "values", "targetValue", "queueDxn", "isRef", "feedDxn", "dxn", "Obj", "select", "typename", "JSON", "parse", "stringify", "handleDelete", "fieldId", "invariant", "React", "div", "role", "className", "mx", "Message", "Root", "valence", "Title", "Form", "onValuesChanged", "FieldSet", "FormFieldLabel", "label", "asChild", "FieldList", "viewSnapshot", "useObject", "expandedField", "setExpandedField", "useState", "handleAdd", "field", "createFieldProjection", "id", "handleToggleField", "prevExpandedFieldId", "handleMove", "fromIndex", "toIndex", "v", "projection", "moved", "splice", "handleClose", "handleHide", "hideFieldProjection", "handleShow", "property", "showFieldProjection", "List", "items", "isItem", "is", "View", "FieldSchema", "getId", "onMove", "h3", "hidden", "visible", "Item", "key", "item", "aria-expanded", "subtleHover", "ItemDragHandle", "disabled", "ItemTitle", "onClick", "path", "ItemIconButton", "data-testid", "icon", "autoHide", "getFields", "length", "ItemDeleteButton", "iconOnly", "variant", "ns", "osTranslations", "FieldEditor", "onSave", "IconButton", "VIEW_FIELD_LIMIT", "getValue", "onValueChange", "handleChange", "Input", "QueryForm", "initialQuery", "onChange"]
7
7
  }