gavia-ui 0.0.0-stage → 0.7.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.
- package/CHANGELOG.md +95 -0
- package/LICENSE +21 -0
- package/README.md +315 -2
- package/dist/components/WlAccordion.vue.d.ts +34 -0
- package/dist/components/WlAlert.vue.d.ts +33 -0
- package/dist/components/WlAutocomplete.vue.d.ts +45 -0
- package/dist/components/WlAvatar.vue.d.ts +27 -0
- package/dist/components/WlBadge.vue.d.ts +12 -0
- package/dist/components/WlBreadcrumbs.vue.d.ts +9 -0
- package/dist/components/WlButton.vue.d.ts +41 -0
- package/dist/components/WlButtonGroup.vue.d.ts +20 -0
- package/dist/components/WlCalendar.vue.d.ts +20 -0
- package/dist/components/WlCard.vue.d.ts +27 -0
- package/dist/components/WlCheckbox.vue.d.ts +34 -0
- package/dist/components/WlChip.vue.d.ts +31 -0
- package/dist/components/WlColorPicker.vue.d.ts +27 -0
- package/dist/components/WlCommandPalette.vue.d.ts +90 -0
- package/dist/components/WlConfirmDialog.vue.d.ts +9 -0
- package/dist/components/WlDatePicker.vue.d.ts +31 -0
- package/dist/components/WlDialog.vue.d.ts +56 -0
- package/dist/components/WlDivider.vue.d.ts +20 -0
- package/dist/components/WlDrawer.vue.d.ts +54 -0
- package/dist/components/WlEmpty.vue.d.ts +25 -0
- package/dist/components/WlField.vue.d.ts +33 -0
- package/dist/components/WlFileUpload.vue.d.ts +28 -0
- package/dist/components/WlFilterBar.vue.d.ts +89 -0
- package/dist/components/WlIcon.vue.d.ts +24 -0
- package/dist/components/WlIconButton.vue.d.ts +39 -0
- package/dist/components/WlInput.vue.d.ts +41 -0
- package/dist/components/WlMenu.vue.d.ts +27 -0
- package/dist/components/WlMultiSelect.vue.d.ts +38 -0
- package/dist/components/WlNavItem.vue.d.ts +36 -0
- package/dist/components/WlNumberInput.vue.d.ts +32 -0
- package/dist/components/WlPageHeader.vue.d.ts +39 -0
- package/dist/components/WlPagination.vue.d.ts +19 -0
- package/dist/components/WlPasswordInput.vue.d.ts +24 -0
- package/dist/components/WlPill.vue.d.ts +24 -0
- package/dist/components/WlPopover.vue.d.ts +43 -0
- package/dist/components/WlProgress.vue.d.ts +15 -0
- package/dist/components/WlRadio.vue.d.ts +34 -0
- package/dist/components/WlSegmented.vue.d.ts +18 -0
- package/dist/components/WlSelect.vue.d.ts +32 -0
- package/dist/components/WlSidebar.vue.d.ts +86 -0
- package/dist/components/WlSkeleton.vue.d.ts +13 -0
- package/dist/components/WlSlider.vue.d.ts +21 -0
- package/dist/components/WlSpinner.vue.d.ts +12 -0
- package/dist/components/WlStatCard.vue.d.ts +29 -0
- package/dist/components/WlSteps.vue.d.ts +10 -0
- package/dist/components/WlSwitch.vue.d.ts +35 -0
- package/dist/components/WlTable.vue.d.ts +34 -0
- package/dist/components/WlTabs.vue.d.ts +33 -0
- package/dist/components/WlTag.vue.d.ts +32 -0
- package/dist/components/WlTextarea.vue.d.ts +24 -0
- package/dist/components/WlToast.vue.d.ts +9 -0
- package/dist/components/index.d.ts +51 -0
- package/dist/composables/useWlConfirm.d.ts +14 -0
- package/dist/composables/useWlToast.d.ts +7 -0
- package/dist/config.d.ts +22 -0
- package/dist/design-system/index.d.ts +8 -0
- package/dist/design-system/tokens.generated.d.ts +3662 -0
- package/dist/design-system/types.d.ts +33 -0
- package/dist/design-tokens.json +4146 -0
- package/dist/directives/tooltip.d.ts +10 -0
- package/dist/icons.generated.d.ts +3 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +10369 -0
- package/dist/locale.d.ts +16 -0
- package/dist/manifest/actions.d.ts +1 -0
- package/dist/manifest/composites.d.ts +1 -0
- package/dist/manifest/containers.d.ts +1 -0
- package/dist/manifest/data.d.ts +1 -0
- package/dist/manifest/feedback.d.ts +1 -0
- package/dist/manifest/index.d.ts +18 -0
- package/dist/manifest/inputs.d.ts +1 -0
- package/dist/manifest/misc.d.ts +1 -0
- package/dist/manifest/navigation.d.ts +1 -0
- package/dist/manifest/types.d.ts +45 -0
- package/dist/manifest/values.d.ts +20 -0
- package/dist/manifest.json +3114 -0
- package/dist/services/confirmation.d.ts +20 -0
- package/dist/services/toast.d.ts +19 -0
- package/dist/theme.d.ts +26 -0
- package/dist/types.d.ts +128 -0
- package/dist/utils/anchoredOverlay.d.ts +16 -0
- package/dist/utils/bodyScrollLock.d.ts +5 -0
- package/dist/utils/inputAttrs.d.ts +14 -0
- package/dist/utils/merge.d.ts +8 -0
- package/dist/utils/options.d.ts +8 -0
- package/dist/utils/overlayLifecycle.d.ts +20 -0
- package/dist/utils/overlayTransition.d.ts +4 -0
- package/package.json +78 -3
- package/styles/base.css +4167 -0
- package/styles/primitives.css +29 -0
- package/styles/reset.css +93 -0
- package/themes/graphite.css +431 -0
- package/themes/newspaper.css +431 -0
- package/themes/white.css +433 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Изменения Gavia UI для пользователей. Версии до ребрендинга выпускались
|
|
4
|
+
под прежним именем пакета. История восстановлена по релизным Git-тегам
|
|
5
|
+
и заметкам о миграции.
|
|
6
|
+
|
|
7
|
+
## Не выпущено
|
|
8
|
+
|
|
9
|
+
Изменений для следующего выпуска пока нет.
|
|
10
|
+
|
|
11
|
+
## 0.7.0 — 2026-10-05
|
|
12
|
+
|
|
13
|
+
Первый выпуск нового имени для публичного npm. Инструкции подключения
|
|
14
|
+
и состояние публикации — в [README](https://github.com/whitewolf06/gavia-ui/blob/main/README.md).
|
|
15
|
+
|
|
16
|
+
### Добавлено
|
|
17
|
+
|
|
18
|
+
- В витрине появилась страница «О проекте»: создатель, лицензия, инструкции и полный changelog из единого исходника.
|
|
19
|
+
- Добавлены сборка и браузерная проверка документации для GitHub Pages; публикация сайта зависит от всех проверок того же коммита.
|
|
20
|
+
- Добавлен полный текст MIT в репозиторий и архив библиотеки.
|
|
21
|
+
- Добавлены changelog и правила его ведения.
|
|
22
|
+
|
|
23
|
+
### Изменено
|
|
24
|
+
|
|
25
|
+
- Новое название проекта — Gavia UI; выбран знак гагары в форме G с глазом.
|
|
26
|
+
- Документация и метаданные подготовлены для `whitewolf06/gavia-ui`.
|
|
27
|
+
- Новое имя пакета `gavia-ui` и публичный npm: установка без GitHub-токена после первого выпуска.
|
|
28
|
+
- Обновлены импорты, workspace, CI и [миграция имени пакета](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-gavia.md).
|
|
29
|
+
- Из описаний, демоданных и прототипов убран прежний бренд.
|
|
30
|
+
- Переменная локального стенда — `GAVIA_E2E_BASE_URL`; тексты ошибок каталога
|
|
31
|
+
используют Gavia UI. Изменения перечислены в миграции.
|
|
32
|
+
- Локальные браузерные проверки поддерживают полный закреплённый Chromium через `GAVIA_E2E_CHROMIUM_CHANNEL`.
|
|
33
|
+
|
|
34
|
+
### Совместимость
|
|
35
|
+
|
|
36
|
+
- Публичные `Wl*`, props, события, модели, слоты, имена иконок, классы `wl-*`
|
|
37
|
+
и токены `--wl-*` сохраняются.
|
|
38
|
+
|
|
39
|
+
Обязательная смена пути пакета и проверка потребителя описаны в
|
|
40
|
+
[миграции 0.7](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.7.md). Настройка приложения и дизайн-система
|
|
41
|
+
0.6.0 сохраняются.
|
|
42
|
+
|
|
43
|
+
## 0.6.0 — 2026-10-01
|
|
44
|
+
|
|
45
|
+
### Добавлено
|
|
46
|
+
|
|
47
|
+
- Дизайн-система: 416 токенов, темы White / Graphite / Newspaper и проверки контраста.
|
|
48
|
+
- Примитивы компоновки и типографики, JSON-каталог и типизированные API токенов.
|
|
49
|
+
- Живые SFC-примеры для 51 компонента, 47 SVG-иконок и шесть UI-сценариев.
|
|
50
|
+
- Контрактные, браузерные и визуальные проверки; consumer smoke на Node 18 и 24.
|
|
51
|
+
|
|
52
|
+
### Изменено
|
|
53
|
+
|
|
54
|
+
- PrimeVue и PrimeIcons полностью удалены. Vue 3 — единственный обязательный peer; runtime-зависимостей нет.
|
|
55
|
+
- Конфигурация, tooltip, уведомления и подтверждения реализованы внутри библиотеки.
|
|
56
|
+
- Опциональная анимация оверлеев учитывает `prefers-reduced-motion`.
|
|
57
|
+
- Сохранены публичные контракты компонентов и прежние токены.
|
|
58
|
+
|
|
59
|
+
### Исправлено
|
|
60
|
+
|
|
61
|
+
- Блокировка прокрутки при открытии Dialog/Drawer, возврат фокуса и слои вложенных оверлеев.
|
|
62
|
+
- Фокус в поиске и контраст кнопок, текста подсказок и ошибок.
|
|
63
|
+
- Чтение CSS-файлов в тестах на Node 18 и лимиты времени сценариев в CI.
|
|
64
|
+
|
|
65
|
+
Изменения настройки приложения и таблицы описаны в
|
|
66
|
+
[миграции 0.6](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.6.md) и [миграции с 0.3](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.5.md).
|
|
67
|
+
Работа под номерами 0.4/0.5 вошла в 0.6.0; отдельных релизных тегов для неё нет.
|
|
68
|
+
|
|
69
|
+
## 0.3.0 — 2026-08-09
|
|
70
|
+
|
|
71
|
+
- Укреплены контракты компонентов и добавлены примитивы компоновки страниц.
|
|
72
|
+
|
|
73
|
+
## 0.2.1 — 2026-07-30
|
|
74
|
+
|
|
75
|
+
- Добавлена тема Newspaper.
|
|
76
|
+
- Витрина переведена на отложенную загрузку демонстраций.
|
|
77
|
+
|
|
78
|
+
## 0.2.0 — 2026-07-27
|
|
79
|
+
|
|
80
|
+
- Добавлен составной Sidebar и расширены примеры составных компонентов.
|
|
81
|
+
- Добавлены command palette, навигация по версиям, API выбора, подтверждений и манифест.
|
|
82
|
+
|
|
83
|
+
## 0.1.0 — 2026-07-19
|
|
84
|
+
|
|
85
|
+
- Первый Vue 3 + TypeScript workspace: пакет, playground, темы и токены.
|
|
86
|
+
- Базовые компоненты, навигация, оверлеи, таблица, календарь, выбор даты и загрузка файлов.
|
|
87
|
+
- Настроена публикация прежнего пакета в GitHub Packages.
|
|
88
|
+
|
|
89
|
+
## Правила ведения
|
|
90
|
+
|
|
91
|
+
Изменения сначала записываются в «Не выпущено». При выпуске переносите их под
|
|
92
|
+
версию и фактическую дату публикации. Отмечайте возможности, исправления и
|
|
93
|
+
обязательные действия при обновлении; несовместимость требует миграционной заметки.
|
|
94
|
+
Корневая и пакетная копии changelog должны совпадать по содержанию; в пакете
|
|
95
|
+
ссылки на документацию абсолютные. Проверяйте публикацию отдельно от отправки тега.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Gavia UI contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,316 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Gavia UI
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Версия `0.7.0`. [Изменения и переход](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.7.md).
|
|
4
|
+
|
|
5
|
+
Создатель и сопровождающий — [Gorbach Dmitry](https://github.com/whitewolf06).
|
|
6
|
+
Витрина в репозитории включает живые примеры, страницу об авторе и полный changelog;
|
|
7
|
+
[публикация документации](https://github.com/whitewolf06/gavia-ui/blob/main/docs/hosting.md).
|
|
8
|
+
|
|
9
|
+
## Лицензия и установка
|
|
10
|
+
|
|
11
|
+
MIT — бесплатно для личного и коммерческого использования. Можно использовать,
|
|
12
|
+
изменять и распространять при сохранении уведомления об авторских правах и
|
|
13
|
+
текста лицензии. Полный текст включён в [LICENSE](LICENSE).
|
|
14
|
+
|
|
15
|
+
Установка опубликованного пакета:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
pnpm add gavia-ui@0.7.0 vue
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
GitHub-токен не нужен. Актуальное состояние публикации пакета и витрины —
|
|
22
|
+
в [каноническом README](https://github.com/whitewolf06/gavia-ui/blob/main/README.md).
|
|
23
|
+
Архив также можно собрать из [репозитория](https://github.com/whitewolf06/gavia-ui).
|
|
24
|
+
Runtime-зависимостей нет; Vue 3 — единственный обязательный peer.
|
|
25
|
+
[История изменений](CHANGELOG.md) и
|
|
26
|
+
[переход с прежнего имени](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-gavia.md).
|
|
27
|
+
|
|
28
|
+
## Дизайн-система
|
|
29
|
+
|
|
30
|
+
Общие роли типографики, шкала расстояний, поверхности, состояния и UI-паттерны
|
|
31
|
+
описаны в [руководстве](https://github.com/whitewolf06/gavia-ui/blob/main/docs/design-system.md). Playground `?view=system`
|
|
32
|
+
показывает каталог токенов, три темы и контракты 51 компонента.
|
|
33
|
+
|
|
34
|
+
Опциональная компоновка и типографика: явный импорт
|
|
35
|
+
`gavia-ui/styles/primitives.css`. Экспорты `wlDesignTokens`,
|
|
36
|
+
`wlDesignThemes`, `wlSpacing`, `wlTypography`, `wlBreakpoints`, `resolveWlToken`,
|
|
37
|
+
`getWlThemeTokens` работают без DOM. JSON-каталог доступен по
|
|
38
|
+
`gavia-ui/design-tokens.json`. Исходник токенов обновляется через
|
|
39
|
+
`pnpm tokens:sync`, проверяется через `pnpm tokens:check`.
|
|
40
|
+
|
|
41
|
+
Старые CSS-токены сохраняют имена и значения. Для доступного контраста кнопки
|
|
42
|
+
primary/danger используют новые роли `--wl-action-primary-*` и
|
|
43
|
+
`--wl-action-danger-*`. Собственные цвета кнопок настраивайте через bg/hover/text
|
|
44
|
+
и проверяйте их сочетания. Во всех темах добавлена видимая обводка фокуса.
|
|
45
|
+
Подсказки полей, заголовки и пустые состояния используют `--wl-text-muted`.
|
|
46
|
+
|
|
47
|
+
Независимая библиотека компонентов Gavia UI: Vue 3 + TypeScript (strict), собственный DOM
|
|
48
|
+
и поведение; стили — обычный CSS с custom properties
|
|
49
|
+
`--wl-*` и CSS Layers. Без Pinia, роутера, API-клиентов и бизнес-логики.
|
|
50
|
+
|
|
51
|
+
## Peer dependencies
|
|
52
|
+
|
|
53
|
+
| Пакет | Версия | Обязательность |
|
|
54
|
+
| ------------ | ------ | -------------------------- |
|
|
55
|
+
| `vue` | ^3.4 | обязательный peer |
|
|
56
|
+
|
|
57
|
+
## Подключение
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
// main.ts
|
|
61
|
+
import { createApp } from "vue";
|
|
62
|
+
import { WlConfig, WlToastService, WlConfirmationService, wlLocaleRu } from "gavia-ui";
|
|
63
|
+
|
|
64
|
+
// Стили подключаются явно: reset → base → тема
|
|
65
|
+
import "gavia-ui/styles/reset.css";
|
|
66
|
+
import "gavia-ui/styles/base.css";
|
|
67
|
+
import "gavia-ui/themes/white.css";
|
|
68
|
+
|
|
69
|
+
import App from "./App.vue";
|
|
70
|
+
|
|
71
|
+
const app = createApp(App);
|
|
72
|
+
app.use(WlConfig, { locale: wlLocaleRu });
|
|
73
|
+
app.use(WlToastService);
|
|
74
|
+
app.use(WlConfirmationService);
|
|
75
|
+
app.mount("#app");
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
```vue
|
|
79
|
+
<script setup lang="ts">
|
|
80
|
+
import { ref } from "vue";
|
|
81
|
+
import { WlButton, WlInput, WlTag } from "gavia-ui";
|
|
82
|
+
|
|
83
|
+
const text = ref("");
|
|
84
|
+
</script>
|
|
85
|
+
|
|
86
|
+
<template>
|
|
87
|
+
<WlButton variant="primary" size="md">Создать</WlButton>
|
|
88
|
+
<WlInput v-model="text" placeholder="Название задачи" />
|
|
89
|
+
<WlTag variant="blue">Релиз 2.0</WlTag>
|
|
90
|
+
</template>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Библиотека не импортирует CSS из JS. `WlConfig` необязателен; русская локаль и
|
|
94
|
+
стандартная карта `pt` используются по умолчанию. Сервисы устанавливаются только
|
|
95
|
+
если нужны соответствующие компоненты. См. [миграцию 0.5](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.5.md).
|
|
96
|
+
|
|
97
|
+
## Exports
|
|
98
|
+
|
|
99
|
+
| Subpath | Содержимое |
|
|
100
|
+
| ------------------------------------- | -------------------------------------------- |
|
|
101
|
+
| `gavia-ui` | ESM + `.d.ts`: компоненты, типы, `createWlPt`, `WlTooltip` |
|
|
102
|
+
| `gavia-ui/styles/reset.css` | минимальный reset (слой `wl.reset`) |
|
|
103
|
+
| `gavia-ui/styles/base.css` | токены + стили компонентов (`wl.tokens`, `wl.components`) |
|
|
104
|
+
| `gavia-ui/themes/<theme>.css`| тема: `white`, `graphite` или `newspaper` |
|
|
105
|
+
|
|
106
|
+
## Токены и темы
|
|
107
|
+
|
|
108
|
+
Три уровня custom properties в namespace `--wl-*`:
|
|
109
|
+
|
|
110
|
+
1. **Foundation** — сырые значения: палитра (`--wl-gray-*`, `--wl-blue-*`, …),
|
|
111
|
+
радиусы, тени, длительности, шрифты.
|
|
112
|
+
2. **Semantic** — роли: `--wl-bg`, `--wl-text`, `--wl-accent`, `--wl-success`, …
|
|
113
|
+
Ссылаются на foundation; именно их переопределяют темы.
|
|
114
|
+
3. **Component** — `--wl-btn-height`, `--wl-input-radius`, `--wl-focus-ring`, …
|
|
115
|
+
Ссылаются на semantic; позволяют точечно настраивать компоненты.
|
|
116
|
+
|
|
117
|
+
Тема — отдельный CSS-файл с переопределением semantic/foundation токенов.
|
|
118
|
+
Переключение — атрибутом `data-wl-theme` (темы импортированы заранее):
|
|
119
|
+
|
|
120
|
+
```html
|
|
121
|
+
<html data-wl-theme="graphite">
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
или явным импортом одной темы. Своя тема создаётся заменой токенов, без форка:
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
import "gavia-ui/themes/newspaper.css";
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
```html
|
|
131
|
+
<html data-wl-theme="newspaper">
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
`newspaper` — светлая газетная тема с почти белой бумажной палитрой, антиквенными
|
|
135
|
+
заголовками, sans-serif интерфейсным текстом, тонкими линейками и сдержанными
|
|
136
|
+
spot-цветами.
|
|
137
|
+
|
|
138
|
+
```css
|
|
139
|
+
[data-wl-theme="my-brand"] {
|
|
140
|
+
--wl-accent: #7c3aed;
|
|
141
|
+
--wl-accent-hover: #6d28d9;
|
|
142
|
+
--wl-accent-soft: #f3effd;
|
|
143
|
+
--wl-accent-border: #ddd0f8;
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Локальная настройка поддерева:
|
|
148
|
+
|
|
149
|
+
```css
|
|
150
|
+
.compact-panel {
|
|
151
|
+
--wl-btn-height: 30px;
|
|
152
|
+
--wl-input-height: 30px;
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Единый контракт компонентов
|
|
157
|
+
|
|
158
|
+
- `variant`, `size` (`xs`/`sm`/`md`/`lg` где применимо), `density` (`default`/`compact`);
|
|
159
|
+
- состояния `disabled` / `loading` / `invalid` — явные props;
|
|
160
|
+
- `class` / `style` пробрасываются на корневой элемент;
|
|
161
|
+
- слоты (`default`, `icon`, `prefix`, `suffix`, …);
|
|
162
|
+
- data-атрибуты на корне: `data-wl="<name>"`, `data-variant`, `data-size`;
|
|
163
|
+
- стабильные классы с низкой специфичностью: `.wl-btn`, `.wl-btn--primary`,
|
|
164
|
+
`.wl-btn--sm`, состояния — `.is-loading`, `.is-disabled`.
|
|
165
|
+
|
|
166
|
+
### Нативные атрибуты полей
|
|
167
|
+
|
|
168
|
+
У составных полей `WlInput`, `WlPasswordInput`, `WlNumberInput`, `WlSelect`,
|
|
169
|
+
`WlMultiSelect`, `WlAutocomplete`, `WlDatePicker`, `WlCheckbox`, `WlRadio` и
|
|
170
|
+
`WlSwitch` атрибуты `id`, `name`, `form`, `required`, `readonly`, `aria-*` и
|
|
171
|
+
обработчики фокуса/ввода попадают на реальный фокусируемый control. `class`,
|
|
172
|
+
`style` и `data-*` остаются на корне компонента. Это позволяет напрямую связывать
|
|
173
|
+
поля с `WlField` и нативной формой без поиска внутреннего DOM.
|
|
174
|
+
|
|
175
|
+
`WlField` отдаёт в default-slot `id` и его алиас `inputId`, а также
|
|
176
|
+
`ariaDescribedby`, `ariaInvalid`, `invalid` и `required`.
|
|
177
|
+
|
|
178
|
+
### Жизненный цикл оверлеев
|
|
179
|
+
|
|
180
|
+
`WlDialog`, `WlDrawer`, `WlPopover` и popup-`WlMenu` эмитят единые события
|
|
181
|
+
`open` / `close`. Диалог, дровер и поповер поддерживают `closeOnEscape`,
|
|
182
|
+
dismiss-поведение и доступную подпись; диалог и дровер также позволяют управлять
|
|
183
|
+
`blockScroll`. Собственные мобильные оверлеи кита закрываются только верхним
|
|
184
|
+
слоем, удерживают фокус внутри и корректно возвращают его в триггер.
|
|
185
|
+
При блокировке страницы место существующей вертикальной полосы прокрутки
|
|
186
|
+
сохраняется, чтобы контент не смещался при открытии и закрытии.
|
|
187
|
+
|
|
188
|
+
### Анимация оверлеев
|
|
189
|
+
|
|
190
|
+
Появление и закрытие диалогов, дроверов, всплывающих меню и панелей выбора,
|
|
191
|
+
палитры команд, уведомлений и подсказок анимируются по умолчанию. Настройка
|
|
192
|
+
приложения действует на все эти элементы:
|
|
193
|
+
|
|
194
|
+
```ts
|
|
195
|
+
app.use(WlConfig, { motion: false });
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Локальный `motion` имеет приоритет над `WlConfig.motion`. Его принимают
|
|
199
|
+
`WlDialog`, `WlConfirmDialog`, `WlDrawer`, `WlPopover`, popup-`WlMenu`,
|
|
200
|
+
`WlSelect`, `WlMultiSelect`, `WlAutocomplete`, `WlDatePicker`,
|
|
201
|
+
`WlCommandPalette` и `WlToast`:
|
|
202
|
+
|
|
203
|
+
```vue
|
|
204
|
+
<WlDrawer v-model:visible="open" :motion="false" />
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Для директивы подсказки используйте объект
|
|
208
|
+
`v-wl-tooltip="{ value: 'Помощь', motion: false }"`. Значение `true` локально
|
|
209
|
+
включает анимацию даже при `WlConfig.motion: false`. При системной настройке
|
|
210
|
+
`prefers-reduced-motion: reduce` длительности переходов сокращаются почти до
|
|
211
|
+
нуля; подсказка удаляется сразу. Скорость можно настроить токенами
|
|
212
|
+
`--wl-dur-3`, `--wl-dur-4` и `--wl-dur-5`.
|
|
213
|
+
|
|
214
|
+
## Pass-through (`pt`)
|
|
215
|
+
|
|
216
|
+
`createWlPt()` возвращает дефолтную карту и может объединять переопределения.
|
|
217
|
+
Порядок применения: дефолты → конфигурация приложения → `pt` экземпляра.
|
|
218
|
+
`class` и `style` объединяются, прочие атрибуты заменяются последним значением.
|
|
219
|
+
|
|
220
|
+
```ts
|
|
221
|
+
app.use(WlConfig, {
|
|
222
|
+
pt: {
|
|
223
|
+
button: { root: { "data-test": "app-button" } }
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
```vue
|
|
229
|
+
<WlButton :pt="{ root: { 'aria-label': 'Создать задачу' } }">Создать</WlButton>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Компоненты
|
|
233
|
+
|
|
234
|
+
`WlButton`, `WlIcon`, `WlInput`, `WlTextarea`, `WlSelect`, `WlMultiSelect`,
|
|
235
|
+
`WlAutocomplete`, `WlCheckbox`, `WlRadio`, `WlSwitch`, `WlTag`, `WlChip`,
|
|
236
|
+
`WlBadge`, `WlAvatar`, `WlCard`, `WlTabs`, `WlAlert`, `WlSpinner`,
|
|
237
|
+
`WlSkeleton`, `WlProgress`, `WlDialog`, `WlConfirmDialog`, `WlDrawer`,
|
|
238
|
+
`WlDivider` — плюс директива `WlTooltip`, `createWlPt` и типы
|
|
239
|
+
(`WlSize`, `WlDensity`, `WlButtonVariant`, `WlTabItem`, …).
|
|
240
|
+
|
|
241
|
+
### Подтверждения: WlConfirmDialog + useWlConfirm
|
|
242
|
+
|
|
243
|
+
По аналогии с тостами нужны сервис и один экземпляр диалога в корне приложения:
|
|
244
|
+
|
|
245
|
+
```ts
|
|
246
|
+
// main.ts
|
|
247
|
+
import { WlConfirmationService } from "gavia-ui";
|
|
248
|
+
|
|
249
|
+
app.use(WlConfirmationService);
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
```vue
|
|
253
|
+
<script setup lang="ts">
|
|
254
|
+
import { WlButton, WlConfirmDialog, useWlConfirm } from "gavia-ui";
|
|
255
|
+
|
|
256
|
+
const { confirm, confirmDanger } = useWlConfirm();
|
|
257
|
+
|
|
258
|
+
function remove(): void {
|
|
259
|
+
confirmDanger({
|
|
260
|
+
header: "Удалить задачу?",
|
|
261
|
+
message: "Действие необратимо.",
|
|
262
|
+
acceptLabel: "Удалить",
|
|
263
|
+
accept: () => { /* ... */ }
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
</script>
|
|
267
|
+
|
|
268
|
+
<template>
|
|
269
|
+
<WlConfirmDialog />
|
|
270
|
+
<WlButton variant="danger" @click="remove">Удалить…</WlButton>
|
|
271
|
+
</template>
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
`confirm` рисует primary-кнопку подтверждения, `confirmDanger` — danger с
|
|
275
|
+
иконкой предупреждения; подписи по умолчанию берутся из локали кита
|
|
276
|
+
(`wlLocaleRu.accept` / `wlLocaleRu.reject`).
|
|
277
|
+
|
|
278
|
+
## Component manifest
|
|
279
|
+
|
|
280
|
+
Машиночитаемое описание всех 51 компонентов: пропсы (типы, дефолты, enum-значения),
|
|
281
|
+
слоты, события, `v-model` и `introducedIn` — первая публичная версия, содержащая
|
|
282
|
+
компонент. Предназначен для визуальных редакторов (палитра +
|
|
283
|
+
инспектор пропсов) и AI-агентов, генерирующих разметку.
|
|
284
|
+
|
|
285
|
+
```ts
|
|
286
|
+
import { wlManifest } from "gavia-ui";
|
|
287
|
+
import type { WlComponentManifest } from "gavia-ui";
|
|
288
|
+
|
|
289
|
+
const button = wlManifest.find((entry) => entry.name === "WlButton");
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Либо как статический JSON (генерируется при сборке в `dist/manifest.json`):
|
|
293
|
+
|
|
294
|
+
```ts
|
|
295
|
+
import manifest from "gavia-ui/manifest.json";
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Типы: `WlComponentManifest`, `WlPropManifest`, `WlSlotManifest`, `WlEmitManifest`,
|
|
299
|
+
`WlModelManifest`, `WlManifestCategory`, `WlManifestPropType`. Категории:
|
|
300
|
+
`actions`, `inputs`, `data`, `containers`, `navigation`, `feedback`, `misc`.
|
|
301
|
+
Пропсы типа `icon` принимают значения из `WlIconName`, тип `object` — это
|
|
302
|
+
pass-through (`pt`) или сложные объекты вроде `locale`.
|
|
303
|
+
|
|
304
|
+
## Разработка
|
|
305
|
+
|
|
306
|
+
```bash
|
|
307
|
+
pnpm build # сборка (vite lib mode → dist/index.js + dist/*.d.ts)
|
|
308
|
+
pnpm test # Vitest + Vue Test Utils
|
|
309
|
+
pnpm typecheck # vue-tsc --noEmit
|
|
310
|
+
pnpm test:e2e # desktop/mobile, Chromium/Firefox/WebKit
|
|
311
|
+
pnpm test:visual # сравнение эталонов трёх тем на desktop/mobile
|
|
312
|
+
pnpm icons:check
|
|
313
|
+
pnpm tokens:check
|
|
314
|
+
pnpm verify:package
|
|
315
|
+
pnpm verify:dependencies
|
|
316
|
+
```
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { WlAccordionItem } from '../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
items?: WlAccordionItem[];
|
|
4
|
+
single?: boolean;
|
|
5
|
+
openKeys?: string[];
|
|
6
|
+
};
|
|
7
|
+
declare function __VLS_template(): {
|
|
8
|
+
attrs: Partial<{}>;
|
|
9
|
+
slots: {
|
|
10
|
+
item?(_: {
|
|
11
|
+
item: WlAccordionItem;
|
|
12
|
+
open: boolean;
|
|
13
|
+
}): any;
|
|
14
|
+
};
|
|
15
|
+
refs: {};
|
|
16
|
+
rootEl: HTMLDivElement;
|
|
17
|
+
};
|
|
18
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
19
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
20
|
+
"update:openKeys": (value: string[]) => any;
|
|
21
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
22
|
+
"onUpdate:openKeys"?: ((value: string[]) => any) | undefined;
|
|
23
|
+
}>, {
|
|
24
|
+
items: WlAccordionItem[];
|
|
25
|
+
single: boolean;
|
|
26
|
+
openKeys: string[];
|
|
27
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
28
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
29
|
+
export default _default;
|
|
30
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
31
|
+
new (): {
|
|
32
|
+
$slots: S;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { WlAlertVariant } from '../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
variant?: WlAlertVariant;
|
|
4
|
+
title?: string;
|
|
5
|
+
closable?: boolean;
|
|
6
|
+
closeLabel?: string;
|
|
7
|
+
};
|
|
8
|
+
declare function __VLS_template(): {
|
|
9
|
+
attrs: Partial<{}>;
|
|
10
|
+
slots: {
|
|
11
|
+
default?(_: {}): any;
|
|
12
|
+
action?(_: {}): any;
|
|
13
|
+
};
|
|
14
|
+
refs: {};
|
|
15
|
+
rootEl: HTMLDivElement;
|
|
16
|
+
};
|
|
17
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
18
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
19
|
+
close: (event: MouseEvent) => any;
|
|
20
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
21
|
+
onClose?: ((event: MouseEvent) => any) | undefined;
|
|
22
|
+
}>, {
|
|
23
|
+
variant: WlAlertVariant;
|
|
24
|
+
closable: boolean;
|
|
25
|
+
closeLabel: string;
|
|
26
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
27
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
28
|
+
export default _default;
|
|
29
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
30
|
+
new (): {
|
|
31
|
+
$slots: S;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { WlDensity, WlSizeSm } from '../types';
|
|
2
|
+
export interface WlAutocompleteCompleteEvent {
|
|
3
|
+
originalEvent: Event;
|
|
4
|
+
query: string;
|
|
5
|
+
}
|
|
6
|
+
type __VLS_Props = {
|
|
7
|
+
suggestions?: unknown[];
|
|
8
|
+
optionLabel?: string | ((option: any) => string);
|
|
9
|
+
placeholder?: string;
|
|
10
|
+
invalid?: boolean;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
size?: WlSizeSm;
|
|
13
|
+
density?: WlDensity;
|
|
14
|
+
multiple?: boolean;
|
|
15
|
+
dropdown?: boolean;
|
|
16
|
+
dropdownLabel?: string;
|
|
17
|
+
minLength?: number;
|
|
18
|
+
motion?: boolean;
|
|
19
|
+
pt?: Record<string, unknown>;
|
|
20
|
+
};
|
|
21
|
+
type __VLS_PublicProps = {
|
|
22
|
+
modelValue?: unknown;
|
|
23
|
+
} & __VLS_Props;
|
|
24
|
+
declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
25
|
+
complete: (event: WlAutocompleteCompleteEvent) => any;
|
|
26
|
+
"update:modelValue": (value: unknown) => any;
|
|
27
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
28
|
+
onComplete?: ((event: WlAutocompleteCompleteEvent) => any) | undefined;
|
|
29
|
+
"onUpdate:modelValue"?: ((value: unknown) => any) | undefined;
|
|
30
|
+
}>, {
|
|
31
|
+
size: WlSizeSm;
|
|
32
|
+
disabled: boolean;
|
|
33
|
+
dropdown: boolean;
|
|
34
|
+
multiple: boolean;
|
|
35
|
+
invalid: boolean;
|
|
36
|
+
suggestions: unknown[];
|
|
37
|
+
density: WlDensity;
|
|
38
|
+
dropdownLabel: string;
|
|
39
|
+
minLength: number;
|
|
40
|
+
motion: boolean;
|
|
41
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
42
|
+
control: HTMLInputElement;
|
|
43
|
+
panel: HTMLDivElement;
|
|
44
|
+
}, any>;
|
|
45
|
+
export default _default;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { WlAvatarPresence, WlAvatarSize } from '../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
label?: string;
|
|
4
|
+
image?: string;
|
|
5
|
+
size?: WlAvatarSize;
|
|
6
|
+
presence?: WlAvatarPresence;
|
|
7
|
+
pt?: Record<string, unknown>;
|
|
8
|
+
};
|
|
9
|
+
declare function __VLS_template(): {
|
|
10
|
+
attrs: Partial<{}>;
|
|
11
|
+
slots: {
|
|
12
|
+
default?(_: {}): any;
|
|
13
|
+
};
|
|
14
|
+
refs: {};
|
|
15
|
+
rootEl: HTMLSpanElement;
|
|
16
|
+
};
|
|
17
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
18
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
19
|
+
size: WlAvatarSize;
|
|
20
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLSpanElement>;
|
|
21
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
22
|
+
export default _default;
|
|
23
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
24
|
+
new (): {
|
|
25
|
+
$slots: S;
|
|
26
|
+
};
|
|
27
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WlBadgeVariant } from '../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
value?: string | number;
|
|
4
|
+
variant?: WlBadgeVariant;
|
|
5
|
+
dot?: boolean;
|
|
6
|
+
pt?: Record<string, unknown>;
|
|
7
|
+
};
|
|
8
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
9
|
+
variant: WlBadgeVariant;
|
|
10
|
+
dot: boolean;
|
|
11
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLSpanElement>;
|
|
12
|
+
export default _default;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WlBreadcrumbItem } from '../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
items?: WlBreadcrumbItem[];
|
|
4
|
+
pt?: Record<string, unknown>;
|
|
5
|
+
};
|
|
6
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
7
|
+
items: WlBreadcrumbItem[];
|
|
8
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLElement>;
|
|
9
|
+
export default _default;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { WlButtonVariant, WlDensity, WlSize } from '../types';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
variant?: WlButtonVariant;
|
|
4
|
+
size?: WlSize;
|
|
5
|
+
density?: WlDensity;
|
|
6
|
+
loading?: boolean;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
block?: boolean;
|
|
9
|
+
type?: "button" | "submit" | "reset";
|
|
10
|
+
pt?: Record<string, unknown>;
|
|
11
|
+
};
|
|
12
|
+
declare function __VLS_template(): {
|
|
13
|
+
attrs: Partial<{}>;
|
|
14
|
+
slots: {
|
|
15
|
+
icon?(_: {}): any;
|
|
16
|
+
default?(_: {}): any;
|
|
17
|
+
};
|
|
18
|
+
refs: {};
|
|
19
|
+
rootEl: HTMLButtonElement;
|
|
20
|
+
};
|
|
21
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
22
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
23
|
+
click: (event: MouseEvent) => any;
|
|
24
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
25
|
+
onClick?: ((event: MouseEvent) => any) | undefined;
|
|
26
|
+
}>, {
|
|
27
|
+
type: "button" | "submit" | "reset";
|
|
28
|
+
size: WlSize;
|
|
29
|
+
variant: WlButtonVariant;
|
|
30
|
+
disabled: boolean;
|
|
31
|
+
density: WlDensity;
|
|
32
|
+
loading: boolean;
|
|
33
|
+
block: boolean;
|
|
34
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLButtonElement>;
|
|
35
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
36
|
+
export default _default;
|
|
37
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
38
|
+
new (): {
|
|
39
|
+
$slots: S;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
ariaLabel?: string;
|
|
3
|
+
};
|
|
4
|
+
declare function __VLS_template(): {
|
|
5
|
+
attrs: Partial<{}>;
|
|
6
|
+
slots: {
|
|
7
|
+
default?(_: {}): any;
|
|
8
|
+
};
|
|
9
|
+
refs: {};
|
|
10
|
+
rootEl: HTMLDivElement;
|
|
11
|
+
};
|
|
12
|
+
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
13
|
+
declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
|
|
14
|
+
declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
|
|
15
|
+
export default _default;
|
|
16
|
+
type __VLS_WithTemplateSlots<T, S> = T & {
|
|
17
|
+
new (): {
|
|
18
|
+
$slots: S;
|
|
19
|
+
};
|
|
20
|
+
};
|