gavia-ui 0.7.1 → 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,28 @@
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 сохраняются; новые компоненты подключаются явно.
10
31
 
11
32
  ## 0.7.1 — 2026-10-05
12
33
 
package/README.md CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
  [![Смотреть демо Gavia UI](https://img.shields.io/badge/LIVE_DEMO-2563EB?style=for-the-badge)](https://whitewolf06.github.io/gavia-ui/ "Смотреть демо Gavia UI")
4
4
 
5
- Версия `0.7.1`. [История изменений](CHANGELOG.md).
5
+ Версия исходников `0.8.1` готовится к выпуску; опубликованная npm-версия пока `0.7.1`. [История изменений](CHANGELOG.md).
6
6
  [Переход на Gavia UI](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.7.md).
7
7
 
8
+ [Новые компоненты и переход 0.8](https://github.com/whitewolf06/gavia-ui/blob/main/docs/migration-0.8.md).
9
+
8
10
  Создатель и сопровождающий — [Gorbach Dmitry](https://github.com/whitewolf06).
9
11
  Витрина в репозитории включает живые примеры, страницу об авторе и полный changelog;
10
12
  [публикация документации](https://github.com/whitewolf06/gavia-ui/blob/main/docs/hosting.md).
@@ -23,7 +25,7 @@ pnpm add gavia-ui vue
23
25
 
24
26
  GitHub-токен не нужен. Актуальное состояние публикации пакета и витрины —
25
27
  в [каноническом README](https://github.com/whitewolf06/gavia-ui/blob/main/README.md).
26
- Архив текущих исходников `0.7.1` также можно собрать из
28
+ Архив текущих исходников `0.8.1` также можно собрать из
27
29
  [репозитория](https://github.com/whitewolf06/gavia-ui):
28
30
 
29
31
  ```bash
@@ -31,7 +33,7 @@ GitHub-токен не нужен. Актуальное состояние пу
31
33
  pnpm build
32
34
  pnpm run pack
33
35
  # В приложении-потребителе:
34
- pnpm add /absolute/path/to/gavia-ui/packages/ui-kit/gavia-ui-0.7.1.tgz vue
36
+ pnpm add /absolute/path/to/gavia-ui/packages/ui-kit/gavia-ui-0.8.1.tgz vue
35
37
  ```
36
38
 
37
39
  Runtime-зависимостей нет; Vue 3 — единственный обязательный peer.
@@ -42,7 +44,7 @@ Runtime-зависимостей нет; Vue 3 — единственный об
42
44
 
43
45
  Общие роли типографики, шкала расстояний, поверхности, состояния и UI-паттерны
44
46
  описаны в [руководстве](https://github.com/whitewolf06/gavia-ui/blob/main/docs/design-system.md). Playground `?view=system`
45
- показывает каталог токенов, три темы и контракты 51 компонента.
47
+ показывает каталог токенов, три темы и контракты 53 компонентов.
46
48
 
47
49
  Опциональная компоновка и типографика: явный импорт
48
50
  `gavia-ui/styles/primitives.css`. Экспорты `wlDesignTokens`,
@@ -290,7 +292,7 @@ function remove(): void {
290
292
 
291
293
  ## Component manifest
292
294
 
293
- Машиночитаемое описание всех 51 компонентов: пропсы (типы, дефолты, enum-значения),
295
+ Машиночитаемое описание всех 53 компонентов: пропсы (типы, дефолты, enum-значения),
294
296
  слоты, события, `v-model` и `introducedIn` — первая публичная версия, содержащая
295
297
  компонент. Предназначен для визуальных редакторов (палитра +
296
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';