@skyservice-developers/vue-dev-kit 2.11.0 → 2.12.0

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 (46) hide show
  1. package/README.md +223 -37
  2. package/dist/features/data-table/SkyDataTable.vue.d.ts +210 -0
  3. package/dist/features/data-table/SkyDataTableColumnToggle.vue.d.ts +36 -0
  4. package/dist/features/data-table/index.d.ts +2 -0
  5. package/dist/features/index.d.ts +2 -0
  6. package/dist/features/table/TableColumnSettings.vue.d.ts +31 -0
  7. package/dist/features/table/TableMassActions.vue.d.ts +56 -0
  8. package/dist/features/table/TableVirtualBody.vue.d.ts +65 -0
  9. package/dist/features/table/index.d.ts +3 -0
  10. package/dist/index.d.ts +1 -0
  11. package/dist/shared/lib/table/index.d.ts +8 -0
  12. package/dist/shared/lib/table/tableFeatures.d.ts +110 -0
  13. package/dist/shared/lib/table/useColumnVisibility.d.ts +29 -0
  14. package/dist/shared/lib/table/useTableSelection.d.ts +34 -0
  15. package/dist/shared/lib/table/useTableSort.d.ts +28 -0
  16. package/dist/shared/ui/SkyDateRangePicker/SkyDateRangePicker.vue.d.ts +749 -0
  17. package/dist/shared/ui/SkyDateRangePicker/index.d.ts +1 -0
  18. package/dist/shared/ui/SkyTable/DynamicScroller.vue.d.ts +2 -2
  19. package/dist/shared/ui/SkyTable/Row.vue.d.ts +2 -2
  20. package/dist/shared/ui/SkyTable/items/itemDefault.vue.d.ts +2 -2
  21. package/dist/shared/ui/SkyTable/items/itemInput.vue.d.ts +1 -1
  22. package/dist/shared/ui/SkyTable/items/itemSelect.vue.d.ts +2 -2
  23. package/dist/shared/ui/SkyTable/items/itemTagEditor.vue.d.ts +2 -2
  24. package/dist/shared/ui/SkyTable/items/itemTags.vue.d.ts +1 -1
  25. package/dist/shared/ui/functional-calendar/components/Arrows.vue.d.ts +49 -0
  26. package/dist/shared/ui/functional-calendar/components/Day.vue.d.ts +81 -0
  27. package/dist/shared/ui/functional-calendar/components/Footer.vue.d.ts +2 -0
  28. package/dist/shared/ui/functional-calendar/components/FunctionalCalendar.vue.d.ts +554 -0
  29. package/dist/shared/ui/functional-calendar/components/MonthYearPicker.vue.d.ts +27 -0
  30. package/dist/shared/ui/functional-calendar/components/PickerInputs.vue.d.ts +41 -0
  31. package/dist/shared/ui/functional-calendar/components/TimePicker.vue.d.ts +23 -0
  32. package/dist/shared/ui/functional-calendar/components/WeekNumbers.vue.d.ts +22 -0
  33. package/dist/shared/ui/index.d.ts +3 -0
  34. package/dist/shared/ui/table/SkyTableBody.vue.d.ts +11 -0
  35. package/dist/shared/ui/table/SkyTableCell.vue.d.ts +45 -0
  36. package/dist/shared/ui/table/SkyTableEmpty.vue.d.ts +39 -0
  37. package/dist/shared/ui/table/SkyTableHead.vue.d.ts +34 -0
  38. package/dist/shared/ui/table/SkyTableHeader.vue.d.ts +40 -0
  39. package/dist/shared/ui/table/SkyTableRoot.vue.d.ts +50 -0
  40. package/dist/shared/ui/table/SkyTableRow.vue.d.ts +49 -0
  41. package/dist/shared/ui/table/index.d.ts +9 -0
  42. package/dist/shared/ui/table/types.d.ts +36 -0
  43. package/dist/style.css +1 -1
  44. package/dist/vue-dev-kit.cjs +14 -12
  45. package/dist/vue-dev-kit.js +11942 -8833
  46. package/package.json +11 -2
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Vue 3 developer toolkit для Skyservice mini-apps: UI компоненти + TypeScript SDK (iframe bridge + HTTP API клієнт).
4
4
 
5
+ 📖 **Документація з живими демо:** https://74cfe434-a2b3-4d49-8fa7-db7343e399dc.apps.platform365.online/
6
+
5
7
  > **v2.0.0 breaking changes:**
6
8
  > - Vue 2 більше не підтримується (тільки Vue 3.4+).
7
9
  > - Додано повноцінний SDK (`bridge` + `SkyserviceAPI`), раніше опублікований як окремий пакет `skyservice-sdk` (задепрекейтнутий).
@@ -22,14 +24,20 @@ import '@skyservice-developers/vue-dev-kit/style.css'
22
24
  import {
23
25
  // shared/ui
24
26
  Header, Modal, Dialog,
25
- SkyButton, SkySelect, SkySelectSearch, SkyInput, SkySearchInput, SkyCheckbox,
27
+ SkyButton, SkySelect, SkySelectSearch, SkyInput, SkySearchInput, SkyCheckbox, SkyTabs,
26
28
  SkyAlert, SkyBadge, SkyLoader,
27
29
  SkyCard, SkyCardHeader, SkyCardRow,
28
30
  SkyTable,
31
+ // грід на TanStack + примітиви таблиці + композабли
32
+ SkyDataTable, createSkyColumnHelper, skyTableFeatures,
33
+ SkyTableRoot, SkyTableHeader, SkyTableHead, SkyTableBody, SkyTableRow, SkyTableCell,
34
+ useTableSort, useTableSelection, useColumnVisibility,
35
+ FunctionalCalendar, SkyDateRangePicker,
29
36
  // widgets
30
37
  SkyTileCard,
31
38
  // features
32
39
  SkyCheckboxFilter,
40
+ TableMassActions, TableColumnSettings, TableVirtualBody,
33
41
  // sdk
34
42
  navigate, SkyserviceAPI, isInsideIframe,
35
43
  // sky-service-ui-components
@@ -381,60 +389,47 @@ import {
381
389
 
382
390
  ### SkySelect
383
391
 
384
- Кастомний select з дропдауном, клавіатурною навігацією та підтримкою рядків і об'єктів як опцій.
392
+ Нативний `<select>` у фірмовому стилі, зі станами `default | success | error` та підказкою під полем.
385
393
 
386
394
  ```vue
387
- <!-- Об'єкти -->
388
395
  <SkySelect
389
- v-model="selected"
396
+ v-model="payment"
390
397
  :options="[
391
- { label: 'Готівка', value: 'cash' },
392
- { label: 'Картка', value: 'card' },
398
+ { value: 'cash', text: 'Готівка' },
399
+ { value: 'card', text: 'Картка' },
393
400
  ]"
394
401
  placeholder="Оберіть спосіб оплати"
395
402
  />
396
403
 
397
- <!-- Рядки -->
398
- <SkySelect v-model="selected" :options="['Кг', 'Шт', 'Л']" />
399
-
400
- <!-- На всю ширину -->
401
- <SkySelect v-model="selected" :options="options" block />
404
+ <SkySelect v-model="payment" :options="options" state="error" hint="Оберіть спосіб" />
405
+ <SkySelect v-model="payment" :options="options" disabled />
402
406
  ```
403
407
 
404
408
  #### Props
405
409
 
406
410
  | Prop | Тип | За замовчуванням | Опис |
407
411
  |------|-----|------------------|------|
408
- | `modelValue` / `value` | `any` | `null` | Поточне значення (v-model) |
409
- | `options` | `Array` | `[]` | `Array<{ label, value } \| string>` |
410
- | `placeholder` | `String` | `''` | Текст-заглушка |
412
+ | `modelValue` | `string \| number` | — | Поточне значення (v-model) |
413
+ | `options` | `Array<{ value: string \| number; text: string }>` | — | Список опцій (обов'язковий) |
414
+ | `id` | `String` | — | HTML id |
411
415
  | `disabled` | `Boolean` | `false` | Вимкнений стан |
412
- | `block` | `Boolean` | `false` | Повна ширина |
413
- | `teleport` | `Boolean` | `false` | Рендерить дропдаун в `<body>` (для модалок/overflow:hidden контейнерів) |
416
+ | `state` | `'default' \| 'success' \| 'error'` | `'default'` | Візуальний стан рамки |
417
+ | `placeholder` | `String` | `''` | Текст-заглушка (рендериться як `disabled hidden` опція) |
418
+ | `hint` | `String` | `''` | Підказка під полем у кольорі `state` |
414
419
 
415
- #### Клавіатура
420
+ #### Events
416
421
 
417
- | Клавіша | Дія |
418
- |---------|-----|
419
- | `Enter` / `Space` | Відкрити дропдаун |
420
- | `↑` / `↓` | Навігація по опціях |
421
- | `Enter` | Вибрати поточну опцію |
422
- | `Esc` | Закрити дропдаун |
422
+ | Event | Payload | Опис |
423
+ |-------|---------|------|
424
+ | `update:modelValue` | `string \| number` | Emit при виборі опції |
423
425
 
424
- #### CSS змінні
426
+ > **Формат опцій — тільки `{ value, text }`.** Масив рядків або `{ label, value }` дадуть порожні пункти:
427
+ > компонент читає `option.value` і `option.text`. Мапте дані заздалегідь — `units.map(u => ({ value: u, text: u }))`.
425
428
 
426
- ```css
427
- --sky-select-padding: 10px 14px
428
- --sky-select-radius: 6px
429
- --sky-select-font-size: 14px
430
- --sky-select-border: 1px solid #d1d5db
431
- --sky-select-dropdown-shadow: 0 4px 12px rgba(0,0,0,0.1)
432
- --sky-select-dropdown-max-height: 220px
433
- --sky-select-option-hover-bg: #f3f4f6
434
- --sky-select-option-selected-color: #24973f
435
- ```
429
+ > Список малює браузер, тож клавіатура й поведінка на мобільних — рідні для платформи, а дропдаун
430
+ > не обрізається контейнерами з `overflow: hidden` (усередині `Modal` teleport не потрібен).
431
+ > Компонент займає всю ширину контейнера — обмежуйте батьківський блок, якщо треба вужче.
436
432
 
437
- ---
438
433
 
439
434
  ### SkySelectSearch
440
435
 
@@ -579,6 +574,39 @@ import {
579
574
 
580
575
  ---
581
576
 
577
+ ### SkyTabs
578
+
579
+ Сегментовані таби з анімованим індикатором: біла «пігулка» плавно переїжджає під активну опцію й підлаштовує ширину під довжину тексту.
580
+
581
+ ```vue
582
+ <SkyTabs
583
+ v-model="period"
584
+ :options="[
585
+ { value: 'day', text: 'День' },
586
+ { value: 'week', text: 'Тиждень' },
587
+ { value: 'month', text: 'Місяць' },
588
+ ]"
589
+ />
590
+ ```
591
+
592
+ #### Props
593
+
594
+ | Prop | Тип | За замовчуванням | Опис |
595
+ |------|-----|------------------|------|
596
+ | `modelValue` | `string \| number` | — | Активне значення (v-model) |
597
+ | `options` | `Array<{ value: string \| number; text: string }>` | — | Список табів (обов'язковий) |
598
+ | `disabled` | `Boolean` | `false` | Блокує весь набір |
599
+
600
+ #### Events
601
+
602
+ | Event | Payload | Опис |
603
+ |-------|---------|------|
604
+ | `update:modelValue` | `string \| number` | Emit при виборі таба |
605
+
606
+ > Індикатор вимірює активну кнопку через `getBoundingClientRect()`: на першому рендері стає на місце без анімації, далі — з переходом. Реагує на `resize` вікна і зміну кількості опцій. У прихованому контейнері (`display: none`) розміри нульові — позиція виправиться після показу.
607
+
608
+ ---
609
+
582
610
  ### SkyAlert
583
611
 
584
612
  Інформаційне повідомлення з 4 тональностями та опціональною іконкою.
@@ -831,6 +859,129 @@ Shell-контейнер для карток: ribbon / header / body / footer
831
859
 
832
860
  ---
833
861
 
862
+ ### SkyDataTable
863
+
864
+ Грід на [TanStack Table v9](https://tanstack.com/table/latest): headless-ядро тримає стан і обчислення, розмітка й стилі — наші. Візуально це та сама таблиця, що в POS. Повний опис — у [документації](https://74cfe434-a2b3-4d49-8fa7-db7343e399dc.apps.platform365.online/components/data-table).
865
+
866
+ ```vue
867
+ <script setup lang="ts">
868
+ import { h } from 'vue'
869
+ import { SkyDataTable, SkyBadge, createSkyColumnHelper } from '@skyservice-developers/vue-dev-kit'
870
+
871
+ const column = createSkyColumnHelper<Product>()
872
+
873
+ const columns = [
874
+ column.accessor('name', { header: 'Назва', meta: { widthFr: 2 } }),
875
+ column.accessor('price', {
876
+ header: 'Ціна',
877
+ size: 110,
878
+ meta: { align: 'right' },
879
+ cell: ({ getValue }) => `${getValue()} ₴`,
880
+ }),
881
+ column.accessor('status', {
882
+ header: 'Статус',
883
+ size: 150,
884
+ enableSorting: false,
885
+ cell: ({ getValue }) =>
886
+ h(SkyBadge, { tone: getValue() === 'Активний' ? 'success' : 'default', label: getValue() }),
887
+ }),
888
+ ]
889
+ </script>
890
+
891
+ <template>
892
+ <SkyDataTable :columns="columns" :data="products" :page-size="25" row-id="id" searchable />
893
+ </template>
894
+ ```
895
+
896
+ #### Props
897
+
898
+ | Prop | Тип | За замовчуванням | Опис |
899
+ |------|-----|------------------|------|
900
+ | `columns` | `ColumnDef[]` | — | Опис колонок (TanStack) |
901
+ | `data` | `TData[]` | — | Дані |
902
+ | `features` | `TableFeatures` | `skyTableFeatures` | Власний набір фіч |
903
+ | `rowId` | `String \| (row) => string` | — | Ключ рядка |
904
+ | `pageSize` | `Number` | `0` | Розмір сторінки; `0` — без пагінації |
905
+ | `searchable` | `Boolean` | `false` | Поле глобального пошуку в тулбарі |
906
+ | `initialSorting` | `SortingState` | — | Початкове сортування |
907
+ | `emptyText` | `String` | `'Даних немає'` | Текст порожнього стану |
908
+ | `interactiveRows` | `Boolean` | `false` | Курсор і hover на рядках |
909
+
910
+ Слоти: `toolbar`, `actions`, `footer`, `empty` (усі отримують `{ table }`). Подія: `row-click`. Інстанс таблиці доступний через `ref` → `tableRef.table`.
911
+
912
+ #### Набір фіч
913
+
914
+ Фічі TanStack v9 вмикаються явно — кіт експортує стабільний `skyTableFeatures` (сортування, вибір, видимість колонок, пагінація, фільтрація + слоти row-моделей і реєстри `sortFns`/`filterFns`). Потрібно більше — зберіть свій обʼєкт і передайте пропом `features`:
915
+
916
+ ```ts
917
+ import { tableFeatures, rowExpandingFeature, createExpandedRowModel } from '@tanstack/vue-table'
918
+ import { skyTableFeatures } from '@skyservice-developers/vue-dev-kit'
919
+
920
+ const features = tableFeatures({
921
+ ...skyTableFeatures,
922
+ rowExpandingFeature,
923
+ expandedRowModel: createExpandedRowModel(),
924
+ })
925
+ ```
926
+
927
+ Ширина колонок: `size: 150` — фіксовані px, `meta: { widthFr: 2 }` — гнучка частка (має пріоритет над `size`), `meta: { align }` і `meta: { minWidthScreen }` — вирівнювання й приховування на вузьких екранах.
928
+
929
+ > `@tanstack/vue-table` входить у залежності пакета й лишається зовнішнім у бандлі — застосунки, які гріда не використовують, його не тягнуть.
930
+
931
+ ---
932
+
933
+ ### Таблиця з примітивів (композиційна)
934
+
935
+ Набір примітивів і композаблів замість одного великого компонента: береш тільки те, що треба. Без вибору рядків, без масових дій, без віртуалізації — і нічого з цього не потрапляє в бандл. Повний опис — у [документації](https://74cfe434-a2b3-4d49-8fa7-db7343e399dc.apps.platform365.online/components/table).
936
+
937
+ ```vue
938
+ <script setup>
939
+ import {
940
+ SkyTableRoot, SkyTableHeader, SkyTableHead,
941
+ SkyTableBody, SkyTableRow, SkyTableCell,
942
+ } from '@skyservice-developers/vue-dev-kit'
943
+
944
+ const columns = [
945
+ { name: 'name', title: 'Товар', widthFr: 2 },
946
+ { name: 'price', title: 'Ціна', width: 90, align: 'right' },
947
+ ]
948
+ </script>
949
+
950
+ <template>
951
+ <SkyTableRoot :columns="columns">
952
+ <SkyTableHeader>
953
+ <SkyTableHead v-for="c in columns" :key="c.name" :column="c" />
954
+ </SkyTableHeader>
955
+ <SkyTableBody>
956
+ <SkyTableRow v-for="row in rows" :key="row.id">
957
+ <SkyTableCell>{{ row.name }}</SkyTableCell>
958
+ <SkyTableCell align="right">{{ row.price }}</SkyTableCell>
959
+ </SkyTableRow>
960
+ </SkyTableBody>
961
+ </SkyTableRoot>
962
+ </template>
963
+ ```
964
+
965
+ #### Що входить
966
+
967
+ | Шар | Експорти | Коли підключати |
968
+ |-----|----------|-----------------|
969
+ | Примітиви (`shared/ui/table`) | `SkyTableRoot`, `SkyTableHeader`, `SkyTableHead`, `SkyTableBody`, `SkyTableRow`, `SkyTableCell`, `SkyTableEmpty` | завжди |
970
+ | Композабли (`shared/lib/table`) | `useTableSort`, `useTableSelection`, `useColumnVisibility` | за потреби |
971
+ | Фічі (`features/table`) | `TableMassActions`, `TableColumnSettings`, `TableVirtualBody` | опційно, кожна окремо |
972
+
973
+ ```ts
974
+ const { sort, toggle } = useTableSort({ initial: { of: 'name', ot: 'asc' } })
975
+ const { selected, isSelected, toggle: select, toggleAll } = useTableSelection(rows, { rowId: 'id' })
976
+ const { visibility, visibleColumns } = useColumnVisibility(columns, { storageKey: 'products' })
977
+ ```
978
+
979
+ Композабли не сортують і не фільтрують дані — вони тримають стан, а дані лишаються за застосунком (зазвичай сортує сервер). Колонка вибору описується як звичайна колонка (`{ name: '_select', width: 44 }`), щоб грід шапки й рядків рахувався з одного джерела.
980
+
981
+ > `vue-virtual-scroller` імпортує лише `TableVirtualBody`. Не потрібна віртуалізація — беріть `SkyTableBody`, і залежність не знадобиться.
982
+
983
+ ---
984
+
834
985
  ### SkyTable
835
986
 
836
987
  Віртуал-скрол таблиця (на `vue-virtual-scroller`) для великих списків — у DOM тримаються лише видимі рядки. Розмітка й стилі 1:1 з таблицею товарів POS: чекбокси, масові дії, сортування, зміна ширини/видимості колонок, розкриття вкладених рядків (модифікацій), inline-редагування комірок і теги.
@@ -927,6 +1078,33 @@ const json = { items, total: items.length }
927
1078
 
928
1079
  ---
929
1080
 
1081
+ ### FunctionalCalendar
1082
+
1083
+ Перенесено зі SkyMarket (`src/lib/functional-calendar`), стилі й розмітка 1:1. Форк [vue-functional-calendar](https://github.com/ManukMinasyan/vue-functional-calendar) під Vue 3 — пропси, події та слоти без змін відносно оригіналу.
1084
+
1085
+ ```vue
1086
+ <FunctionalCalendar
1087
+ :value="calendarData"
1088
+ @input="calendarData = $event"
1089
+ is-date-range
1090
+ is-modal
1091
+ />
1092
+ ```
1093
+
1094
+ ### SkyDateRangePicker
1095
+
1096
+ Перенесено зі SkyMarket (`DatePickerRange.vue`) — готовий попап-піка діапазону дат на базі `FunctionalCalendar`: іконка-тригер, лейбл періоду, пресети (Сьогодні / Вчора / Тиждень / Місяць / Минулий-Поточний місяць / За весь час), стилі 1:1. На відміну від оригіналу, який читав `store`/`@/langs` конкретного застосунку, тут стан і тексти (з UA-фолбеками) локальні.
1097
+
1098
+ ```vue
1099
+ <SkyDateRangePicker v-model="range" @set-date="onPreset" />
1100
+ ```
1101
+
1102
+ ```js
1103
+ const range = reactive({ start: '', end: '' }) // { start, end } у форматі yyyy-mm-dd
1104
+ ```
1105
+
1106
+ ---
1107
+
930
1108
  ## Features
931
1109
 
932
1110
  ### SkyCheckboxFilter
@@ -1097,18 +1275,26 @@ src/
1097
1275
  │ ├── BaseTeleport/
1098
1276
  │ ├── SkyButton/
1099
1277
  │ ├── SkySelect/ SkySelectSearch/ SkyInput/ SkySearchInput/ SkyCheckbox/
1278
+ │ ├── SkyTabs/ # сегментовані таби з анімованим індикатором
1100
1279
  │ ├── SkyAlert/
1101
1280
  │ ├── SkyBadge/
1102
1281
  │ ├── SkyCard/ SkyCardHeader/ SkyCardRow/
1103
1282
  │ ├── SkyLoader/
1104
- │ ├── SkyTable/ # віртуал-скрол таблиця (Header/Row/Footer/DynamicScroller/items/*)
1283
+ │ ├── table/ # примітиви композиційної таблиці (Root/Header/Head/Body/Row/Cell/Empty)
1284
+ │ ├── SkyTable/ # готова віртуал-скрол таблиця (Header/Row/Footer/DynamicScroller/items/*)
1105
1285
  │ ├── SkyTileCard/
1286
+ │ ├── functional-calendar/ # форк vue-functional-calendar, перенесений зі SkyMarket 1:1
1287
+ │ ├── SkyDateRangePicker/ # DatePickerRange зі SkyMarket, store/langs → props/локальний стан
1106
1288
  │ └── <Component>/
1107
1289
  │ ├── <Component>.vue
1108
1290
  │ └── index.ts
1291
+ │ └── lib/
1292
+ │ └── table/ # skyTableFeatures + useTableSort / useTableSelection / useColumnVisibility
1109
1293
  ├── features/ # фічові блоки (orchestration shared/ui)
1110
1294
  │ ├── index.ts
1111
- │ └── SkyCheckboxFilter/
1295
+ │ ├── SkyCheckboxFilter/
1296
+ │ ├── table/ # TableMassActions / TableColumnSettings / TableVirtualBody
1297
+ │ └── data-table/ # SkyDataTable на TanStack v9 + перемикач колонок
1112
1298
  ├── sdk/ # TypeScript SDK (без Vue залежностей)
1113
1299
  │ ├── bridge.ts # iframe postMessage API
1114
1300
  │ ├── api.ts # SkyserviceAPI HTTP клієнт
@@ -0,0 +1,210 @@
1
+ import { ColumnDef, SortingState, TableFeatures } from '@tanstack/vue-table';
2
+
3
+ declare const _default: <TData extends Record<string, any>>(__VLS_props: Awaited<typeof __VLS_setup>["props"], __VLS_ctx?: __VLS_Prettify<Pick<Awaited<typeof __VLS_setup>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
+ props: __VLS_Prettify<__VLS_OmitKeepDiscriminatedUnion<(Partial<{}> & Omit<{
5
+ readonly "onRow-click"?: ((row: TData) => any) | undefined;
6
+ } & import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps, never>) & {
7
+ /** Опис колонок у форматі TanStack. Ширину беремо з `size` / `meta.widthFr`. */
8
+ columns: ColumnDef<any, TData, any>[];
9
+ data: TData[];
10
+ /**
11
+ * Набір фіч. За замовчуванням — сортування, вибір, видимість колонок,
12
+ * пагінація і фільтрація. Потрібно більше — зберіть свій через `tableFeatures()`.
13
+ */
14
+ features?: TableFeatures;
15
+ /** Ключ рядка. Без нього TanStack бере індекс, і вибір «поїде» після сортування. */
16
+ rowId?: string | ((row: TData) => string);
17
+ /** Розмір сторінки. `0` вимикає пагінацію — рендеряться всі рядки. */
18
+ pageSize?: number;
19
+ /** Показати поле глобального пошуку в тулбарі. */
20
+ searchable?: boolean;
21
+ searchPlaceholder?: string;
22
+ initialSorting?: SortingState;
23
+ emptyText?: string;
24
+ /** Курсор-вказівник і hover на рядках. */
25
+ interactiveRows?: boolean;
26
+ }, keyof import('vue').VNodeProps | keyof import('vue').AllowedComponentProps>> & {} & (import('vue').VNodeProps & import('vue').AllowedComponentProps & import('vue').ComponentCustomProps);
27
+ expose(exposed: import('vue').ShallowUnwrapRef<{
28
+ table: import('@tanstack/vue-table').VueTable<{
29
+ columnFilteringFeature: import('@tanstack/table-core').TableFeature;
30
+ columnSizingFeature: import('@tanstack/table-core').TableFeature;
31
+ columnVisibilityFeature: import('@tanstack/table-core').TableFeature;
32
+ globalFilteringFeature: import('@tanstack/table-core').TableFeature;
33
+ rowPaginationFeature: import('@tanstack/table-core').TableFeature;
34
+ rowSelectionFeature: import('@tanstack/table-core').TableFeature;
35
+ rowSortingFeature: import('@tanstack/table-core').TableFeature;
36
+ coreRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
37
+ filteredRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
38
+ sortedRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
39
+ paginatedRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
40
+ sortFns: {
41
+ alphanumeric: import('@tanstack/table-core').CreatedSortFn<any, any>;
42
+ alphanumericCaseSensitive: import('@tanstack/table-core').CreatedSortFn<any, any>;
43
+ basic: import('@tanstack/table-core').CreatedSortFn<any, any>;
44
+ datetime: import('@tanstack/table-core').CreatedSortFn<any, any>;
45
+ text: import('@tanstack/table-core').CreatedSortFn<any, any>;
46
+ textCaseSensitive: import('@tanstack/table-core').CreatedSortFn<any, any>;
47
+ };
48
+ filterFns: {
49
+ arrIncludes: import('@tanstack/table-core').CreatedFilterFn<any, any>;
50
+ arrIncludesAll: import('@tanstack/table-core').CreatedFilterFn<any, any>;
51
+ arrHas: import('@tanstack/table-core').CreatedFilterFn<any, any>;
52
+ arrIncludesSome: import('@tanstack/table-core').CreatedFilterFn<any, any>;
53
+ between: import('@tanstack/table-core').CreatedFilterFn<any, any>;
54
+ betweenInclusive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
55
+ empty: import('@tanstack/table-core').CreatedFilterFn<any, any>;
56
+ endsWith: import('@tanstack/table-core').CreatedFilterFn<any, any>;
57
+ equals: import('@tanstack/table-core').CreatedFilterFn<any, any>;
58
+ equalsString: import('@tanstack/table-core').CreatedFilterFn<any, any>;
59
+ equalsStringSensitive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
60
+ inDateRange: import('@tanstack/table-core').CreatedFilterFn<any, any>;
61
+ inNumberRange: import('@tanstack/table-core').CreatedFilterFn<any, any>;
62
+ includesString: import('@tanstack/table-core').CreatedFilterFn<any, any>;
63
+ includesStringSensitive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
64
+ notEmpty: import('@tanstack/table-core').CreatedFilterFn<any, any>;
65
+ startsWith: import('@tanstack/table-core').CreatedFilterFn<any, any>;
66
+ weakEquals: import('@tanstack/table-core').CreatedFilterFn<any, any>;
67
+ };
68
+ }, TData>;
69
+ }>): void;
70
+ attrs: any;
71
+ slots: ReturnType<() => {
72
+ toolbar?(_: {
73
+ table: import('@tanstack/vue-table').VueTable<{
74
+ columnFilteringFeature: import('@tanstack/table-core').TableFeature;
75
+ columnSizingFeature: import('@tanstack/table-core').TableFeature;
76
+ columnVisibilityFeature: import('@tanstack/table-core').TableFeature;
77
+ globalFilteringFeature: import('@tanstack/table-core').TableFeature;
78
+ rowPaginationFeature: import('@tanstack/table-core').TableFeature;
79
+ rowSelectionFeature: import('@tanstack/table-core').TableFeature;
80
+ rowSortingFeature: import('@tanstack/table-core').TableFeature;
81
+ coreRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
82
+ filteredRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
83
+ sortedRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
84
+ paginatedRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
85
+ sortFns: {
86
+ alphanumeric: import('@tanstack/table-core').CreatedSortFn<any, any>;
87
+ alphanumericCaseSensitive: import('@tanstack/table-core').CreatedSortFn<any, any>;
88
+ basic: import('@tanstack/table-core').CreatedSortFn<any, any>;
89
+ datetime: import('@tanstack/table-core').CreatedSortFn<any, any>;
90
+ text: import('@tanstack/table-core').CreatedSortFn<any, any>;
91
+ textCaseSensitive: import('@tanstack/table-core').CreatedSortFn<any, any>;
92
+ };
93
+ filterFns: {
94
+ arrIncludes: import('@tanstack/table-core').CreatedFilterFn<any, any>;
95
+ arrIncludesAll: import('@tanstack/table-core').CreatedFilterFn<any, any>;
96
+ arrHas: import('@tanstack/table-core').CreatedFilterFn<any, any>;
97
+ arrIncludesSome: import('@tanstack/table-core').CreatedFilterFn<any, any>;
98
+ between: import('@tanstack/table-core').CreatedFilterFn<any, any>;
99
+ betweenInclusive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
100
+ empty: import('@tanstack/table-core').CreatedFilterFn<any, any>;
101
+ endsWith: import('@tanstack/table-core').CreatedFilterFn<any, any>;
102
+ equals: import('@tanstack/table-core').CreatedFilterFn<any, any>;
103
+ equalsString: import('@tanstack/table-core').CreatedFilterFn<any, any>;
104
+ equalsStringSensitive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
105
+ inDateRange: import('@tanstack/table-core').CreatedFilterFn<any, any>;
106
+ inNumberRange: import('@tanstack/table-core').CreatedFilterFn<any, any>;
107
+ includesString: import('@tanstack/table-core').CreatedFilterFn<any, any>;
108
+ includesStringSensitive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
109
+ notEmpty: import('@tanstack/table-core').CreatedFilterFn<any, any>;
110
+ startsWith: import('@tanstack/table-core').CreatedFilterFn<any, any>;
111
+ weakEquals: import('@tanstack/table-core').CreatedFilterFn<any, any>;
112
+ };
113
+ }, TData>;
114
+ }): any;
115
+ actions?(_: {
116
+ table: import('@tanstack/vue-table').VueTable<{
117
+ columnFilteringFeature: import('@tanstack/table-core').TableFeature;
118
+ columnSizingFeature: import('@tanstack/table-core').TableFeature;
119
+ columnVisibilityFeature: import('@tanstack/table-core').TableFeature;
120
+ globalFilteringFeature: import('@tanstack/table-core').TableFeature;
121
+ rowPaginationFeature: import('@tanstack/table-core').TableFeature;
122
+ rowSelectionFeature: import('@tanstack/table-core').TableFeature;
123
+ rowSortingFeature: import('@tanstack/table-core').TableFeature;
124
+ coreRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
125
+ filteredRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
126
+ sortedRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
127
+ paginatedRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
128
+ sortFns: {
129
+ alphanumeric: import('@tanstack/table-core').CreatedSortFn<any, any>;
130
+ alphanumericCaseSensitive: import('@tanstack/table-core').CreatedSortFn<any, any>;
131
+ basic: import('@tanstack/table-core').CreatedSortFn<any, any>;
132
+ datetime: import('@tanstack/table-core').CreatedSortFn<any, any>;
133
+ text: import('@tanstack/table-core').CreatedSortFn<any, any>;
134
+ textCaseSensitive: import('@tanstack/table-core').CreatedSortFn<any, any>;
135
+ };
136
+ filterFns: {
137
+ arrIncludes: import('@tanstack/table-core').CreatedFilterFn<any, any>;
138
+ arrIncludesAll: import('@tanstack/table-core').CreatedFilterFn<any, any>;
139
+ arrHas: import('@tanstack/table-core').CreatedFilterFn<any, any>;
140
+ arrIncludesSome: import('@tanstack/table-core').CreatedFilterFn<any, any>;
141
+ between: import('@tanstack/table-core').CreatedFilterFn<any, any>;
142
+ betweenInclusive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
143
+ empty: import('@tanstack/table-core').CreatedFilterFn<any, any>;
144
+ endsWith: import('@tanstack/table-core').CreatedFilterFn<any, any>;
145
+ equals: import('@tanstack/table-core').CreatedFilterFn<any, any>;
146
+ equalsString: import('@tanstack/table-core').CreatedFilterFn<any, any>;
147
+ equalsStringSensitive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
148
+ inDateRange: import('@tanstack/table-core').CreatedFilterFn<any, any>;
149
+ inNumberRange: import('@tanstack/table-core').CreatedFilterFn<any, any>;
150
+ includesString: import('@tanstack/table-core').CreatedFilterFn<any, any>;
151
+ includesStringSensitive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
152
+ notEmpty: import('@tanstack/table-core').CreatedFilterFn<any, any>;
153
+ startsWith: import('@tanstack/table-core').CreatedFilterFn<any, any>;
154
+ weakEquals: import('@tanstack/table-core').CreatedFilterFn<any, any>;
155
+ };
156
+ }, TData>;
157
+ }): any;
158
+ empty?(_: {}): any;
159
+ footer?(_: {
160
+ table: import('@tanstack/vue-table').VueTable<{
161
+ columnFilteringFeature: import('@tanstack/table-core').TableFeature;
162
+ columnSizingFeature: import('@tanstack/table-core').TableFeature;
163
+ columnVisibilityFeature: import('@tanstack/table-core').TableFeature;
164
+ globalFilteringFeature: import('@tanstack/table-core').TableFeature;
165
+ rowPaginationFeature: import('@tanstack/table-core').TableFeature;
166
+ rowSelectionFeature: import('@tanstack/table-core').TableFeature;
167
+ rowSortingFeature: import('@tanstack/table-core').TableFeature;
168
+ coreRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
169
+ filteredRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
170
+ sortedRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
171
+ paginatedRowModel: (table: import('@tanstack/table-core').Table<any, any>) => () => import('@tanstack/table-core').RowModel<any, any>;
172
+ sortFns: {
173
+ alphanumeric: import('@tanstack/table-core').CreatedSortFn<any, any>;
174
+ alphanumericCaseSensitive: import('@tanstack/table-core').CreatedSortFn<any, any>;
175
+ basic: import('@tanstack/table-core').CreatedSortFn<any, any>;
176
+ datetime: import('@tanstack/table-core').CreatedSortFn<any, any>;
177
+ text: import('@tanstack/table-core').CreatedSortFn<any, any>;
178
+ textCaseSensitive: import('@tanstack/table-core').CreatedSortFn<any, any>;
179
+ };
180
+ filterFns: {
181
+ arrIncludes: import('@tanstack/table-core').CreatedFilterFn<any, any>;
182
+ arrIncludesAll: import('@tanstack/table-core').CreatedFilterFn<any, any>;
183
+ arrHas: import('@tanstack/table-core').CreatedFilterFn<any, any>;
184
+ arrIncludesSome: import('@tanstack/table-core').CreatedFilterFn<any, any>;
185
+ between: import('@tanstack/table-core').CreatedFilterFn<any, any>;
186
+ betweenInclusive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
187
+ empty: import('@tanstack/table-core').CreatedFilterFn<any, any>;
188
+ endsWith: import('@tanstack/table-core').CreatedFilterFn<any, any>;
189
+ equals: import('@tanstack/table-core').CreatedFilterFn<any, any>;
190
+ equalsString: import('@tanstack/table-core').CreatedFilterFn<any, any>;
191
+ equalsStringSensitive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
192
+ inDateRange: import('@tanstack/table-core').CreatedFilterFn<any, any>;
193
+ inNumberRange: import('@tanstack/table-core').CreatedFilterFn<any, any>;
194
+ includesString: import('@tanstack/table-core').CreatedFilterFn<any, any>;
195
+ includesStringSensitive: import('@tanstack/table-core').CreatedFilterFn<any, any>;
196
+ notEmpty: import('@tanstack/table-core').CreatedFilterFn<any, any>;
197
+ startsWith: import('@tanstack/table-core').CreatedFilterFn<any, any>;
198
+ weakEquals: import('@tanstack/table-core').CreatedFilterFn<any, any>;
199
+ };
200
+ }, TData>;
201
+ }): any;
202
+ }>;
203
+ emit: (evt: "row-click", row: TData) => void;
204
+ }>) => import('vue').VNode & {
205
+ __ctx?: Awaited<typeof __VLS_setup>;
206
+ };
207
+ export default _default;
208
+ type __VLS_Prettify<T> = {
209
+ [K in keyof T]: T[K];
210
+ } & {};
@@ -0,0 +1,36 @@
1
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
2
+ table: any;
3
+ title?: string;
4
+ resetLabel?: string;
5
+ }>, {
6
+ title: string;
7
+ resetLabel: string;
8
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToRuntimeProps<{
9
+ table: any;
10
+ title?: string;
11
+ resetLabel?: string;
12
+ }>, {
13
+ title: string;
14
+ resetLabel: string;
15
+ }>>> & Readonly<{}>, {
16
+ title: string;
17
+ resetLabel: string;
18
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
19
+ export default _default;
20
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
21
+ type __VLS_TypePropsToRuntimeProps<T> = {
22
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
23
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
24
+ } : {
25
+ type: import('vue').PropType<T[K]>;
26
+ required: true;
27
+ };
28
+ };
29
+ type __VLS_WithDefaults<P, D> = {
30
+ [K in keyof Pick<P, keyof P>]: K extends keyof D ? __VLS_Prettify<P[K] & {
31
+ default: D[K];
32
+ }> : P[K];
33
+ };
34
+ type __VLS_Prettify<T> = {
35
+ [K in keyof T]: T[K];
36
+ } & {};
@@ -0,0 +1,2 @@
1
+ export { default as SkyDataTable } from './SkyDataTable.vue';
2
+ export { default as SkyDataTableColumnToggle } from './SkyDataTableColumnToggle.vue';
@@ -1 +1,3 @@
1
1
  export { default as SkyCheckboxFilter } from './SkyCheckboxFilter';
2
+ export * from './table';
3
+ export * from './data-table';
@@ -0,0 +1,31 @@
1
+ import { SkyTableColumn } from '../../shared/ui/table/types';
2
+
3
+ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
4
+ columns: SkyTableColumn[];
5
+ /** Мапа `name → показувати` з useColumnVisibility. */
6
+ modelValue: Record<string, boolean>;
7
+ title?: string;
8
+ resetLabel?: string;
9
+ }>>, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
10
+ "update:modelValue": (value: Record<string, boolean>) => void;
11
+ reset: () => void;
12
+ }, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<__VLS_TypePropsToRuntimeProps<{
13
+ columns: SkyTableColumn[];
14
+ /** Мапа `name → показувати` з useColumnVisibility. */
15
+ modelValue: Record<string, boolean>;
16
+ title?: string;
17
+ resetLabel?: string;
18
+ }>>> & Readonly<{
19
+ "onUpdate:modelValue"?: ((value: Record<string, boolean>) => any) | undefined;
20
+ onReset?: (() => any) | undefined;
21
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
22
+ export default _default;
23
+ type __VLS_NonUndefinedable<T> = T extends undefined ? never : T;
24
+ type __VLS_TypePropsToRuntimeProps<T> = {
25
+ [K in keyof T]-?: {} extends Pick<T, K> ? {
26
+ type: import('vue').PropType<__VLS_NonUndefinedable<T[K]>>;
27
+ } : {
28
+ type: import('vue').PropType<T[K]>;
29
+ required: true;
30
+ };
31
+ };