gavia-ui 0.7.0 → 0.8.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/CHANGELOG.md CHANGED
@@ -6,7 +6,41 @@
6
6
 
7
7
  ## Не выпущено
8
8
 
9
- Изменений для следующего выпуска пока нет.
9
+ ## 0.8.1 — 2026-10-06
10
+
11
+ Выпуск включает изменения ветки 0.8 и исправление вложенных оверлеев.
12
+ Версия 0.8.0 не была опубликована в npm; переход выполняется с 0.7.1 сразу на 0.8.1.
13
+
14
+ ### Добавлено
15
+
16
+ - `WlTimePicker`: локальное время HH:mm/null, минутная точность, границы и нативные атрибуты.
17
+ - `WlFilePicker`: stateless выбор File[], trigger slot и синхронные choose()/clear(); upload и лимиты остаются у приложения.
18
+ - `WlDatePicker.displayFormat`: русское представление по умолчанию и ISO-представление с согласованным ручным вводом; модель ISO сохраняется.
19
+ - Расширенный SVG-каталог и типизированный `resolveWlIconName` для канонических и legacy имён.
20
+
21
+ ### Исправлено
22
+ - Вложенные picker/menu внутри Popover и Dialog сохраняют родительский оверлей при выборе в телепортированном списке. Escape закрывает только верхний слой и возвращает фокус; локальная ловушка Tab в Dialog сохраняется.
23
+ - `WlInput` сохраняет строковую модель при `type="number"`, включая очистку; нативная IME-композиция остаётся без преждевременного commit.
24
+ - `WlTimePicker` показывает рамку фокуса и invalid-рамку при клавиатурном переходе во внутренние сегменты нативного time control.
25
+
26
+ - Проверка `verify:package` учитывает переносы строк Windows и Linux в LICENSE, сохраняя строгое сравнение содержания лицензии.
27
+ - Бесконечные границы `WlNumberInput` не попадают в aria-valuemin/aria-valuemax; default max=99 сохранён.
28
+
29
+ [Переход потребителя](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.8.md). Существующие модели, классы,
30
+ токены и defaults сохраняются; новые компоненты подключаются явно.
31
+
32
+ ## 0.7.1 — 2026-10-05
33
+
34
+ ### Исправлено
35
+
36
+ - Отметки `WlCheckbox` в состояниях checked и indeterminate используют SVG-иконки вместо символов шрифта: рисунок и выравнивание одинаковы в трёх темах.
37
+ - Отключённые `WlCheckbox` и `WlRadio` сохраняют своё оформление при наведении.
38
+ - Стрелки раскрытия `WlSelect`, `WlMultiSelect` и `WlAutocomplete` заменены SVG-иконками с единым выравниванием вместо текстовых символов.
39
+
40
+ ### Изменено
41
+
42
+ - Удалены девять завершённых HTML-прототипов; рабочие примеры остаются в Vue-витрине, а исходные иконки — в SVG-каталоге.
43
+ - Дорожная карта и инструкции по добавлению иконок ссылаются на живые SFC-примеры и SVG-каталог. История прототипов сохранена в Git. В начале README размещена заметная ссылка на публичную демо-витрину.
10
44
 
11
45
  ## 0.7.0 — 2026-10-05
12
46
 
package/LICENSE CHANGED
@@ -1,21 +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.
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,6 +1,11 @@
1
1
  # Gavia UI
2
2
 
3
- Версия `0.7.0`. [Изменения и переход](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.7.md).
3
+ [![Смотреть демо Gavia UI](https://img.shields.io/badge/LIVE_DEMO-2563EB?style=for-the-badge)](https://whitewolf06.github.io/gavia-ui/ "Смотреть демо Gavia UI")
4
+
5
+ Версия исходников `0.8.1` готовится к выпуску; опубликованная npm-версия пока `0.7.1`. [История изменений](CHANGELOG.md).
6
+ [Переход на Gavia UI](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.7.md).
7
+
8
+ [Новые компоненты и переход 0.8](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.8.md).
4
9
 
5
10
  Создатель и сопровождающий — [Gorbach Dmitry](https://github.com/whitewolf06).
6
11
  Витрина в репозитории включает живые примеры, страницу об авторе и полный changelog;
@@ -12,15 +17,25 @@ MIT — бесплатно для личного и коммерческого
12
17
  изменять и распространять при сохранении уведомления об авторских правах и
13
18
  текста лицензии. Полный текст включён в [LICENSE](LICENSE).
14
19
 
15
- Установка опубликованного пакета:
20
+ Установка из публичного npm:
16
21
 
17
22
  ```bash
18
- pnpm add gavia-ui@0.7.0 vue
23
+ pnpm add gavia-ui vue
19
24
  ```
20
25
 
21
26
  GitHub-токен не нужен. Актуальное состояние публикации пакета и витрины —
22
27
  в [каноническом README](https://github.com/whitewolf06/gavia-ui/blob/main/README.md).
23
- Архив также можно собрать из [репозитория](https://github.com/whitewolf06/gavia-ui).
28
+ Архив текущих исходников `0.8.1` также можно собрать из
29
+ [репозитория](https://github.com/whitewolf06/gavia-ui):
30
+
31
+ ```bash
32
+ # Из корня репозитория:
33
+ pnpm build
34
+ pnpm run pack
35
+ # В приложении-потребителе:
36
+ pnpm add /absolute/path/to/gavia-ui/packages/ui-kit/gavia-ui-0.8.1.tgz vue
37
+ ```
38
+
24
39
  Runtime-зависимостей нет; Vue 3 — единственный обязательный peer.
25
40
  [История изменений](CHANGELOG.md) и
26
41
  [переход с прежнего имени](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-gavia.md).
@@ -29,7 +44,7 @@ Runtime-зависимостей нет; Vue 3 — единственный об
29
44
 
30
45
  Общие роли типографики, шкала расстояний, поверхности, состояния и UI-паттерны
31
46
  описаны в [руководстве](https://github.com/whitewolf06/gavia-ui/blob/main/docs/design-system.md). Playground `?view=system`
32
- показывает каталог токенов, три темы и контракты 51 компонента.
47
+ показывает каталог токенов, три темы и контракты 53 компонентов.
33
48
 
34
49
  Опциональная компоновка и типографика: явный импорт
35
50
  `gavia-ui/styles/primitives.css`. Экспорты `wlDesignTokens`,
@@ -277,7 +292,7 @@ function remove(): void {
277
292
 
278
293
  ## Component manifest
279
294
 
280
- Машиночитаемое описание всех 51 компонентов: пропсы (типы, дефолты, enum-значения),
295
+ Машиночитаемое описание всех 53 компонентов: пропсы (типы, дефолты, enum-значения),
281
296
  слоты, события, `v-model` и `introducedIn` — первая публичная версия, содержащая
282
297
  компонент. Предназначен для визуальных редакторов (палитра +
283
298
  инспектор пропсов) и AI-агентов, генерирующих разметку.
@@ -24,8 +24,8 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
24
24
  }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
25
25
  onClick?: ((event: MouseEvent) => any) | undefined;
26
26
  }>, {
27
- type: "button" | "submit" | "reset";
28
27
  size: WlSize;
28
+ type: "button" | "submit" | "reset";
29
29
  variant: WlButtonVariant;
30
30
  disabled: boolean;
31
31
  density: WlDensity;
@@ -7,6 +7,7 @@ type __VLS_Props = {
7
7
  showIcon?: boolean;
8
8
  minDate?: string;
9
9
  maxDate?: string;
10
+ displayFormat?: "dd.mm.yyyy" | "yyyy-mm-dd";
10
11
  motion?: boolean;
11
12
  pt?: Record<string, unknown>;
12
13
  };
@@ -24,6 +25,7 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {},
24
25
  placeholder: string;
25
26
  motion: boolean;
26
27
  showIcon: boolean;
28
+ displayFormat: "dd.mm.yyyy" | "yyyy-mm-dd";
27
29
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
28
30
  control: HTMLInputElement;
29
31
  panel: HTMLDivElement;
@@ -1,6 +1,6 @@
1
- import { WlIconName } from '../types';
1
+ import { WlIconInput } from '../types';
2
2
  type __VLS_Props = {
3
- icon?: WlIconName;
3
+ icon?: WlIconInput;
4
4
  title?: string;
5
5
  description?: string;
6
6
  };
@@ -0,0 +1,54 @@
1
+ import { WlDensity, WlSizeSm } from '../types';
2
+ type __VLS_Props = {
3
+ accept?: string;
4
+ multiple?: boolean;
5
+ disabled?: boolean;
6
+ chooseLabel?: string;
7
+ ariaLabel?: string;
8
+ size?: WlSizeSm;
9
+ density?: WlDensity;
10
+ pt?: Record<string, unknown>;
11
+ };
12
+ declare function __VLS_template(): {
13
+ attrs: Partial<{}>;
14
+ slots: {
15
+ trigger?(_: {
16
+ choose: () => void;
17
+ clear: () => void;
18
+ disabled: boolean;
19
+ attrs: {
20
+ [k: string]: unknown;
21
+ };
22
+ }): any;
23
+ };
24
+ refs: {
25
+ input: HTMLInputElement;
26
+ };
27
+ rootEl: any;
28
+ };
29
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
30
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
31
+ choose: () => void;
32
+ clear: () => void;
33
+ }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
34
+ select: (files: File[]) => any;
35
+ cancel: () => any;
36
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
37
+ onSelect?: ((files: File[]) => any) | undefined;
38
+ onCancel?: (() => any) | undefined;
39
+ }>, {
40
+ size: WlSizeSm;
41
+ disabled: boolean;
42
+ multiple: boolean;
43
+ density: WlDensity;
44
+ chooseLabel: string;
45
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
46
+ input: HTMLInputElement;
47
+ }, any>;
48
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
49
+ export default _default;
50
+ type __VLS_WithTemplateSlots<T, S> = T & {
51
+ new (): {
52
+ $slots: S;
53
+ };
54
+ };
@@ -1,6 +1,6 @@
1
- import { WlIconName } from '../types';
1
+ import { WlIconInput } from '../iconNames';
2
2
  type __VLS_Props = {
3
- name?: WlIconName;
3
+ name?: WlIconInput;
4
4
  size?: number | string;
5
5
  };
6
6
  declare function __VLS_template(): {
@@ -1,8 +1,9 @@
1
- import { WlIconButtonVariant, WlIconName } from '../types';
1
+ import { WlIconButtonVariant } from '../types';
2
+ import { WlIconInput } from '../iconNames';
2
3
  type __VLS_Props = {
3
4
  variant?: WlIconButtonVariant;
4
5
  size?: "md" | "sm";
5
- icon?: WlIconName;
6
+ icon?: WlIconInput;
6
7
  active?: boolean;
7
8
  disabled?: boolean;
8
9
  count?: number;
@@ -26,8 +26,8 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_PublicProps,
26
26
  }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
27
27
  "onUpdate:modelValue"?: ((value: string) => any) | undefined;
28
28
  }>, {
29
- type: string;
30
29
  size: WlSizeSm;
30
+ type: string;
31
31
  disabled: boolean;
32
32
  invalid: boolean;
33
33
  density: WlDensity;
@@ -10,7 +10,7 @@ type __VLS_Props = {
10
10
  declare const _default: import('vue').DefineComponent<__VLS_Props, {
11
11
  toggle: (event?: Event) => void;
12
12
  show: (event?: Event) => void;
13
- hide: () => void;
13
+ hide: (event?: Event) => void;
14
14
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
15
15
  open: () => any;
16
16
  close: () => any;
@@ -1,7 +1,7 @@
1
- import { WlIconName } from '../types';
1
+ import { WlIconInput } from '../types';
2
2
  type __VLS_Props = {
3
3
  label?: string;
4
- icon?: WlIconName;
4
+ icon?: WlIconInput;
5
5
  badge?: number | string;
6
6
  active?: boolean;
7
7
  disabled?: boolean;
@@ -20,7 +20,7 @@ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
20
20
  declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {
21
21
  toggle: (event?: Event) => void;
22
22
  show: (event?: Event) => void;
23
- hide: () => void;
23
+ hide: (event?: Event) => void;
24
24
  }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
25
25
  open: () => any;
26
26
  close: () => any;
@@ -1,6 +1,6 @@
1
- import { WlIconName, WlStatCardTone } from '../types';
1
+ import { WlIconInput, WlStatCardTone } from '../types';
2
2
  type __VLS_Props = {
3
- icon?: WlIconName;
3
+ icon?: WlIconInput;
4
4
  label?: string;
5
5
  value?: string;
6
6
  description?: string;
@@ -0,0 +1,26 @@
1
+ import { WlDensity, WlSizeSm } from '../types';
2
+ type __VLS_Props = {
3
+ minTime?: string;
4
+ maxTime?: string;
5
+ size?: WlSizeSm;
6
+ density?: WlDensity;
7
+ disabled?: boolean;
8
+ invalid?: boolean;
9
+ pt?: Record<string, unknown>;
10
+ };
11
+ type __VLS_PublicProps = {
12
+ modelValue?: string | null;
13
+ } & __VLS_Props;
14
+ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
15
+ "update:modelValue": (value: string | null) => any;
16
+ }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
17
+ "onUpdate:modelValue"?: ((value: string | null) => any) | undefined;
18
+ }>, {
19
+ size: WlSizeSm;
20
+ disabled: boolean;
21
+ invalid: boolean;
22
+ density: WlDensity;
23
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
24
+ control: HTMLInputElement;
25
+ }, any>;
26
+ export default _default;
@@ -20,6 +20,7 @@ export { default as WlDrawer } from './WlDrawer.vue';
20
20
  export { default as WlEmpty } from './WlEmpty.vue';
21
21
  export { default as WlField } from './WlField.vue';
22
22
  export { default as WlFileUpload } from './WlFileUpload.vue';
23
+ export { default as WlFilePicker } from './WlFilePicker.vue';
23
24
  export { default as WlFilterBar } from './WlFilterBar.vue';
24
25
  export { default as WlIcon } from './WlIcon.vue';
25
26
  export { default as WlIconButton } from './WlIconButton.vue';
@@ -48,4 +49,5 @@ export { default as WlTable } from './WlTable.vue';
48
49
  export { default as WlTabs } from './WlTabs.vue';
49
50
  export { default as WlTag } from './WlTag.vue';
50
51
  export { default as WlTextarea } from './WlTextarea.vue';
52
+ export { default as WlTimePicker } from './WlTimePicker.vue';
51
53
  export { default as WlToast } from './WlToast.vue';
@@ -0,0 +1,8 @@
1
+ /** Browser selection only. The consumer owns the chosen files and upload policy. */
2
+ export declare function useNativeFilePicker(disabled: () => boolean, select: (files: File[]) => void, cancel?: () => void): {
3
+ input: import('vue').Ref<HTMLInputElement | null, HTMLInputElement | null>;
4
+ choose: () => void;
5
+ clear: () => void;
6
+ onChange: (event: Event) => void;
7
+ onCancel: () => void;
8
+ };
@@ -0,0 +1,5 @@
1
+ import { WlIconName } from './icons.generated';
2
+ /** A canonical name or a persisted icon identifier from a consumer. */
3
+ export type WlIconInput = WlIconName | (string & {});
4
+ /** Resolve names for display only; callers retain their original stored value. */
5
+ export declare function resolveWlIconName(input?: string | null): WlIconName | undefined;
@@ -1,3 +1,3 @@
1
- export declare const WL_ICON_NAMES: readonly ["activity", "bell", "calendar", "check", "chevron-down", "chevron-left", "chevron-right", "chevron-up", "clock", "edit", "eye-off", "eye", "file", "filter", "flag", "folder", "grid", "help", "home", "image", "inbox", "info", "lightning", "link", "logout", "message", "microphone", "minus", "more", "music", "note", "panel", "paperclip", "pause", "pin", "play", "plus", "search", "send", "settings", "sparkle", "task", "trash", "upload", "user", "warn", "x"];
1
+ export declare const WL_ICON_NAMES: readonly ["activity", "align-left", "arrow-left", "arrow-right", "arrow-up-right", "arrow-up", "ban", "bars", "bell", "book", "bookmark", "box", "briefcase", "building", "calendar-plus", "calendar", "chart-bar", "check-circle", "check-square", "check", "chevron-down", "chevron-left", "chevron-right", "chevron-up", "circle", "clock", "clone", "cloud-rain", "cloud-upload", "code", "comment", "comments", "copy", "cross", "database", "directions", "download", "edit", "exclamation-circle", "external-link", "eye-off", "eye", "file-edit", "file-pdf", "file-plus", "file", "filter", "flag-fill", "flag", "flame", "folder-open", "folder-plus", "folder", "grid", "heart", "help", "history", "home", "image", "inbox", "info", "lightbulb", "lightning", "link", "list-check", "list", "lock", "logout", "map", "message", "microphone", "minus", "more", "music", "note", "panel", "paperclip", "pause", "pin", "play", "plus-circle", "plus", "refresh", "save", "search", "send", "settings", "share-alt", "shield", "sliders-h", "smile", "sort-alt", "sparkle", "star", "stop-circle", "stop", "stopwatch", "table", "tag", "tags", "task", "th-large", "times-circle", "trash", "upload", "user", "users", "video", "volume-up", "warn", "waves", "wrench", "x"];
2
2
  export type WlIconName = typeof WL_ICON_NAMES[number];
3
3
  export declare const WL_ICONS: Record<WlIconName, string>;
package/dist/index.d.ts CHANGED
@@ -2,6 +2,8 @@ export * from './components';
2
2
  export * from './types';
3
3
  export * from './design-system';
4
4
  export { WL_ICON_NAMES } from './icons.generated';
5
+ export { resolveWlIconName } from './iconNames';
6
+ export type { WlIconInput } from './iconNames';
5
7
  export * from './manifest';
6
8
  export { createWlPt } from './theme';
7
9
  export type { WlPtConfig, WlPtSection, WlPtCallbackOptions } from './theme';