shared-ritm 1.3.126 → 1.3.127

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 (82) hide show
  1. package/dist/index.css +1 -1
  2. package/dist/shared-ritm.es.js +17 -14
  3. package/dist/shared-ritm.umd.js +3 -3
  4. package/dist/types/api/services/MetricsService.d.ts +1 -0
  5. package/package.json +70 -70
  6. package/src/App.vue +2461 -2461
  7. package/src/api/services/AuthService.ts +67 -67
  8. package/src/api/services/ControlsService.ts +100 -100
  9. package/src/api/services/EquipmentService.ts +68 -68
  10. package/src/api/services/GanttService.ts +58 -58
  11. package/src/api/services/InstrumentsService.ts +76 -76
  12. package/src/api/services/MetricsService.ts +3 -0
  13. package/src/api/services/RepairsService.ts +111 -111
  14. package/src/api/services/TasksService.ts +165 -165
  15. package/src/api/services/UserIssueService.ts +32 -32
  16. package/src/api/services/UserService.ts +129 -129
  17. package/src/api/services/VideoService.ts +118 -118
  18. package/src/api/settings/ApiService.ts +185 -185
  19. package/src/api/types/Api_Auth.ts +121 -121
  20. package/src/api/types/Api_Controls.ts +112 -112
  21. package/src/api/types/Api_Equipment.ts +54 -54
  22. package/src/api/types/Api_Instruments.ts +182 -182
  23. package/src/api/types/Api_Metrics.ts +89 -89
  24. package/src/api/types/Api_Repairs.ts +200 -200
  25. package/src/api/types/Api_Search.ts +81 -81
  26. package/src/api/types/Api_Tasks.ts +378 -378
  27. package/src/api/types/Api_User.ts +161 -161
  28. package/src/api/types/Api_User_Issue.ts +36 -36
  29. package/src/api/types/Api_Video.ts +244 -244
  30. package/src/common/app-button/Button.stories.ts +369 -369
  31. package/src/common/app-checkbox/AppCheckbox.vue +33 -33
  32. package/src/common/app-checkbox/Checkbox.stories.ts +252 -252
  33. package/src/common/app-date-picker/DatePicker.stories.ts +66 -66
  34. package/src/common/app-datepicker/Datepicker.stories.ts +145 -145
  35. package/src/common/app-dialogs/AppConfirmDialog.vue +109 -109
  36. package/src/common/app-dialogs/Confirm.stories.ts +93 -93
  37. package/src/common/app-dropdown/Dropdown.stories.ts +94 -94
  38. package/src/common/app-file/File.stories.ts +104 -104
  39. package/src/common/app-icon/AppIcon.vue +110 -110
  40. package/src/common/app-icon/Icon.stories.ts +91 -91
  41. package/src/common/app-input/AppInput.vue +150 -150
  42. package/src/common/app-input/Input.stories.ts +160 -160
  43. package/src/common/app-input-new/AppInputNew.vue +181 -181
  44. package/src/common/app-input-new/InputNew.stories.ts +240 -240
  45. package/src/common/app-input-search/InputSearch.stories.ts +149 -149
  46. package/src/common/app-layout/components/AppLayoutHeader.vue +289 -289
  47. package/src/common/app-loader/Loader.stories.ts +114 -114
  48. package/src/common/app-modal/index.vue +101 -101
  49. package/src/common/app-select/AppSelect.vue +159 -159
  50. package/src/common/app-select/Select.stories.ts +155 -155
  51. package/src/common/app-sheet-new/AppSheetNew.vue +254 -254
  52. package/src/common/app-sidebar/AppSidebar.vue +177 -177
  53. package/src/common/app-table/AppTable.vue +313 -313
  54. package/src/common/app-table/components/ModalSelect.stories.ts +323 -323
  55. package/src/common/app-table/components/ModalSelect.vue +311 -311
  56. package/src/common/app-table/components/TableModal.vue +369 -369
  57. package/src/common/app-table/controllers/useColumnSelector.ts +45 -45
  58. package/src/common/app-table/controllers/useTableModel.ts +98 -98
  59. package/src/common/app-toggle/AppToggle.vue +12 -12
  60. package/src/common/app-toggle/Toggle.stories.ts +245 -245
  61. package/src/common/app-wrapper/AppWrapper.vue +31 -31
  62. package/src/configs/storybook.ts +14 -14
  63. package/src/icons/sidebar/user-requests-icon.vue +23 -23
  64. package/src/index.ts +134 -134
  65. package/src/shared/styles/general.css +140 -140
  66. package/src/styles/variables.sass +12 -12
  67. package/src/utils/files.ts +38 -38
  68. package/src/utils/helpers.ts +59 -59
  69. package/dist/types/api/services/PhotoService.d.ts +0 -40
  70. package/dist/types/stories/Button.stories.d.ts +0 -13
  71. package/dist/types/stories/Checkbox.stories.d.ts +0 -7
  72. package/dist/types/stories/Confirm.stories.d.ts +0 -8
  73. package/dist/types/stories/DatePicker.stories.d.ts +0 -8
  74. package/dist/types/stories/Dropdown.stories.d.ts +0 -8
  75. package/dist/types/stories/File.stories.d.ts +0 -8
  76. package/dist/types/stories/Icon.stories.d.ts +0 -7
  77. package/dist/types/stories/Input.stories.d.ts +0 -11
  78. package/dist/types/stories/InputNew.stories.d.ts +0 -12
  79. package/dist/types/stories/InputSearch.stories.d.ts +0 -10
  80. package/dist/types/stories/Loader.stories.d.ts +0 -8
  81. package/dist/types/stories/Select.stories.d.ts +0 -7
  82. package/dist/types/stories/Toggle.stories.d.ts +0 -8
@@ -1,159 +1,159 @@
1
- <template>
2
- <q-select
3
- ref="select"
4
- v-model="selected"
5
- :data-test="dataTest"
6
- :options="filteredOptions"
7
- :option-value="optionValue"
8
- :option-label="optionLabel"
9
- emit-value
10
- map-options
11
- :disable="isDisabled"
12
- :multiple="multiple"
13
- outlined
14
- stack-label
15
- :use-input="search"
16
- :class="[$style.select]"
17
- :label="label"
18
- input-debounce="100"
19
- :popup-content-class="$style['app-select__menu']"
20
- :clearable="clearable"
21
- rounded
22
- autocomplete=""
23
- @filter="filterFn"
24
- >
25
- <template v-if="multiple" #selected-item="scope">
26
- <q-chip
27
- v-if="scope.opt"
28
- removable
29
- class="q-ma-none"
30
- dense
31
- :tabindex="scope.tabindex"
32
- color="white"
33
- text-color="secondary"
34
- @remove="scope.removeAtIndex(scope.index)"
35
- >
36
- {{ scope.opt[`${optionLabel}`] }}
37
- </q-chip>
38
- </template>
39
- <template #no-option>
40
- <q-item>{{ emptyText }}</q-item>
41
- </template>
42
- <q-item v-if="!lcText && type()">{{ placeholder }}</q-item>
43
- </q-select>
44
- </template>
45
- <script setup lang="ts">
46
- import { computed, defineEmits, defineProps, ref, Ref } from 'vue'
47
-
48
- import { QSelect } from 'quasar'
49
-
50
- type Option = Record<string, any>
51
-
52
- interface AppQSelectProps {
53
- modelValue: any
54
- options: Option[]
55
- placeholder: string
56
- emptyText: string
57
- optionLabel?: string
58
- optionValue?: string
59
- label?: string
60
- multiple?: boolean
61
- borderColor: string
62
- isDisabled?: boolean
63
- clearable?: boolean
64
- search?: boolean
65
- dataTest?: string
66
- }
67
-
68
- const props = defineProps<AppQSelectProps>()
69
- const select = ref({})
70
- const emit = defineEmits(['update:modelValue'])
71
- const selected = computed({
72
- get() {
73
- return props.modelValue
74
- },
75
- set(value) {
76
- emit('update:modelValue', value)
77
- },
78
- })
79
-
80
- const type = () => {
81
- if (Array.isArray(selected.value) && !selected.value.length) return true
82
- return typeof selected.value === 'string' && !selected.value
83
- }
84
-
85
- const lcText: Ref<string> = ref('')
86
- const filteredOptions = computed(() => {
87
- return props.options.filter(x => (x[props?.optionLabel || 'label'] || '-').toLowerCase().includes(lcText.value))
88
- })
89
-
90
- function filterFn(val: string, update: (arg0: () => void) => void) {
91
- update(() => {
92
- lcText.value = val.toLowerCase()
93
- })
94
- }
95
- </script>
96
- <style module lang="scss">
97
- .wrap {
98
- position: relative;
99
-
100
- &:global(.--option-tree) {
101
- cursor: pointer;
102
- }
103
- }
104
-
105
- .select {
106
- &:global(.q-field--outlined.q-field--rounded .q-field__control) {
107
- border-radius: 14px;
108
- }
109
- &:global(.q-field--outlined .q-field__control:before) {
110
- border-color: v-bind(borderColor);
111
- }
112
- &:global(.q-select .q-field__input) {
113
- padding: 0 6px;
114
- }
115
- //&:global(.q-field--filled .q-field__control) {
116
- // //color: red;
117
- //}
118
- //&:global(.q-field--filled.q-field--focused .q-field__control) {
119
- //}
120
- //&:global(.q-field--filled .q-field__control:after) {
121
- // left: 8px;
122
- // right: 8px;
123
- //}
124
- &:global(.q-field--outlined .q-item) {
125
- color: #1d1d1d;
126
- position: absolute;
127
- padding: 0 4px;
128
- top: 18px;
129
- left: 0;
130
- }
131
- }
132
-
133
- .append-wrapper {
134
- display: flex;
135
- align-items: center;
136
- column-gap: 4px;
137
- }
138
-
139
- .menu-wrap {
140
- padding: 8px;
141
- }
142
-
143
- .search-wrapper {
144
- position: sticky;
145
- top: 0;
146
- padding: 4px;
147
- background: var(--main-bg);
148
- z-index: 1;
149
- }
150
- .app-select__menu {
151
- border-radius: 14px;
152
- .q-item__label {
153
- word-break: break-word;
154
- }
155
- &:global(.q-menu) {
156
- max-height: 200px !important;
157
- }
158
- }
159
- </style>
1
+ <template>
2
+ <q-select
3
+ ref="select"
4
+ v-model="selected"
5
+ :data-test="dataTest"
6
+ :options="filteredOptions"
7
+ :option-value="optionValue"
8
+ :option-label="optionLabel"
9
+ emit-value
10
+ map-options
11
+ :disable="isDisabled"
12
+ :multiple="multiple"
13
+ outlined
14
+ stack-label
15
+ :use-input="search"
16
+ :class="[$style.select]"
17
+ :label="label"
18
+ input-debounce="100"
19
+ :popup-content-class="$style['app-select__menu']"
20
+ :clearable="clearable"
21
+ rounded
22
+ autocomplete=""
23
+ @filter="filterFn"
24
+ >
25
+ <template v-if="multiple" #selected-item="scope">
26
+ <q-chip
27
+ v-if="scope.opt"
28
+ removable
29
+ class="q-ma-none"
30
+ dense
31
+ :tabindex="scope.tabindex"
32
+ color="white"
33
+ text-color="secondary"
34
+ @remove="scope.removeAtIndex(scope.index)"
35
+ >
36
+ {{ scope.opt[`${optionLabel}`] }}
37
+ </q-chip>
38
+ </template>
39
+ <template #no-option>
40
+ <q-item>{{ emptyText }}</q-item>
41
+ </template>
42
+ <q-item v-if="!lcText && type()">{{ placeholder }}</q-item>
43
+ </q-select>
44
+ </template>
45
+ <script setup lang="ts">
46
+ import { computed, defineEmits, defineProps, ref, Ref } from 'vue'
47
+
48
+ import { QSelect } from 'quasar'
49
+
50
+ type Option = Record<string, any>
51
+
52
+ interface AppQSelectProps {
53
+ modelValue: any
54
+ options: Option[]
55
+ placeholder: string
56
+ emptyText: string
57
+ optionLabel?: string
58
+ optionValue?: string
59
+ label?: string
60
+ multiple?: boolean
61
+ borderColor: string
62
+ isDisabled?: boolean
63
+ clearable?: boolean
64
+ search?: boolean
65
+ dataTest?: string
66
+ }
67
+
68
+ const props = defineProps<AppQSelectProps>()
69
+ const select = ref({})
70
+ const emit = defineEmits(['update:modelValue'])
71
+ const selected = computed({
72
+ get() {
73
+ return props.modelValue
74
+ },
75
+ set(value) {
76
+ emit('update:modelValue', value)
77
+ },
78
+ })
79
+
80
+ const type = () => {
81
+ if (Array.isArray(selected.value) && !selected.value.length) return true
82
+ return typeof selected.value === 'string' && !selected.value
83
+ }
84
+
85
+ const lcText: Ref<string> = ref('')
86
+ const filteredOptions = computed(() => {
87
+ return props.options.filter(x => (x[props?.optionLabel || 'label'] || '-').toLowerCase().includes(lcText.value))
88
+ })
89
+
90
+ function filterFn(val: string, update: (arg0: () => void) => void) {
91
+ update(() => {
92
+ lcText.value = val.toLowerCase()
93
+ })
94
+ }
95
+ </script>
96
+ <style module lang="scss">
97
+ .wrap {
98
+ position: relative;
99
+
100
+ &:global(.--option-tree) {
101
+ cursor: pointer;
102
+ }
103
+ }
104
+
105
+ .select {
106
+ &:global(.q-field--outlined.q-field--rounded .q-field__control) {
107
+ border-radius: 14px;
108
+ }
109
+ &:global(.q-field--outlined .q-field__control:before) {
110
+ border-color: v-bind(borderColor);
111
+ }
112
+ &:global(.q-select .q-field__input) {
113
+ padding: 0 6px;
114
+ }
115
+ //&:global(.q-field--filled .q-field__control) {
116
+ // //color: red;
117
+ //}
118
+ //&:global(.q-field--filled.q-field--focused .q-field__control) {
119
+ //}
120
+ //&:global(.q-field--filled .q-field__control:after) {
121
+ // left: 8px;
122
+ // right: 8px;
123
+ //}
124
+ &:global(.q-field--outlined .q-item) {
125
+ color: #1d1d1d;
126
+ position: absolute;
127
+ padding: 0 4px;
128
+ top: 18px;
129
+ left: 0;
130
+ }
131
+ }
132
+
133
+ .append-wrapper {
134
+ display: flex;
135
+ align-items: center;
136
+ column-gap: 4px;
137
+ }
138
+
139
+ .menu-wrap {
140
+ padding: 8px;
141
+ }
142
+
143
+ .search-wrapper {
144
+ position: sticky;
145
+ top: 0;
146
+ padding: 4px;
147
+ background: var(--main-bg);
148
+ z-index: 1;
149
+ }
150
+ .app-select__menu {
151
+ border-radius: 14px;
152
+ .q-item__label {
153
+ word-break: break-word;
154
+ }
155
+ &:global(.q-menu) {
156
+ max-height: 200px !important;
157
+ }
158
+ }
159
+ </style>
@@ -1,155 +1,155 @@
1
- import type { Meta, StoryObj } from '@storybook/vue3'
2
- import AppSelect from '@/common/app-select/AppSelect.vue'
3
-
4
- const SAMPLE_OPTIONS = [
5
- { id: 1, name: 'Проект Альфа', category: 'Проекты' },
6
- { id: 2, name: 'Ремонт №42', category: 'Ремонты' },
7
- { id: 3, name: 'Инструмент XYZ', category: 'Инструменты' },
8
- { id: 4, name: 'Объект "Центр"', category: 'Объекты' },
9
- { id: 5, name: 'Статус: Готов', category: 'Статусы' },
10
- ]
11
-
12
- const meta: Meta<typeof AppSelect> = {
13
- title: 'Components/AppSelect',
14
- component: AppSelect,
15
- tags: ['autodocs'],
16
- argTypes: {
17
- modelValue: {
18
- control: 'object',
19
- description: 'Выбранное значение (или массив при multiple).',
20
- },
21
- options: {
22
- control: 'object',
23
- description: 'Массив опций. Каждая опция — объект с полями, указанными в optionLabel/optionValue.',
24
- },
25
- label: {
26
- control: 'text',
27
- description: 'Подпись над селектом.',
28
- },
29
- placeholder: {
30
- control: 'text',
31
- },
32
- emptyText: {
33
- control: 'text',
34
- description: 'Текст, отображаемый, если опции не найдены при поиске.',
35
- },
36
-
37
- multiple: {
38
- control: 'boolean',
39
- description: 'Множественный выбор.',
40
- table: { category: '⚙️ Поведение' },
41
- },
42
- search: {
43
- control: 'boolean',
44
- description: 'Включить поиск по опциям.',
45
- table: { category: '⚙️ Поведение' },
46
- },
47
- clearable: {
48
- control: 'boolean',
49
- description: 'Показывать крестик для сброса значения.',
50
- table: { category: '⚙️ Поведение' },
51
- },
52
- isDisabled: {
53
- control: 'boolean',
54
- description: 'Отключить селект.',
55
- table: { category: '⚙️ Поведение' },
56
- },
57
-
58
- optionLabel: {
59
- control: 'text',
60
- description: 'Ключ объекта опции, используемый как отображаемый текст (по умолчанию "label").',
61
- table: { category: 'Опции' },
62
- },
63
- optionValue: {
64
- control: 'text',
65
- description: 'Ключ объекта опции, используемый как значение (по умолчанию сам объект).',
66
- table: { category: 'Опции' },
67
- },
68
-
69
- borderColor: {
70
- control: 'color',
71
- description: 'Цвет обводки (в HEX/RGB).',
72
- },
73
- dataTest: {
74
- control: 'text',
75
- },
76
- },
77
- args: {
78
- modelValue: null,
79
- options: SAMPLE_OPTIONS,
80
- label: 'Выберите элемент',
81
- placeholder: 'Начните ввод...',
82
- emptyText: 'Ничего не найдено',
83
- optionLabel: 'name',
84
- optionValue: 'id',
85
- multiple: false,
86
- search: true,
87
- clearable: true,
88
- isDisabled: false,
89
- borderColor: '#007BFF',
90
- dataTest: 'app-select',
91
- },
92
- }
93
-
94
- export default meta
95
-
96
- type Story = StoryObj<typeof AppSelect>
97
-
98
- export const Default: Story = {}
99
-
100
- export const States: Story = {
101
- render: () => ({
102
- components: { AppSelect },
103
- template: `
104
- <div style="display: flex; flex-direction: column; gap: 24px;">
105
- <AppSelect
106
- v-model="value1"
107
- :options="options"
108
- label="Обычный"
109
- placeholder="Выберите..."
110
- :option-label="'name'"
111
- :option-value="'id'"
112
- empty-text="Нет данных"
113
- />
114
- <AppSelect
115
- v-model="value2"
116
- :options="options"
117
- label="С поиском"
118
- placeholder="Начните ввод..."
119
- :search="true"
120
- :option-label="'name'"
121
- :option-value="'id'"
122
- empty-text="Нет данных"
123
- />
124
- <AppSelect
125
- v-model="value3"
126
- :options="options"
127
- label="Множественный"
128
- placeholder="Выберите несколько..."
129
- :multiple="true"
130
- :option-label="'name'"
131
- :option-value="'id'"
132
- empty-text="Нет данных"
133
- />
134
- <AppSelect
135
- v-model="value4"
136
- :options="options"
137
- label="Отключён"
138
- :is-disabled="true"
139
- :option-label="'name'"
140
- :option-value="'id'"
141
- empty-text="Нет данных"
142
- />
143
- </div>
144
- `,
145
- data() {
146
- return {
147
- options: SAMPLE_OPTIONS,
148
- value1: 1,
149
- value2: null,
150
- value3: [2, 4],
151
- value4: 3,
152
- }
153
- },
154
- }),
155
- }
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import AppSelect from '@/common/app-select/AppSelect.vue'
3
+
4
+ const SAMPLE_OPTIONS = [
5
+ { id: 1, name: 'Проект Альфа', category: 'Проекты' },
6
+ { id: 2, name: 'Ремонт №42', category: 'Ремонты' },
7
+ { id: 3, name: 'Инструмент XYZ', category: 'Инструменты' },
8
+ { id: 4, name: 'Объект "Центр"', category: 'Объекты' },
9
+ { id: 5, name: 'Статус: Готов', category: 'Статусы' },
10
+ ]
11
+
12
+ const meta: Meta<typeof AppSelect> = {
13
+ title: 'Components/AppSelect',
14
+ component: AppSelect,
15
+ tags: ['autodocs'],
16
+ argTypes: {
17
+ modelValue: {
18
+ control: 'object',
19
+ description: 'Выбранное значение (или массив при multiple).',
20
+ },
21
+ options: {
22
+ control: 'object',
23
+ description: 'Массив опций. Каждая опция — объект с полями, указанными в optionLabel/optionValue.',
24
+ },
25
+ label: {
26
+ control: 'text',
27
+ description: 'Подпись над селектом.',
28
+ },
29
+ placeholder: {
30
+ control: 'text',
31
+ },
32
+ emptyText: {
33
+ control: 'text',
34
+ description: 'Текст, отображаемый, если опции не найдены при поиске.',
35
+ },
36
+
37
+ multiple: {
38
+ control: 'boolean',
39
+ description: 'Множественный выбор.',
40
+ table: { category: '⚙️ Поведение' },
41
+ },
42
+ search: {
43
+ control: 'boolean',
44
+ description: 'Включить поиск по опциям.',
45
+ table: { category: '⚙️ Поведение' },
46
+ },
47
+ clearable: {
48
+ control: 'boolean',
49
+ description: 'Показывать крестик для сброса значения.',
50
+ table: { category: '⚙️ Поведение' },
51
+ },
52
+ isDisabled: {
53
+ control: 'boolean',
54
+ description: 'Отключить селект.',
55
+ table: { category: '⚙️ Поведение' },
56
+ },
57
+
58
+ optionLabel: {
59
+ control: 'text',
60
+ description: 'Ключ объекта опции, используемый как отображаемый текст (по умолчанию "label").',
61
+ table: { category: 'Опции' },
62
+ },
63
+ optionValue: {
64
+ control: 'text',
65
+ description: 'Ключ объекта опции, используемый как значение (по умолчанию сам объект).',
66
+ table: { category: 'Опции' },
67
+ },
68
+
69
+ borderColor: {
70
+ control: 'color',
71
+ description: 'Цвет обводки (в HEX/RGB).',
72
+ },
73
+ dataTest: {
74
+ control: 'text',
75
+ },
76
+ },
77
+ args: {
78
+ modelValue: null,
79
+ options: SAMPLE_OPTIONS,
80
+ label: 'Выберите элемент',
81
+ placeholder: 'Начните ввод...',
82
+ emptyText: 'Ничего не найдено',
83
+ optionLabel: 'name',
84
+ optionValue: 'id',
85
+ multiple: false,
86
+ search: true,
87
+ clearable: true,
88
+ isDisabled: false,
89
+ borderColor: '#007BFF',
90
+ dataTest: 'app-select',
91
+ },
92
+ }
93
+
94
+ export default meta
95
+
96
+ type Story = StoryObj<typeof AppSelect>
97
+
98
+ export const Default: Story = {}
99
+
100
+ export const States: Story = {
101
+ render: () => ({
102
+ components: { AppSelect },
103
+ template: `
104
+ <div style="display: flex; flex-direction: column; gap: 24px;">
105
+ <AppSelect
106
+ v-model="value1"
107
+ :options="options"
108
+ label="Обычный"
109
+ placeholder="Выберите..."
110
+ :option-label="'name'"
111
+ :option-value="'id'"
112
+ empty-text="Нет данных"
113
+ />
114
+ <AppSelect
115
+ v-model="value2"
116
+ :options="options"
117
+ label="С поиском"
118
+ placeholder="Начните ввод..."
119
+ :search="true"
120
+ :option-label="'name'"
121
+ :option-value="'id'"
122
+ empty-text="Нет данных"
123
+ />
124
+ <AppSelect
125
+ v-model="value3"
126
+ :options="options"
127
+ label="Множественный"
128
+ placeholder="Выберите несколько..."
129
+ :multiple="true"
130
+ :option-label="'name'"
131
+ :option-value="'id'"
132
+ empty-text="Нет данных"
133
+ />
134
+ <AppSelect
135
+ v-model="value4"
136
+ :options="options"
137
+ label="Отключён"
138
+ :is-disabled="true"
139
+ :option-label="'name'"
140
+ :option-value="'id'"
141
+ empty-text="Нет данных"
142
+ />
143
+ </div>
144
+ `,
145
+ data() {
146
+ return {
147
+ options: SAMPLE_OPTIONS,
148
+ value1: 1,
149
+ value2: null,
150
+ value3: [2, 4],
151
+ value4: 3,
152
+ }
153
+ },
154
+ }),
155
+ }