@dxos/react-ui-form 0.7.5-main.9cb18ac → 0.7.5-main.9d2a38b
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 +76 -40
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +72 -36
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +76 -40
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/FieldEditor/FieldEditor.d.ts.map +1 -1
- package/dist/types/src/components/Form/Form.d.ts +9 -3
- package/dist/types/src/components/Form/Form.d.ts.map +1 -1
- package/dist/types/src/components/ViewEditor/ViewEditor.d.ts +2 -1
- package/dist/types/src/components/ViewEditor/ViewEditor.d.ts.map +1 -1
- package/dist/types/src/components/ViewEditor/ViewEditor.stories.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +23 -23
- package/src/components/FieldEditor/FieldEditor.tsx +56 -39
- package/src/components/Form/Form.tsx +30 -1
- package/src/components/ViewEditor/ViewEditor.stories.tsx +25 -4
- package/src/components/ViewEditor/ViewEditor.tsx +9 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/translations.ts", "../../../src/components/deprecated/FormInput.tsx", "../../../src/components/FieldEditor/FieldEditor.tsx", "../../../src/components/Form/custom/GeoPointInput.tsx", "../../../src/components/Form/Input.tsx", "../../../src/components/Form/custom/TupleInput.tsx", "../../../src/components/Form/Defaults.tsx", "../../../src/components/Form/Form.tsx", "../../../src/components/Form/factory.tsx", "../../../src/hooks/useForm.ts", "../../../src/components/ViewEditor/ViewEditor.tsx", "../../../src/util/field.ts", "../../../src/util/formatting.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'react-ui-form';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {\n 'fields label': 'Fields',\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\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 email': 'Email',\n 'format formula': 'Formula',\n 'format hostname': 'Hostname',\n 'format integer': 'Integer',\n 'format json': 'JSON',\n 'format latlng': 'LatLng',\n 'format markdown': 'Markdown',\n 'format percent': 'Percent',\n 'format ref': 'Reference',\n 'format regex': 'RegExp',\n 'format string': 'String',\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 uuid': 'UUID',\n\n // Placeholders\n 'placeholder latitude': 'Latitude',\n 'placeholder longitude': 'Longitude',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type JSX, type PropsWithChildren } from 'react';\n\nimport { Input } from '@dxos/react-ui';\n\nexport type DeprecatedFormInputProps = {\n label: string;\n description?: JSX.Element;\n secondary?: JSX.Element;\n};\n\n/**\n * @deprecated\n */\n// TODO(burdon): Still used in ObservabilitySettings and all settings.\nexport const DeprecatedFormInput = ({\n label,\n description,\n secondary,\n children,\n}: PropsWithChildren<DeprecatedFormInputProps>) => {\n const primary = (\n <div role='none' className='flex w-full gap-4 py-1'>\n <Input.Root>\n <div role='none' className='flex flex-col w-full'>\n {/* TODO(burdon): Consistent height for controls (e.g., Select, Textbox, and Checkbox are all different). */}\n <Input.Label classNames='flex min-h-[40px] items-center'>{label}</Input.Label>\n {description && (\n <Input.DescriptionAndValidation classNames='mbs-0.5'>\n <Input.Description>{description}</Input.Description>\n </Input.DescriptionAndValidation>\n )}\n </div>\n\n <div role='none'>\n <div role='none' className='flex min-h-[40px] items-center'>\n {children}\n </div>\n </div>\n </Input.Root>\n </div>\n );\n\n if (secondary) {\n // console.log(secondary);\n return (\n <div role='none' className='flex flex-col w-full'>\n {primary}\n {secondary}\n </div>\n );\n }\n\n return primary;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { type SchemaRegistry } from '@dxos/echo-db';\nimport { FormatEnum, FormatEnums, formatToType, type EchoSchema } from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\nimport { useTranslation } from '@dxos/react-ui';\nimport {\n getFormatSchema,\n getSchemaProperties,\n sortProperties,\n type FieldType,\n type PropertyType,\n type ViewType,\n type ViewProjection,\n} from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { Form, type FormProps, SelectInput } from '../Form';\n\nexport type FieldEditorProps = {\n view: ViewType;\n projection: ViewProjection;\n field: FieldType;\n registry?: SchemaRegistry;\n onSave: () => void;\n onCancel?: () => void;\n};\n\n/**\n * Displays a Form representing the metadata for a given `Field` and `View`.\n */\nexport const FieldEditor = ({ view, projection, field, registry, onSave, onCancel }: FieldEditorProps) => {\n const { t } = useTranslation(translationKey);\n const [props, setProps] = useState<PropertyType>(projection.getFieldProjection(field.id).props);\n useEffect(() => setProps(projection.getFieldProjection(field.id).props), [field, projection]);\n\n const [schemas, setSchemas] = useState<EchoSchema[]>([]);\n useEffect(() => {\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 t = setTimeout(async () => {\n const schemas = await registry.query().run();\n setSchemas(schemas);\n });\n return () => {\n clearTimeout(t);\n subscription?.();\n };\n }, [registry]);\n\n const [schema, setSchema] = useState<EchoSchema>();\n useEffect(() => {\n setSchema(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 if (_props.referenceSchema !== props.referenceSchema) {\n setSchema(schemas.find((schema) => schema.typename === _props.referenceSchema));\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;\n });\n },\n [schemas, props.format, props.referenceSchema],\n );\n\n const handleValidate = useCallback<NonNullable<FormProps<PropertyType>['onValidate']>>(\n ({ property }) => {\n if (property && view.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 [view.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 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 values={props}\n schema={fieldSchema}\n filter={(props) => props.filter((p) => p.name !== 'type')}\n sort={['property', 'format']}\n onValuesChanged={handleValuesChanged}\n onValidate={handleValidate}\n onSave={handleSave}\n onCancel={handleCancel}\n Custom={{\n ['format' satisfies keyof PropertyType]: (props) => (\n <SelectInput<PropertyType>\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<PropertyType>\n {...props}\n options={schemas.map((schema) => ({\n value: schema.typename,\n }))}\n />\n ),\n ['referencePath' satisfies keyof PropertyType]: (props) => (\n <SelectInput<PropertyType>\n {...props}\n options={\n schema\n ? getSchemaProperties(schema.ast)\n .sort(sortProperties)\n .map((p) => ({ value: p.name }))\n : []\n }\n />\n ),\n }}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type BaseObject, 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 = <T extends BaseObject>({\n property,\n type,\n label,\n disabled,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps<T>) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus?.(property);\n const [lng = 0, lat = 0] = getValue<GeoPoint>(property) ?? [];\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\n <div className='grid grid-cols-2 gap-2'>\n <Input.TextInput\n type='number'\n disabled={disabled}\n placeholder={t('placeholder longitude')}\n value={lng}\n onChange={(event) => onValueChange(property, type, [lat, safeParseFloat(event.target.value, 0)])}\n onBlur={onBlur}\n />\n <Input.TextInput\n type='number'\n disabled={disabled}\n placeholder={t('placeholder latitude')}\n value={lat}\n onChange={(event) => onValueChange(property, type, [safeParseFloat(event.target.value, 0), lng])}\n onBlur={onBlur}\n />\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC, type PropsWithChildren } from 'react';\n\nimport { type BaseObject, type FormatEnum, type PropertyKey } from '@dxos/echo-schema';\nimport { type SimpleType } from '@dxos/effect';\nimport { Icon, Tooltip } from '@dxos/react-ui';\nimport { errorText } from '@dxos/react-ui-theme';\n\nimport { type FormHandler } from '../../hooks';\n\n/**\n * Props passed to input components.\n */\nexport type InputProps<T extends BaseObject> = {\n property: PropertyKey<T>;\n type: SimpleType;\n format?: FormatEnum;\n label?: string;\n disabled?: boolean;\n placeholder?: string;\n inputOnly?: boolean;\n} & Pick<FormHandler<T>, 'getStatus' | 'getValue' | 'onValueChange' | 'onBlur'>;\n\n/**\n * Form input component.\n */\nexport type InputComponent<T extends BaseObject> = FC<InputProps<T>>;\n\nexport type InputHeaderProps = PropsWithChildren<{\n error?: string;\n}>;\n\nexport const InputHeader = ({ children, error }: InputHeaderProps) => {\n return (\n <div role='none' className='flex justify-between items-center mb-1'>\n {children}\n {error && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Icon icon='ph--warning--regular' size={4} classNames={errorText} />\n </Tooltip.Trigger>\n <Tooltip.Content side='bottom'>\n <Tooltip.Arrow />\n {error}\n </Tooltip.Content>\n </Tooltip.Root>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type BaseObject } from '@dxos/echo-schema';\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 = <T extends BaseObject>({\n binding,\n property,\n type,\n label,\n disabled,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps<T> & { binding: string[] }) => {\n const { status, error } = getStatus?.(property);\n\n // TODO(burdon): Generalize number/float/string, etc.\n const values: Record<string, number> = getValue<Record<string, number>>(property) ?? {};\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\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={disabled}\n value={values[prop]}\n onChange={(event) =>\n onValueChange(property, type, { ...values, [prop]: safeParseFloat(event.target.value, 0) })\n }\n onBlur={onBlur}\n />\n ))}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type BaseObject } from '@dxos/echo-schema';\nimport { Input, Select } from '@dxos/react-ui';\n\nimport { type InputProps, InputHeader } from './Input';\n\nexport const TextInput = <T extends BaseObject>({\n property,\n type,\n label,\n inputOnly,\n disabled,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps<T>) => {\n const { status, error } = getStatus?.(property);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && (\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\n )}\n <Input.TextInput\n disabled={disabled}\n placeholder={placeholder}\n value={getValue(property) ?? ''}\n onChange={(event) => onValueChange(property, type, event.target.value)}\n onBlur={onBlur}\n />\n {inputOnly && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n\nexport const NumberInput = <T extends BaseObject>({\n property,\n type,\n label,\n inputOnly,\n disabled,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps<T>) => {\n const { status, error } = getStatus?.(property);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && (\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\n )}\n <Input.TextInput\n type='number'\n disabled={disabled}\n placeholder={placeholder}\n value={getValue(property) ?? 0}\n onChange={(event) => onValueChange(property, type, event.target.value)}\n onBlur={onBlur}\n />\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport const BooleanInput = <T extends BaseObject>({\n property,\n type,\n label,\n inputOnly,\n getStatus,\n getValue,\n onValueChange,\n}: InputProps<T>) => {\n const { status, error } = getStatus?.(property);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && (\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\n )}\n <Input.Switch\n checked={getValue<boolean>(property)}\n onCheckedChange={(value) => onValueChange(property, type, value)}\n />\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport type SelectInputOptions<T extends BaseObject> = InputProps<T> & {\n options?: Array<{ value: string | number; label?: string }>;\n};\n\nexport const SelectInput = <T extends BaseObject>({\n property,\n type,\n label,\n inputOnly,\n disabled,\n placeholder,\n options,\n getStatus,\n getValue,\n onValueChange,\n}: SelectInputOptions<T>) => {\n const { status, error } = getStatus?.(property);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && (\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\n )}\n <Select.Root value={getValue(property)} onValueChange={(value) => onValueChange(property, type, value)}>\n {/* TODO(burdon): Placeholder not working? */}\n <Select.TriggerButton classNames='is-full' disabled={disabled} 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.Content>\n </Select.Portal>\n </Select.Root>\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { pipe } from 'effect';\nimport { capitalize } from 'effect/String';\nimport React, { useEffect, useMemo } from 'react';\n\nimport { AST, type BaseObject, S, type PropertyKey, type FormatEnum } from '@dxos/echo-schema';\nimport { findNode, getDiscriminatedType, isDiscriminatedUnion, SimpleType } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { getSchemaProperties, type SchemaProperty } from '@dxos/schema';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { SelectInput } from './Defaults';\nimport { InputHeader, type InputComponent } from './Input';\nimport { getInputComponent } from './factory';\nimport { type FormHandler, type FormOptions, useForm } from '../../hooks';\nimport { translationKey } from '../../translations';\n\n// TODO(burdon): Rename package react-ui-form; delete react-ui-card.\n\nconst padding = 'px-2';\n\nexport type PropsFilter<T extends BaseObject> = (props: SchemaProperty<T>[]) => SchemaProperty<T>[];\n\nexport type FormProps<T extends BaseObject> = ThemedClassName<\n {\n values: Partial<T>;\n\n /** Path to the current object from the root. Used with nested forms. */\n path?: string[];\n\n // TODO(burdon): Autofocus first input.\n autoFocus?: boolean;\n readonly?: boolean;\n // TODO(burdon): Change to JsonPath includes/excludes.\n filter?: PropsFilter<T>;\n sort?: PropertyKey<T>[];\n autoSave?: boolean;\n testId?: string;\n onCancel?: () => void;\n\n /**\n * Map of custom renderers for specific properties.\n */\n Custom?: Partial<Record<string, InputComponent<T>>>;\n } & Pick<FormOptions<T>, 'schema' | 'onValuesChanged' | 'onValidate' | 'onSave'>\n>;\n\n/**\n * General purpose form component that displays field controls based on the given schema.\n */\n// TODO(burdon): Area to show general validation errors.\nexport const Form = <T extends BaseObject>({\n classNames,\n schema,\n values: initialValues,\n path = [],\n readonly,\n filter,\n sort,\n autoSave,\n testId,\n onValuesChanged,\n onValidate,\n onSave,\n onCancel,\n Custom,\n}: FormProps<T>) => {\n const onValid = useMemo(() => (autoSave ? onSave : undefined), [autoSave, onSave]);\n const { canSave, values, errors, handleSave, ...inputProps } = useForm<T>({\n schema,\n initialValues,\n onValuesChanged,\n onValidate,\n onValid,\n onSave,\n });\n\n // Filter and sort props.\n // TODO(burdon): Move into useForm?\n const properties = useMemo(() => {\n const props = getSchemaProperties<T>(schema.ast, values);\n const filtered = filter ? filter(props) : props;\n const findIndex = (props: PropertyKey<T>[], prop: PropertyKey<T>) => {\n const idx = props.findIndex((p) => p === prop);\n return idx === -1 ? Infinity : idx;\n };\n\n return sort ? filtered.sort(({ name: a }, { name: b }) => findIndex(sort, a) - findIndex(sort, b)) : filtered;\n }, [schema, filter, values]);\n\n // TODO(burdon): Highlight in UX.\n useEffect(() => {\n if (errors && Object.keys(errors).length) {\n log.warn('validation', { errors });\n }\n }, [errors]);\n\n return (\n <div role='form' className={mx('flex flex-col w-full gap-2 py-2', classNames)} data-testid={testId}>\n {properties\n .map((property) => {\n const { ast, name, type, format, title, description, examples, options, array } = property;\n const key = [...path, name];\n const label = title ?? pipe(name, capitalize);\n const placeholder = examples?.length ? `Example: \"${examples[0]}\"` : description;\n\n // Get generic input.\n // TODO(ZaymonFC): We might need to switch this to using globs since we're now indexing into arrays.\n let InputComponent = Custom?.[key.join('.')];\n if (!InputComponent) {\n // Select.\n if (options) {\n return (\n <div key={name} role='none' className={padding}>\n <SelectInput\n type={type}\n format={format}\n property={name}\n disabled={readonly}\n label={label}\n options={options.map((option) => ({ value: option, label: String(option) }))}\n placeholder={placeholder}\n {...inputProps}\n />\n </div>\n );\n }\n\n InputComponent = getInputComponent<T>(type, format);\n\n // TODO(ZaymonFC): Array handling is inelegant. We need to push this complexity down into SDK/Schema.\n if (array) {\n return (\n <ArrayField\n key={name}\n name={name}\n type={type}\n array={true}\n label={label}\n ast={ast}\n values={values}\n format={format}\n readonly={readonly}\n placeholder={placeholder}\n inputProps={inputProps}\n Custom={Custom}\n />\n );\n }\n }\n\n if (!InputComponent) {\n // Recursively render form.\n if (type === 'object') {\n const baseNode = findNode(ast, isDiscriminatedUnion);\n const typeLiteral = baseNode\n ? getDiscriminatedType(baseNode, values[name] as any)\n : findNode(ast, AST.isTypeLiteral);\n\n if (typeLiteral) {\n const schema = S.make(typeLiteral);\n return (\n <div key={name} role='none'>\n <div className={padding}>{label}</div>\n <Form<any>\n schema={schema}\n path={key}\n values={values[name] ?? {}}\n onValuesChanged={(childValues) => {\n inputProps.onValueChange(name, 'object', childValues);\n }}\n Custom={Custom as any}\n />\n </div>\n );\n }\n }\n\n log('no renderer for property', { name, type });\n return null;\n }\n\n return (\n <div key={name} role='none' className={padding}>\n <InputComponent\n type={type}\n format={format}\n property={name}\n disabled={readonly}\n label={label}\n placeholder={placeholder}\n {...inputProps}\n />\n </div>\n );\n })\n .filter(isNotFalsy)}\n {(onCancel || onSave) && !autoSave && (\n <FormActions onCancel={onCancel} onSubmit={handleSave} canSubmit={canSave} readonly={readonly} />\n )}\n </div>\n );\n};\n\ntype ArrayFieldProps<T extends BaseObject> = {\n name: PropertyKey<T>;\n type: SimpleType;\n array: true;\n label: string;\n ast: AST.AST;\n values: Record<string, any>;\n format?: FormatEnum;\n readonly?: boolean;\n placeholder?: string;\n inputProps: Pick<FormHandler<T>, 'getStatus' | 'getValue' | 'onValueChange' | 'onBlur'>;\n Custom?: Partial<Record<string, InputComponent<T>>>;\n};\n\nconst ArrayField = <T extends BaseObject>({\n name,\n type,\n label,\n ast,\n values,\n format,\n readonly,\n placeholder,\n inputProps,\n Custom,\n}: ArrayFieldProps<T>) => {\n const { t } = useTranslation(translationKey);\n const arrayValues = (values[name] ?? []) as any[];\n const key = [name];\n\n // TODO(ZaymonFC): Should this unwrapping happen at a lower level?\n const tupleType = findNode(ast, AST.isTupleType);\n const elementType = (tupleType as AST.TupleType | undefined)?.rest[0]?.type;\n\n if (type === 'object' && elementType) {\n const baseNode = findNode(elementType, isDiscriminatedUnion);\n const typeLiteral = baseNode\n ? getDiscriminatedType(baseNode, values[name] as any)\n : findNode(elementType, AST.isTypeLiteral);\n\n if (typeLiteral) {\n const schema = S.make(typeLiteral);\n\n return (\n <div key={name} role='none' className={mx(padding)}>\n <InputHeader>{label}</InputHeader>\n <div role='none' className='flex flex-col gap-1'>\n {arrayValues.map((value, index) => {\n return (\n <div key={index} role='none' className='flex items-center gap-1'>\n <div role='none' className='flex-1'>\n <Form<any>\n schema={schema}\n path={[...key, `[${index}]`]}\n values={value}\n onValuesChanged={(childValues) => {\n const newValues = [...arrayValues];\n newValues[index] = childValues;\n inputProps.onValueChange(name, 'object', newValues);\n }}\n Custom={Custom as any}\n />\n </div>\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n label={t('button remove')}\n onClick={() => {\n const newValues = arrayValues.filter((_, i) => i !== index);\n inputProps.onValueChange(name, type, newValues);\n }}\n />\n </div>\n );\n })}\n </div>\n <div role='none' className='flex justify-between items-center plb-1'>\n <IconButton\n icon='ph--plus--regular'\n iconOnly\n label={t('button add')}\n onClick={() => {\n const newValues = [...arrayValues, {}];\n inputProps.onValueChange(name, type, newValues);\n }}\n />\n </div>\n </div>\n );\n }\n return (\n <div key={name} role='none'>\n Nested form not supported in arrays, yet.\n </div>\n );\n }\n\n const InputComponent = getInputComponent<T>(type, format);\n if (!InputComponent) {\n return null;\n }\n\n return (\n <div role='none' key='meta-input' className={mx(padding)}>\n <InputHeader>{label}</InputHeader>\n <div role='none' className='flex flex-col gap-1'>\n {arrayValues.map((_, index) => (\n <div key={index} role='none' className='flex items-start gap-1'>\n <div role='none' className='flex-1'>\n <InputComponent\n type={type}\n format={format}\n label={label}\n inputOnly\n property={`${name}[${index}]` as PropertyKey<T>}\n disabled={readonly}\n placeholder={placeholder}\n {...inputProps}\n />\n </div>\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n label={t('button remove')}\n onClick={() => {\n const newValues = arrayValues.filter((_, i) => i !== index);\n inputProps.onValueChange(name, type, newValues);\n }}\n />\n </div>\n ))}\n </div>\n <div role='none' className='flex justify-between items-center plb-1'>\n <IconButton\n icon='ph--plus--regular'\n iconOnly\n label={t('button add')}\n onClick={() => {\n const newValues = [...arrayValues, SimpleType.getDefaultValue(type)];\n inputProps.onValueChange(name, type, newValues);\n }}\n />\n </div>\n </div>\n );\n};\n\ntype FormActionsProps = {\n readonly?: boolean;\n canSubmit: boolean;\n onCancel?: () => void;\n onSubmit: () => void;\n};\n\nexport const FormActions = ({ onCancel, onSubmit, canSubmit, readonly }: FormActionsProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <div role='none' className='flex justify-center'>\n <div role='none' className={mx(onCancel && !readonly && 'grid grid-cols-2 gap-2')}>\n {onCancel && !readonly && (\n <IconButton data-testid='cancel-button' icon='ph--x--regular' label={t('button cancel')} onClick={onCancel} />\n )}\n {onSubmit && (\n <IconButton\n type='submit'\n data-testid='save-button'\n disabled={!canSubmit}\n icon='ph--check--regular'\n label={t('button save')}\n onClick={onSubmit}\n />\n )}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type BaseObject, FormatEnum } from '@dxos/echo-schema';\nimport { type SimpleType } from '@dxos/effect';\n\nimport { BooleanInput, NumberInput, TextInput } from './Defaults';\nimport { type InputComponent } from './Input';\nimport { GeoPointInput } from './custom';\n\n/**\n * Get property input component.\n */\nexport const getInputComponent = <T extends BaseObject>(\n type: SimpleType,\n format?: FormatEnum,\n): InputComponent<T> | undefined => {\n switch (format) {\n case FormatEnum.LatLng:\n return GeoPointInput;\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 2024 DXOS.org\n//\n\nimport { type FocusEvent, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type BaseObject, type PropertyKey, getValue, setValue } from '@dxos/echo-schema';\nimport { type SimpleType, type S, type JsonPath } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { validateSchema, type ValidationError } 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<PropertyKey<T>, string>;\n touched: Record<PropertyKey<T>, boolean>;\n changed: Record<PropertyKey<T>, boolean>;\n canSave: boolean;\n handleSave: () => void;\n\n //\n // Form input component helpers.\n //\n\n getStatus: (property: PropertyKey<T>) => { status?: 'error'; error?: string };\n getValue: <V>(property: PropertyKey<T>) => V | undefined;\n onValueChange: <V>(property: PropertyKey<T>, type: SimpleType, value: V) => void;\n onBlur: (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\n};\n\n/**\n * Hook options.\n */\nexport interface FormOptions<T extends BaseObject> {\n /**\n * Effect schema.\n */\n // TODO(burdon): Change to S.Struct<T>?\n schema: S.Schema<T>;\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 const [values, setValues] = useState<Partial<T>>(initialValues);\n useEffect(() => {\n setValues(initialValues);\n }, [initialValues]);\n\n const [touched, setTouched] = useState<Record<PropertyKey<T>, boolean>>(createKeySet(initialValues, false));\n const [changed, setChanged] = useState<Record<PropertyKey<T>, boolean>>(createKeySet(initialValues, false));\n const [errors, setErrors] = useState<Record<PropertyKey<T>, string>>({} as Record<PropertyKey<T>, string>);\n const [saving, setSaving] = useState(false);\n\n //\n // Validation.\n //\n\n // TODO(burdon): Validate each property separately.\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 /**\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 Object.keys(values).every((property) => touched[property as JsonPath] === false || !errors[property as JsonPath]),\n [values, 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 (property: PropertyKey<T>) => ({\n status: errors[property] ? 'error' : undefined,\n error: errors[property] ? errors[property] : undefined,\n }),\n [touched, errors],\n );\n\n // TODO(burdon): Use path to extract hierarchical value.\n const getFormValue = <V>(property: PropertyKey<T>): V | undefined => {\n return getValue(values, property as any as JsonPath);\n };\n\n const onValueChange = (property: PropertyKey<T>, type: SimpleType, value: any) => {\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, property as any as JsonPath, parsedValue) };\n setValues(newValues);\n setChanged((prev) => ({ ...prev, [property]: true }));\n onValuesChanged?.(newValues);\n\n const isValid = validate(newValues);\n if (isValid && onValid) {\n onValid(newValues, { changed });\n }\n };\n\n // TODO(burdon): This is a leaky abstraction: the hook ideally shouldn't get involved in UX.\n const onBlur = useCallback(\n (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const { name } = event.target;\n setTouched((touched) => ({ ...touched, [name]: true }));\n\n // TODO(Zan): This should be configurable behavior.\n if (event.relatedTarget?.getAttribute('type') === 'submit') {\n // NOTE: We do this here instead of onSave because the blur event is triggered before the submit event\n // and results in the submit button being disabled when the form is invalid.\n setTouched(createKeySet(values, true));\n }\n\n validate(values);\n },\n [validate, values],\n );\n\n return {\n // State.\n values,\n errors,\n touched,\n changed,\n canSave,\n handleSave,\n\n // Field utils.\n getStatus,\n getValue: getFormValue,\n onValueChange,\n onBlur,\n } satisfies FormHandler<T>;\n};\n\nconst createKeySet = <T extends BaseObject, V>(obj: T, value: V): Record<PropertyKey<T>, V> => {\n invariant(obj);\n return Object.keys(obj).reduce((acc, key) => ({ ...acc, [key]: value }), {} as Record<PropertyKey<T>, V>);\n};\n\nconst flatMap = <T extends BaseObject>(errors: ValidationError[]) => {\n return errors.reduce(\n (result, { path, message }) => {\n if (!(path in result)) {\n result[path as PropertyKey<T>] = message;\n }\n return result;\n },\n {} as Record<PropertyKey<T>, string>,\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { type SchemaRegistry } from '@dxos/echo-db';\nimport { AST, Format, type EchoSchema, S } from '@dxos/echo-schema';\nimport { IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, inputTextLabel, mx } from '@dxos/react-ui-theme';\nimport { FieldSchema, type FieldType, type ViewType, ViewProjection, VIEW_FIELD_LIMIT } from '@dxos/schema';\nimport { arrayMove } from '@dxos/util';\n\nimport { translationKey } from '../../translations';\nimport { FieldEditor } from '../FieldEditor';\nimport { Form } from '../Form';\n\nconst grid = 'grid grid-cols-[32px_1fr_32px] min-bs-[2.5rem]';\n\nconst ViewMetaSchema = S.Struct({\n name: S.String.annotations({\n [AST.TitleAnnotationId]: 'View',\n }),\n typename: Format.DXN.annotations({\n [AST.TitleAnnotationId]: 'Typename',\n }),\n}).pipe(S.mutable);\n\ntype ViewMetaType = S.Schema.Type<typeof ViewMetaSchema>;\n\nexport type ViewEditorProps = ThemedClassName<{\n schema: EchoSchema;\n view: ViewType;\n registry?: SchemaRegistry;\n readonly?: boolean;\n showHeading?: boolean;\n onDelete: (fieldId: string) => void;\n}>;\n\n/**\n * Schema-based object form.\n */\nexport const ViewEditor = ({\n classNames,\n schema,\n view,\n registry,\n readonly,\n showHeading = false,\n onDelete,\n}: ViewEditorProps) => {\n const { t } = useTranslation(translationKey);\n const projection = useMemo(() => new ViewProjection(schema, view), [schema, view]);\n const [field, setField] = useState<FieldType>();\n\n // TODO(burdon): Should be reactive.\n const viewValues = useMemo(() => {\n return {\n name: view.name,\n // TODO(burdon): Need to warn user of possible consequences of editing.\n // TODO(burdon): Settings should have domain name owned by user.\n typename: view.query.type,\n };\n }, [view]);\n\n const handleViewUpdate = useCallback(\n ({ name, typename }: ViewMetaType) => {\n requestAnimationFrame(() => {\n view.name = name;\n view.query.type = typename;\n schema.updateTypename(typename);\n });\n },\n [view, schema],\n );\n\n const handleSelect = useCallback((field: FieldType) => {\n setField((f) => (f === field ? undefined : field));\n }, []);\n\n const handleAdd = useCallback(() => {\n const field = projection.createFieldProjection();\n setField(field);\n }, [view]);\n\n const handleMove = useCallback(\n (fromIndex: number, toIndex: number) => {\n arrayMove(view.fields, fromIndex, toIndex);\n },\n [view.fields],\n );\n\n const handleClose = useCallback(() => setField(undefined), []);\n\n return (\n <div role='none' className={mx('flex flex-col w-full divide-y divide-separator', classNames)}>\n <Form<ViewMetaType> autoFocus autoSave schema={ViewMetaSchema} values={viewValues} onSave={handleViewUpdate} />\n\n <div>\n {/* TODO(burdon): Clean up common form ux. */}\n <div role='none' className='p-2'>\n <label className={mx(inputTextLabel)}>{t('fields label')}</label>\n </div>\n\n <List.Root<FieldType>\n items={view.fields}\n isItem={S.is(FieldSchema)}\n getId={(field) => field.id}\n onMove={handleMove}\n >\n {({ items: fields }) => (\n <>\n {showHeading && (\n <div role='heading' className={grid}>\n <div />\n <div className='flex items-center text-sm'>{t('field path label')}</div>\n </div>\n )}\n\n <div role='list' className='flex flex-col w-full'>\n {fields?.map((field) => (\n <List.Item<FieldType> key={field.id} item={field} classNames={mx(grid, ghostHover, 'cursor-pointer')}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleSelect(field)}>{field.path}</List.ItemTitle>\n <List.ItemDeleteButton disabled={view.fields.length <= 1} onClick={() => onDelete(field.id)} />\n </List.Item>\n ))}\n </div>\n </>\n )}\n </List.Root>\n </div>\n\n {field && (\n <FieldEditor\n key={field.id}\n view={view}\n projection={projection}\n field={field}\n registry={registry}\n onSave={handleClose}\n />\n )}\n\n {!readonly && !field && (\n <div className='flex p-2 justify-center'>\n <IconButton\n icon='ph--plus--regular'\n label={t('button add property')}\n onClick={handleAdd}\n // TODO(burdon): Show field limit in ux (not tooltip).\n disabled={view.fields.length >= VIEW_FIELD_LIMIT}\n />\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { FormatEnum, 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 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 if (!format) {\n switch (type) {\n case TypeEnum.Number:\n return ['text-right', 'font-mono'];\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\n default: {\n return undefined;\n }\n }\n }\n\n switch (format) {\n case FormatEnum.Markdown:\n return undefined;\n case FormatEnum.Timestamp:\n case FormatEnum.DateTime:\n case FormatEnum.Date:\n case FormatEnum.Time:\n return ['font-mono'];\n case FormatEnum.Currency:\n return ['text-right'];\n case FormatEnum.JSON:\n return ['font-mono'];\n default:\n return undefined;\n }\n};\n\nexport const cellClassesForRowSelection = (selected: boolean) => (selected ? ['!bg-gridCellSelected'] : undefined);\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 { FormatEnum, 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.DateTime:\n case FormatEnum.Date:\n case FormatEnum.Time: {\n const date = new Date(value as number);\n if (format === FormatEnum.DateTime) {\n return date.toLocaleString(locale);\n } else if (format === FormatEnum.Date) {\n return date.toLocaleDateString(locale);\n } else {\n return date.toLocaleTimeString(locale);\n }\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 default: {\n return String(value);\n }\n }\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_react", "import_react_ui", "import_react_ui_theme", "import_util", "import_echo_schema", "import_effect", "import_log", "import_schema", "translationKey", "DeprecatedFormInput", "label", "description", "secondary", "children", "primary", "React", "div", "role", "className", "Input", "Root", "Label", "classNames", "DescriptionAndValidation", "Description", "InputHeader", "error", "Tooltip", "Trigger", "asChild", "Icon", "icon", "size", "errorText", "Content", "side", "Arrow", "GeoPointInput", "property", "type", "disabled", "getStatus", "getValue", "onValueChange", "onBlur", "t", "useTranslation", "status", "lng", "lat", "validationValence", "TextInput", "placeholder", "value", "onChange", "event", "safeParseFloat", "target", "gridCols", "TupleInput", "binding", "values", "mx", "length", "map", "prop", "key", "inputOnly", "Validation", "NumberInput", "BooleanInput", "Switch", "checked", "onCheckedChange", "SelectInput", "options", "Select", "TriggerButton", "Portal", "Viewport", "Option", "String", "getInputComponent", "format", "FormatEnum", "LatLng", "useForm", "schema", "initialValues", "onValuesChanged", "onValidate", "onValid", "onSave", "setValues", "useState", "useEffect", "touched", "setTouched", "createKeySet", "changed", "setChanged", "errors", "setErrors", "saving", "setSaving", "validate", "useCallback", "validateSchema", "validatedValues", "flatMap", "valid", "schemaDirty", "setSchemaDirty", "canSave", "useMemo", "Object", "keys", "every", "handleSave", "undefined", "getFormValue", "parsedValue", "parseFloat", "err", "log", "catch", "newValues", "setValue", "prev", "isValid", "name", "relatedTarget", "getAttribute", "obj", "invariant", "reduce", "acc", "result", "path", "message", "padding", "Form", "readonly", "filter", "sort", "autoSave", "testId", "onCancel", "Custom", "inputProps", "properties", "props", "getSchemaProperties", "ast", "filtered", "findIndex", "idx", "p", "Infinity", "a", "b", "warn", "data-testid", "title", "examples", "array", "pipe", "capitalize", "InputComponent", "join", "option", "ArrayField", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "AST", "isTypeLiteral", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'react-ui-form';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {\n 'fields label': 'Fields',\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\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 email': 'Email',\n 'format formula': 'Formula',\n 'format hostname': 'Hostname',\n 'format integer': 'Integer',\n 'format json': 'JSON',\n 'format latlng': 'LatLng',\n 'format markdown': 'Markdown',\n 'format percent': 'Percent',\n 'format ref': 'Reference',\n 'format regex': 'RegExp',\n 'format string': 'String',\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 uuid': 'UUID',\n\n // Placeholders\n 'placeholder latitude': 'Latitude',\n 'placeholder longitude': 'Longitude',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type JSX, type PropsWithChildren } from 'react';\n\nimport { Input } from '@dxos/react-ui';\n\nexport type DeprecatedFormInputProps = {\n label: string;\n description?: JSX.Element;\n secondary?: JSX.Element;\n};\n\n/**\n * @deprecated\n */\n// TODO(burdon): Still used in ObservabilitySettings and all settings.\nexport const DeprecatedFormInput = ({\n label,\n description,\n secondary,\n children,\n}: PropsWithChildren<DeprecatedFormInputProps>) => {\n const primary = (\n <div role='none' className='flex w-full gap-4 py-1'>\n <Input.Root>\n <div role='none' className='flex flex-col w-full'>\n {/* TODO(burdon): Consistent height for controls (e.g., Select, Textbox, and Checkbox are all different). */}\n <Input.Label classNames='flex min-h-[40px] items-center'>{label}</Input.Label>\n {description && (\n <Input.DescriptionAndValidation classNames='mbs-0.5'>\n <Input.Description>{description}</Input.Description>\n </Input.DescriptionAndValidation>\n )}\n </div>\n\n <div role='none'>\n <div role='none' className='flex min-h-[40px] items-center'>\n {children}\n </div>\n </div>\n </Input.Root>\n </div>\n );\n\n if (secondary) {\n // console.log(secondary);\n return (\n <div role='none' className='flex flex-col w-full'>\n {primary}\n {secondary}\n </div>\n );\n }\n\n return primary;\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 { FormatEnum, FormatEnums, formatToType, type EchoSchema } from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\nimport { useTranslation } from '@dxos/react-ui';\nimport {\n getFormatSchema,\n getSchemaProperties,\n sortProperties,\n type FieldType,\n type PropertyType,\n type ViewType,\n type ViewProjection,\n type SchemaProperty,\n} from '@dxos/schema';\n\nimport { translationKey } from '../../translations';\nimport { Form, type FormProps, type InputComponent, SelectInput } from '../Form';\n\nexport type FieldEditorProps = {\n view: ViewType;\n projection: ViewProjection;\n field: FieldType;\n registry?: SchemaRegistry;\n onSave: () => void;\n onCancel?: () => void;\n};\n\n/**\n * Displays a Form representing the metadata for a given `Field` and `View`.\n */\nexport const FieldEditor = ({ view, projection, field, registry, onSave, onCancel }: FieldEditorProps) => {\n const { t } = useTranslation(translationKey);\n const [props, setProps] = useState<PropertyType>(projection.getFieldProjection(field.id).props);\n useEffect(() => setProps(projection.getFieldProjection(field.id).props), [field, projection]);\n\n const [schemas, setSchemas] = useState<EchoSchema[]>([]);\n useEffect(() => {\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 t = setTimeout(async () => {\n const schemas = await registry.query().run();\n setSchemas(schemas);\n });\n return () => {\n clearTimeout(t);\n subscription?.();\n };\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 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;\n });\n },\n [schemas, props.format, props.referenceSchema],\n );\n\n const handleValidate = useCallback<NonNullable<FormProps<PropertyType>['onValidate']>>(\n ({ property }) => {\n if (property && view.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 [view.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<PropertyType>>> = useMemo(\n () => ({\n ['format' satisfies keyof PropertyType]: (props) => (\n <SelectInput<PropertyType>\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<PropertyType>\n {...props}\n options={schemas.map((schema) => ({\n value: schema.typename,\n }))}\n />\n ),\n ['referencePath' satisfies keyof PropertyType]: (props) => (\n <SelectInput<PropertyType>\n {...props}\n options={\n referenceSchema\n ? getSchemaProperties(referenceSchema.ast)\n .sort(sortProperties)\n .map((p) => ({ value: p.name }))\n : []\n }\n />\n ),\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 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 />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type BaseObject, 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 = <T extends BaseObject>({\n property,\n type,\n label,\n disabled,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps<T>) => {\n const { t } = useTranslation(translationKey);\n const { status, error } = getStatus?.(property);\n const [lng = 0, lat = 0] = getValue<GeoPoint>(property) ?? [];\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\n <div className='grid grid-cols-2 gap-2'>\n <Input.TextInput\n type='number'\n disabled={disabled}\n placeholder={t('placeholder longitude')}\n value={lng}\n onChange={(event) => onValueChange(property, type, [lat, safeParseFloat(event.target.value, 0)])}\n onBlur={onBlur}\n />\n <Input.TextInput\n type='number'\n disabled={disabled}\n placeholder={t('placeholder latitude')}\n value={lat}\n onChange={(event) => onValueChange(property, type, [safeParseFloat(event.target.value, 0), lng])}\n onBlur={onBlur}\n />\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type FC, type PropsWithChildren } from 'react';\n\nimport { type BaseObject, type FormatEnum, type PropertyKey } from '@dxos/echo-schema';\nimport { type SimpleType } from '@dxos/effect';\nimport { Icon, Tooltip } from '@dxos/react-ui';\nimport { errorText } from '@dxos/react-ui-theme';\n\nimport { type FormHandler } from '../../hooks';\n\n/**\n * Props passed to input components.\n */\nexport type InputProps<T extends BaseObject> = {\n property: PropertyKey<T>;\n type: SimpleType;\n format?: FormatEnum;\n label?: string;\n disabled?: boolean;\n placeholder?: string;\n inputOnly?: boolean;\n} & Pick<FormHandler<T>, 'getStatus' | 'getValue' | 'onValueChange' | 'onBlur'>;\n\n/**\n * Form input component.\n */\nexport type InputComponent<T extends BaseObject> = FC<InputProps<T>>;\n\nexport type InputHeaderProps = PropsWithChildren<{\n error?: string;\n}>;\n\nexport const InputHeader = ({ children, error }: InputHeaderProps) => {\n return (\n <div role='none' className='flex justify-between items-center mb-1'>\n {children}\n {error && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Icon icon='ph--warning--regular' size={4} classNames={errorText} />\n </Tooltip.Trigger>\n <Tooltip.Content side='bottom'>\n <Tooltip.Arrow />\n {error}\n </Tooltip.Content>\n </Tooltip.Root>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type BaseObject } from '@dxos/echo-schema';\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 = <T extends BaseObject>({\n binding,\n property,\n type,\n label,\n disabled,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps<T> & { binding: string[] }) => {\n const { status, error } = getStatus?.(property);\n\n // TODO(burdon): Generalize number/float/string, etc.\n const values: Record<string, number> = getValue<Record<string, number>>(property) ?? {};\n\n return (\n <Input.Root validationValence={status}>\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\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={disabled}\n value={values[prop]}\n onChange={(event) =>\n onValueChange(property, type, { ...values, [prop]: safeParseFloat(event.target.value, 0) })\n }\n onBlur={onBlur}\n />\n ))}\n </div>\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type BaseObject } from '@dxos/echo-schema';\nimport { Input, Select } from '@dxos/react-ui';\n\nimport { type InputProps, InputHeader } from './Input';\n\nexport const TextInput = <T extends BaseObject>({\n property,\n type,\n label,\n inputOnly,\n disabled,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps<T>) => {\n const { status, error } = getStatus?.(property);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && (\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\n )}\n <Input.TextInput\n disabled={disabled}\n placeholder={placeholder}\n value={getValue(property) ?? ''}\n onChange={(event) => onValueChange(property, type, event.target.value)}\n onBlur={onBlur}\n />\n {inputOnly && <Input.Validation>{error}</Input.Validation>}\n </Input.Root>\n );\n};\n\nexport const NumberInput = <T extends BaseObject>({\n property,\n type,\n label,\n inputOnly,\n disabled,\n placeholder,\n getStatus,\n getValue,\n onValueChange,\n onBlur,\n}: InputProps<T>) => {\n const { status, error } = getStatus?.(property);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && (\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\n )}\n <Input.TextInput\n type='number'\n disabled={disabled}\n placeholder={placeholder}\n value={getValue(property) ?? 0}\n onChange={(event) => onValueChange(property, type, event.target.value)}\n onBlur={onBlur}\n />\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport const BooleanInput = <T extends BaseObject>({\n property,\n type,\n label,\n inputOnly,\n getStatus,\n getValue,\n onValueChange,\n}: InputProps<T>) => {\n const { status, error } = getStatus?.(property);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && (\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\n )}\n <Input.Switch\n checked={getValue<boolean>(property)}\n onCheckedChange={(value) => onValueChange(property, type, value)}\n />\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n\nexport type SelectInputOptions<T extends BaseObject> = InputProps<T> & {\n options?: Array<{ value: string | number; label?: string }>;\n};\n\nexport const SelectInput = <T extends BaseObject>({\n property,\n type,\n label,\n inputOnly,\n disabled,\n placeholder,\n options,\n getStatus,\n getValue,\n onValueChange,\n}: SelectInputOptions<T>) => {\n const { status, error } = getStatus?.(property);\n\n return (\n <Input.Root validationValence={status}>\n {!inputOnly && (\n <InputHeader error={error}>\n <Input.Label>{label}</Input.Label>\n </InputHeader>\n )}\n <Select.Root value={getValue(property)} onValueChange={(value) => onValueChange(property, type, value)}>\n {/* TODO(burdon): Placeholder not working? */}\n <Select.TriggerButton classNames='is-full' disabled={disabled} 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.Content>\n </Select.Portal>\n </Select.Root>\n {inputOnly && <Input.DescriptionAndValidation>{error}</Input.DescriptionAndValidation>}\n </Input.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { pipe } from 'effect';\nimport { capitalize } from 'effect/String';\nimport React, { useEffect, useMemo } from 'react';\n\nimport { AST, type BaseObject, S, type PropertyKey, type FormatEnum } from '@dxos/echo-schema';\nimport { findNode, getDiscriminatedType, isDiscriminatedUnion, SimpleType } from '@dxos/effect';\nimport { log } from '@dxos/log';\nimport { IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { getSchemaProperties, type SchemaProperty } from '@dxos/schema';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { SelectInput } from './Defaults';\nimport { InputHeader, type InputProps, type InputComponent } from './Input';\nimport { getInputComponent } from './factory';\nimport { type FormHandler, type FormOptions, useForm } from '../../hooks';\nimport { translationKey } from '../../translations';\n\n// TODO(burdon): Rename package react-ui-form; delete react-ui-card.\n\nconst padding = 'px-2';\n\nexport type PropsFilter<T extends BaseObject> = (props: SchemaProperty<T>[]) => SchemaProperty<T>[];\n\nexport type FormProps<T extends BaseObject> = ThemedClassName<\n {\n values: Partial<T>;\n\n /** Path to the current object from the root. Used with nested forms. */\n path?: string[];\n\n // TODO(burdon): Autofocus first input.\n autoFocus?: boolean;\n readonly?: boolean;\n // TODO(burdon): Change to JsonPath includes/excludes.\n filter?: PropsFilter<T>;\n sort?: PropertyKey<T>[];\n autoSave?: boolean;\n testId?: string;\n onCancel?: () => void;\n\n lookupComponent?: (args: {\n prop: string;\n schema: S.Schema<any>;\n inputProps: InputProps<T>;\n }) => React.ReactElement | undefined;\n /**\n * Map of custom renderers for specific properties.\n * @deprecated Use lookupComponent instead.\n */\n Custom?: Partial<Record<string, InputComponent<T>>>;\n } & Pick<FormOptions<T>, 'schema' | 'onValuesChanged' | 'onValidate' | 'onSave'>\n>;\n\n/**\n * General purpose form component that displays field controls based on the given schema.\n */\n// TODO(burdon): Area to show general validation errors.\nexport const Form = <T extends BaseObject>({\n classNames,\n schema,\n values: initialValues,\n path = [],\n readonly,\n filter,\n sort,\n autoSave,\n testId,\n onValuesChanged,\n onValidate,\n onSave,\n onCancel,\n lookupComponent,\n Custom,\n}: FormProps<T>) => {\n const onValid = useMemo(() => (autoSave ? onSave : undefined), [autoSave, onSave]);\n const { canSave, values, errors, handleSave, ...inputProps } = useForm<T>({\n schema,\n initialValues,\n onValuesChanged,\n onValidate,\n onValid,\n onSave,\n });\n\n // Filter and sort props.\n // TODO(burdon): Move into useForm?\n const properties = useMemo(() => {\n const props = getSchemaProperties<T>(schema.ast, values);\n const filtered = filter ? filter(props) : props;\n const findIndex = (props: PropertyKey<T>[], prop: PropertyKey<T>) => {\n const idx = props.findIndex((p) => p === prop);\n return idx === -1 ? Infinity : idx;\n };\n\n return sort ? filtered.sort(({ name: a }, { name: b }) => findIndex(sort, a) - findIndex(sort, b)) : filtered;\n }, [schema, filter, values]);\n\n // TODO(burdon): Highlight in UX.\n useEffect(() => {\n if (errors && Object.keys(errors).length) {\n log.warn('validation', { errors });\n }\n }, [errors]);\n\n return (\n <div role='form' className={mx('flex flex-col w-full gap-2 py-2', classNames)} data-testid={testId}>\n {properties\n .map((property) => {\n const { ast, name, type, format, title, description, examples, options, array } = property;\n const key = [...path, name];\n const label = title ?? pipe(name, capitalize);\n const placeholder = examples?.length ? `Example: \"${examples[0]}\"` : description;\n\n const FoundComponent = lookupComponent?.({\n prop: name,\n schema: S.make(ast),\n inputProps: {\n property: name,\n type,\n format,\n label,\n disabled: readonly,\n placeholder,\n ...inputProps,\n },\n });\n\n if (FoundComponent) {\n return (\n <div key={name} role='none' className={padding}>\n {FoundComponent}\n </div>\n );\n }\n\n // Get generic input.\n // TODO(ZaymonFC): We might need to switch this to using globs since we're now indexing into arrays.\n let InputComponent = Custom?.[key.join('.')];\n if (!InputComponent) {\n // Select.\n if (options) {\n return (\n <div key={name} role='none' className={padding}>\n <SelectInput\n type={type}\n format={format}\n property={name}\n disabled={readonly}\n label={label}\n options={options.map((option) => ({ value: option, label: String(option) }))}\n placeholder={placeholder}\n {...inputProps}\n />\n </div>\n );\n }\n\n InputComponent = getInputComponent<T>(type, format);\n\n // TODO(ZaymonFC): Array handling is inelegant. We need to push this complexity down into SDK/Schema.\n if (array) {\n return (\n <ArrayField\n key={name}\n name={name}\n type={type}\n array={true}\n label={label}\n ast={ast}\n values={values}\n format={format}\n readonly={readonly}\n placeholder={placeholder}\n inputProps={inputProps}\n Custom={Custom}\n />\n );\n }\n }\n\n if (!InputComponent) {\n // Recursively render form.\n if (type === 'object') {\n const baseNode = findNode(ast, isDiscriminatedUnion);\n const typeLiteral = baseNode\n ? getDiscriminatedType(baseNode, values[name] as any)\n : findNode(ast, AST.isTypeLiteral);\n\n if (typeLiteral) {\n const schema = S.make(typeLiteral);\n return (\n <div key={name} role='none'>\n <div className={padding}>{label}</div>\n <Form<any>\n schema={schema}\n path={key}\n values={values[name] ?? {}}\n onValuesChanged={(childValues) => {\n inputProps.onValueChange(name, 'object', childValues);\n }}\n Custom={Custom as any}\n />\n </div>\n );\n }\n }\n\n log('no renderer for property', { name, type });\n return null;\n }\n\n return (\n <div key={name} role='none' className={padding}>\n <InputComponent\n type={type}\n format={format}\n property={name}\n disabled={readonly}\n label={label}\n placeholder={placeholder}\n {...inputProps}\n />\n </div>\n );\n })\n .filter(isNotFalsy)}\n {(onCancel || onSave) && !autoSave && (\n <FormActions onCancel={onCancel} onSubmit={handleSave} canSubmit={canSave} readonly={readonly} />\n )}\n </div>\n );\n};\n\ntype ArrayFieldProps<T extends BaseObject> = {\n name: PropertyKey<T>;\n type: SimpleType;\n array: true;\n label: string;\n ast: AST.AST;\n values: Record<string, any>;\n format?: FormatEnum;\n readonly?: boolean;\n placeholder?: string;\n inputProps: Pick<FormHandler<T>, 'getStatus' | 'getValue' | 'onValueChange' | 'onBlur'>;\n Custom?: Partial<Record<string, InputComponent<T>>>;\n};\n\nconst ArrayField = <T extends BaseObject>({\n name,\n type,\n label,\n ast,\n values,\n format,\n readonly,\n placeholder,\n inputProps,\n Custom,\n}: ArrayFieldProps<T>) => {\n const { t } = useTranslation(translationKey);\n const arrayValues = (values[name] ?? []) as any[];\n const key = [name];\n\n // TODO(ZaymonFC): Should this unwrapping happen at a lower level?\n const tupleType = findNode(ast, AST.isTupleType);\n const elementType = (tupleType as AST.TupleType | undefined)?.rest[0]?.type;\n\n if (type === 'object' && elementType) {\n const baseNode = findNode(elementType, isDiscriminatedUnion);\n const typeLiteral = baseNode\n ? getDiscriminatedType(baseNode, values[name] as any)\n : findNode(elementType, AST.isTypeLiteral);\n\n if (typeLiteral) {\n const schema = S.make(typeLiteral);\n\n return (\n <div key={name} role='none' className={mx(padding)}>\n <InputHeader>{label}</InputHeader>\n <div role='none' className='flex flex-col gap-1'>\n {arrayValues.map((value, index) => {\n return (\n <div key={index} role='none' className='flex items-center gap-1'>\n <div role='none' className='flex-1'>\n <Form<any>\n schema={schema}\n path={[...key, `[${index}]`]}\n values={value}\n onValuesChanged={(childValues) => {\n const newValues = [...arrayValues];\n newValues[index] = childValues;\n inputProps.onValueChange(name, 'object', newValues);\n }}\n Custom={Custom as any}\n />\n </div>\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n label={t('button remove')}\n onClick={() => {\n const newValues = arrayValues.filter((_, i) => i !== index);\n inputProps.onValueChange(name, type, newValues);\n }}\n />\n </div>\n );\n })}\n </div>\n <div role='none' className='flex justify-between items-center plb-1'>\n <IconButton\n icon='ph--plus--regular'\n iconOnly\n label={t('button add')}\n onClick={() => {\n const newValues = [...arrayValues, {}];\n inputProps.onValueChange(name, type, newValues);\n }}\n />\n </div>\n </div>\n );\n }\n return (\n <div key={name} role='none'>\n Nested form not supported in arrays, yet.\n </div>\n );\n }\n\n const InputComponent = getInputComponent<T>(type, format);\n if (!InputComponent) {\n return null;\n }\n\n return (\n <div role='none' key='meta-input' className={mx(padding)}>\n <InputHeader>{label}</InputHeader>\n <div role='none' className='flex flex-col gap-1'>\n {arrayValues.map((_, index) => (\n <div key={index} role='none' className='flex items-start gap-1'>\n <div role='none' className='flex-1'>\n <InputComponent\n type={type}\n format={format}\n label={label}\n inputOnly\n property={`${name}[${index}]` as PropertyKey<T>}\n disabled={readonly}\n placeholder={placeholder}\n {...inputProps}\n />\n </div>\n <IconButton\n icon='ph--trash--regular'\n iconOnly\n label={t('button remove')}\n onClick={() => {\n const newValues = arrayValues.filter((_, i) => i !== index);\n inputProps.onValueChange(name, type, newValues);\n }}\n />\n </div>\n ))}\n </div>\n <div role='none' className='flex justify-between items-center plb-1'>\n <IconButton\n icon='ph--plus--regular'\n iconOnly\n label={t('button add')}\n onClick={() => {\n const newValues = [...arrayValues, SimpleType.getDefaultValue(type)];\n inputProps.onValueChange(name, type, newValues);\n }}\n />\n </div>\n </div>\n );\n};\n\ntype FormActionsProps = {\n readonly?: boolean;\n canSubmit: boolean;\n onCancel?: () => void;\n onSubmit: () => void;\n};\n\nexport const FormActions = ({ onCancel, onSubmit, canSubmit, readonly }: FormActionsProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <div role='none' className='flex justify-center'>\n <div role='none' className={mx(onCancel && !readonly && 'grid grid-cols-2 gap-2')}>\n {onCancel && !readonly && (\n <IconButton data-testid='cancel-button' icon='ph--x--regular' label={t('button cancel')} onClick={onCancel} />\n )}\n {onSubmit && (\n <IconButton\n type='submit'\n data-testid='save-button'\n disabled={!canSubmit}\n icon='ph--check--regular'\n label={t('button save')}\n onClick={onSubmit}\n />\n )}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type BaseObject, FormatEnum } from '@dxos/echo-schema';\nimport { type SimpleType } from '@dxos/effect';\n\nimport { BooleanInput, NumberInput, TextInput } from './Defaults';\nimport { type InputComponent } from './Input';\nimport { GeoPointInput } from './custom';\n\n/**\n * Get property input component.\n */\nexport const getInputComponent = <T extends BaseObject>(\n type: SimpleType,\n format?: FormatEnum,\n): InputComponent<T> | undefined => {\n switch (format) {\n case FormatEnum.LatLng:\n return GeoPointInput;\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 2024 DXOS.org\n//\n\nimport { type FocusEvent, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { type BaseObject, type PropertyKey, getValue, setValue } from '@dxos/echo-schema';\nimport { type SimpleType, type S, type JsonPath } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { validateSchema, type ValidationError } 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<PropertyKey<T>, string>;\n touched: Record<PropertyKey<T>, boolean>;\n changed: Record<PropertyKey<T>, boolean>;\n canSave: boolean;\n handleSave: () => void;\n\n //\n // Form input component helpers.\n //\n\n getStatus: (property: PropertyKey<T>) => { status?: 'error'; error?: string };\n getValue: <V>(property: PropertyKey<T>) => V | undefined;\n onValueChange: <V>(property: PropertyKey<T>, type: SimpleType, value: V) => void;\n onBlur: (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\n};\n\n/**\n * Hook options.\n */\nexport interface FormOptions<T extends BaseObject> {\n /**\n * Effect schema.\n */\n // TODO(burdon): Change to S.Struct<T>?\n schema: S.Schema<T>;\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 const [values, setValues] = useState<Partial<T>>(initialValues);\n useEffect(() => {\n setValues(initialValues);\n }, [initialValues]);\n\n const [touched, setTouched] = useState<Record<PropertyKey<T>, boolean>>(createKeySet(initialValues, false));\n const [changed, setChanged] = useState<Record<PropertyKey<T>, boolean>>(createKeySet(initialValues, false));\n const [errors, setErrors] = useState<Record<PropertyKey<T>, string>>({} as Record<PropertyKey<T>, string>);\n const [saving, setSaving] = useState(false);\n\n //\n // Validation.\n //\n\n // TODO(burdon): Validate each property separately.\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 /**\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 Object.keys(values).every((property) => touched[property as JsonPath] === false || !errors[property as JsonPath]),\n [values, 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 (property: PropertyKey<T>) => ({\n status: errors[property] ? 'error' : undefined,\n error: errors[property] ? errors[property] : undefined,\n }),\n [touched, errors],\n );\n\n // TODO(burdon): Use path to extract hierarchical value.\n const getFormValue = <V>(property: PropertyKey<T>): V | undefined => {\n return getValue(values, property as any as JsonPath);\n };\n\n const onValueChange = (property: PropertyKey<T>, type: SimpleType, value: any) => {\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, property as any as JsonPath, parsedValue) };\n setValues(newValues);\n setChanged((prev) => ({ ...prev, [property]: true }));\n onValuesChanged?.(newValues);\n\n const isValid = validate(newValues);\n if (isValid && onValid) {\n onValid(newValues, { changed });\n }\n };\n\n // TODO(burdon): This is a leaky abstraction: the hook ideally shouldn't get involved in UX.\n const onBlur = useCallback(\n (event: FocusEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n const { name } = event.target;\n setTouched((touched) => ({ ...touched, [name]: true }));\n\n // TODO(Zan): This should be configurable behavior.\n if (event.relatedTarget?.getAttribute('type') === 'submit') {\n // NOTE: We do this here instead of onSave because the blur event is triggered before the submit event\n // and results in the submit button being disabled when the form is invalid.\n setTouched(createKeySet(values, true));\n }\n\n validate(values);\n },\n [validate, values],\n );\n\n return {\n // State.\n values,\n errors,\n touched,\n changed,\n canSave,\n handleSave,\n\n // Field utils.\n getStatus,\n getValue: getFormValue,\n onValueChange,\n onBlur,\n } satisfies FormHandler<T>;\n};\n\nconst createKeySet = <T extends BaseObject, V>(obj: T, value: V): Record<PropertyKey<T>, V> => {\n invariant(obj);\n return Object.keys(obj).reduce((acc, key) => ({ ...acc, [key]: value }), {} as Record<PropertyKey<T>, V>);\n};\n\nconst flatMap = <T extends BaseObject>(errors: ValidationError[]) => {\n return errors.reduce(\n (result, { path, message }) => {\n if (!(path in result)) {\n result[path as PropertyKey<T>] = message;\n }\n return result;\n },\n {} as Record<PropertyKey<T>, string>,\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { type SchemaRegistry } from '@dxos/echo-db';\nimport { AST, Format, type EchoSchema, S } from '@dxos/echo-schema';\nimport { IconButton, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { List } from '@dxos/react-ui-list';\nimport { ghostHover, inputTextLabel, mx } from '@dxos/react-ui-theme';\nimport { FieldSchema, type FieldType, type ViewType, ViewProjection, VIEW_FIELD_LIMIT } from '@dxos/schema';\nimport { arrayMove } from '@dxos/util';\n\nimport { translationKey } from '../../translations';\nimport { FieldEditor } from '../FieldEditor';\nimport { Form } from '../Form';\n\nconst grid = 'grid grid-cols-[32px_1fr_32px] min-bs-[2.5rem]';\n\nconst ViewMetaSchema = S.Struct({\n name: S.String.annotations({\n [AST.TitleAnnotationId]: 'View',\n }),\n typename: Format.DXN.annotations({\n [AST.TitleAnnotationId]: 'Typename',\n }),\n}).pipe(S.mutable);\n\ntype ViewMetaType = S.Schema.Type<typeof ViewMetaSchema>;\n\nexport type ViewEditorProps = ThemedClassName<{\n schema: EchoSchema;\n view: ViewType;\n registry?: SchemaRegistry;\n readonly?: boolean;\n showHeading?: boolean;\n onTypenameChanged: (typename: string) => void;\n onDelete: (fieldId: string) => void;\n}>;\n\n/**\n * Schema-based object form.\n */\nexport const ViewEditor = ({\n classNames,\n schema,\n view,\n registry,\n readonly,\n showHeading = false,\n onTypenameChanged,\n onDelete,\n}: ViewEditorProps) => {\n const { t } = useTranslation(translationKey);\n const projection = useMemo(() => new ViewProjection(schema, view), [schema, view]);\n const [field, setField] = useState<FieldType>();\n\n // TODO(burdon): Should be reactive.\n const viewValues = useMemo(() => {\n return {\n name: view.name,\n // TODO(burdon): Need to warn user of possible consequences of editing.\n // TODO(burdon): Settings should have domain name owned by user.\n typename: view.query.type,\n };\n }, [view]);\n\n const handleViewUpdate = useCallback(\n ({ name, typename }: ViewMetaType) => {\n requestAnimationFrame(() => {\n if (view.name !== name) {\n view.name = name;\n }\n if (view.query.type !== typename) {\n onTypenameChanged(typename);\n }\n });\n },\n [view, schema, onTypenameChanged],\n );\n\n const handleSelect = useCallback((field: FieldType) => {\n setField((f) => (f === field ? undefined : field));\n }, []);\n\n const handleAdd = useCallback(() => {\n const field = projection.createFieldProjection();\n setField(field);\n }, [view]);\n\n const handleMove = useCallback(\n (fromIndex: number, toIndex: number) => {\n arrayMove(view.fields, fromIndex, toIndex);\n },\n [view.fields],\n );\n\n const handleClose = useCallback(() => setField(undefined), []);\n\n return (\n <div role='none' className={mx('flex flex-col w-full divide-y divide-separator', classNames)}>\n <Form<ViewMetaType> autoFocus autoSave schema={ViewMetaSchema} values={viewValues} onSave={handleViewUpdate} />\n\n <div>\n {/* TODO(burdon): Clean up common form ux. */}\n <div role='none' className='p-2'>\n <label className={mx(inputTextLabel)}>{t('fields label')}</label>\n </div>\n\n <List.Root<FieldType>\n items={view.fields}\n isItem={S.is(FieldSchema)}\n getId={(field) => field.id}\n onMove={handleMove}\n >\n {({ items: fields }) => (\n <>\n {showHeading && (\n <div role='heading' className={grid}>\n <div />\n <div className='flex items-center text-sm'>{t('field path label')}</div>\n </div>\n )}\n\n <div role='list' className='flex flex-col w-full'>\n {fields?.map((field) => (\n <List.Item<FieldType> key={field.id} item={field} classNames={mx(grid, ghostHover, 'cursor-pointer')}>\n <List.ItemDragHandle />\n <List.ItemTitle onClick={() => handleSelect(field)}>{field.path}</List.ItemTitle>\n <List.ItemDeleteButton disabled={view.fields.length <= 1} onClick={() => onDelete(field.id)} />\n </List.Item>\n ))}\n </div>\n </>\n )}\n </List.Root>\n </div>\n\n {field && (\n <FieldEditor\n key={field.id}\n view={view}\n projection={projection}\n field={field}\n registry={registry}\n onSave={handleClose}\n />\n )}\n\n {!readonly && !field && (\n <div className='flex p-2 justify-center'>\n <IconButton\n icon='ph--plus--regular'\n label={t('button add property')}\n onClick={handleAdd}\n // TODO(burdon): Show field limit in ux (not tooltip).\n disabled={view.fields.length >= VIEW_FIELD_LIMIT}\n />\n </div>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { FormatEnum, 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 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 if (!format) {\n switch (type) {\n case TypeEnum.Number:\n return ['text-right', 'font-mono'];\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\n default: {\n return undefined;\n }\n }\n }\n\n switch (format) {\n case FormatEnum.Markdown:\n return undefined;\n case FormatEnum.Timestamp:\n case FormatEnum.DateTime:\n case FormatEnum.Date:\n case FormatEnum.Time:\n return ['font-mono'];\n case FormatEnum.Currency:\n return ['text-right'];\n case FormatEnum.JSON:\n return ['font-mono'];\n default:\n return undefined;\n }\n};\n\nexport const cellClassesForRowSelection = (selected: boolean) => (selected ? ['!bg-gridCellSelected'] : undefined);\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 { FormatEnum, 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.DateTime:\n case FormatEnum.Date:\n case FormatEnum.Time: {\n const date = new Date(value as number);\n if (format === FormatEnum.DateTime) {\n return date.toLocaleString(locale);\n } else if (format === FormatEnum.Date) {\n return date.toLocaleDateString(locale);\n } else {\n return date.toLocaleTimeString(locale);\n }\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 default: {\n return String(value);\n }\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "import_react_ui", "import_react_ui_theme", "import_util", "import_echo_schema", "import_effect", "import_log", "import_schema", "translationKey", "DeprecatedFormInput", "label", "description", "secondary", "children", "primary", "React", "div", "role", "className", "Input", "Root", "Label", "classNames", "DescriptionAndValidation", "Description", "InputHeader", "error", "Tooltip", "Trigger", "asChild", "Icon", "icon", "size", "errorText", "Content", "side", "Arrow", "GeoPointInput", "property", "type", "disabled", "getStatus", "getValue", "onValueChange", "onBlur", "t", "useTranslation", "status", "lng", "lat", "validationValence", "TextInput", "placeholder", "value", "onChange", "event", "safeParseFloat", "target", "gridCols", "TupleInput", "binding", "values", "mx", "length", "map", "prop", "key", "inputOnly", "Validation", "NumberInput", "BooleanInput", "Switch", "checked", "onCheckedChange", "SelectInput", "options", "Select", "TriggerButton", "Portal", "Viewport", "Option", "String", "getInputComponent", "format", "FormatEnum", "LatLng", "useForm", "schema", "initialValues", "onValuesChanged", "onValidate", "onValid", "onSave", "setValues", "useState", "useEffect", "touched", "setTouched", "createKeySet", "changed", "setChanged", "errors", "setErrors", "saving", "setSaving", "validate", "useCallback", "validateSchema", "validatedValues", "flatMap", "valid", "schemaDirty", "setSchemaDirty", "canSave", "useMemo", "Object", "keys", "every", "handleSave", "undefined", "getFormValue", "parsedValue", "parseFloat", "err", "log", "catch", "newValues", "setValue", "prev", "isValid", "name", "relatedTarget", "getAttribute", "obj", "invariant", "reduce", "acc", "result", "path", "message", "padding", "Form", "readonly", "filter", "sort", "autoSave", "testId", "onCancel", "lookupComponent", "Custom", "inputProps", "properties", "props", "getSchemaProperties", "ast", "filtered", "findIndex", "idx", "p", "Infinity", "a", "b", "warn", "data-testid", "title", "examples", "array", "pipe", "capitalize", "FoundComponent", "S", "make", "InputComponent", "join", "option", "ArrayField", "baseNode", "findNode", "isDiscriminatedUnion", "typeLiteral", "getDiscriminatedType", "AST", "isTypeLiteral", "childValues", "isNotFalsy", "FormActions", "onSubmit", "canSubmit", "arrayValues", "tupleType", "isTupleType", "elementType", "rest", "index", "IconButton", "iconOnly", "onClick", "_", "i", "SimpleType", "getDefaultValue", "FieldEditor", "view", "projection", "field", "registry", "setProps", "getFieldProjection", "id", "schemas", "setSchemas", "subscription", "query", "subscribe", "results", "fire", "setTimeout", "run", "clearTimeout", "referenceSchema", "setReferenceSchema", "find", "typename", "fieldSchema", "setFieldSchema", "getFormatSchema", "handleValuesChanged", "_props", "newSchema", "formatToType", "handleValidate", "fields", "f", "setFieldProjection", "handleCancel", "requestAnimationFrame", "FormatEnums", "None", "sortProperties", "propIsNotType", "autoFocus", "grid", "ViewMetaSchema", "Struct", "annotations", "TitleAnnotationId", "Format", "DXN", "mutable", "ViewEditor", "showHeading", "onTypenameChanged", "onDelete", "ViewProjection", "setField", "viewValues", "handleViewUpdate", "handleSelect", "handleAdd", "createFieldProjection", "handleMove", "fromIndex", "toIndex", "arrayMove", "handleClose", "inputTextLabel", "List", "items", "isItem", "is", "FieldSchema", "getId", "onMove", "Item", "item", "ghostHover", "ItemDragHandle", "ItemTitle", "ItemDeleteButton", "VIEW_FIELD_LIMIT", "parseValue", "parseScalar", "TypeEnum", "Boolean", "lowercaseValue", "toLowerCase", "Number", "cleaned", "replace", "num", "isNaN", "Ref", "Percent", "Currency", "Markdown", "Error", "DateTime", "Date", "Time", "Timestamp", "date", "getTime", "cellClassesForFieldType", "JSON", "cellClassesForRowSelection", "selected", "pathNotUniqueError", "formatForDisplay", "locale", "formatScalar", "toLocaleString", "toUpperCase", "style", "currency", "minimumFractionDigits", "maximumFractionDigits", "toLocaleDateString", "toLocaleTimeString", "formatForEditing", "toISOString", "split"]
|
|
7
7
|
}
|
package/dist/lib/node/meta.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/ui/react-ui-form/src/translations.ts":{"bytes":5683,"imports":[],"format":"esm"},"packages/ui/react-ui-form/src/components/deprecated/FormInput.tsx":{"bytes":4795,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-form/src/components/deprecated/index.ts":{"bytes":520,"imports":[{"path":"packages/ui/react-ui-form/src/components/deprecated/FormInput.tsx","kind":"import-statement","original":"./FormInput"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/Input.tsx":{"bytes":3885,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/custom/GeoPointInput.tsx":{"bytes":5782,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/translations.ts","kind":"import-statement","original":"../../../translations"},{"path":"packages/ui/react-ui-form/src/components/Form/Input.tsx","kind":"import-statement","original":"../Input"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/custom/TupleInput.tsx":{"bytes":5323,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/components/Form/Input.tsx","kind":"import-statement","original":"../Input"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/custom/index.ts":{"bytes":627,"imports":[{"path":"packages/ui/react-ui-form/src/components/Form/custom/GeoPointInput.tsx","kind":"import-statement","original":"./GeoPointInput"},{"path":"packages/ui/react-ui-form/src/components/Form/custom/TupleInput.tsx","kind":"import-statement","original":"./TupleInput"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/Defaults.tsx":{"bytes":13248,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/components/Form/Input.tsx","kind":"import-statement","original":"./Input"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/factory.tsx":{"bytes":2489,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/components/Form/Defaults.tsx","kind":"import-statement","original":"./Defaults"},{"path":"packages/ui/react-ui-form/src/components/Form/custom/index.ts","kind":"import-statement","original":"./custom"}],"format":"esm"},"packages/ui/react-ui-form/src/hooks/useForm.ts":{"bytes":20874,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-form/src/hooks/index.ts":{"bytes":502,"imports":[{"path":"packages/ui/react-ui-form/src/hooks/useForm.ts","kind":"import-statement","original":"./useForm"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/Form.tsx":{"bytes":40645,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"effect/String","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/effect","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/components/Form/Defaults.tsx","kind":"import-statement","original":"./Defaults"},{"path":"packages/ui/react-ui-form/src/components/Form/Input.tsx","kind":"import-statement","original":"./Input"},{"path":"packages/ui/react-ui-form/src/components/Form/factory.tsx","kind":"import-statement","original":"./factory"},{"path":"packages/ui/react-ui-form/src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"path":"packages/ui/react-ui-form/src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/index.ts":{"bytes":764,"imports":[{"path":"packages/ui/react-ui-form/src/components/Form/custom/index.ts","kind":"import-statement","original":"./custom"},{"path":"packages/ui/react-ui-form/src/components/Form/Defaults.tsx","kind":"import-statement","original":"./Defaults"},{"path":"packages/ui/react-ui-form/src/components/Form/Form.tsx","kind":"import-statement","original":"./Form"},{"path":"packages/ui/react-ui-form/src/components/Form/Input.tsx","kind":"import-statement","original":"./Input"}],"format":"esm"},"packages/ui/react-ui-form/src/components/FieldEditor/FieldEditor.tsx":{"bytes":18958,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/translations.ts","kind":"import-statement","original":"../../translations"},{"path":"packages/ui/react-ui-form/src/components/Form/index.ts","kind":"import-statement","original":"../Form"}],"format":"esm"},"packages/ui/react-ui-form/src/components/FieldEditor/index.ts":{"bytes":531,"imports":[{"path":"packages/ui/react-ui-form/src/components/FieldEditor/FieldEditor.tsx","kind":"import-statement","original":"./FieldEditor"}],"format":"esm"},"packages/ui/react-ui-form/src/components/ViewEditor/ViewEditor.tsx":{"bytes":16944,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-list","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/translations.ts","kind":"import-statement","original":"../../translations"},{"path":"packages/ui/react-ui-form/src/components/FieldEditor/index.ts","kind":"import-statement","original":"../FieldEditor"},{"path":"packages/ui/react-ui-form/src/components/Form/index.ts","kind":"import-statement","original":"../Form"}],"format":"esm"},"packages/ui/react-ui-form/src/components/ViewEditor/index.ts":{"bytes":525,"imports":[{"path":"packages/ui/react-ui-form/src/components/ViewEditor/ViewEditor.tsx","kind":"import-statement","original":"./ViewEditor"}],"format":"esm"},"packages/ui/react-ui-form/src/components/index.ts":{"bytes":787,"imports":[{"path":"packages/ui/react-ui-form/src/components/deprecated/index.ts","kind":"import-statement","original":"./deprecated"},{"path":"packages/ui/react-ui-form/src/components/FieldEditor/index.ts","kind":"import-statement","original":"./FieldEditor"},{"path":"packages/ui/react-ui-form/src/components/Form/index.ts","kind":"import-statement","original":"./Form"},{"path":"packages/ui/react-ui-form/src/components/ViewEditor/index.ts","kind":"import-statement","original":"./ViewEditor"}],"format":"esm"},"packages/ui/react-ui-form/src/util/field.ts":{"bytes":12238,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-form/src/util/formatting.ts":{"bytes":12559,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-form/src/util/index.ts":{"bytes":589,"imports":[{"path":"packages/ui/react-ui-form/src/util/field.ts","kind":"import-statement","original":"./field"},{"path":"packages/ui/react-ui-form/src/util/formatting.ts","kind":"import-statement","original":"./formatting"}],"format":"esm"},"packages/ui/react-ui-form/src/index.ts":{"bytes":916,"imports":[{"path":"packages/ui/react-ui-form/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/ui/react-ui-form/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-form/src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-form/src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-form/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":83179},"packages/ui/react-ui-form/dist/lib/node/index.cjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"effect/String","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/effect","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-list","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["BooleanInput","DeprecatedFormInput","FieldEditor","Form","FormActions","GeoPointInput","InputHeader","NumberInput","SelectInput","TextInput","TupleInput","ViewEditor","cellClassesForFieldType","cellClassesForRowSelection","formatForDisplay","formatForEditing","parseValue","pathNotUniqueError","translations","useForm"],"entryPoint":"packages/ui/react-ui-form/src/index.ts","inputs":{"packages/ui/react-ui-form/src/translations.ts":{"bytesInOutput":1666},"packages/ui/react-ui-form/src/components/deprecated/FormInput.tsx":{"bytesInOutput":1121},"packages/ui/react-ui-form/src/components/deprecated/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/FieldEditor/FieldEditor.tsx":{"bytesInOutput":4356},"packages/ui/react-ui-form/src/components/Form/custom/GeoPointInput.tsx":{"bytesInOutput":1314},"packages/ui/react-ui-form/src/components/Form/Input.tsx":{"bytesInOutput":737},"packages/ui/react-ui-form/src/components/Form/custom/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/Form/custom/TupleInput.tsx":{"bytesInOutput":1144},"packages/ui/react-ui-form/src/components/Form/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/Form/Defaults.tsx":{"bytesInOutput":3519},"packages/ui/react-ui-form/src/components/Form/Form.tsx":{"bytesInOutput":9979},"packages/ui/react-ui-form/src/components/Form/factory.tsx":{"bytesInOutput":332},"packages/ui/react-ui-form/src/hooks/useForm.ts":{"bytesInOutput":3894},"packages/ui/react-ui-form/src/hooks/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/FieldEditor/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/ViewEditor/ViewEditor.tsx":{"bytesInOutput":4312},"packages/ui/react-ui-form/src/components/ViewEditor/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/util/field.ts":{"bytesInOutput":2809},"packages/ui/react-ui-form/src/util/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/util/formatting.ts":{"bytesInOutput":2779}},"bytes":39385}}}
|
|
1
|
+
{"inputs":{"packages/ui/react-ui-form/src/translations.ts":{"bytes":5683,"imports":[],"format":"esm"},"packages/ui/react-ui-form/src/components/deprecated/FormInput.tsx":{"bytes":4795,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-form/src/components/deprecated/index.ts":{"bytes":520,"imports":[{"path":"packages/ui/react-ui-form/src/components/deprecated/FormInput.tsx","kind":"import-statement","original":"./FormInput"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/Input.tsx":{"bytes":3885,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/custom/GeoPointInput.tsx":{"bytes":5782,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/translations.ts","kind":"import-statement","original":"../../../translations"},{"path":"packages/ui/react-ui-form/src/components/Form/Input.tsx","kind":"import-statement","original":"../Input"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/custom/TupleInput.tsx":{"bytes":5323,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/components/Form/Input.tsx","kind":"import-statement","original":"../Input"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/custom/index.ts":{"bytes":627,"imports":[{"path":"packages/ui/react-ui-form/src/components/Form/custom/GeoPointInput.tsx","kind":"import-statement","original":"./GeoPointInput"},{"path":"packages/ui/react-ui-form/src/components/Form/custom/TupleInput.tsx","kind":"import-statement","original":"./TupleInput"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/Defaults.tsx":{"bytes":13248,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/components/Form/Input.tsx","kind":"import-statement","original":"./Input"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/factory.tsx":{"bytes":2489,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/components/Form/Defaults.tsx","kind":"import-statement","original":"./Defaults"},{"path":"packages/ui/react-ui-form/src/components/Form/custom/index.ts","kind":"import-statement","original":"./custom"}],"format":"esm"},"packages/ui/react-ui-form/src/hooks/useForm.ts":{"bytes":20874,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-form/src/hooks/index.ts":{"bytes":502,"imports":[{"path":"packages/ui/react-ui-form/src/hooks/useForm.ts","kind":"import-statement","original":"./useForm"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/Form.tsx":{"bytes":42773,"imports":[{"path":"effect","kind":"import-statement","external":true},{"path":"effect/String","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/effect","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/components/Form/Defaults.tsx","kind":"import-statement","original":"./Defaults"},{"path":"packages/ui/react-ui-form/src/components/Form/Input.tsx","kind":"import-statement","original":"./Input"},{"path":"packages/ui/react-ui-form/src/components/Form/factory.tsx","kind":"import-statement","original":"./factory"},{"path":"packages/ui/react-ui-form/src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"path":"packages/ui/react-ui-form/src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"packages/ui/react-ui-form/src/components/Form/index.ts":{"bytes":764,"imports":[{"path":"packages/ui/react-ui-form/src/components/Form/custom/index.ts","kind":"import-statement","original":"./custom"},{"path":"packages/ui/react-ui-form/src/components/Form/Defaults.tsx","kind":"import-statement","original":"./Defaults"},{"path":"packages/ui/react-ui-form/src/components/Form/Form.tsx","kind":"import-statement","original":"./Form"},{"path":"packages/ui/react-ui-form/src/components/Form/Input.tsx","kind":"import-statement","original":"./Input"}],"format":"esm"},"packages/ui/react-ui-form/src/components/FieldEditor/FieldEditor.tsx":{"bytes":20284,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/translations.ts","kind":"import-statement","original":"../../translations"},{"path":"packages/ui/react-ui-form/src/components/Form/index.ts","kind":"import-statement","original":"../Form"}],"format":"esm"},"packages/ui/react-ui-form/src/components/FieldEditor/index.ts":{"bytes":531,"imports":[{"path":"packages/ui/react-ui-form/src/components/FieldEditor/FieldEditor.tsx","kind":"import-statement","original":"./FieldEditor"}],"format":"esm"},"packages/ui/react-ui-form/src/components/ViewEditor/ViewEditor.tsx":{"bytes":17372,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-list","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-form/src/translations.ts","kind":"import-statement","original":"../../translations"},{"path":"packages/ui/react-ui-form/src/components/FieldEditor/index.ts","kind":"import-statement","original":"../FieldEditor"},{"path":"packages/ui/react-ui-form/src/components/Form/index.ts","kind":"import-statement","original":"../Form"}],"format":"esm"},"packages/ui/react-ui-form/src/components/ViewEditor/index.ts":{"bytes":525,"imports":[{"path":"packages/ui/react-ui-form/src/components/ViewEditor/ViewEditor.tsx","kind":"import-statement","original":"./ViewEditor"}],"format":"esm"},"packages/ui/react-ui-form/src/components/index.ts":{"bytes":787,"imports":[{"path":"packages/ui/react-ui-form/src/components/deprecated/index.ts","kind":"import-statement","original":"./deprecated"},{"path":"packages/ui/react-ui-form/src/components/FieldEditor/index.ts","kind":"import-statement","original":"./FieldEditor"},{"path":"packages/ui/react-ui-form/src/components/Form/index.ts","kind":"import-statement","original":"./Form"},{"path":"packages/ui/react-ui-form/src/components/ViewEditor/index.ts","kind":"import-statement","original":"./ViewEditor"}],"format":"esm"},"packages/ui/react-ui-form/src/util/field.ts":{"bytes":12238,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-form/src/util/formatting.ts":{"bytes":12559,"imports":[{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-form/src/util/index.ts":{"bytes":589,"imports":[{"path":"packages/ui/react-ui-form/src/util/field.ts","kind":"import-statement","original":"./field"},{"path":"packages/ui/react-ui-form/src/util/formatting.ts","kind":"import-statement","original":"./formatting"}],"format":"esm"},"packages/ui/react-ui-form/src/index.ts":{"bytes":916,"imports":[{"path":"packages/ui/react-ui-form/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/ui/react-ui-form/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-form/src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-form/src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-form/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":85240},"packages/ui/react-ui-form/dist/lib/node/index.cjs":{"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"effect","kind":"import-statement","external":true},{"path":"effect/String","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/effect","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-list","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/schema","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true},{"path":"@dxos/echo-schema","kind":"import-statement","external":true}],"exports":["BooleanInput","DeprecatedFormInput","FieldEditor","Form","FormActions","GeoPointInput","InputHeader","NumberInput","SelectInput","TextInput","TupleInput","ViewEditor","cellClassesForFieldType","cellClassesForRowSelection","formatForDisplay","formatForEditing","parseValue","pathNotUniqueError","translations","useForm"],"entryPoint":"packages/ui/react-ui-form/src/index.ts","inputs":{"packages/ui/react-ui-form/src/translations.ts":{"bytesInOutput":1666},"packages/ui/react-ui-form/src/components/deprecated/FormInput.tsx":{"bytesInOutput":1121},"packages/ui/react-ui-form/src/components/deprecated/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/FieldEditor/FieldEditor.tsx":{"bytesInOutput":4646},"packages/ui/react-ui-form/src/components/Form/custom/GeoPointInput.tsx":{"bytesInOutput":1314},"packages/ui/react-ui-form/src/components/Form/Input.tsx":{"bytesInOutput":737},"packages/ui/react-ui-form/src/components/Form/custom/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/Form/custom/TupleInput.tsx":{"bytesInOutput":1144},"packages/ui/react-ui-form/src/components/Form/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/Form/Defaults.tsx":{"bytesInOutput":3519},"packages/ui/react-ui-form/src/components/Form/Form.tsx":{"bytesInOutput":10450},"packages/ui/react-ui-form/src/components/Form/factory.tsx":{"bytesInOutput":332},"packages/ui/react-ui-form/src/hooks/useForm.ts":{"bytesInOutput":3894},"packages/ui/react-ui-form/src/hooks/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/FieldEditor/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/components/ViewEditor/ViewEditor.tsx":{"bytesInOutput":4410},"packages/ui/react-ui-form/src/components/ViewEditor/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/util/field.ts":{"bytesInOutput":2809},"packages/ui/react-ui-form/src/util/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-form/src/util/formatting.ts":{"bytesInOutput":2779}},"bytes":40244}}}
|