@tachybase/plugin-form-design 1.3.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1 -0
  3. package/client.d.ts +2 -0
  4. package/client.js +1 -0
  5. package/dist/client/constants.d.ts +3 -0
  6. package/dist/client/contexts/EditableSchemaSettingsContext.d.ts +7 -0
  7. package/dist/client/editable-schema-settings/EditableSchemaSettings.d.ts +10 -0
  8. package/dist/client/editable-schema-settings/EditableSchemaSettingsManager.d.ts +23 -0
  9. package/dist/client/editable-schema-settings/index.d.ts +3 -0
  10. package/dist/client/editable-schema-settings/types.d.ts +24 -0
  11. package/dist/client/fields/components/cascadeSelectComponentFieldEditableSettings.d.ts +2 -0
  12. package/dist/client/fields/components/cascaderComponentFieldEditableSettings.d.ts +2 -0
  13. package/dist/client/fields/components/checkboxComponentFieldEditableSettings.d.ts +2 -0
  14. package/dist/client/fields/components/customTitleComponentFieldEditableSettings.d.ts +2 -0
  15. package/dist/client/fields/components/datePickerComponentFieldEditableSettings.d.ts +2 -0
  16. package/dist/client/fields/components/drawerSubTableComponentFieldEditableSettings.d.ts +2 -0
  17. package/dist/client/fields/components/fileManagerComponentFieldEditableSettings.d.ts +2 -0
  18. package/dist/client/fields/components/index.d.ts +15 -0
  19. package/dist/client/fields/components/inputNumberComponentFieldEditableSettings.d.ts +2 -0
  20. package/dist/client/fields/components/radioComponentFieldEditableSettings.d.ts +2 -0
  21. package/dist/client/fields/components/recordPickerComponentFieldEditableSettings.d.ts +2 -0
  22. package/dist/client/fields/components/selectComponentFieldEditableSettings.d.ts +2 -0
  23. package/dist/client/fields/components/subTablePopoverComponentFieldEditableSettings.d.ts +2 -0
  24. package/dist/client/fields/components/subformComponentFieldEditableSettings.d.ts +2 -0
  25. package/dist/client/fields/components/subformPopoverComponentFieldEditableSettings.d.ts +2 -0
  26. package/dist/client/fields/components/tagComponentFieldEditableSettings.d.ts +2 -0
  27. package/dist/client/fields/components/unixTimestampComponentFieldEditableSettings.d.ts +2 -0
  28. package/dist/client/fields/components/uploadAttachmentComponentFieldEditableSettings.d.ts +2 -0
  29. package/dist/client/icons/AddFields.d.ts +1 -0
  30. package/dist/client/icons/index.d.ts +1 -0
  31. package/dist/client/index.d.ts +1 -0
  32. package/dist/client/index.js +194 -0
  33. package/dist/client/initializers/EditableDataBlockInitializer.d.ts +2 -0
  34. package/dist/client/initializers/EditableFormBlockInitialzer.d.ts +152 -0
  35. package/dist/client/initializers/FormDesignModalProvider.d.ts +3 -0
  36. package/dist/client/initializers/components/form-editor/EditableDesignable.d.ts +94 -0
  37. package/dist/client/initializers/components/form-editor/EditableDndContext.d.ts +2 -0
  38. package/dist/client/initializers/components/form-editor/EditableFormItemSchemaToolbar.d.ts +4 -0
  39. package/dist/client/initializers/components/form-editor/EditableFormSchemaToolbar.d.ts +1 -0
  40. package/dist/client/initializers/components/form-editor/EditableGrid.d.ts +1 -0
  41. package/dist/client/initializers/components/form-editor/EditableGrid.style.d.ts +4 -0
  42. package/dist/client/initializers/components/form-editor/EditableSelectedFieldContext.d.ts +19 -0
  43. package/dist/client/initializers/components/form-editor/EditableSelectedFormContent.d.ts +19 -0
  44. package/dist/client/initializers/components/form-editor/EditorContent.d.ts +6 -0
  45. package/dist/client/initializers/components/form-editor/EditorFieldFormProperty.d.ts +5 -0
  46. package/dist/client/initializers/components/form-editor/EditorFieldsSider.d.ts +5 -0
  47. package/dist/client/initializers/components/form-editor/EditorHeader.d.ts +4 -0
  48. package/dist/client/initializers/components/form-editor/FormSchemaEditor.d.ts +15 -0
  49. package/dist/client/initializers/components/form-editor/createFormBlockEditableSettings.d.ts +2 -0
  50. package/dist/client/initializers/components/form-editor/fieldsInterfaceEditableSettings.d.ts +3 -0
  51. package/dist/client/initializers/components/form-editor/formItemFieldEditableSettings.d.ts +18 -0
  52. package/dist/client/initializers/components/form-editor/index.d.ts +4 -0
  53. package/dist/client/initializers/components/form-editor/interfaceSchemaOptions.d.ts +2153 -0
  54. package/dist/client/initializers/components/form-editor/styles.d.ts +61 -0
  55. package/dist/client/initializers/components/schemaSetting/openFormEditablePage.d.ts +1 -0
  56. package/dist/client/initializers/constants/systemFields.d.ts +59 -0
  57. package/dist/client/initializers/contexts/FormDesign.d.ts +8 -0
  58. package/dist/client/initializers/contexts/PageRefresh.d.ts +4 -0
  59. package/dist/client/initializers/contexts/PageRefreshContext.d.ts +10 -0
  60. package/dist/client/initializers/formDesignInitializerItem.d.ts +2 -0
  61. package/dist/client/locale.d.ts +5 -0
  62. package/dist/client/plugin.d.ts +10 -0
  63. package/dist/client/schema-settings/openEditablePage.d.ts +7 -0
  64. package/dist/externalVersion.js +13 -0
  65. package/dist/index.d.ts +2 -0
  66. package/dist/index.js +39 -0
  67. package/dist/locale/en-US.json +13 -0
  68. package/dist/locale/zh-CN.json +13 -0
  69. package/dist/server/index.d.ts +1 -0
  70. package/dist/server/index.js +33 -0
  71. package/dist/server/plugin.d.ts +11 -0
  72. package/dist/server/plugin.js +45 -0
  73. package/package.json +25 -0
  74. package/server.d.ts +2 -0
  75. package/server.js +1 -0
@@ -0,0 +1,2 @@
1
+ import { DataBlockInitializerProps } from '@tachybase/client';
2
+ export declare const EditableDataBlockInitializer: (props: DataBlockInitializerProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,152 @@
1
+ import { Collection, CollectionFieldOptions } from '@tachybase/client';
2
+ export declare const EditableFormBlockInitializer: ({ filterCollections, onlyCurrentDataSource, hideSearch, createBlockSchema, componentType, templateWrap: customizeTemplateWrap, showAssociationFields, hideChildrenIfSingleCollection, hideOtherRecordsInPopup, currentText, otherText, }: {
3
+ filterCollections: (options: {
4
+ collection?: Collection;
5
+ associationField?: CollectionFieldOptions;
6
+ }) => boolean;
7
+ onlyCurrentDataSource: boolean;
8
+ hideSearch?: boolean;
9
+ createBlockSchema?: (options: any) => any;
10
+ componentType?: "FormItem";
11
+ templateWrap?: (templateSchema: any, { item, }: {
12
+ item: any;
13
+ }) => any;
14
+ showAssociationFields?: boolean;
15
+ hideChildrenIfSingleCollection?: boolean;
16
+ hideOtherRecordsInPopup?: boolean;
17
+ currentText?: string;
18
+ otherText?: string;
19
+ }) => import("react/jsx-runtime").JSX.Element;
20
+ export declare const useCreateEditableFormBlock: () => {
21
+ templateWrap: (templateSchema: any, { item }: {
22
+ item: any;
23
+ }) => import("@tachybase/schema").Stringify<{
24
+ [key: symbol]: any;
25
+ [key: `x-${string}`]: any;
26
+ [key: `x-${number}`]: any;
27
+ version?: string;
28
+ name?: import("@tachybase/schema").SchemaKey;
29
+ title?: any;
30
+ description?: any;
31
+ default?: any;
32
+ readOnly?: boolean;
33
+ writeOnly?: boolean;
34
+ type?: import("@tachybase/schema").SchemaTypes;
35
+ enum?: import("@tachybase/schema").SchemaEnum<any>;
36
+ const?: any;
37
+ multipleOf?: number;
38
+ maximum?: number;
39
+ exclusiveMaximum?: number;
40
+ minimum?: number;
41
+ exclusiveMinimum?: number;
42
+ maxLength?: number;
43
+ minLength?: number;
44
+ pattern?: string | RegExp;
45
+ maxItems?: number;
46
+ minItems?: number;
47
+ uniqueItems?: boolean;
48
+ maxProperties?: number;
49
+ minProperties?: number;
50
+ required?: string[] | boolean | string;
51
+ format?: string;
52
+ $ref?: string;
53
+ $namespace?: string;
54
+ definitions?: import("@tachybase/schema").SchemaProperties<any, any, any, any, any, any, any, any>;
55
+ properties?: import("@tachybase/schema").SchemaProperties<any, any, any, any, any, any, any, any>;
56
+ items?: import("@tachybase/schema").SchemaItems<any, any, any, any, any, any, any, any>;
57
+ additionalItems?: import("@tachybase/schema").Stringify</*elided*/ any>;
58
+ patternProperties?: import("@tachybase/schema").SchemaProperties<any, any, any, any, any, any, any, any>;
59
+ additionalProperties?: import("@tachybase/schema").Stringify</*elided*/ any>;
60
+ "x-value"?: any;
61
+ "x-index"?: number;
62
+ "x-pattern"?: any;
63
+ "x-display"?: any;
64
+ "x-validator"?: any;
65
+ "x-decorator"?: any;
66
+ "x-decorator-props"?: any;
67
+ "x-component"?: any;
68
+ "x-component-props"?: any;
69
+ "x-reactions"?: import("@tachybase/schema").SchemaReactions<any>;
70
+ "x-content"?: any;
71
+ "x-data"?: any;
72
+ "x-visible"?: boolean;
73
+ "x-hidden"?: boolean;
74
+ "x-disabled"?: boolean;
75
+ "x-editable"?: boolean;
76
+ "x-read-only"?: boolean;
77
+ "x-read-pretty"?: boolean;
78
+ "x-compile-omitted"?: string[];
79
+ }>;
80
+ createEditFormBlock: ({ item, fromOthersInPopup }: {
81
+ item: any;
82
+ fromOthersInPopup: any;
83
+ }) => {
84
+ type: string;
85
+ 'x-component': string;
86
+ properties: {
87
+ [x: string]: {
88
+ type: string;
89
+ 'x-component': string;
90
+ properties: {
91
+ [x: string]: import("@tachybase/schema").Stringify<{
92
+ [key: symbol]: any;
93
+ [key: `x-${string}`]: any;
94
+ [key: `x-${number}`]: any;
95
+ version?: string;
96
+ name?: import("@tachybase/schema").SchemaKey;
97
+ title?: any;
98
+ description?: any;
99
+ default?: any;
100
+ readOnly?: boolean;
101
+ writeOnly?: boolean;
102
+ type?: import("@tachybase/schema").SchemaTypes;
103
+ enum?: import("@tachybase/schema").SchemaEnum<any>;
104
+ const?: any;
105
+ multipleOf?: number;
106
+ maximum?: number;
107
+ exclusiveMaximum?: number;
108
+ minimum?: number;
109
+ exclusiveMinimum?: number;
110
+ maxLength?: number;
111
+ minLength?: number;
112
+ pattern?: string | RegExp;
113
+ maxItems?: number;
114
+ minItems?: number;
115
+ uniqueItems?: boolean;
116
+ maxProperties?: number;
117
+ minProperties?: number;
118
+ required?: string[] | boolean | string;
119
+ format?: string;
120
+ $ref?: string;
121
+ $namespace?: string;
122
+ definitions?: import("@tachybase/schema").SchemaProperties<any, any, any, any, any, any, any, any>;
123
+ properties?: import("@tachybase/schema").SchemaProperties<any, any, any, any, any, any, any, any>;
124
+ items?: import("@tachybase/schema").SchemaItems<any, any, any, any, any, any, any, any>;
125
+ additionalItems?: import("@tachybase/schema").Stringify</*elided*/ any>;
126
+ patternProperties?: import("@tachybase/schema").SchemaProperties<any, any, any, any, any, any, any, any>;
127
+ additionalProperties?: import("@tachybase/schema").Stringify</*elided*/ any>;
128
+ "x-value"?: any;
129
+ "x-index"?: number;
130
+ "x-pattern"?: any;
131
+ "x-display"?: any;
132
+ "x-validator"?: any;
133
+ "x-decorator"?: any;
134
+ "x-decorator-props"?: any;
135
+ "x-component"?: any;
136
+ "x-component-props"?: any;
137
+ "x-reactions"?: import("@tachybase/schema").SchemaReactions<any>;
138
+ "x-content"?: any;
139
+ "x-data"?: any;
140
+ "x-visible"?: boolean;
141
+ "x-hidden"?: boolean;
142
+ "x-disabled"?: boolean;
143
+ "x-editable"?: boolean;
144
+ "x-read-only"?: boolean;
145
+ "x-read-pretty"?: boolean;
146
+ "x-compile-omitted"?: string[];
147
+ }>;
148
+ };
149
+ };
150
+ };
151
+ };
152
+ };
@@ -0,0 +1,3 @@
1
+ export declare const FormDesignModalProvider: (props: {
2
+ children: React.ReactNode;
3
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,94 @@
1
+ import { APIClient } from '@tachybase/client';
2
+ import { GeneralField, ISchema, Query, Schema } from '@tachybase/schema';
3
+ interface CreateDesignableProps {
4
+ current: Schema;
5
+ model?: GeneralField;
6
+ query?: Query;
7
+ api?: APIClient;
8
+ refresh?: () => void;
9
+ onSuccess?: any;
10
+ t?: any;
11
+ }
12
+ export declare function createEditableDesignable(options: CreateDesignableProps): EditableDesignable;
13
+ /**
14
+ *
15
+ */
16
+ type Position = 'beforeBegin' | 'afterBegin' | 'beforeEnd' | 'afterEnd';
17
+ interface InsertAdjacentOptions {
18
+ wrap?: (s: ISchema) => ISchema;
19
+ removeParentsIfNoChildren?: boolean;
20
+ breakRemoveOn?: ISchema | BreakFn;
21
+ onSuccess?: any;
22
+ }
23
+ type BreakFn = (s: ISchema) => boolean;
24
+ interface RemoveOptions {
25
+ removeParentsIfNoChildren?: boolean;
26
+ breakRemoveOn?: ISchema | BreakFn;
27
+ }
28
+ interface RecursiveRemoveOptions {
29
+ breakRemoveOn?: ISchema | BreakFn;
30
+ }
31
+ declare class EditableDesignable {
32
+ current: Schema;
33
+ options: CreateDesignableProps;
34
+ events: {};
35
+ constructor(options: CreateDesignableProps);
36
+ get model(): GeneralField;
37
+ get query(): Query;
38
+ loadClientSchemaEvents(): void;
39
+ prepareProperty(schema: ISchema): void;
40
+ on(name: 'insertAdjacent' | 'remove' | 'error' | 'patch' | 'batchPatch', listener: any): void;
41
+ emit(name: 'insertAdjacent' | 'remove' | 'error' | 'patch' | 'batchPatch', ...args: any[]): Promise<any>;
42
+ parentsIn(schema: Schema): boolean;
43
+ refresh(): void;
44
+ deepMerge(schema: ISchema): void;
45
+ getSchemaAttribute(key: string | string[], defaultValue?: any): any;
46
+ shallowMerge(schema: ISchema): void;
47
+ updateModel(key: any, value: any): void;
48
+ insertAdjacent(position: Position, schema: ISchema, options?: InsertAdjacentOptions): void;
49
+ recursiveRemoveIfNoChildren(schema?: Schema, options?: RecursiveRemoveOptions): Schema<any, any, any, any, any, any, any, any, any>;
50
+ remove(schema?: Schema, options?: RemoveOptions): void;
51
+ removeWithoutEmit(schema?: Schema, options?: RemoveOptions): Schema<any, any, any, any, any, any, any, any, any>;
52
+ insertBeforeBeginOrAfterEnd(schema: ISchema, options?: InsertAdjacentOptions): void;
53
+ /**
54
+ * Before the current schema itself.
55
+ */
56
+ insertBeforeBegin(schema: ISchema, options?: InsertAdjacentOptions): void;
57
+ /**
58
+ * Just inside the current schema, before its first child.
59
+ *
60
+ * @param schema
61
+ * @returns
62
+ */
63
+ insertAfterBegin(schema: ISchema, options?: InsertAdjacentOptions): void;
64
+ /**
65
+ * Just inside the targetElement, after its last child.
66
+ *
67
+ * @param schema
68
+ * @returns
69
+ */
70
+ insertBeforeEnd(schema: ISchema, options?: InsertAdjacentOptions): void;
71
+ /**
72
+ * After the current schema itself.
73
+ */
74
+ insertAfterEnd(schema: ISchema, options?: InsertAdjacentOptions): void;
75
+ }
76
+ export declare function useEditableDesignable(): {
77
+ dn: EditableDesignable;
78
+ designable: boolean;
79
+ reset: () => void;
80
+ refresh: () => void;
81
+ setDesignable: (value: boolean) => void;
82
+ DesignableBar: () => import("react/jsx-runtime").JSX.Element;
83
+ findComponent: (component: any) => any;
84
+ patch: (key: ISchema | string, value?: any) => void;
85
+ shallowMerge: (schema: ISchema) => void;
86
+ deepMerge: (schema: ISchema) => void;
87
+ remove: (schema?: any, options?: RemoveOptions) => void;
88
+ insertAdjacent: (position: Position, schema: ISchema, options?: InsertAdjacentOptions) => void;
89
+ insertBeforeBegin: (schema: ISchema) => void;
90
+ insertAfterBegin: (schema: ISchema) => void;
91
+ insertBeforeEnd: (schema: ISchema) => void;
92
+ insertAfterEnd: (schema: ISchema) => void;
93
+ };
94
+ export {};
@@ -0,0 +1,2 @@
1
+ import { Props } from '@dnd-kit/core/dist/components/DndContext/DndContext';
2
+ export declare const EditableGridDndContext: import("react").MemoExoticComponent<import("@tachybase/schema").ReactFC<Props>>;
@@ -0,0 +1,4 @@
1
+ import { FC } from 'react';
2
+ import { SchemaToolbarProps } from '@tachybase/client';
3
+ export declare const EditableFormItemSchemaToolbar: (props: any) => import("react/jsx-runtime").JSX.Element;
4
+ export declare const EditableSchemaToolbar: FC<SchemaToolbarProps>;
@@ -0,0 +1 @@
1
+ export declare const EditableFormToolbar: () => any;
@@ -0,0 +1 @@
1
+ export declare const EditableGrid: any;
@@ -0,0 +1,4 @@
1
+ declare const useStyles: (props?: unknown) => import("antd-style").ReturnStyles<{
2
+ editableGrid: import("antd-style").SerializedStyles;
3
+ }>;
4
+ export default useStyles;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { Form, GeneralField, ISchemaFieldReactFactoryOptions, Schema, SchemaReactComponents } from '@tachybase/schema';
3
+ interface EditableFieldInfo {
4
+ field: GeneralField | null;
5
+ fieldSchema: Schema | null;
6
+ schemaMarkup: Schema | null;
7
+ expressionScope: any;
8
+ schemaComponents: SchemaReactComponents | null;
9
+ schemaOptions: ISchemaFieldReactFactoryOptions | null;
10
+ form: Form | null;
11
+ formBlockValue: any;
12
+ setEditableField: (info: EditableFieldInfoPartial) => void;
13
+ }
14
+ type EditableFieldInfoPartial = Partial<Omit<EditableFieldInfo, 'setEditableField'>>;
15
+ export declare const EditableSelectedFieldProvider: React.FC<{
16
+ children: React.ReactNode;
17
+ }>;
18
+ export declare const useEditableSelectedField: () => EditableFieldInfo;
19
+ export {};
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { Form, GeneralField, ISchemaFieldReactFactoryOptions, Schema, SchemaReactComponents } from '@tachybase/schema';
3
+ interface EditableFormInfo {
4
+ field: GeneralField | null;
5
+ fieldSchema: Schema | null;
6
+ schemaMarkup: Schema | null;
7
+ expressionScope: any;
8
+ schemaComponents: SchemaReactComponents | null;
9
+ schemaOptions: ISchemaFieldReactFactoryOptions | null;
10
+ form: Form | null;
11
+ formBlockValue: any;
12
+ setEditableForm: (info: EditableFormInfoPartial) => void;
13
+ }
14
+ type EditableFormInfoPartial = Partial<Omit<EditableFormInfo, 'setEditableForm'>>;
15
+ export declare const EditableSelectedFormProvider: React.FC<{
16
+ children: React.ReactNode;
17
+ }>;
18
+ export declare const useEditableSelectedForm: () => EditableFormInfo;
19
+ export {};
@@ -0,0 +1,6 @@
1
+ import { Schema } from '@tachybase/schema';
2
+ interface EditorContentProps {
3
+ schema: Schema;
4
+ }
5
+ export declare const EditorContent: import("react").MemoExoticComponent<import("@tachybase/schema").ReactFC<EditorContentProps>>;
6
+ export {};
@@ -0,0 +1,5 @@
1
+ export declare const EditorFieldFormProperty: ({ schema, setSchemakey, eddn }: {
2
+ schema: any;
3
+ setSchemakey: any;
4
+ eddn: any;
5
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ export declare const EditorFieldsSider: ({ schema, setSchemakey, eddn }: {
2
+ schema: any;
3
+ setSchemakey: any;
4
+ eddn: any;
5
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,4 @@
1
+ export declare const EditorHeader: ({ onCancel, schema }: {
2
+ onCancel: any;
3
+ schema: any;
4
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,15 @@
1
+ import { ISchema } from '@tachybase/schema';
2
+ interface CreateFormBlockUISchemaOptions {
3
+ dataSource: string;
4
+ collectionName?: string;
5
+ association?: string;
6
+ templateSchema?: ISchema;
7
+ isCusomeizeCreate?: boolean;
8
+ }
9
+ export declare const FormSchemaEditor: ({ open, onCancel, options }: {
10
+ open: any;
11
+ onCancel: any;
12
+ options: any;
13
+ }) => import("react/jsx-runtime").JSX.Element;
14
+ export declare function createCreateFormEditUISchema(options: CreateFormBlockUISchemaOptions): ISchema;
15
+ export {};
@@ -0,0 +1,2 @@
1
+ import { EditableSchemaSettings } from '../../../editable-schema-settings/EditableSchemaSettings';
2
+ export declare const createFormBlockEditableSettings: EditableSchemaSettings<{}>;
@@ -0,0 +1,3 @@
1
+ import { EditableSchemaSettings } from '../../../editable-schema-settings/EditableSchemaSettings';
2
+ export declare const fieldInterfaceEditableSettings: EditableSchemaSettings<{}>;
3
+ export declare const SetCollectionFieldModalWrapper: (props: any) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,18 @@
1
+ import { Schema } from '@tachybase/schema';
2
+ import { EditableSchemaSettings } from '../../../editable-schema-settings/EditableSchemaSettings';
3
+ export interface FieldOption {
4
+ name?: string;
5
+ type?: string;
6
+ target?: string;
7
+ title?: string;
8
+ schema?: Schema;
9
+ interface?: string;
10
+ operators?: Operator[];
11
+ children?: FieldOption[];
12
+ }
13
+ interface Operator {
14
+ label: string;
15
+ value: string;
16
+ }
17
+ export declare const formItemFieldEditableSettings: EditableSchemaSettings<{}>;
18
+ export {};
@@ -0,0 +1,4 @@
1
+ export * from './FormSchemaEditor';
2
+ export * from './EditableFormSchemaToolbar';
3
+ export * from './EditableFormItemSchemaToolbar';
4
+ export * from './EditableSelectedFieldContext';