@skyservice-developers/vue-dev-kit 2.13.4 → 2.14.1

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.
package/README.md CHANGED
@@ -33,10 +33,11 @@ import {
33
33
  SkyTableRoot, SkyTableHeader, SkyTableHead, SkyTableBody, SkyTableRow, SkyTableCell,
34
34
  useTableSort, useTableSelection, useColumnVisibility,
35
35
  FunctionalCalendar, SkyDateRangePicker,
36
+ SkyFilterDropdown,
36
37
  // widgets
37
38
  SkyTileCard,
38
39
  // features
39
- SkyCheckboxFilter,
40
+ SkyCheckboxFilter, SkySelectFilter,
40
41
  TableMassActions, TableColumnSettings, TableVirtualBody,
41
42
  // sdk
42
43
  navigate, SkyserviceAPI, isInsideIframe,
@@ -1110,7 +1111,7 @@ const range = reactive({ start: '', end: '' }) // { start, end } у формат
1110
1111
 
1111
1112
  ### SkyCheckboxFilter
1112
1113
 
1113
- Кнопка-фільтр з дропдауном, пошуком і мульти-вибором (через `SkyCheckbox`). Лочить скрол сторінки, поки відкритий. Стилі повторюють адмінку Skymarket 1:1.
1114
+ Кнопка-фільтр з дропдауном, пошуком і мульти-вибором (через `SkyCheckbox`). Оболонку — тригер, панель, позиціювання, закриття — тримає `SkyFilterDropdown`. Стилі повторюють адмінку Skymarket 1:1.
1114
1115
 
1115
1116
  ```vue
1116
1117
  <SkyCheckboxFilter
@@ -1130,12 +1131,84 @@ const range = reactive({ start: '', end: '' }) // { start, end } у формат
1130
1131
  | `title` | `String` | — | Заголовок фільтра (показується у тригері) |
1131
1132
  | `options` | `Array<{ value, name }>` | `[]` | Опції для вибору |
1132
1133
  | `modelValue` | `Array<String\|Number>` | `[]` | Вибрані значення (v-model) |
1133
- | `selectAllLabel` | `String` | `'Вибрати всі'` | Лейбл кнопки "Вибрати всі" |
1134
+ | `selectAllLabel` | `String` | `'Обрати все'` | Лейбл кнопки "Обрати все" |
1134
1135
  | `clearLabel` | `String` | `'Очистити'` | Лейбл кнопки "Очистити" |
1135
1136
  | `doneLabel` | `String` | `'Готово'` | Лейбл кнопки "Готово" |
1136
1137
  | `searchPlaceholder` | `String` | `'Пошук'` | Placeholder пошуку |
1138
+ | `selectAll` | `Boolean` | `true` | Показувати «Обрати все» |
1137
1139
  | `disabled` | `Boolean` | `false` | Вимкнений стан |
1138
1140
 
1141
+ ### SkySelectFilter
1142
+
1143
+ Той самий фільтр-чіп, але з **одиничним** вибором — для випадків, коли бекенд приймає рівно
1144
+ одне значення. Після вибору дропдаун закривається.
1145
+
1146
+ ```vue
1147
+ <SkySelectFilter
1148
+ v-model="categoryId"
1149
+ title="Категорія"
1150
+ all-label="Усі категорії"
1151
+ :options="[
1152
+ { value: 10, name: 'Напої', depth: 0 },
1153
+ { value: 11, name: 'Кава', depth: 1 },
1154
+ ]"
1155
+ />
1156
+ ```
1157
+
1158
+ #### Props
1159
+
1160
+ | Prop | Тип | За замовчуванням | Опис |
1161
+ |------|-----|------------------|------|
1162
+ | `title` | `String` | — | Заголовок фільтра (показується у тригері) |
1163
+ | `options` | `Array<{ value, name, depth? }>` | — | Опції; `depth` лише відступає рядок |
1164
+ | `modelValue` | `String\|Number\|null` | `null` | Обране значення (v-model); `null` — фільтр вимкнено |
1165
+ | `allLabel` | `String` | `''` | Лейбл рядка «без фільтра»; порожній — рядка немає |
1166
+ | `searchPlaceholder` | `String` | `'Пошук'` | Placeholder пошуку |
1167
+ | `emptyLabel` | `String` | `'Нічого не знайдено'` | Текст порожнього результату пошуку |
1168
+ | `searchable` | `Boolean` | `true` | Показувати поле пошуку |
1169
+ | `disabled` | `Boolean` | `false` | Вимкнений стан |
1170
+
1171
+ ---
1172
+
1173
+ ## SkyFilterDropdown
1174
+
1175
+ Оболонка фільтра: тригер-чіп + панель. Бере на себе тільки спільне — стан відкриття,
1176
+ позиціювання, закриття і доступність; вміст панелі за викликачем. На ній побудовані
1177
+ `SkyCheckboxFilter` і `SkySelectFilter`; бери її напряму для фільтра з власним вмістом.
1178
+
1179
+ Панель телепортується у `<body>` (щоб `transform` у предка не ламав `position: fixed`),
1180
+ перепозиціюється на скрол і resize, притискається до країв екрана й розкривається вгору,
1181
+ коли знизу тісно. Скрол сторінки **не** локиться. Закриття — клік поза межами, `Esc`.
1182
+
1183
+ ```vue
1184
+ <SkyFilterDropdown title="Період" summary="Цей тиждень">
1185
+ <template #default="{ close }">
1186
+ <button @click="close">Готово</button>
1187
+ </template>
1188
+ </SkyFilterDropdown>
1189
+ ```
1190
+
1191
+ #### Props
1192
+
1193
+ | Prop | Тип | За замовчуванням | Опис |
1194
+ |------|-----|------------------|------|
1195
+ | `title` | `String` | — | Лейбл чіпа |
1196
+ | `summary` | `String` | `''` | Заміняє `title`, коли обрано рівно одне |
1197
+ | `badge` | `String\|Number` | `''` | Показується поруч із `title` (напр. лічильник) |
1198
+ | `align` | `'start'\|'end'` | `'start'` | До якого краю тригера притискається панель |
1199
+ | `width` | `Number` | `280` | Ширина панелі в px |
1200
+ | `disabled` | `Boolean` | `false` | Вимкнений стан |
1201
+
1202
+ #### Slots / Events / Expose
1203
+
1204
+ | | |
1205
+ |---|---|
1206
+ | slot `default` | `{ close }` — вміст панелі |
1207
+ | events | `open`, `close` |
1208
+ | expose | `open()`, `close()`, `toggle()`, `isOpen` |
1209
+
1210
+ CSS-змінні (`--sky-filter-*`) — див. [доки](https://74cfe434-a2b3-4d49-8fa7-db7343e399dc.apps.platform365.online/components/sky-filter-dropdown).
1211
+
1139
1212
  ---
1140
1213
 
1141
1214
  ## sky-service-ui-components
@@ -1287,6 +1360,7 @@ src/
1287
1360
  │ ├── table/ # примітиви композиційної таблиці (Root/Header/Head/Body/Row/Cell/Empty)
1288
1361
  │ ├── SkyTable/ # готова віртуал-скрол таблиця (Header/Row/Footer/DynamicScroller/items/*)
1289
1362
  │ ├── SkyTileCard/
1363
+ │ ├── SkyFilterDropdown/ # оболонка фільтра (тригер + панель) + FilterSearch
1290
1364
  │ ├── functional-calendar/ # форк vue-functional-calendar, перенесений зі SkyMarket 1:1
1291
1365
  │ ├── SkyDateRangePicker/ # DatePickerRange зі SkyMarket, store/langs → props/локальний стан
1292
1366
  │ └── <Component>/
@@ -1296,7 +1370,8 @@ src/
1296
1370
  │ └── table/ # skyTableFeatures + useTableSort / useTableSelection / useColumnVisibility
1297
1371
  ├── features/ # фічові блоки (orchestration shared/ui)
1298
1372
  │ ├── index.ts
1299
- │ ├── SkyCheckboxFilter/
1373
+ │ ├── SkyCheckboxFilter/ # мульти-вибір на SkyFilterDropdown
1374
+ │ ├── SkySelectFilter/ # одиничний вибір на SkyFilterDropdown
1300
1375
  │ ├── table/ # TableMassActions / TableColumnSettings / TableVirtualBody
1301
1376
  │ └── data-table/ # SkyDataTable на TanStack v9 + перемикач колонок
1302
1377
  ├── sdk/ # TypeScript SDK (без Vue залежностей)
@@ -11,9 +11,12 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
11
11
  clearLabel?: string;
12
12
  doneLabel?: string;
13
13
  searchPlaceholder?: string;
14
+ /** Сховати «Обрати все» — коли споживач не може прийняти більше одного значення. */
15
+ selectAll?: boolean;
14
16
  disabled?: boolean;
15
17
  }>, {
16
18
  modelValue: () => never[];
19
+ selectAll: boolean;
17
20
  selectAllLabel: string;
18
21
  clearLabel: string;
19
22
  doneLabel: string;
@@ -29,9 +32,12 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
29
32
  clearLabel?: string;
30
33
  doneLabel?: string;
31
34
  searchPlaceholder?: string;
35
+ /** Сховати «Обрати все» — коли споживач не може прийняти більше одного значення. */
36
+ selectAll?: boolean;
32
37
  disabled?: boolean;
33
38
  }>, {
34
39
  modelValue: () => never[];
40
+ selectAll: boolean;
35
41
  selectAllLabel: string;
36
42
  clearLabel: string;
37
43
  doneLabel: string;
@@ -46,6 +52,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
46
52
  clearLabel: string;
47
53
  doneLabel: string;
48
54
  searchPlaceholder: string;
55
+ selectAll: boolean;
49
56
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
50
57
  export default _default;
51
58
  type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
@@ -0,0 +1,73 @@
1
+ type OptionValue = string | number;
2
+ interface Option {
3
+ value: OptionValue;
4
+ name: string;
5
+ /** Nesting level for tree-shaped lists; indents the row, nothing more. */
6
+ depth?: number;
7
+ }
8
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
9
+ title: string;
10
+ options: Option[];
11
+ /** `null` — nothing picked, i.e. the filter is off. */
12
+ modelValue?: OptionValue | null;
13
+ /** Label of the leading "no filter" row; omit to hide that row. */
14
+ allLabel?: string;
15
+ searchPlaceholder?: string;
16
+ emptyLabel?: string;
17
+ searchable?: boolean;
18
+ disabled?: boolean;
19
+ }>, {
20
+ modelValue: null;
21
+ allLabel: string;
22
+ searchPlaceholder: string;
23
+ emptyLabel: string;
24
+ searchable: boolean;
25
+ disabled: boolean;
26
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
27
+ "update:modelValue": (args_0: OptionValue | null) => void;
28
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
29
+ title: string;
30
+ options: Option[];
31
+ /** `null` — nothing picked, i.e. the filter is off. */
32
+ modelValue?: OptionValue | null;
33
+ /** Label of the leading "no filter" row; omit to hide that row. */
34
+ allLabel?: string;
35
+ searchPlaceholder?: string;
36
+ emptyLabel?: string;
37
+ searchable?: boolean;
38
+ disabled?: boolean;
39
+ }>, {
40
+ modelValue: null;
41
+ allLabel: string;
42
+ searchPlaceholder: string;
43
+ emptyLabel: string;
44
+ searchable: boolean;
45
+ disabled: boolean;
46
+ }>>> & Readonly<{
47
+ "onUpdate:modelValue"?: ((args_0: OptionValue | null) => any) | undefined;
48
+ }>, {
49
+ modelValue: OptionValue | null;
50
+ disabled: boolean;
51
+ searchPlaceholder: string;
52
+ allLabel: string;
53
+ emptyLabel: string;
54
+ searchable: boolean;
55
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
56
+ export default _default;
57
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
58
+ type __VLS_TypePropsToRuntimeProps<T> = {
59
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
60
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
61
+ } : {
62
+ type: import('vue').PropType<T[K]>;
63
+ required: true;
64
+ };
65
+ };
66
+ type __VLS_WithDefaults<P, D> = {
67
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
68
+ default: D[K];
69
+ }> : P[K];
70
+ };
71
+ type __VLS_Prettify<T> = {
72
+ [K in keyof T]: T[K];
73
+ } & {};
@@ -0,0 +1 @@
1
+ export { default } from './SkySelectFilter.vue';
@@ -1,3 +1,4 @@
1
1
  export { default as SkyCheckboxFilter } from './SkyCheckboxFilter';
2
+ export { default as SkySelectFilter } from './SkySelectFilter';
2
3
  export * from './table';
3
4
  export * from './data-table';
@@ -0,0 +1,25 @@
1
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
2
+ modelValue: string;
3
+ placeholder?: string;
4
+ /** Rendered as the field's accessible name (the row has no visible label). */
5
+ label?: string;
6
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
7
+ "update:modelValue": (args_0: string) => void;
8
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
9
+ modelValue: string;
10
+ placeholder?: string;
11
+ /** Rendered as the field's accessible name (the row has no visible label). */
12
+ label?: string;
13
+ }>>> & Readonly<{
14
+ "onUpdate:modelValue"?: ((args_0: string) => any) | undefined;
15
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
16
+ export default _default;
17
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
18
+ type __VLS_TypePropsToRuntimeProps<T> = {
19
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
20
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
21
+ } : {
22
+ type: import('vue').PropType<T[K]>;
23
+ required: true;
24
+ };
25
+ };
@@ -0,0 +1,86 @@
1
+ declare function open(): void;
2
+ declare function close(): void;
3
+ declare function toggle(): void;
4
+ declare function __VLS_template(): {
5
+ default?(_: {
6
+ close: typeof close;
7
+ }): any;
8
+ };
9
+ declare const __VLS_component: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
10
+ /** Chip label, always visible. */
11
+ title: string;
12
+ /** Replaces the title when exactly one thing is picked (e.g. the option name). */
13
+ summary?: string;
14
+ /** Shown next to the title when several things are picked (e.g. the count). */
15
+ badge?: string | number;
16
+ disabled?: boolean;
17
+ /** Which trigger edge the panel lines up with when it fits. */
18
+ align?: "start" | "end";
19
+ /** Panel width in px; the panel never grows past the viewport. */
20
+ width?: number;
21
+ }>, {
22
+ summary: string;
23
+ badge: string;
24
+ disabled: boolean;
25
+ align: string;
26
+ width: number;
27
+ }>>, {
28
+ open: typeof open;
29
+ close: typeof close;
30
+ toggle: typeof toggle;
31
+ isOpen: import('vue').Ref<boolean, boolean>;
32
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
33
+ open: () => void;
34
+ close: () => void;
35
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
36
+ /** Chip label, always visible. */
37
+ title: string;
38
+ /** Replaces the title when exactly one thing is picked (e.g. the option name). */
39
+ summary?: string;
40
+ /** Shown next to the title when several things are picked (e.g. the count). */
41
+ badge?: string | number;
42
+ disabled?: boolean;
43
+ /** Which trigger edge the panel lines up with when it fits. */
44
+ align?: "start" | "end";
45
+ /** Panel width in px; the panel never grows past the viewport. */
46
+ width?: number;
47
+ }>, {
48
+ summary: string;
49
+ badge: string;
50
+ disabled: boolean;
51
+ align: string;
52
+ width: number;
53
+ }>>> & Readonly<{
54
+ onOpen?: (() => any) | undefined;
55
+ onClose?: (() => any) | undefined;
56
+ }>, {
57
+ disabled: boolean;
58
+ summary: string;
59
+ badge: string | number;
60
+ align: "start" | "end";
61
+ width: number;
62
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
63
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, ReturnType<typeof __VLS_template>>;
64
+ export default _default;
65
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
66
+ type __VLS_TypePropsToRuntimeProps<T> = {
67
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
68
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
69
+ } : {
70
+ type: import('vue').PropType<T[K]>;
71
+ required: true;
72
+ };
73
+ };
74
+ type __VLS_WithDefaults<P, D> = {
75
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
76
+ default: D[K];
77
+ }> : P[K];
78
+ };
79
+ type __VLS_Prettify<T> = {
80
+ [K in keyof T]: T[K];
81
+ } & {};
82
+ type __VLS_WithTemplateSlots<T, S> = T & {
83
+ new (): {
84
+ $slots: S;
85
+ };
86
+ };
@@ -0,0 +1 @@
1
+ export { default } from './SkyFilterDropdown.vue';
@@ -13,6 +13,7 @@ export { default as SkyCardHeader } from './SkyCardHeader';
13
13
  export { default as SkyCardRow } from './SkyCardRow';
14
14
  export { default as SkyCheckbox } from './SkyCheckbox';
15
15
  export { default as SkyDateRangePicker } from './SkyDateRangePicker';
16
+ export { default as SkyFilterDropdown } from './SkyFilterDropdown';
16
17
  export { default as SkyInput } from './SkyInput';
17
18
  export { default as SkyLoader } from './SkyLoader';
18
19
  export { default as SkySelect } from './SkySelect';