@ithinkdt/ui 4.0.0-12 → 4.0.0-121

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 (59) hide show
  1. package/dist/components-DzRIHIhy.js +1650 -0
  2. package/dist/components.js +5 -0
  3. package/dist/directives-DUuJW647.js +183 -0
  4. package/dist/directives.js +3 -0
  5. package/dist/index.js +1224 -0
  6. package/dist/page.js +519 -0
  7. package/dist/use-i18n-Dx7V4KrY.js +6 -0
  8. package/dist/use-style-DcT-1dj4.js +29 -0
  9. package/dist/use-style.js +2 -0
  10. package/{src → esm}/components.d.ts +16 -3
  11. package/esm/components.js +1 -0
  12. package/{src → esm}/design.d.ts +9 -0
  13. package/esm/directives.js +1 -0
  14. package/esm/index.js +1 -0
  15. package/{src → esm}/page.d.ts +43 -26
  16. package/esm/page.js +1 -0
  17. package/esm/use-style.js +1 -0
  18. package/locale.d.ts +4 -0
  19. package/package.json +31 -28
  20. package/unocss-preset.d.ts +5 -0
  21. package/unocss-preset.js +163 -0
  22. package/src/components/Checkboxes.jsx +0 -128
  23. package/src/components/DataActions.jsx +0 -107
  24. package/src/components/DataCustom.jsx +0 -172
  25. package/src/components/DataFilter.jsx +0 -113
  26. package/src/components/DataForm.jsx +0 -264
  27. package/src/components/DataLocaleInput.jsx +0 -121
  28. package/src/components/DataPagination.jsx +0 -62
  29. package/src/components/DataSelection.jsx +0 -57
  30. package/src/components/DataTable.jsx +0 -243
  31. package/src/components/Radios.jsx +0 -120
  32. package/src/components/UserDept.jsx +0 -643
  33. package/src/components/assets.jsx +0 -274
  34. package/src/components/index.js +0 -11
  35. package/src/design/Account.jsx +0 -152
  36. package/src/design/Appearance.jsx +0 -89
  37. package/src/design/Breadcrumb.jsx +0 -67
  38. package/src/design/Fullscreen.jsx +0 -65
  39. package/src/design/Language.jsx +0 -45
  40. package/src/design/Layout.jsx +0 -241
  41. package/src/design/Logo.jsx +0 -91
  42. package/src/design/Menu.jsx +0 -133
  43. package/src/design/MultiTabs.jsx +0 -501
  44. package/src/design/Notification.jsx +0 -322
  45. package/src/design/common.jsx +0 -19
  46. package/src/design/index.js +0 -10
  47. package/src/directives/index.js +0 -2
  48. package/src/directives/spin.js +0 -181
  49. package/src/directives/tooltip.jsx +0 -121
  50. package/src/index.js +0 -18
  51. package/src/page.jsx +0 -626
  52. package/src/use-i18n.js +0 -8
  53. package/src/use-style.js +0 -58
  54. package/src/utils.js +0 -20
  55. package/unocss.d.ts +0 -5
  56. package/unocss.js +0 -95
  57. /package/{src → esm}/directives.d.ts +0 -0
  58. /package/{src → esm}/index.d.ts +0 -0
  59. /package/{src → esm}/use-style.d.ts +0 -0
@@ -1,107 +0,0 @@
1
- import { NButton, NDropdown } from 'ithinkdt-ui'
2
- import { computed, defineComponent } from 'vue'
3
- import { VOverflow, VResizeObserver } from 'vueuc'
4
-
5
- import { IMore } from './assets.jsx'
6
-
7
- export const DataActions = /* @__PURE__ */ defineComponent({
8
- name: 'DataActions',
9
- props: {
10
- options: {
11
- type: Array,
12
- default: () => [],
13
- },
14
- },
15
- setup(props) {
16
- const ofRef = ref()
17
- let isFirstResize = true
18
- const onResize = () => {
19
- if (isFirstResize) {
20
- isFirstResize = false
21
- } else {
22
- ofRef.value?.sync({
23
- showAllItemsBeforeCalculate: true,
24
- })
25
- }
26
- }
27
- const counter = ref()
28
- const getCounter = () => {
29
- return counter.value
30
- }
31
- const ellipsisFromIndexRef = ref(-1)
32
- const onUpdateCount = (count) => {
33
- ellipsisFromIndexRef.value = props.options.length - count
34
- }
35
- const onUpdateOverflow = (overflow) => {
36
- if (!overflow) {
37
- ellipsisFromIndexRef.value = -1
38
- }
39
- }
40
- const updateCounter = () => {}
41
- const moreOptions = computed(() => {
42
- if (ellipsisFromIndexRef.value === -1) return []
43
- return props.options.slice(ellipsisFromIndexRef.value).map((act) => {
44
- return {
45
- ...act,
46
- key: act.text,
47
- }
48
- })
49
- })
50
-
51
- const renderLabel = (act) => {
52
- const color = act.color === 'danger'
53
- ? 'error'
54
- : ['default', 'tertiary', 'primary', 'info', 'success', 'warning', 'error'].includes(act.color)
55
- ? act.color
56
- : 'primary'
57
- return (
58
- <NButton type={color} text>
59
- {act.text}
60
- </NButton>
61
- )
62
- }
63
-
64
- const onSelect = (key, act) => {
65
- act.onClick?.()
66
- }
67
-
68
- return () => {
69
- return (
70
- <VResizeObserver onResize={onResize}>
71
- <VOverflow
72
- ref={ofRef}
73
- getCounter={getCounter}
74
- onUpdateCount={onUpdateCount}
75
- onUpdateOverflow={onUpdateOverflow}
76
- updateCounter={updateCounter}
77
- style="width: 100%; display: flex; overflow: hidden; align-items: center; line-height: 1.25;"
78
- >
79
- { {
80
- default: () => props.options.map((act) => {
81
- const color = act.color === 'danger'
82
- ? 'error'
83
- : ['default', 'tertiary', 'primary', 'info', 'success', 'warning', 'error'].includes(act.color)
84
- ? act.color
85
- : 'primary'
86
- return (
87
- <span>
88
- <NButton quaternary type={color} size="small" onClick={act.onClick}>
89
- {act.text}
90
- </NButton>
91
- </span>
92
- )
93
- }),
94
- counter: () => (
95
- <span ref={counter}>
96
- <NDropdown options={moreOptions.value} renderLabel={renderLabel} onSelect={onSelect}>
97
- <NButton quaternary size="small"><IMore style="font-size: 14px; color: #888" /></NButton>
98
- </NDropdown>
99
- </span>
100
- ),
101
- }}
102
- </VOverflow>
103
- </VResizeObserver>
104
- )
105
- }
106
- },
107
- })
@@ -1,172 +0,0 @@
1
- import { NButton, NCheckbox, NEllipsis, NFlex, NIcon, NPopover } from 'ithinkdt-ui'
2
- import { Sortable } from 'sortablejs/modular/sortable.core.esm.js'
3
- import { defineComponent, ref, toValue, watch, withDirectives } from 'vue'
4
-
5
- import { vTooltip } from '../directives/tooltip.jsx'
6
- import { useI18n } from '../use-i18n.js'
7
-
8
- import { ICustom, IDrag, ILeft, IRight } from './assets.jsx'
9
-
10
- const DataCustomItem = /* @__PURE__ */ defineComponent({
11
- name: 'DataCustomRow',
12
- props: {
13
- label: [String, Function],
14
- disabled: Boolean,
15
- hidden: Boolean,
16
- fixed: [Boolean, String],
17
- },
18
- emits: ['update-hidden', 'update-fixed'],
19
- setup(props, { emit }) {
20
- return () => {
21
- return (
22
- <NFlex align="center" wrap={false} size="small">
23
- <NButton type="primary" text class="icon-drag">
24
- <NIcon size="18">
25
- <IDrag />
26
- </NIcon>
27
- </NButton>
28
- <NCheckbox
29
- checked={!props.hidden}
30
- disabled={props.disabled}
31
- onUpdateChecked={v => emit('update-hidden', !v)}
32
- />
33
- <NEllipsis style="flex: 1 1 auto">{toValue(props.label)}</NEllipsis>
34
- <NButton
35
- text
36
- type={props.fixed === 'left' ? 'primary' : undefined}
37
- onClick={() => emit('update-fixed', props.fixed === 'left' ? false : 'left')}
38
- >
39
- <NIcon>
40
- <ILeft />
41
- </NIcon>
42
- </NButton>
43
- <NButton
44
- text
45
- type={props.fixed === 'right' ? 'primary' : undefined}
46
- onClick={() => emit('update-fixed', props.fixed === 'right' ? false : 'right')}
47
- >
48
- <NIcon>
49
- <IRight />
50
- </NIcon>
51
- </NButton>
52
- </NFlex>
53
- )
54
- }
55
- },
56
- })
57
-
58
- export const DataCustom = /* @__PURE__ */ defineComponent({
59
- name: 'DataCustom',
60
- props: {
61
- data: {
62
- type: Array,
63
- required: true,
64
- },
65
- keyField: {
66
- type: String,
67
- default: 'key',
68
- },
69
- labelField: {
70
- type: String,
71
- default: 'label',
72
- },
73
- fixedField: {
74
- type: String,
75
- default: 'fixed',
76
- },
77
- hiddenField: {
78
- type: String,
79
- default: 'hidden',
80
- },
81
- showFixed: {
82
- type: Boolean,
83
- default: false,
84
- },
85
- disabledField: {
86
- type: String,
87
- default: 'disabled',
88
- },
89
- visiblityField: {
90
- type: String,
91
- default: 'visiblity',
92
- },
93
- tooltip: [String, Object],
94
- },
95
- emits: {
96
- custom: () => true,
97
- },
98
- setup(props, { emit }) {
99
- const { t } = useI18n()
100
-
101
- function emitCols(col, field, value) {
102
- emit('custom', {
103
- key: col.key,
104
- [field]: value,
105
- })
106
- }
107
-
108
- const ulRef = ref()
109
-
110
- watch(ulRef, (inst) => {
111
- if (!inst.$el) return
112
- Sortable.create(inst.$el, {
113
- animation: 150,
114
- ghostClass: 'ghost',
115
- handle: '.icon-drag',
116
- filter: '.disabled',
117
- onEnd(e) {
118
- const orders = props.data.map(item => item[props.keyField])
119
- const [curr] = orders.splice(e.oldIndex, 1)
120
- orders.splice(e.newIndex, 0, curr)
121
- emit('custom', orders)
122
- },
123
- })
124
- })
125
-
126
- return () => (
127
- <NPopover
128
- trigger="click"
129
- scrollable
130
- placement="left-start"
131
- displayDirective="show"
132
- style="max-height: 400px; width: 240px"
133
- >
134
- {{
135
- trigger: () =>
136
- withDirectives(
137
- <NButton text>
138
- <NIcon size="20">
139
- <ICustom />
140
- </NIcon>
141
- </NButton>,
142
- [[vTooltip, props.tooltip ?? t('common.page.custom.tooltip')]],
143
- ),
144
- default: () => (
145
- <NFlex vertical>
146
- <NFlex justify="space-between">
147
- <div style="font-weight: bold">{props.tooltip ?? t('common.page.custom.tooltip') }</div>
148
- <NButton text type="primary" size="small" onClick={() => emit('custom', true)}>
149
- { t('common.page.custom.reset') }
150
- </NButton>
151
- </NFlex>
152
- <NFlex ref={ulRef} vertical>
153
- {props.data
154
- .filter(item => item[props.visiblityField] !== false)
155
- .map(item => (
156
- <DataCustomItem
157
- key={item[props.keyField]}
158
- label={item[props.labelField]}
159
- hidden={item[props.hiddenField]}
160
- fixed={item[props.fixedField]}
161
- onUpdateHidden={v => emitCols(item, 'hidden', v)}
162
- onUpdateFixed={v => emitCols(item, 'fixed', v)}
163
- />
164
- ))}
165
- </NFlex>
166
- </NFlex>
167
- ),
168
- }}
169
- </NPopover>
170
- )
171
- },
172
- })
@@ -1,113 +0,0 @@
1
- import { NButton, NFlex, formProps } from 'ithinkdt-ui'
2
- import { defineComponent, reactive, ref } from 'vue'
3
-
4
- import { pickProps } from '@ithinkdt/common/object'
5
-
6
- import { useI18n } from '../use-i18n.js'
7
-
8
- import { DataForm } from './DataForm.jsx'
9
- import { IDown, IUp } from './assets.jsx'
10
-
11
- export const DataFilter = /* @__PURE__ */ defineComponent({
12
- name: 'DataFilter',
13
- props: {
14
- grid: {
15
- type: Object,
16
- default: () => ({}),
17
- },
18
- ...pickProps(formProps, 'disabled', 'model'),
19
- labelWidth: { type: [String, Number], default: '5em' },
20
- labelPlacement: { type: String, default: 'left' },
21
- items: { type: Array, required: true },
22
- loading: { type: Boolean, required: false, default: false },
23
- filterOnReset: { type: Boolean, required: false, default: true },
24
- filterText: { type: String, default: undefined },
25
- resetText: { type: String, default: undefined },
26
- customizable: { type: Boolean, required: false, default: true },
27
- collapsible: { type: Boolean, required: false, default: true },
28
- defaultCollapsed: { type: Boolean, required: false, default: true },
29
- },
30
- emits: ['filter', 'reset', 'custom', 'collapse'],
31
- setup(props, { expose, emit }) {
32
- const { t } = useI18n()
33
-
34
- const onSubmit = (e) => {
35
- emit('filter', props.model, e)
36
- }
37
- const onReset = (e) => {
38
- emit('reset', e)
39
- if (props.filterOnReset) {
40
- emit('filter', props.model, e)
41
- }
42
- }
43
- const collapsed = ref(props.defaultCollapsed)
44
- const collapse = (collapsedValue) => {
45
- collapsed.value = collapsedValue
46
- }
47
-
48
- expose({
49
- collapse,
50
- })
51
-
52
- const action = reactive({
53
- span: 6,
54
- suffix: true,
55
- })
56
-
57
- return () => {
58
- const { filterOnReset, filterText, resetText, customizable, defaultCollapsed, collapsible, grid, ...formProps } = props
59
-
60
- return (
61
- <DataForm
62
- grid={
63
- {
64
- cols: '12 768:18 1280:24 1536:30',
65
- yGap: 20,
66
- xGap: 8,
67
- ...grid,
68
- collapsed: collapsed.value,
69
- }
70
- }
71
- {...formProps}
72
- showFeedback={false}
73
- showAction={action}
74
- onSubmit={onSubmit}
75
- onReset={onReset}
76
- >
77
- {{
78
- action: ({ cols, spans }) => {
79
- action.suffix = cols < (spans + action.span)
80
-
81
- return (
82
- <NFlex justify={action.suffix ? 'end' : 'start'} align="center">
83
- {action.suffix ? undefined : <span>&nbsp;&nbsp;&nbsp;&nbsp;</span>}
84
- <NButton attrType="submit" type="primary" disabled={props.disabled} loading={props.loading}>
85
- {filterText || t('common.page.filter.submitText') }
86
- </NButton>
87
- <NButton attrType="reset" disabled={props.disabled || props.loading}>
88
- {resetText || t('common.page.form.resetText') }
89
- </NButton>
90
- {
91
- collapsible && action.suffix
92
- ? (
93
- <NButton
94
- text
95
- type="primary"
96
- iconPlacement="right"
97
- renderIcon={collapsed.value ? IDown : IUp}
98
- onClick={() => collapse(!collapsed.value)}
99
- >
100
- {collapsed.value ? t('common.page.filter.expand') : t('common.page.filter.collapse') }
101
- </NButton>
102
- )
103
- : undefined
104
- }
105
- </NFlex>
106
- )
107
- },
108
- }}
109
- </DataForm>
110
- )
111
- }
112
- },
113
- })
@@ -1,264 +0,0 @@
1
- import { debouncedWatch, useCurrentElement, useElementSize } from '@vueuse/core'
2
- import { NButton, NFlex, NForm, NFormItem, NGi, NGrid, NIcon, NText, NTooltip, formProps } from 'ithinkdt-ui'
3
- import { defineComponent, ref, toRaw, toValue } from 'vue'
4
-
5
- import { pickProps } from '@ithinkdt/common/object'
6
-
7
- import { useI18n } from '../use-i18n.js'
8
-
9
- import { ICheck, IHelp } from './assets.jsx'
10
-
11
- export const DataForm = /* @__PURE__ */ defineComponent({
12
- name: 'DataForm',
13
- props: {
14
- grid: {
15
- type: Object,
16
- default: () => ({}),
17
- },
18
- ...pickProps(formProps, 'disabled', 'model', 'labelWidth', 'labelAlign', 'showFeedback', 'size'),
19
- readonly: { type: Boolean, required: false, default: undefined },
20
- items: { type: Array, required: true },
21
- validation: { type: Object, default: () => ({}) },
22
- loading: Boolean,
23
- showColon: Boolean,
24
- actionAlign: { type: String, default: 'start' },
25
- showAction: { type: [Boolean, Object], default: undefined },
26
- submitText: { type: [String, Number, Object], default: undefined },
27
- resetText: { type: [String, Number, Object], default: undefined },
28
- cancelText: { type: [String, Number, Object], default: undefined },
29
- showSubmitBtn: { type: Boolean, required: false, default: true },
30
- showResetBtn: { type: Boolean, required: false, default: true },
31
- showCancelBtn: { type: Boolean, required: false, default: false },
32
- submitDisabled: Boolean,
33
- succeeded: Boolean,
34
- successText: { type: [String, Number, Object], default: undefined },
35
- tooltipPlacement: { type: String, default: 'bottom' },
36
- requireMarkPlacement: { type: String, default: 'left' },
37
- labelPlacement: { type: String, default: 'left' },
38
- },
39
- emits: ['submit', 'reset', 'cancel'],
40
- setup(props, { emit, slots }) {
41
- const { t } = useI18n()
42
-
43
- const onSubmit = (e) => {
44
- e?.preventDefault?.()
45
- emit('submit', { ...toRaw(props.model) }, e)
46
- }
47
-
48
- const onReset = (e) => {
49
- e?.preventDefault?.()
50
- emit('reset')
51
- }
52
-
53
- const onCancel = (e) => {
54
- e?.preventDefault?.()
55
- emit('cancel')
56
- }
57
-
58
- const gridRef = ref()
59
-
60
- const cols = ref()
61
- const { width } = useElementSize(useCurrentElement())
62
- debouncedWatch([gridRef, width], () => {
63
- cols.value = undefined
64
- setTimeout(() => {
65
- cols.value = gridRef.value?.responsiveCols || undefined
66
- }, 30)
67
- }, { immediate: true, debounce: 100 })
68
-
69
- return () => {
70
- const { items, loading, validation, showColon, showAction, actionAlign, submitText, submitDisabled, resetText, tooltipPlacement, showFeedback: _showFeedback,
71
- labelWidth = '7.2em', labelAlign = props.labelPlacement === 'top' ? 'left' : 'right', grid, succeeded, successText = submitText, ...formProps } = props
72
-
73
- const showFeedback = !props.readonly && _showFeedback !== false
74
- return (
75
- <NForm
76
- labelWidth={labelWidth}
77
- labelAlign={labelAlign}
78
- onReset={onReset}
79
- onSubmit={onSubmit}
80
- showFeedback={showFeedback}
81
- {...formProps}
82
- >
83
- <NGrid
84
- ref={gridRef}
85
- itemResponsive
86
- {...grid}
87
- yGap={showFeedback ? 0 : (grid?.yGap ?? 24)}
88
- >
89
- {{ default: () => {
90
- let spans = 0
91
- return (
92
- <>
93
- {
94
- items.map(({
95
- hidden, name, render, label, showColon, span = 6, rowSpan, offset = 0, tooltip, tooltipPlacement = props.tooltipPlacement,
96
- validationStatus = validation[name]?.errors?.some(it => it !== undefined)
97
- ? 'error'
98
- : (validation[name]?.warnings?.some(it => it !== undefined)
99
- ? 'warnings'
100
- : (validation[name] ? 'success' : undefined)),
101
- readonly = props.readonly,
102
- showRequireMark = !readonly,
103
- showTooltipWhenReadonly = false,
104
- ...itemProps
105
- }) => {
106
- if (hidden) return
107
- spans += span
108
- let content
109
- if (name[0] === '$') {
110
- content = render({})
111
- } else {
112
- content = (
113
- <NFormItem
114
- path={name}
115
- validationStatus={validationStatus}
116
- showRequireMark={itemProps.required && showRequireMark}
117
- {...itemProps}
118
- >
119
- {{
120
- label: () => (
121
- <NText depth={props.readonly ? 3 : 2} style="display: inline-flex; align-items: flex-start; gap: 1px">
122
- <span>{toValue(label)}</span>
123
- {tooltipPlacement === 'icon'
124
- ? (
125
- <NTooltip>
126
- {{
127
- default: () => toValue(tooltip),
128
- trigger: () => (
129
- <NButton
130
- text
131
- style="font-size: 1.25em; opacity: 0.8"
132
- >
133
- <NIcon>
134
- <IHelp />
135
- </NIcon>
136
- </NButton>
137
- ),
138
- }}
139
- </NTooltip>
140
- )
141
- : undefined}
142
- {props.showColon && showColon !== false
143
- ? <span style="place-self: center">:</span>
144
- : undefined}
145
- </NText>
146
- ),
147
- default: () => {
148
- const vnode = (
149
- <div style="width: 100%; font-size: calc(1rem - 2px); min-height: 32px; display: flex; align-items: center">
150
- {render({ disabled: props.disabled, size: props.size, readonly: props.readonly })}
151
- </div>
152
- )
153
- const showTooltip = tooltip && tooltipPlacement === 'bottom' && (!props.readonly || showTooltipWhenReadonly)
154
-
155
- return showTooltip
156
- ? (
157
- <div
158
- style="width: 100%; display: flex; flex-direction: column"
159
- >
160
- {vnode}
161
- <NText depth={3} style="font-size: calc(1rem - 3px); margin-top: 6px">{toValue(tooltip)}</NText>
162
- </div>
163
- )
164
- : vnode
165
- },
166
- feedback: () => {
167
- return validation[name]?.errors[0] ?? validation[name]?.warnings[0]
168
- },
169
- }}
170
- </NFormItem>
171
- )
172
- }
173
-
174
- if (props.grid === false) {
175
- return content
176
- }
177
-
178
- return (
179
- <NGi
180
- key={name}
181
- offset={offset}
182
- span={span}
183
- style={rowSpan ? { gridRowEnd: `span ${rowSpan}` } : undefined}
184
- >
185
- {content}
186
- </NGi>
187
- )
188
- })
189
- }
190
-
191
- { showAction === false || (props.readonly === true && !slots.action)
192
- ? undefined
193
- : (
194
- <NGi
195
- key="action"
196
- span={Number.MAX_SAFE_INTEGER}
197
- {
198
- ...(typeof props.showAction === 'object' ? props.showAction : {})
199
- }
200
- >
201
- {{
202
- default: ({ overflow }) => {
203
- if (slots.action) return slots.action({ cols: cols.value, spans, overflow })
204
-
205
- return (
206
- <NFormItem
207
- label={props.actionAlign === 'start' ? ' ' : undefined}
208
- showLabel={props.labelPlacement !== 'top'}
209
- style="padding-top: 16px"
210
- >
211
- <NFlex justify={props.actionAlign} align="center">
212
- {
213
- props.showSubmitBtn === false
214
- ? undefined
215
- : (
216
- <NButton attrType="submit" type={succeeded ? 'success' : 'primary'} disabled={succeeded || props.disabled || props.submitDisabled || loading} loading={loading}>
217
- {{
218
- default: () => (succeeded ? successText : submitText) || t('common.page.form.submitText'),
219
- icon: () => succeeded ? <NIcon><ICheck /></NIcon> : undefined,
220
- }}
221
- </NButton>
222
- )
223
- }
224
- {
225
- props.showResetBtn === false
226
- ? undefined
227
- : (
228
- <NButton
229
- attrType="reset"
230
- disabled={props.disabled || loading}
231
- type={props.showCancelBtn ? 'primary' : 'default'}
232
- secondary={props.showCancelBtn}
233
- >
234
- {props.resetText || t('common.page.form.resetText') }
235
- </NButton>
236
- )
237
- }
238
- {
239
- props.showCancelBtn === false
240
- ? undefined
241
- : (
242
- <NButton attrType="button" disabled={props.disabled || loading} onClick={onCancel}>
243
- {props.cancelText || t('common.page.form.cancelText') }
244
- </NButton>
245
- )
246
- }
247
- </NFlex>
248
- </NFormItem>
249
- )
250
- },
251
- }}
252
- </NGi>
253
- )}
254
-
255
- </>
256
- )
257
- } }}
258
-
259
- </NGrid>
260
- </NForm>
261
- )
262
- }
263
- },
264
- })