@gsc-basic/components 1.0.1 → 1.0.2

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 (108) hide show
  1. package/README.md +59 -0
  2. package/dist/es/index.js +34 -30
  3. package/dist/es/node_modules/@codemirror/commands/dist/index.js +26 -20
  4. package/dist/es/node_modules/@codemirror/language/dist/index.js +77 -77
  5. package/dist/es/node_modules/@codemirror/search/dist/index.js +432 -465
  6. package/dist/es/node_modules/@codemirror/state/dist/index.js +272 -268
  7. package/dist/es/node_modules/@codemirror/view/dist/index.js +1732 -1647
  8. package/dist/es/node_modules/@lezer/common/dist/index.js +191 -190
  9. package/dist/es/node_modules/@lezer/lr/dist/index.js +3 -3
  10. package/dist/es/node_modules/@tanstack/devtools-event-client/dist/esm/plugin.js +178 -0
  11. package/dist/es/node_modules/@tanstack/form-core/dist/esm/EventClient.js +13 -0
  12. package/dist/es/node_modules/@tanstack/form-core/dist/esm/FieldApi.js +406 -0
  13. package/dist/es/node_modules/@tanstack/form-core/dist/esm/FormApi.js +768 -0
  14. package/dist/es/node_modules/@tanstack/form-core/dist/esm/ValidationLogic.js +55 -0
  15. package/dist/es/node_modules/@tanstack/form-core/dist/esm/metaHelper.js +109 -0
  16. package/dist/es/node_modules/@tanstack/form-core/dist/esm/standardSchemaValidator.js +45 -0
  17. package/dist/es/node_modules/@tanstack/form-core/dist/esm/utils.js +213 -0
  18. package/dist/es/node_modules/@tanstack/pacer-lite/dist/lite-throttler.js +29 -0
  19. package/dist/es/node_modules/@tanstack/store/dist/esm/derived.js +74 -0
  20. package/dist/es/node_modules/@tanstack/store/dist/esm/scheduler.js +79 -0
  21. package/dist/es/node_modules/@tanstack/store/dist/esm/store.js +21 -0
  22. package/dist/es/node_modules/@tanstack/store/dist/esm/types.js +6 -0
  23. package/dist/es/node_modules/@tanstack/table-core/build/lib/index.js +1885 -0
  24. package/dist/es/node_modules/@tanstack/vue-form/dist/esm/useField.js +38 -0
  25. package/dist/es/node_modules/@tanstack/vue-form/dist/esm/useForm.js +33 -0
  26. package/dist/es/node_modules/@tanstack/vue-store/dist/esm/index.js +48 -0
  27. package/dist/es/node_modules/@tanstack/vue-table/build/lib/index.js +159 -0
  28. package/dist/es/src/Grid/index.js +6 -0
  29. package/dist/es/src/Grid/src/Grid.css +1 -0
  30. package/dist/es/src/Grid/src/Grid.vue.js +186 -0
  31. package/dist/es/src/Grid/src/components/ActionBar.css +1 -0
  32. package/dist/es/src/Grid/src/components/ActionBar.vue.js +58 -0
  33. package/dist/es/src/Grid/src/components/CellEditor.css +1 -0
  34. package/dist/es/src/Grid/src/components/CellEditor.vue.js +121 -0
  35. package/dist/es/src/Grid/src/components/CellEditor2.css +1 -0
  36. package/dist/es/src/Grid/src/components/ColumnFilter.css +1 -0
  37. package/dist/es/src/Grid/src/components/ColumnFilter.vue.js +61 -0
  38. package/dist/es/src/Grid/src/components/ColumnSettings.css +1 -0
  39. package/dist/es/src/Grid/src/components/ColumnSettings.vue.js +86 -0
  40. package/dist/es/src/Grid/src/components/DataTable.css +1 -0
  41. package/dist/es/src/Grid/src/components/DataTable.vue.js +533 -0
  42. package/dist/es/src/Grid/src/components/Pager.css +1 -0
  43. package/dist/es/src/Grid/src/components/Pager.vue.js +55 -0
  44. package/dist/es/src/Grid/src/components/QueryBar.css +1 -0
  45. package/dist/es/src/Grid/src/components/QueryBar.vue.js +184 -0
  46. package/dist/es/src/Grid/src/composables/useCellEditor.js +20 -0
  47. package/dist/es/src/Grid/src/composables/useGridTable.js +212 -0
  48. package/dist/es/src/Grid/src/styles/antd.css +1 -0
  49. package/dist/es/src/Grid/src/utils/exportCsv.js +15 -0
  50. package/dist/es/src/index.js +23 -21
  51. package/dist/es/src/locale/lang/en-US.js +40 -0
  52. package/dist/es/src/locale/lang/ja-JP.js +42 -2
  53. package/dist/es/src/locale/lang/zh-CN.js +42 -2
  54. package/dist/es/src/styles/tokens.css +1 -1
  55. package/dist/lib/index.js +1 -1
  56. package/dist/lib/node_modules/@codemirror/commands/dist/index.js +1 -1
  57. package/dist/lib/node_modules/@codemirror/language/dist/index.js +1 -1
  58. package/dist/lib/node_modules/@codemirror/search/dist/index.js +2 -2
  59. package/dist/lib/node_modules/@codemirror/state/dist/index.js +4 -4
  60. package/dist/lib/node_modules/@codemirror/view/dist/index.js +5 -5
  61. package/dist/lib/node_modules/@lezer/common/dist/index.js +1 -1
  62. package/dist/lib/node_modules/@lezer/lr/dist/index.js +1 -1
  63. package/dist/lib/node_modules/@tanstack/devtools-event-client/dist/esm/plugin.js +1 -0
  64. package/dist/lib/node_modules/@tanstack/form-core/dist/esm/EventClient.js +1 -0
  65. package/dist/lib/node_modules/@tanstack/form-core/dist/esm/FieldApi.js +1 -0
  66. package/dist/lib/node_modules/@tanstack/form-core/dist/esm/FormApi.js +1 -0
  67. package/dist/lib/node_modules/@tanstack/form-core/dist/esm/ValidationLogic.js +1 -0
  68. package/dist/lib/node_modules/@tanstack/form-core/dist/esm/metaHelper.js +1 -0
  69. package/dist/lib/node_modules/@tanstack/form-core/dist/esm/standardSchemaValidator.js +1 -0
  70. package/dist/lib/node_modules/@tanstack/form-core/dist/esm/utils.js +1 -0
  71. package/dist/lib/node_modules/@tanstack/pacer-lite/dist/lite-throttler.js +1 -0
  72. package/dist/lib/node_modules/@tanstack/store/dist/esm/derived.js +1 -0
  73. package/dist/lib/node_modules/@tanstack/store/dist/esm/scheduler.js +1 -0
  74. package/dist/lib/node_modules/@tanstack/store/dist/esm/store.js +1 -0
  75. package/dist/lib/node_modules/@tanstack/store/dist/esm/types.js +1 -0
  76. package/dist/lib/node_modules/@tanstack/table-core/build/lib/index.js +4 -0
  77. package/dist/lib/node_modules/@tanstack/vue-form/dist/esm/useField.js +1 -0
  78. package/dist/lib/node_modules/@tanstack/vue-form/dist/esm/useForm.js +1 -0
  79. package/dist/lib/node_modules/@tanstack/vue-store/dist/esm/index.js +1 -0
  80. package/dist/lib/node_modules/@tanstack/vue-table/build/lib/index.js +1 -0
  81. package/dist/lib/src/Grid/index.js +1 -0
  82. package/dist/lib/src/Grid/src/Grid.css +1 -0
  83. package/dist/lib/src/Grid/src/Grid.vue.js +1 -0
  84. package/dist/lib/src/Grid/src/components/ActionBar.css +1 -0
  85. package/dist/lib/src/Grid/src/components/ActionBar.vue.js +1 -0
  86. package/dist/lib/src/Grid/src/components/CellEditor.css +1 -0
  87. package/dist/lib/src/Grid/src/components/CellEditor.vue.js +1 -0
  88. package/dist/lib/src/Grid/src/components/CellEditor2.css +1 -0
  89. package/dist/lib/src/Grid/src/components/ColumnFilter.css +1 -0
  90. package/dist/lib/src/Grid/src/components/ColumnFilter.vue.js +1 -0
  91. package/dist/lib/src/Grid/src/components/ColumnSettings.css +1 -0
  92. package/dist/lib/src/Grid/src/components/ColumnSettings.vue.js +1 -0
  93. package/dist/lib/src/Grid/src/components/DataTable.css +1 -0
  94. package/dist/lib/src/Grid/src/components/DataTable.vue.js +1 -0
  95. package/dist/lib/src/Grid/src/components/Pager.css +1 -0
  96. package/dist/lib/src/Grid/src/components/Pager.vue.js +1 -0
  97. package/dist/lib/src/Grid/src/components/QueryBar.css +1 -0
  98. package/dist/lib/src/Grid/src/components/QueryBar.vue.js +1 -0
  99. package/dist/lib/src/Grid/src/composables/useCellEditor.js +1 -0
  100. package/dist/lib/src/Grid/src/composables/useGridTable.js +1 -0
  101. package/dist/lib/src/Grid/src/styles/antd.css +1 -0
  102. package/dist/lib/src/Grid/src/utils/exportCsv.js +3 -0
  103. package/dist/lib/src/index.js +1 -1
  104. package/dist/lib/src/locale/lang/en-US.js +1 -1
  105. package/dist/lib/src/locale/lang/ja-JP.js +1 -1
  106. package/dist/lib/src/locale/lang/zh-CN.js +1 -1
  107. package/dist/lib/src/styles/tokens.css +1 -1
  108. package/package.json +6 -3
@@ -0,0 +1,184 @@
1
+ import { ref as z, computed as m, watch as D, createElementBlock as i, openBlock as o, createElementVNode as l, renderSlot as O, normalizeClass as k, Fragment as x, renderList as S, toDisplayString as g, createBlock as h, resolveDynamicComponent as _, unref as s, withCtx as b, createCommentVNode as w } from "vue";
2
+ import { useForm as Q } from "../../../../node_modules/@tanstack/vue-form/dist/esm/useForm.js";
3
+ import { useLocale as A } from "../../../hooks/useLocale.js";
4
+ import './QueryBar.css';/* empty css */
5
+ import G from "../../../../_virtual/_plugin-vue_export-helper.js";
6
+ const H = { class: "gsc-card gsc-card-pad" }, J = ["title"], M = { class: "gsc-form-control" }, P = ["value", "onChange"], T = { value: "" }, U = ["value"], W = {
7
+ key: 1,
8
+ class: "gsc-range"
9
+ }, X = ["value", "onInput"], Y = ["value", "onInput"], Z = ["placeholder", "value", "onInput"], ee = ["disabled"], te = ["disabled"], ae = {
10
+ __name: "QueryBar",
11
+ props: {
12
+ schema: { type: Array, default: () => [] },
13
+ modelValue: { type: Object, default: () => ({}) },
14
+ loading: { type: Boolean, default: !1 },
15
+ collapsedCount: { type: Number, default: 4 }
16
+ },
17
+ emits: ["update:modelValue", "search", "reset"],
18
+ setup(V, { emit: F }) {
19
+ const u = V, p = F, { t: y } = A(), f = z(!0);
20
+ function q(t = []) {
21
+ return (t || []).filter(Boolean).map((e) => ({
22
+ key: e.key,
23
+ label: e.label ?? e.title ?? e.key,
24
+ type: e.type ?? "text",
25
+ placeholder: e.placeholder,
26
+ options: e.options,
27
+ span: e.span,
28
+ startKey: e.startKey,
29
+ endKey: e.endKey,
30
+ defaultValue: e.defaultValue
31
+ })).filter((e) => e.type === "dateRange" ? !!(e.startKey && e.endKey) : !!e.key);
32
+ }
33
+ const v = m(() => q(u.schema));
34
+ function C() {
35
+ const t = {};
36
+ return v.value.forEach((e) => {
37
+ e.type === "dateRange" ? (t[e.startKey] = u.modelValue?.[e.startKey] ?? "", t[e.endKey] = u.modelValue?.[e.endKey] ?? "") : t[e.key] = u.modelValue?.[e.key] ?? e.defaultValue ?? "";
38
+ }), t;
39
+ }
40
+ const r = Q({
41
+ defaultValues: C(),
42
+ onSubmit: ({ value: t }) => {
43
+ p("update:modelValue", t || {}), p("search", t || {});
44
+ }
45
+ }), K = r.useStore((t) => t.values);
46
+ D(
47
+ () => u.modelValue,
48
+ (t) => {
49
+ const e = t || {};
50
+ Object.keys(e).forEach((a) => {
51
+ try {
52
+ r.setFieldValue(a, e[a], { dontValidate: !0, dontRunListeners: !0 });
53
+ } catch {
54
+ }
55
+ });
56
+ },
57
+ { deep: !0 }
58
+ );
59
+ const B = m(() => v.value.length > u.collapsedCount), I = m(() => B.value && f.value ? v.value.slice(0, u.collapsedCount) : v.value), R = m(() => "grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"), E = m(() => "lg:col-span-3 xl:col-span-4");
60
+ function j(t) {
61
+ const e = Number(t?.span || 0);
62
+ return e === 2 ? "lg:col-span-2" : e === 3 ? "lg:col-span-3" : e === 4 ? "lg:col-span-4" : "";
63
+ }
64
+ function L(t) {
65
+ return t.type === "dateRange" ? `${t.startKey}__${t.endKey}` : t.key;
66
+ }
67
+ function N() {
68
+ try {
69
+ r.handleSubmit();
70
+ } catch {
71
+ p("update:modelValue", K.value || {}), p("search", K.value || {});
72
+ }
73
+ }
74
+ function $() {
75
+ const t = C();
76
+ Object.keys(t).forEach((e) => {
77
+ try {
78
+ r.setFieldValue(e, t[e], { dontValidate: !0, dontRunListeners: !0 });
79
+ } catch {
80
+ }
81
+ }), p("update:modelValue", t), p("reset", t);
82
+ }
83
+ return (t, e) => (o(), i("div", H, [
84
+ l("div", {
85
+ class: k(["gsc-querybar", R.value])
86
+ }, [
87
+ (o(!0), i(x, null, S(I.value, (a) => (o(), i("div", {
88
+ key: L(a),
89
+ class: k(["gsc-form-item", j(a)])
90
+ }, [
91
+ l("div", {
92
+ class: "gsc-form-label",
93
+ title: a.label
94
+ }, g(a.label), 9, J),
95
+ l("div", M, [
96
+ a.type === "select" ? (o(), h(_(s(r).Field), {
97
+ key: 0,
98
+ name: a.key
99
+ }, {
100
+ default: b(({ field: c, state: d }) => [
101
+ l("select", {
102
+ class: "gsc-control",
103
+ value: d.value ?? "",
104
+ onChange: (n) => c.setValue(n.target.value)
105
+ }, [
106
+ l("option", T, g(a.placeholder || s(y)("gsc.grid.queryBar.placeholder.select")), 1),
107
+ (o(!0), i(x, null, S(a.options || [], (n) => (o(), i("option", {
108
+ key: n.value,
109
+ value: n.value
110
+ }, g(n.label), 9, U))), 128))
111
+ ], 40, P)
112
+ ]),
113
+ _: 2
114
+ }, 1032, ["name"])) : a.type === "dateRange" ? (o(), i("div", W, [
115
+ (o(), h(_(s(r).Field), {
116
+ name: a.startKey
117
+ }, {
118
+ default: b(({ field: c, state: d }) => [
119
+ l("input", {
120
+ type: "date",
121
+ class: "gsc-control",
122
+ value: d.value ?? "",
123
+ onInput: (n) => c.setValue(n.target.value)
124
+ }, null, 40, X)
125
+ ]),
126
+ _: 1
127
+ }, 8, ["name"])),
128
+ e[1] || (e[1] = l("div", { class: "gsc-range-sep" }, " — ", -1)),
129
+ (o(), h(_(s(r).Field), {
130
+ name: a.endKey
131
+ }, {
132
+ default: b(({ field: c, state: d }) => [
133
+ l("input", {
134
+ type: "date",
135
+ class: "gsc-control",
136
+ value: d.value ?? "",
137
+ onInput: (n) => c.setValue(n.target.value)
138
+ }, null, 40, Y)
139
+ ]),
140
+ _: 1
141
+ }, 8, ["name"]))
142
+ ])) : (o(), h(_(s(r).Field), {
143
+ key: 2,
144
+ name: a.key
145
+ }, {
146
+ default: b(({ field: c, state: d }) => [
147
+ l("input", {
148
+ class: "gsc-control",
149
+ placeholder: a.placeholder || s(y)("gsc.grid.queryBar.placeholder.input"),
150
+ value: d.value ?? "",
151
+ onInput: (n) => c.setValue(n.target.value)
152
+ }, null, 40, Z)
153
+ ]),
154
+ _: 2
155
+ }, 1032, ["name"]))
156
+ ])
157
+ ], 2))), 128)),
158
+ l("div", {
159
+ class: k(["gsc-form-actions", E.value])
160
+ }, [
161
+ l("button", {
162
+ class: "gsc-btn gsc-btn-default",
163
+ disabled: V.loading,
164
+ onClick: $
165
+ }, g(s(y)("gsc.grid.queryBar.action.reset")), 9, ee),
166
+ l("button", {
167
+ class: "gsc-btn gsc-btn-primary",
168
+ disabled: V.loading,
169
+ onClick: N
170
+ }, g(s(y)("gsc.grid.queryBar.action.search")), 9, te),
171
+ B.value ? (o(), i("button", {
172
+ key: 0,
173
+ class: "gsc-btn gsc-btn-link",
174
+ onClick: e[0] || (e[0] = (a) => f.value = !f.value)
175
+ }, g(f.value ? s(y)("gsc.grid.queryBar.action.expand") : s(y)("gsc.grid.queryBar.action.collapse")), 1)) : w("", !0)
176
+ ], 2)
177
+ ], 2),
178
+ O(t.$slots, "extra", {}, void 0, !0)
179
+ ]));
180
+ }
181
+ }, ue = /* @__PURE__ */ G(ae, [["__scopeId", "data-v-e3036b77"]]);
182
+ export {
183
+ ue as default
184
+ };
@@ -0,0 +1,20 @@
1
+ import { ref as t, watch as d } from "vue";
2
+ function f(a, l) {
3
+ const e = t(a.modelValue ?? "");
4
+ d(() => a.modelValue, (u) => {
5
+ e.value = u ?? "";
6
+ });
7
+ function o(u) {
8
+ e.value = u, l("update:modelValue", u);
9
+ }
10
+ function c() {
11
+ l("commit", e.value), l("update:modelValue", e.value);
12
+ }
13
+ function n() {
14
+ l("cancel");
15
+ }
16
+ return { localValue: e, updateLocal: o, commit: c, cancel: n };
17
+ }
18
+ export {
19
+ f as useCellEditor
20
+ };
@@ -0,0 +1,212 @@
1
+ import { ref as r, computed as v, watch as M } from "vue";
2
+ import { useVueTable as H } from "../../../../node_modules/@tanstack/vue-table/build/lib/index.js";
3
+ import { getPaginationRowModel as U, getFilteredRowModel as j, getSortedRowModel as B, getCoreRowModel as E, functionalUpdate as S } from "../../../../node_modules/@tanstack/table-core/build/lib/index.js";
4
+ function A(f = []) {
5
+ return (f || []).map((t) => ({
6
+ key: t.key,
7
+ title: t.title ?? t.label ?? t.key,
8
+ width: t.width,
9
+ minWidth: t.minWidth,
10
+ fixed: t.fixed,
11
+ sortable: !!t.sortable,
12
+ filterable: !!t.filterable,
13
+ filterType: t.filterType,
14
+ filterOptions: t.filterOptions,
15
+ formatter: t.formatter,
16
+ editor: t.editor,
17
+ options: t.options
18
+ }));
19
+ }
20
+ function J(f) {
21
+ return v(() => A(f.value).map((l) => ({
22
+ id: l.key,
23
+ accessorKey: l.key,
24
+ header: l.title,
25
+ size: l.width,
26
+ minSize: l.minWidth ?? 40,
27
+ enableSorting: l.sortable,
28
+ enableResizing: !0,
29
+ enableHiding: !0,
30
+ enablePinning: !0,
31
+ meta: { col: l },
32
+ cell: (u) => {
33
+ const d = u.getValue();
34
+ if (typeof l.formatter == "function")
35
+ try {
36
+ return l.formatter(d, { row: u.row.original, index: u.row.index });
37
+ } catch {
38
+ return String(d ?? "");
39
+ }
40
+ return String(d ?? "");
41
+ }
42
+ })));
43
+ }
44
+ function Z(f = {}) {
45
+ const {
46
+ data: t = [],
47
+ request: l,
48
+ mode: u = "server",
49
+ pageSize: d = 10,
50
+ initialQuery: T = {},
51
+ columns: q = [],
52
+ rowKey: D = "id",
53
+ enableRowSelection: F = !1
54
+ } = f, P = r(q || []), s = r(Array.isArray(t) ? (t || []).slice() : (t?.value || []).slice()), h = r({ ...T || {} }), c = r(0), z = r(!1), n = r({ pageIndex: 0, pageSize: d }), i = r([]), y = r({}), w = r({ left: [], right: [] }), b = r({}), N = J(P), o = v(() => u === "server" && typeof l == "function"), x = H({
55
+ get data() {
56
+ return s.value;
57
+ },
58
+ get columns() {
59
+ return N.value;
60
+ },
61
+ getRowId: (e, a) => {
62
+ const p = e && e[D];
63
+ return String(p === 0 || p ? p : a);
64
+ },
65
+ state: {
66
+ get sorting() {
67
+ return i.value;
68
+ },
69
+ get pagination() {
70
+ return n.value;
71
+ },
72
+ get columnVisibility() {
73
+ return y.value;
74
+ },
75
+ get columnPinning() {
76
+ return w.value;
77
+ },
78
+ get rowSelection() {
79
+ return b.value;
80
+ }
81
+ },
82
+ onSortingChange: (e) => {
83
+ i.value = S(e, i.value), o.value && (n.value = { ...n.value, pageIndex: 0 });
84
+ },
85
+ onPaginationChange: (e) => {
86
+ n.value = S(e, n.value);
87
+ },
88
+ onColumnVisibilityChange: (e) => {
89
+ y.value = S(e, y.value);
90
+ },
91
+ onColumnPinningChange: (e) => {
92
+ w.value = S(e, w.value);
93
+ },
94
+ enableRowSelection: !!F,
95
+ onRowSelectionChange: (e) => {
96
+ b.value = S(e, b.value);
97
+ },
98
+ manualPagination: o.value,
99
+ manualSorting: o.value,
100
+ manualFiltering: o.value,
101
+ pageCount: v(() => {
102
+ const e = n.value.pageSize || 1;
103
+ return Math.max(1, Math.ceil((c.value || 0) / e));
104
+ }),
105
+ enableColumnResizing: !0,
106
+ columnResizeMode: "onChange",
107
+ getCoreRowModel: E(),
108
+ getSortedRowModel: B(),
109
+ getFilteredRowModel: j(),
110
+ getPaginationRowModel: U()
111
+ }), k = v({
112
+ get: () => (n.value.pageIndex || 0) + 1,
113
+ set: (e) => {
114
+ const a = Math.max(1, Number(e || 1));
115
+ n.value = { ...n.value, pageIndex: a - 1 };
116
+ }
117
+ }), I = v({
118
+ get: () => n.value.pageSize,
119
+ set: (e) => {
120
+ const a = Math.max(1, Number(e || d));
121
+ n.value = { pageIndex: 0, pageSize: a };
122
+ }
123
+ }), R = v(() => {
124
+ const e = i.value && i.value[0];
125
+ return { id: e?.id ?? null, desc: !!e?.desc };
126
+ }), W = v(() => (x.getRowModel()?.rows || []).map((a) => a.original));
127
+ async function C() {
128
+ if (!o.value) {
129
+ c.value = s.value.length;
130
+ return;
131
+ }
132
+ z.value = !0;
133
+ try {
134
+ const e = await l({
135
+ page: k.value,
136
+ pageSize: I.value,
137
+ query: h.value,
138
+ // Back-compat: keep single sort (first) and also provide multi-sort array.
139
+ sort: R.value,
140
+ sorts: i.value
141
+ });
142
+ s.value = (e?.records || []).slice(), c.value = Number(e?.total ?? s.value.length);
143
+ } finally {
144
+ z.value = !1;
145
+ }
146
+ }
147
+ function O(e = {}) {
148
+ h.value = { ...e || {} }, o.value && (n.value = { ...n.value, pageIndex: 0 });
149
+ }
150
+ function V(e = []) {
151
+ s.value = (e || []).slice(), o.value || (c.value = s.value.length);
152
+ }
153
+ function Q(e = []) {
154
+ P.value = (e || []).slice();
155
+ try {
156
+ const a = A(e || []), m = a.filter((g) => g.fixed === "left").map((g) => g.key), p = a.filter((g) => g.fixed === "right").map((g) => g.key);
157
+ x.setColumnPinning?.({ left: m, right: p });
158
+ } catch {
159
+ }
160
+ }
161
+ function G(e) {
162
+ if (!e)
163
+ return;
164
+ const a = x.getColumn(e);
165
+ if (a && typeof a.toggleSorting == "function") {
166
+ a.toggleSorting(void 0, !1);
167
+ return;
168
+ }
169
+ const m = i.value?.[0];
170
+ m?.id === e ? i.value = [{ id: e, desc: !m.desc }] : i.value = [{ id: e, desc: !1 }];
171
+ }
172
+ return M(
173
+ () => [t, u],
174
+ () => {
175
+ Array.isArray(t) && V(t);
176
+ },
177
+ { deep: !0 }
178
+ ), M(
179
+ () => [n.value.pageIndex, n.value.pageSize, R.value.id, R.value.desc],
180
+ () => {
181
+ o.value && C();
182
+ }
183
+ ), M(
184
+ () => h.value,
185
+ () => {
186
+ o.value && C();
187
+ },
188
+ { deep: !0 }
189
+ ), o.value ? C() : c.value = s.value.length, {
190
+ table: x,
191
+ loading: z,
192
+ query: h,
193
+ page: k,
194
+ pageSize: I,
195
+ total: c,
196
+ rows: W,
197
+ sort: G,
198
+ sortState: R,
199
+ sorting: i,
200
+ columnVisibility: y,
201
+ columnPinning: w,
202
+ rowSelection: b,
203
+ load: C,
204
+ setQuery: O,
205
+ setData: V,
206
+ setColumns: Q,
207
+ mode: u
208
+ };
209
+ }
210
+ export {
211
+ Z as useGridTable
212
+ };
@@ -0,0 +1 @@
1
+ .gsc-grid{color:var(--gsc-grid-text-primary);font-size:14px;line-height:1.5715}.gsc-grid .gsc-text-secondary{color:var(--gsc-grid-text-secondary)}.gsc-grid .gsc-card{border:1px solid var(--gsc-grid-divider);border-radius:8px;background:var(--gsc-grid-bg);box-shadow:var(--gsc-grid-shadow-light)}.gsc-grid .gsc-card-pad{padding:12px 16px}.gsc-grid .gsc-querybar{display:grid;grid-gap:12px 16px;gap:12px 16px}.gsc-grid .gsc-form-item{display:flex;align-items:center;gap:8px;min-width:0}.gsc-grid .gsc-form-label{width:96px;flex:0 0 auto;text-align:right;color:var(--gsc-grid-text-secondary);font-size:14px;line-height:32px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gsc-grid .gsc-form-label:after{content:":";margin-left:2px;color:var(--gsc-grid-text-muted)}.gsc-grid .gsc-form-control{flex:1 1 auto;min-width:0}.gsc-grid .gsc-form-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px}.gsc-grid .gsc-range{display:flex;align-items:center;gap:8px;min-width:0}.gsc-grid .gsc-range .gsc-control{width:auto;flex:1 1 0;min-width:0}.gsc-grid .gsc-range-sep{flex:0 0 auto;color:var(--gsc-grid-text-muted)}.gsc-grid .gsc-control{box-sizing:border-box;width:100%;height:32px;padding:4px 11px;border:1px solid var(--gsc-grid-border);border-radius:6px;background:var(--gsc-grid-bg);color:var(--gsc-grid-text-primary);font-size:14px;line-height:22px;transition:border-color .2s,box-shadow .2s;outline:none}.gsc-grid .gsc-control::-moz-placeholder{color:var(--gsc-grid-text-placeholder)}.gsc-grid .gsc-control::placeholder{color:var(--gsc-grid-text-placeholder)}.gsc-grid .gsc-control:hover{border-color:var(--gsc-grid-primary-hover)}.gsc-grid .gsc-control:focus{border-color:var(--gsc-grid-primary);box-shadow:var(--gsc-grid-focus-shadow)}.gsc-grid .gsc-control.gsc-control-auto{width:auto}.gsc-grid .gsc-control.gsc-control-sm{height:28px;padding:0 10px;font-size:14px}.gsc-grid .gsc-control.gsc-control-center{text-align:center}.gsc-grid .gsc-control.gsc-control-page{width:56px}.gsc-grid select.gsc-control{-moz-appearance:none;appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--gsc-grid-text-placeholder) 50%),linear-gradient(135deg,var(--gsc-grid-text-placeholder) 50%,transparent 50%);background-position:calc(100% - 16px) 50%,calc(100% - 11px) 50%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:28px}.gsc-grid .gsc-textarea{box-sizing:border-box;display:block;width:100%;min-height:80px;padding:8px 11px;border:1px solid var(--gsc-grid-border);border-radius:6px;background:var(--gsc-grid-bg);color:var(--gsc-grid-text-primary);font-size:14px;line-height:1.5715;transition:border-color .2s,box-shadow .2s;outline:none}.gsc-grid .gsc-textarea:hover{border-color:var(--gsc-grid-primary-hover)}.gsc-grid .gsc-textarea:focus{border-color:var(--gsc-grid-primary);box-shadow:var(--gsc-grid-focus-shadow)}.gsc-grid .gsc-btn{height:32px;padding:4px 15px;border-radius:6px;font-size:14px;line-height:22px;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;transition:border-color .2s,background-color .2s,color .2s,box-shadow .2s}.gsc-grid .gsc-btn:disabled{cursor:not-allowed;opacity:.5}.gsc-grid .gsc-btn:focus-visible{outline:none;box-shadow:var(--gsc-grid-focus-shadow)}.gsc-grid .gsc-btn.gsc-btn-sm{height:28px;padding:0 10px;font-size:14px;line-height:22px}.gsc-grid .gsc-btn.gsc-btn-icon{width:32px;padding:0;display:inline-flex;align-items:center;justify-content:center}.gsc-grid .gsc-btn-default{border:1px solid var(--gsc-grid-border);background:var(--gsc-grid-bg);color:var(--gsc-grid-text-primary)}.gsc-grid .gsc-btn-default:hover:not(:disabled){border-color:var(--gsc-grid-primary-hover);color:var(--gsc-grid-primary-hover)}.gsc-grid .gsc-btn-default.gsc-btn-icon:hover:not(:disabled){background:var(--gsc-grid-bg-hover-icon)}.gsc-grid .gsc-btn-default.gsc-btn-icon:active:not(:disabled){background:var(--gsc-grid-bg-active-icon)}.gsc-grid .gsc-btn-link{border:0;background:transparent;color:var(--gsc-grid-primary);padding:0 4px}.gsc-grid .gsc-btn-link:hover:not(:disabled){color:var(--gsc-grid-primary-hover);background:transparent}.gsc-grid .gsc-btn-link:active:not(:disabled){color:var(--gsc-grid-primary-active)}.gsc-grid .gsc-btn-primary{border:1px solid var(--gsc-grid-primary);background:var(--gsc-grid-primary);color:var(--gsc-grid-bg)}.gsc-grid .gsc-btn-primary:hover:not(:disabled){border-color:var(--gsc-grid-primary-hover);background:var(--gsc-grid-primary-hover)}.gsc-grid .gsc-btn-primary:active:not(:disabled){border-color:var(--gsc-grid-primary-active);background:var(--gsc-grid-primary-active)}.gsc-grid .gsc-btn-danger{border:1px solid var(--gsc-grid-danger);background:var(--gsc-grid-danger);color:var(--gsc-grid-bg)}.gsc-grid .gsc-btn-danger:hover:not(:disabled){border-color:var(--gsc-grid-danger-hover);background:var(--gsc-grid-danger-hover)}.gsc-grid .gsc-btn-danger:active:not(:disabled){border-color:var(--gsc-grid-danger-active);background:var(--gsc-grid-danger-active)}.gsc-grid .gsc-btn-text{border:1px solid transparent;background:transparent;color:var(--gsc-grid-text-secondary);padding:0 8px;height:24px;border-radius:6px;font-size:12px;line-height:22px}.gsc-grid .gsc-btn-text.gsc-btn-icon-sm{width:24px;padding:0;display:inline-flex;align-items:center;justify-content:center}.gsc-grid .gsc-btn-text.gsc-btn-icon-sm>i{font-size:14px}.gsc-grid .gsc-btn-text:hover:not(:disabled){background:var(--gsc-grid-bg-hover-text);color:var(--gsc-grid-text-primary)}.gsc-grid .gsc-btn-text:active:not(:disabled){background:var(--gsc-grid-bg-active-text);color:var(--gsc-grid-text-primary)}.gsc-grid .gsc-pager{display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap}.gsc-grid .gsc-pager .gsc-pager-jumper{display:inline-flex;align-items:center;gap:8px}.gsc-grid .gsc-table{width:100%;border-collapse:collapse;table-layout:fixed}.gsc-grid .gsc-thead{background:var(--gsc-grid-bg-hover)}.gsc-grid .gsc-th{border-bottom:1px solid var(--gsc-grid-divider);padding:10px 12px;text-align:left;font-weight:500;color:var(--gsc-grid-text-primary);-webkit-user-select:none;-moz-user-select:none;user-select:none}.gsc-grid .gsc-td{border-bottom:1px solid var(--gsc-grid-divider);padding:8px 12px;color:var(--gsc-grid-text-primary);background:var(--gsc-grid-bg)}.gsc-grid .gsc-tr{transition:background-color .2s}.gsc-grid .gsc-tr:hover,.gsc-grid .gsc-tr:hover .gsc-td{background:var(--gsc-grid-bg-hover)}.gsc-grid .gsc-divider-top{border-top:1px solid var(--gsc-grid-divider)}.gsc-grid .gsc-checkbox{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:16px;height:16px;border:1px solid var(--gsc-grid-border);border-radius:4px;background:var(--gsc-grid-bg);display:inline-grid;place-content:center;cursor:pointer;vertical-align:middle;transition:border-color .2s,background-color .2s,box-shadow .2s}.gsc-grid .gsc-checkbox:hover{border-color:var(--gsc-grid-primary-hover)}.gsc-grid .gsc-checkbox:focus-visible{outline:none;box-shadow:var(--gsc-grid-focus-shadow)}.gsc-grid .gsc-checkbox:checked{background:var(--gsc-grid-primary);border-color:var(--gsc-grid-primary)}.gsc-grid .gsc-checkbox:checked:after{content:"";width:4px;height:8px;border:2px solid var(--gsc-grid-bg);border-top:0;border-left:0;transform:rotate(45deg);margin-top:-1px}.gsc-grid .gsc-checkbox:indeterminate{background:var(--gsc-grid-primary);border-color:var(--gsc-grid-primary)}.gsc-grid .gsc-checkbox:indeterminate:after{content:"";width:8px;height:2px;background:var(--gsc-grid-bg);border-radius:1px}.gsc-grid .gsc-popover{border:1px solid var(--gsc-grid-divider);border-radius:10px;background:var(--gsc-grid-bg);box-shadow:var(--gsc-grid-shadow-popover)}
@@ -0,0 +1,15 @@
1
+ function b(d = "export.csv", c = [], i = []) {
2
+ const l = c.map((n) => n.title || n.header || n.key).join(","), s = i.map((n) => c.map((p) => {
3
+ const o = n[p.key];
4
+ if (o == null)
5
+ return "";
6
+ const t = String(o).replace(/"/g, '""');
7
+ return t.includes(",") || t.includes(`
8
+ `) ? `"${t}"` : t;
9
+ }).join(",")), a = [l, ...s].join(`
10
+ `), u = new Blob([a], { type: "text/csv;charset=utf-8;" }), r = URL.createObjectURL(u), e = document.createElement("a");
11
+ e.href = r, e.download = d, document.body.appendChild(e), e.click(), document.body.removeChild(e), URL.revokeObjectURL(r);
12
+ }
13
+ export {
14
+ b as exportToCsv
15
+ };
@@ -1,28 +1,30 @@
1
1
  import './styles/tokens.css';/* empty css */
2
2
  import { GscConfigProvider as t } from "./ConfigProvider/index.js";
3
- import { GscCodeEditor as f } from "./CodeEditor/index.js";
3
+ import { GscCodeEditor as a } from "./CodeEditor/index.js";
4
4
  import { GscScaleScreen as i } from "./ScaleScreen/index.js";
5
- import { GscVideoBackground as d } from "./VideoBackground/index.js";
6
- import { configProviderContextKey as p, defaultInitialZIndex as m, defaultNamespace as s, localeContextKey as c, sizeInjectionKey as C, zIndexContextKey as u } from "./ConfigProvider/src/constants.js";
7
- import { provideGlobalConfig as g, useGlobalComponentSettings as y, useGlobalConfig as I } from "./ConfigProvider/src/useGlobalConfig.js";
8
- import { default as S } from "./locale/lang/zh-CN.js";
9
- import { default as v } from "./locale/lang/en-US.js";
10
- import { default as P } from "./locale/lang/ja-JP.js";
5
+ import { GscVideoBackground as l } from "./VideoBackground/index.js";
6
+ import { GscGrid as p } from "./Grid/index.js";
7
+ import { default as s } from "./locale/lang/zh-CN.js";
8
+ import { default as C } from "./locale/lang/en-US.js";
9
+ import { default as u } from "./locale/lang/ja-JP.js";
10
+ import { configProviderContextKey as y, defaultInitialZIndex as I, defaultNamespace as K, localeContextKey as S, sizeInjectionKey as b, zIndexContextKey as v } from "./ConfigProvider/src/constants.js";
11
+ import { provideGlobalConfig as P, useGlobalComponentSettings as j, useGlobalConfig as N } from "./ConfigProvider/src/useGlobalConfig.js";
11
12
  export {
12
- f as GscCodeEditor,
13
+ a as GscCodeEditor,
13
14
  t as GscConfigProvider,
15
+ p as GscGrid,
14
16
  i as GscScaleScreen,
15
- d as GscVideoBackground,
16
- p as configProviderContextKey,
17
- m as defaultInitialZIndex,
18
- s as defaultNamespace,
19
- v as enUS,
20
- P as jaJP,
21
- c as localeContextKey,
22
- g as provideGlobalConfig,
23
- C as sizeInjectionKey,
24
- y as useGlobalComponentSettings,
25
- I as useGlobalConfig,
26
- u as zIndexContextKey,
27
- S as zhCN
17
+ l as GscVideoBackground,
18
+ y as configProviderContextKey,
19
+ I as defaultInitialZIndex,
20
+ K as defaultNamespace,
21
+ C as enUS,
22
+ u as jaJP,
23
+ S as localeContextKey,
24
+ P as provideGlobalConfig,
25
+ b as sizeInjectionKey,
26
+ j as useGlobalComponentSettings,
27
+ N as useGlobalConfig,
28
+ v as zIndexContextKey,
29
+ s as zhCN
28
30
  };
@@ -24,6 +24,46 @@ const e = {
24
24
  copy: "Copy",
25
25
  copied: "Copied"
26
26
  }
27
+ },
28
+ grid: {
29
+ queryBar: {
30
+ placeholder: {
31
+ select: "Please select",
32
+ input: "Please enter"
33
+ },
34
+ action: {
35
+ reset: "Reset",
36
+ search: "Search",
37
+ expand: "Expand",
38
+ collapse: "Collapse"
39
+ }
40
+ },
41
+ actionBar: {
42
+ export: "Export",
43
+ info: "Info"
44
+ },
45
+ columnSettings: {
46
+ trigger: "Columns",
47
+ title: "Visible columns",
48
+ close: "Close",
49
+ checkAll: "Select all",
50
+ uncheckAll: "Clear all"
51
+ },
52
+ columnFilter: {
53
+ all: "All",
54
+ clear: "Clear",
55
+ apply: "Apply"
56
+ },
57
+ pager: {
58
+ total: "Total {total}",
59
+ pageSize: "{size} / page"
60
+ },
61
+ table: {
62
+ dragReorder: "Drag to reorder columns",
63
+ filter: "Filter",
64
+ loading: "Loading...",
65
+ empty: "No data"
66
+ }
27
67
  }
28
68
  }
29
69
  };
@@ -1,4 +1,4 @@
1
- const a = {
1
+ const e = {
2
2
  gsc: {
3
3
  locale: "ja-JP",
4
4
  global: {
@@ -24,9 +24,49 @@ const a = {
24
24
  copy: "コピー",
25
25
  copied: "コピー済み"
26
26
  }
27
+ },
28
+ grid: {
29
+ queryBar: {
30
+ placeholder: {
31
+ select: "選択してください",
32
+ input: "入力してください"
33
+ },
34
+ action: {
35
+ reset: "リセット",
36
+ search: "検索",
37
+ expand: "展開",
38
+ collapse: "折りたたむ"
39
+ }
40
+ },
41
+ actionBar: {
42
+ export: "エクスポート",
43
+ info: "情報"
44
+ },
45
+ columnSettings: {
46
+ trigger: "列設定",
47
+ title: "表示列",
48
+ close: "閉じる",
49
+ checkAll: "全選択",
50
+ uncheckAll: "全解除"
51
+ },
52
+ columnFilter: {
53
+ all: "すべて",
54
+ clear: "クリア",
55
+ apply: "適用"
56
+ },
57
+ pager: {
58
+ total: "合計 {total}",
59
+ pageSize: "{size} / ページ"
60
+ },
61
+ table: {
62
+ dragReorder: "ドラッグして列順を変更",
63
+ filter: "絞",
64
+ loading: "読み込み中...",
65
+ empty: "データなし"
66
+ }
27
67
  }
28
68
  }
29
69
  };
30
70
  export {
31
- a as default
71
+ e as default
32
72
  };
@@ -1,4 +1,4 @@
1
- const a = {
1
+ const e = {
2
2
  gsc: {
3
3
  locale: "zh-CN",
4
4
  global: {
@@ -24,9 +24,49 @@ const a = {
24
24
  copy: "复制",
25
25
  copied: "已复制"
26
26
  }
27
+ },
28
+ grid: {
29
+ queryBar: {
30
+ placeholder: {
31
+ select: "请选择",
32
+ input: "请输入"
33
+ },
34
+ action: {
35
+ reset: "重置",
36
+ search: "查询",
37
+ expand: "展开",
38
+ collapse: "收起"
39
+ }
40
+ },
41
+ actionBar: {
42
+ export: "导出",
43
+ info: "查看信息"
44
+ },
45
+ columnSettings: {
46
+ trigger: "列设置",
47
+ title: "显示列",
48
+ close: "关闭",
49
+ checkAll: "全选",
50
+ uncheckAll: "全不选"
51
+ },
52
+ columnFilter: {
53
+ all: "全部",
54
+ clear: "清除",
55
+ apply: "应用"
56
+ },
57
+ pager: {
58
+ total: "共 {total} 条",
59
+ pageSize: "{size} 条/页"
60
+ },
61
+ table: {
62
+ dragReorder: "拖拽调整列顺序",
63
+ filter: "筛",
64
+ loading: "加载中...",
65
+ empty: "暂无数据"
66
+ }
27
67
  }
28
68
  }
29
69
  };
30
70
  export {
31
- a as default
71
+ e as default
32
72
  };
@@ -1 +1 @@
1
- :root{--gsc-basic-primary-color: #2c9cfa;--gsc-basic-border-color: #eee;--gsc-basic-border-radius-base: 4px}.dark{--gsc-basic-border-color: #303030}
1
+ :root{--gsc-basic-primary-color: #2c9cfa;--gsc-basic-border-color: #eee;--gsc-basic-border-radius-base: 4px;--gsc-grid-primary: #1677ff;--gsc-grid-primary-hover: #4096ff;--gsc-grid-primary-active: #0958d9;--gsc-grid-border: #d9d9d9;--gsc-grid-divider: #f0f0f0;--gsc-grid-bg-hover: #fafafa;--gsc-grid-focus-shadow: 0 0 0 2px rgb(5 145 255 / .1);--gsc-grid-text-primary: rgb(0 0 0 / .88);--gsc-grid-text-secondary: rgb(0 0 0 / .65);--gsc-grid-text-placeholder: rgb(0 0 0 / .45);--gsc-grid-text-muted: rgb(0 0 0 / .25);--gsc-grid-bg: #fff;--gsc-grid-shadow-light: 0 1px 2px rgb(0 0 0 / .03);--gsc-grid-shadow-popover: 0 6px 16px rgb(0 0 0 / .08);--gsc-grid-danger: #ff4d4f;--gsc-grid-danger-hover: #ff7875;--gsc-grid-danger-active: #d9363e;--gsc-grid-bg-hover-text: rgb(0 0 0 / .04);--gsc-grid-bg-active-text: rgb(0 0 0 / .08);--gsc-grid-bg-hover-icon: rgb(0 0 0 / .02);--gsc-grid-bg-active-icon: rgb(0 0 0 / .05)}.dark{--gsc-basic-border-color: #303030}
package/dist/lib/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const n=require("./src/index.js"),e=require("./src/ConfigProvider/src/constants.js"),o=require("./src/ConfigProvider/src/useGlobalConfig.js"),r=require("./src/ConfigProvider/index.js"),s=require("./src/CodeEditor/index.js"),c=require("./src/ScaleScreen/index.js"),l=require("./src/VideoBackground/index.js"),d=require("./src/locale/lang/zh-CN.js"),a=require("./src/locale/lang/en-US.js"),u=require("./src/locale/lang/ja-JP.js"),f={install:t=>{for(const i in n)t.use(n[i])}};exports.configProviderContextKey=e.configProviderContextKey;exports.defaultInitialZIndex=e.defaultInitialZIndex;exports.defaultNamespace=e.defaultNamespace;exports.localeContextKey=e.localeContextKey;exports.sizeInjectionKey=e.sizeInjectionKey;exports.zIndexContextKey=e.zIndexContextKey;exports.provideGlobalConfig=o.provideGlobalConfig;exports.useGlobalComponentSettings=o.useGlobalComponentSettings;exports.useGlobalConfig=o.useGlobalConfig;exports.GscConfigProvider=r.GscConfigProvider;exports.GscCodeEditor=s.GscCodeEditor;exports.GscScaleScreen=c.GscScaleScreen;exports.GscVideoBackground=l.GscVideoBackground;exports.zhCN=d.default;exports.enUS=a.default;exports.jaJP=u.default;exports.default=f;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const t=require("./src/index.js"),c=require("./src/locale/lang/zh-CN.js"),s=require("./src/locale/lang/en-US.js"),l=require("./src/locale/lang/ja-JP.js"),e=require("./src/ConfigProvider/src/constants.js"),o=require("./src/ConfigProvider/src/useGlobalConfig.js"),d=require("./src/ConfigProvider/index.js"),a=require("./src/CodeEditor/index.js"),u=require("./src/ScaleScreen/index.js"),f=require("./src/VideoBackground/index.js"),C=require("./src/Grid/index.js"),G={install:i=>{for(const r in t){const n=t[r];n&&(typeof n=="function"||typeof n=="object")&&"install"in n&&i.use(n)}}};exports.zhCN=c.default;exports.enUS=s.default;exports.jaJP=l.default;exports.configProviderContextKey=e.configProviderContextKey;exports.defaultInitialZIndex=e.defaultInitialZIndex;exports.defaultNamespace=e.defaultNamespace;exports.localeContextKey=e.localeContextKey;exports.sizeInjectionKey=e.sizeInjectionKey;exports.zIndexContextKey=e.zIndexContextKey;exports.provideGlobalConfig=o.provideGlobalConfig;exports.useGlobalComponentSettings=o.useGlobalComponentSettings;exports.useGlobalConfig=o.useGlobalConfig;exports.GscConfigProvider=d.GscConfigProvider;exports.GscCodeEditor=a.GscCodeEditor;exports.GscScaleScreen=u.GscScaleScreen;exports.GscVideoBackground=f.GscVideoBackground;exports.GscGrid=C.GscGrid;exports.default=G;