quasar-ui-sellmate-ui-kit 3.11.1 → 3.11.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 (84) hide show
  1. package/.eslintrc.cjs +104 -104
  2. package/.prettierrc +25 -25
  3. package/README.md +156 -156
  4. package/dist/index.common.js +2 -2
  5. package/dist/index.css +1 -1
  6. package/dist/index.esm.js +2 -2
  7. package/dist/index.min.css +1 -1
  8. package/dist/index.rtl.css +1 -1
  9. package/dist/index.rtl.min.css +1 -1
  10. package/dist/index.umd.js +4417 -4405
  11. package/dist/index.umd.min.js +2 -2
  12. package/html/assets/index-iPSQW1bz.css +1 -1
  13. package/html/assets/index-pzCGhZhc.js +35 -35
  14. package/html/favicon.svg +5 -5
  15. package/html/index.html +26 -26
  16. package/package.json +95 -95
  17. package/src/assets/icons.js +63 -63
  18. package/src/components/SBadge.vue +75 -75
  19. package/src/components/SButton.vue +206 -206
  20. package/src/components/SButtonGroup.vue +41 -41
  21. package/src/components/SButtonToggle.vue +200 -200
  22. package/src/components/SCaution.vue +143 -143
  23. package/src/components/SCheckbox.vue +123 -123
  24. package/src/components/SChip.vue +99 -99
  25. package/src/components/SDate.vue +664 -664
  26. package/src/components/SDateAutoRangePicker.vue +311 -311
  27. package/src/components/SDatePicker.vue +465 -465
  28. package/src/components/SDateRange.vue +382 -382
  29. package/src/components/SDateRangePicker.vue +582 -582
  30. package/src/components/SDateTimePicker.vue +259 -259
  31. package/src/components/SDialog.vue +250 -250
  32. package/src/components/SDropdown.vue +273 -273
  33. package/src/components/SEditor.vue +590 -590
  34. package/src/components/SFilePicker.vue +207 -207
  35. package/src/components/SHelp.vue +126 -126
  36. package/src/components/SHelpMessage.vue +57 -57
  37. package/src/components/SInput.vue +379 -379
  38. package/src/components/SInputCounter.vue +46 -46
  39. package/src/components/SInputNumber.vue +194 -194
  40. package/src/components/SList.vue +29 -29
  41. package/src/components/SMarkupTable.vue +142 -142
  42. package/src/components/SPagination.vue +345 -345
  43. package/src/components/SRadio.vue +78 -78
  44. package/src/components/SRouteTab.vue +67 -67
  45. package/src/components/SSelect.vue +299 -299
  46. package/src/components/SSelectCheckbox.vue +238 -238
  47. package/src/components/SSelectCustom.vue +189 -189
  48. package/src/components/SSelectGroupCheckbox.vue +372 -372
  49. package/src/components/SSelectSearchAutoComplete.vue +172 -172
  50. package/src/components/SSelectSearchCheckbox.vue +360 -360
  51. package/src/components/SStringToInput.vue +66 -66
  52. package/src/components/STab.vue +147 -147
  53. package/src/components/STable.vue +21 -9
  54. package/src/components/STableTree.vue +502 -502
  55. package/src/components/STabs.vue +32 -32
  56. package/src/components/STag.vue +152 -152
  57. package/src/components/STimePicker.vue +186 -186
  58. package/src/components/SToggle.vue +68 -68
  59. package/src/components/STooltip.vue +209 -209
  60. package/src/components/SYearMonthPicker.vue +211 -211
  61. package/src/components/SelelctItem.vue +21 -21
  62. package/src/components/TableTreeNode.vue +177 -177
  63. package/src/components/TimePickerCard.vue +393 -393
  64. package/src/components/__tests__/SButton.test.js +18 -18
  65. package/src/components/__tests__/SInput.test.js +42 -42
  66. package/src/components/__tests__/SInputCounter.test.js +30 -30
  67. package/src/components/__tests__/SInputNumber.test.js +32 -32
  68. package/src/components/__tests__/STimePicker.spec.js +78 -78
  69. package/src/composables/date.js +11 -11
  70. package/src/composables/modelBinder.js +13 -13
  71. package/src/composables/resizable.js +55 -55
  72. package/src/composables/table/use-navigator.js +110 -110
  73. package/src/composables/table/use-resizable-tree.js +96 -96
  74. package/src/composables/table/use-resizable.js +187 -187
  75. package/src/constants/locale.js +102 -102
  76. package/src/css/app.scss +106 -106
  77. package/src/css/default.scss +393 -393
  78. package/src/css/extends.scss +177 -177
  79. package/src/css/quasar.variables.scss +187 -187
  80. package/src/directives/Directive.js +7 -7
  81. package/src/index.scss +3 -3
  82. package/src/vue-plugin.js +93 -93
  83. package/tsconfig.json +35 -35
  84. package/vitest.config.ts +31 -31
@@ -1,238 +1,238 @@
1
- <template>
2
- <q-select
3
- outlined
4
- dense
5
- options-dense
6
- :dropdown-icon="selectDownArrowIcon"
7
- v-model="model"
8
- :options="options"
9
- multiple
10
- emit-value
11
- map-options
12
- color="positive"
13
- :popup-content-class="['s-select-checkbox-opts', popupContentClass].join(' ')"
14
- class="s-select-checkbox"
15
- :option-label="optionLabel"
16
- :option-value="optionValue"
17
- :option-group="optionGroup"
18
- @add="onAddChecked"
19
- @remove="onRemoveChecked"
20
- :menu-offset="[0, 4]"
21
- menu-self="top left"
22
- menu-anchor="bottom start"
23
- no-error-icon
24
- hide-bottom-space
25
- ref="sSelectRef"
26
- >
27
- <template #option="{ itemProps, opt, selected, toggleOption }">
28
- <q-item v-bind="itemProps" class="custom-select-options">
29
- <q-item-section side v-if="!opt.disable">
30
- <s-checkbox :modelValue="selected" @update:modelValue="toggleOption(opt)" />
31
- </q-item-section>
32
- <q-item-section v-if="opt[optionGroup]" class="text-Grey_Darken-4 group-title">
33
- {{ opt[optionGroup] }}
34
- </q-item-section>
35
- <q-item-section avatar v-if="opt.logo">
36
- <q-img class="q-pa-none bg-grey-11" :src="opt.logo" width="60px" height="22px" />
37
- </q-item-section>
38
- <q-item-section>
39
- {{ opt[optionLabel] }}
40
- </q-item-section>
41
- </q-item>
42
- </template>
43
- <template
44
- #selected
45
- v-if="useAll && !!options.length && model.length === options.filter(v => !v.category).length"
46
- >
47
- <div>
48
- {{ allPlaceholder }}
49
- </div>
50
- </template>
51
-
52
- <template #no-option>
53
- <q-item class="s-select-no-option">
54
- <q-item-section class="text-grey">{{ noOptionLabel }}</q-item-section>
55
- </q-item>
56
- </template>
57
- </q-select>
58
- </template>
59
-
60
- <script>
61
- import { defineComponent, onBeforeMount, ref, nextTick, watch } from 'vue';
62
- import { QSelect, QItem, QItemSection, QImg } from 'quasar';
63
- import { selectDownArrowIcon } from '../assets/icons';
64
-
65
- export default defineComponent({
66
- name: 'SSelectCheckbox',
67
- emits: ['update:modelValue'],
68
- components: {
69
- QSelect,
70
- QItem,
71
- QItemSection,
72
- QImg,
73
- },
74
- props: {
75
- options: {
76
- type: Array,
77
- required: true,
78
- },
79
- modelValue: {
80
- type: Array,
81
- required: true,
82
- },
83
- optionLabel: {
84
- type: [String, Function],
85
- default: 'label',
86
- },
87
- optionValue: {
88
- type: String,
89
- default: 'value',
90
- },
91
- optionGroup: {
92
- type: String,
93
- default: 'group',
94
- },
95
- useAll: {
96
- type: Boolean,
97
- default: false,
98
- },
99
- allPlaceholder: {
100
- type: String,
101
- default: '전체',
102
- },
103
- popupContentClass: {
104
- default: () => '',
105
- type: String,
106
- },
107
- noOptionLabel: {
108
- type: String,
109
- default: '선택지가 없습니다.',
110
- },
111
- },
112
- setup(props, { emit }) {
113
- const model = ref(props.modelValue);
114
- const isDisable = props.options.find(v => Boolean(v.disable));
115
- function onRemoveChecked(detail) {
116
- const idx = model.value.findIndex(v => v[props.optionValue] === '');
117
- if (detail.value[props.optionValue] === '') {
118
- nextTick(() => {
119
- model.value = [];
120
- });
121
- } else if (idx >= 0) {
122
- nextTick(() => {
123
- model.value.splice(idx, 1);
124
- });
125
- }
126
- }
127
- function onAddChecked(detail) {
128
- if (detail.value === '') {
129
- nextTick(() => {
130
- model.value = props.options.filter(v => !v.category);
131
- });
132
- } else {
133
- nextTick(() => {
134
- if (
135
- props.useAll &&
136
- model.value.length === props.options.filter(v => !v.category).length - 1
137
- ) {
138
- model.value = props.options.filter(v => !v.category);
139
- }
140
- });
141
- }
142
- }
143
-
144
- function checkEmptyValue(value) {
145
- if (typeof value === 'object') {
146
- return value.value !== 0 && !value.value;
147
- }
148
-
149
- return value !== 0 && !value;
150
- }
151
-
152
- watch(
153
- () => props.modelValue,
154
- newModelValue => {
155
- if (props.useAll && newModelValue.length === 1 && checkEmptyValue(newModelValue[0])) {
156
- model.value = props.options.filter(v => !v.category);
157
- return;
158
- }
159
- model.value = newModelValue;
160
- },
161
- );
162
-
163
- watch(
164
- () => props.options,
165
- newOptionValue => {
166
- if (props.useAll) {
167
- model.value = newOptionValue.filter(v => !v.category);
168
- }
169
- },
170
- );
171
-
172
- watch(model, () => {
173
- emit('update:modelValue', model.value);
174
- });
175
-
176
- onBeforeMount(() => {
177
- if (props.useAll && props.modelValue.length === 1 && checkEmptyValue(props.modelValue[0])) {
178
- model.value = props.options.filter(v => !v.category);
179
- }
180
- });
181
-
182
- return {
183
- model,
184
- selectDownArrowIcon,
185
- onRemoveChecked,
186
- onAddChecked,
187
- isDisable,
188
- sSelectRef: ref(null),
189
- };
190
- },
191
- });
192
- </script>
193
-
194
- <style lang="scss">
195
- @import '../css/quasar.variables.scss';
196
- @import '../css/extends.scss';
197
-
198
- .s-select-checkbox {
199
- @extend %select;
200
- .q-field__native {
201
- display: block;
202
- min-height: 0;
203
- height: $default-height;
204
- width: 100%;
205
- padding: $select-padding !important;
206
- color: $Grey_Darken-4;
207
- white-space: nowrap;
208
- overflow: hidden;
209
- text-overflow: ellipsis;
210
- > span {
211
- max-height: $default-height;
212
- }
213
- > .s-checkbox {
214
- margin-right: $default-icon-margin;
215
- }
216
- }
217
- }
218
-
219
- .s-select-checkbox-opts {
220
- @extend %select-menu-list;
221
- > .q-virtual-scroll__content {
222
- > .q-item.disabled {
223
- border: none;
224
- color: $Grey_Darken-4 !important;
225
- opacity: 1 !important;
226
- background: $Grey_Lighten-5 !important;
227
- border-top: 1px solid $Grey_Lighten-3 !important;
228
- &:not(.q-manual-focusable):first-of-type {
229
- border-top: none !important;
230
- }
231
- }
232
- }
233
- }
234
-
235
- .custom-select-options {
236
- height: $default-height;
237
- }
238
- </style>
1
+ <template>
2
+ <q-select
3
+ outlined
4
+ dense
5
+ options-dense
6
+ :dropdown-icon="selectDownArrowIcon"
7
+ v-model="model"
8
+ :options="options"
9
+ multiple
10
+ emit-value
11
+ map-options
12
+ color="positive"
13
+ :popup-content-class="['s-select-checkbox-opts', popupContentClass].join(' ')"
14
+ class="s-select-checkbox"
15
+ :option-label="optionLabel"
16
+ :option-value="optionValue"
17
+ :option-group="optionGroup"
18
+ @add="onAddChecked"
19
+ @remove="onRemoveChecked"
20
+ :menu-offset="[0, 4]"
21
+ menu-self="top left"
22
+ menu-anchor="bottom start"
23
+ no-error-icon
24
+ hide-bottom-space
25
+ ref="sSelectRef"
26
+ >
27
+ <template #option="{ itemProps, opt, selected, toggleOption }">
28
+ <q-item v-bind="itemProps" class="custom-select-options">
29
+ <q-item-section side v-if="!opt.disable">
30
+ <s-checkbox :modelValue="selected" @update:modelValue="toggleOption(opt)" />
31
+ </q-item-section>
32
+ <q-item-section v-if="opt[optionGroup]" class="text-Grey_Darken-4 group-title">
33
+ {{ opt[optionGroup] }}
34
+ </q-item-section>
35
+ <q-item-section avatar v-if="opt.logo">
36
+ <q-img class="q-pa-none bg-grey-11" :src="opt.logo" width="60px" height="22px" />
37
+ </q-item-section>
38
+ <q-item-section>
39
+ {{ opt[optionLabel] }}
40
+ </q-item-section>
41
+ </q-item>
42
+ </template>
43
+ <template
44
+ #selected
45
+ v-if="useAll && !!options.length && model.length === options.filter(v => !v.category).length"
46
+ >
47
+ <div>
48
+ {{ allPlaceholder }}
49
+ </div>
50
+ </template>
51
+
52
+ <template #no-option>
53
+ <q-item class="s-select-no-option">
54
+ <q-item-section class="text-grey">{{ noOptionLabel }}</q-item-section>
55
+ </q-item>
56
+ </template>
57
+ </q-select>
58
+ </template>
59
+
60
+ <script>
61
+ import { defineComponent, onBeforeMount, ref, nextTick, watch } from 'vue';
62
+ import { QSelect, QItem, QItemSection, QImg } from 'quasar';
63
+ import { selectDownArrowIcon } from '../assets/icons';
64
+
65
+ export default defineComponent({
66
+ name: 'SSelectCheckbox',
67
+ emits: ['update:modelValue'],
68
+ components: {
69
+ QSelect,
70
+ QItem,
71
+ QItemSection,
72
+ QImg,
73
+ },
74
+ props: {
75
+ options: {
76
+ type: Array,
77
+ required: true,
78
+ },
79
+ modelValue: {
80
+ type: Array,
81
+ required: true,
82
+ },
83
+ optionLabel: {
84
+ type: [String, Function],
85
+ default: 'label',
86
+ },
87
+ optionValue: {
88
+ type: String,
89
+ default: 'value',
90
+ },
91
+ optionGroup: {
92
+ type: String,
93
+ default: 'group',
94
+ },
95
+ useAll: {
96
+ type: Boolean,
97
+ default: false,
98
+ },
99
+ allPlaceholder: {
100
+ type: String,
101
+ default: '전체',
102
+ },
103
+ popupContentClass: {
104
+ default: () => '',
105
+ type: String,
106
+ },
107
+ noOptionLabel: {
108
+ type: String,
109
+ default: '선택지가 없습니다.',
110
+ },
111
+ },
112
+ setup(props, { emit }) {
113
+ const model = ref(props.modelValue);
114
+ const isDisable = props.options.find(v => Boolean(v.disable));
115
+ function onRemoveChecked(detail) {
116
+ const idx = model.value.findIndex(v => v[props.optionValue] === '');
117
+ if (detail.value[props.optionValue] === '') {
118
+ nextTick(() => {
119
+ model.value = [];
120
+ });
121
+ } else if (idx >= 0) {
122
+ nextTick(() => {
123
+ model.value.splice(idx, 1);
124
+ });
125
+ }
126
+ }
127
+ function onAddChecked(detail) {
128
+ if (detail.value === '') {
129
+ nextTick(() => {
130
+ model.value = props.options.filter(v => !v.category);
131
+ });
132
+ } else {
133
+ nextTick(() => {
134
+ if (
135
+ props.useAll &&
136
+ model.value.length === props.options.filter(v => !v.category).length - 1
137
+ ) {
138
+ model.value = props.options.filter(v => !v.category);
139
+ }
140
+ });
141
+ }
142
+ }
143
+
144
+ function checkEmptyValue(value) {
145
+ if (typeof value === 'object') {
146
+ return value.value !== 0 && !value.value;
147
+ }
148
+
149
+ return value !== 0 && !value;
150
+ }
151
+
152
+ watch(
153
+ () => props.modelValue,
154
+ newModelValue => {
155
+ if (props.useAll && newModelValue.length === 1 && checkEmptyValue(newModelValue[0])) {
156
+ model.value = props.options.filter(v => !v.category);
157
+ return;
158
+ }
159
+ model.value = newModelValue;
160
+ },
161
+ );
162
+
163
+ watch(
164
+ () => props.options,
165
+ newOptionValue => {
166
+ if (props.useAll) {
167
+ model.value = newOptionValue.filter(v => !v.category);
168
+ }
169
+ },
170
+ );
171
+
172
+ watch(model, () => {
173
+ emit('update:modelValue', model.value);
174
+ });
175
+
176
+ onBeforeMount(() => {
177
+ if (props.useAll && props.modelValue.length === 1 && checkEmptyValue(props.modelValue[0])) {
178
+ model.value = props.options.filter(v => !v.category);
179
+ }
180
+ });
181
+
182
+ return {
183
+ model,
184
+ selectDownArrowIcon,
185
+ onRemoveChecked,
186
+ onAddChecked,
187
+ isDisable,
188
+ sSelectRef: ref(null),
189
+ };
190
+ },
191
+ });
192
+ </script>
193
+
194
+ <style lang="scss">
195
+ @import '../css/quasar.variables.scss';
196
+ @import '../css/extends.scss';
197
+
198
+ .s-select-checkbox {
199
+ @extend %select;
200
+ .q-field__native {
201
+ display: block;
202
+ min-height: 0;
203
+ height: $default-height;
204
+ width: 100%;
205
+ padding: $select-padding !important;
206
+ color: $Grey_Darken-4;
207
+ white-space: nowrap;
208
+ overflow: hidden;
209
+ text-overflow: ellipsis;
210
+ > span {
211
+ max-height: $default-height;
212
+ }
213
+ > .s-checkbox {
214
+ margin-right: $default-icon-margin;
215
+ }
216
+ }
217
+ }
218
+
219
+ .s-select-checkbox-opts {
220
+ @extend %select-menu-list;
221
+ > .q-virtual-scroll__content {
222
+ > .q-item.disabled {
223
+ border: none;
224
+ color: $Grey_Darken-4 !important;
225
+ opacity: 1 !important;
226
+ background: $Grey_Lighten-5 !important;
227
+ border-top: 1px solid $Grey_Lighten-3 !important;
228
+ &:not(.q-manual-focusable):first-of-type {
229
+ border-top: none !important;
230
+ }
231
+ }
232
+ }
233
+ }
234
+
235
+ .custom-select-options {
236
+ height: $default-height;
237
+ }
238
+ </style>