@tianyr/schema-antd 0.0.0-stage → 0.1.0

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 (135) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +158 -2
  3. package/dist/SchemaField.d.ts +15 -0
  4. package/dist/SchemaField.d.ts.map +1 -0
  5. package/dist/SchemaField.js +107 -0
  6. package/dist/SchemaField.js.map +1 -0
  7. package/dist/SchemaForm.d.ts +22 -0
  8. package/dist/SchemaForm.d.ts.map +1 -0
  9. package/dist/SchemaForm.js +19 -0
  10. package/dist/SchemaForm.js.map +1 -0
  11. package/dist/TableFooter.d.ts +38 -0
  12. package/dist/TableFooter.d.ts.map +1 -0
  13. package/dist/TableFooter.js +16 -0
  14. package/dist/TableFooter.js.map +1 -0
  15. package/dist/app-select/AppSelect.d.ts +3 -0
  16. package/dist/app-select/AppSelect.d.ts.map +1 -0
  17. package/dist/app-select/AppSelect.js +56 -0
  18. package/dist/app-select/AppSelect.js.map +1 -0
  19. package/dist/app-select/AppSelectDisplay.d.ts +3 -0
  20. package/dist/app-select/AppSelectDisplay.d.ts.map +1 -0
  21. package/dist/app-select/AppSelectDisplay.js +39 -0
  22. package/dist/app-select/AppSelectDisplay.js.map +1 -0
  23. package/dist/app-select/cache.d.ts +26 -0
  24. package/dist/app-select/cache.d.ts.map +1 -0
  25. package/dist/app-select/cache.js +82 -0
  26. package/dist/app-select/cache.js.map +1 -0
  27. package/dist/app-select/hooks.d.ts +56 -0
  28. package/dist/app-select/hooks.d.ts.map +1 -0
  29. package/dist/app-select/hooks.js +322 -0
  30. package/dist/app-select/hooks.js.map +1 -0
  31. package/dist/app-select/index.d.ts +7 -0
  32. package/dist/app-select/index.d.ts.map +1 -0
  33. package/dist/app-select/index.js +6 -0
  34. package/dist/app-select/index.js.map +1 -0
  35. package/dist/app-select/register.d.ts +2 -0
  36. package/dist/app-select/register.d.ts.map +1 -0
  37. package/dist/app-select/register.js +10 -0
  38. package/dist/app-select/register.js.map +1 -0
  39. package/dist/app-select/sources.d.ts +20 -0
  40. package/dist/app-select/sources.d.ts.map +1 -0
  41. package/dist/app-select/sources.js +59 -0
  42. package/dist/app-select/sources.js.map +1 -0
  43. package/dist/app-select/types.d.ts +68 -0
  44. package/dist/app-select/types.d.ts.map +1 -0
  45. package/dist/app-select/types.js +2 -0
  46. package/dist/app-select/types.js.map +1 -0
  47. package/dist/app-select/utils.d.ts +30 -0
  48. package/dist/app-select/utils.d.ts.map +1 -0
  49. package/dist/app-select/utils.js +76 -0
  50. package/dist/app-select/utils.js.map +1 -0
  51. package/dist/editable-table/EditableTable.d.ts +3 -0
  52. package/dist/editable-table/EditableTable.d.ts.map +1 -0
  53. package/dist/editable-table/EditableTable.js +499 -0
  54. package/dist/editable-table/EditableTable.js.map +1 -0
  55. package/dist/editable-table/dirty.d.ts +17 -0
  56. package/dist/editable-table/dirty.d.ts.map +1 -0
  57. package/dist/editable-table/dirty.js +72 -0
  58. package/dist/editable-table/dirty.js.map +1 -0
  59. package/dist/editable-table/index.d.ts +4 -0
  60. package/dist/editable-table/index.d.ts.map +1 -0
  61. package/dist/editable-table/index.js +3 -0
  62. package/dist/editable-table/index.js.map +1 -0
  63. package/dist/editable-table/types.d.ts +109 -0
  64. package/dist/editable-table/types.d.ts.map +1 -0
  65. package/dist/editable-table/types.js +2 -0
  66. package/dist/editable-table/types.js.map +1 -0
  67. package/dist/env.d.ts +3 -0
  68. package/dist/env.d.ts.map +1 -0
  69. package/dist/env.js +11 -0
  70. package/dist/env.js.map +1 -0
  71. package/dist/form/FormRuntimeHost.d.ts +39 -0
  72. package/dist/form/FormRuntimeHost.d.ts.map +1 -0
  73. package/dist/form/FormRuntimeHost.js +184 -0
  74. package/dist/form/FormRuntimeHost.js.map +1 -0
  75. package/dist/form/SchemaFormField.d.ts +15 -0
  76. package/dist/form/SchemaFormField.d.ts.map +1 -0
  77. package/dist/form/SchemaFormField.js +142 -0
  78. package/dist/form/SchemaFormField.js.map +1 -0
  79. package/dist/form/derive.d.ts +33 -0
  80. package/dist/form/derive.d.ts.map +1 -0
  81. package/dist/form/derive.js +59 -0
  82. package/dist/form/derive.js.map +1 -0
  83. package/dist/form/namePath.d.ts +12 -0
  84. package/dist/form/namePath.d.ts.map +1 -0
  85. package/dist/form/namePath.js +33 -0
  86. package/dist/form/namePath.js.map +1 -0
  87. package/dist/full-editable-table/EditableCell.d.ts +12 -0
  88. package/dist/full-editable-table/EditableCell.d.ts.map +1 -0
  89. package/dist/full-editable-table/EditableCell.js +8 -0
  90. package/dist/full-editable-table/EditableCell.js.map +1 -0
  91. package/dist/full-editable-table/EditableRow.d.ts +8 -0
  92. package/dist/full-editable-table/EditableRow.d.ts.map +1 -0
  93. package/dist/full-editable-table/EditableRow.js +23 -0
  94. package/dist/full-editable-table/EditableRow.js.map +1 -0
  95. package/dist/full-editable-table/FullEditableTable.d.ts +3 -0
  96. package/dist/full-editable-table/FullEditableTable.d.ts.map +1 -0
  97. package/dist/full-editable-table/FullEditableTable.js +384 -0
  98. package/dist/full-editable-table/FullEditableTable.js.map +1 -0
  99. package/dist/full-editable-table/context.d.ts +4 -0
  100. package/dist/full-editable-table/context.d.ts.map +1 -0
  101. package/dist/full-editable-table/context.js +6 -0
  102. package/dist/full-editable-table/context.js.map +1 -0
  103. package/dist/full-editable-table/index.d.ts +3 -0
  104. package/dist/full-editable-table/index.d.ts.map +1 -0
  105. package/dist/full-editable-table/index.js +2 -0
  106. package/dist/full-editable-table/index.js.map +1 -0
  107. package/dist/full-editable-table/types.d.ts +95 -0
  108. package/dist/full-editable-table/types.d.ts.map +1 -0
  109. package/dist/full-editable-table/types.js +2 -0
  110. package/dist/full-editable-table/types.js.map +1 -0
  111. package/dist/index.d.ts +19 -0
  112. package/dist/index.d.ts.map +1 -0
  113. package/dist/index.js +15 -0
  114. package/dist/index.js.map +1 -0
  115. package/dist/read.d.ts +14 -0
  116. package/dist/read.d.ts.map +1 -0
  117. package/dist/read.js +151 -0
  118. package/dist/read.js.map +1 -0
  119. package/dist/registry.d.ts +24 -0
  120. package/dist/registry.d.ts.map +1 -0
  121. package/dist/registry.js +49 -0
  122. package/dist/registry.js.map +1 -0
  123. package/dist/rowMerge.d.ts +2 -0
  124. package/dist/rowMerge.d.ts.map +1 -0
  125. package/dist/rowMerge.js +32 -0
  126. package/dist/rowMerge.js.map +1 -0
  127. package/dist/tableScroll.d.ts +10 -0
  128. package/dist/tableScroll.d.ts.map +1 -0
  129. package/dist/tableScroll.js +14 -0
  130. package/dist/tableScroll.js.map +1 -0
  131. package/dist/types.d.ts +128 -0
  132. package/dist/types.d.ts.map +1 -0
  133. package/dist/types.js +2 -0
  134. package/dist/types.js.map +1 -0
  135. package/package.json +60 -4
@@ -0,0 +1,59 @@
1
+ import { getNestedValue } from './namePath.js';
2
+ function resolveDerived(value, ctx, fallback) {
3
+ if (value === undefined)
4
+ return fallback;
5
+ return typeof value === 'function' ? value(ctx) : value;
6
+ }
7
+ function isRequiredRule(rule) {
8
+ return rule.required === true;
9
+ }
10
+ /** dynamic.required 必须形成真实校验,而不只是星号 */
11
+ function withRequired(rules, required, label) {
12
+ if (required) {
13
+ if (rules.some(isRequiredRule))
14
+ return rules;
15
+ const labelText = typeof label === 'string' && label ? label : '该项';
16
+ return [{ required: true, message: `请填写${labelText}` }, ...rules];
17
+ }
18
+ return rules.filter((rule) => !isRequiredRule(rule));
19
+ }
20
+ /**
21
+ * 计算字段当前的有效状态。派生函数必须是纯函数,只依赖 dynamic.dependencies 声明的字段。
22
+ */
23
+ export function deriveFieldState(schema, ctx) {
24
+ const dynamic = schema.dynamic;
25
+ const visible = dynamic?.visible !== undefined
26
+ ? resolveDerived(dynamic.visible, ctx, true)
27
+ : schema.visible !== undefined
28
+ ? schema.visible
29
+ : !schema.hidden;
30
+ const disabled = dynamic?.disabled === undefined ? undefined : resolveDerived(dynamic.disabled, ctx, false);
31
+ const props = dynamic?.props === undefined ? undefined : resolveDerived(dynamic.props, ctx, {});
32
+ let rules = dynamic?.rules === undefined ? (schema.rules ?? []) : resolveDerived(dynamic.rules, ctx, []);
33
+ if (dynamic?.required !== undefined) {
34
+ rules = withRequired(rules, resolveDerived(dynamic.required, ctx, false), schema.label);
35
+ }
36
+ if (!visible)
37
+ rules = [];
38
+ return { visible, disabled, props, rules };
39
+ }
40
+ /** 把 dynamic.props 浅合并到静态 props 上,用于编辑态与只读态共用同一份有效属性 */
41
+ export function withDerivedProps(schema, props) {
42
+ if (!props || !Object.keys(props).length)
43
+ return schema;
44
+ return { ...schema, props: { ...schema.props, ...props } };
45
+ }
46
+ /**
47
+ * 用行记录构造只读上下文。
48
+ *
49
+ * 单活动行表格的 Form Store 里只有活动行的草稿,普通行没有自己的 Form,
50
+ * 必须从 record 取数;用 Form 会读到活动行的值(错行)。
51
+ * `getValues()` 因此返回整条行记录,而不是整表值。
52
+ */
53
+ export function createRecordReadContext(record) {
54
+ return {
55
+ get: (name) => getNestedValue(record, name),
56
+ getValues: () => record && typeof record === 'object' ? record : {},
57
+ };
58
+ }
59
+ //# sourceMappingURL=derive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive.js","sourceRoot":"","sources":["../../src/form/derive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** NamePath 工具:契约要求所有路径比较都基于“规范化后的数组”,不做字符串猜测 */
2
+ import type { NamePath } from '../types.js';
3
+ export type NormalizedNamePath = (string | number)[];
4
+ export declare function normalizeNamePath(path: NamePath): NormalizedNamePath;
5
+ /** 'customer.id' 与 ['customer','id'] 是两条不同路径,键也必须不同 */
6
+ export declare function namePathKey(path: NamePath): string;
7
+ export declare function isSameNamePath(a: NamePath, b: NamePath): boolean;
8
+ /** 合并依赖列表并去重,保持先后顺序 */
9
+ export declare function dedupeNamePaths(paths: NamePath[]): NamePath[];
10
+ /** 从整表值对象里按路径取值,用于 dynamic 依赖订阅 */
11
+ export declare function getNestedValue(values: unknown, path: NamePath): unknown;
12
+ //# sourceMappingURL=namePath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namePath.d.ts","sourceRoot":"","sources":["../../src/form/namePath.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,kBAAkB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,GAAG,kBAAkB,CAEpE;AAED,uDAAuD;AACvD,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAElD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAEhE;AAED,uBAAuB;AACvB,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAU7D;AAED,mCAAmC;AACnC,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAOvE"}
@@ -0,0 +1,33 @@
1
+ export function normalizeNamePath(path) {
2
+ return Array.isArray(path) ? path : [path];
3
+ }
4
+ /** 'customer.id' 与 ['customer','id'] 是两条不同路径,键也必须不同 */
5
+ export function namePathKey(path) {
6
+ return JSON.stringify(normalizeNamePath(path));
7
+ }
8
+ export function isSameNamePath(a, b) {
9
+ return namePathKey(a) === namePathKey(b);
10
+ }
11
+ /** 合并依赖列表并去重,保持先后顺序 */
12
+ export function dedupeNamePaths(paths) {
13
+ const seen = new Set();
14
+ const result = [];
15
+ for (const path of paths) {
16
+ const key = namePathKey(path);
17
+ if (seen.has(key))
18
+ continue;
19
+ seen.add(key);
20
+ result.push(path);
21
+ }
22
+ return result;
23
+ }
24
+ /** 从整表值对象里按路径取值,用于 dynamic 依赖订阅 */
25
+ export function getNestedValue(values, path) {
26
+ return normalizeNamePath(path).reduce((current, key) => {
27
+ if (current === null || current === undefined || typeof current !== 'object') {
28
+ return undefined;
29
+ }
30
+ return current[key];
31
+ }, values);
32
+ }
33
+ //# sourceMappingURL=namePath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namePath.js","sourceRoot":"","sources":["../../src/form/namePath.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,WAAW,CAAC,IAAc;IACxC,OAAO,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAW,EAAE,CAAW;IACrD,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,cAAc,CAAC,MAAe,EAAE,IAAc;IAC5D,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAU,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;QAC9D,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7E,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAQ,OAA4C,CAAC,GAAG,CAAC,CAAC;IAC5D,CAAC,EAAE,MAAM,CAAC,CAAC;AACb,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import type { FieldMode, FormFieldSchema } from '../types.js';
3
+ interface EditableCellProps extends HTMLAttributes<HTMLTableCellElement> {
4
+ /** 由列的 onCell 注入;没有该属性就是普通只读单元格 */
5
+ field?: FormFieldSchema;
6
+ /** 由列的 onCell 注入:'read' 表示 editable: 'read' 的列,值仍跟随本行 Form */
7
+ fieldMode?: FieldMode;
8
+ children?: ReactNode;
9
+ }
10
+ export declare function EditableCell({ field, fieldMode, children, ...tdProps }: EditableCellProps): import("react").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=EditableCell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditableCell.d.ts","sourceRoot":"","sources":["../../src/full-editable-table/EditableCell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3D,UAAU,iBAAkB,SAAQ,cAAc,CAAC,oBAAoB,CAAC;IACtE,mCAAmC;IACnC,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EAAE,iBAAiB,+BAiBzF"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { SchemaFormField } from '../form/SchemaFormField.js';
3
+ import { useFullTableRuntime } from './context.js';
4
+ export function EditableCell({ field, fieldMode, children, ...tdProps }) {
5
+ const runtime = useFullTableRuntime();
6
+ return (_jsx("td", { ...tdProps, children: field ? (_jsx(SchemaFormField, { schema: field, compact: true, mode: fieldMode, disabled: runtime?.disabled })) : (children) }));
7
+ }
8
+ //# sourceMappingURL=EditableCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditableCell.js","sourceRoot":"","sources":["../../src/full-editable-table/EditableCell.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAUhD,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAqB;IACxF,MAAM,OAAO,GAAG,mBAAmB,EAAU,CAAC;IAE9C,OAAO,CACL,gBAAQ,OAAO,YACZ,KAAK,CAAC,CAAC,CAAC,CACP,KAAC,eAAe,IACd,MAAM,EAAE,KAAK,EACb,OAAO,QACP,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAC3B,CACH,CAAC,CAAC,CAAC,CACF,QAAQ,CACT,GACE,CACN,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ interface EditableRowProps extends HTMLAttributes<HTMLTableRowElement> {
3
+ 'data-row-key'?: string | number;
4
+ }
5
+ declare function EditableRowInner({ 'data-row-key': rowKey, ...trProps }: EditableRowProps): import("react").JSX.Element;
6
+ export declare const EditableRow: import("react").MemoExoticComponent<typeof EditableRowInner>;
7
+ export {};
8
+ //# sourceMappingURL=EditableRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditableRow.d.ts","sourceRoot":"","sources":["../../src/full-editable-table/EditableRow.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAM5C,UAAU,gBAAiB,SAAQ,cAAc,CAAC,mBAAmB,CAAC;IACpE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAClC;AAED,iBAAS,gBAAgB,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,EAAE,EAAE,gBAAgB,+BAuBjF;AAED,eAAO,MAAM,WAAW,8DAAyB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * 行容器:Form component={false} 只提供 Form Context,不输出 <form>,
4
+ * 保证 <tbody><tr><td> 的 DOM 结构合法。
5
+ */
6
+ import { memo, useEffect } from 'react';
7
+ import { Form } from 'antd';
8
+ import { FormRuntimeHostProvider } from '../form/FormRuntimeHost.js';
9
+ import { useFullTableRuntime } from './context.js';
10
+ function EditableRowInner({ 'data-row-key': rowKey, ...trProps }) {
11
+ const runtime = useFullTableRuntime();
12
+ const [form] = Form.useForm();
13
+ const key = String(rowKey ?? '');
14
+ const initialRecord = runtime?.getInitialRecord(key);
15
+ useEffect(() => {
16
+ if (!runtime)
17
+ return;
18
+ return runtime.registerForm(key, form);
19
+ }, [runtime, key, form]);
20
+ return (_jsx(Form, { form: form, component: false, initialValues: initialRecord, onValuesChange: (changed) => runtime?.onRowValuesChange?.(key, changed), children: _jsx(FormRuntimeHostProvider, { form: form, children: _jsx("tr", { ...trProps }) }) }));
21
+ }
22
+ export const EditableRow = memo(EditableRowInner);
23
+ //# sourceMappingURL=EditableRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditableRow.js","sourceRoot":"","sources":["../../src/full-editable-table/EditableRow.tsx"],"names":[],"mappings":";AAAA;;;GAGG;AACH,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAMhD,SAAS,gBAAgB,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,EAAoB;IAChF,MAAM,OAAO,GAAG,mBAAmB,EAAU,CAAC;IAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACjC,MAAM,aAAa,GAAG,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,OAAO,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzB,OAAO,CACL,KAAC,IAAI,IACH,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,KAAK,EAChB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,YAEvE,KAAC,uBAAuB,IAAC,IAAI,EAAE,IAAI,YACjC,gBAAQ,OAAO,GAAI,GACK,GACrB,CACR,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FullEditableTableComponent } from './types.js';
2
+ export declare const FullEditableTable: FullEditableTableComponent;
3
+ //# sourceMappingURL=FullEditableTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FullEditableTable.d.ts","sourceRoot":"","sources":["../../src/full-editable-table/FullEditableTable.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EACV,0BAA0B,EAM3B,MAAM,SAAS,CAAC;AA0hBjB,eAAO,MAAM,iBAAiB,EAEd,0BAA0B,CAAC"}
@@ -0,0 +1,384 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * FullEditableTable:全行常态编辑 + 结构增删 + 整表校验提交。
4
+ *
5
+ * V1 数据权威:每一行一个常驻 FormInstance;结构(rowOrder / rowKey)由
6
+ * RowCollectionController 管理,输入不经过顶层状态镜像,避免整表重渲染。
7
+ */
8
+ import { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
9
+ import { Button, Space, Table } from 'antd';
10
+ import { IS_DEV } from '../env.js';
11
+ import { TableFooter } from '../TableFooter.js';
12
+ import { FullTableRuntimeContext } from './context.js';
13
+ import { EditableCell } from './EditableCell.js';
14
+ import { EditableRow } from './EditableRow.js';
15
+ import { mergeRowValues } from '../rowMerge.js';
16
+ import { resolveTableScroll } from '../tableScroll.js';
17
+ /** Table 内部行身份字段,不写回业务数据 */
18
+ const ROW_KEY_FIELD = '__schemaRowKey';
19
+ /** 内置操作列的 key,与单活动行表格保持一致 */
20
+ const ACTION_COLUMN_KEY = '__schemaActions';
21
+ const withRowKey = (row, key) => ({ ...row, [ROW_KEY_FIELD]: key });
22
+ function createCollection(rows, keyFromRow, genKey) {
23
+ const rowOrder = [];
24
+ const rowsByKey = new Map();
25
+ for (const row of rows) {
26
+ const explicitKey = keyFromRow(row);
27
+ let key = explicitKey ?? genKey();
28
+ if (rowsByKey.has(key)) {
29
+ if (IS_DEV) {
30
+ console.error(`[FullEditableTable] rowKey 不唯一:"${key}",内部临时改用新 key,请检查数据`);
31
+ }
32
+ key = `${key}#${genKey()}`;
33
+ }
34
+ rowOrder.push(key);
35
+ rowsByKey.set(key, { key, initialRecord: row, record: withRowKey(row, key) });
36
+ }
37
+ return { rowOrder, rowsByKey };
38
+ }
39
+ const TABLE_COMPONENTS = {
40
+ body: { row: EditableRow, cell: EditableCell },
41
+ };
42
+ function FullEditableTableInner(props, ref) {
43
+ const { columns, initialRows, rowKey, createRow, minRows, maxRows, disabled, scroll, maxHeight,
44
+ // 开箱即用:可编辑表格默认就带新增与行内增删,不需要每个页面重复声明
45
+ showAddButton = true, addButtonText, showInsertAction = true, showDeleteAction = true, insertPosition = 'after', actionColumnProps, renderFooterExtra, showRowSelection, showBatchDelete, batchDeleteText, toolbarPlacement = 'top', showButtonIcon,
46
+ // 可编辑表格默认不分页:分页会把行藏起来,与「逐行录入」的用法相冲
47
+ pagination = false, onSubmit, onRowValuesChange, onRowsStructureChange, onValidationFailed, onValidateRows, ...tableProps } = props;
48
+ // 所有回调走 ref,保证 imperative handle 与 row runtime 稳定
49
+ const latestRef = useRef({
50
+ createRow,
51
+ minRows,
52
+ maxRows,
53
+ onSubmit,
54
+ onRowValuesChange,
55
+ onRowsStructureChange,
56
+ onValidationFailed,
57
+ onValidateRows,
58
+ disabled,
59
+ });
60
+ latestRef.current = {
61
+ createRow,
62
+ minRows,
63
+ maxRows,
64
+ onSubmit,
65
+ onRowValuesChange,
66
+ onRowsStructureChange,
67
+ onValidationFailed,
68
+ onValidateRows,
69
+ disabled,
70
+ };
71
+ const seqRef = useRef(0);
72
+ const genKey = useCallback(() => `row_${(seqRef.current += 1)}`, []);
73
+ const rowKeyPropRef = useRef(rowKey);
74
+ rowKeyPropRef.current = rowKey;
75
+ const keyFromRow = useCallback((row) => {
76
+ const current = rowKeyPropRef.current;
77
+ if (current === undefined)
78
+ return null;
79
+ const value = typeof current === 'function'
80
+ ? current(row)
81
+ : row[current];
82
+ // 缺失业务 key 时不能退化成字符串 "undefined":多行会撞成同一个 key
83
+ if (value === undefined || value === null)
84
+ return null;
85
+ return String(value);
86
+ }, []);
87
+ /**
88
+ * 新行的内部身份:优先沿用业务 key(createRow 通常已经生成了本地 id),
89
+ * 这样 addRow 之后仍然可以用 removeRow(record[rowKey]) 定位它;
90
+ * 没有业务 key 或与现存行冲突时才生成本地 key。
91
+ */
92
+ const resolveNewRowKey = useCallback((row, rowsByKey) => {
93
+ const explicitKey = keyFromRow(row);
94
+ if (explicitKey === null) {
95
+ // 本地 key 也要避开业务 key,否则两行的内部身份相同
96
+ let localKey = genKey();
97
+ while (rowsByKey.has(localKey))
98
+ localKey = genKey();
99
+ return localKey;
100
+ }
101
+ if (!rowsByKey.has(explicitKey))
102
+ return explicitKey;
103
+ if (IS_DEV) {
104
+ console.error(`[FullEditableTable] 新行的 rowKey 与现存行重复:"${explicitKey}",内部改用本地 key,请检查数据`);
105
+ }
106
+ return `${explicitKey}#${genKey()}`;
107
+ }, [genKey, keyFromRow]);
108
+ const [collection, setCollection] = useState(() => createCollection(initialRows ?? [], keyFromRow, genKey));
109
+ // 命令式操作需要读到最新快照,同时避免连续调用时的陈旧状态
110
+ const collectionRef = useRef(collection);
111
+ collectionRef.current = collection;
112
+ const rowFormsRef = useRef(new Map());
113
+ const commit = useCallback((next) => {
114
+ collectionRef.current = next;
115
+ setCollection(next);
116
+ }, []);
117
+ const runtime = useMemo(() => ({
118
+ getInitialRecord: (key) => collectionRef.current.rowsByKey.get(key)?.initialRecord,
119
+ registerForm: (key, form) => {
120
+ rowFormsRef.current.set(key, form);
121
+ return () => {
122
+ if (rowFormsRef.current.get(key) === form) {
123
+ rowFormsRef.current.delete(key);
124
+ }
125
+ };
126
+ },
127
+ disabled,
128
+ onRowValuesChange: (key, changed) => latestRef.current.onRowValuesChange?.(key, changed),
129
+ }),
130
+ // disabled 变化必须让单元格重新渲染
131
+ [disabled]);
132
+ const dataSource = useMemo(
133
+ // 数组本身每次结构变更都是新的(Table 要据此更新行顺序),但行对象只在
134
+ // 该行自己变化时才是新引用,未变动的行据此跳过单元格重渲染
135
+ () => collection.rowOrder.map((key) => collection.rowsByKey.get(key)?.record), [collection]);
136
+ const editableColumns = useMemo(() => columns.map((column) => {
137
+ if (!column.editable)
138
+ return column;
139
+ const originalOnCell = column
140
+ .onCell;
141
+ // 按行对象身份缓存 td 属性:行没变就返回同一个对象,rc-table 的 Cell
142
+ // 才能靠 props 浅比较跳掉重渲染(行对象在增删别的行时是稳定的)
143
+ const cellPropsCache = new WeakMap();
144
+ return {
145
+ ...column,
146
+ onCell: (record) => {
147
+ const cached = cellPropsCache.get(record);
148
+ // 属性不依赖行号,其他行增删不应使缓存失效。
149
+ if (cached)
150
+ return cached;
151
+ const props = {
152
+ ...(originalOnCell?.(record) ?? {}),
153
+ field: column.field,
154
+ // 'read' 列同样挂 field,但让绑定层按只读渲染:值仍来自本行 Form
155
+ fieldMode: column.editable === 'read' ? 'read' : undefined,
156
+ };
157
+ cellPropsCache.set(record, props);
158
+ return props;
159
+ },
160
+ };
161
+ }), [columns]);
162
+ const notify = useCallback((info) => {
163
+ latestRef.current.onRowsStructureChange?.(info);
164
+ }, []);
165
+ const makeRecord = useCallback((record) => {
166
+ return { ...(latestRef.current.createRow?.() ?? {}), ...(record ?? {}) };
167
+ }, []);
168
+ const overMax = useCallback(() => {
169
+ const limit = latestRef.current.maxRows;
170
+ if (limit !== undefined && collectionRef.current.rowOrder.length >= limit) {
171
+ if (IS_DEV)
172
+ console.warn(`[FullEditableTable] 已达 maxRows=${limit},本次追加被忽略`);
173
+ return true;
174
+ }
175
+ return false;
176
+ }, []);
177
+ const addRow = useCallback((record) => {
178
+ if (overMax())
179
+ return;
180
+ const prev = collectionRef.current;
181
+ const initial = makeRecord(record);
182
+ const key = resolveNewRowKey(initial, prev.rowsByKey);
183
+ const rowsByKey = new Map(prev.rowsByKey);
184
+ rowsByKey.set(key, { key, initialRecord: initial, record: withRowKey(initial, key) });
185
+ commit({ rowOrder: [...prev.rowOrder, key], rowsByKey });
186
+ notify({ type: 'add', rowKey: key, row: initial });
187
+ }, [commit, makeRecord, notify, overMax, resolveNewRowKey]);
188
+ const insertRow = useCallback((anchorKey, position, record) => {
189
+ if (overMax())
190
+ return;
191
+ const prev = collectionRef.current;
192
+ const index = prev.rowOrder.indexOf(String(anchorKey));
193
+ if (index < 0) {
194
+ if (IS_DEV)
195
+ console.warn(`[FullEditableTable] insertRow 找不到锚点行 "${String(anchorKey)}"`);
196
+ return;
197
+ }
198
+ const initial = makeRecord(record);
199
+ const key = resolveNewRowKey(initial, prev.rowsByKey);
200
+ const rowsByKey = new Map(prev.rowsByKey);
201
+ rowsByKey.set(key, { key, initialRecord: initial, record: withRowKey(initial, key) });
202
+ const rowOrder = [...prev.rowOrder];
203
+ rowOrder.splice(position === 'before' ? index : index + 1, 0, key);
204
+ commit({ rowOrder, rowsByKey });
205
+ notify({ type: 'insert', rowKey: key, row: initial });
206
+ }, [commit, makeRecord, notify, overMax, resolveNewRowKey]);
207
+ const removeRow = useCallback((rowKeyValue) => {
208
+ const key = String(rowKeyValue);
209
+ const prev = collectionRef.current;
210
+ const meta = prev.rowsByKey.get(key);
211
+ if (!meta) {
212
+ if (IS_DEV) {
213
+ console.warn(`[FullEditableTable] removeRow 找不到该行:"${key}",请确认传入的是行身份而不是其他字段`);
214
+ }
215
+ return;
216
+ }
217
+ const limit = latestRef.current.minRows;
218
+ if (limit !== undefined && prev.rowOrder.length <= limit) {
219
+ if (IS_DEV)
220
+ console.warn(`[FullEditableTable] 已达 minRows=${limit},本次删除被忽略`);
221
+ return;
222
+ }
223
+ const rowsByKey = new Map(prev.rowsByKey);
224
+ rowsByKey.delete(key);
225
+ // 先移除注册,避免卸载 Effect 晚到又把已删除行登记回来
226
+ rowFormsRef.current.delete(key);
227
+ commit({ rowOrder: prev.rowOrder.filter((item) => item !== key), rowsByKey });
228
+ notify({ type: 'remove', rowKey: key, row: meta.initialRecord });
229
+ }, [commit, notify]);
230
+ /** 勾选态只在开启多选时使用;批量删除没有勾选框就没有意义,所以它也会打开多选 */
231
+ const selectable = showRowSelection === true || showBatchDelete === true;
232
+ const [selectedKeys, setSelectedKeys] = useState([]);
233
+ // 行被删掉(单行删除 / setData 重建)后,勾选里不能留下已经不存在的行身份
234
+ useEffect(() => {
235
+ if (selectedKeys.length === 0)
236
+ return;
237
+ const alive = selectedKeys.filter((key) => collection.rowsByKey.has(String(key)));
238
+ if (alive.length !== selectedKeys.length)
239
+ setSelectedKeys(alive);
240
+ }, [collection, selectedKeys]);
241
+ const removeRows = useCallback((keys) => {
242
+ const prev = collectionRef.current;
243
+ // 只删确实存在的行;重复 key 不占 minRows 的配额
244
+ const existing = Array.from(new Set(keys.map(String))).filter((key) => prev.rowsByKey.has(key));
245
+ if (existing.length === 0)
246
+ return;
247
+ const limit = latestRef.current.minRows;
248
+ const allowed = limit === undefined ? existing.length : Math.max(0, prev.rowOrder.length - limit);
249
+ if (allowed < existing.length && IS_DEV) {
250
+ console.warn(`[FullEditableTable] minRows=${limit},批量删除只执行前 ${allowed} 行`);
251
+ }
252
+ const removed = existing.slice(0, allowed);
253
+ if (!removed.length)
254
+ return;
255
+ const removedSet = new Set(removed);
256
+ const rowsByKey = new Map(prev.rowsByKey);
257
+ removed.forEach(key => {
258
+ rowsByKey.delete(key);
259
+ rowFormsRef.current.delete(key);
260
+ });
261
+ commit({ rowOrder: prev.rowOrder.filter(key => !removedSet.has(key)), rowsByKey });
262
+ // 保留逐行通知,回调读取到的是批量删除后的集合。
263
+ removed.forEach(key => notify({ type: 'remove', rowKey: key, row: prev.rowsByKey.get(key).initialRecord }));
264
+ setSelectedKeys(current => current.filter(key => !removedSet.has(String(key))));
265
+ }, [commit, notify]);
266
+ const mergedRowSelection = useMemo(() => {
267
+ // 调用方自带 rowSelection 时以调用方为准,内置勾选只是开关式的便捷入口
268
+ if (tableProps.rowSelection)
269
+ return tableProps.rowSelection;
270
+ if (!selectable)
271
+ return undefined;
272
+ return {
273
+ selectedRowKeys: selectedKeys,
274
+ onChange: (keys) => setSelectedKeys(keys),
275
+ };
276
+ }, [selectable, selectedKeys, tableProps.rowSelection]);
277
+ const rowCount = collection.rowOrder.length;
278
+ const atMaxRows = maxRows !== undefined && rowCount >= maxRows;
279
+ const atMinRows = minRows !== undefined && rowCount <= minRows;
280
+ // 内置操作列放在列定义之后,避免调用方既要手写删除列、又要和新增/插入按钮重复接线
281
+ const tableColumns = useMemo(() => {
282
+ const mapped = [...editableColumns];
283
+ if (!showInsertAction && !showDeleteAction)
284
+ return mapped;
285
+ const actionColumn = {
286
+ ...actionColumnProps,
287
+ key: ACTION_COLUMN_KEY,
288
+ title: actionColumnProps?.title ?? '操作',
289
+ width: actionColumnProps?.width ?? (showInsertAction && showDeleteAction ? 110 : 70),
290
+ render: (_, record) => {
291
+ // 行身份来自内部 key 字段:业务 key 可能缺失,这里不能依赖它
292
+ const key = String(record[ROW_KEY_FIELD]);
293
+ return (_jsxs(Space, { size: 0, children: [showInsertAction ? (_jsx(Button, { type: "link", size: "small", disabled: disabled || atMaxRows, onClick: () => insertRow(key, insertPosition), children: "\u63D2\u5165" })) : null, showDeleteAction ? (_jsx(Button, { type: "link", size: "small", danger: true, disabled: disabled || atMinRows, onClick: () => removeRow(key), children: "\u5220\u9664" })) : null] }));
294
+ },
295
+ };
296
+ mapped.push(actionColumn);
297
+ return mapped;
298
+ }, [
299
+ actionColumnProps,
300
+ atMaxRows,
301
+ atMinRows,
302
+ disabled,
303
+ editableColumns,
304
+ insertPosition,
305
+ insertRow,
306
+ removeRow,
307
+ showDeleteAction,
308
+ showInsertAction,
309
+ ]);
310
+ const getDataSync = useCallback(() => {
311
+ const { rowOrder, rowsByKey } = collectionRef.current;
312
+ return rowOrder.map((key) => {
313
+ const meta = rowsByKey.get(key);
314
+ const form = rowFormsRef.current.get(key);
315
+ const values = form ? form.getFieldsValue(true) : {};
316
+ return mergeRowValues((meta?.initialRecord ?? {}), values);
317
+ });
318
+ }, []);
319
+ const validate = useCallback(async () => {
320
+ const { rowOrder } = collectionRef.current;
321
+ const errors = [];
322
+ for (const key of rowOrder) {
323
+ const form = rowFormsRef.current.get(key);
324
+ if (!form) {
325
+ // 注册表不完整意味着这一行会被漏校验,开发态必须暴露出来
326
+ if (IS_DEV)
327
+ console.error(`[FullEditableTable] 行 "${key}" 没有已注册的 FormInstance`);
328
+ continue;
329
+ }
330
+ try {
331
+ await form.validateFields();
332
+ }
333
+ catch (error) {
334
+ const fields = error
335
+ .errorFields ?? [];
336
+ for (const field of fields) {
337
+ errors.push({ rowKey: key, name: field.name, messages: field.errors });
338
+ }
339
+ }
340
+ }
341
+ const rows = getDataSync();
342
+ if (errors.length)
343
+ return { valid: false, errors };
344
+ // 表级校验出口:行级全部通过后才执行
345
+ const extra = await latestRef.current.onValidateRows?.(rows);
346
+ if (extra && extra.length)
347
+ return { valid: false, errors: extra };
348
+ return { valid: true, rows };
349
+ }, [getDataSync]);
350
+ const submittingRef = useRef(false);
351
+ const submit = useCallback(async () => {
352
+ if (submittingRef.current)
353
+ return;
354
+ submittingRef.current = true;
355
+ try {
356
+ const result = await validate();
357
+ if (!result.valid) {
358
+ latestRef.current.onValidationFailed?.(result.errors);
359
+ return;
360
+ }
361
+ await latestRef.current.onSubmit?.(result.rows);
362
+ }
363
+ finally {
364
+ submittingRef.current = false;
365
+ }
366
+ }, [validate]);
367
+ const setData = useCallback((rows) => {
368
+ const next = createCollection(rows, keyFromRow, genKey);
369
+ commit(next);
370
+ // 既有行刷新值:动态属性会重算,linkage/events 不触发
371
+ next.rowsByKey.forEach((meta, key) => {
372
+ rowFormsRef.current.get(key)?.setFieldsValue(meta.initialRecord);
373
+ });
374
+ notify({ type: 'replace', rowKey: '' });
375
+ }, [commit, genKey, keyFromRow, notify]);
376
+ useImperativeHandle(ref, () => ({ addRow, insertRow, removeRow, getDataSync, validate, submit, setData }), [addRow, insertRow, removeRow, getDataSync, validate, submit, setData]);
377
+ // maxHeight 是 scroll.y 的便捷入口,不传就完全沿用调用方的 scroll
378
+ const mergedScroll = useMemo(() => resolveTableScroll(scroll, maxHeight, 'FullEditableTable'), [scroll, maxHeight]);
379
+ // 工具条位置可配(默认顶部);没有按钮也没有插槽时 TableFooter 自己返回 null
380
+ const toolbar = (_jsx(TableFooter, { addText: addButtonText, onAdd: showAddButton ? () => addRow() : undefined, disabled: disabled || atMaxRows, extra: renderFooterExtra?.({ addRow, insertRow, getDataSync }), batchDeleteText: batchDeleteText, selectedCount: selectedKeys.length, onBatchDelete: showBatchDelete ? () => removeRows(selectedKeys) : undefined, placement: toolbarPlacement, showIcon: showButtonIcon }));
381
+ return (_jsxs(FullTableRuntimeContext.Provider, { value: runtime, children: [toolbarPlacement === 'top' ? toolbar : null, _jsx(Table, { ...tableProps, pagination: pagination, scroll: mergedScroll, rowKey: ROW_KEY_FIELD, dataSource: dataSource, columns: tableColumns, components: TABLE_COMPONENTS, rowSelection: mergedRowSelection }), toolbarPlacement === 'bottom' ? toolbar : null] }));
382
+ }
383
+ export const FullEditableTable = forwardRef(FullEditableTableInner);
384
+ //# sourceMappingURL=FullEditableTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FullEditableTable.js","sourceRoot":"","sources":["../../src/full-editable-table/FullEditableTable.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FullTableRuntime } from './types.js';
2
+ export declare const FullTableRuntimeContext: import("react").Context<FullTableRuntime<any> | null>;
3
+ export declare function useFullTableRuntime<T>(): FullTableRuntime<T> | null;
4
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/full-editable-table/context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAEhD,eAAO,MAAM,uBAAuB,uDAAoD,CAAC;AAEzF,wBAAgB,mBAAmB,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAEnE"}
@@ -0,0 +1,6 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const FullTableRuntimeContext = createContext(null);
3
+ export function useFullTableRuntime() {
4
+ return useContext(FullTableRuntimeContext);
5
+ }
6
+ //# sourceMappingURL=context.js.map