free-fe-core-modules 0.0.16 → 0.0.17

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 (57) hide show
  1. package/components/Basic/EIcon.vue +3 -0
  2. package/free-field/Fields/AgreementCheck.js +8 -8
  3. package/free-field/Fields/ApiCall.js +1 -1
  4. package/free-field/Fields/Boolean.js +19 -52
  5. package/free-field/Fields/Category.js +1 -1
  6. package/free-field/Fields/Check.js +8 -3
  7. package/free-field/Fields/Column.vue +12 -9
  8. package/free-field/Fields/Customize.js +1 -1
  9. package/free-field/Fields/Date.js +1 -1
  10. package/free-field/Fields/DateRange.js +2 -2
  11. package/free-field/Fields/DynamicList.js +2 -1
  12. package/free-field/Fields/File.vue +393 -0
  13. package/free-field/Fields/FileList.vue +460 -0
  14. package/free-field/Fields/FileListCombined.vue +172 -0
  15. package/free-field/Fields/FixedList.vue +4 -3
  16. package/free-field/Fields/{InputFieldList.vue → FreeFieldList.vue} +34 -11
  17. package/free-field/Fields/Image.vue +361 -0
  18. package/free-field/Fields/ImageList.vue +353 -0
  19. package/free-field/Fields/ImageListCombined.vue +108 -0
  20. package/free-field/Fields/Labels.vue +3 -5
  21. package/free-field/Fields/MixedTable.vue +2 -2
  22. package/free-field/Fields/Number.js +1 -1
  23. package/free-field/Fields/NumberRange.vue +9 -8
  24. package/free-field/Fields/Password.js +1 -1
  25. package/free-field/Fields/Permission.vue +2 -2
  26. package/free-field/Fields/PermissionEditor.vue +2 -2
  27. package/free-field/Fields/QueryFilters.vue +1 -1
  28. package/free-field/Fields/RadioList.vue +3 -3
  29. package/free-field/Fields/Rich.vue +27 -4
  30. package/free-field/Fields/Row.vue +13 -10
  31. package/free-field/Fields/Search.vue +25 -25
  32. package/free-field/Fields/Select.vue +17 -13
  33. package/free-field/Fields/SelectionChain.vue +1 -1
  34. package/free-field/Fields/Separator.js +1 -1
  35. package/free-field/Fields/SingleList.vue +1 -1
  36. package/free-field/Fields/Static.js +1 -1
  37. package/free-field/Fields/String.js +15 -3
  38. package/free-field/Fields/Tabs.vue +9 -9
  39. package/free-field/Fields/Text.js +2 -1
  40. package/free-field/Fields/Time.vue +1 -1
  41. package/free-field/Fields/TimeRange.vue +2 -2
  42. package/free-field/Fields/Year.js +1 -1
  43. package/free-field/Fields/YearRange.vue +2 -2
  44. package/free-field/Fields/index.js +20 -13
  45. package/free-field/composible/fieldWrapper.js +136 -10
  46. package/free-field/composible/useFreeField.js +17 -6
  47. package/free-field/composible/useUploader.js +320 -0
  48. package/free-field/style.scss +173 -0
  49. package/i18n/en-us/index.js +3 -0
  50. package/i18n/fields/en-us/index.js +1 -0
  51. package/i18n/fields/zh-cn/index.js +1 -0
  52. package/i18n/zh-cn/index.js +3 -0
  53. package/index.js +7 -0
  54. package/package.json +1 -1
  55. package/view/menu/index.vue +6 -6
  56. package/view/system/index.vue +1 -1
  57. package/free-field/style.sass +0 -11
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="input-field-rich row no-wrap">
2
+ <div class="free-field-rich row no-wrap">
3
3
  <span
4
4
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
5
5
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
@@ -15,10 +15,10 @@
15
15
  class="required-mark"
16
16
  >*</span>
17
17
  </span>
18
- <span class="content relative-position fit" :class="isValid ? '' : 'input-field--error'">
18
+ <span class="content relative-position fit" :class="isValid ? '' : 'free-field--error'">
19
19
  <slot name="warning"></slot>
20
20
 
21
- <div class="input-field--error-tag" v-if="!isValid">
21
+ <div class="free-field--error-tag" v-if="!isValid">
22
22
  <e-icon name="error"></e-icon>
23
23
  </div>
24
24
 
@@ -183,6 +183,7 @@ export default defineComponent({
183
183
  'aligncenter',
184
184
  'alignright',
185
185
  'alignjustify',
186
+ 'indent2em',
186
187
  '|',
187
188
  'numlist',
188
189
  'bullist',
@@ -244,6 +245,28 @@ export default defineComponent({
244
245
  };
245
246
 
246
247
  const tinySetup = (editor) => {
248
+ // add button for indent 2ems
249
+ editor.on('init', () => {
250
+ editor.formatter.register('indent2em', {
251
+ block: 'p',
252
+ styles: { 'text-indent': '2em' }
253
+ });
254
+ })
255
+
256
+ editor.ui.registry.addToggleButton('indent2em', {
257
+ tooltip: '首行缩进两个字宽度',
258
+ icon: 'indent',
259
+ onAction: function () {
260
+ editor.execCommand('mceToggleFormat', false, 'indent2em');
261
+ },
262
+ onSetup: function (api) {
263
+ editor.formatter.formatChanged('indent2em', function (state) {
264
+ api.setActive(state);
265
+ });
266
+ }
267
+ });
268
+
269
+ // add button for insert field content
247
270
  if (props.enableField) {
248
271
  editor.ui.registry.addButton('insertFieldButton', {
249
272
  text: '数据字段',
@@ -345,7 +368,7 @@ export default defineComponent({
345
368
  // .tox-tinymce-aux
346
369
  // z-index: 6001 !important
347
370
 
348
- .input-field-rich
371
+ .free-field-rich
349
372
  .tox-statusbar__branding
350
373
  display: none
351
374
  .tox-tinymce
@@ -1,20 +1,23 @@
1
1
  <template>
2
- <div class="input-field-row row" :class="rowClasses">
3
- <input-field
4
- v-for="(field, idx) in Field.Options.List"
2
+ <div class="free-field-row row" :class="rowClasses" v-if="Field">
3
+ <free-field
4
+ v-for="(field, idx) in Field.Options?.List"
5
5
  :Field="field"
6
6
  :values="fieldData"
7
7
  :key="idx"
8
- @input="$emit('input')"></input-field>
8
+ @input="$emit('input')"></free-field>
9
9
  </div>
10
10
  </template>
11
11
 
12
12
  <script>
13
- import { InputFieldMixin } from 'eis-admin-mixins';
13
+ import { defineComponent } from 'vue';
14
+ import { freeFieldProps } from '../composible/useFreeField';
14
15
 
15
- export default {
16
+ export default defineComponent({
16
17
  name: 'InputFieldRow',
17
- mixins: [InputFieldMixin],
18
+ props: {
19
+ ...freeFieldProps,
20
+ },
18
21
  fieldInfo: {
19
22
  Category: 'Container',
20
23
  Label: '行',
@@ -23,7 +26,7 @@ export default {
23
26
  {
24
27
  Label: '不换行',
25
28
  Name: 'Options.NoWrap',
26
- Type: 'Bollean',
29
+ Type: 'Boolean',
27
30
  },
28
31
  {
29
32
  Label: '竖向对齐',
@@ -116,10 +119,10 @@ export default {
116
119
  },
117
120
  computed: {
118
121
  rowClasses() {
119
- return '';
122
+ return this.Field.Options?.NoWrap ? 'nowrap' : '' + this.Field.Options?.ItemsAlign + ' ' + this.Field.Options?.JustifyAlign;
120
123
  },
121
124
  },
122
- };
125
+ });
123
126
  </script>
124
127
 
125
128
  <style lang="scss" scoped>
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <span class="input-field-search">
3
- <q-dialog v-model="showSearch" class="input-field-search-dialog" persistent>
4
- <q-card class="input-field-search-dialog-card">
2
+ <span class="free-field-search">
3
+ <q-dialog v-model="showSearch" class="free-field-search-dialog" persistent>
4
+ <q-card class="free-field-search-dialog-card">
5
5
  <q-toolbar>
6
6
  <div class="simple-field full-width">
7
7
  <q-input
@@ -9,24 +9,24 @@
9
9
  v-model="searchKey"
10
10
  hide-bottom-space
11
11
  :placeholder="Field &&
12
- ((Field.Options && Field.Options.SearchPlaceholder) || Field.Placeholder)"
12
+ ((Field.Options?.SearchPlaceholder) || Field.Placeholder)"
13
13
  @keydown.enter="search()"
14
14
  class="full-width"
15
15
  >
16
16
  <template v-slot:append>
17
- <q-btn :class="Field.Options.SearchBtnClasses" :flat="!Field.Options.SearchBtn3D" :round="!Field.Options.SearchBtnRect" icon="search" @click="search()" :disabled="Field.ReadOnly">{{Field.Options.SearchBtnText}}</q-btn>
17
+ <q-btn :class="Field.Options?.SearchBtnClasses" :flat="!Field.Options?.SearchBtn3D" :round="!Field.Options?.SearchBtnRect" icon="search" @click="search()" :disabled="Field.ReadOnly">{{Field.Options.SearchBtnText}}</q-btn>
18
18
  </template>
19
19
  </q-input>
20
20
  </div>
21
21
  </q-toolbar>
22
22
 
23
23
  <q-card-section :style="`
24
- width: ${Field.Options.Width|| '800px'};
25
- max-width: ${Field.Options.MaxWidth|| '80vw'};
24
+ width: ${Field.Options?.Width|| '800px'};
25
+ max-width: ${Field.Options?.MaxWidth|| '80vw'};
26
26
  overflow-y: scroll`">
27
27
  <q-table
28
- :flat="Field.Options && Field.Options.Flat"
29
- :bordered="Field.Options && Field.Options.Bordered"
28
+ :flat="Field.Options?.Flat"
29
+ :bordered="Field.Options?.Bordered"
30
30
  :rows="searchData ? searchData.docs : []"
31
31
  :columns="searchColumns"
32
32
  row-key="id"
@@ -37,7 +37,7 @@
37
37
  >
38
38
  <template v-slot:header="props">
39
39
  <q-tr :props="props">
40
- <q-th auto-width v-if="!Field.Options || !Field.Options.checkOnRight"/>
40
+ <q-th auto-width v-if="!Field.Options?.checkOnRight"/>
41
41
  <q-th
42
42
  v-for="col in props.cols"
43
43
  :key="col.name"
@@ -45,13 +45,13 @@
45
45
  >
46
46
  {{ col.label }}
47
47
  </q-th>
48
- <q-th auto-width v-if="Field.Options && Field.Options.checkOnRight"/>
48
+ <q-th auto-width v-if="Field.Options?.checkOnRight"/>
49
49
  </q-tr>
50
50
  </template>
51
51
  <template v-slot:body="props">
52
52
  <q-tr class="table-row">
53
- <q-td auto-width v-if="!Field.Options || !Field.Options.checkOnRight">
54
- <q-toggle v-model="props.selected" v-if="Field.Options && Field.Options.useToggle"/>
53
+ <q-td auto-width v-if="!Field.Options?.checkOnRight">
54
+ <q-toggle v-model="props.selected" v-if="Field.Options?.useToggle"/>
55
55
  <q-checkbox v-else v-model="props.selected"></q-checkbox>
56
56
  </q-td>
57
57
  <q-td
@@ -62,8 +62,8 @@
62
62
  >
63
63
  {{col.value}}
64
64
  </q-td>
65
- <q-td auto-width v-if="Field.Options && Field.Options.checkOnRight">
66
- <q-toggle v-model="props.selected" v-if="Field.Options && Field.Options.useToggle"/>
65
+ <q-td auto-width v-if="Field.Options?.checkOnRight">
66
+ <q-toggle v-model="props.selected" v-if="Field.Options?.useToggle"/>
67
67
  <q-checkbox v-else v-model="props.selected"></q-checkbox>
68
68
  </q-td>
69
69
  </q-tr>
@@ -92,12 +92,12 @@
92
92
  <q-card-actions>
93
93
  <div class="buttons row full-width justify-center q-ma-sm">
94
94
  <q-btn
95
- :icon="(Field.Options && Field.Options.CancelIcon) || 'cancel'"
95
+ :icon="(Field.Options?.CancelIcon) || 'cancel'"
96
96
  class="cancel-btn q-mr-md"
97
97
  @click="showSearch = false; searchSelected=originalSelected; $emit('input')"
98
98
  >{{$t('cancelButtonText')}}</q-btn>
99
99
  <q-btn
100
- :icon="(Field.Options && Field.Options.OkIcon) || 'check'"
100
+ :icon="(Field.Options?.OkIcon) || 'check'"
101
101
  class="ok-btn" @click="searchOK">{{$t('okButtonText')}}</q-btn>
102
102
  </div>
103
103
  </q-card-actions>
@@ -116,16 +116,16 @@
116
116
  <span v-if="Field.Required" class="required-mark">*</span>
117
117
  </span>
118
118
  <span class="readonly-content">
119
- <span :style="(Field.Info && Field.Info.Style) ? Field.Info.Style : ''">{{searchDisplay}}</span>
119
+ <span :style="(Field.Info?.Style) ? Field.Info.Style : ''">{{searchDisplay}}</span>
120
120
  </span>
121
121
  </span>
122
122
  <q-input
123
123
  v-else
124
124
  modelValue=""
125
- :type="`${Field && Field.Multiple ? 'textarea' : ''}`"
125
+ :type="`${Field?.Multiple ? 'textarea' : ''}`"
126
126
  hide-bottom-space
127
127
  readonly
128
- :class="`${Field && Field.Multiple
128
+ :class="`${Field?.Multiple
129
129
  ? '' : 'simple-field'} ${searchDisplay ? 'has-data' : 'empty'}`"
130
130
  ref="fieldToValid"
131
131
  @click="searchKey = '';searchData = {}; showSearch = true"
@@ -142,13 +142,13 @@
142
142
  >
143
143
  <q-tooltip
144
144
  anchor="top right"
145
- >{{selected[(Field.Options && Field.Options.SearchDisplayField) || 'id']}}</q-tooltip>
146
- {{selected[(Field.Options && Field.Options.SearchDisplayField) || 'id']}}
145
+ >{{selected[(Field.Options?.SearchDisplayField) || 'id']}}</q-tooltip>
146
+ {{selected[(Field.Options?.SearchDisplayField) || 'id']}}
147
147
  </q-chip>
148
148
  </template>
149
149
  <template v-slot:before>
150
150
  <span
151
- :class="`field-label ${(Field.Label && Field.Label.trim().length)
151
+ :class="`field-label ${(Field.Label?.trim().length)
152
152
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
153
153
  v-if="Field.Label !== void 0"
154
154
  >
@@ -501,11 +501,11 @@ export default defineComponent({
501
501
  </script>
502
502
 
503
503
  <style lang="sass" scoped>
504
- .input-field-search-dialog-card
504
+ .free-field-search-dialog-card
505
505
  max-width: unset !important
506
506
  max-height: unset !important
507
507
 
508
- .input-field-search
508
+ .free-field-search
509
509
  .simple-field
510
510
  display: flex
511
511
  </style>
@@ -1,6 +1,6 @@
1
1
  <template>
2
- <span :class="(Field && Field.AsCheck) ? 'input-field-select' :
3
- 'input-field-select simple-field row'">
2
+ <span :class="(Field && Field.AsCheck) ? 'free-field-select' :
3
+ 'free-field-select simple-field row'">
4
4
  <span
5
5
  v-if="!Field.AsCheck"
6
6
  class="row no-wrap items-center full-width inline-block"
@@ -43,10 +43,10 @@
43
43
 
44
44
  <q-select
45
45
  v-else
46
- popup-content-class="input-field-select-control"
46
+ popup-content-class="free-field-select-control"
47
47
  hide-bottom-space
48
48
  :modelValue="fieldData.value"
49
- @update:modelValue="setFieldData"
49
+ @update:modelValue="selectChanged"
50
50
  :options="Field.Options || []"
51
51
  option-value="Value"
52
52
  option-label="Label"
@@ -104,7 +104,7 @@
104
104
  </span>
105
105
  <span
106
106
  v-else
107
- class="input-field-select-ascheck row items-start no-wrap"
107
+ class="free-field-select-ascheck row items-start no-wrap"
108
108
  >
109
109
  <span
110
110
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
@@ -127,11 +127,11 @@
127
127
  </div>
128
128
  <div
129
129
  class="checkbox-list"
130
- :class="hasError ? 'input-field--error' : ''"
130
+ :class="hasError ? 'free-field--error' : ''"
131
131
  >
132
132
 
133
133
  <div
134
- class="input-field--error-tag"
134
+ class="free-field--error-tag"
135
135
  v-if="hasError"
136
136
  >
137
137
  <e-icon name="error"></e-icon>
@@ -311,14 +311,18 @@ export default defineComponent({
311
311
  validate,
312
312
  })
313
313
 
314
+ const selectChanged = (v) => {
315
+ selfValidate();
316
+ setFieldData(v, emit);
317
+ };
318
+
314
319
  const checkChanged = (v) => {
315
320
  selfValidate();
316
321
 
317
322
  if (!props.Field.Multiple) {
318
323
  checked.value = [v];
319
324
  }
320
- setFieldData(checked.value.join(','));
321
- emit('input');
325
+ setFieldData(checked.value.join(','), emit);
322
326
  };
323
327
 
324
328
  const apiCall = () => {
@@ -347,8 +351,7 @@ export default defineComponent({
347
351
  if (d.data && d.data.options) {
348
352
  selectOptions.value = d.data.options;
349
353
  if (d.data.options.findIndex((o) => o.Value === fieldData.value) < 0) {
350
- setFieldData(undefined);
351
- emit('input');
354
+ setFieldData(undefined, emit);
352
355
  }
353
356
  } else {
354
357
  selectOptions.value = [];
@@ -386,6 +389,7 @@ export default defineComponent({
386
389
 
387
390
  readonlyContent,
388
391
 
392
+ selectChanged,
389
393
  checkChanged,
390
394
  };
391
395
  },
@@ -393,7 +397,7 @@ export default defineComponent({
393
397
  </script>
394
398
 
395
399
  <style lang="sass">
396
- .input-field-select
400
+ .free-field-select
397
401
  .q-field__native
398
402
  white-space: nowrap
399
403
  &>span
@@ -402,6 +406,6 @@ export default defineComponent({
402
406
  .checkbox-list
403
407
  position: relative
404
408
  margin-left: 12px
405
- &.input-field--error
409
+ &.free-field--error
406
410
  padding-right: 24px
407
411
  </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="input-field-select-chain row items-start no-wrap">
2
+ <div class="free-field-select-chain row items-start no-wrap">
3
3
  <span
4
4
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
5
5
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
@@ -14,7 +14,7 @@ export default defineComponent({
14
14
  },
15
15
  setup(props){
16
16
  return () => h(QSeparator, {
17
- class: 'input-field-separator',
17
+ class: 'free-field-separator',
18
18
  inset: props.inset,
19
19
  });
20
20
  },
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="input-field-single-list row" v-if="Field">
2
+ <div class="free-field-single-list row" v-if="Field">
3
3
  <span
4
4
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
5
5
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
@@ -18,7 +18,7 @@ export default defineComponent({
18
18
  const { fieldData } = useFreeField(props);
19
19
 
20
20
  return () => h('div', {
21
- class: 'input-field-static',
21
+ class: 'free-field-static',
22
22
  }, [
23
23
  slots.warning && slots.warning(),
24
24
  fieldData.value,
@@ -1,4 +1,4 @@
1
- import { defineComponent, h, computed } from 'vue';
1
+ import { defineComponent, h, computed, getCurrentInstance } from 'vue';
2
2
  import { useFreeField, freeFieldProps } from '../composible/useFreeField';
3
3
  import { QInput } from 'quasar';
4
4
  import ReadonlyContent from '../composible/readonlyContent';
@@ -44,14 +44,25 @@ export default defineComponent({
44
44
  },
45
45
  ],
46
46
  Description: '',
47
+ demoField: [{
48
+ Type: 'Category',
49
+ Label: '测试一下字符串',
50
+ },{
51
+ Type: 'String',
52
+ Name: 'MyName',
53
+ }],
54
+ demoData: {
55
+ MyName: 'Tom'
56
+ },
47
57
  },
48
58
  props: {
49
59
  ...freeFieldProps,
50
60
  },
51
61
  emits: ['input'],
52
- setup(props, { emit, slots, expose }){
62
+ setup(props, { emit, slots, expose, attrs }){
53
63
  if (!props.Field) return {};
54
64
 
65
+ const { proxy:vm } = getCurrentInstance();
55
66
  const { fieldData, setFieldData } = useFreeField(props);
56
67
 
57
68
  const readonlyNode = () => h(ReadonlyContent, {
@@ -77,6 +88,7 @@ export default defineComponent({
77
88
  // bottomSlots: true,
78
89
  hideBottomSpace: true,
79
90
  readonly: props.Field?.ReadOnly,
91
+ placeholder: props.Field?.Placeholder || attrs.placeholder || vm.$t(vm.getModule('core-modules').config['defaultInputFieldPlaceholder']),
80
92
 
81
93
  class: 'full-width',
82
94
  style: props.Field.Info?.Style,
@@ -99,7 +111,7 @@ export default defineComponent({
99
111
  })
100
112
 
101
113
  return () => h('div', {
102
- class: 'simple-field input-field-string row items-center no-wrap',
114
+ class: 'simple-field free-field-string row items-center no-wrap',
103
115
  }, [
104
116
  props.Field.ReadOnly ? readonlyNode() : inputNode.value,
105
117
  slots.warning && slots.warning(),
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <div class="input-field-tabs row no-wrap" v-if="Field">
2
+ <div class="free-field-tabs row no-wrap" v-if="Field">
3
3
  <span
4
4
  :class="`field-label ${(Field.Label && Field.Label.trim().length)
5
5
  ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
@@ -16,20 +16,20 @@
16
16
  >*</span>
17
17
  </span>
18
18
 
19
- <div class="col input-field-tabs-tabs-wrapper">
19
+ <div class="col free-field-tabs-tabs-wrapper">
20
20
  <q-tabs
21
21
  class="tabs"
22
22
  v-model="tab"
23
23
  :shrink="true"
24
24
  no-caps
25
- :vertical="Field.Options.vertical || false"
26
- :align="Field.Options.align || 'left'"
27
- :dense="Field.Options && Field.Options.dense">
25
+ :vertical="Field.Options?.vertical || false"
26
+ :align="Field.Options?.align || 'left'"
27
+ :dense="Field.Options?.dense">
28
28
  <q-tab
29
29
  v-for="(t, idx) in fieldData.value" :key="idx"
30
30
  :name="idx"
31
- :label="t[Field.Options.LabelField]"
32
- :dense="Field.Options && Field.Options.dense">
31
+ :label="t[Field.Options?.LabelField]"
32
+ :dense="Field.Options?.dense">
33
33
  </q-tab>
34
34
  </q-tabs>
35
35
  <q-tab-panels v-model="tab">
@@ -37,7 +37,7 @@
37
37
  v-for="(t, idx) in fieldData.value" :key="idx"
38
38
  :name="idx">
39
39
  <free-field
40
- v-for="(field, idx) in Field.Options.List"
40
+ v-for="(field, idx) in Field.Options?.List"
41
41
  :Field="field"
42
42
  :values="t"
43
43
  :key="idx"
@@ -149,7 +149,7 @@ export default defineComponent({
149
149
  </script>
150
150
 
151
151
  <style lang="scss" scoped>
152
- .input-field-tabs {
152
+ .free-field-tabs {
153
153
  &-tabs-wrapper {
154
154
  margin-left: 12px;
155
155
  border: 1px solid rgba($color: #000000, $alpha: 0.12);
@@ -72,10 +72,11 @@ export default defineComponent({
72
72
  })
73
73
 
74
74
  return () => h('div', {
75
- class: 'input-field-text',
75
+ class: 'free-field-text',
76
76
  }, [
77
77
  slots.warning && h('div', {
78
78
  class: props.Field.Label ? 'warning-with-label' : 'warning-without-label',
79
+ style: props.Field.Label ? 'margin-left: var(--field-label-width)' : '',
79
80
  }, slots.warning()),
80
81
  props.Field.ReadOnly ? readonlyNode() : inputNode.value,
81
82
  ]);
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <span class="simple-field input-field-time row items-center no-wrap">
2
+ <span class="simple-field free-field-time row items-center no-wrap">
3
3
  <span v-if="Field.ReadOnly">
4
4
  <span
5
5
  :class="`field-label field-label-readonly ${(Field.Label && Field.Label.trim().length)
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <span class="simple-field input-field-time-range row items-center no-wrap">
2
+ <span class="simple-field free-field-time-range row items-center no-wrap">
3
3
  <span v-if="Field.ReadOnly">
4
4
  <span
5
5
  :class="`field-label field-label-readonly ${(Field.Label && Field.Label.trim().length)
@@ -56,7 +56,7 @@
56
56
  </template>
57
57
  </q-input>
58
58
 
59
- <span class="input-field-range-separator">{{`${Field.Separator || '~'}`}}</span>
59
+ <span class="free-field-range-separator">{{`${Field.Separator || '~'}`}}</span>
60
60
 
61
61
  <q-input
62
62
  v-model="max"
@@ -131,7 +131,7 @@ export default defineComponent({
131
131
  })
132
132
 
133
133
  return () => h('div', {
134
- class: 'simple-field input-field-year row items-center no-wrap',
134
+ class: 'simple-field free-field-year row items-center no-wrap',
135
135
  }, [
136
136
  selectNode.value,
137
137
  slots.warning && slots.warning(),
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <span class="input-field-year-range simple-field">
2
+ <span class="free-field-year-range simple-field">
3
3
  <span v-if="Field.ReadOnly">
4
4
  <span
5
5
  :class="`field-label field-label-readonly ${(Field.Label && Field.Label.trim().length)
@@ -32,7 +32,7 @@
32
32
  </span>
33
33
  </template>
34
34
  </q-select>
35
- <span class="input-field-range-separator">{{`${Field.Separator || '~'}`}}</span>
35
+ <span class="free-field-range-separator">{{`${Field.Separator || '~'}`}}</span>
36
36
  <q-select
37
37
  v-model="range.max"
38
38
  hide-bottom-space
@@ -6,6 +6,7 @@ import fCategory from './Category.js';
6
6
  import fCheck from './Check.js';
7
7
  import fLabels from './Labels.vue';
8
8
  import fNumber from './Number.js';
9
+ import fNumberRange from './NumberRange.vue';
9
10
  import fPermission from './Permission.vue';
10
11
  import fSearch from './Search.vue';
11
12
  import fText from './Text.js';
@@ -17,25 +18,27 @@ import fYear from './Year.js';
17
18
  import fYearRange from './YearRange.vue';
18
19
  import fRadioList from './RadioList.vue';
19
20
  import fBoolean from './Boolean.js';
20
- // import fFile from './File.vue';
21
- // import fFileList from './FileList.vue';
22
- // import fImage from './Image.vue';
23
- // import fImageList from './ImageList.vue';
21
+ import fFile from './File.vue';
22
+ import fFileList from './FileList.vue';
23
+ import fFileListCombined from './FileListCombined.vue';
24
+ import fImage from './Image.vue';
25
+ import fImageList from './ImageList.vue';
26
+ import fImageListCombined from './ImageListCombined.vue';
24
27
  import fFixedList from './FixedList.vue';
25
28
  import fDynamicList from './DynamicList.js';
26
29
  import fSingleList from './SingleList.vue';
27
30
  import fSelectChain from './SelectionChain.vue';
28
31
  import fRich from './Rich.vue';
29
- import fFieldList from './InputFieldList.vue';
32
+ import fFieldList from './FreeFieldList.vue';
30
33
  import fMixedTable from './MixedTable.vue';
31
34
  import fCustomize from './Customize.js';
32
35
  import fAgreementCheck from './AgreementCheck.js';
33
36
  import fSeparator from './Separator.js';
34
37
  import fQueryFilters from './QueryFilters.vue';
35
- // import fFileListCombined from './FileListCombined.vue';
36
- // import fImageListCombined from './ImageListCombined.vue';
37
38
  import fApiCall from './ApiCall.js';
38
39
  import fTabs from './Tabs.vue';
40
+ import fRow from './Row.vue';
41
+ import fColumn from './Column.vue';
39
42
 
40
43
  export default {
41
44
  Static: fStatic,
@@ -46,6 +49,7 @@ export default {
46
49
  Check: fCheck,
47
50
  Labels: fLabels,
48
51
  Number: fNumber,
52
+ NumberRange: fNumberRange,
49
53
  Permission: fPermission,
50
54
  Search: fSearch,
51
55
  Text: fText,
@@ -57,10 +61,12 @@ export default {
57
61
  YearRange: fYearRange,
58
62
  RadioList: fRadioList,
59
63
  Boolean: fBoolean,
60
- // File: fFile,
61
- // FileList: fFileList,
62
- // Image: fImage,
63
- // ImageList: fImageList,
64
+ File: fFile,
65
+ FileList: fFileList,
66
+ FileListCombined: fFileListCombined,
67
+ Image: fImage,
68
+ ImageList: fImageList,
69
+ ImageListCombined: fImageListCombined,
64
70
  FixedList: fFixedList,
65
71
  DynamicList: fDynamicList,
66
72
  SingleList: fSingleList,
@@ -72,8 +78,9 @@ export default {
72
78
  AgreementCheck: fAgreementCheck,
73
79
  Separator: fSeparator,
74
80
  QueryFilters: fQueryFilters,
75
- // FileListCombined: fFileListCombined,
76
- // ImageListCombined: fImageListCombined,
77
81
  ApiCall: fApiCall,
82
+
78
83
  Tabs: fTabs,
84
+ Row: fRow,
85
+ Column: fColumn,
79
86
  };