@dxos/react-ui-form 0.8.4-main.dedc0f3 → 0.8.4-main.e8ec1fe
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +480 -300
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +480 -300
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts +5 -5
- package/dist/types/src/components/ControlSection/ControlSection.stories.d.ts.map +1 -1
- package/dist/types/src/components/FieldEditor/FieldEditor.d.ts.map +1 -1
- package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts +5 -5
- package/dist/types/src/components/FieldEditor/FieldEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/Form/ArrayField.d.ts.map +1 -1
- package/dist/types/src/components/Form/Form.d.ts +4 -3
- package/dist/types/src/components/Form/Form.d.ts.map +1 -1
- package/dist/types/src/components/Form/Form.stories.d.ts +15 -15
- package/dist/types/src/components/Form/Form.stories.d.ts.map +1 -1
- package/dist/types/src/components/Form/FormContent.d.ts +5 -5
- package/dist/types/src/components/Form/FormContent.d.ts.map +1 -1
- package/dist/types/src/components/Form/FormContext.d.ts +2 -2
- package/dist/types/src/components/Form/FormContext.d.ts.map +1 -1
- package/dist/types/src/components/Form/Input.d.ts +1 -1
- package/dist/types/src/components/Form/Input.d.ts.map +1 -1
- package/dist/types/src/components/Form/RefField.d.ts +10 -6
- package/dist/types/src/components/Form/RefField.d.ts.map +1 -1
- package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts +5 -5
- package/dist/types/src/components/Form/custom/SelectOptionsInput.stories.d.ts.map +1 -1
- package/dist/types/src/components/Form/factory.d.ts +1 -1
- package/dist/types/src/components/Form/factory.d.ts.map +1 -1
- package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts +41 -0
- package/dist/types/src/components/ObjectPicker/ObjectPicker.d.ts.map +1 -0
- package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts +81 -0
- package/dist/types/src/components/ObjectPicker/ObjectPicker.stories.d.ts.map +1 -0
- package/dist/types/src/components/ObjectPicker/index.d.ts +2 -0
- package/dist/types/src/components/ObjectPicker/index.d.ts.map +1 -0
- package/dist/types/src/components/ViewEditor/ViewEditor.d.ts +20 -7
- package/dist/types/src/components/ViewEditor/ViewEditor.d.ts.map +1 -1
- package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts +10 -10
- package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useForm.d.ts +2 -2
- package/dist/types/src/hooks/useForm.d.ts.map +1 -1
- package/dist/types/src/hooks/useQueryRefOptions.d.ts +9 -3
- package/dist/types/src/hooks/useQueryRefOptions.d.ts.map +1 -1
- package/dist/types/src/hooks/useRefQueryLookupHandler.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +4 -4
- package/dist/types/src/util/field.d.ts +1 -1
- package/dist/types/src/util/field.d.ts.map +1 -1
- package/dist/types/src/util/formatting.d.ts +1 -1
- package/dist/types/src/util/formatting.d.ts.map +1 -1
- package/dist/types/src/util/refs.d.ts +1 -1
- package/dist/types/src/util/refs.d.ts.map +1 -1
- package/dist/types/src/util/schema.d.ts +1 -1
- package/dist/types/src/util/schema.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +40 -39
- package/src/components/ControlSection/ControlSection.stories.tsx +4 -5
- package/src/components/ControlSection/ControlSection.tsx +1 -1
- package/src/components/FieldEditor/FieldEditor.stories.tsx +6 -5
- package/src/components/FieldEditor/FieldEditor.tsx +5 -2
- package/src/components/Form/ArrayField.tsx +4 -3
- package/src/components/Form/Defaults.tsx +1 -1
- package/src/components/Form/Form.stories.tsx +35 -35
- package/src/components/Form/Form.tsx +16 -6
- package/src/components/Form/FormActions.tsx +2 -2
- package/src/components/Form/FormContent.tsx +82 -22
- package/src/components/Form/FormContext.tsx +3 -3
- package/src/components/Form/Input.tsx +1 -1
- package/src/components/Form/RefField.tsx +48 -64
- package/src/components/Form/custom/GeoPointInput.tsx +1 -1
- package/src/components/Form/custom/SelectOptionsInput.stories.tsx +5 -6
- package/src/components/Form/custom/SelectOptionsInput.tsx +2 -2
- package/src/components/Form/factory.tsx +1 -1
- package/src/components/ObjectPicker/ObjectPicker.stories.tsx +207 -0
- package/src/components/ObjectPicker/ObjectPicker.tsx +161 -0
- package/src/components/ObjectPicker/index.ts +5 -0
- package/src/components/ViewEditor/ViewEditor.stories.tsx +107 -59
- package/src/components/ViewEditor/ViewEditor.test.tsx +6 -5
- package/src/components/ViewEditor/ViewEditor.tsx +275 -231
- package/src/components/index.ts +1 -0
- package/src/components/testing.tsx +2 -2
- package/src/hooks/useForm.ts +7 -4
- package/src/hooks/useQueryRefOptions.ts +15 -6
- package/src/hooks/useRefQueryLookupHandler.ts +3 -3
- package/src/translations.ts +4 -4
- package/src/util/field.ts +1 -1
- package/src/util/formatting.ts +1 -1
- package/src/util/refs.ts +7 -7
- package/src/util/schema.ts +2 -4
|
@@ -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/components/Form/custom/GeoPointInput.tsx", "../../../src/components/Form/Input.tsx", "../../../src/components/Form/custom/SelectOptionsInput.tsx", "../../../src/components/Form/custom/TupleInput.tsx", "../../../src/components/Form/Defaults.tsx", "../../../src/components/Form/Form.tsx", "../../../src/components/Form/FormActions.tsx", "../../../src/components/Form/FormContext.tsx", "../../../src/hooks/useForm.ts", "../../../src/hooks/useRefQueryLookupHandler.ts", "../../../src/hooks/useQueryRefOptions.ts", "../../../src/components/Form/FormContent.tsx", "../../../src/util/field.ts", "../../../src/util/formatting.ts", "../../../src/util/refs.ts", "../../../src/util/schema.ts", "../../../src/components/Form/ArrayField.tsx", "../../../src/components/Form/factory.tsx", "../../../src/components/Form/RefField.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 = '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 'button add property': '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 placeholder_one': 'Select…',\n 'ref field placeholder_other': 'Select items…',\n\n // TODO(burdon): Factor out?\n 'button cancel': 'Cancel',\n 'button save': '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 latlng': '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 // GeoPointInput.\n 'latitude label': 'Latitude',\n 'longitude label': 'Longitude',\n\n // SelectOptionsInput.\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 record type',\n 'system schema description':\n 'This is a system record type and cannot be modified, though the view can still be configured.',\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 { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { translationKey } from '../../translations';\n\nexport type ControlPageProps = ThemedClassName<ComponentPropsWithoutRef<'div'>>;\n\nexport const ControlPage = ({ children, classNames, ...props }: ControlPageProps) => {\n return (\n <StackItem.Content classNames='block overflow-y-auto [--control-spacing:var(--dx-trimMd)]'>\n <div role='none' className={mx('pli-cardSpacingInline pbe-trimLg', classNames)} {...props}>\n {children}\n </div>\n </StackItem.Content>\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-trimLg 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 { type SchemaRegistry } from '@dxos/echo-db';\nimport { type EchoSchema, FormatEnum, FormatEnums, formatToType } from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\nimport { useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport {\n type FieldType,\n type ProjectionModel,\n type PropertyType,\n type SchemaProperty,\n getFormatSchema,\n getSchemaProperties,\n sortProperties,\n} from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { Form, type FormProps, type InputComponent, SelectInput, SelectOptionInput } from '../Form';\n\nexport type FieldEditorProps = {\n projection: ProjectionModel;\n field: FieldType;\n registry?: SchemaRegistry;\n onSave: () => void;\n onCancel?: () => void;\n} & Pick<FormProps<any>, 'outerSpacing' | 'readonly'>;\n\n/**\n * Displays a Form representing the metadata for a given `Field` and `View`.\n */\nexport const FieldEditor = ({\n readonly,\n projection,\n field,\n registry,\n onSave,\n onCancel,\n outerSpacing,\n}: 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 handleValuesChanged = useCallback<NonNullable<FormProps<PropertyType>['onValuesChanged']>>(\n (_props) => {\n // TODO(burdon): Callback should pass `changed` to indicate which fields have changed.\n // TODO(Zaymon): Workout why old and new format values are the same sometimes even when\n // 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 if (props.type !== type) {\n return { ...props, ..._props, type };\n }\n\n return _props as PropertyType;\n });\n },\n [schemas, props.format, props.referenceSchema],\n );\n\n const handleValidate = useCallback<NonNullable<FormProps<PropertyType>['onValidate']>>(\n ({ property }) => {\n if (property && projection.fields.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.fields, field],\n );\n\n const handleSave = useCallback<NonNullable<FormProps<PropertyType>['onSave']>>(\n (props) => {\n projection.setFieldProjection({ field, props });\n onSave();\n },\n [projection, field, onSave],\n );\n\n const handleCancel = useCallback<NonNullable<FormProps<PropertyType>['onCancel']>>(() => {\n // Need to defer to allow form to close.\n requestAnimationFrame(() => onCancel?.());\n onSave();\n }, [onSave]);\n\n const custom: Partial<Record<string, InputComponent>> = useMemo(\n () => ({\n ['format' satisfies keyof PropertyType]: (props) => (\n <SelectInput\n {...props}\n options={FormatEnums.filter((value) => value !== FormatEnum.None).map((value) => ({\n value,\n label: t(`format ${value}`),\n }))}\n />\n ),\n ['referenceSchema' satisfies keyof PropertyType]: (props) => (\n <SelectInput\n {...props}\n options={schemas.map((schema) => ({\n value: schema.typename,\n }))}\n />\n ),\n ['referencePath' satisfies keyof PropertyType]: (props) => (\n <SelectInput\n {...props}\n options={\n referenceSchema\n ? getSchemaProperties(referenceSchema.ast)\n .sort(sortProperties)\n .map((p) => ({ value: p.name }))\n : []\n }\n />\n ),\n ['options' satisfies keyof PropertyType]: (props) => <SelectOptionInput {...props} />,\n }),\n [t, schemas, referenceSchema],\n );\n\n const propIsNotType = useCallback(\n (props: SchemaProperty<PropertyType>[]) => props.filter((p) => p.name !== 'type'),\n [],\n );\n\n if (!fieldSchema) {\n log.warn('invalid format', { props });\n return null;\n }\n\n return (\n <Form<PropertyType>\n key={field.id}\n autoFocus\n readonly={readonly}\n values={props}\n schema={fieldSchema}\n filter={propIsNotType}\n sort={['property', 'format']}\n onValuesChanged={handleValuesChanged}\n onValidate={handleValidate}\n onSave={handleSave}\n onCancel={handleCancel}\n Custom={custom}\n outerSpacing={outerSpacing}\n />\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-schema';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { translationKey } from '../../../translations';\nimport { InputHeader, type InputProps } from '../Input';\n\nexport const GeoPointInput = ({ type, label, readonly, getStatus, getValue, onValueChange, onBlur }: InputProps) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const geoPoint = useMemo<GeoPoint>(() => getValue<GeoPoint>() ?? [0, 0], [getValue]);\n const geoLocation = useMemo(() => GeoLocation.fromGeoPoint(geoPoint), [geoPoint]);\n\n const [longitudeText, setLongitudeText] = useState(geoLocation.longitude?.toString());\n const [latitudeText, setLatitudeText] = useState(geoLocation.latitude?.toString());\n\n useEffect(() => {\n const location = GeoLocation.fromGeoPoint(geoPoint);\n setLongitudeText(location.longitude.toString());\n setLatitudeText(location.latitude.toString());\n }, [geoPoint]);\n\n const handleCoordinateChange = 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<GeoPoint>() ?? [0, 0]);\n const newLocation = { ...currentLocation, [coordinateType]: coord };\n const newValue = GeoLocation.toGeoPoint(newLocation);\n onValueChange(type, newValue);\n }\n }\n },\n [getValue, onValueChange, type],\n );\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error} label={label} />\n <div role='none' className='grid grid-cols-2 gap-2'>\n <div role='none'>\n <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 value={latitudeText}\n onChange={handleCoordinateChange('latitude', setLatitudeText)}\n onBlur={onBlur}\n />\n </div>\n <div role='none'>\n <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 value={longitudeText}\n onChange={handleCoordinateChange('longitude', setLongitudeText)}\n onBlur={onBlur}\n />\n </div>\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { type FormatEnum } from '@dxos/echo-schema';\nimport { type SimpleType } from '@dxos/effect';\nimport { Icon, Input, Tooltip } from '@dxos/react-ui';\nimport { labelSpacing } from '@dxos/react-ui-stack';\nimport { errorText, mx } from '@dxos/react-ui-theme';\n\nimport { type FormInputStateProps } from './FormContext';\n\n/**\n * Props passed to input components.\n */\nexport type InputProps = {\n type: SimpleType;\n format?: FormatEnum;\n label: string;\n placeholder?: string;\n inputOnly?: boolean;\n /**\n * Specifies the readonly variant: either disabled inputs, elements indicating they are usually editable but currently are not; or `static`, a field’s representation as regular content without signifiers that it is ever editable.\n */\n readonly?: 'disabled-input' | 'static' | false;\n} & FormInputStateProps;\n\n/**\n * Form input component.\n */\nexport type InputComponent = FC<InputProps>;\n\nexport type InputHeaderProps = {\n error?: string;\n label: string;\n readonly?: boolean;\n};\n\nexport const InputHeader = ({ error, label, readonly }: InputHeaderProps) => {\n const Label = readonly ? 'span' : Input.Label;\n const labelProps = readonly ? {} : { classNames: '!mlb-0' };\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", "//\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-schema';\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, subtleHover } from '@dxos/react-ui-theme';\n\nimport { translationKey } from '../../../translations';\nimport { InputHeader, type InputProps } from '../Input';\n\nexport const SelectOptionInput = ({ type, label, readonly, getStatus, getValue, onValueChange }: InputProps) => {\n const [selected, setSelectedId] = useState<string | null>(null);\n const [isNewOption, setIsNewOption] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const options = getValue<SelectOption[] | undefined>();\n\n // Initialization.\n useEffect(() => {\n if (options === undefined) {\n onValueChange(type, []);\n }\n }, [options, onValueChange, type]);\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((e: KeyboardEvent<HTMLInputElement>) => {\n if (e.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 <InputHeader error={error} 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-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: 'os' })}\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 data-no-submit\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 from 'react';\n\nimport { Input } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { InputHeader, type InputProps } from '../Input';\n\nconst gridCols = ['grid-cols-1', 'grid-cols-2', 'grid-cols-3', 'grid-cols-4'];\n\nexport const TupleInput = ({\n binding,\n type,\n label,\n readonly,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps & { binding: string[] }) => {\n const { status, error } = getStatus();\n\n // TODO(burdon): Generalize number/float/string, etc.\n const values: Record<string, number> = getValue<Record<string, number>>() ?? {};\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error} 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) => onValueChange(type, { ...values, [prop]: safeParseFloat(event.target.value, 0) })}\n onBlur={onBlur}\n />\n ))}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useRef } from 'react';\n\nimport { Input, Select, useTranslation } from '@dxos/react-ui';\n\nimport { translationKey } from '../../translations';\n\nimport { InputHeader, type InputProps } from './Input';\n\nexport const TextInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps) => {\n const { status, error } = getStatus();\n\n return readonly && !getValue() ? null : readonly === 'static' && inputOnly ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.TextInput\n disabled={!!readonly}\n placeholder={placeholder}\n value={getValue() ?? ''}\n onChange={(event) => onValueChange(type, event.target.value)}\n onBlur={onBlur}\n />\n )}\n {inputOnly && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n\nexport const NumberInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps) => {\n const { status, error } = getStatus();\n\n return readonly && !getValue() ? null : readonly === 'static' && inputOnly ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.TextInput\n type='number'\n disabled={!!readonly}\n placeholder={placeholder}\n value={getValue()}\n onChange={(event) => onValueChange(type, event.target.value)}\n onBlur={onBlur}\n />\n )}\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport const BooleanInput = ({ type, label, inputOnly, getStatus, getValue, onValueChange, readonly }: InputProps) => {\n const { status, error } = getStatus();\n const checked = Boolean(getValue());\n const { t } = useTranslation(translationKey);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{t(checked ? 'boolean input true value' : 'boolean input false value')}</p>\n ) : (\n <Input.Switch disabled={!!readonly} checked={checked} onCheckedChange={(value) => onValueChange(type, value)} />\n )}\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport type SelectInputOptions = InputProps & {\n options?: Array<{ value: string | number; label?: string }>;\n};\n\nexport const SelectInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n options,\n getStatus,\n getValue,\n onValueChange,\n}: SelectInputOptions) => {\n const { status, error } = getStatus();\n\n const value = getValue() as string | undefined;\n const handleValueChange = useCallback((value: string | number) => onValueChange(type, value), [type, onValueChange]);\n\n return readonly && !value ? null : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === '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 {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport const MarkdownInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps) => {\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 return (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.TextArea\n ref={textareaRef}\n disabled={!!readonly}\n placeholder={placeholder}\n value={getValue() ?? ''}\n classNames={'min-bs-auto max-h-40 overflow-auto'}\n onChange={(event) => onValueChange(type, event.target.value)}\n onBlur={onBlur}\n style={{ resize: 'none' }}\n spellCheck={false}\n />\n )}\n {inputOnly && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { type Schema } from 'effect';\nimport React, { type ReactElement, useEffect, useMemo, useRef } from 'react';\n\nimport { type BaseObject, type PropertyKey } from '@dxos/echo-schema';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { cardDialogOverflow, cardSpacing } from '@dxos/react-ui-stack';\nimport { type ProjectionModel, type SchemaProperty } from '@dxos/schema';\n\nimport { type FormOptions } from '../../hooks';\n\nimport { FormActions, type FormOuterSpacing } from './FormActions';\nimport { FormFields, type FormFieldsProps } from './FormContent';\nimport { FormProvider } from './FormContext';\nimport { type InputComponent, type InputProps } from './Input';\n\nexport type PropsFilter<T extends BaseObject> = (props: SchemaProperty<T>[]) => SchemaProperty<T>[];\n\nexport type ComponentLookup = (args: {\n prop: string;\n schema: Schema.Schema<any>;\n inputProps: InputProps;\n}) => ReactElement | undefined;\n\nexport type CustomInputMap = Partial<Record<string, InputComponent>>;\n\nexport type FormProps<T extends BaseObject> = ThemedClassName<{\n values: Partial<T>;\n // TODO(burdon): Autofocus first input.\n autoFocus?: boolean;\n // TODO(burdon): Change to JsonPath includes/excludes.\n filter?: PropsFilter<T>;\n sort?: PropertyKey<T>[];\n projection?: ProjectionModel;\n autoSave?: boolean;\n outerSpacing?: FormOuterSpacing;\n onCancel?: () => void;\n}> &\n Pick<FormOptions<T>, 'schema' | 'onValuesChanged' | 'onValidate' | 'onSave'> &\n FormFieldsProps;\n\nexport const Form = <T extends BaseObject>({\n classNames,\n testId,\n values: initialValues,\n autoFocus,\n readonly,\n autoSave,\n outerSpacing = true,\n schema,\n onCancel,\n onValuesChanged,\n onValidate,\n onSave,\n ...props\n}: FormProps<T>) => {\n const formRef = useRef<HTMLDivElement>(null);\n\n // Focus the first focusable element within this form.\n const { findFirstFocusable } = useFocusFinders();\n useEffect(() => {\n if (autoFocus && formRef.current) {\n const firstFocusable = findFirstFocusable(formRef.current);\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n }, [autoFocus]);\n\n // TODO(burdon): Name?\n const handleValid = useMemo(() => (autoSave ? onSave : undefined), [autoSave, onSave]);\n\n return (\n <FormProvider\n formRef={formRef}\n schema={schema}\n autoSave={autoSave}\n initialValues={initialValues}\n onValuesChanged={onValuesChanged}\n onValidate={onValidate}\n onValid={handleValid}\n onSave={onSave}\n >\n <div role='none' className='contents' data-testid={testId}>\n <FormFields\n {...props}\n ref={formRef}\n classNames={[\n outerSpacing === 'blockStart-0'\n ? 'pli-cardSpacingInline mbe-cardSpacingBlock [&>.mbs-inputSpacingBlock:first-child]:!mbs-0'\n : outerSpacing === 'scroll-fields'\n ? 'pli-cardSpacingInline pbe-cardSpacingBlock'\n : outerSpacing\n ? cardSpacing\n : false,\n outerSpacing === 'scroll-fields' && cardDialogOverflow,\n classNames,\n ]}\n readonly={readonly}\n schema={schema}\n />\n {(onCancel || onSave) && !autoSave && !readonly && (\n <FormActions readonly={readonly} onCancel={onCancel} outerSpacing={outerSpacing} />\n )}\n </div>\n </FormProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { IconButton, useTranslation } from '@dxos/react-ui';\nimport { cardSpacing } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { translationKey } from '../../translations';\n\nimport { useFormContext } from './FormContext';\n\nexport type FormOuterSpacing = boolean | 'blockStart-0' | 'scroll-fields';\n\nexport type FormActionsProps = {\n readonly?: boolean;\n onCancel?: () => void;\n outerSpacing?: FormOuterSpacing;\n};\n\nexport const FormActions = ({ readonly, onCancel, outerSpacing = true }: FormActionsProps) => {\n const { t } = useTranslation(translationKey);\n const { canSave, handleSave } = useFormContext();\n\n return (\n <div\n role='none'\n className={mx(\n outerSpacing === 'scroll-fields'\n ? 'pli-cardSpacingInline mbe-cardSpacingBlock'\n : outerSpacing\n ? cardSpacing\n : 'mbs-cardSpacingBlock',\n 'flex [&_button]:grow gap-1 first:mbs-0',\n )}\n >\n {onCancel && !readonly && (\n <IconButton data-testid='cancel-button' icon='ph--x--regular' label={t('button cancel')} onClick={onCancel} />\n )}\n {handleSave && (\n <IconButton\n type='submit'\n data-testid='save-button'\n disabled={!canSave}\n icon='ph--check--regular'\n label={t('button save')}\n onClick={handleSave}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, {\n type FocusEvent,\n type PropsWithChildren,\n type RefObject,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n} from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { type BaseObject, getValue } from '@dxos/echo-schema';\nimport { type SimpleType, createJsonPath } from '@dxos/effect';\n\nimport { type FormHandler, type FormOptions, useForm } from '../../hooks';\n\ntype FormContextValue<T extends BaseObject> = FormHandler<T>;\n\nconst FormContext = createContext<FormContextValue<any> | undefined>(undefined);\n\nexport const useFormContext = <T extends BaseObject>(): FormContextValue<T> => {\n return useContext(FormContext) ?? raise(new Error('Missing FormContext'));\n};\n\nexport const useFormValues = (path: (string | number)[] = []): any => {\n const { values: formValues } = useFormContext();\n const jsonPath = createJsonPath(path);\n return getValue(formValues, jsonPath) as BaseObject;\n};\n\nexport type FormInputStateProps = {\n getStatus: () => { status?: 'error'; error?: string };\n getValue: <V>() => V | undefined;\n onValueChange: (type: SimpleType, value: any) => void;\n onBlur: (event: FocusEvent<HTMLElement>) => void;\n};\n\nexport const useInputProps = (path: (string | number)[] = []): FormInputStateProps => {\n const { getStatus, getValue: getFormValue, onValueChange, onTouched } = useFormContext();\n\n const stablePath = useMemo(() => path, [Array.isArray(path) ? path.join('.') : path]);\n return useMemo(\n () => ({\n getStatus: () => getStatus(stablePath),\n getValue: () => getFormValue(stablePath),\n onValueChange: (type: SimpleType, value: any) => onValueChange(stablePath, type, value),\n onBlur: () => onTouched(stablePath),\n }),\n [getStatus, getFormValue, onValueChange, onTouched, stablePath],\n );\n};\n\nexport const FormProvider = ({\n children,\n formRef,\n autoSave,\n ...formOptions\n}: PropsWithChildren<\n FormOptions<any> & {\n formRef?: RefObject<HTMLDivElement>;\n autoSave?: boolean;\n }\n>) => {\n const form = useForm(formOptions);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const keyIsEnter = event.key === 'Enter';\n const modifierUsed = event.ctrlKey || event.altKey || event.metaKey || event.shiftKey;\n const inputIsTextarea = (event.target as HTMLElement).tagName.toLowerCase() === 'textarea';\n const inputOptOut =\n (event.target as HTMLElement).hasAttribute('data-no-submit') ||\n (event.target as HTMLElement).closest('[data-no-submit]') !== null;\n\n // Regular inputs: Submit on Enter (no modifiers).\n const shouldSubmitRegularInput = !inputIsTextarea && keyIsEnter && !modifierUsed;\n\n // Textareas: Submit only on Meta+Enter.\n const shouldSubmitTextarea = inputIsTextarea && keyIsEnter && event.metaKey;\n\n if ((shouldSubmitRegularInput || shouldSubmitTextarea) && !inputOptOut) {\n if (!autoSave && form.canSave) {\n form.handleSave();\n }\n if (autoSave && form.formIsValid) {\n (event.target as HTMLElement).blur();\n }\n }\n },\n [form, autoSave],\n );\n\n useEffect(() => {\n if (!formRef?.current) {\n return;\n }\n\n const formElement = formRef.current;\n\n formElement.addEventListener('keydown', handleKeyDown);\n return () => formElement.removeEventListener('keydown', handleKeyDown);\n }, [formRef, form.canSave, form.formIsValid, form.handleSave, autoSave]);\n\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Schema, SchemaAST } from 'effect';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type BaseObject, getValue, setValue } from '@dxos/echo-schema';\nimport { type JsonPath, type SimpleType, createJsonPath, fromEffectValidationPath } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type ValidationError, validateSchema } from '@dxos/schema';\nimport { type MaybePromise } from '@dxos/util';\n\n/**\n * Return type from `useForm` hook.\n */\nexport type FormHandler<T extends BaseObject> = {\n //\n // Form state management.\n //\n\n values: Partial<T>;\n errors: Record<JsonPath, string>;\n touched: Record<JsonPath, boolean>;\n changed: Record<JsonPath, boolean>;\n canSave: boolean;\n formIsValid: boolean;\n\n // TODO(burdon): Return onSave.\n handleSave: () => void;\n\n //\n // Form input component helpers.\n //\n\n getStatus: (path: string | (string | number)[]) => { status?: 'error'; error?: string };\n getValue: <V>(path: (string | number)[]) => V | undefined;\n onValueChange: <V>(path: (string | number)[], type: SimpleType, value: V) => void;\n onTouched: (path: (string | number)[]) => void;\n};\n\n/**\n * Hook options.\n */\nexport interface FormOptions<T extends BaseObject> {\n /**\n * Effect schema (Type literal).\n */\n schema: Schema.Schema<T, any>;\n\n /**\n * Initial values (which may not pass validation).\n */\n initialValues: Partial<T>;\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>) => 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 // TODO(burdon): Change to key x value?\n onValidate?: (values: T) => ValidationError[] | undefined;\n\n /**\n * Called when the form is valid.\n */\n onValid?: (values: T, meta: { changed: FormHandler<T>['changed'] }) => void;\n\n /**\n * Called when the form is submitted and passes validation.\n */\n onSave?: (values: T, meta: { changed: FormHandler<T>['changed'] }) => MaybePromise<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 useForm = <T extends BaseObject>({\n schema,\n initialValues,\n onValuesChanged,\n onValidate,\n onValid,\n onSave,\n}: FormOptions<T>): FormHandler<T> => {\n invariant(SchemaAST.isTypeLiteral(schema.ast));\n\n const [values, setValues] = useState<Partial<T>>(initialValues);\n\n useEffect(() => {\n setValues(initialValues);\n }, [initialValues]);\n\n const [touched, setTouched] = useState<Record<JsonPath, boolean>>(createKeySet(initialValues, false));\n const [changed, setChanged] = useState<Record<JsonPath, boolean>>(createKeySet(initialValues, false));\n const [errors, setErrors] = useState<Record<JsonPath, string>>({});\n const [saving, setSaving] = useState(false);\n\n //\n // Validation.\n //\n\n const validate = useCallback(\n (values: Partial<T>): values is T => {\n let errors: ValidationError[] = validateSchema(schema, values) ?? [];\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 [schemaDirty, setSchemaDirty] = useState(false);\n useEffect(() => setSchemaDirty(true), [schema]);\n useEffect(() => {\n if (schemaDirty) {\n validate(values);\n setSchemaDirty(false);\n }\n }, [values, schemaDirty]);\n\n const formIsValid = 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 * Basically, 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 });\n } finally {\n setSaving(false);\n }\n }\n }, [values, validate, onSave, changed]);\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 matchingError = 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: matchingError ? 'error' : undefined,\n error: matchingError ? matchingError[1] : undefined,\n };\n },\n [errors, touched],\n );\n\n const getFormValue = useCallback<FormHandler<T>['getValue']>(\n <V>(path: (string | number)[]): V | undefined => {\n return getValue(values, createJsonPath(path));\n },\n [values],\n );\n\n const onValueChange = useCallback<FormHandler<T>['onValueChange']>(\n (path: (string | number)[], type: SimpleType, value: any) => {\n const jsonPath = createJsonPath(path);\n let parsedValue = value;\n try {\n if (type === 'number') {\n parsedValue = parseFloat(value as string) || 0;\n }\n } catch (err) {\n log.catch(err);\n parsedValue = undefined;\n }\n\n const newValues = { ...setValue(values, jsonPath, parsedValue) };\n setValues(newValues);\n setChanged((prev) => ({ ...prev, [jsonPath]: true }));\n onValuesChanged?.(newValues);\n\n const isValid = validate(newValues);\n if (isValid && onValid) {\n onValid(newValues, { changed });\n }\n },\n [values, onValuesChanged, validate, onValid, changed],\n );\n\n const onTouched = useCallback(\n (path: (string | number)[]) => {\n const jsonPath = createJsonPath(path);\n setTouched((touched) => ({ ...touched, [jsonPath]: true }));\n validate(values);\n },\n [validate, values],\n );\n\n return useMemo(\n () => ({\n // State.\n values,\n errors,\n touched,\n changed,\n canSave,\n formIsValid,\n\n // Actions.\n handleSave,\n\n // Field utils.\n getStatus,\n getValue: getFormValue,\n onValueChange,\n onTouched,\n }),\n [\n values,\n errors,\n touched,\n changed,\n canSave,\n formIsValid,\n handleSave,\n getStatus,\n getFormValue,\n onValueChange,\n onTouched,\n ],\n );\n};\n\nconst createKeySet = <T extends BaseObject, V>(obj: T, value: V): Record<JsonPath, V> => {\n invariant(obj);\n return Object.keys(obj).reduce((acc, key) => ({ ...acc, [key]: value }), {} as Record<JsonPath, V>);\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 } from 'react';\n\nimport { type TypeAnnotation, getObjectDXN } from '@dxos/echo-schema';\nimport { Filter, type Space } from '@dxos/react-client/echo';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type QueryRefOptions } from './useQueryRefOptions';\n\ntype UseRefQueryLookupProps = { space?: Space };\n\nexport const useRefQueryLookupHandler = ({ space }: UseRefQueryLookupProps): QueryRefOptions => {\n return useCallback(\n async (typeInfo: TypeAnnotation) => {\n if (!space) {\n return [];\n }\n const query = space.db.query(Filter.typename(typeInfo.typename));\n const { objects } = await query.run();\n\n return objects\n .map((object) => {\n const dxn = getObjectDXN(object);\n if (!dxn) {\n return undefined;\n }\n\n // TODO(Zaymon): Better fallback object names?\n const item = { dxn, label: object?.name ?? object?.id ?? '' };\n return item;\n })\n .filter(isNonNullable);\n },\n [space],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type TypeAnnotation } from '@dxos/echo-schema';\nimport { type DXN } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type TagPickerItemData } from '@dxos/react-ui-tag-picker';\nimport { type MaybePromise } from '@dxos/util';\n\nexport type RefOption = { dxn: DXN; label?: string };\nexport type QueryRefOptions = (type: TypeAnnotation) => MaybePromise<RefOption[]>;\n\ntype UseQueryRefOptionsProps = { refTypeInfo: TypeAnnotation | undefined; onQueryRefOptions?: QueryRefOptions };\n\n/**\n * Hook to query reference options based on type information.\n * Used internally within forms to fetch and format reference options for reference fields.\n */\nexport const useQueryRefOptions = ({ refTypeInfo, onQueryRefOptions }: UseQueryRefOptionsProps) => {\n const [options, setOptions] = useState<TagPickerItemData[]>([]);\n const [loading, setLoading] = useState(false);\n\n useEffect(() => {\n if (!refTypeInfo || !onQueryRefOptions) {\n return;\n }\n\n const fetchOptions = async () => {\n setLoading(true);\n try {\n const fetchedOptions = await onQueryRefOptions(refTypeInfo);\n setOptions(\n fetchedOptions.map((option) => {\n const dxn = option.dxn.toString() as string;\n return { id: dxn, label: option.label ?? dxn, hue: 'neutral' as any };\n }),\n );\n } catch (error) {\n log.error('Failed to fetch ref options:', error);\n setOptions([]);\n } finally {\n setLoading(false);\n }\n };\n\n void fetchOptions();\n }, [refTypeInfo, onQueryRefOptions]);\n\n return { options, loading };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema, SchemaAST, pipe } from 'effect';\nimport { capitalize } from 'effect/String';\nimport React, { forwardRef, useMemo } from 'react';\n\nimport { createJsonPath, findNode, getDiscriminatedType, isDiscriminatedUnion } from '@dxos/effect';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type ProjectionModel, type SchemaProperty, getSchemaProperties } from '@dxos/schema';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { type QueryRefOptions } from '../../hooks';\nimport { getRefProps } from '../../util';\n\nimport { ArrayField } from './ArrayField';\nimport { SelectInput } from './Defaults';\nimport { getInputComponent } from './factory';\nimport { type ComponentLookup } from './Form';\nimport { useFormValues, useInputProps } from './FormContext';\nimport { type InputComponent } from './Input';\nimport { RefField, type RefFieldProps } from './RefField';\n\nexport type FormFieldProps = {\n property: SchemaProperty<any>;\n path?: (string | number)[];\n /** Used to indicate if input should be presented inline (e.g. for array items). */\n inline?: boolean;\n projection?: ProjectionModel;\n lookupComponent?: ComponentLookup;\n Custom?: Partial<Record<string, InputComponent>>;\n} & Pick<\n RefFieldProps,\n 'readonly' | 'onQueryRefOptions' | 'createOptionLabel' | 'createOptionIcon' | 'onCreateFromQuery'\n>;\n\nexport const FormField = ({\n property,\n path,\n readonly,\n inline,\n projection,\n onQueryRefOptions,\n createOptionLabel,\n createOptionIcon,\n onCreateFromQuery,\n lookupComponent,\n Custom,\n}: FormFieldProps) => {\n const { ast, name, type, format, title, description, options, examples, array } = property;\n const inputProps = useInputProps(path);\n\n const label = useMemo(() => title ?? pipe(name, capitalize), [title, name]);\n const placeholder = useMemo(\n () => (examples?.length ? `Example: \"${examples[0]}\"` : description),\n [examples, description],\n );\n\n //\n // Registry and Custom.\n //\n\n const FoundComponent = lookupComponent?.({\n prop: name,\n schema: Schema.make(ast),\n inputProps: {\n type,\n format,\n label,\n readonly,\n placeholder,\n ...inputProps,\n },\n });\n\n if (FoundComponent) {\n return FoundComponent;\n }\n\n const jsonPath = createJsonPath(path ?? []);\n const CustomComponent = Custom?.[jsonPath];\n if (CustomComponent) {\n return (\n <CustomComponent\n type={type}\n format={format}\n label={label}\n inputOnly={inline}\n placeholder={placeholder}\n readonly={readonly}\n {...inputProps}\n />\n );\n }\n\n //\n // Refs.\n //\n\n const refProps = getRefProps(property);\n if (refProps) {\n return (\n <RefField\n ast={refProps.ast}\n array={refProps.isArray}\n type={type}\n format={format}\n label={label}\n placeholder={placeholder}\n readonly={readonly}\n inputOnly={inline}\n onQueryRefOptions={onQueryRefOptions}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n onCreateFromQuery={onCreateFromQuery}\n {...inputProps}\n />\n );\n }\n\n //\n // Arrays.\n //\n\n if (array) {\n return <ArrayField property={property} path={path} inputProps={inputProps} readonly={readonly} Custom={Custom} />;\n }\n\n //\n // Standard Inputs.\n //\n\n const InputComponent = getInputComponent(type, format);\n if (InputComponent) {\n return (\n <InputComponent\n type={type}\n format={format}\n label={label}\n inputOnly={inline}\n placeholder={placeholder}\n readonly={readonly}\n {...inputProps}\n />\n );\n }\n\n //\n // Select.\n //\n\n if (options) {\n return (\n <SelectInput\n type={type}\n format={format}\n readonly={readonly}\n inputOnly={inline}\n label={label}\n options={options.map((option) => ({ value: option, label: String(option) }))}\n placeholder={placeholder}\n {...inputProps}\n />\n );\n }\n\n //\n // Nested Objects.\n //\n\n if (type === 'object') {\n const baseNode = findNode(ast, isDiscriminatedUnion);\n const typeLiteral = baseNode\n ? getDiscriminatedType(baseNode, inputProps.getValue() as any)\n : findNode(ast, SchemaAST.isTypeLiteral);\n\n if (typeLiteral) {\n return (\n <>\n {!inline && <h3 className={mx('text-lg mlb-inputSpacingBlock first:mbs-0')}>{label}</h3>}\n <FormFields\n schema={Schema.make(typeLiteral)}\n path={path}\n readonly={readonly}\n projection={projection}\n onQueryRefOptions={onQueryRefOptions}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n onCreateFromQuery={onCreateFromQuery}\n Custom={Custom}\n lookupComponent={lookupComponent}\n />\n </>\n );\n }\n }\n\n return null;\n};\n\nexport type FormFieldsProps = ThemedClassName<\n {\n testId?: string;\n schema: Schema.Schema.All;\n /**\n * Path to the current object from the root. Used with nested forms.\n */\n path?: (string | number)[];\n filter?: (props: SchemaProperty<any>[]) => SchemaProperty<any>[];\n sort?: string[];\n /**\n * Optional projection for projection-based field management\n */\n projection?: ProjectionModel;\n lookupComponent?: ComponentLookup;\n /**\n * Map of custom renderers for specific properties.\n * Prefer lookupComponent for plugin specific input surfaces.\n */\n Custom?: Partial<Record<string, InputComponent>>;\n onQueryRefOptions?: QueryRefOptions;\n } & Pick<FormFieldProps, 'readonly'> &\n Pick<RefFieldProps, 'onQueryRefOptions' | 'createOptionLabel' | 'createOptionIcon' | 'onCreateFromQuery'>\n>;\n\nexport const FormFields = forwardRef<HTMLDivElement, FormFieldsProps>(\n (\n {\n classNames,\n schema,\n path,\n filter,\n sort,\n projection,\n readonly,\n lookupComponent,\n Custom,\n onQueryRefOptions,\n ...props\n },\n forwardRef,\n ) => {\n const values = useFormValues(path);\n const properties = useMemo(() => {\n const props = getSchemaProperties(schema.ast, values);\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));\n const orderedProps: SchemaProperty<any>[] = [];\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((fp) => String(fp.field.path)));\n const remainingProps = visibleProps.filter((prop) => !projectionPaths.has(prop.name));\n orderedProps.push(...remainingProps);\n\n return orderedProps;\n }\n\n // Fallback to legacy filter/sort behavior\n const filtered = filter ? filter(props) : props;\n return sort ? filtered.sort((a, b) => sort.indexOf(a.name) - sort.indexOf(b.name)) : filtered;\n }, [schema, values, filter, sort, projection?.fields]);\n\n return (\n <div role='form' className={mx('is-full', classNames)} ref={forwardRef}>\n {properties\n .map((property) => {\n return (\n <FormField\n key={property.name}\n property={property}\n path={[...(path ?? []), property.name]}\n readonly={readonly}\n projection={projection}\n onQueryRefOptions={onQueryRefOptions}\n lookupComponent={lookupComponent}\n Custom={Custom}\n {...props}\n />\n );\n })\n .filter(isNotFalsy)}\n </div>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { FormatEnum, GeoLocation, TypeEnum } from '@dxos/echo-schema';\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?: FormatEnum;\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 FormatEnum.Boolean:\n return parseScalar(TypeEnum.Boolean);\n\n case FormatEnum.Number:\n case FormatEnum.Percent:\n case FormatEnum.Currency:\n return parseScalar(TypeEnum.Number);\n\n case FormatEnum.String:\n case FormatEnum.Markdown: {\n return parseScalar(TypeEnum.String);\n }\n\n case FormatEnum.Ref:\n throw new Error(`unexpected format: ${FormatEnum.Ref}`);\n\n case FormatEnum.DateTime:\n case FormatEnum.Date:\n case FormatEnum.Time:\n case FormatEnum.Timestamp: {\n const date = new Date(value as string | number);\n return isNaN(date.getTime()) ? null : date;\n }\n\n case FormatEnum.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?: FormatEnum;\n};\n\nexport const cellClassesForFieldType = ({ type, format }: CellClassesForFieldTypeProps): string[] | undefined => {\n switch (format || type) {\n case FormatEnum.Markdown:\n return undefined;\n case FormatEnum.Time:\n case FormatEnum.Timestamp:\n case FormatEnum.DateTime:\n case FormatEnum.Date:\n case FormatEnum.Duration:\n return ['font-mono', 'text-right'];\n case FormatEnum.Currency:\n return ['text-right'];\n case FormatEnum.JSON:\n case FormatEnum.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 { FormatEnum, GeoLocation, TypeEnum } from '@dxos/echo-schema';\n\ntype ValueFormatProps = {\n type: TypeEnum;\n format?: FormatEnum | 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 FormatEnum.Boolean: {\n return formatScalar(TypeEnum.Boolean);\n }\n case FormatEnum.Number: {\n return formatScalar(TypeEnum.Number);\n }\n case FormatEnum.String:\n case FormatEnum.Ref: {\n return formatScalar(TypeEnum.String);\n }\n case FormatEnum.Percent: {\n return `${(value as number) * 100}%`;\n }\n case FormatEnum.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 FormatEnum.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 FormatEnum.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 FormatEnum.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 FormatEnum.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 FormatEnum.Boolean:\n case FormatEnum.Number:\n case FormatEnum.String:\n case FormatEnum.Ref: {\n return formatScalar(type);\n }\n case FormatEnum.Percent: {\n return String(value * 100);\n }\n case FormatEnum.Currency: {\n return String(value);\n }\n case FormatEnum.DateTime: {\n const date = new Date(value as number);\n return date.toISOString();\n }\n case FormatEnum.Date: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[0];\n }\n case FormatEnum.Time: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[1].split('.')[0];\n }\n case FormatEnum.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 { type SchemaAST } from 'effect';\n\nimport { FormatEnum, ReferenceAnnotationId } from '@dxos/echo-schema';\nimport { findAnnotation } from '@dxos/effect';\nimport { type SchemaProperty } from '@dxos/schema';\n\nimport { findArrayElementType } from './schema';\n\ntype RefProps = {\n ast: SchemaAST.AST;\n isArray: boolean;\n};\n\nexport const getRefProps = (property: SchemaProperty<any>): RefProps | undefined => {\n const { ast, format, array } = property;\n\n // Direct reference.\n if (format === FormatEnum.Ref) {\n return { ast, isArray: false };\n }\n\n // Array of references.\n if (array) {\n const elementType = findArrayElementType(ast);\n if (elementType) {\n const annotation = findAnnotation(elementType, ReferenceAnnotationId);\n if (annotation) {\n return { ast: elementType, isArray: true };\n }\n }\n }\n\n return undefined;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { SchemaAST } from 'effect';\n\nimport { findNode } from '@dxos/effect';\n\nexport const findArrayElementType = (ast: SchemaAST.AST) => {\n const tupleType = findNode(ast, SchemaAST.isTupleType);\n const elementType = (tupleType as SchemaAST.TupleType | undefined)?.rest[0]?.type;\n\n return elementType;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { SchemaAST, pipe } from 'effect';\nimport { capitalize } from 'effect/String';\nimport React, { Fragment, useCallback } from 'react';\n\nimport { SimpleType, findNode, getDiscriminatedType, isDiscriminatedUnion } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\nimport { type SchemaProperty, getSchemaProperties } from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { findArrayElementType } from '../../util';\n\nimport { type ComponentLookup } from './Form';\nimport { FormField, type FormFieldProps } from './FormContent';\nimport { type FormInputStateProps, useFormValues } from './FormContext';\nimport { type InputComponent, InputHeader } from './Input';\n\ntype ArrayFieldProps = {\n property: SchemaProperty<any>;\n inputProps: FormInputStateProps;\n path?: (string | number)[];\n Custom?: Partial<Record<string, InputComponent>>;\n lookupComponent?: ComponentLookup;\n} & Pick<FormFieldProps, 'readonly'>;\n\nexport const ArrayField = ({ property, readonly, path, inputProps, Custom, lookupComponent }: ArrayFieldProps) => {\n const { t } = useTranslation(translationKey);\n const { ast, name, type, title } = property;\n // TODO(wittjosiah): The fallback to an empty array stops the form from crashing but isn't immediately live.\n // It doesn't become live until another field is touched, but that's better than the whole form crashing.\n const values = (useFormValues(path ?? []) ?? []) as any[];\n invariant(Array.isArray(values), `Values at path ${path?.join('.')} must be an array.`);\n const label = title ?? pipe(name, capitalize);\n\n const elementType = findArrayElementType(ast);\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(getSchemaProperties(typeLiteral, {}).map((prop) => [prop.name, prop.defaultValue]));\n };\n\n const getDefaultValue = () =>\n type === 'object' && elementType ? getDefaultObjectValue(elementType) : SimpleType.getDefaultValue(type);\n\n const handleAdd = useCallback(() => {\n inputProps.onValueChange(type, [...values, getDefaultValue()]);\n }, [type, elementType, inputProps, values]);\n\n const handleRemove = useCallback(\n (index: number) => {\n const newValues = values.filter((_, i) => i !== index);\n inputProps.onValueChange(type, newValues);\n },\n [type, inputProps, values],\n );\n\n if (!elementType) {\n return null;\n }\n\n return readonly && values.length < 1 ? null : (\n <>\n <InputHeader readonly label={label} />\n <div\n role='none'\n className={\n readonly\n ? 'flex flex-wrap gap-1 mlb-1'\n : values.length > 0\n ? 'grid gap-1 grid-cols-[1fr_min-content] mlb-1'\n : 'hidden'\n }\n >\n {values.map((_value, index) => {\n const field = (\n <FormField\n property={{\n ...property,\n array: false, // NOTE(ZaymonFC): This breaks arrays of arrays but ¯\\_(ツ)_/¯. Ping me if you need that.\n ast: elementType,\n }}\n path={[...(path ?? []), index]}\n readonly={readonly}\n inline\n Custom={Custom}\n lookupComponent={lookupComponent}\n />\n );\n return readonly ? (\n field\n ) : (\n <Fragment key={index}>\n <div role='none'>{field}</div>\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n label={t('button remove')}\n onClick={() => handleRemove(index)}\n classNames='self-center'\n />\n </Fragment>\n );\n })}\n </div>\n {!readonly && (\n <IconButton\n classNames='is-full mlb-cardSpacingBlock flex'\n icon='ph--plus--regular'\n label={t('add field')}\n onClick={handleAdd}\n />\n )}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { FormatEnum } from '@dxos/echo-schema';\nimport { type SimpleType } from '@dxos/effect';\n\nimport { GeoPointInput } from './custom';\nimport { BooleanInput, MarkdownInput, NumberInput, TextInput } from './Defaults';\nimport { type InputComponent } from './Input';\n\n/**\n * Get property input component.\n */\nexport const getInputComponent = (type: SimpleType, format?: FormatEnum | string): InputComponent | undefined => {\n switch (format) {\n case FormatEnum.GeoPoint:\n return GeoPointInput;\n case FormatEnum.Markdown:\n return MarkdownInput;\n }\n\n switch (type) {\n case 'string':\n return TextInput;\n case 'number':\n return NumberInput;\n case 'boolean':\n return BooleanInput;\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type SchemaAST } from 'effect';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport {\n Expando,\n Ref,\n ReferenceAnnotationId,\n type ReferenceAnnotationValue,\n type TypeAnnotation,\n getTypeAnnotation,\n} from '@dxos/echo-schema';\nimport { findAnnotation } from '@dxos/effect';\nimport { DXN } from '@dxos/keys';\nimport { type DxTagPickerItemClick } from '@dxos/lit-ui';\nimport { DxAnchor } from '@dxos/lit-ui/react';\nimport { Button, Icon, Input, useTranslation } from '@dxos/react-ui';\nimport { PopoverCombobox } from '@dxos/react-ui-searchlist';\nimport { TagPickerItem } from '@dxos/react-ui-tag-picker';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\nimport { type MaybePromise, isNonNullable } from '@dxos/util';\n\nimport { type QueryRefOptions, useQueryRefOptions } from '../../hooks';\nimport { translationKey } from '../../translations';\n\nimport { TextInput } from './Defaults';\nimport { InputHeader, type InputProps } from './Input';\n\nexport type RefFieldProps = InputProps & {\n ast?: SchemaAST.AST;\n array?: boolean;\n onQueryRefOptions?: QueryRefOptions;\n createOptionLabel?: [string, { ns: string }];\n createOptionIcon?: string;\n onCreateFromQuery?: (type: TypeAnnotation, query: string) => MaybePromise<void>;\n};\n\n// TODO(thure): Is this a standard that should be better canonized?\nconst isRefSnapShot = (val: any): val is { '/': string } => {\n return typeof val === 'object' && typeof (val as any)?.['/'] === 'string';\n};\n\nexport const RefField = ({\n type,\n label,\n readonly,\n placeholder,\n inputOnly,\n array,\n ast,\n getValue,\n onBlur,\n onQueryRefOptions,\n createOptionLabel,\n createOptionIcon,\n onCreateFromQuery,\n onValueChange,\n ...restInputProps\n}: RefFieldProps) => {\n const { t } = useTranslation(translationKey);\n const refTypeInfo = useMemo(\n () => (ast ? findAnnotation<ReferenceAnnotationValue>(ast, ReferenceAnnotationId) : undefined),\n [ast],\n );\n const { options: availableOptions, loading: _loading } = useQueryRefOptions({ refTypeInfo, onQueryRefOptions });\n\n if ((refTypeInfo && refTypeInfo?.typename === getTypeAnnotation(Expando)?.typename) || !onQueryRefOptions) {\n // If ref type is expando, fall back to taking a DXN in string format.\n return (\n <RefFieldFallback\n {...{ type, label, placeholder, readonly, inputOnly, getValue, onBlur, onValueChange, ...restInputProps }}\n />\n );\n }\n\n const handleGetValue = useCallback(() => {\n const formValue = getValue();\n\n const unknownToRefOption = (val: unknown) => {\n const isRef = Ref.isRef(val);\n if (isRef || isRefSnapShot(val)) {\n const dxnString = isRef ? val.dxn.toString() : val['/'];\n const matchingOption = availableOptions.find((option) => option.id === dxnString);\n if (matchingOption) {\n return matchingOption;\n }\n }\n return undefined;\n };\n\n if (array && Array.isArray(formValue)) {\n return formValue.map(unknownToRefOption).filter(isNonNullable) ?? [];\n }\n\n const option = unknownToRefOption(formValue);\n if (option) {\n return [option];\n }\n\n return [];\n }, [getValue, availableOptions, array]);\n\n const handleUpdate = useCallback(\n (ids: string[]) => {\n if (ids.length === 0) {\n onValueChange('object', undefined);\n return;\n }\n\n const refs = ids\n .map((id) => {\n const item = availableOptions.find((option) => option.id === id);\n if (item) {\n const dxn = DXN.parse(item.id);\n return Ref.fromDXN(dxn);\n }\n return null;\n })\n .filter(isNonNullable);\n\n if (array) {\n onValueChange('object', refs);\n } else {\n onValueChange('object', refs[0]);\n }\n },\n [availableOptions, array, onValueChange],\n );\n\n if (!refTypeInfo) {\n return null;\n }\n\n const { status, error } = restInputProps.getStatus();\n\n const items = handleGetValue();\n const selectedIds = useMemo(() => items.map((i: any) => i.id), [items]);\n const labelById = useMemo(\n () =>\n availableOptions.reduce((acc: Record<string, string>, option) => {\n acc[option.id.toLowerCase()] = option.label.toLowerCase();\n return acc;\n }, {}),\n [availableOptions],\n );\n const [query, setQuery] = useState('');\n const toggleSelect = useCallback(\n (id: string) => {\n if (array) {\n const nextIds = selectedIds.includes(id) ? selectedIds.filter((x) => x !== id) : [...selectedIds, id];\n handleUpdate(nextIds);\n } else {\n if (selectedIds[0] === id) {\n handleUpdate([]);\n } else {\n handleUpdate([id]);\n }\n }\n },\n [array, selectedIds, handleUpdate],\n );\n\n // NOTE(thure): I left both predicates in-place in case we decide to add variants which do render readonly but empty values.\n return readonly && items.length < 1 ? null : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n <div data-no-submit>\n {readonly ? (\n items.length < 1 ? (\n <p className={mx(descriptionText, 'mbe-2')}>{t('empty readonly ref field label')}</p>\n ) : (\n items.map((item) => (\n <DxAnchor key={item.id} refid={item.id} rootclassname='mie-1'>\n {item.label}\n </DxAnchor>\n ))\n )\n ) : (\n <PopoverCombobox.Root>\n <PopoverCombobox.Trigger asChild>\n <Button variant='ghost' classNames='is-full text-start gap-2'>\n <div role='none' className='grow'>\n {items?.length ? (\n items?.map((item) => (\n <TagPickerItem\n key={item.id}\n itemId={item.id}\n label={item.label}\n {...(item.hue ? { hue: item.hue } : {})}\n removeLabel={t('remove item label')}\n onItemClick={(event: DxTagPickerItemClick) => {\n if (event.action === 'remove') {\n toggleSelect(item.id);\n }\n }}\n />\n ))\n ) : (\n <span className='text-description'>\n {placeholder ?? t('ref field placeholder', { count: array ? 99 : 1 })}\n </span>\n )}\n </div>\n <Icon size={3} icon='ph--caret-down--bold' />\n </Button>\n </PopoverCombobox.Trigger>\n <PopoverCombobox.Content\n filter={(value, search) =>\n value === '__create__' || labelById[value]?.includes(search.toLowerCase()) ? 1 : 0\n }\n >\n <PopoverCombobox.Input\n placeholder={'Search...'}\n value={query}\n onValueChange={(v) => setQuery(v)}\n autoFocus\n />\n <PopoverCombobox.List>\n {availableOptions.map((option) => (\n <PopoverCombobox.Item\n key={option.id}\n value={option.id}\n onSelect={() => toggleSelect(option.id)}\n classNames='flex items-center gap-2'\n >\n <span className='grow'>{option.label}</span>\n {selectedIds.includes(option.id) && <Icon icon='ph--check--regular' />}\n </PopoverCombobox.Item>\n ))}\n {query.length > 0 && createOptionLabel && createOptionIcon && onCreateFromQuery && (\n <PopoverCombobox.Item\n value='__create__'\n onSelect={() => onCreateFromQuery?.(refTypeInfo, query)}\n classNames='flex items-center gap-2'\n >\n <Icon icon={createOptionIcon} />\n {t(createOptionLabel[0], { ns: createOptionLabel[1].ns, text: query })}\n </PopoverCombobox.Item>\n )}\n </PopoverCombobox.List>\n <PopoverCombobox.Arrow />\n </PopoverCombobox.Content>\n </PopoverCombobox.Root>\n )}\n </div>\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nconst RefFieldFallback = ({\n type,\n label,\n readonly,\n placeholder,\n inputOnly,\n getValue,\n onValueChange,\n ...restInputProps\n}: InputProps) => {\n const handleOnValueChange = (_type: any, dxnString: string) => {\n const dxn = DXN.tryParse(dxnString);\n if (dxn) {\n onValueChange?.('object', Ref.fromDXN(dxn));\n } else if (dxnString === '') {\n onValueChange?.('object', undefined);\n } else {\n onValueChange?.('string', dxnString);\n }\n };\n\n const handleGetValue = () => {\n const formValue = getValue();\n if (typeof formValue === 'string') {\n return formValue;\n }\n if (Ref.isRef(formValue)) {\n return formValue.dxn.toString();\n }\n\n return undefined;\n };\n\n return (\n <TextInput\n type={type}\n label={label}\n readonly={readonly}\n placeholder={placeholder}\n inputOnly={inputOnly}\n getValue={handleGetValue as <V>() => V | undefined}\n onValueChange={handleOnValueChange}\n {...restInputProps}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Match, Schema } from 'effect';\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { type SchemaRegistry } from '@dxos/echo-db';\nimport { EchoSchema, Format, type JsonProp, isMutable, toJsonSchema } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { Callout, IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { QueryEditor, QuerySerializer, createExpression } from '@dxos/react-ui-components';\nimport { List } from '@dxos/react-ui-list';\nimport { cardSpacing } from '@dxos/react-ui-stack';\nimport { inputTextLabel, mx, subtleHover } from '@dxos/react-ui-theme';\nimport {\n type DataType,\n FieldSchema,\n type FieldType,\n ProjectionModel,\n VIEW_FIELD_LIMIT,\n typenameFromQuery,\n} from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { FieldEditor } from '../FieldEditor';\nimport { Form, type FormProps, type InputComponent, type InputProps } 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: DataType.View;\n kind?: 'basic' | 'advanced';\n registry?: SchemaRegistry;\n readonly?: boolean;\n showHeading?: boolean;\n onQueryChanged?: (query: string) => void;\n onDelete?: (fieldId: string) => void;\n } & Pick<FormProps<any>, 'outerSpacing'>\n>;\n\n/**\n * Schema-based object form.\n */\nexport const ViewEditor = ({\n classNames,\n schema,\n view,\n kind = 'basic',\n registry,\n readonly,\n showHeading = false,\n onQueryChanged,\n onDelete,\n outerSpacing = true,\n}: ViewEditorProps) => {\n const space = getSpace(view);\n const schemaReadonly = !isMutable(schema);\n const { t } = useTranslation(translationKey);\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 return new ProjectionModel(jsonSchema, view.projection);\n }, [schema, view.projection]);\n const [expandedField, setExpandedField] = useState<FieldType['id']>();\n\n const serializedQuery = Match.value(kind).pipe(\n Match.when('basic', () => typenameFromQuery(view.query)),\n Match.when('advanced', () => {\n if (view.query.type !== 'select') {\n return '';\n }\n\n const serializer = new QuerySerializer();\n return serializer.serialize(createExpression(view.query.filter));\n }),\n Match.exhaustive,\n );\n\n const viewSchema = useMemo(() => {\n return Schema.Struct({\n query:\n kind === 'basic'\n ? Format.URL.annotations({ title: 'Record type' })\n : Schema.String.annotations({ title: 'Query' }),\n }).pipe(Schema.mutable);\n }, [kind]);\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(() => ({ query: serializedQuery }), [serializedQuery]);\n\n const handleToggleField = useCallback(\n (field: FieldType) => {\n setExpandedField((prevExpandedFieldId) => (prevExpandedFieldId === field.id ? undefined : field.id));\n },\n [readonly],\n );\n\n // TODO(burdon): Check if mutable; variant of useCallback that return undefined if readonly?\n\n const handleAdd = useCallback(() => {\n invariant(!readonly);\n const field = projectionModel.createFieldProjection();\n setExpandedField(field.id);\n }, [schema, projectionModel, readonly]);\n\n const handleUpdate = useCallback(\n ({ query }: Schema.Schema.Type<typeof viewSchema>) => {\n invariant(!readonly);\n requestAnimationFrame(() => {\n if (serializedQuery !== query && !readonly) {\n onQueryChanged?.(query);\n }\n });\n },\n [serializedQuery, onQueryChanged, 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 // NOTE(ZaymonFC): Using arrayMove here causes a race condition with the kanban model.\n const fields = [...view.projection.fields];\n const [moved] = fields.splice(fromIndex, 1);\n fields.splice(toIndex, 0, moved);\n view.projection.fields = fields;\n },\n [view.projection.fields, 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 const custom: Partial<Record<string, InputComponent>> = useMemo(\n () =>\n kind === 'advanced'\n ? {\n ['query' satisfies keyof Schema.Schema.Type<typeof viewSchema>]: (props: InputProps) => {\n const handleChange = useCallback(\n (text: string) => props.onValueChange('string', text),\n [props.onValueChange],\n );\n\n // TODO(wittjosiah): Add label & input styles.\n return <QueryEditor space={space} initialValue={props.getValue()} onChange={handleChange} />;\n },\n }\n : {},\n [],\n );\n\n return (\n <div role='none' className={mx(classNames)}>\n {schemaReadonly && (\n <Callout.Root valence='info' classNames={['mlb-cardSpacingBlock', outerSpacing && 'mli-cardSpacingInline']}>\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 {/* TODO(burdon): Readonly fields should take up the same space as editable fields (just be ghosted). */}\n <Form<Schema.Schema.Type<typeof viewSchema>>\n autoSave\n schema={viewSchema}\n values={viewValues}\n readonly={readonly ? 'disabled-input' : false}\n onSave={handleUpdate}\n outerSpacing={outerSpacing}\n Custom={custom}\n />\n\n <div role='none' className={outerSpacing ? cardSpacing : 'mlb-cardSpacingBlock'}>\n <h2 className={mx(inputTextLabel)}>{t('fields label')}</h2>\n\n <List.Root<FieldType>\n items={view.projection.fields}\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} />\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.fields.length <= 1)}\n onClick={() => (hidden ? handleShow(field.path) : handleHide(field.id))}\n />\n {/* TODO(burdon): Remove unless implement undo. */}\n <List.ItemDeleteButton\n label={t('delete field label')}\n autoHide={false}\n disabled={readonly || schemaReadonly || view.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: 'os' })}\n icon={expandedField === field.id ? 'ph--caret-down--regular' : 'ph--caret-right--regular'}\n onClick={() => handleToggleField(field)}\n />\n </div>\n {expandedField === field.id && (\n <div role='none' className='col-span-5 mbs-1 mbe-1 border border-separator rounded-md'>\n <FieldEditor\n readonly={readonly || schemaReadonly ? 'disabled-input' : false}\n projection={projectionModel}\n field={field}\n registry={registry}\n onSave={handleClose}\n />\n </div>\n )}\n </List.Item>\n );\n })}\n </div>\n </>\n )}\n </List.Root>\n </div>\n\n {!readonly && !expandedField && (\n <div role='none' className={outerSpacing ? cardSpacing : 'mlb-cardSpacingBlock'}>\n <IconButton\n icon='ph--plus--regular'\n label={t('button add property')}\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"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["translationKey", "translations", "React", "Button", "Input", "toLocalizedString", "useTranslation", "StackItem", "mx", "ControlPage", "children", "classNames", "props", "StackItem", "Content", "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", "FormatEnum", "FormatEnums", "formatToType", "log", "useAsyncEffect", "useTranslation", "getFormatSchema", "getSchemaProperties", "sortProperties", "React", "useCallback", "useEffect", "useMemo", "useState", "GeoLocation", "Input", "useTranslation", "safeParseFloat", "React", "Icon", "Input", "Tooltip", "labelSpacing", "errorText", "mx", "InputHeader", "error", "label", "readonly", "Label", "Input", "labelProps", "classNames", "React", "div", "role", "className", "mx", "labelSpacing", "Tooltip", "Trigger", "asChild", "content", "side", "Icon", "icon", "size", "errorText", "GeoPointInput", "type", "label", "readonly", "getStatus", "getValue", "onValueChange", "onBlur", "t", "useTranslation", "translationKey", "status", "error", "geoPoint", "useMemo", "geoLocation", "GeoLocation", "fromGeoPoint", "longitudeText", "setLongitudeText", "useState", "longitude", "toString", "latitudeText", "setLatitudeText", "latitude", "useEffect", "location", "handleCoordinateChange", "useCallback", "coordinateType", "setText", "event", "inputText", "target", "value", "coord", "safeParseFloat", "undefined", "isNaN", "currentLocation", "newLocation", "newValue", "toGeoPoint", "React", "Input", "Root", "validationValence", "InputHeader", "div", "role", "className", "Label", "TextInput", "step", "min", "max", "disabled", "onChange", "React", "useCallback", "useEffect", "useRef", "useState", "PublicKey", "IconButton", "Input", "Tag", "useTranslation", "List", "HuePicker", "hues", "subtleHover", "SelectOptionInput", "type", "label", "readonly", "getStatus", "getValue", "onValueChange", "selected", "setSelectedId", "useState", "isNewOption", "setIsNewOption", "inputRef", "useRef", "t", "useTranslation", "translationKey", "status", "error", "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", "key", "handleColorChange", "focus", "React", "Input", "Root", "validationValence", "InputHeader", "div", "role", "List", "items", "isItem", "item", "onMove", "className", "Item", "classNames", "subtleHover", "aria-expanded", "ItemDragHandle", "disabled", "ItemTitle", "onClick", "Tag", "palette", "IconButton", "iconOnly", "variant", "ns", "icon", "Label", "TextInput", "placeholder", "ref", "onChange", "onKeyDown", "data-no-submit", "HuePicker", "React", "Input", "mx", "safeParseFloat", "gridCols", "TupleInput", "binding", "type", "label", "readonly", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "values", "React", "Input", "Root", "validationValence", "InputHeader", "div", "className", "mx", "length", "map", "prop", "TextInput", "key", "disabled", "value", "onChange", "event", "safeParseFloat", "target", "React", "useCallback", "useEffect", "useRef", "Input", "Select", "useTranslation", "TextInput", "type", "label", "inputOnly", "readonly", "placeholder", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "React", "p", "Input", "Root", "validationValence", "InputHeader", "disabled", "value", "onChange", "event", "target", "Validation", "NumberInput", "DescriptionAndValidation", "BooleanInput", "checked", "Boolean", "t", "useTranslation", "translationKey", "Switch", "onCheckedChange", "SelectInput", "options", "handleValueChange", "useCallback", "find", "optionValue", "String", "Select", "TriggerButton", "classNames", "Portal", "Content", "Viewport", "map", "Option", "key", "Arrow", "MarkdownInput", "textareaRef", "useRef", "adjustHeight", "textarea", "current", "style", "blockSize", "scrollHeight", "useEffect", "TextArea", "ref", "resize", "spellCheck", "useFocusFinders", "React", "useEffect", "useMemo", "useRef", "cardDialogOverflow", "cardSpacing", "React", "IconButton", "useTranslation", "cardSpacing", "mx", "React", "createContext", "useCallback", "useContext", "useEffect", "useMemo", "raise", "getValue", "createJsonPath", "SchemaAST", "useCallback", "useEffect", "useMemo", "useState", "getValue", "setValue", "createJsonPath", "fromEffectValidationPath", "invariant", "log", "validateSchema", "useForm", "schema", "initialValues", "onValuesChanged", "onValidate", "onValid", "onSave", "isTypeLiteral", "ast", "values", "setValues", "touched", "setTouched", "createKeySet", "changed", "setChanged", "errors", "setErrors", "saving", "setSaving", "validate", "length", "validatedValues", "flatMap", "valid", "schemaDirty", "setSchemaDirty", "formIsValid", "Object", "keys", "canSave", "entries", "some", "path", "isTouched", "errorPath", "startsWith", "handleSave", "getStatus", "jsonPath", "Array", "isArray", "matchingError", "find", "status", "undefined", "error", "getFormValue", "onValueChange", "type", "value", "parsedValue", "parseFloat", "err", "catch", "newValues", "prev", "isValid", "onTouched", "obj", "reduce", "acc", "key", "result", "message", "useCallback", "getObjectDXN", "Filter", "isNonNullable", "useRefQueryLookupHandler", "space", "useCallback", "typeInfo", "query", "db", "Filter", "typename", "objects", "run", "map", "object", "dxn", "getObjectDXN", "undefined", "item", "label", "name", "id", "filter", "isNonNullable", "useEffect", "useState", "log", "useQueryRefOptions", "refTypeInfo", "onQueryRefOptions", "options", "setOptions", "loading", "setLoading", "fetchOptions", "fetchedOptions", "map", "option", "dxn", "toString", "id", "label", "hue", "error", "FormContext", "createContext", "undefined", "useFormContext", "useContext", "raise", "Error", "useFormValues", "path", "values", "formValues", "jsonPath", "createJsonPath", "getValue", "useInputProps", "getStatus", "getFormValue", "onValueChange", "onTouched", "stablePath", "useMemo", "Array", "isArray", "join", "type", "value", "onBlur", "FormProvider", "children", "formRef", "autoSave", "formOptions", "form", "useForm", "handleKeyDown", "useCallback", "event", "keyIsEnter", "key", "modifierUsed", "ctrlKey", "altKey", "metaKey", "shiftKey", "inputIsTextarea", "target", "tagName", "toLowerCase", "inputOptOut", "hasAttribute", "closest", "shouldSubmitRegularInput", "shouldSubmitTextarea", "canSave", "handleSave", "formIsValid", "blur", "useEffect", "current", "formElement", "addEventListener", "removeEventListener", "React", "Provider", "FormActions", "readonly", "onCancel", "outerSpacing", "t", "useTranslation", "translationKey", "canSave", "handleSave", "useFormContext", "React", "div", "role", "className", "mx", "cardSpacing", "IconButton", "data-testid", "icon", "label", "onClick", "type", "disabled", "Schema", "SchemaAST", "pipe", "capitalize", "React", "forwardRef", "useMemo", "createJsonPath", "findNode", "getDiscriminatedType", "isDiscriminatedUnion", "mx", "getSchemaProperties", "isNotFalsy", "FormatEnum", "GeoLocation", "TypeEnum", "parseValue", "type", "format", "value", "undefined", "parseScalar", "TypeEnum", "Boolean", "lowercaseValue", "toLowerCase", "Number", "cleaned", "replace", "num", "isNaN", "String", "Ref", "FormatEnum", "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", "FormatEnum", "GeoLocation", "TypeEnum", "formatForDisplay", "type", "format", "value", "locale", "undefined", "formatScalar", "TypeEnum", "Boolean", "toLocaleString", "toUpperCase", "Number", "String", "Ref", "FormatEnum", "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", "FormatEnum", "ReferenceAnnotationId", "findAnnotation", "SchemaAST", "findNode", "findArrayElementType", "ast", "tupleType", "findNode", "SchemaAST", "isTupleType", "elementType", "rest", "type", "getRefProps", "property", "ast", "format", "array", "FormatEnum", "Ref", "isArray", "elementType", "findArrayElementType", "annotation", "findAnnotation", "ReferenceAnnotationId", "undefined", "SchemaAST", "pipe", "capitalize", "React", "Fragment", "useCallback", "SimpleType", "findNode", "getDiscriminatedType", "isDiscriminatedUnion", "invariant", "IconButton", "useTranslation", "getSchemaProperties", "ArrayField", "property", "readonly", "path", "inputProps", "Custom", "lookupComponent", "t", "useTranslation", "translationKey", "ast", "name", "type", "title", "values", "useFormValues", "invariant", "Array", "isArray", "join", "label", "pipe", "capitalize", "elementType", "findArrayElementType", "getDefaultObjectValue", "typeNode", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "SchemaAST", "isTypeLiteral", "Object", "fromEntries", "getSchemaProperties", "map", "prop", "defaultValue", "getDefaultValue", "SimpleType", "handleAdd", "useCallback", "onValueChange", "handleRemove", "index", "newValues", "filter", "_", "i", "length", "React", "InputHeader", "div", "role", "className", "_value", "field", "FormField", "array", "inline", "Fragment", "key", "IconButton", "icon", "iconOnly", "onClick", "classNames", "FormatEnum", "getInputComponent", "type", "format", "FormatEnum", "GeoPoint", "GeoPointInput", "Markdown", "MarkdownInput", "TextInput", "NumberInput", "BooleanInput", "React", "useCallback", "useMemo", "useState", "Expando", "Ref", "ReferenceAnnotationId", "getTypeAnnotation", "findAnnotation", "DXN", "DxAnchor", "Button", "Icon", "Input", "useTranslation", "PopoverCombobox", "TagPickerItem", "descriptionText", "mx", "isNonNullable", "isRefSnapShot", "val", "RefField", "type", "label", "readonly", "placeholder", "inputOnly", "array", "ast", "getValue", "onBlur", "onQueryRefOptions", "createOptionLabel", "createOptionIcon", "onCreateFromQuery", "onValueChange", "restInputProps", "t", "useTranslation", "translationKey", "refTypeInfo", "useMemo", "findAnnotation", "ReferenceAnnotationId", "undefined", "options", "availableOptions", "loading", "_loading", "useQueryRefOptions", "typename", "getTypeAnnotation", "Expando", "React", "RefFieldFallback", "handleGetValue", "useCallback", "formValue", "unknownToRefOption", "isRef", "Ref", "dxnString", "dxn", "toString", "matchingOption", "find", "option", "id", "Array", "isArray", "map", "filter", "isNonNullable", "handleUpdate", "ids", "length", "refs", "item", "DXN", "parse", "fromDXN", "status", "error", "getStatus", "items", "selectedIds", "i", "labelById", "reduce", "acc", "toLowerCase", "query", "setQuery", "useState", "toggleSelect", "nextIds", "includes", "x", "Input", "Root", "validationValence", "InputHeader", "div", "data-no-submit", "p", "className", "mx", "descriptionText", "DxAnchor", "key", "refid", "rootclassname", "PopoverCombobox", "Trigger", "asChild", "Button", "variant", "classNames", "role", "TagPickerItem", "itemId", "hue", "removeLabel", "onItemClick", "event", "action", "span", "count", "Icon", "size", "icon", "Content", "value", "search", "v", "autoFocus", "List", "Item", "onSelect", "ns", "text", "Arrow", "DescriptionAndValidation", "handleOnValueChange", "_type", "tryParse", "TextInput", "FormField", "property", "path", "readonly", "inline", "projection", "onQueryRefOptions", "createOptionLabel", "createOptionIcon", "onCreateFromQuery", "lookupComponent", "Custom", "ast", "name", "type", "format", "title", "description", "options", "examples", "array", "inputProps", "useInputProps", "label", "useMemo", "pipe", "capitalize", "placeholder", "length", "FoundComponent", "prop", "schema", "Schema", "make", "jsonPath", "createJsonPath", "CustomComponent", "React", "inputOnly", "refProps", "getRefProps", "RefField", "isArray", "ArrayField", "InputComponent", "getInputComponent", "SelectInput", "map", "option", "value", "String", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "getValue", "SchemaAST", "isTypeLiteral", "h3", "className", "mx", "FormFields", "forwardRef", "classNames", "filter", "sort", "props", "values", "useFormValues", "properties", "getSchemaProperties", "fieldProjections", "getFieldProjections", "hiddenProperties", "Set", "getHiddenProperties", "visibleProps", "has", "orderedProps", "fieldProjection", "fieldPath", "field", "find", "p", "push", "projectionPaths", "fp", "remainingProps", "filtered", "a", "b", "indexOf", "fields", "div", "role", "ref", "key", "isNotFalsy", "Form", "classNames", "testId", "values", "initialValues", "autoFocus", "readonly", "autoSave", "outerSpacing", "schema", "onCancel", "onValuesChanged", "onValidate", "onSave", "props", "formRef", "useRef", "findFirstFocusable", "useFocusFinders", "useEffect", "current", "firstFocusable", "focus", "handleValid", "useMemo", "undefined", "React", "FormProvider", "onValid", "div", "role", "className", "data-testid", "FormFields", "ref", "cardSpacing", "cardDialogOverflow", "FormActions", "FieldEditor", "readonly", "projection", "field", "registry", "onSave", "onCancel", "outerSpacing", "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", "handleValuesChanged", "useCallback", "_props", "prev", "newSchema", "type", "formatToType", "handleValidate", "property", "fields", "f", "path", "message", "handleSave", "setFieldProjection", "handleCancel", "requestAnimationFrame", "custom", "useMemo", "React", "SelectInput", "options", "FormatEnums", "filter", "value", "FormatEnum", "None", "map", "label", "getSchemaProperties", "ast", "sort", "sortProperties", "p", "name", "SelectOptionInput", "propIsNotType", "log", "warn", "Form", "key", "autoFocus", "values", "onValuesChanged", "onValidate", "Custom", "Match", "Schema", "React", "useCallback", "useMemo", "useState", "EchoSchema", "Format", "isMutable", "toJsonSchema", "invariant", "getSpace", "Callout", "IconButton", "useTranslation", "QueryEditor", "QuerySerializer", "createExpression", "List", "cardSpacing", "inputTextLabel", "mx", "subtleHover", "FieldSchema", "ProjectionModel", "VIEW_FIELD_LIMIT", "typenameFromQuery", "listGrid", "listItemGrid", "ViewEditor", "classNames", "schema", "view", "kind", "registry", "readonly", "showHeading", "onQueryChanged", "onDelete", "outerSpacing", "space", "getSpace", "schemaReadonly", "isMutable", "t", "useTranslation", "translationKey", "projectionModel", "useMemo", "jsonSchema", "EchoSchema", "toJsonSchema", "ProjectionModel", "projection", "expandedField", "setExpandedField", "useState", "serializedQuery", "Match", "value", "pipe", "when", "typenameFromQuery", "query", "type", "serializer", "QuerySerializer", "serialize", "createExpression", "filter", "exhaustive", "viewSchema", "Schema", "Struct", "Format", "URL", "annotations", "title", "String", "mutable", "viewValues", "handleToggleField", "useCallback", "field", "prevExpandedFieldId", "id", "undefined", "handleAdd", "invariant", "createFieldProjection", "handleUpdate", "requestAnimationFrame", "handleDelete", "fieldId", "handleMove", "fromIndex", "toIndex", "fields", "moved", "splice", "handleClose", "handleHide", "hideFieldProjection", "handleShow", "property", "showFieldProjection", "custom", "props", "handleChange", "text", "onValueChange", "React", "QueryEditor", "initialValue", "getValue", "onChange", "div", "role", "className", "mx", "Callout", "Root", "valence", "Title", "Form", "autoSave", "values", "onSave", "Custom", "cardSpacing", "h2", "inputTextLabel", "List", "items", "isItem", "is", "FieldSchema", "getId", "onMove", "h3", "map", "hidden", "visible", "Item", "key", "item", "aria-expanded", "subtleHover", "ItemDragHandle", "disabled", "ItemTitle", "onClick", "path", "ItemButton", "label", "data-testid", "icon", "autoHide", "length", "ItemDeleteButton", "IconButton", "iconOnly", "variant", "ns", "FieldEditor", "VIEW_FIELD_LIMIT"]
|
|
3
|
+
"sources": ["../../../src/translations.ts", "../../../src/components/ControlSection/ControlSection.tsx", "../../../src/components/FieldEditor/FieldEditor.tsx", "../../../src/components/Form/custom/GeoPointInput.tsx", "../../../src/components/Form/Input.tsx", "../../../src/components/Form/custom/SelectOptionsInput.tsx", "../../../src/components/Form/custom/TupleInput.tsx", "../../../src/components/Form/Defaults.tsx", "../../../src/components/Form/Form.tsx", "../../../src/components/Form/FormActions.tsx", "../../../src/components/Form/FormContext.tsx", "../../../src/hooks/useForm.ts", "../../../src/hooks/useRefQueryLookupHandler.ts", "../../../src/hooks/useQueryRefOptions.ts", "../../../src/components/Form/FormContent.tsx", "../../../src/util/field.ts", "../../../src/util/formatting.ts", "../../../src/util/refs.ts", "../../../src/util/schema.ts", "../../../src/components/Form/ArrayField.tsx", "../../../src/components/Form/factory.tsx", "../../../src/components/Form/RefField.tsx", "../../../src/components/ObjectPicker/ObjectPicker.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 = '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': '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 // TODO(burdon): Factor out?\n 'save button': '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 // GeoPointInput.\n 'latitude label': 'Latitude',\n 'longitude label': 'Longitude',\n\n // SelectOptionsInput.\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 record type',\n 'system schema description':\n 'This is a system record type and cannot be modified, though the view can still be configured.',\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 { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { translationKey } from '../../translations';\n\nexport type ControlPageProps = ThemedClassName<ComponentPropsWithoutRef<'div'>>;\n\nexport const ControlPage = ({ children, classNames, ...props }: ControlPageProps) => {\n return (\n <StackItem.Content scrollable classNames='[--control-spacing:var(--dx-trimMd)]'>\n <div role='none' className={mx('pli-cardSpacingInline pbe-trimLg', classNames)} {...props}>\n {children}\n </div>\n </StackItem.Content>\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-trimLg 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 { type EchoSchema, FormatEnum, FormatEnums, formatToType } from '@dxos/echo/internal';\nimport { type SchemaRegistry } from '@dxos/echo-db';\nimport { log } from '@dxos/log';\nimport { useAsyncEffect, useTranslation } from '@dxos/react-ui';\nimport {\n type FieldType,\n type ProjectionModel,\n type PropertyType,\n type SchemaProperty,\n formatToAdditionalPropertyAttributes,\n getFormatSchema,\n getSchemaProperties,\n sortProperties,\n} from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { Form, type FormProps, type InputComponent, SelectInput, SelectOptionInput } from '../Form';\n\nexport type FieldEditorProps = {\n projection: ProjectionModel;\n field: FieldType;\n registry?: SchemaRegistry;\n onSave: () => void;\n onCancel?: () => void;\n} & Pick<FormProps<any>, 'outerSpacing' | 'readonly'>;\n\n/**\n * Displays a Form representing the metadata for a given `Field` and `View`.\n */\nexport const FieldEditor = ({\n readonly,\n projection,\n field,\n registry,\n onSave,\n onCancel,\n outerSpacing,\n}: 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 handleValuesChanged = useCallback<NonNullable<FormProps<PropertyType>['onValuesChanged']>>(\n (_props) => {\n // TODO(burdon): Callback should pass `changed` to indicate which fields have changed.\n // TODO(Zaymon): Workout why old and new format values are the same sometimes even when\n // 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<FormProps<PropertyType>['onValidate']>>(\n ({ property }) => {\n if (property && projection.fields.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.fields, field],\n );\n\n const handleSave = useCallback<NonNullable<FormProps<PropertyType>['onSave']>>(\n (props) => {\n projection.setFieldProjection({ field, props });\n onSave();\n },\n [projection, field, onSave],\n );\n\n const handleCancel = useCallback<NonNullable<FormProps<PropertyType>['onCancel']>>(() => {\n // Need to defer to allow form to close.\n requestAnimationFrame(() => onCancel?.());\n onSave();\n }, [onSave]);\n\n const custom: Partial<Record<string, InputComponent>> = useMemo(\n () => ({\n ['format' satisfies keyof PropertyType]: (props) => (\n <SelectInput\n {...props}\n options={FormatEnums.filter((value) => value !== FormatEnum.None).map((value) => ({\n value,\n label: t(`format ${value}`),\n }))}\n />\n ),\n ['referenceSchema' satisfies keyof PropertyType]: (props) => (\n <SelectInput\n {...props}\n options={schemas.map((schema) => ({\n value: schema.typename,\n }))}\n />\n ),\n ['referencePath' satisfies keyof PropertyType]: (props) => (\n <SelectInput\n {...props}\n options={\n referenceSchema\n ? getSchemaProperties(referenceSchema.ast)\n .sort(sortProperties)\n .map((p) => ({ value: p.name }))\n : []\n }\n />\n ),\n ['options' satisfies keyof PropertyType]: (props) => <SelectOptionInput {...props} />,\n }),\n [t, schemas, referenceSchema],\n );\n\n const propIsNotType = useCallback(\n (props: SchemaProperty<PropertyType>[]) => props.filter((p) => p.name !== 'type'),\n [],\n );\n\n if (!fieldSchema) {\n log.warn('invalid format', { props });\n return null;\n }\n\n return (\n <Form<PropertyType>\n key={field.id}\n autoFocus\n readonly={readonly}\n values={props}\n schema={fieldSchema}\n filter={propIsNotType}\n sort={['property', 'format']}\n onValuesChanged={handleValuesChanged}\n onValidate={handleValidate}\n onSave={handleSave}\n onCancel={handleCancel}\n Custom={custom}\n outerSpacing={outerSpacing}\n />\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 { InputHeader, type InputProps } from '../Input';\n\nexport const GeoPointInput = ({ type, label, readonly, getStatus, getValue, onValueChange, onBlur }: InputProps) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const geoPoint = useMemo<GeoPoint>(() => getValue<GeoPoint>() ?? [0, 0], [getValue]);\n const geoLocation = useMemo(() => GeoLocation.fromGeoPoint(geoPoint), [geoPoint]);\n\n const [longitudeText, setLongitudeText] = useState(geoLocation.longitude?.toString());\n const [latitudeText, setLatitudeText] = useState(geoLocation.latitude?.toString());\n\n useEffect(() => {\n const location = GeoLocation.fromGeoPoint(geoPoint);\n setLongitudeText(location.longitude.toString());\n setLatitudeText(location.latitude.toString());\n }, [geoPoint]);\n\n const handleCoordinateChange = 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<GeoPoint>() ?? [0, 0]);\n const newLocation = { ...currentLocation, [coordinateType]: coord };\n const newValue = GeoLocation.toGeoPoint(newLocation);\n onValueChange(type, newValue);\n }\n }\n },\n [getValue, onValueChange, type],\n );\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error} label={label} />\n <div role='none' className='grid grid-cols-2 gap-2'>\n <div role='none'>\n <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 value={latitudeText}\n onChange={handleCoordinateChange('latitude', setLatitudeText)}\n onBlur={onBlur}\n />\n </div>\n <div role='none'>\n <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 value={longitudeText}\n onChange={handleCoordinateChange('longitude', setLongitudeText)}\n onBlur={onBlur}\n />\n </div>\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC } from 'react';\n\nimport { type FormatEnum } from '@dxos/echo/internal';\nimport { type SimpleType } from '@dxos/effect';\nimport { Icon, Input, Tooltip } from '@dxos/react-ui';\nimport { labelSpacing } from '@dxos/react-ui-stack';\nimport { errorText, mx } from '@dxos/react-ui-theme';\n\nimport { type FormInputStateProps } from './FormContext';\n\n/**\n * Props passed to input components.\n */\nexport type InputProps = {\n type: SimpleType;\n format?: FormatEnum;\n label: string;\n placeholder?: string;\n inputOnly?: boolean;\n /**\n * Specifies the readonly variant: either disabled inputs, elements indicating they are usually editable but currently are not; or `static`, a field’s representation as regular content without signifiers that it is ever editable.\n */\n readonly?: 'disabled-input' | 'static' | false;\n} & FormInputStateProps;\n\n/**\n * Form input component.\n */\nexport type InputComponent = FC<InputProps>;\n\nexport type InputHeaderProps = {\n error?: string;\n label: string;\n readonly?: boolean;\n};\n\nexport const InputHeader = ({ error, label, readonly }: InputHeaderProps) => {\n const Label = readonly ? 'span' : Input.Label;\n const labelProps = readonly ? {} : { classNames: '!mlb-0' };\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", "//\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, subtleHover } from '@dxos/react-ui-theme';\n\nimport { translationKey } from '../../../translations';\nimport { InputHeader, type InputProps } from '../Input';\n\nexport const SelectOptionInput = ({ type, label, readonly, getStatus, getValue, onValueChange }: InputProps) => {\n const [selected, setSelectedId] = useState<string | null>(null);\n const [isNewOption, setIsNewOption] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus();\n const options = getValue<SelectOption[] | undefined>();\n\n // Initialization.\n useEffect(() => {\n if (options === undefined) {\n onValueChange(type, []);\n }\n }, [options, onValueChange, type]);\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((e: KeyboardEvent<HTMLInputElement>) => {\n if (e.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 <InputHeader error={error} 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: 'os' })}\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 data-no-submit\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 from 'react';\n\nimport { Input } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { safeParseFloat } from '@dxos/util';\n\nimport { InputHeader, type InputProps } from '../Input';\n\nconst gridCols = ['grid-cols-1', 'grid-cols-2', 'grid-cols-3', 'grid-cols-4'];\n\nexport const TupleInput = ({\n binding,\n type,\n label,\n readonly,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps & { binding: string[] }) => {\n const { status, error } = getStatus();\n\n // TODO(burdon): Generalize number/float/string, etc.\n const values: Record<string, number> = getValue<Record<string, number>>() ?? {};\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error} 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) => onValueChange(type, { ...values, [prop]: safeParseFloat(event.target.value, 0) })}\n onBlur={onBlur}\n />\n ))}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useRef } from 'react';\n\nimport { Input, Select, useTranslation } from '@dxos/react-ui';\n\nimport { translationKey } from '../../translations';\n\nimport { InputHeader, type InputProps } from './Input';\n\nexport const TextInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps) => {\n const { status, error } = getStatus();\n\n return readonly && !getValue() ? null : readonly === 'static' && inputOnly ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.TextInput\n disabled={!!readonly}\n placeholder={placeholder}\n value={getValue() ?? ''}\n onChange={(event) => onValueChange(type, event.target.value)}\n onBlur={onBlur}\n />\n )}\n {inputOnly && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n\nexport const NumberInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps) => {\n const { status, error } = getStatus();\n\n return readonly && !getValue() ? null : readonly === 'static' && inputOnly ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.TextInput\n type='number'\n disabled={!!readonly}\n placeholder={placeholder}\n value={getValue()}\n onChange={(event) => onValueChange(type, event.target.value)}\n onBlur={onBlur}\n />\n )}\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport const BooleanInput = ({ type, label, inputOnly, getStatus, getValue, onValueChange, readonly }: InputProps) => {\n const { status, error } = getStatus();\n const checked = Boolean(getValue());\n const { t } = useTranslation(translationKey);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{t(checked ? 'boolean input true value' : 'boolean input false value')}</p>\n ) : (\n <Input.Switch disabled={!!readonly} checked={checked} onCheckedChange={(value) => onValueChange(type, value)} />\n )}\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport type SelectInputOptions = InputProps & {\n options?: Array<{ value: string | number; label?: string }>;\n};\n\nexport const SelectInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n options,\n getStatus,\n getValue,\n onValueChange,\n}: SelectInputOptions) => {\n const { status, error } = getStatus();\n\n const value = getValue() as string | undefined;\n const handleValueChange = useCallback((value: string | number) => onValueChange(type, value), [type, onValueChange]);\n\n return readonly && !value ? null : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === '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 {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport const MarkdownInput = ({\n type,\n label,\n inputOnly,\n readonly,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps) => {\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 return (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n {readonly === 'static' ? (\n <p>{getValue() ?? ''}</p>\n ) : (\n <Input.TextArea\n ref={textareaRef}\n disabled={!!readonly}\n placeholder={placeholder}\n value={getValue() ?? ''}\n classNames={'min-bs-auto max-bs-40 overflow-auto'}\n onChange={(event) => onValueChange(type, event.target.value)}\n onBlur={onBlur}\n style={{ resize: 'none' }}\n spellCheck={false}\n />\n )}\n {inputOnly && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport type * as Schema from 'effect/Schema';\nimport React, { type ReactElement, useCallback, useEffect, useRef } from 'react';\n\nimport { type BaseObject, type PropertyKey } from '@dxos/echo/internal';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { cardDialogOverflow, cardSpacing } from '@dxos/react-ui-stack';\nimport { type ProjectionModel, type SchemaProperty } from '@dxos/schema';\n\nimport { type FormHandler, type FormOptions } from '../../hooks';\n\nimport { FormActions, type FormOuterSpacing } from './FormActions';\nimport { FormFields, type FormFieldsProps } from './FormContent';\nimport { FormProvider } from './FormContext';\nimport { type InputComponent, type InputProps } from './Input';\n\nexport type PropsFilter<T extends BaseObject> = (props: SchemaProperty<T>[]) => SchemaProperty<T>[];\n\nexport type ComponentLookup = (args: {\n prop: string;\n schema: Schema.Schema<any>;\n inputProps: InputProps;\n}) => ReactElement | undefined;\n\nexport type CustomInputMap = Partial<Record<string, InputComponent>>;\n\nexport type FormProps<T extends BaseObject> = ThemedClassName<{\n id?: string;\n values: Partial<T>;\n // TODO(burdon): Autofocus first input.\n autoFocus?: boolean;\n // TODO(burdon): Change to JsonPath includes/excludes.\n filter?: PropsFilter<T>;\n sort?: PropertyKey<T>[];\n projection?: ProjectionModel;\n autoSave?: boolean;\n outerSpacing?: FormOuterSpacing;\n onCancel?: () => void;\n}> &\n Pick<FormOptions<T>, 'schema' | 'onValuesChanged' | 'onValidate' | 'onSave'> &\n // TODO(wittjosiah): This needs to support different ref field options per field.\n FormFieldsProps;\n\nexport const Form = <T extends BaseObject>({\n classNames,\n id,\n testId,\n values: initialValues,\n autoFocus,\n readonly,\n autoSave,\n outerSpacing = true,\n schema,\n onCancel,\n onValuesChanged,\n onValidate,\n onSave,\n ...props\n}: FormProps<T>) => {\n const formRef = useRef<HTMLDivElement>(null);\n\n // Focus the first focusable element within this form.\n const { findFirstFocusable } = useFocusFinders();\n useEffect(() => {\n if (autoFocus && formRef.current) {\n const firstFocusable = findFirstFocusable(formRef.current);\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n }, [autoFocus]);\n\n // TODO(burdon): Name?\n const handleValid = useCallback(\n async (values: any, meta: { changed: FormHandler<T>['changed'] }) => {\n if (autoSave) {\n await onSave?.(values, meta);\n }\n },\n [autoSave, onSave],\n );\n\n return (\n <FormProvider\n formRef={formRef}\n schema={schema}\n autoSave={autoSave}\n initialValues={initialValues}\n onValuesChanged={onValuesChanged}\n onValidate={onValidate}\n onValid={handleValid}\n onSave={onSave}\n >\n <div role='none' className='contents' {...(id && { 'data-object-id': id })} data-testid={testId}>\n <FormFields\n {...props}\n ref={formRef}\n classNames={[\n outerSpacing === 'blockStart-0'\n ? 'pli-cardSpacingInline mbe-cardSpacingBlock [&>.mbs-inputSpacingBlock:first-child]:!mbs-0'\n : outerSpacing === 'scroll-fields'\n ? 'pli-cardSpacingInline pbe-cardSpacingBlock'\n : outerSpacing\n ? cardSpacing\n : false,\n outerSpacing === 'scroll-fields' && cardDialogOverflow,\n classNames,\n ]}\n readonly={readonly}\n schema={schema}\n />\n {(onCancel || onSave) && !autoSave && !readonly && (\n <FormActions readonly={readonly} onCancel={onCancel} outerSpacing={outerSpacing} />\n )}\n </div>\n </FormProvider>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { IconButton, useTranslation } from '@dxos/react-ui';\nimport { cardSpacing } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { translationKey } from '../../translations';\n\nimport { useFormContext } from './FormContext';\n\nexport type FormOuterSpacing = boolean | 'blockStart-0' | 'scroll-fields';\n\nexport type FormActionsProps = {\n readonly?: boolean;\n onCancel?: () => void;\n outerSpacing?: FormOuterSpacing;\n};\n\nexport const FormActions = ({ readonly, onCancel, outerSpacing = true }: FormActionsProps) => {\n const { t } = useTranslation(translationKey);\n const { canSave, handleSave } = useFormContext();\n\n return (\n <div\n role='none'\n className={mx(\n outerSpacing === 'scroll-fields'\n ? 'pli-cardSpacingInline mbe-cardSpacingBlock'\n : outerSpacing\n ? cardSpacing\n : 'mbs-cardSpacingBlock',\n 'flex [&_button]:grow gap-1 first:mbs-0',\n )}\n >\n {onCancel && !readonly && (\n <IconButton data-testid='cancel-button' icon='ph--x--regular' label={t('cancel button')} onClick={onCancel} />\n )}\n {handleSave && (\n <IconButton\n type='submit'\n data-testid='save-button'\n disabled={!canSave}\n icon='ph--check--regular'\n label={t('save button')}\n onClick={handleSave}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, {\n type FocusEvent,\n type PropsWithChildren,\n type RefObject,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n} from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { type BaseObject, getValue } from '@dxos/echo/internal';\nimport { type SimpleType, createJsonPath } from '@dxos/effect';\n\nimport { type FormHandler, type FormOptions, useForm } from '../../hooks';\n\ntype FormContextValue<T extends BaseObject> = FormHandler<T>;\n\nconst FormContext = createContext<FormContextValue<any> | undefined>(undefined);\n\nexport const useFormContext = <T extends BaseObject>(): FormContextValue<T> => {\n return useContext(FormContext) ?? raise(new Error('Missing FormContext'));\n};\n\nexport const useFormValues = (path: (string | number)[] = []): any => {\n const { values: formValues } = useFormContext();\n const jsonPath = createJsonPath(path);\n return getValue(formValues, jsonPath) as BaseObject;\n};\n\nexport type FormInputStateProps = {\n getStatus: () => { status?: 'error'; error?: string };\n getValue: <V>() => V | undefined;\n onValueChange: (type: SimpleType, value: any) => void;\n onBlur: (event: FocusEvent<HTMLElement>) => void;\n};\n\nexport const useInputProps = (path: (string | number)[] = []): FormInputStateProps => {\n const { getStatus, getValue: getFormValue, onValueChange, onTouched } = useFormContext();\n\n const stablePath = useMemo(() => path, [Array.isArray(path) ? path.join('.') : path]);\n return useMemo(\n () => ({\n getStatus: () => getStatus(stablePath),\n getValue: () => getFormValue(stablePath),\n onValueChange: (type: SimpleType, value: any) => onValueChange(stablePath, type, value),\n onBlur: () => onTouched(stablePath),\n }),\n [getStatus, getFormValue, onValueChange, onTouched, stablePath],\n );\n};\n\nexport const FormProvider = ({\n children,\n formRef,\n autoSave,\n ...formOptions\n}: PropsWithChildren<\n FormOptions<any> & {\n formRef?: RefObject<HTMLDivElement | null>;\n autoSave?: boolean;\n }\n>) => {\n const form = useForm(formOptions);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n const keyIsEnter = event.key === 'Enter';\n const modifierUsed = event.ctrlKey || event.altKey || event.metaKey || event.shiftKey;\n const inputIsTextarea = (event.target as HTMLElement).tagName.toLowerCase() === 'textarea';\n const inputOptOut =\n (event.target as HTMLElement).hasAttribute('data-no-submit') ||\n (event.target as HTMLElement).closest('[data-no-submit]') !== null;\n\n // Regular inputs: Submit on Enter (no modifiers).\n const shouldSubmitRegularInput = !inputIsTextarea && keyIsEnter && !modifierUsed;\n\n // Textareas: Submit only on Meta+Enter.\n const shouldSubmitTextarea = inputIsTextarea && keyIsEnter && event.metaKey;\n\n if ((shouldSubmitRegularInput || shouldSubmitTextarea) && !inputOptOut) {\n if (!autoSave && form.canSave) {\n form.handleSave();\n }\n if (autoSave && form.formIsValid) {\n (event.target as HTMLElement).blur();\n }\n }\n },\n [form.canSave, form.formIsValid, form.handleSave, autoSave],\n );\n\n useEffect(() => {\n if (!formRef?.current) {\n return;\n }\n\n const formElement = formRef.current;\n\n formElement.addEventListener('keydown', handleKeyDown);\n return () => formElement.removeEventListener('keydown', handleKeyDown);\n }, [formRef, form.canSave, form.formIsValid, form.handleSave, autoSave]);\n\n return <FormContext.Provider value={form}>{children}</FormContext.Provider>;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type BaseObject, getValue, setValue } from '@dxos/echo/internal';\nimport { type JsonPath, type SimpleType, createJsonPath, fromEffectValidationPath } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { type ValidationError, validateSchema } from '@dxos/schema';\nimport { type MaybePromise } from '@dxos/util';\n\n/**\n * Return type from `useForm` hook.\n */\nexport type FormHandler<T extends BaseObject> = {\n //\n // Form state management.\n //\n\n values: Partial<T>;\n errors: Record<JsonPath, string>;\n touched: Record<JsonPath, boolean>;\n changed: Record<JsonPath, boolean>;\n canSave: boolean;\n formIsValid: boolean;\n\n // TODO(burdon): Return onSave.\n handleSave: () => void;\n\n //\n // Form input component helpers.\n //\n\n getStatus: (path: string | (string | number)[]) => { status?: 'error'; error?: string };\n getValue: <V>(path: (string | number)[]) => V | undefined;\n onValueChange: <V>(path: (string | number)[], type: SimpleType, value: V) => void;\n onTouched: (path: (string | number)[]) => void;\n};\n\n/**\n * Hook options.\n */\nexport interface FormOptions<T extends BaseObject> {\n /**\n * Effect schema (Type literal).\n */\n schema: Schema.Schema<T, any>;\n\n /**\n * Initial values (which may not pass validation).\n */\n initialValues: Partial<T>;\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>) => 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 // TODO(burdon): Change to key x value?\n onValidate?: (values: T) => ValidationError[] | undefined;\n\n /**\n * Called when the form is valid.\n */\n onValid?: (values: T, meta: { changed: FormHandler<T>['changed'] }) => void;\n\n /**\n * Called when the form is submitted and passes validation.\n */\n onSave?: (values: T, meta: { changed: FormHandler<T>['changed'] }) => MaybePromise<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 useForm = <T extends BaseObject>({\n schema,\n initialValues,\n onValuesChanged,\n onValidate,\n onValid,\n onSave,\n}: FormOptions<T>): FormHandler<T> => {\n invariant(SchemaAST.isTypeLiteral(schema.ast));\n\n const [values, setValues] = useState<Partial<T>>(initialValues);\n\n useEffect(() => {\n setValues(initialValues);\n }, [initialValues]);\n\n const [touched, setTouched] = useState<Record<JsonPath, boolean>>(createKeySet(initialValues, false));\n const [changed, setChanged] = useState<Record<JsonPath, boolean>>(createKeySet(initialValues, false));\n const [errors, setErrors] = useState<Record<JsonPath, string>>({});\n const [saving, setSaving] = useState(false);\n\n //\n // Validation.\n //\n\n const validate = useCallback(\n (values: Partial<T>): values is T => {\n let errors: ValidationError[] = validateSchema(schema, values) ?? [];\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 [schemaDirty, setSchemaDirty] = useState(false);\n useEffect(() => setSchemaDirty(true), [schema]);\n useEffect(() => {\n if (schemaDirty) {\n validate(values);\n setSchemaDirty(false);\n }\n }, [values, schemaDirty]);\n\n const formIsValid = 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 * Basically, 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 });\n } finally {\n setSaving(false);\n }\n }\n }, [values, validate, onSave, changed]);\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 matchingError = 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: matchingError ? 'error' : undefined,\n error: matchingError ? matchingError[1] : undefined,\n };\n },\n [errors, touched],\n );\n\n const getFormValue = useCallback<FormHandler<T>['getValue']>(\n <V>(path: (string | number)[]): V | undefined => {\n return getValue(values, createJsonPath(path));\n },\n [values],\n );\n\n // TODO(wittjosiah): This is causing the entire form to re-render on every change.\n const onValueChange = useCallback<FormHandler<T>['onValueChange']>(\n (path: (string | number)[], type: SimpleType, value: any) => {\n const jsonPath = createJsonPath(path);\n let parsedValue = value;\n try {\n if (type === 'number') {\n parsedValue = parseFloat(value as string) || 0;\n }\n } catch (err) {\n log.catch(err);\n parsedValue = undefined;\n }\n\n const newValues = { ...setValue(values, jsonPath, parsedValue) };\n setValues(newValues);\n const newChanged = { ...changed, [jsonPath]: true };\n setChanged(newChanged);\n onValuesChanged?.(newValues);\n\n const isValid = validate(newValues);\n if (isValid && onValid) {\n onValid(newValues, { changed: newChanged });\n }\n },\n [values, onValuesChanged, validate, onValid, changed],\n );\n\n const onTouched = useCallback(\n (path: (string | number)[]) => {\n const jsonPath = createJsonPath(path);\n setTouched((touched) => ({ ...touched, [jsonPath]: true }));\n validate(values);\n },\n [validate, values],\n );\n\n return useMemo(\n () => ({\n // State.\n values,\n errors,\n touched,\n changed,\n canSave,\n formIsValid,\n\n // Actions.\n handleSave,\n\n // Field utils.\n getStatus,\n getValue: getFormValue,\n onValueChange,\n onTouched,\n }),\n [\n values,\n errors,\n touched,\n changed,\n canSave,\n formIsValid,\n handleSave,\n getStatus,\n getFormValue,\n onValueChange,\n onTouched,\n ],\n );\n};\n\nconst createKeySet = <T extends BaseObject, V>(obj: T, value: V): Record<JsonPath, V> => {\n invariant(obj);\n return Object.keys(obj).reduce((acc, key) => ({ ...acc, [key]: value }), {} as Record<JsonPath, V>);\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 } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { type TypeAnnotation, getObjectDXN } from '@dxos/echo/internal';\nimport { Filter, type Space } from '@dxos/react-client/echo';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type QueryRefOptions } from './useQueryRefOptions';\n\ntype UseRefQueryLookupProps = { space?: Space };\n\nexport const useRefQueryLookupHandler = ({ space }: UseRefQueryLookupProps): QueryRefOptions => {\n return useCallback(\n async (typeInfo: TypeAnnotation) => {\n if (!space) {\n return [];\n }\n const query = space.db.query(Filter.typename(typeInfo.typename));\n const { objects } = await query.run();\n\n return objects\n .map((object) => {\n const dxn = getObjectDXN(object);\n if (!dxn) {\n return undefined;\n }\n\n const item = { dxn, label: Obj.getLabel(object) ?? object?.id ?? '' };\n return item;\n })\n .filter(isNonNullable);\n },\n [space],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { type TypeAnnotation } from '@dxos/echo/internal';\nimport { type DXN } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type Palette } from '@dxos/react-ui-types';\nimport { type MaybePromise } from '@dxos/util';\n\nexport type RefOption = { dxn: DXN; label?: string };\nexport type QueryRefOptions = (type: TypeAnnotation) => MaybePromise<RefOption[]>;\n\nexport type QueryTag = {\n id: string;\n label: string;\n hue?: Palette;\n};\n\ntype UseQueryRefOptionsProps = { refTypeInfo: TypeAnnotation | undefined; onQueryRefOptions?: QueryRefOptions };\n\n/**\n * Hook to query reference options based on type information.\n * Used internally within forms to fetch and format reference options for reference fields.\n */\n// TODO(wittjosiah): This should be a reactive query so that the options are always up to date.\nexport const useQueryRefOptions = ({ refTypeInfo, onQueryRefOptions }: UseQueryRefOptionsProps) => {\n const [options, setOptions] = useState<QueryTag[]>([]);\n const [loading, setLoading] = useState(false);\n const [state, setState] = useState({});\n const update = useCallback(() => setState({}), []);\n\n useEffect(() => {\n if (!refTypeInfo || !onQueryRefOptions) {\n return;\n }\n\n const fetchOptions = async () => {\n setLoading(true);\n try {\n const fetchedOptions = await onQueryRefOptions(refTypeInfo);\n setOptions(\n fetchedOptions.map((option) => {\n const dxn = option.dxn.toString() as string;\n return { id: dxn, label: option.label ?? dxn, hue: 'neutral' as any };\n }),\n );\n } catch (error) {\n log.error('Failed to fetch ref options:', error);\n setOptions([]);\n } finally {\n setLoading(false);\n }\n };\n\n void fetchOptions();\n }, [refTypeInfo, onQueryRefOptions, state]);\n\n return { options, update, loading };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport * as StringEffect from 'effect/String';\nimport React, { Component, type PropsWithChildren, type ReactNode, forwardRef, useMemo } from 'react';\n\nimport { createJsonPath, findNode, getDiscriminatedType, isDiscriminatedUnion } from '@dxos/effect';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { type ProjectionModel, type SchemaProperty, getSchemaProperties } from '@dxos/schema';\nimport { isTruthy } from '@dxos/util';\n\nimport { type QueryRefOptions } from '../../hooks';\nimport { getRefProps } from '../../util';\n\nimport { ArrayField } from './ArrayField';\nimport { SelectInput } from './Defaults';\nimport { getInputComponent } from './factory';\nimport { type ComponentLookup } from './Form';\nimport { useFormValues, useInputProps } from './FormContext';\nimport { type InputComponent } from './Input';\nimport { RefField, type RefFieldProps } from './RefField';\n\nexport type FormFieldProps = {\n property: SchemaProperty<any>;\n path?: (string | number)[];\n /** Used to indicate if input should be presented inline (e.g. for array items). */\n inline?: boolean;\n projection?: ProjectionModel;\n lookupComponent?: ComponentLookup;\n Custom?: Partial<Record<string, InputComponent>>;\n} & Pick<\n RefFieldProps,\n | 'readonly'\n | 'onQueryRefOptions'\n | 'createOptionLabel'\n | 'createOptionIcon'\n | 'onCreate'\n | 'createSchema'\n | 'createInitialValuePath'\n>;\n\nexport const FormField = ({\n property,\n path,\n readonly,\n inline,\n projection,\n onQueryRefOptions,\n createOptionLabel,\n createOptionIcon,\n onCreate,\n createSchema,\n createInitialValuePath,\n lookupComponent,\n Custom,\n}: FormFieldProps) => {\n const { ast, name, type, format, title, description, options, examples, array } = property;\n const inputProps = useInputProps(path);\n\n const label = useMemo(() => title ?? Function.pipe(name, StringEffect.capitalize), [title, name]);\n const placeholder = useMemo(\n () => (examples?.length ? `Example: \"${examples[0]}\"` : description),\n [examples, description],\n );\n\n //\n // Registry and Custom.\n //\n\n const FoundComponent = lookupComponent?.({\n prop: name,\n schema: Schema.make(ast),\n inputProps: {\n type,\n format,\n label,\n readonly,\n placeholder,\n ...inputProps,\n },\n });\n\n if (FoundComponent) {\n return FoundComponent;\n }\n\n const jsonPath = createJsonPath(path ?? []);\n const CustomComponent = Custom?.[jsonPath];\n if (CustomComponent) {\n return (\n <CustomComponent\n type={type}\n format={format}\n label={label}\n inputOnly={inline}\n placeholder={placeholder}\n readonly={readonly}\n {...inputProps}\n />\n );\n }\n\n //\n // Refs.\n //\n\n const refProps = getRefProps(property);\n if (refProps) {\n return (\n <RefField\n ast={refProps.ast}\n array={refProps.isArray}\n type={type}\n format={format}\n label={label}\n placeholder={placeholder}\n readonly={readonly}\n inputOnly={inline}\n onQueryRefOptions={onQueryRefOptions}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n onCreate={onCreate}\n createSchema={createSchema}\n createInitialValuePath={createInitialValuePath}\n {...inputProps}\n />\n );\n }\n\n //\n // Arrays.\n //\n\n if (array) {\n return <ArrayField property={property} path={path} inputProps={inputProps} readonly={readonly} Custom={Custom} />;\n }\n\n //\n // Standard Inputs.\n //\n\n const InputComponent = getInputComponent(type, format);\n if (InputComponent) {\n return (\n <InputComponent\n type={type}\n format={format}\n label={label}\n inputOnly={inline}\n placeholder={placeholder}\n readonly={readonly}\n {...inputProps}\n />\n );\n }\n\n //\n // Select.\n //\n\n if (options) {\n return (\n <SelectInput\n type={type}\n format={format}\n readonly={readonly}\n inputOnly={inline}\n label={label}\n options={options.map((option) => ({ value: option, label: String(option) }))}\n placeholder={placeholder}\n {...inputProps}\n />\n );\n }\n\n //\n // Nested Objects.\n //\n\n if (type === 'object') {\n const baseNode = findNode(ast, isDiscriminatedUnion);\n const typeLiteral = baseNode\n ? getDiscriminatedType(baseNode, inputProps.getValue() as any)\n : findNode(ast, SchemaAST.isTypeLiteral);\n\n if (typeLiteral) {\n return (\n <>\n {!inline && <h3 className={mx('text-lg mlb-inputSpacingBlock first:mbs-0')}>{label}</h3>}\n <FormFields\n schema={Schema.make(typeLiteral)}\n path={path}\n readonly={readonly}\n projection={projection}\n onQueryRefOptions={onQueryRefOptions}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n onCreate={onCreate}\n Custom={Custom}\n lookupComponent={lookupComponent}\n />\n </>\n );\n }\n }\n\n return null;\n};\n\nexport type FormFieldsProps = ThemedClassName<\n {\n testId?: string;\n schema: Schema.Schema.All;\n /**\n * Path to the current object from the root. Used with nested forms.\n */\n path?: (string | number)[];\n filter?: (props: SchemaProperty<any>[]) => SchemaProperty<any>[];\n sort?: string[];\n /**\n * Optional projection for projection-based field management\n */\n projection?: ProjectionModel;\n lookupComponent?: ComponentLookup;\n /**\n * Map of custom renderers for specific properties.\n * Prefer lookupComponent for plugin specific input surfaces.\n */\n Custom?: Partial<Record<string, InputComponent>>;\n onQueryRefOptions?: QueryRefOptions;\n } & Pick<FormFieldProps, 'readonly'> &\n Pick<\n RefFieldProps,\n | 'onQueryRefOptions'\n | 'createOptionLabel'\n | 'createOptionIcon'\n | 'onCreate'\n | 'createSchema'\n | 'createInitialValuePath'\n >\n>;\n\nexport const FormFields = forwardRef<HTMLDivElement, FormFieldsProps>(\n (\n {\n classNames,\n schema,\n path,\n filter,\n sort,\n projection,\n readonly,\n lookupComponent,\n Custom,\n onQueryRefOptions,\n ...props\n },\n forwardRef,\n ) => {\n const values = useFormValues(path);\n const properties = useMemo(() => {\n const props = getSchemaProperties(schema.ast, values);\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));\n const orderedProps: SchemaProperty<any>[] = [];\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((fp) => String(fp.field.path)));\n const remainingProps = visibleProps.filter((prop) => !projectionPaths.has(prop.name));\n orderedProps.push(...remainingProps);\n\n return orderedProps;\n }\n\n // Fallback to legacy filter/sort behavior\n const filtered = filter ? filter(props) : props;\n return sort ? filtered.sort((a, b) => sort.indexOf(a.name) - sort.indexOf(b.name)) : filtered;\n }, [schema, values, filter, sort, projection?.fields]);\n\n return (\n <div role='form' className={mx('is-full', classNames)} ref={forwardRef}>\n {properties\n .map((property) => {\n return (\n <ErrorBoundary key={property.name} path={[...(path ?? []), property.name]}>\n <FormField\n property={property}\n path={[...(path ?? []), property.name]}\n readonly={readonly}\n projection={projection}\n onQueryRefOptions={onQueryRefOptions}\n lookupComponent={lookupComponent}\n Custom={Custom}\n {...props}\n />\n </ErrorBoundary>\n );\n })\n .filter(isTruthy)}\n </div>\n );\n },\n);\n\ntype ErrorState = {\n error: Error | undefined;\n};\n\ntype ErrorBoundaryProps = PropsWithChildren<{\n path?: (string | number)[];\n}>;\n\nclass ErrorBoundary extends Component<ErrorBoundaryProps, ErrorState> {\n static getDerivedStateFromError(error: Error): { error: Error } {\n return { error };\n }\n\n override state = { error: undefined };\n\n override componentDidUpdate(prevProps: ErrorBoundaryProps): void {\n if (prevProps.path !== this.props.path) {\n this.resetError();\n }\n }\n\n override render(): ReactNode {\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(): void {\n this.setState({ error: undefined });\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { FormatEnum, 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?: FormatEnum;\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 FormatEnum.Boolean:\n return parseScalar(TypeEnum.Boolean);\n\n case FormatEnum.Number:\n case FormatEnum.Percent:\n case FormatEnum.Currency:\n return parseScalar(TypeEnum.Number);\n\n case FormatEnum.String:\n case FormatEnum.Markdown: {\n return parseScalar(TypeEnum.String);\n }\n\n case FormatEnum.Ref:\n throw new Error(`unexpected format: ${FormatEnum.Ref}`);\n\n case FormatEnum.DateTime:\n case FormatEnum.Date:\n case FormatEnum.Time:\n case FormatEnum.Timestamp: {\n const date = new Date(value as string | number);\n return isNaN(date.getTime()) ? null : date;\n }\n\n case FormatEnum.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?: FormatEnum;\n};\n\nexport const cellClassesForFieldType = ({ type, format }: CellClassesForFieldTypeProps): string[] | undefined => {\n switch (format || type) {\n case FormatEnum.Markdown:\n return undefined;\n case FormatEnum.Time:\n case FormatEnum.Timestamp:\n case FormatEnum.DateTime:\n case FormatEnum.Date:\n case FormatEnum.Duration:\n return ['font-mono', 'text-right'];\n case FormatEnum.Currency:\n return ['text-right'];\n case FormatEnum.JSON:\n case FormatEnum.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 { FormatEnum, GeoLocation, TypeEnum } from '@dxos/echo/internal';\n\ntype ValueFormatProps = {\n type: TypeEnum;\n format?: FormatEnum | 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 FormatEnum.Boolean: {\n return formatScalar(TypeEnum.Boolean);\n }\n case FormatEnum.Number: {\n return formatScalar(TypeEnum.Number);\n }\n case FormatEnum.String:\n case FormatEnum.Ref: {\n return formatScalar(TypeEnum.String);\n }\n case FormatEnum.Percent: {\n return `${(value as number) * 100}%`;\n }\n case FormatEnum.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 FormatEnum.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 FormatEnum.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 FormatEnum.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 FormatEnum.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 FormatEnum.Boolean:\n case FormatEnum.Number:\n case FormatEnum.String:\n case FormatEnum.Ref: {\n return formatScalar(type);\n }\n case FormatEnum.Percent: {\n return String(value * 100);\n }\n case FormatEnum.Currency: {\n return String(value);\n }\n case FormatEnum.DateTime: {\n const date = new Date(value as number);\n return date.toISOString();\n }\n case FormatEnum.Date: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[0];\n }\n case FormatEnum.Time: {\n const date = new Date(value as number);\n return date.toISOString().split('T')[1].split('.')[0];\n }\n case FormatEnum.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 type * as SchemaAST from 'effect/SchemaAST';\n\nimport { FormatEnum, ReferenceAnnotationId } from '@dxos/echo/internal';\nimport { findAnnotation } from '@dxos/effect';\nimport { type SchemaProperty } from '@dxos/schema';\n\nimport { findArrayElementType } from './schema';\n\ntype RefProps = {\n ast: SchemaAST.AST;\n isArray: boolean;\n};\n\nexport const getRefProps = (property: SchemaProperty<any>): RefProps | undefined => {\n const { ast, format, array } = property;\n\n // Array of references.\n if (array) {\n const elementType = findArrayElementType(ast);\n if (elementType) {\n const annotation = findAnnotation(elementType, ReferenceAnnotationId);\n if (annotation) {\n return { ast: elementType, isArray: true };\n }\n }\n }\n\n // Direct reference.\n if (format === FormatEnum.Ref) {\n return { ast, isArray: false };\n }\n\n return undefined;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { findNode } from '@dxos/effect';\n\nexport const findArrayElementType = (ast: SchemaAST.AST) => {\n const tupleType = findNode(ast, SchemaAST.isTupleType);\n return (tupleType as SchemaAST.TupleType | undefined)?.rest[0]?.type;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport * as String from 'effect/String';\nimport React, { Fragment, useCallback } from 'react';\n\nimport { SimpleType, findNode, getDiscriminatedType, isDiscriminatedUnion } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { IconButton, useTranslation } from '@dxos/react-ui';\nimport { type SchemaProperty, getSchemaProperties } from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { findArrayElementType } from '../../util';\n\nimport { type ComponentLookup } from './Form';\nimport { FormField, type FormFieldProps } from './FormContent';\nimport { type FormInputStateProps, useFormValues } from './FormContext';\nimport { type InputComponent, InputHeader } from './Input';\n\ntype ArrayFieldProps = {\n property: SchemaProperty<any>;\n inputProps: FormInputStateProps;\n path?: (string | number)[];\n Custom?: Partial<Record<string, InputComponent>>;\n lookupComponent?: ComponentLookup;\n} & Pick<FormFieldProps, 'readonly'>;\n\nexport const ArrayField = ({ property, readonly, path, inputProps, Custom, lookupComponent }: ArrayFieldProps) => {\n const { t } = useTranslation(translationKey);\n const { ast, name, type, title } = property;\n // TODO(wittjosiah): The fallback to an empty array stops the form from crashing but isn't immediately live.\n // It doesn't become live until another field is touched, but that's better than the whole form crashing.\n const values = (useFormValues(path ?? []) ?? []) as any[];\n invariant(Array.isArray(values), `Values at path ${path?.join('.')} must be an array.`);\n const label = title ?? Function.pipe(name, String.capitalize);\n\n const elementType = findArrayElementType(ast);\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(getSchemaProperties(typeLiteral, {}).map((prop) => [prop.name, prop.defaultValue]));\n };\n\n const getDefaultValue = () =>\n type === 'object' && elementType ? getDefaultObjectValue(elementType) : SimpleType.getDefaultValue(type);\n\n const handleAdd = useCallback(() => {\n inputProps.onValueChange(type, [...values, getDefaultValue()]);\n }, [type, elementType, inputProps, values]);\n\n const handleRemove = useCallback(\n (index: number) => {\n const newValues = values.filter((_, i) => i !== index);\n inputProps.onValueChange(type, newValues);\n },\n [type, inputProps, values],\n );\n\n if (!elementType) {\n return null;\n }\n\n return readonly && values.length < 1 ? null : (\n <>\n <InputHeader readonly label={label} />\n <div\n role='none'\n className={\n readonly\n ? 'flex flex-wrap gap-1 mlb-1'\n : values.length > 0\n ? 'grid gap-1 grid-cols-[1fr_min-content] mlb-1'\n : 'hidden'\n }\n >\n {values.map((_value, index) => {\n const field = (\n <FormField\n property={{\n ...property,\n array: false, // NOTE(ZaymonFC): This breaks arrays of arrays but ¯\\_(ツ)_/¯. Ping me if you need that.\n ast: elementType,\n }}\n path={[...(path ?? []), index]}\n readonly={readonly}\n inline\n Custom={Custom}\n lookupComponent={lookupComponent}\n />\n );\n return readonly ? (\n field\n ) : (\n <Fragment key={index}>\n <div role='none'>{field}</div>\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n label={t('button remove')}\n onClick={() => handleRemove(index)}\n classNames='self-center'\n />\n </Fragment>\n );\n })}\n </div>\n {!readonly && (\n <IconButton\n classNames='is-full mlb-cardSpacingBlock flex'\n icon='ph--plus--regular'\n label={t('add field')}\n onClick={handleAdd}\n />\n )}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { FormatEnum } from '@dxos/echo/internal';\nimport { type SimpleType } from '@dxos/effect';\n\nimport { GeoPointInput } from './custom';\nimport { BooleanInput, MarkdownInput, NumberInput, TextInput } from './Defaults';\nimport { type InputComponent } from './Input';\n\n/**\n * Get property input component.\n */\nexport const getInputComponent = (type: SimpleType, format?: FormatEnum | string): InputComponent | undefined => {\n switch (format) {\n case FormatEnum.GeoPoint:\n return GeoPointInput;\n case FormatEnum.Markdown:\n return MarkdownInput;\n }\n\n switch (type) {\n case 'string':\n return TextInput;\n case 'number':\n return NumberInput;\n case 'boolean':\n return BooleanInput;\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport '@dxos/lit-ui/dx-tag-picker.pcss';\n\nimport type * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport React, { useCallback, useMemo } from 'react';\n\nimport {\n type EchoSchema,\n Expando,\n Ref,\n ReferenceAnnotationId,\n type ReferenceAnnotationValue,\n getTypeAnnotation,\n} from '@dxos/echo/internal';\nimport { findAnnotation } from '@dxos/effect';\nimport { DXN } from '@dxos/keys';\nimport { type DxTagPickerItemClick } from '@dxos/lit-ui';\nimport { DxAnchor, DxTagPickerItem } from '@dxos/lit-ui/react';\nimport { Button, Icon, Input, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type QueryRefOptions, useQueryRefOptions } from '../../hooks';\nimport { translationKey } from '../../translations';\nimport { ObjectPicker } from '../ObjectPicker';\n\nimport { TextInput } from './Defaults';\nimport { InputHeader, type InputProps } from './Input';\n\nexport type RefFieldProps = InputProps & {\n ast?: SchemaAST.AST;\n array?: boolean;\n createOptionLabel?: [string, { ns: string }];\n createOptionIcon?: string;\n onCreate?: (values: any) => void;\n createSchema?: Schema.Schema.AnyNoContext;\n createInitialValuePath?: string;\n onQueryRefOptions?: QueryRefOptions;\n schema?: EchoSchema;\n};\n\n// TODO(thure): Is this a standard that should be better canonized?\nconst isRefSnapShot = (val: any): val is { '/': string } => {\n return typeof val === 'object' && typeof (val as any)?.['/'] === 'string';\n};\n\nexport const RefField = ({\n type,\n label,\n readonly,\n placeholder,\n inputOnly,\n array,\n ast,\n getValue,\n createOptionLabel,\n createOptionIcon,\n onBlur,\n onCreate,\n createSchema,\n createInitialValuePath,\n onQueryRefOptions,\n onValueChange,\n ...restInputProps\n}: RefFieldProps) => {\n const { t } = useTranslation(translationKey);\n const refTypeInfo = useMemo(\n () => (ast ? findAnnotation<ReferenceAnnotationValue>(ast, ReferenceAnnotationId) : undefined),\n [ast],\n );\n const {\n options: availableOptions,\n update: updateOptions,\n loading: _loading,\n } = useQueryRefOptions({ refTypeInfo, onQueryRefOptions });\n\n if ((refTypeInfo && refTypeInfo?.typename === getTypeAnnotation(Expando)?.typename) || !onQueryRefOptions) {\n // If ref type is expando, fall back to taking a DXN in string format.\n return (\n <RefFieldFallback\n {...{ type, label, placeholder, readonly, inputOnly, getValue, onBlur, onValueChange, ...restInputProps }}\n />\n );\n }\n\n const handleGetValue = useCallback(() => {\n const formValue = getValue();\n\n const unknownToRefOption = (val: unknown) => {\n const isRef = Ref.isRef(val);\n if (isRef || isRefSnapShot(val)) {\n const dxnString = isRef ? val.dxn.toString() : val['/'];\n const matchingOption = availableOptions.find((option) => option.id === dxnString);\n if (matchingOption) {\n return matchingOption;\n }\n }\n return undefined;\n };\n\n if (array && Array.isArray(formValue)) {\n return formValue.map(unknownToRefOption).filter(isNonNullable) ?? [];\n }\n\n const option = unknownToRefOption(formValue);\n if (option) {\n return [option];\n }\n\n return [];\n }, [getValue, availableOptions, array]);\n\n const handleUpdate = useCallback(\n (ids: string[]) => {\n if (ids.length === 0) {\n onValueChange('object', undefined);\n return;\n }\n\n const refs = ids\n .map((id) => {\n const item = availableOptions.find((option) => option.id === id);\n if (item) {\n const dxn = DXN.parse(item.id);\n return Ref.fromDXN(dxn);\n }\n return null;\n })\n .filter(isNonNullable);\n\n if (array) {\n onValueChange('object', refs);\n } else {\n onValueChange('object', refs[0]);\n }\n },\n [availableOptions, array, onValueChange],\n );\n\n const handleCreate = useCallback(\n (values: any) => {\n onCreate?.(values);\n updateOptions();\n },\n [onCreate, updateOptions],\n );\n\n if (!refTypeInfo) {\n return null;\n }\n\n const { status, error } = restInputProps.getStatus();\n\n const items = handleGetValue();\n const selectedIds = useMemo(() => items.map((i: any) => i.id), [items]);\n const toggleSelect = useCallback(\n (id: string) => {\n if (array) {\n const nextIds = selectedIds.includes(id) ? selectedIds.filter((x) => x !== id) : [...selectedIds, id];\n handleUpdate(nextIds);\n } else {\n if (selectedIds[0] === id) {\n handleUpdate([]);\n } else {\n handleUpdate([id]);\n }\n }\n },\n [array, selectedIds, handleUpdate],\n );\n\n // NOTE(thure): I left both predicates in-place in case we decide to add variants which do render readonly but empty values.\n return readonly && items.length < 1 ? null : (\n <Input.Root validationValence={status}>\n {!inputOnly && <InputHeader error={error} label={label} />}\n <div data-no-submit>\n {readonly ? (\n items.length < 1 ? (\n <p className={mx(descriptionText, 'mbe-2')}>{t('empty readonly ref field label')}</p>\n ) : (\n items.map((item) => (\n <DxAnchor key={item.id} refid={item.id} rootclassname='mie-1'>\n {item.label}\n </DxAnchor>\n ))\n )\n ) : (\n <ObjectPicker.Root>\n <ObjectPicker.Trigger asChild>\n <Button variant='ghost' classNames='is-full text-start gap-2'>\n <div role='none' className='grow'>\n {items?.length ? (\n items?.map((item) => (\n <DxTagPickerItem\n key={item.id}\n itemId={item.id}\n label={item.label}\n {...(item.hue ? { hue: item.hue } : {})}\n removeLabel={t('remove item label')}\n onItemClick={(event: DxTagPickerItemClick) => {\n if (event.action === 'remove') {\n toggleSelect(item.id);\n }\n }}\n />\n ))\n ) : (\n <span className='text-description'>\n {placeholder ?? t('ref field placeholder', { count: array ? 99 : 1 })}\n </span>\n )}\n </div>\n <Icon size={3} icon='ph--caret-down--bold' />\n </Button>\n </ObjectPicker.Trigger>\n <ObjectPicker.Content\n options={availableOptions}\n selectedIds={selectedIds}\n onSelect={toggleSelect}\n createSchema={createSchema}\n createOptionLabel={createOptionLabel}\n createOptionIcon={createOptionIcon}\n createInitialValuePath={createInitialValuePath}\n onCreate={handleCreate}\n />\n </ObjectPicker.Root>\n )}\n </div>\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nconst RefFieldFallback = ({\n type,\n label,\n readonly,\n placeholder,\n inputOnly,\n getValue,\n onValueChange,\n ...restInputProps\n}: InputProps) => {\n const handleOnValueChange = (_type: any, dxnString: string) => {\n const dxn = DXN.tryParse(dxnString);\n if (dxn) {\n onValueChange?.('object', Ref.fromDXN(dxn));\n } else if (dxnString === '') {\n onValueChange?.('object', undefined);\n } else {\n onValueChange?.('string', dxnString);\n }\n };\n\n const handleGetValue = () => {\n const formValue = getValue();\n if (typeof formValue === 'string') {\n return formValue;\n }\n if (Ref.isRef(formValue)) {\n return formValue.dxn.toString();\n }\n\n return undefined;\n };\n\n return (\n <TextInput\n type={type}\n label={label}\n readonly={readonly}\n placeholder={placeholder}\n inputOnly={inputOnly}\n getValue={handleGetValue as <V>() => V | undefined}\n onValueChange={handleOnValueChange}\n {...restInputProps}\n />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\nimport React, { type KeyboardEvent, type MouseEvent, forwardRef, useCallback, useMemo, useState } from 'react';\n\nimport { Icon, Popover, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { Combobox } from '@dxos/react-ui-searchlist';\n\nimport { type QueryTag } from '../../hooks';\nimport { translationKey } from '../../translations';\nimport { Form } from '../Form';\n\nexport type ObjectPickerContentProps = ThemedClassName<{\n options: QueryTag[];\n selectedIds?: string[];\n createSchema?: Schema.Schema.AnyNoContext;\n createOptionLabel?: [string, { ns: string }];\n createOptionIcon?: string;\n createInitialValuePath?: string;\n onSelect: (id: string) => void;\n onCreate?: (values: any) => void;\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\n const [searchString, setSearchString] = useState('');\n const [showForm, setShowForm] = useState(false);\n\n const handleFormSave = useCallback(\n (values: any) => {\n onCreate?.(values);\n setShowForm(false);\n setSearchString('');\n },\n [onCreate],\n );\n\n const handleFormCancel = useCallback(() => {\n setShowForm(false);\n setSearchString('');\n }, []);\n\n // TODO(thure): The following click and keydown handlers are necessary because `onSelect` is called after the\n // Popover is already closed. Augment/refactor CmdK, if possible, to facilitate stopping event default\n // and propagation.\n\n const handleClick = useCallback(\n (event: MouseEvent) => {\n if (createSchema && (event.target as HTMLElement).closest('[data-value=\"__create__\"]')) {\n event.stopPropagation();\n event.preventDefault();\n setShowForm(true);\n }\n },\n [createSchema],\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 setShowForm(true);\n }\n },\n [createSchema],\n );\n\n const labelById = useMemo(\n () =>\n options.reduce((acc: Record<string, string>, option) => {\n acc[option.id.toLowerCase()] = option.label.toLowerCase();\n return acc;\n }, {}),\n [options],\n );\n\n return (\n <Combobox.Content\n {...props}\n ref={ref}\n filter={(value, search) => (value === '__create__' || labelById[value]?.includes(search.toLowerCase()) ? 1 : 0)}\n onClickCapture={handleClick}\n onKeyDownCapture={handleKeyDown}\n >\n {showForm && createSchema ? (\n <Popover.Viewport>\n <Form\n schema={createSchema}\n values={createInitialValuePath ? { [createInitialValuePath]: searchString } : {}}\n onSave={handleFormSave}\n onCancel={handleFormCancel}\n testId='create-referenced-object-form'\n />\n </Popover.Viewport>\n ) : (\n <>\n <Combobox.Input\n placeholder={t('ref field combobox input placeholder')}\n value={searchString}\n onValueChange={setSearchString}\n autoFocus\n />\n <Combobox.List>\n {options.map((option) => (\n <Combobox.Item\n key={option.id}\n value={option.id}\n onSelect={() => onSelect(option.id)}\n classNames='flex items-center gap-2'\n >\n <span className='grow'>{option.label}</span>\n {selectedIds?.includes(option.id) && <Icon icon='ph--check--regular' />}\n </Combobox.Item>\n ))}\n {searchString.length > 0 && createOptionLabel && createOptionIcon && createSchema && onCreate && (\n <Combobox.Item value='__create__' classNames='flex items-center gap-2'>\n <Icon icon={createOptionIcon} />\n {t(createOptionLabel[0], { ns: createOptionLabel[1].ns, text: searchString })}\n </Combobox.Item>\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 Trigger: Combobox.Trigger,\n VirtualTrigger: Combobox.VirtualTrigger,\n Content: ObjectPickerContent,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\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, useImperativeHandle, useMemo, useState } from 'react';\n\nimport { QueryAST } from '@dxos/echo';\nimport { EchoSchema, Format, type JsonProp, isMutable, toJsonSchema } from '@dxos/echo/internal';\nimport { Filter, Query, type SchemaRegistry } from '@dxos/echo-db';\nimport { invariant } from '@dxos/invariant';\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 { cardSpacing } from '@dxos/react-ui-stack';\nimport { inputTextLabel, mx, subtleHover } from '@dxos/react-ui-theme';\nimport {\n FieldSchema,\n type FieldType,\n ProjectionModel,\n VIEW_FIELD_LIMIT,\n type View,\n getTypenameFromQuery,\n} from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { FieldEditor } from '../FieldEditor';\nimport { Form, type FormProps, type InputComponent, InputHeader, type InputProps } 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' | 'query' | 'named-query';\n registry?: SchemaRegistry;\n readonly?: boolean;\n showHeading?: boolean;\n onQueryChanged?: (query: QueryAST.Query, target?: string) => void;\n onDelete?: (fieldId: string) => void;\n } & Pick<FormProps<any>, 'outerSpacing'> &\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 outerSpacing = true,\n },\n forwardedRef,\n ) => {\n const schemaReadonly = !isMutable(schema);\n const { t } = useTranslation(translationKey);\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 return new ProjectionModel(jsonSchema, view.projection);\n }, [schema, JSON.stringify(view.projection)]);\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 === 'query' || mode === 'named-query') {\n const name = Schema.Struct({\n name: Schema.optional(Schema.String.annotations({ title: 'Name' })),\n });\n\n return Schema.Struct({\n ...(mode === 'named-query' ? { ...name.fields, ...base.fields } : 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 name: view.name,\n query: mode === 'schema' ? getTypenameFromQuery(view.query.ast) : view.query.ast,\n target: queueTarget,\n }),\n [view.name, mode, view.query.ast, queueTarget],\n );\n\n const handleToggleField = useCallback(\n (field: FieldType) => {\n setExpandedField((prevExpandedFieldId) => (prevExpandedFieldId === field.id ? undefined : field.id));\n },\n [readonly],\n );\n\n // TODO(burdon): Check if mutable; variant of useCallback that return undefined if readonly?\n\n const handleAdd = useCallback(() => {\n invariant(!readonly);\n const field = projectionModel.createFieldProjection();\n setExpandedField(field.id);\n }, [schema, projectionModel, readonly]);\n\n const handleUpdate = useCallback(\n (values: any) => {\n invariant(!readonly);\n requestAnimationFrame(() => {\n if ('name' in values && view.name !== values.name) {\n view.name = values.name;\n return;\n }\n\n const query = mode === 'schema' ? Query.select(Filter.typename(values.query)).ast : values.query;\n onQueryChanged?.(query, values.target);\n });\n },\n [onQueryChanged, readonly, 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 const handleMove = useCallback(\n (fromIndex: number, toIndex: number) => {\n invariant(!readonly);\n // NOTE(ZaymonFC): Using arrayMove here causes a race condition with the kanban model.\n const fields = [...view.projection.fields];\n const [moved] = fields.splice(fromIndex, 1);\n fields.splice(toIndex, 0, moved);\n view.projection.fields = fields;\n },\n [view.projection.fields, 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 const custom = useMemo(() => (mode === 'query' ? customFields({ types, tags }) : undefined), [types, tags, mode]);\n\n return (\n <div role='none' className={mx(classNames)}>\n {schemaReadonly && mode === 'schema' && (\n <Callout.Root valence='info' classNames={['mlb-cardSpacingBlock', outerSpacing && 'mli-cardSpacingInline']}>\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 {/* TODO(burdon): Readonly fields should take up the same space as editable fields (just be ghosted). */}\n <Form<Schema.Schema.Type<typeof viewSchema>>\n autoSave\n schema={viewSchema}\n values={viewValues}\n readonly={readonly ? 'disabled-input' : false}\n onSave={handleUpdate}\n outerSpacing={outerSpacing}\n Custom={custom}\n />\n\n <div role='none' className={outerSpacing ? cardSpacing : 'mlb-cardSpacingBlock'}>\n <h2 className={mx(inputTextLabel)}>{t('fields label')}</h2>\n\n <List.Root<FieldType>\n items={view.projection.fields}\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\n role='none'\n className={mx(subtleHover, listItemGrid, 'rounded-sm cursor-pointer min-bs-10')}\n >\n <List.ItemDragHandle disabled={readonly} />\n <List.ItemTitle\n classNames={hidden && 'text-subdued'}\n onClick={() => handleToggleField(field)}\n >\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.fields.length <= 1)}\n onClick={() => (hidden ? handleShow(field.path) : handleHide(field.id))}\n />\n {mode === 'schema' && (\n <>\n <List.ItemDeleteButton\n label={t('delete field label')}\n autoHide={false}\n disabled={readonly || schemaReadonly || view.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: 'os' })}\n icon={\n expandedField === field.id ? 'ph--caret-down--regular' : 'ph--caret-right--regular'\n }\n onClick={() => handleToggleField(field)}\n />\n </>\n )}\n </div>\n {expandedField === field.id && mode === 'schema' && (\n <div role='none' className='col-span-5 mbs-1 mbe-1 border border-separator rounded-md'>\n <FieldEditor\n readonly={readonly || schemaReadonly ? 'disabled-input' : false}\n projection={projectionModel}\n field={field}\n registry={registry}\n onSave={handleClose}\n />\n </div>\n )}\n </List.Item>\n );\n })}\n </div>\n </>\n )}\n </List.Root>\n </div>\n\n {!readonly && !expandedField && mode === 'schema' && (\n <div role='none' className={outerSpacing ? cardSpacing : 'mlb-cardSpacingBlock'}>\n <IconButton\n icon='ph--plus--regular'\n label={t('add property button')}\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\nconst customFields = ({ types, tags }: Pick<ViewEditorProps, 'types' | 'tags'>): Record<string, InputComponent> => ({\n query: (props: InputProps) => {\n const handleChange = useCallback(\n (query: Query.Any) => props.onValueChange('object', query.ast),\n [props.onValueChange],\n );\n\n return (\n <Input.Root>\n <InputHeader label={props.label} />\n <QueryForm initialQuery={props.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", "StackItem", "mx", "ControlPage", "children", "classNames", "props", "StackItem", "Content", "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", "FormatEnum", "FormatEnums", "formatToType", "log", "useAsyncEffect", "useTranslation", "formatToAdditionalPropertyAttributes", "getFormatSchema", "getSchemaProperties", "sortProperties", "React", "useCallback", "useEffect", "useMemo", "useState", "GeoLocation", "Input", "useTranslation", "safeParseFloat", "React", "Icon", "Input", "Tooltip", "labelSpacing", "errorText", "mx", "InputHeader", "error", "label", "readonly", "Label", "Input", "labelProps", "classNames", "React", "div", "role", "className", "mx", "labelSpacing", "Tooltip", "Trigger", "asChild", "content", "side", "Icon", "icon", "size", "errorText", "GeoPointInput", "type", "label", "readonly", "getStatus", "getValue", "onValueChange", "onBlur", "t", "useTranslation", "translationKey", "status", "error", "geoPoint", "useMemo", "geoLocation", "GeoLocation", "fromGeoPoint", "longitudeText", "setLongitudeText", "useState", "longitude", "toString", "latitudeText", "setLatitudeText", "latitude", "useEffect", "location", "handleCoordinateChange", "useCallback", "coordinateType", "setText", "event", "inputText", "target", "value", "coord", "safeParseFloat", "undefined", "isNaN", "currentLocation", "newLocation", "newValue", "toGeoPoint", "React", "Input", "Root", "validationValence", "InputHeader", "div", "role", "className", "Label", "TextInput", "step", "min", "max", "disabled", "onChange", "React", "useCallback", "useEffect", "useRef", "useState", "PublicKey", "IconButton", "Input", "Tag", "useTranslation", "List", "HuePicker", "hues", "subtleHover", "SelectOptionInput", "type", "label", "readonly", "getStatus", "getValue", "onValueChange", "selected", "setSelectedId", "useState", "isNewOption", "setIsNewOption", "inputRef", "useRef", "t", "useTranslation", "translationKey", "status", "error", "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", "key", "handleColorChange", "focus", "React", "Input", "Root", "validationValence", "InputHeader", "div", "role", "List", "items", "isItem", "item", "onMove", "className", "Item", "classNames", "subtleHover", "aria-expanded", "ItemDragHandle", "disabled", "ItemTitle", "onClick", "Tag", "palette", "IconButton", "iconOnly", "variant", "ns", "icon", "Label", "TextInput", "placeholder", "ref", "onChange", "onKeyDown", "data-no-submit", "HuePicker", "React", "Input", "mx", "safeParseFloat", "gridCols", "TupleInput", "binding", "type", "label", "readonly", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "values", "React", "Input", "Root", "validationValence", "InputHeader", "div", "className", "mx", "length", "map", "prop", "TextInput", "key", "disabled", "value", "onChange", "event", "safeParseFloat", "target", "React", "useCallback", "useEffect", "useRef", "Input", "Select", "useTranslation", "TextInput", "type", "label", "inputOnly", "readonly", "placeholder", "getStatus", "getValue", "onValueChange", "onBlur", "status", "error", "React", "p", "Input", "Root", "validationValence", "InputHeader", "disabled", "value", "onChange", "event", "target", "Validation", "NumberInput", "DescriptionAndValidation", "BooleanInput", "checked", "Boolean", "t", "useTranslation", "translationKey", "Switch", "onCheckedChange", "SelectInput", "options", "handleValueChange", "useCallback", "find", "optionValue", "String", "Select", "TriggerButton", "classNames", "Portal", "Content", "Viewport", "map", "Option", "key", "Arrow", "MarkdownInput", "textareaRef", "useRef", "adjustHeight", "textarea", "current", "style", "blockSize", "scrollHeight", "useEffect", "TextArea", "ref", "resize", "spellCheck", "useFocusFinders", "React", "useCallback", "useEffect", "useRef", "cardDialogOverflow", "cardSpacing", "React", "IconButton", "useTranslation", "cardSpacing", "mx", "React", "createContext", "useCallback", "useContext", "useEffect", "useMemo", "raise", "getValue", "createJsonPath", "SchemaAST", "useCallback", "useEffect", "useMemo", "useState", "getValue", "setValue", "createJsonPath", "fromEffectValidationPath", "invariant", "log", "validateSchema", "useForm", "schema", "initialValues", "onValuesChanged", "onValidate", "onValid", "onSave", "isTypeLiteral", "ast", "values", "setValues", "touched", "setTouched", "createKeySet", "changed", "setChanged", "errors", "setErrors", "saving", "setSaving", "validate", "length", "validatedValues", "flatMap", "valid", "schemaDirty", "setSchemaDirty", "formIsValid", "Object", "keys", "canSave", "entries", "some", "path", "isTouched", "errorPath", "startsWith", "handleSave", "getStatus", "jsonPath", "Array", "isArray", "matchingError", "find", "status", "undefined", "error", "getFormValue", "onValueChange", "type", "value", "parsedValue", "parseFloat", "err", "catch", "newValues", "newChanged", "isValid", "onTouched", "obj", "reduce", "acc", "key", "result", "message", "useCallback", "Obj", "getObjectDXN", "Filter", "isNonNullable", "useRefQueryLookupHandler", "space", "useCallback", "typeInfo", "query", "db", "Filter", "typename", "objects", "run", "map", "object", "dxn", "getObjectDXN", "undefined", "item", "label", "Obj", "getLabel", "id", "filter", "isNonNullable", "useCallback", "useEffect", "useState", "log", "useQueryRefOptions", "refTypeInfo", "onQueryRefOptions", "options", "setOptions", "loading", "setLoading", "state", "setState", "update", "fetchOptions", "fetchedOptions", "map", "option", "dxn", "toString", "id", "label", "hue", "error", "FormContext", "createContext", "undefined", "useFormContext", "useContext", "raise", "Error", "useFormValues", "path", "values", "formValues", "jsonPath", "createJsonPath", "getValue", "useInputProps", "getStatus", "getFormValue", "onValueChange", "onTouched", "stablePath", "useMemo", "Array", "isArray", "join", "type", "value", "onBlur", "FormProvider", "children", "formRef", "autoSave", "formOptions", "form", "useForm", "handleKeyDown", "useCallback", "event", "keyIsEnter", "key", "modifierUsed", "ctrlKey", "altKey", "metaKey", "shiftKey", "inputIsTextarea", "target", "tagName", "toLowerCase", "inputOptOut", "hasAttribute", "closest", "shouldSubmitRegularInput", "shouldSubmitTextarea", "canSave", "handleSave", "formIsValid", "blur", "useEffect", "current", "formElement", "addEventListener", "removeEventListener", "React", "Provider", "FormActions", "readonly", "onCancel", "outerSpacing", "t", "useTranslation", "translationKey", "canSave", "handleSave", "useFormContext", "React", "div", "role", "className", "mx", "cardSpacing", "IconButton", "data-testid", "icon", "label", "onClick", "type", "disabled", "Function", "Schema", "SchemaAST", "StringEffect", "React", "Component", "forwardRef", "useMemo", "createJsonPath", "findNode", "getDiscriminatedType", "isDiscriminatedUnion", "mx", "getSchemaProperties", "isTruthy", "FormatEnum", "GeoLocation", "TypeEnum", "parseValue", "type", "format", "value", "undefined", "parseScalar", "TypeEnum", "Boolean", "lowercaseValue", "toLowerCase", "Number", "cleaned", "replace", "num", "isNaN", "String", "Ref", "FormatEnum", "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", "FormatEnum", "GeoLocation", "TypeEnum", "formatForDisplay", "type", "format", "value", "locale", "undefined", "formatScalar", "TypeEnum", "Boolean", "toLocaleString", "toUpperCase", "Number", "String", "Ref", "FormatEnum", "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", "FormatEnum", "ReferenceAnnotationId", "findAnnotation", "SchemaAST", "findNode", "findArrayElementType", "ast", "tupleType", "findNode", "isTupleType", "rest", "type", "getRefProps", "property", "ast", "format", "array", "elementType", "findArrayElementType", "annotation", "findAnnotation", "ReferenceAnnotationId", "isArray", "FormatEnum", "Ref", "undefined", "Function", "SchemaAST", "String", "React", "Fragment", "useCallback", "SimpleType", "findNode", "getDiscriminatedType", "isDiscriminatedUnion", "invariant", "IconButton", "useTranslation", "getSchemaProperties", "ArrayField", "property", "readonly", "path", "inputProps", "Custom", "lookupComponent", "t", "useTranslation", "translationKey", "ast", "name", "type", "title", "values", "useFormValues", "invariant", "Array", "isArray", "join", "label", "pipe", "capitalize", "elementType", "findArrayElementType", "getDefaultObjectValue", "typeNode", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "isTypeLiteral", "Object", "fromEntries", "getSchemaProperties", "map", "prop", "defaultValue", "getDefaultValue", "SimpleType", "handleAdd", "useCallback", "onValueChange", "handleRemove", "index", "newValues", "filter", "_", "i", "length", "React", "InputHeader", "div", "role", "className", "_value", "field", "FormField", "array", "inline", "Fragment", "key", "IconButton", "icon", "iconOnly", "onClick", "classNames", "FormatEnum", "getInputComponent", "type", "format", "FormatEnum", "GeoPoint", "GeoPointInput", "Markdown", "MarkdownInput", "TextInput", "NumberInput", "BooleanInput", "React", "useCallback", "useMemo", "Expando", "Ref", "ReferenceAnnotationId", "getTypeAnnotation", "findAnnotation", "DXN", "DxAnchor", "DxTagPickerItem", "Button", "Icon", "Input", "useTranslation", "descriptionText", "mx", "isNonNullable", "React", "forwardRef", "useCallback", "useMemo", "useState", "Icon", "Popover", "useTranslation", "Combobox", "ObjectPickerContent", "forwardRef", "options", "selectedIds", "createSchema", "createOptionLabel", "createOptionIcon", "createInitialValuePath", "onSelect", "onCreate", "props", "ref", "t", "useTranslation", "translationKey", "searchString", "setSearchString", "useState", "showForm", "setShowForm", "handleFormSave", "useCallback", "values", "handleFormCancel", "handleClick", "event", "target", "closest", "stopPropagation", "preventDefault", "handleKeyDown", "key", "currentTarget", "querySelector", "labelById", "useMemo", "reduce", "acc", "option", "id", "toLowerCase", "label", "React", "Combobox", "Content", "filter", "value", "search", "includes", "onClickCapture", "onKeyDownCapture", "Popover", "Viewport", "Form", "schema", "onSave", "onCancel", "testId", "Input", "placeholder", "onValueChange", "autoFocus", "List", "map", "Item", "classNames", "span", "className", "Icon", "icon", "length", "ns", "text", "Arrow", "displayName", "ObjectPicker", "Root", "Trigger", "VirtualTrigger", "isRefSnapShot", "val", "RefField", "type", "label", "readonly", "placeholder", "inputOnly", "array", "ast", "getValue", "createOptionLabel", "createOptionIcon", "onBlur", "onCreate", "createSchema", "createInitialValuePath", "onQueryRefOptions", "onValueChange", "restInputProps", "t", "useTranslation", "translationKey", "refTypeInfo", "useMemo", "findAnnotation", "ReferenceAnnotationId", "undefined", "options", "availableOptions", "update", "updateOptions", "loading", "_loading", "useQueryRefOptions", "typename", "getTypeAnnotation", "Expando", "React", "RefFieldFallback", "handleGetValue", "useCallback", "formValue", "unknownToRefOption", "isRef", "Ref", "dxnString", "dxn", "toString", "matchingOption", "find", "option", "id", "Array", "isArray", "map", "filter", "isNonNullable", "handleUpdate", "ids", "length", "refs", "item", "DXN", "parse", "fromDXN", "handleCreate", "values", "status", "error", "getStatus", "items", "selectedIds", "i", "toggleSelect", "nextIds", "includes", "x", "Input", "Root", "validationValence", "InputHeader", "div", "data-no-submit", "p", "className", "mx", "descriptionText", "DxAnchor", "key", "refid", "rootclassname", "ObjectPicker", "Trigger", "asChild", "Button", "variant", "classNames", "role", "DxTagPickerItem", "itemId", "hue", "removeLabel", "onItemClick", "event", "action", "span", "count", "Icon", "size", "icon", "Content", "onSelect", "DescriptionAndValidation", "handleOnValueChange", "_type", "tryParse", "TextInput", "FormField", "property", "path", "readonly", "inline", "projection", "onQueryRefOptions", "createOptionLabel", "createOptionIcon", "onCreate", "createSchema", "createInitialValuePath", "lookupComponent", "Custom", "ast", "name", "type", "format", "title", "description", "options", "examples", "array", "inputProps", "useInputProps", "label", "useMemo", "pipe", "capitalize", "placeholder", "length", "FoundComponent", "prop", "schema", "make", "jsonPath", "createJsonPath", "CustomComponent", "React", "inputOnly", "refProps", "getRefProps", "RefField", "isArray", "ArrayField", "InputComponent", "getInputComponent", "SelectInput", "map", "option", "value", "String", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "getValue", "isTypeLiteral", "h3", "className", "mx", "FormFields", "forwardRef", "classNames", "filter", "sort", "props", "values", "useFormValues", "properties", "getSchemaProperties", "fieldProjections", "getFieldProjections", "hiddenProperties", "Set", "getHiddenProperties", "visibleProps", "has", "orderedProps", "fieldProjection", "fieldPath", "field", "find", "p", "push", "projectionPaths", "fp", "remainingProps", "filtered", "a", "b", "indexOf", "fields", "div", "role", "ref", "ErrorBoundary", "key", "isTruthy", "Component", "getDerivedStateFromError", "error", "state", "undefined", "componentDidUpdate", "prevProps", "resetError", "render", "span", "join", "children", "setState", "Form", "classNames", "id", "testId", "values", "initialValues", "autoFocus", "readonly", "autoSave", "outerSpacing", "schema", "onCancel", "onValuesChanged", "onValidate", "onSave", "props", "formRef", "useRef", "findFirstFocusable", "useFocusFinders", "useEffect", "current", "firstFocusable", "focus", "handleValid", "useCallback", "meta", "React", "FormProvider", "onValid", "div", "role", "className", "data-testid", "FormFields", "ref", "cardSpacing", "cardDialogOverflow", "FormActions", "FieldEditor", "readonly", "projection", "field", "registry", "onSave", "onCancel", "outerSpacing", "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", "handleValuesChanged", "useCallback", "_props", "prev", "newSchema", "type", "formatToType", "additionalProps", "formatToAdditionalPropertyAttributes", "handleValidate", "property", "fields", "f", "path", "message", "handleSave", "setFieldProjection", "handleCancel", "requestAnimationFrame", "custom", "useMemo", "React", "SelectInput", "options", "FormatEnums", "filter", "value", "FormatEnum", "None", "map", "label", "getSchemaProperties", "ast", "sort", "sortProperties", "p", "name", "SelectOptionInput", "propIsNotType", "log", "warn", "Form", "key", "autoFocus", "values", "onValuesChanged", "onValidate", "Custom", "Array", "Match", "Option", "Schema", "React", "forwardRef", "useCallback", "useImperativeHandle", "useMemo", "useState", "QueryAST", "EchoSchema", "Format", "isMutable", "toJsonSchema", "Filter", "Query", "invariant", "Callout", "IconButton", "Input", "useTranslation", "QueryForm", "List", "cardSpacing", "inputTextLabel", "mx", "subtleHover", "FieldSchema", "ProjectionModel", "VIEW_FIELD_LIMIT", "getTypenameFromQuery", "listGrid", "listItemGrid", "ViewEditor", "forwardRef", "classNames", "schema", "view", "mode", "registry", "readonly", "showHeading", "types", "tags", "onQueryChanged", "onDelete", "outerSpacing", "forwardedRef", "schemaReadonly", "isMutable", "t", "useTranslation", "translationKey", "projectionModel", "useMemo", "jsonSchema", "EchoSchema", "toJsonSchema", "ProjectionModel", "projection", "JSON", "stringify", "useImperativeHandle", "expandedField", "setExpandedField", "useState", "queueTarget", "value", "query", "ast", "pipe", "when", "type", "options", "fromNullable", "queues", "flatMap", "head", "getOrUndefined", "orElse", "undefined", "viewSchema", "base", "Struct", "Format", "URL", "annotations", "title", "QueryAST", "Query", "name", "optional", "String", "fields", "target", "mutable", "viewValues", "getTypenameFromQuery", "handleToggleField", "useCallback", "field", "prevExpandedFieldId", "id", "handleAdd", "invariant", "createFieldProjection", "handleUpdate", "values", "requestAnimationFrame", "select", "Filter", "typename", "handleDelete", "fieldId", "handleMove", "fromIndex", "toIndex", "moved", "splice", "handleClose", "handleHide", "hideFieldProjection", "handleShow", "property", "showFieldProjection", "custom", "customFields", "React", "div", "role", "className", "mx", "Callout", "Root", "valence", "Title", "Form", "autoSave", "onSave", "Custom", "cardSpacing", "h2", "inputTextLabel", "List", "items", "isItem", "is", "FieldSchema", "getId", "onMove", "h3", "map", "hidden", "visible", "Item", "key", "item", "aria-expanded", "subtleHover", "ItemDragHandle", "disabled", "ItemTitle", "onClick", "path", "ItemButton", "label", "data-testid", "icon", "autoHide", "length", "ItemDeleteButton", "IconButton", "iconOnly", "variant", "ns", "FieldEditor", "VIEW_FIELD_LIMIT", "props", "handleChange", "onValueChange", "Input", "InputHeader", "QueryForm", "initialQuery", "getValue", "onChange"]
|
|
7
7
|
}
|