@pgcorp/ui-kit 0.14.0 → 0.15.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/README.md +330 -12
- package/dist/assets/src/components/layout/{SResizeHandle.vue_vue_type_style_index_0_scoped_13b9b27a_lang.css → SResizeHandle.vue_vue_type_style_index_0_scoped_dc65aba1_lang.css} +1 -1
- package/dist/assets/src/components/shared/_internal/SDialogSurface.css_vue_type_style_index_0_src_a108e8f1_scoped_a108e8f1_lang.css +2 -0
- package/dist/assets/src/components/shared/containers/{SCollapsiblePanel.css_vue_type_style_index_0_src_71824088_scoped_71824088_lang.css → SCollapsiblePanel.css_vue_type_style_index_0_src_db85261d_scoped_db85261d_lang.css} +1 -1
- package/dist/assets/src/components/shared/containers/{SOverlayHost.css_vue_type_style_index_0_src_8f9be94e_scoped_8f9be94e_lang.css → SOverlayHost.css_vue_type_style_index_0_src_09215628_scoped_09215628_lang.css} +1 -1
- package/dist/assets/src/components/shared/containers/{SPopover.css_vue_type_style_index_0_src_4091d007_scoped_4091d007_lang.css → SPopover.css_vue_type_style_index_0_src_a4f1f64a_scoped_a4f1f64a_lang.css} +1 -1
- package/dist/assets/src/components/shared/containers/SSidebarSection.css_vue_type_style_index_0_src_52396e42_scoped_52396e42_lang.css +2 -0
- package/dist/assets/src/components/shared/controls/SButton.css_vue_type_style_index_0_src_7a5acda9_scoped_7a5acda9_lang.css +1 -1
- package/dist/assets/src/components/shared/controls/SCheckbox.css_vue_type_style_index_0_src_2562f916_scoped_2562f916_lang.css +2 -0
- package/dist/assets/src/components/shared/controls/SCombobox.css_vue_type_style_index_0_src_d630c922_scoped_d630c922_lang.css +2 -0
- package/dist/assets/src/components/shared/controls/SContextMenu.css_vue_type_style_index_0_src_43b6e378_scoped_43b6e378_lang.css +1 -0
- package/dist/assets/src/components/shared/controls/{SDropdownMenu.css_vue_type_style_index_0_src_857e2649_scoped_857e2649_lang.css → SDropdownMenu.css_vue_type_style_index_0_src_40040ae5_scoped_40040ae5_lang.css} +1 -1
- package/dist/assets/src/components/shared/controls/{SMenuSurface.css_vue_type_style_index_0_src_84109ad9_scoped_84109ad9_lang.css → SMenuSurface.css_vue_type_style_index_0_src_d2b7d71b_scoped_d2b7d71b_lang.css} +1 -1
- package/dist/assets/src/components/shared/controls/SSelect.css_vue_type_style_index_0_src_d1ead6c0_scoped_d1ead6c0_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/SControlledToastViewport.css_vue_type_style_index_0_src_a69aa84b_scoped_a69aa84b_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/SScrollViewport.css_vue_type_style_index_0_src_d94fcf8c_scoped_d94fcf8c_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/STooltip.css_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/assets/src/components/shared/data-display/_internal/STableFrame.css_vue_type_style_index_0_src_914bad28_scoped_914bad28_lang.css +2 -0
- package/dist/assets/src/components/shared/navigation/{SBottomNav.vue_vue_type_style_index_0_scoped_24be0f2b_lang.css → SBottomNav.vue_vue_type_style_index_0_scoped_68cf84b3_lang.css} +1 -1
- package/dist/src/components/layout/SResizeHandle.vue.js +2 -2
- package/dist/src/components/layout/SResizeHandle.vue_vue_type_script_setup_true_lang.js +4 -2
- package/dist/src/components/shared/_internal/SDialogSurface.vue.d.ts +9 -1
- package/dist/src/components/shared/_internal/SDialogSurface.vue.js +2 -2
- package/dist/src/components/shared/_internal/SDialogSurface.vue_vue_type_script_setup_true_lang.js +174 -82
- package/dist/src/components/shared/_internal/dialogSurface.d.ts +2 -0
- package/dist/src/components/shared/_internal/dialogSurface.js +30 -27
- package/dist/src/components/shared/_internal/dialogSurfaceMotion.d.ts +14 -0
- package/dist/src/components/shared/_internal/dialogSurfaceMotion.js +84 -0
- package/dist/src/components/shared/_internal/focusTrap.js +15 -13
- package/dist/src/components/shared/containers/SCollapsiblePanel.vue.d.ts +5 -0
- package/dist/src/components/shared/containers/SCollapsiblePanel.vue.js +2 -2
- package/dist/src/components/shared/containers/SCollapsiblePanel.vue_vue_type_script_setup_true_lang.js +123 -121
- package/dist/src/components/shared/containers/SDrawer.vue.d.ts +4 -4
- package/dist/src/components/shared/containers/SDrawer.vue.js +3 -6
- package/dist/src/components/shared/containers/SDrawer.vue_vue_type_script_setup_true_lang.js +104 -128
- package/dist/src/components/shared/containers/SModal.vue.d.ts +8 -8
- package/dist/src/components/shared/containers/SModal.vue.js +3 -6
- package/dist/src/components/shared/containers/SModal.vue_vue_type_script_setup_true_lang.js +87 -103
- package/dist/src/components/shared/containers/SOverlayHost.vue.js +2 -2
- package/dist/src/components/shared/containers/SOverlayHost.vue_vue_type_script_setup_true_lang.js +32 -31
- package/dist/src/components/shared/containers/SPanel.vue.d.ts +1 -1
- package/dist/src/components/shared/containers/SPopover.vue.js +2 -2
- package/dist/src/components/shared/containers/SPopover.vue_vue_type_script_setup_true_lang.js +225 -200
- package/dist/src/components/shared/containers/SSidebarSection.vue.js +2 -2
- package/dist/src/components/shared/containers/SSidebarSection.vue_vue_type_script_setup_true_lang.js +4 -3
- package/dist/src/components/shared/controls/SCheckbox.vue.js +2 -2
- package/dist/src/components/shared/controls/SCheckbox.vue_vue_type_script_setup_true_lang.js +13 -7
- package/dist/src/components/shared/controls/SCombobox.vue.js +2 -2
- package/dist/src/components/shared/controls/SCombobox.vue_vue_type_script_setup_true_lang.js +104 -94
- package/dist/src/components/shared/controls/SContextMenu.vue.js +2 -2
- package/dist/src/components/shared/controls/SContextMenu.vue_vue_type_script_setup_true_lang.js +86 -81
- package/dist/src/components/shared/controls/SDropdownMenu.vue.js +2 -2
- package/dist/src/components/shared/controls/SDropdownMenu.vue_vue_type_script_setup_true_lang.js +77 -72
- package/dist/src/components/shared/controls/SMenuSurface.vue.js +2 -2
- package/dist/src/components/shared/controls/SMenuSurface.vue_vue_type_script_setup_true_lang.js +81 -77
- package/dist/src/components/shared/controls/SSelect.vue.js +2 -2
- package/dist/src/components/shared/controls/SSelect.vue_vue_type_script_setup_true_lang.js +85 -77
- package/dist/src/components/shared/data-display/SControlledToastViewport.vue.js +2 -2
- package/dist/src/components/shared/data-display/SControlledToastViewport.vue_vue_type_script_setup_true_lang.js +58 -49
- package/dist/src/components/shared/data-display/SScrollViewport.vue.d.ts +10 -5
- package/dist/src/components/shared/data-display/SScrollViewport.vue.js +2 -2
- package/dist/src/components/shared/data-display/SScrollViewport.vue_vue_type_script_setup_true_lang.js +162 -111
- package/dist/src/components/shared/data-display/STooltip.vue_vue_type_script_setup_true_lang.js +276 -224
- package/dist/src/components/shared/data-display/_internal/STableFrame.vue.d.ts +3 -3
- package/dist/src/components/shared/data-display/_internal/STableFrame.vue.js +2 -2
- package/dist/src/components/shared/data-display/_internal/STableFrame.vue_vue_type_script_setup_true_lang.js +62 -46
- package/dist/src/components/shared/data-display/scrollViewport.d.ts +2 -0
- package/dist/src/components/shared/navigation/SBottomNav.vue.js +2 -2
- package/dist/src/components/shared/navigation/SBottomNav.vue_vue_type_script_setup_true_lang.js +3 -1
- package/dist/src/components/shared/navigation/STabList.vue.d.ts +1 -1
- package/dist/src/composables/useDialogOverlay.d.ts +12 -2
- package/dist/src/composables/useDialogOverlay.js +192 -119
- package/dist/src/internal/flatTree.d.ts +8 -0
- package/dist/src/internal/flatTree.js +23 -0
- package/dist/src/internal/focusNavigation.d.ts +3 -0
- package/dist/src/internal/focusNavigation.js +28 -15
- package/dist/src/internal/inertLease.d.ts +8 -0
- package/dist/src/internal/inertLease.js +33 -0
- package/dist/src/internal/layerStack.d.ts +40 -0
- package/dist/src/internal/layerStack.js +301 -94
- package/dist/src/internal/nativeFocus.d.ts +4 -0
- package/dist/src/internal/nativeFocus.js +12 -0
- package/dist/src/internal/overlayPortal.d.ts +17 -0
- package/dist/src/internal/overlayPortal.js +23 -0
- package/dist/src/internal/semanticSizing.d.ts +2 -2
- package/dist/src/internal/semanticSizing.js +2 -1
- package/dist/src/internal/useMenuLayer.d.ts +1 -0
- package/dist/src/internal/useMenuLayer.js +63 -57
- package/dist/src/internal/viewportModality.d.ts +27 -0
- package/dist/src/internal/viewportModality.js +132 -0
- package/dist/typography.js +17 -62
- package/docs/overlay-lifecycle.md +195 -0
- package/docs/public-api.md +141 -4
- package/docs/resize.md +34 -5
- package/docs/scroll-viewport.md +30 -10
- package/docs/theming.md +42 -8
- package/package.json +1 -1
- package/src/components/shared/_internal/SDialogSurface.css +185 -40
- package/src/components/shared/controls/SButton.css +0 -3
- package/src/components/shared/controls/SCheckbox.css +19 -7
- package/src/components/shared/data-display/SControlledToastViewport.css +2 -10
- package/src/components/shared/data-display/SScrollViewport.css +17 -1
- package/src/components/shared/data-display/STooltip.css +1 -1
- package/src/components/shared/data-display/_internal/STableFrame.css +1 -5
- package/dist/assets/src/components/shared/_internal/SDialogSurface.css_vue_type_style_index_0_src_0e58afdc_scoped_0e58afdc_lang.css +0 -2
- package/dist/assets/src/components/shared/containers/SDrawer.css_vue_type_style_index_0_src_61cf20dd_scoped_61cf20dd_lang.css +0 -2
- package/dist/assets/src/components/shared/containers/SModal.css_vue_type_style_index_0_src_42e1bd5f_scoped_42e1bd5f_lang.css +0 -2
- package/dist/assets/src/components/shared/containers/SSidebarSection.css_vue_type_style_index_0_src_21f71ae8_scoped_21f71ae8_lang.css +0 -2
- package/dist/assets/src/components/shared/controls/SCheckbox.css_vue_type_style_index_0_src_55d4826e_scoped_55d4826e_lang.css +0 -2
- package/dist/assets/src/components/shared/controls/SCombobox.css_vue_type_style_index_0_src_537f5744_scoped_537f5744_lang.css +0 -2
- package/dist/assets/src/components/shared/controls/SContextMenu.css_vue_type_style_index_0_src_03921269_scoped_03921269_lang.css +0 -1
- package/dist/assets/src/components/shared/controls/SSelect.css_vue_type_style_index_0_src_df3d6688_scoped_df3d6688_lang.css +0 -2
- package/dist/assets/src/components/shared/data-display/SControlledToastViewport.css_vue_type_style_index_0_src_5864b6c6_scoped_5864b6c6_lang.css +0 -2
- package/dist/assets/src/components/shared/data-display/SScrollViewport.css_vue_type_style_index_0_src_e5d11342_scoped_e5d11342_lang.css +0 -2
- package/dist/assets/src/components/shared/data-display/_internal/STableFrame.css_vue_type_style_index_0_src_52b5825e_scoped_52b5825e_lang.css +0 -2
- package/src/components/shared/containers/SDrawer.css +0 -87
- package/src/components/shared/containers/SModal.css +0 -27
package/README.md
CHANGED
|
@@ -331,12 +331,32 @@ semantic block size, overscroll policy и root-only keyboard navigation.
|
|
|
331
331
|
semantic offsets. Exposed API предоставляет `focus`, `scrollToBoundary` и
|
|
332
332
|
`reveal`, но не открывает DOM owner.
|
|
333
333
|
|
|
334
|
+
`focusPolicy="always"` сохраняет именованную region; `focusPolicy="overflow"`
|
|
335
|
+
добавляет region и Tab stop только при переполнении разрешённой оси. Имя задаётся
|
|
336
|
+
ровно одним из `accessibleLabel` и `accessibleLabelledby`. `blockSize="content"`
|
|
337
|
+
сохраняет естественную высоту, `maxBlockSize="none|sm|md|lg"` ограничивает её
|
|
338
|
+
общей шкалой viewport. Таблицы `STable`, `SDataGrid` и rich-document используют
|
|
339
|
+
этот общий scroll owner: пустые и пассивные таблицы доступны клавиатуре при
|
|
340
|
+
переполнении, вложенные controls сохраняют собственную клавиатуру.
|
|
341
|
+
При исчезновении переполнения focused root сохраняет `tabindex="-1"` до blur;
|
|
342
|
+
он не добавляет остановку Tab и не переносит фокус.
|
|
343
|
+
|
|
334
344
|
`SScrollViewport` owns a named scroll region, `x`/`y`/`both` axes, semantic
|
|
335
345
|
block size, overscroll policy, and root-only keyboard navigation. The
|
|
336
346
|
`scroll-state` event provides normalized physical and writing-mode-aware
|
|
337
347
|
semantic offsets. Its exposed API provides `focus`, `scrollToBoundary`, and
|
|
338
348
|
`reveal` without exposing the DOM owner.
|
|
339
349
|
|
|
350
|
+
`focusPolicy="always"` retains the named region; `focusPolicy="overflow"`
|
|
351
|
+
adds a region and Tab stop only when an enabled axis overflows. Exactly one
|
|
352
|
+
of `accessibleLabel` and `accessibleLabelledby` supplies its name.
|
|
353
|
+
`blockSize="content"` retains intrinsic height; `maxBlockSize="none|sm|md|lg"`
|
|
354
|
+
uses the shared viewport limit scale. `STable`, `SDataGrid`, and rich-document
|
|
355
|
+
tables compose this scroll owner: overflowing empty and passive tables are
|
|
356
|
+
keyboard reachable, while nested controls retain their own keyboard behavior.
|
|
357
|
+
When overflow disappears, a focused root retains `tabindex="-1"` until blur;
|
|
358
|
+
it adds no Tab stop and does not move focus.
|
|
359
|
+
|
|
340
360
|
```ts
|
|
341
361
|
import SScrollViewport from '@pgcorp/ui-kit/shared/data-display/SScrollViewport.vue'
|
|
342
362
|
import type {
|
|
@@ -704,6 +724,29 @@ limited preview is not the download source. `SLink.disabled` and
|
|
|
704
724
|
Контракт, Blob lifecycle и ограничения браузера включены в пакет: `docs/link-download.md`.
|
|
705
725
|
The package includes the contract, Blob lifecycle, and browser limitations in `docs/link-download.md`.
|
|
706
726
|
|
|
727
|
+
### Идентичность динамических вкладок / Dynamic tab identity
|
|
728
|
+
|
|
729
|
+
В managed-композиции `STabs` значение `modelValue`, `STab.name` и
|
|
730
|
+
`STabPanel.name` используют один стабильный ID сущности. Vue `key` также
|
|
731
|
+
основан на этом ID. Добавление элемента и выбор его ID допускаются в одной
|
|
732
|
+
reactive update, включая вставку в начало массива. Порядковый номер и подпись
|
|
733
|
+
вкладки являются отображением, а не идентичностью.
|
|
734
|
+
|
|
735
|
+
Для E2E consumer задаёт собственные `data-*` маркеры по ID и проверяет роль
|
|
736
|
+
`tab`, `aria-selected`, связь `aria-controls` с ID панели и обратную
|
|
737
|
+
`aria-labelledby`. Внутренний формат DOM ID, `nth()` и индекс в подписи не
|
|
738
|
+
являются selector-контрактом. Сохранённые панели сохраняют свой input при
|
|
739
|
+
переключении; ручная DOM-активация и remount для выбора не требуются.
|
|
740
|
+
|
|
741
|
+
In managed `STabs`, `modelValue`, `STab.name`, `STabPanel.name`, and Vue `key`
|
|
742
|
+
use the same stable entity ID. Adding a keyed item and selecting its ID can
|
|
743
|
+
occur in one reactive update, including insertion at the beginning. An ordinal
|
|
744
|
+
or label is presentation, not identity. E2E tests use consumer-owned `data-*`
|
|
745
|
+
IDs, the `tab` role, `aria-selected`, and the matching `aria-controls` /
|
|
746
|
+
`aria-labelledby` relationship. Internal DOM ID formats, `nth()`, and label
|
|
747
|
+
indices are not selector contracts. Retained panels preserve their input;
|
|
748
|
+
selection does not require manual DOM activation or remounting.
|
|
749
|
+
|
|
707
750
|
### Подсказка на интерактивной поверхности / Tooltip on an interactive surface
|
|
708
751
|
|
|
709
752
|
`SInteractiveSurface` принимает полный combined `trigger` от `STooltip` через
|
|
@@ -724,6 +767,33 @@ focus и activation независимо от primary owner.
|
|
|
724
767
|
Blur окна, скрытие документа, disabled и освобождение target отменяют
|
|
725
768
|
таймеры и слушатели. Новый вход указателя или получение фокуса открывает
|
|
726
769
|
подсказку по действующему `showDelay`.
|
|
770
|
+
Canonical focus owner допускает binding внутри сохранённой скрытой секции.
|
|
771
|
+
Скрытый или недоступный owner не активирует подсказку. Скрытие ancestor
|
|
772
|
+
отменяет pending-таймеры, сразу исключает открытую панель из взаимодействия
|
|
773
|
+
и снимает description. Reveal сохраняет owner; новый pointer/focus вход
|
|
774
|
+
открывает подсказку без дополнительного Tab stop.
|
|
775
|
+
|
|
776
|
+
Пассивная tooltip-поверхность передаёт полный `text`/`title`/`description`,
|
|
777
|
+
`details` и `sections` как доступное описание focus owner через
|
|
778
|
+
`aria-describedby`; внешние `triggerDescribedBy` сохраняются. Визуальный
|
|
779
|
+
portal имеет `aria-hidden="true"`, исключая повторное самостоятельное чтение
|
|
780
|
+
того же текста вне landmark. Пассивная поверхность прозрачна для указателя:
|
|
781
|
+
нажатие достигает расположенного под ней действия, а наведение на видимый
|
|
782
|
+
контент сохраняет текущую подсказку. Имя и роль owner не изменяются. Подсказка не
|
|
783
|
+
содержит интерактивных действий; для popup с controls используется другой
|
|
784
|
+
overlay-компонент. Описание связывается при показе панели, включая открытие
|
|
785
|
+
по возвращённому фокусу после закрытия dialog.
|
|
786
|
+
|
|
787
|
+
The passive tooltip surface exposes all text, title, description, details,
|
|
788
|
+
and sections as the focus owner's accessible description through
|
|
789
|
+
`aria-describedby`, preserving external `triggerDescribedBy` references.
|
|
790
|
+
The visual portal has `aria-hidden="true"` to avoid duplicating that description
|
|
791
|
+
as independent content outside a landmark. The passive surface is pointer-transparent:
|
|
792
|
+
native activation reaches the underlying action while hovering the displayed content
|
|
793
|
+
keeps its current tooltip lease open. The owner's name and role remain
|
|
794
|
+
unchanged. A tooltip contains no interactive actions; use another overlay
|
|
795
|
+
component for a popup with controls. The description is associated when the
|
|
796
|
+
surface is shown, including focus restored after a dialog closes.
|
|
727
797
|
|
|
728
798
|
`SInteractiveSurface` accepts the complete combined `STooltip` trigger through
|
|
729
799
|
the `tooltipTrigger` prop. The binding belongs to the primary activation owner:
|
|
@@ -742,6 +812,11 @@ opening; a pending tooltip does not consume the event from a menu or dialog.
|
|
|
742
812
|
Window blur, a hidden document, disabled state, and released target identity
|
|
743
813
|
cancel timers and listeners. Fresh pointer entry or acquired focus opens the
|
|
744
814
|
tooltip according to its current `showDelay`.
|
|
815
|
+
A canonical focus owner can bind inside a retained hidden section. A hidden
|
|
816
|
+
or unavailable owner cannot activate the tooltip. Hiding its ancestor
|
|
817
|
+
cancels pending timers, immediately retires the open panel from interaction,
|
|
818
|
+
and removes its description. Revealing the section retains the owner;
|
|
819
|
+
fresh pointer/focus entry opens the tooltip without another Tab stop.
|
|
745
820
|
|
|
746
821
|
```vue
|
|
747
822
|
<STooltip text="/workspace/repository" v-slot="{ trigger }">
|
|
@@ -1116,6 +1191,20 @@ focus, and keyboard contracts remain unchanged.
|
|
|
1116
1191
|
</SButton>
|
|
1117
1192
|
```
|
|
1118
1193
|
|
|
1194
|
+
### Доступность действий / Action availability
|
|
1195
|
+
|
|
1196
|
+
`SButton.disabled` и `loading` исключают native activation и Tab focus;
|
|
1197
|
+
недоступная `href`-кнопка не содержит navigation target. При разрешении
|
|
1198
|
+
действия foreground и background применяются одной контрастной парой без
|
|
1199
|
+
интерполяции цветов. Действие доступно сразу, без ожидания декоративной
|
|
1200
|
+
анимации; transition тени и transform не меняет читаемость подписи.
|
|
1201
|
+
|
|
1202
|
+
`SButton.disabled` and `loading` prevent native activation and Tab focus;
|
|
1203
|
+
an unavailable `href` button has no navigation target. Enabling an action
|
|
1204
|
+
applies its foreground/background contrast pair atomically, without color
|
|
1205
|
+
interpolation. The action is immediately available, independently of
|
|
1206
|
+
decorative shadow or transform transitions.
|
|
1207
|
+
|
|
1119
1208
|
### Controlled checkbox и switch / Controlled checkbox and switch
|
|
1120
1209
|
|
|
1121
1210
|
`SCheckbox` и `SSwitch` всегда отражают authoritative `modelValue` в native
|
|
@@ -1132,6 +1221,22 @@ supports asynchronous persistence or rejection without rekeying, manual DOM
|
|
|
1132
1221
|
resets, or an optimistic model. The consumer updates `modelValue` normally
|
|
1133
1222
|
after confirmation.
|
|
1134
1223
|
|
|
1224
|
+
У `SCheckbox` единственный focus owner — native checkbox. Прозрачный input
|
|
1225
|
+
покрывает индикатор и его pointer target; нажатие на индикатор или связанную
|
|
1226
|
+
подпись выполняет одно действие. Обычный field использует semantic hitbox
|
|
1227
|
+
`--s-control-hitbox-2xs`, inline-представление — размер индикатора, согласованный
|
|
1228
|
+
со строкой документа. Tab переводит фокус на input, Space переключает его,
|
|
1229
|
+
focus-visible отображается на индикаторе. `disabled` и `readonly` не эмитят
|
|
1230
|
+
изменение или click; `indeterminate` показывает частичный выбор через минус.
|
|
1231
|
+
|
|
1232
|
+
`SCheckbox` has one focus owner: the native checkbox. Its transparent input
|
|
1233
|
+
covers the indicator and its pointer target; activating the indicator or its
|
|
1234
|
+
associated label performs one action. Field presentation uses the semantic
|
|
1235
|
+
`--s-control-hitbox-2xs` target; inline presentation uses the indicator size
|
|
1236
|
+
aligned with document text. Tab focuses the input, Space toggles it, and the
|
|
1237
|
+
indicator renders focus-visible. `disabled` and `readonly` emit neither change
|
|
1238
|
+
intent nor click; `indeterminate` represents partial selection with a minus.
|
|
1239
|
+
|
|
1135
1240
|
```vue
|
|
1136
1241
|
<SSwitch
|
|
1137
1242
|
:model-value="autoPublish"
|
|
@@ -1176,6 +1281,14 @@ contract applies only to textual types: `text`, `search`, `password`, `email`,
|
|
|
1176
1281
|
используют общие viewport overlay, focus trap/restore, Escape, backdrop и nested
|
|
1177
1282
|
layer stack.
|
|
1178
1283
|
|
|
1284
|
+
Viewport `SModal` и `SDrawer` используют единственный нативный `dialog` в
|
|
1285
|
+
modal top layer. Фон, включая SVG, MathML и shadow-композиции, исключён из
|
|
1286
|
+
pointer/focus interaction и accessibility tree. Дочерние select, меню, popover
|
|
1287
|
+
и tooltip используют принадлежащий этому dialog portal вне transform и
|
|
1288
|
+
scroll clipping. Вложенный viewport dialog изолирует родителя до закрытия.
|
|
1289
|
+
Native blocking освобождается синхронно при retirement; общая focus lease
|
|
1290
|
+
управляет возвратом, независимо от завершения visual leave.
|
|
1291
|
+
|
|
1179
1292
|
`SDrawer.placement` accepts `left | right | bottom`, defaulting to `right`.
|
|
1180
1293
|
`left` and `right` are physical sides independent of text direction. Side
|
|
1181
1294
|
drawers share the `sm/md/lg` scale: viewport-bounded maximum widths of
|
|
@@ -1187,6 +1300,30 @@ placement, header/body/footer and reachable actions. With
|
|
|
1187
1300
|
share viewport overlay, focus trap/restore, Escape, backdrop and the nested
|
|
1188
1301
|
layer stack.
|
|
1189
1302
|
|
|
1303
|
+
Viewport `SModal` and `SDrawer` use one native `dialog` in the modal top layer.
|
|
1304
|
+
Background content, including SVG, MathML, and shadow compositions, is excluded
|
|
1305
|
+
from pointer/focus interaction and the accessibility tree. Descendant selects,
|
|
1306
|
+
menus, popovers, and tooltips use that dialog's portal outside transforms and
|
|
1307
|
+
scroll clipping. A nested viewport dialog isolates its parent until closed.
|
|
1308
|
+
Retirement releases native blocking synchronously; the shared focus lease
|
|
1309
|
+
controls restoration independently of visual leave completion.
|
|
1310
|
+
|
|
1311
|
+
Для обновления на `0.15` готовые `SModal`/`SDrawer` сохраняют публичные props,
|
|
1312
|
+
slots и events. Собственный viewport leaf на экспортируемом `useDialogOverlay`
|
|
1313
|
+
требует миграции: `setPanelElement` получает native `HTMLDialogElement`, а
|
|
1314
|
+
`setPortalElement` — его непосредственный дочерний HTMLElement portal.
|
|
1315
|
+
Разметка, стили принадлежащих leaf surfaces и controlled close описаны в
|
|
1316
|
+
[`docs/overlay-lifecycle.md`](https://github.com/pglyanenko/sputnig/blob/master/packages/ui-kit/docs/overlay-lifecycle.md),
|
|
1317
|
+
включая карту binding исполняемой story `SModal.NativeOwnerContract`.
|
|
1318
|
+
|
|
1319
|
+
For an upgrade to `0.15`, the ready-made `SModal`/`SDrawer` preserve their public
|
|
1320
|
+
props, slots, and events. A custom viewport leaf using the exported
|
|
1321
|
+
`useDialogOverlay` requires migration: `setPanelElement` receives a native
|
|
1322
|
+
`HTMLDialogElement`, and `setPortalElement` receives its direct-child HTMLElement
|
|
1323
|
+
portal. The owned markup, styles, and controlled close contract are documented in
|
|
1324
|
+
[`docs/overlay-lifecycle.md`](https://github.com/pglyanenko/sputnig/blob/master/packages/ui-kit/docs/overlay-lifecycle.md),
|
|
1325
|
+
including the binding map of the executable `SModal.NativeOwnerContract` story.
|
|
1326
|
+
|
|
1190
1327
|
`scope="contained"` требует ближайший `SOverlayHost`. Его default-слот содержит
|
|
1191
1328
|
основную историю, `#overlay` — панель. Размеры `sm/md/lg` означают 50/70/90%
|
|
1192
1329
|
доступной области по оси `placement`; `extent` принимает конечный процент больше
|
|
@@ -1285,19 +1422,47 @@ drawer with `open=true` represent a new request, not the previous lifetime.
|
|
|
1285
1422
|
</SDrawer>
|
|
1286
1423
|
```
|
|
1287
1424
|
|
|
1425
|
+
### Передача фокуса из меню / Menu focus handoff
|
|
1426
|
+
|
|
1427
|
+
Открытие `SDrawer` из действия `SDropdownMenu` передаёт initial focus
|
|
1428
|
+
диалогу и сохраняет устойчивый menu trigger для возврата при закрытии.
|
|
1429
|
+
Меню и его trigger могут находиться вне contained host. Удаление временного
|
|
1430
|
+
menuitem в render-cycle не делает его целью возврата и не расширяет
|
|
1431
|
+
Escape boundary за пределы host. Повторные открытия используют отдельный
|
|
1432
|
+
open-cycle. Внешний переход фокуса отменяет незавершённую передачу и stale
|
|
1433
|
+
return; consumer не восстанавливает фокус DOM-вызовом.
|
|
1434
|
+
|
|
1435
|
+
Передача относится к текущему open intent и связанному завершению menu
|
|
1436
|
+
lifetime. Произвольное ожидание сервера перед первым запросом открытия не
|
|
1437
|
+
сохраняет право перехватить последующий внешний фокус.
|
|
1438
|
+
|
|
1439
|
+
Opening `SDrawer` from an `SDropdownMenu` action transfers initial focus
|
|
1440
|
+
to the dialog and retains the stable menu trigger for restoration on close.
|
|
1441
|
+
The menu and its trigger may live outside a contained host. Removing the
|
|
1442
|
+
transient menu item during rendering neither makes it a restoration target
|
|
1443
|
+
nor extends Escape handling beyond the host. Repeated openings have separate
|
|
1444
|
+
open cycles. An external focus change cancels pending handoff and stale
|
|
1445
|
+
restoration; consumers do not restore focus with DOM calls.
|
|
1446
|
+
|
|
1447
|
+
Handoff belongs to the current opening intent and the associated menu
|
|
1448
|
+
retirement. Arbitrary server work before the first opening request does not
|
|
1449
|
+
preserve permission to take subsequent external focus.
|
|
1450
|
+
|
|
1288
1451
|
### Dialog heading hierarchy
|
|
1289
1452
|
|
|
1290
1453
|
`SModal` и `SDrawer` используют `heading-level="2"` по умолчанию: самостоятельный
|
|
1291
1454
|
диалог следует за основным `h1` страницы. Для диалога, вложенного в секцию или
|
|
1292
1455
|
другой dialog surface, consumer передаёт фактический уровень document outline
|
|
1293
|
-
числом от `1` до `6`.
|
|
1456
|
+
числом от `1` до `6`. Локальная шапка диалога не создаёт page-level `banner`.
|
|
1457
|
+
Видимый заголовок при любом уровне остаётся accessible name
|
|
1294
1458
|
через `aria-labelledby`; заменять его локальным заголовком или DOM-обходом не
|
|
1295
1459
|
нужно.
|
|
1296
1460
|
|
|
1297
1461
|
`SModal` and `SDrawer` default to `heading-level="2"`, so a standalone dialog
|
|
1298
1462
|
follows the page's primary `h1`. A dialog nested in a section or another dialog
|
|
1299
1463
|
surface receives its actual document-outline level from the consumer as an
|
|
1300
|
-
integer from `1` through `6`.
|
|
1464
|
+
integer from `1` through `6`. Local dialog chrome does not create a page-level
|
|
1465
|
+
`banner` landmark. At every level the visible title remains the
|
|
1301
1466
|
accessible name through `aria-labelledby`; no local heading or DOM workaround
|
|
1302
1467
|
is required.
|
|
1303
1468
|
|
|
@@ -1332,6 +1497,11 @@ before the error reaches the host application.
|
|
|
1332
1497
|
через prop использует текущий focus owner. `close()` отменяет ожидающий запрос
|
|
1333
1498
|
через `update:open=false`; закрытие восстанавливает фокус только из принадлежащей
|
|
1334
1499
|
панели, не из внешнего поля. Каждый новый цикл использует актуального invoker.
|
|
1500
|
+
Удаление или отключение текущего focused action оставляет панель открытой;
|
|
1501
|
+
Принятое закрытие через Escape восстанавливает focus доступному
|
|
1502
|
+
зарегистрированному trigger. Явный blur
|
|
1503
|
+
доступного элемента и переход во внешний focus owner закрывают панель
|
|
1504
|
+
по outside-политике без перехвата внешнего focus.
|
|
1335
1505
|
|
|
1336
1506
|
`SPopover` supports `v-model:open` and the programmatic `open(triggerId?)`/`close()`
|
|
1337
1507
|
API. A trigger request preserves its native anchor and original focus owner
|
|
@@ -1340,6 +1510,11 @@ take focus from an external editor focused in the meantime. Direct prop-driven
|
|
|
1340
1510
|
opening uses the current focus owner. `close()` cancels a pending request with
|
|
1341
1511
|
`update:open=false`; closing restores focus only from the owned panel, not an
|
|
1342
1512
|
external field. Each new cycle uses its current invoker.
|
|
1513
|
+
Removing or disabling the currently focused action keeps the panel open;
|
|
1514
|
+
An accepted Escape close restores focus to the available registered trigger.
|
|
1515
|
+
Explicitly blurring an
|
|
1516
|
+
available element or moving to an external focus owner dismisses the panel
|
|
1517
|
+
under its outside policy without taking external focus.
|
|
1343
1518
|
|
|
1344
1519
|
`width="trigger"` задаёт минимальную ширину anchor; `content` сохраняет
|
|
1345
1520
|
intrinsic-ширину содержимого. `sm`, `md`, `lg` задают `20rem`, `28rem`, `36rem`
|
|
@@ -1353,6 +1528,22 @@ bounded by the viewport. Background, shadow, and focus surface occupy the full
|
|
|
1353
1528
|
dialog; `surface="transparent"` sets the entire dialog's maximum width to `90vw`.
|
|
1354
1529
|
With `width="trigger"`, the anchor minimum takes precedence over this maximum.
|
|
1355
1530
|
|
|
1531
|
+
### Читаемость всплывающих поверхностей / Overlay motion readability
|
|
1532
|
+
|
|
1533
|
+
`SDrawer`, `SPopover`, `STooltip`, `SContextMenu` и
|
|
1534
|
+
`SControlledToastViewport` сохраняют `opacity: 1` содержимого
|
|
1535
|
+
при открытии и закрытии. Прозрачность выбранного фона принадлежит surface
|
|
1536
|
+
контракту, а не анимации. Анимация использует перемещение и масштаб;
|
|
1537
|
+
backdrop имеет отдельный opacity transition. Reduced-motion предпочтение,
|
|
1538
|
+
focus ownership и keyboard dismissal принадлежат общим owners кита.
|
|
1539
|
+
|
|
1540
|
+
`SDrawer`, `SPopover`, `STooltip`, `SContextMenu`, and
|
|
1541
|
+
`SControlledToastViewport` keep content at `opacity: 1` during entry and
|
|
1542
|
+
exit. Background translucency belongs to the selected surface contract,
|
|
1543
|
+
not the animation. Motion uses translation and scale; the backdrop has an independent
|
|
1544
|
+
opacity transition. Reduced-motion preference, focus ownership, and keyboard
|
|
1545
|
+
dismissal belong to the kit's shared owners.
|
|
1546
|
+
|
|
1356
1547
|
### Управляемое dropdown menu / Controlled dropdown menu
|
|
1357
1548
|
|
|
1358
1549
|
`SDropdownMenu` поддерживает controlled `v-model:open`, начальное
|
|
@@ -1415,6 +1606,63 @@ Escape closes the current level and returns focus to its trigger.
|
|
|
1415
1606
|
`SButton` disclosure hitbox at `32px`; `comfortable` retains the default
|
|
1416
1607
|
geometry. Consumers do not set height, padding, or internal selectors.
|
|
1417
1608
|
|
|
1609
|
+
### Семантика сворачиваемой панели / Collapsible panel semantics
|
|
1610
|
+
|
|
1611
|
+
`SCollapsiblePanel.contentRole` принимает `region | group`; по умолчанию
|
|
1612
|
+
`region`. Самостоятельные, значимые для навигации разделы используют
|
|
1613
|
+
`region`; повторяемые и вложенные сведения — `group`, не создающий
|
|
1614
|
+
landmark. Обе роли сохраняют доступное имя из видимого `summary` через
|
|
1615
|
+
`aria-labelledby` и связь с disclosure trigger через `aria-controls`.
|
|
1616
|
+
Повторяемые группы могут иметь одинаковые пользовательские заголовки.
|
|
1617
|
+
Роль задаётся prop, не raw `role` attr; неизвестное значение вызывает
|
|
1618
|
+
ошибку контракта. `lazy` монтирует slot при первом принятом раскрытии
|
|
1619
|
+
и удерживает содержимое после сворачивания, включая анимированный
|
|
1620
|
+
неуправляемый режим.
|
|
1621
|
+
|
|
1622
|
+
Controlled `open` эмитит `update:open` как намерение до подтверждения prop;
|
|
1623
|
+
uncontrolled режим изменяет собственное состояние без этого события.
|
|
1624
|
+
|
|
1625
|
+
Принятое сворачивание сразу исключает content из клавиатурного обхода и
|
|
1626
|
+
дерева доступности через `inert` и `aria-hidden`; завершающая визуальная
|
|
1627
|
+
анимация сохраняет mounted slot. Фокус внутри закрываемого content
|
|
1628
|
+
возвращается доступному trigger через его публичный focus API. Внешний
|
|
1629
|
+
фокус и неподтверждённое controlled намерение не перехватываются.
|
|
1630
|
+
Motion завершается по фактическому переходу высоты или сразу при его
|
|
1631
|
+
отсутствии; reduced motion, повторное раскрытие и изменение содержимого
|
|
1632
|
+
не требуют ожиданий или DOM-вызовов consumer.
|
|
1633
|
+
|
|
1634
|
+
`SCollapsiblePanel.contentRole` accepts `region | group` and defaults to
|
|
1635
|
+
`region`. Independently significant, navigable sections use `region`;
|
|
1636
|
+
repeated and nested details use the non-landmark `group`. Both roles
|
|
1637
|
+
retain an accessible name from the visible `summary` through
|
|
1638
|
+
`aria-labelledby` and the trigger relationship through `aria-controls`.
|
|
1639
|
+
Repeated groups may share the same user-facing heading. The role is
|
|
1640
|
+
specified by a prop, not a raw `role` attr; an unknown value fails the
|
|
1641
|
+
contract. `lazy` mounts the slot on its first accepted opening and retains
|
|
1642
|
+
the content after collapse, including animated uncontrolled mode.
|
|
1643
|
+
|
|
1644
|
+
Controlled `open` emits an `update:open` intent before prop acknowledgement;
|
|
1645
|
+
uncontrolled mode updates its owned state without that event.
|
|
1646
|
+
|
|
1647
|
+
An accepted collapse immediately excludes content from keyboard navigation
|
|
1648
|
+
and the accessibility tree using `inert` and `aria-hidden`; the closing
|
|
1649
|
+
visual transition retains the mounted slot. Focus inside the collapsing
|
|
1650
|
+
content returns to an available trigger through its public focus API.
|
|
1651
|
+
External focus and unacknowledged controlled intent are not intercepted.
|
|
1652
|
+
Motion settles on the actual height transition or immediately when none
|
|
1653
|
+
exists; reduced motion, reopening, and content changes require no consumer
|
|
1654
|
+
waits or DOM calls.
|
|
1655
|
+
|
|
1656
|
+
```vue
|
|
1657
|
+
<SCollapsiblePanel summary="Технические сведения" content-role="group" lazy>
|
|
1658
|
+
<SInputText v-model="connectionName" label="Имя подключения" />
|
|
1659
|
+
</SCollapsiblePanel>
|
|
1660
|
+
```
|
|
1661
|
+
|
|
1662
|
+
[APG Accordion](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/) рассматривает
|
|
1663
|
+
landmark role как необязательный; [ARIA group](https://www.w3.org/TR/wai-aria-1.2/#group)
|
|
1664
|
+
предназначен для локальной группировки без включения в оглавление страницы.
|
|
1665
|
+
|
|
1418
1666
|
### Dialog open lifecycle
|
|
1419
1667
|
|
|
1420
1668
|
`SModal` и `SDrawer` эмитят `opened` один раз для каждого подтверждённого цикла
|
|
@@ -1431,6 +1679,42 @@ focus. The handler can call a nested leaf's public exposed API, such as
|
|
|
1431
1679
|
cancels the event; Escape, focus trapping, and focus restoration remain owned
|
|
1432
1680
|
by the dialog surface.
|
|
1433
1681
|
|
|
1682
|
+
Закрытие через `open=false` и удаление открытой feature-формы через `v-if`
|
|
1683
|
+
поддерживают один focus-контракт, включая удаление формы в том же обработчике,
|
|
1684
|
+
который закрывает вложенное или соседнее подтверждение. После удаления
|
|
1685
|
+
владеющего фокусом dialog focus возвращается подключённому, видимому инициатору,
|
|
1686
|
+
допустимому в текущей modal boundary. Consumer не ожидает отдельное событие
|
|
1687
|
+
закрытия и не вызывает DOM `focus()`/`nextTick()` для восстановления. Новый
|
|
1688
|
+
overlay или явное перемещение фокуса отменяют отложенный возврат. Скрытие
|
|
1689
|
+
retained dock и аварийное освобождение overlay не возвращают focus скрытому
|
|
1690
|
+
или inert инициатору.
|
|
1691
|
+
|
|
1692
|
+
Retained dialog сохраняет право возврата после удаления или отключения
|
|
1693
|
+
focused action во время асинхронной операции. Утрата native focus
|
|
1694
|
+
определяется по завершённому DOM-обновлению: focus остаётся на BODY, а
|
|
1695
|
+
наблюдённый descendant удалён или потерял native focus capability.
|
|
1696
|
+
Отдельный blur живого enabled элемента, завершённый до его удаления,
|
|
1697
|
+
отменяет это право. Перемещение фокуса на другой owner отменяет его сразу,
|
|
1698
|
+
включая последующий blur этого owner. Consumer не подавляет blur/removal
|
|
1699
|
+
events и не управляет порядком native focus fixup.
|
|
1700
|
+
|
|
1701
|
+
Closing with `open=false` and removing an open feature form with `v-if` share
|
|
1702
|
+
one focus contract, including removal in the same handler that closes a nested
|
|
1703
|
+
or sibling confirmation. After removing the focus-owning dialog, focus returns
|
|
1704
|
+
to its connected, visible invoker if allowed by the current modal boundary.
|
|
1705
|
+
Consumers need no separate close acknowledgement or DOM `focus()`/`nextTick()`
|
|
1706
|
+
for restoration. A new overlay or explicit focus move cancels pending
|
|
1707
|
+
restoration. Retained dock hiding and error cleanup do not restore focus to a
|
|
1708
|
+
hidden or inert invoker.
|
|
1709
|
+
|
|
1710
|
+
A retained dialog preserves focus return after a focused action is removed
|
|
1711
|
+
or disabled during asynchronous work. Native focus loss is evaluated after
|
|
1712
|
+
the DOM update: focus remains on BODY and the observed descendant is removed
|
|
1713
|
+
or loses its native focus capability. A separate blur of a live enabled
|
|
1714
|
+
element, completed before removal, cancels this ownership. Moving focus to
|
|
1715
|
+
another owner cancels it immediately, including a later blur of that owner.
|
|
1716
|
+
Consumers do not suppress blur/removal events or manage native focus-fixup order.
|
|
1717
|
+
|
|
1434
1718
|
```vue
|
|
1435
1719
|
<SModal v-model:open="open" title="Исходный текст" @opened="textarea?.selectAll()">
|
|
1436
1720
|
<STextarea ref="textarea" :model-value="source" label="Текст" readonly />
|
|
@@ -1593,6 +1877,18 @@ typography plugin bundled in the package. Consumers do not need to install
|
|
|
1593
1877
|
`@tailwindcss/typography` or override its transitive dependencies. The included
|
|
1594
1878
|
module licenses are provided in `dist/typography.LICENSE.txt`.
|
|
1595
1879
|
|
|
1880
|
+
`dist/typography.js` — build-time Node ESM plugin. Он использует native
|
|
1881
|
+
`node:util`, сохраняет upstream options API `className`/`target` для
|
|
1882
|
+
`modern` и `legacy`, полный prose handler и theme. Импорты
|
|
1883
|
+
`tailwind.css`/`reference.css` не требуют browser Web Storage, DOM globals
|
|
1884
|
+
или дополнительных Node flags в consumer build.
|
|
1885
|
+
|
|
1886
|
+
`dist/typography.js` is a build-time Node ESM plugin. It uses native
|
|
1887
|
+
`node:util` and retains the upstream `className`/`target` options for
|
|
1888
|
+
`modern` and `legacy`, the complete prose handler, and theme. Building
|
|
1889
|
+
`tailwind.css`/`reference.css` needs neither browser Web Storage nor
|
|
1890
|
+
DOM globals or additional Node flags.
|
|
1891
|
+
|
|
1596
1892
|
Для token-only интеграции доступен отдельный entrypoint:
|
|
1597
1893
|
|
|
1598
1894
|
A separate entrypoint is available for token-only integration:
|
|
@@ -1633,8 +1929,12 @@ Components consume semantic custom properties. Consumers override documented
|
|
|
1633
1929
|
tokens on the root theme container and do not depend on internal CSS classes or
|
|
1634
1930
|
template structure.
|
|
1635
1931
|
|
|
1636
|
-
|
|
1637
|
-
|
|
1932
|
+
Unscoped floating surfaces teleport to `document.body`. Floating descendants of
|
|
1933
|
+
a viewport dialog use its untransformed portal. Native modal top-layer order
|
|
1934
|
+
belongs to the browser, not to a larger `z-index`. Global notifications remain
|
|
1935
|
+
background content during viewport modality; a modal-local notification viewport
|
|
1936
|
+
uses its own dialog's portal. Toast and drag root bands do not override native
|
|
1937
|
+
top-layer isolation. The values `--s-layer-floating`,
|
|
1638
1938
|
`--s-layer-toast`, `--s-layer-drag`, and `--s-layer-overlay-backdrop` are base
|
|
1639
1939
|
anchors. Registered nested layers advance by `--s-layer-overlay-step`, while a
|
|
1640
1940
|
modal surface uses `--s-layer-overlay-surface-offset` above its backdrop.
|
|
@@ -1650,6 +1950,7 @@ Integrate a host overlay scale through one root offset:
|
|
|
1650
1950
|
|
|
1651
1951
|
`--host-overlay-surface` belongs to the host application. The offset shifts all
|
|
1652
1952
|
root UI-kit bands together and leaves local content/navigation anchors intact.
|
|
1953
|
+
It integrates ordinary host stacking contexts, not another native top layer.
|
|
1653
1954
|
Do not combine it with manual shifts of individual layer tokens. The complete
|
|
1654
1955
|
owner map, dynamic-stack contract, and verification checklist are published in
|
|
1655
1956
|
`docs/theming.md` inside the npm package.
|
|
@@ -1793,16 +2094,33 @@ local DOM listeners or CSS.
|
|
|
1793
2094
|
|
|
1794
2095
|
## Версии / Versioning
|
|
1795
2096
|
|
|
1796
|
-
Пакет следует Semantic Versioning
|
|
2097
|
+
Пакет следует [Semantic Versioning](https://semver.org/). В серии `0.x`
|
|
2098
|
+
контракт развивается по явной политике:
|
|
2099
|
+
|
|
2100
|
+
The package follows [Semantic Versioning](https://semver.org/). The `0.x` series
|
|
2101
|
+
uses an explicit development policy:
|
|
2102
|
+
|
|
2103
|
+
- `0.y.patch` сохраняет документированный public API;
|
|
2104
|
+
`0.y.patch` preserves the documented public API;
|
|
2105
|
+
- `0.minor.0` может расширять API или требовать явно описанной миграции.
|
|
2106
|
+
Затронутая поверхность и действия consumer фиксируются в release notes и guide;
|
|
2107
|
+
`0.minor.0` may extend the API or require an explicitly documented migration.
|
|
2108
|
+
Release notes and a guide identify the affected surface and consumer actions.
|
|
2109
|
+
|
|
2110
|
+
Обновление между minor-сериями `0.x` требует чтения migration notes и проверки
|
|
2111
|
+
своей композиции; один только minor номер не обещает отсутствие миграции.
|
|
2112
|
+
|
|
2113
|
+
Upgrading between `0.x` minor series requires reviewing migration notes and
|
|
2114
|
+
verifying the consumer composition; a minor number alone does not guarantee a
|
|
2115
|
+
migration-free upgrade.
|
|
1797
2116
|
|
|
1798
|
-
|
|
2117
|
+
Начиная с `1.0.0` действует стабильный public API: `patch` — совместимое
|
|
2118
|
+
исправление, `minor` — совместимое расширение, `major` — несовместимое изменение
|
|
2119
|
+
exports, props, events, tokens или поведения.
|
|
1799
2120
|
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
a backward-compatible public API extension;
|
|
1804
|
-
- `major` — несовместимое изменение exports, props, events, tokens или поведения;
|
|
1805
|
-
an incompatible change to exports, props, events, tokens, or behavior.
|
|
2121
|
+
From `1.0.0`, the public API is stable: `patch` is a compatible fix, `minor` is
|
|
2122
|
+
a compatible extension, and `major` is an incompatible change to exports,
|
|
2123
|
+
props, events, tokens, or behavior.
|
|
1806
2124
|
|
|
1807
2125
|
Один и тот же номер версии не публикуется повторно.
|
|
1808
2126
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.s-resize-handle[data-orientation=vertical][data-hitbox=compact][data-v-
|
|
1
|
+
.s-resize-handle[data-orientation=vertical][data-hitbox=compact][data-v-dc65aba1]{width:var(--s-resize-handle-hitbox-compact)}.s-resize-handle[data-orientation=vertical][data-hitbox=standard][data-v-dc65aba1]{width:var(--s-resize-handle-hitbox-standard)}.s-resize-handle[data-orientation=vertical][data-hitbox=spacious][data-v-dc65aba1]{width:var(--s-resize-handle-hitbox-spacious)}.s-resize-handle[data-orientation=horizontal][data-hitbox=compact][data-v-dc65aba1]{height:var(--s-resize-handle-hitbox-compact)}.s-resize-handle[data-orientation=horizontal][data-hitbox=standard][data-v-dc65aba1]{height:var(--s-resize-handle-hitbox-standard)}.s-resize-handle[data-orientation=horizontal][data-hitbox=spacious][data-v-dc65aba1]{height:var(--s-resize-handle-hitbox-spacious)}.s-resize-handle[data-v-dc65aba1]:focus-visible{outline:var(--s-focus-ring-width) solid var(--s-focus-ring-color);outline-offset:var(--s-focus-ring-offset)}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-a108e8f1],[data-v-a108e8f1]:before,[data-v-a108e8f1]:after,[data-v-a108e8f1]::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial}}}.s-dialog-surface[data-v-a108e8f1]{width:100%;max-width:none;height:100%;max-height:none;color:inherit;box-shadow:none;background:0 0;border:0;margin:0;padding:0;position:absolute;inset:0;overflow:visible}dialog.s-dialog-surface[data-v-a108e8f1]{display:block;position:fixed}dialog.s-dialog-surface[data-v-a108e8f1]::backdrop{pointer-events:none;background:0 0}.s-dialog-surface__portal[data-v-a108e8f1]{display:contents}.s-dialog-surface__frame[data-v-a108e8f1]{box-shadow:var(--s-elevation-overlay)}.s-dialog-surface[data-v-a108e8f1]:focus-visible{outline:none}.s-dialog-surface:focus-visible .s-dialog-surface__frame[data-v-a108e8f1]{outline:var(--s-focus-ring-width) solid var(--s-focus-ring-color);outline-offset:var(--s-focus-ring-inset-offset)}.s-modal-backdrop[data-v-a108e8f1],.s-drawer-backdrop[data-v-a108e8f1]{background:var(--s-overlay-backdrop-surface);-webkit-backdrop-filter:blur(var(--s-overlay-backdrop-blur));backdrop-filter:blur(var(--s-overlay-backdrop-blur));position:absolute;inset:0}.s-modal-container[data-v-a108e8f1],.s-drawer-shell[data-v-a108e8f1]{position:absolute;inset:0}.s-modal-container[data-v-a108e8f1]{overflow-y:auto}.s-drawer-backdrop[data-scope=contained][data-v-a108e8f1],.s-drawer-shell[data-scope=contained][data-v-a108e8f1]{pointer-events:auto}.s-modal-panel-container[data-v-a108e8f1]{min-height:100%;padding:calc(var(--spacing,.25rem) * 4);text-align:center;justify-content:center;align-items:center;display:flex}.s-modal-panel-container--fullscreen[data-v-a108e8f1]{text-align:left;justify-content:stretch;align-items:stretch;padding:0}.s-drawer-positioner[data-v-a108e8f1]{justify-content:right;align-items:stretch;display:flex;position:absolute;inset:0}.s-drawer-positioner[data-placement=left][data-v-a108e8f1]{justify-content:left}.s-drawer-positioner[data-placement=bottom][data-v-a108e8f1]{justify-content:stretch;align-items:flex-end}.s-dialog-surface__frame[data-presentation=modal][data-v-a108e8f1]{width:100%;transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);border-radius:var(--radius-2xl,1rem);padding:calc(var(--spacing,.25rem) * 6);text-align:left;vertical-align:middle;background-color:var(--color-surface-0,#fff);overflow:hidden}.s-dialog-surface__frame[data-presentation=modal][data-v-a108e8f1]:where(.dark,.dark *){background-color:var(--color-surface-800,#1e293b)}.s-dialog-surface__frame[data-presentation=modal][data-surface=subtle][data-v-a108e8f1]{background-color:var(--color-surface-50,#f8fafc)}.s-dialog-surface__frame[data-presentation=modal][data-surface=subtle][data-v-a108e8f1]:where(.dark,.dark *){background-color:var(--color-surface-900,#0f172a)}.s-dialog-surface__frame[data-presentation=modal][data-scroll=body][data-v-a108e8f1]{flex-direction:column;max-height:calc(100dvh - 2rem);display:flex}.s-dialog-surface__frame[data-presentation=modal][data-scroll=body] .s-dialog-surface__body[data-v-a108e8f1]{flex:1;min-height:0;overflow-y:auto}.s-dialog-surface__frame[data-presentation=modal][data-layout=fullscreen][data-v-a108e8f1]{border-radius:0;max-width:100%;height:100%;min-height:100vh}.s-dialog-surface__frame[data-presentation=modal][data-size=sm][data-v-a108e8f1]{max-width:24rem}.s-dialog-surface__frame[data-presentation=modal][data-size=md][data-v-a108e8f1]{max-width:28rem}.s-dialog-surface__frame[data-presentation=modal][data-size=lg][data-v-a108e8f1]{max-width:32rem}.s-dialog-surface__frame[data-presentation=modal][data-size=xl][data-v-a108e8f1]{max-width:36rem}.s-dialog-surface__frame[data-presentation=modal][data-size="2xl"][data-v-a108e8f1]{max-width:42rem}.s-dialog-surface__frame[data-presentation=modal][data-size="3xl"][data-v-a108e8f1]{max-width:48rem}.s-dialog-surface__frame[data-presentation=modal][data-size="4xl"][data-v-a108e8f1]{max-width:56rem}.s-dialog-surface__frame[data-presentation=modal][data-size=wide][data-v-a108e8f1]{max-width:72rem}.s-dialog-surface__frame[data-presentation=modal] .s-dialog-surface__header[data-v-a108e8f1]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-surface-200,#e2e8f0);padding-bottom:calc(var(--spacing,.25rem) * 4);justify-content:space-between;align-items:flex-start;display:flex}.s-dialog-surface__frame[data-presentation=modal] .s-dialog-surface__header[data-v-a108e8f1]:where(.dark,.dark *){border-color:var(--color-surface-700,#334155)}.s-dialog-surface__frame[data-presentation=modal] .s-dialog-surface__title[data-v-a108e8f1]{font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)));--tw-leading:calc(var(--spacing,.25rem) * 6);line-height:calc(var(--spacing,.25rem) * 6);--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--color-surface-900,#0f172a)}.s-dialog-surface__frame[data-presentation=modal] .s-dialog-surface__title[data-v-a108e8f1]:where(.dark,.dark *){color:var(--color-surface-100,#f1f5f9)}.s-dialog-surface__frame[data-presentation=modal] .s-dialog-surface__body[data-v-a108e8f1]{margin-top:calc(var(--spacing,.25rem) * 4);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-surface-600,#475569)}.s-dialog-surface__frame[data-presentation=modal] .s-dialog-surface__body[data-v-a108e8f1]:where(.dark,.dark *){color:var(--color-surface-300,#cbd5e1)}.s-dialog-surface__frame[data-presentation=modal] .s-dialog-surface__footer[data-v-a108e8f1]{margin-top:calc(var(--spacing,.25rem) * 6);justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-surface-200,#e2e8f0);padding-top:calc(var(--spacing,.25rem) * 4);display:flex}.s-dialog-surface__frame[data-presentation=modal] .s-dialog-surface__footer[data-v-a108e8f1]:where(.dark,.dark *){border-color:var(--color-surface-700,#334155)}.s-dialog-surface__frame[data-presentation=modal] .s-dialog-surface__footer[data-layout=split][data-v-a108e8f1]{justify-content:flex-start;align-items:center;column-gap:calc(var(--spacing,.25rem) * 3);row-gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap}.s-dialog-surface__footer-start[data-v-a108e8f1],.s-dialog-surface__footer-end[data-v-a108e8f1]{align-items:center;gap:calc(var(--spacing,.25rem) * 2);flex-wrap:wrap;min-width:0;display:flex}.s-dialog-surface__footer-start[data-v-a108e8f1]{margin-right:auto}.s-dialog-surface__footer-end[data-v-a108e8f1]{justify-content:flex-end;margin-left:auto}.s-dialog-surface__frame[data-presentation=drawer][data-v-a108e8f1]{border-left-style:var(--tw-border-style);border-left-width:1px;border-color:var(--color-surface-200,#e2e8f0);background-color:var(--color-surface-0,#fff);width:100%;height:100%;color:var(--color-surface-900,#0f172a);flex-direction:column;display:flex;position:relative;overflow:hidden}.s-dialog-surface__frame[data-presentation=drawer][data-v-a108e8f1]:where(.dark,.dark *){border-color:var(--color-surface-700,#334155);background-color:var(--color-surface-900,#0f172a);color:var(--color-surface-0,#fff)}.s-dialog-surface__frame[data-presentation=drawer][data-placement=left][data-v-a108e8f1]{border-right-style:var(--tw-border-style);border-right-width:1px;border-left-style:var(--tw-border-style);border-left-width:0}.s-dialog-surface__frame[data-presentation=drawer][data-size=sm][data-v-a108e8f1]{max-width:30rem}.s-dialog-surface__frame[data-presentation=drawer][data-size=md][data-v-a108e8f1]{max-width:36rem}.s-dialog-surface__frame[data-presentation=drawer][data-size=lg][data-v-a108e8f1]{max-width:44rem}.s-dialog-surface__frame[data-presentation=drawer][data-placement=bottom][data-v-a108e8f1]{border-top-left-radius:var(--radius-2xl,1rem);border-top-right-radius:var(--radius-2xl,1rem);border-top-style:var(--tw-border-style);border-top-width:1px;border-left-style:var(--tw-border-style);border-left-width:0;border-color:var(--color-surface-200,#e2e8f0);max-width:none}.s-dialog-surface__frame[data-presentation=drawer][data-placement=bottom][data-v-a108e8f1]:where(.dark,.dark *){border-color:var(--color-surface-700,#334155)}.s-dialog-surface__frame[data-presentation=drawer][data-placement=bottom][data-v-a108e8f1]{width:100%}.s-dialog-surface__frame[data-presentation=drawer][data-scope=viewport][data-placement=bottom][data-v-a108e8f1]{max-height:calc(100dvh - 1rem)}.s-dialog-surface__frame[data-presentation=drawer][data-scope=viewport][data-placement=bottom][data-size=sm][data-v-a108e8f1]{height:50dvh}.s-dialog-surface__frame[data-presentation=drawer][data-scope=viewport][data-placement=bottom][data-size=md][data-v-a108e8f1]{height:70dvh}.s-dialog-surface__frame[data-presentation=drawer][data-scope=viewport][data-placement=bottom][data-size=lg][data-v-a108e8f1]{height:90dvh}.s-dialog-surface__frame[data-presentation=drawer][data-scope=contained][data-v-a108e8f1]{min-block-size:0;max-block-size:100%;min-inline-size:0;max-inline-size:none}.s-dialog-surface__frame[data-presentation=drawer][data-scope=contained][data-placement=bottom][data-v-a108e8f1]{block-size:var(--s-drawer-extent)}.s-dialog-surface__frame[data-presentation=drawer][data-scope=contained][data-placement=left][data-v-a108e8f1],.s-dialog-surface__frame[data-presentation=drawer][data-scope=contained][data-placement=right][data-v-a108e8f1]{inline-size:var(--s-drawer-extent)}.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__header[data-v-a108e8f1]{align-items:flex-start;gap:calc(var(--spacing,.25rem) * 3);border-bottom-style:var(--tw-border-style);border-bottom-width:1px;border-color:var(--color-surface-200,#e2e8f0);padding-inline:calc(var(--spacing,.25rem) * 5);padding-block:calc(var(--spacing,.25rem) * 4);flex-shrink:0;display:flex}@media (width>=48rem){.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__header[data-v-a108e8f1]{padding-inline:calc(var(--spacing,.25rem) * 6)}}.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__header[data-v-a108e8f1]:where(.dark,.dark *){border-color:var(--color-surface-700,#334155)}.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__title[data-v-a108e8f1]{min-width:0;font-size:var(--text-lg,1.125rem);line-height:var(--tw-leading,var(--text-lg--line-height,calc(1.75 / 1.125)));--tw-leading:calc(var(--spacing,.25rem) * 6);line-height:calc(var(--spacing,.25rem) * 6);--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--color-surface-950,#020617);flex:1}.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__title[data-v-a108e8f1]:where(.dark,.dark *){color:var(--color-surface-0,#fff)}.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__body[data-v-a108e8f1]{min-width:0;min-height:0;padding:calc(var(--spacing,.25rem) * 5);flex:1;overflow-y:auto}@media (width>=48rem){.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__body[data-v-a108e8f1]{padding:calc(var(--spacing,.25rem) * 6)}}.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__body[data-v-a108e8f1]{overscroll-behavior:contain}.s-dialog-surface__frame[data-presentation=drawer][data-scroll=content] .s-dialog-surface__body[data-v-a108e8f1]{flex-direction:column;padding:0;display:flex;overflow:hidden}.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__footer[data-v-a108e8f1]{justify-content:flex-end;gap:calc(var(--spacing,.25rem) * 3);border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-surface-200,#e2e8f0);padding-inline:calc(var(--spacing,.25rem) * 5);padding-block:calc(var(--spacing,.25rem) * 4);flex-wrap:wrap;flex-shrink:0;display:flex}@media (width>=48rem){.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__footer[data-v-a108e8f1]{padding-inline:calc(var(--spacing,.25rem) * 6)}}.s-dialog-surface__frame[data-presentation=drawer] .s-dialog-surface__footer[data-v-a108e8f1]:where(.dark,.dark *){border-color:var(--color-surface-700,#334155)}@media (width<=767px){.s-dialog-surface__frame[data-presentation=drawer][data-layout=mobile-fullscreen][data-v-a108e8f1]{border-right-style:var(--tw-border-style);border-right-width:0;border-left-style:var(--tw-border-style);border-left-width:0;max-width:100%}}.s-dialog-surface[hidden][data-v-a108e8f1]{display:none}.s-dialog-surface-motion-enter-active .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-leave-active .s-dialog-surface__frame[data-v-a108e8f1]{transition:transform var(--s-motion-standard) ease}.s-dialog-surface-motion-enter-from[data-presentation=modal] .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-leave-to[data-presentation=modal] .s-dialog-surface__frame[data-v-a108e8f1]{transform:scale(.96)}.s-dialog-surface-motion-enter-from[data-presentation=drawer] .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-leave-to[data-presentation=drawer] .s-dialog-surface__frame[data-v-a108e8f1]{transform:translate(1.5rem)}.s-dialog-surface-motion-enter-from[data-placement=left] .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-leave-to[data-placement=left] .s-dialog-surface__frame[data-v-a108e8f1]{transform:translate(-1.5rem)}.s-dialog-surface-motion-enter-from[data-placement=bottom] .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-leave-to[data-placement=bottom] .s-dialog-surface__frame[data-v-a108e8f1]{transform:translateY(1.5rem)}@media (width<=767px){.s-dialog-surface-motion-enter-from[data-placement=right] .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-leave-to[data-placement=right] .s-dialog-surface__frame[data-v-a108e8f1]{transform:translateY(1.5rem)}}.s-dialog-surface-motion-enter-active .s-modal-backdrop[data-v-a108e8f1],.s-dialog-surface-motion-leave-active .s-modal-backdrop[data-v-a108e8f1],.s-dialog-surface-motion-enter-active .s-drawer-backdrop[data-v-a108e8f1],.s-dialog-surface-motion-leave-active .s-drawer-backdrop[data-v-a108e8f1]{transition:opacity var(--s-motion-standard) ease}.s-dialog-surface-motion-enter-from .s-modal-backdrop[data-v-a108e8f1],.s-dialog-surface-motion-leave-to .s-modal-backdrop[data-v-a108e8f1],.s-dialog-surface-motion-enter-from .s-drawer-backdrop[data-v-a108e8f1],.s-dialog-surface-motion-leave-to .s-drawer-backdrop[data-v-a108e8f1]{opacity:0}@media (prefers-reduced-motion:reduce){.s-dialog-surface-motion-enter-active .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-leave-active .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-enter-active .s-modal-backdrop[data-v-a108e8f1],.s-dialog-surface-motion-leave-active .s-modal-backdrop[data-v-a108e8f1],.s-dialog-surface-motion-enter-active .s-drawer-backdrop[data-v-a108e8f1],.s-dialog-surface-motion-leave-active .s-drawer-backdrop[data-v-a108e8f1]{transition:none}.s-dialog-surface-motion-enter-from[data-presentation=modal] .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-leave-to[data-presentation=modal] .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-enter-from[data-presentation=drawer] .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-leave-to[data-presentation=drawer] .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-enter-from[data-placement] .s-dialog-surface__frame[data-v-a108e8f1],.s-dialog-surface-motion-leave-to[data-placement] .s-dialog-surface__frame[data-v-a108e8f1]{transform:none}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-db85261d],[data-v-db85261d]:before,[data-v-db85261d]:after,[data-v-db85261d]::backdrop{--tw-border-style:solid}}}.s-collapsible-panel[data-v-db85261d]{z-index:0;border-radius:var(--radius-lg,1rem);border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-surface-200,#e2e8f0);background-color:var(--color-surface-0,#fff);flex-direction:column;flex:none;width:100%;min-width:0;min-height:0;display:flex;position:relative;overflow:hidden}.s-collapsible-panel[data-v-db85261d]:where(.dark,.dark *){border-color:var(--color-surface-700,#334155);background-color:var(--color-surface-800,#1e293b)}.s-collapsible-panel[data-surface=plain][data-v-db85261d]{border-style:var(--tw-border-style);background-color:#0000;border-width:0;border-radius:0}.s-collapsible-panel[data-surface=plain][data-v-db85261d]:where(.dark,.dark *){background-color:#0000}.s-collapsible-panel-header[data-v-db85261d]{align-items:center;gap:var(--spacing,.25rem);flex-shrink:0;min-width:0;display:flex}.s-collapsible-panel-trigger[data-v-db85261d]{flex:1;min-width:0}.s-collapsible-panel-actions[data-v-db85261d]{align-items:center;gap:var(--spacing,.25rem);padding-right:var(--spacing,.25rem);flex-shrink:0;display:flex}.s-collapsible-panel-content[data-v-db85261d]{background:inherit;width:100%;min-width:0;transition:max-height var(--s-motion-standard) ease;will-change:max-height;max-height:0;overflow:hidden}.s-collapsible-panel-content.is-opened[data-v-db85261d]{max-height:none;transition:none;overflow-y:visible}.s-collapsible-panel-inner[data-v-db85261d]{padding:calc(var(--spacing,.25rem) * 4);font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-surface-600,#475569)}.s-collapsible-panel-inner[data-v-db85261d]:where(.dark,.dark *){color:var(--color-surface-300,#cbd5e1)}.s-collapsible-panel-content.is-animating[data-v-db85261d]{border-color:#0000}.s-collapsible-panel[data-density=compact] .s-collapsible-panel-inner[data-v-db85261d]{padding:calc(var(--spacing,.25rem) * 3)}.s-collapsible-panel[data-density=dense] .s-collapsible-panel-inner[data-v-db85261d]{padding:calc(var(--spacing,.25rem) * 2);font-size:var(--text-xs,.75rem);line-height:var(--tw-leading,var(--text-xs--line-height,calc(1 / .75)))}.s-collapsible-panel[data-content-padding=none]>.s-collapsible-panel-content>.s-collapsible-panel-inner[data-v-db85261d]{padding:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
.s-overlay-host[data-v-
|
|
2
|
+
.s-overlay-host[data-v-09215628]{isolation:isolate;flex-direction:column;flex:1;min-width:0;height:100%;min-height:0;display:flex;position:relative;overflow:hidden}.s-overlay-host__content[data-v-09215628]{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.s-overlay-host__portal[data-v-09215628]{pointer-events:none;position:absolute;inset:0}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-a4f1f64a],[data-v-a4f1f64a]:before,[data-v-a4f1f64a]:after,[data-v-a4f1f64a]::backdrop{--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}.s-popover-wrapper[data-v-a4f1f64a]{position:relative}.s-popover-panel[data-v-a4f1f64a]{display:inline-block}.s-popover-content[data-v-a4f1f64a]{border-radius:var(--radius-lg,1rem);text-align:left;background:var(--s-floating-surface);color:var(--s-floating-foreground);box-shadow:0 0 0 1px var(--s-floating-outline), var(--s-elevation-floating);display:block}.s-popover-panel[data-width=sm][data-v-a4f1f64a]{width:min(20rem,100vw - 1rem)}.s-popover-panel[data-width=md][data-v-a4f1f64a]{width:min(28rem,100vw - 1rem)}.s-popover-panel[data-width=lg][data-v-a4f1f64a]{width:min(36rem,100vw - 1rem)}.s-popover-panel[data-surface=transparent][data-v-a4f1f64a]{max-width:90vw}.s-popover-panel[data-surface=transparent] .s-popover-content[data-v-a4f1f64a]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);background-color:#0000}.s-popover-panel[data-surface=transparent] .s-popover-content[data-v-a4f1f64a]:where(.dark,.dark *){background-color:#0000}.s-popover-panel[data-surface=transparent] .s-popover-content[data-v-a4f1f64a]{box-shadow:none}.s-popover-panel[hidden][data-v-a4f1f64a]{display:none}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){[data-v-52396e42],[data-v-52396e42]:before,[data-v-52396e42]:after,[data-v-52396e42]::backdrop{--tw-border-style:solid}}}.s-sidebar-section-wrapper[data-v-52396e42]{flex-direction:column;min-height:0;display:flex;overflow:hidden}.s-sidebar-section[data-v-52396e42]{flex-direction:column;flex:1;width:100%;min-height:0;display:flex;overflow:hidden}.s-sidebar-section-wrapper+.s-sidebar-section-wrapper .s-sidebar-section[data-v-52396e42]{border-top-style:var(--tw-border-style);border-top-width:1px;border-color:var(--color-surface-200,#e2e8f0)}.s-sidebar-section-wrapper+.s-sidebar-section-wrapper .s-sidebar-section[data-v-52396e42]:where(.dark,.dark *){border-color:var(--color-surface-700,#334155)}.s-sidebar-section-wrapper--resizable-before .s-sidebar-section[data-v-52396e42]{border-top-style:var(--tw-border-style);border-top-width:0}.s-sidebar-section-header[data-v-52396e42]{height:calc(var(--spacing,.25rem) * 7);align-items:center;gap:var(--spacing,.25rem);width:100%;padding-inline:var(--spacing,.25rem);background-color:#f8fafcb3;display:flex}@supports (color:color-mix(in lab, red, red)){.s-sidebar-section-header[data-v-52396e42]{background-color:color-mix(in oklab, var(--color-surface-50,#f8fafc) 70%, transparent)}}.s-sidebar-section-header[data-v-52396e42]:where(.dark,.dark *){background-color:#1e293b8c}@supports (color:color-mix(in lab, red, red)){.s-sidebar-section-header[data-v-52396e42]:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-surface-800,#1e293b) 55%, transparent)}}.s-sidebar-section-header[data-v-52396e42]{color:var(--color-surface-600,#475569)}.s-sidebar-section-header[data-v-52396e42]:where(.dark,.dark *){color:var(--color-surface-300,#cbd5e1)}.s-sidebar-section-header[data-v-52396e42]{transition:background-color var(--s-motion-standard) ease, color var(--s-motion-standard) ease;flex-shrink:0}:is(.s-sidebar-section-header[data-v-52396e42]:has([data-sidebar-section-toggle]:hover),.s-sidebar-section-header[data-v-52396e42]:has([data-sidebar-section-toggle]:focus-visible)){background-color:var(--color-surface-100,#f1f5f9);color:var(--color-surface-800,#1e293b)}:is(.s-sidebar-section-header[data-v-52396e42]:has([data-sidebar-section-toggle]:hover),.s-sidebar-section-header[data-v-52396e42]:has([data-sidebar-section-toggle]:focus-visible)):where(.dark,.dark *){background-color:#334155b3}@supports (color:color-mix(in lab, red, red)){:is(.s-sidebar-section-header[data-v-52396e42]:has([data-sidebar-section-toggle]:hover),.s-sidebar-section-header[data-v-52396e42]:has([data-sidebar-section-toggle]:focus-visible)):where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-surface-700,#334155) 70%, transparent)}}:is(.s-sidebar-section-header[data-v-52396e42]:has([data-sidebar-section-toggle]:hover),.s-sidebar-section-header[data-v-52396e42]:has([data-sidebar-section-toggle]:focus-visible)):where(.dark,.dark *){color:var(--color-surface-100,#f1f5f9)}.s-sidebar-section-header--mobile[data-v-52396e42]{height:calc(var(--spacing,.25rem) * 6);padding-inline:calc(var(--spacing,.25rem) * 1.5)}.s-sidebar-section-trigger[data-v-52396e42]{flex:1;min-width:0}.s-sidebar-section-actions[data-v-52396e42]{align-items:center;gap:var(--spacing,.25rem);flex-shrink:0;margin-left:auto;display:flex}.s-sidebar-section-content[data-v-52396e42]{font-size:var(--text-sm,.875rem);line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));color:var(--color-surface-700,#334155)}.s-sidebar-section-content[data-v-52396e42]:where(.dark,.dark *){color:var(--color-surface-300,#cbd5e1)}.s-sidebar-section-content[data-v-52396e42]{flex:1;min-height:0;overflow:hidden auto}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}
|