@pgcorp/ui-kit 0.12.0 → 0.14.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 +787 -19
- package/dist/assets/src/components/layout/SDockRegion.vue_vue_type_style_index_0_scoped_a1f403e2_lang.css +1 -0
- package/dist/assets/src/components/layout/{SResizeHandle.vue_vue_type_style_index_0_scoped_90cc655e_lang.css → SResizeHandle.vue_vue_type_style_index_0_scoped_13b9b27a_lang.css} +1 -1
- package/dist/assets/src/components/layout/{SWorkbenchPanelShell.css_vue_type_style_index_0_src_1030a231_scoped_1030a231_lang.css → SWorkbenchPanelShell.css_vue_type_style_index_0_src_f9faa52a_scoped_f9faa52a_lang.css} +1 -1
- package/dist/assets/src/components/shared/_internal/SDialogSurface.css_vue_type_style_index_0_src_0e58afdc_scoped_0e58afdc_lang.css +2 -0
- package/dist/assets/src/components/shared/_internal/{SListboxGroup.css_vue_type_style_index_0_src_518787d3_scoped_518787d3_lang.css → SListboxGroup.css_vue_type_style_index_0_src_00060944_scoped_00060944_lang.css} +1 -1
- package/dist/assets/src/components/shared/_internal/SMenuItem.css_vue_type_style_index_0_src_af485607_scoped_af485607_lang.css +2 -0
- package/dist/assets/src/components/shared/_internal/SMenuLayer.css_vue_type_style_index_0_src_e478164c_scoped_e478164c_lang.css +1 -0
- package/dist/assets/src/components/shared/containers/{SCollapsiblePanel.css_vue_type_style_index_0_src_4882f962_scoped_4882f962_lang.css → SCollapsiblePanel.css_vue_type_style_index_0_src_71824088_scoped_71824088_lang.css} +1 -1
- package/dist/assets/src/components/shared/containers/SDrawer.css_vue_type_style_index_0_src_61cf20dd_scoped_61cf20dd_lang.css +2 -0
- package/dist/assets/src/components/shared/containers/{SModal.css_vue_type_style_index_0_src_23373daf_scoped_23373daf_lang.css → SModal.css_vue_type_style_index_0_src_42e1bd5f_scoped_42e1bd5f_lang.css} +1 -1
- package/dist/assets/src/components/shared/containers/SOverlayHost.css_vue_type_style_index_0_src_8f9be94e_scoped_8f9be94e_lang.css +2 -0
- package/dist/assets/src/components/shared/containers/SPopover.css_vue_type_style_index_0_src_4091d007_scoped_4091d007_lang.css +2 -0
- package/dist/assets/src/components/shared/containers/{SSidebarGroup.css_vue_type_style_index_0_src_3e8bc2d7_scoped_3e8bc2d7_lang.css → SSidebarGroup.css_vue_type_style_index_0_src_5b1eeb6c_scoped_5b1eeb6c_lang.css} +1 -1
- package/dist/assets/src/components/shared/containers/SSidebarSection.css_vue_type_style_index_0_src_21f71ae8_scoped_21f71ae8_lang.css +2 -0
- package/dist/assets/src/components/shared/controls/SButton.css_vue_type_style_index_0_src_7a5acda9_scoped_7a5acda9_lang.css +2 -0
- package/dist/assets/src/components/shared/controls/{SCheckbox.css_vue_type_style_index_0_src_b20b27dd_scoped_b20b27dd_lang.css → SCheckbox.css_vue_type_style_index_0_src_55d4826e_scoped_55d4826e_lang.css} +1 -1
- package/dist/assets/src/components/shared/controls/SCombobox.css_vue_type_style_index_0_src_537f5744_scoped_537f5744_lang.css +2 -0
- package/dist/assets/src/components/shared/controls/SContextMenu.css_vue_type_style_index_0_src_03921269_scoped_03921269_lang.css +1 -0
- package/dist/assets/src/components/shared/controls/{SDropdownMenu.css_vue_type_style_index_0_src_b854a89e_scoped_b854a89e_lang.css → SDropdownMenu.css_vue_type_style_index_0_src_857e2649_scoped_857e2649_lang.css} +1 -1
- package/dist/assets/src/components/shared/controls/SField.css_vue_type_style_index_0_src_2d353c26_scoped_2d353c26_lang.css +2 -0
- package/dist/assets/src/components/shared/controls/{SInputText.css_vue_type_style_index_0_src_a9c5f1aa_scoped_a9c5f1aa_lang.css → SInputText.css_vue_type_style_index_0_src_023c25d0_scoped_023c25d0_lang.css} +1 -1
- package/dist/assets/src/components/shared/controls/{SInteractiveSurface.css_vue_type_style_index_0_src_998940dd_scoped_998940dd_lang.css → SInteractiveSurface.css_vue_type_style_index_0_src_5e422fac_scoped_5e422fac_lang.css} +1 -1
- package/dist/assets/src/components/shared/controls/{SLink.css_vue_type_style_index_0_src_c7ae14e1_scoped_c7ae14e1_lang.css → SLink.css_vue_type_style_index_0_src_ac46e5a4_scoped_ac46e5a4_lang.css} +1 -1
- package/dist/assets/src/components/shared/controls/SListbox.css_vue_type_style_index_0_src_50063f9f_scoped_50063f9f_lang.css +2 -0
- package/dist/assets/src/components/shared/controls/{SListboxOption.css_vue_type_style_index_0_src_77c399b4_scoped_77c399b4_lang.css → SListboxOption.css_vue_type_style_index_0_src_59c9c538_scoped_59c9c538_lang.css} +1 -1
- package/dist/assets/src/components/shared/controls/SMenuSurface.css_vue_type_style_index_0_src_84109ad9_scoped_84109ad9_lang.css +2 -0
- package/dist/assets/src/components/shared/controls/SSelect.css_vue_type_style_index_0_src_df3d6688_scoped_df3d6688_lang.css +2 -0
- package/dist/assets/src/components/shared/controls/STextarea.css_vue_type_style_index_0_src_true_lang.css +1 -1
- package/dist/assets/src/components/shared/data-display/SProgressBar.css_vue_type_style_index_0_src_cad721dd_scoped_cad721dd_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/SRichDocument.css_vue_type_style_index_0_src_8db085d5_scoped_8db085d5_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/SStatus.css_vue_type_style_index_0_src_3ce41a12_scoped_3ce41a12_lang.css +1 -1
- package/dist/assets/src/components/shared/data-display/STable.css_vue_type_style_index_0_src_b23b3d71_scoped_b23b3d71_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/SVirtualList.css_vue_type_style_index_0_src_9fe3ade0_scoped_9fe3ade0_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/_internal/SRichBlockNode.css_vue_type_style_index_0_src_eaae882d_scoped_eaae882d_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/_internal/SRichDisclosure.css_vue_type_style_index_0_src_1f0ffc97_scoped_1f0ffc97_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/_internal/SRichImage.css_vue_type_style_index_0_src_2f1c39a9_scoped_2f1c39a9_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/_internal/{SRichInlineNode.css_vue_type_style_index_0_src_20c8cc87_scoped_20c8cc87_lang.css → SRichInlineNode.css_vue_type_style_index_0_src_3ca8df12_scoped_3ca8df12_lang.css} +1 -1
- package/dist/assets/src/components/shared/data-display/_internal/STableCell.css_vue_type_style_index_0_src_b829cbc6_scoped_b829cbc6_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/_internal/STableFrame.css_vue_type_style_index_0_src_52b5825e_scoped_52b5825e_lang.css +2 -0
- package/dist/assets/src/components/shared/data-display/_internal/STableRow.css_vue_type_style_index_0_src_1661f8b8_scoped_1661f8b8_lang.css +2 -0
- package/dist/assets/src/components/shared/feedback/SAsyncState.css_vue_type_style_index_0_src_8a291af7_scoped_8a291af7_lang.css +2 -0
- package/dist/assets/src/components/shared/navigation/{SBottomNav.vue_vue_type_style_index_0_scoped_b3963080_lang.css → SBottomNav.vue_vue_type_style_index_0_scoped_24be0f2b_lang.css} +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -3
- package/dist/reference.css +4 -0
- package/dist/src/components/icons/_internal/generatedSputnigUiIconComponents.d.ts +15 -0
- package/dist/src/components/icons/_internal/generatedSputnigUiIconComponents.js +4 -4
- package/dist/src/components/icons/_internal/generatedSputnigUiIconMarkup.d.ts +46 -1
- package/dist/src/components/icons/_internal/generatedSputnigUiIconMarkup.js +260 -230
- package/dist/src/components/icons/sputnigUiIcons.d.ts +1 -1
- package/dist/src/components/icons/sputnigUiIcons.js +233 -218
- package/dist/src/components/layout/SAppShell.vue_vue_type_script_setup_true_lang.js +8 -8
- package/dist/src/components/layout/SDockRegion.vue.d.ts +18 -5
- package/dist/src/components/layout/SDockRegion.vue.js +2 -2
- package/dist/src/components/layout/SDockRegion.vue_vue_type_script_setup_true_lang.js +112 -64
- package/dist/src/components/layout/SResizeHandle.vue.d.ts +6 -3
- package/dist/src/components/layout/SResizeHandle.vue.js +2 -2
- package/dist/src/components/layout/SResizeHandle.vue_vue_type_script_setup_true_lang.js +125 -87
- package/dist/src/components/layout/SStack.vue.d.ts +1 -1
- package/dist/src/components/layout/SWorkbenchPanelShell.vue.d.ts +4 -4
- package/dist/src/components/layout/SWorkbenchPanelShell.vue.js +2 -2
- package/dist/src/components/layout/SWorkbenchPanelShell.vue_vue_type_script_setup_true_lang.js +62 -58
- package/dist/src/components/layout/types.d.ts +20 -0
- 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 +64 -41
- package/dist/src/components/shared/_internal/SHeaderSurface.vue.d.ts +1 -1
- package/dist/src/components/shared/_internal/SListboxGroup.vue.d.ts +5 -0
- package/dist/src/components/shared/_internal/SListboxGroup.vue.js +2 -2
- package/dist/src/components/shared/_internal/SListboxGroup.vue_vue_type_script_setup_true_lang.js +33 -15
- package/dist/src/components/shared/_internal/SMenuItem.vue.js +2 -2
- package/dist/src/components/shared/_internal/SMenuItem.vue_vue_type_script_setup_true_lang.js +88 -76
- package/dist/src/components/shared/_internal/SMenuLayer.vue.d.ts +5 -1
- package/dist/src/components/shared/_internal/SMenuLayer.vue.js +2 -2
- package/dist/src/components/shared/_internal/SMenuLayer.vue_vue_type_script_setup_true_lang.js +64 -20
- package/dist/src/components/shared/_internal/dialogSurface.d.ts +16 -3
- package/dist/src/components/shared/_internal/dialogSurface.js +40 -23
- package/dist/src/components/shared/_internal/listboxContext.d.ts +1 -0
- package/dist/src/components/shared/_internal/listboxInventory.d.ts +51 -0
- package/dist/src/components/shared/_internal/listboxInventory.js +85 -0
- package/dist/src/components/shared/_internal/menuContext.d.ts +8 -0
- package/dist/src/components/shared/_internal/menuContext.js +2 -2
- package/dist/src/components/shared/_internal/sidebarGroupContext.d.ts +1 -0
- package/dist/src/components/shared/_internal/useVirtualCollection.d.ts +45 -0
- package/dist/src/components/shared/_internal/useVirtualCollection.js +123 -0
- package/dist/src/components/shared/complex/SKanbanLane.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/src/components/shared/containers/SCloudChrome.vue.d.ts +1 -1
- package/dist/src/components/shared/containers/SCloudChromeRow.vue.d.ts +1 -1
- package/dist/src/components/shared/containers/SCollapsiblePanel.vue.d.ts +1 -1
- 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 +60 -58
- package/dist/src/components/shared/containers/SDrawer.vue.d.ts +12 -1
- package/dist/src/components/shared/containers/SDrawer.vue.js +2 -2
- package/dist/src/components/shared/containers/SDrawer.vue_vue_type_script_setup_true_lang.js +151 -53
- package/dist/src/components/shared/containers/SModal.vue.js +2 -2
- package/dist/src/components/shared/containers/SModal.vue_vue_type_script_setup_true_lang.js +79 -49
- package/dist/src/components/shared/containers/SOverlayHost.vue.d.ts +16 -0
- package/dist/src/components/shared/containers/SOverlayHost.vue.js +8 -0
- package/dist/src/components/shared/containers/SOverlayHost.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/src/components/shared/containers/SPageHeader.vue.d.ts +1 -1
- package/dist/src/components/shared/containers/SPanel.vue.d.ts +1 -1
- package/dist/src/components/shared/containers/SPanel.vue_vue_type_script_setup_true_lang.js +7 -7
- 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 +214 -145
- package/dist/src/components/shared/containers/SSidebarGroup.vue.js +2 -2
- package/dist/src/components/shared/containers/SSidebarGroup.vue_vue_type_script_setup_true_lang.js +30 -8
- 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 +58 -45
- package/dist/src/components/shared/controls/SButton.vue.d.ts +7 -0
- package/dist/src/components/shared/controls/SButton.vue.js +2 -2
- package/dist/src/components/shared/controls/SButton.vue_vue_type_script_setup_true_lang.js +11 -5
- package/dist/src/components/shared/controls/SCheckbox.vue.d.ts +3 -0
- 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 +45 -41
- package/dist/src/components/shared/controls/SCheckboxGroup.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/src/components/shared/controls/SChoiceCards.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/src/components/shared/controls/SColorSelect.vue_vue_type_script_setup_true_lang.js +6 -6
- 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 +147 -132
- package/dist/src/components/shared/controls/SComboboxTrigger.vue.d.ts +2 -2
- package/dist/src/components/shared/controls/SContextMenu.vue.d.ts +11 -0
- 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 +144 -59
- package/dist/src/components/shared/controls/SContextToggleButton.vue_vue_type_script_setup_true_lang.js +6 -6
- package/dist/src/components/shared/controls/SDragHandle.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/src/components/shared/controls/SDropdownMenu.vue.d.ts +15 -4
- 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 +114 -71
- package/dist/src/components/shared/controls/SField.vue.d.ts +9 -6
- package/dist/src/components/shared/controls/SField.vue.js +2 -2
- package/dist/src/components/shared/controls/SField.vue_vue_type_script_setup_true_lang.js +69 -52
- package/dist/src/components/shared/controls/SFieldGroup.vue_vue_type_script_setup_true_lang.js +13 -13
- package/dist/src/components/shared/controls/SInlineTokenEditor.vue_vue_type_script_setup_true_lang.js +26 -26
- package/dist/src/components/shared/controls/SInputText.vue.d.ts +2 -2
- package/dist/src/components/shared/controls/SInputText.vue.js +2 -2
- package/dist/src/components/shared/controls/SInputText.vue_vue_type_script_setup_true_lang.js +33 -42
- package/dist/src/components/shared/controls/SInteractiveSurface.vue.js +2 -2
- package/dist/src/components/shared/controls/SInteractiveSurface.vue_vue_type_script_setup_true_lang.js +99 -74
- package/dist/src/components/shared/controls/SLink.d.ts +11 -1
- package/dist/src/components/shared/controls/SLink.vue.d.ts +17 -1
- package/dist/src/components/shared/controls/SLink.vue.js +2 -2
- package/dist/src/components/shared/controls/SLink.vue_vue_type_script_setup_true_lang.js +157 -62
- package/dist/src/components/shared/controls/SListbox.vue.d.ts +10 -1
- package/dist/src/components/shared/controls/SListbox.vue.js +2 -2
- package/dist/src/components/shared/controls/SListbox.vue_vue_type_script_setup_true_lang.js +371 -189
- package/dist/src/components/shared/controls/SListboxOption.vue.d.ts +6 -0
- package/dist/src/components/shared/controls/SListboxOption.vue.js +2 -2
- package/dist/src/components/shared/controls/SListboxOption.vue_vue_type_script_setup_true_lang.js +47 -34
- package/dist/src/components/shared/controls/SMenuSurface.vue.d.ts +2 -2
- 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 +165 -117
- package/dist/src/components/shared/controls/SRange.vue_vue_type_script_setup_true_lang.js +12 -12
- 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 +126 -116
- package/dist/src/components/shared/controls/STextarea.d.ts +1 -1
- package/dist/src/components/shared/controls/STextarea.vue.d.ts +32 -2
- package/dist/src/components/shared/controls/STextarea.vue_vue_type_script_setup_true_lang.js +346 -200
- package/dist/src/components/shared/controls/_internal/SInlineTokenSurface.vue_vue_type_script_lang.js +36 -36
- package/dist/src/components/shared/controls/menu.d.ts +9 -1
- package/dist/src/components/shared/controls/menu.js +43 -28
- package/dist/src/components/shared/data-display/SActionList.vue.d.ts +1 -1
- package/dist/src/components/shared/data-display/SActionListItem.vue.d.ts +4 -4
- package/dist/src/components/shared/data-display/SActionListItem.vue_vue_type_script_setup_true_lang.js +6 -6
- package/dist/src/components/shared/data-display/SBadge.vue.d.ts +1 -1
- package/dist/src/components/shared/data-display/SChart.vue_vue_type_script_setup_true_lang.js +89 -89
- package/dist/src/components/shared/data-display/SChip.vue.d.ts +1 -1
- package/dist/src/components/shared/data-display/SChip.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/src/components/shared/data-display/SCodeBlock.vue_vue_type_script_setup_true_lang.js +19 -19
- package/dist/src/components/shared/data-display/SCodeEditor.vue_vue_type_script_setup_true_lang.js +37 -37
- package/dist/src/components/shared/data-display/SCodeSearchPanel.vue_vue_type_script_setup_true_lang.js +17 -17
- package/dist/src/components/shared/data-display/SCodeWorkspaceEditor.vue_vue_type_script_setup_true_lang.js +12 -12
- package/dist/src/components/shared/data-display/SControlledToastViewport.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/src/components/shared/data-display/SDiffViewer.vue_vue_type_script_setup_true_lang.js +13 -13
- package/dist/src/components/shared/data-display/SDocBlock.vue_vue_type_script_setup_true_lang.js +12 -12
- package/dist/src/components/shared/data-display/SEmptyState.vue.d.ts +1 -1
- package/dist/src/components/shared/data-display/SEmptyState.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/src/components/shared/data-display/SExpandableText.vue_vue_type_script_setup_true_lang.js +7 -7
- package/dist/src/components/shared/data-display/SKeyValueGrid.vue_vue_type_script_setup_true_lang.js +15 -15
- package/dist/src/components/shared/data-display/SLinkedSystemsList.vue_vue_type_script_setup_true_lang.js +17 -17
- package/dist/src/components/shared/data-display/SMessage.vue.d.ts +1 -1
- package/dist/src/components/shared/data-display/SMessage.vue_vue_type_script_setup_true_lang.js +9 -9
- package/dist/src/components/shared/data-display/SMetricCard.vue.d.ts +1 -1
- package/dist/src/components/shared/data-display/SProgressBar.vue.d.ts +22 -3
- package/dist/src/components/shared/data-display/SProgressBar.vue.js +2 -2
- package/dist/src/components/shared/data-display/SProgressBar.vue_vue_type_script_setup_true_lang.js +133 -47
- package/dist/src/components/shared/data-display/SProgressIndicator.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/src/components/shared/data-display/SRichDocument.vue.js +2 -2
- package/dist/src/components/shared/data-display/SRichDocument.vue_vue_type_script_setup_true_lang.js +46 -23
- package/dist/src/components/shared/data-display/SScrollViewport.vue_vue_type_script_setup_true_lang.js +18 -18
- package/dist/src/components/shared/data-display/SSectionHeader.vue.d.ts +1 -1
- package/dist/src/components/shared/data-display/SStatus.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/src/components/shared/data-display/STable.vue.js +2 -2
- package/dist/src/components/shared/data-display/STable.vue_vue_type_script_setup_true_lang.js +343 -322
- package/dist/src/components/shared/data-display/STooltip.vue.d.ts +2 -2
- package/dist/src/components/shared/data-display/STooltip.vue_vue_type_script_setup_true_lang.js +181 -154
- package/dist/src/components/shared/data-display/STooltipAnchor.vue_vue_type_script_setup_true_lang.js +5 -5
- package/dist/src/components/shared/data-display/STooltipTarget.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/src/components/shared/data-display/SVirtualList.vue.js +2 -2
- package/dist/src/components/shared/data-display/SVirtualList.vue_vue_type_script_setup_true_lang.js +196 -246
- package/dist/src/components/shared/data-display/_internal/SRichBlockNode.vue.js +2 -2
- package/dist/src/components/shared/data-display/_internal/SRichBlockNode.vue_vue_type_script_setup_true_lang.js +242 -220
- package/dist/src/components/shared/data-display/_internal/SRichDisclosure.vue.d.ts +13 -2
- package/dist/src/components/shared/data-display/_internal/SRichDisclosure.vue.js +2 -2
- package/dist/src/components/shared/data-display/_internal/SRichDisclosure.vue_vue_type_script_setup_true_lang.js +67 -11
- package/dist/src/components/shared/data-display/_internal/SRichImage.vue.d.ts +11 -0
- package/dist/src/components/shared/data-display/_internal/SRichImage.vue.js +8 -0
- package/dist/src/components/shared/data-display/_internal/SRichImage.vue_vue_type_script_setup_true_lang.js +89 -0
- package/dist/src/components/shared/data-display/_internal/SRichInlineNode.vue.d.ts +3 -2
- package/dist/src/components/shared/data-display/_internal/SRichInlineNode.vue.js +2 -2
- package/dist/src/components/shared/data-display/_internal/SRichInlineNode.vue_vue_type_script_setup_true_lang.js +179 -125
- package/dist/src/components/shared/data-display/_internal/SRichMath.vue_vue_type_script_setup_true_lang.js +4 -4
- package/dist/src/components/shared/data-display/_internal/SRichTableNode.vue.d.ts +21 -0
- package/dist/src/components/shared/data-display/_internal/SRichTableNode.vue.js +5 -0
- package/dist/src/components/shared/data-display/_internal/SRichTableNode.vue_vue_type_script_setup_true_lang.js +150 -0
- package/dist/src/components/shared/data-display/_internal/STableCell.vue.d.ts +52 -0
- package/dist/src/components/shared/data-display/_internal/STableCell.vue.js +8 -0
- package/dist/src/components/shared/data-display/_internal/STableCell.vue_vue_type_script_setup_true_lang.js +148 -0
- package/dist/src/components/shared/data-display/_internal/STableFrame.vue.d.ts +42 -0
- package/dist/src/components/shared/data-display/_internal/STableFrame.vue.js +8 -0
- package/dist/src/components/shared/data-display/_internal/STableFrame.vue_vue_type_script_setup_true_lang.js +98 -0
- package/dist/src/components/shared/data-display/_internal/STableRow.vue.d.ts +43 -0
- package/dist/src/components/shared/data-display/_internal/STableRow.vue.js +8 -0
- package/dist/src/components/shared/data-display/_internal/STableRow.vue_vue_type_script_setup_true_lang.js +115 -0
- package/dist/src/components/shared/data-display/_internal/STableSection.vue.d.ts +28 -0
- package/dist/src/components/shared/data-display/_internal/STableSection.vue.js +5 -0
- package/dist/src/components/shared/data-display/_internal/STableSection.vue_vue_type_script_setup_true_lang.js +77 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentMedia.d.ts +6 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentMedia.js +136 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentMetadata.d.ts +21 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentMetadata.js +39 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentNavigation.d.ts +30 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentNavigation.js +88 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentTableValidation.d.ts +9 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentTableValidation.js +240 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentTraversal.d.ts +15 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentTraversal.js +61 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentTypes.d.ts +466 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentValidation.d.ts +65 -0
- package/dist/src/components/shared/data-display/_internal/richDocumentValidation.js +192 -0
- package/dist/src/components/shared/data-display/_internal/tableFoundation.d.ts +27 -0
- package/dist/src/components/shared/data-display/_internal/tableFoundation.js +16 -0
- package/dist/src/components/shared/data-display/richDocument.d.ts +3 -220
- package/dist/src/components/shared/data-display/richDocument.js +607 -399
- package/dist/src/components/shared/database/SDataGrid.vue_vue_type_script_setup_true_lang.js +36 -36
- package/dist/src/components/shared/database/SSqlEditor.vue.d.ts +2 -2
- package/dist/src/components/shared/database/SSqlEditor.vue_vue_type_script_setup_true_lang.js +36 -36
- package/dist/src/components/shared/feedback/SAsyncState.vue.js +2 -2
- package/dist/src/components/shared/feedback/SAsyncState.vue_vue_type_script_setup_true_lang.js +70 -63
- package/dist/src/components/shared/navigation/SBottomNav.vue.d.ts +2 -2
- 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 +138 -129
- package/dist/src/components/shared/navigation/SBreadcrumbs.vue.d.ts +2 -2
- package/dist/src/components/shared/navigation/STabPanel.vue.d.ts +2 -2
- package/dist/src/components/shared/navigation/SWizardSteps.vue_vue_type_script_setup_true_lang.js +16 -16
- package/dist/src/components/shared/persona/SPersonaProjectPicker.vue.d.ts +2 -2
- package/dist/src/composables/useDialogOverlay.d.ts +12 -2
- package/dist/src/composables/useDialogOverlay.js +202 -41
- package/dist/src/composables/useFloatingPosition.d.ts +20 -0
- package/dist/src/composables/useFloatingPosition.js +129 -52
- package/dist/src/internal/fieldSurface.d.ts +3 -0
- package/dist/src/internal/fieldSurface.js +3 -2
- package/dist/src/internal/focusNavigation.d.ts +2 -0
- package/dist/src/internal/focusNavigation.js +9 -9
- package/dist/src/internal/layerStack.d.ts +12 -0
- package/dist/src/internal/layerStack.js +138 -62
- package/dist/src/internal/linkTarget.d.ts +7 -1
- package/dist/src/internal/linkTarget.js +11 -7
- package/dist/src/internal/overlayHost.d.ts +18 -0
- package/dist/src/internal/overlayHost.js +18 -0
- package/dist/src/internal/ownedAttrs.d.ts +13 -3
- package/dist/src/internal/ownedAttrs.js +8 -1
- package/dist/src/internal/runtimeContract.d.ts +2 -0
- package/dist/src/internal/runtimeContract.js +10 -5
- package/dist/src/internal/textLengthConstraints.d.ts +9 -0
- package/dist/src/internal/textLengthConstraints.js +18 -0
- package/dist/src/internal/useMenuLayer.d.ts +8 -4
- package/dist/src/internal/useMenuLayer.js +75 -46
- package/dist/tailwind.css +3 -0
- package/dist/typography.LICENSE.txt +94 -0
- package/dist/typography.js +5150 -0
- package/docs/getting-started.md +39 -0
- package/docs/link-download.md +114 -0
- package/docs/listbox.md +129 -0
- package/docs/public-api.md +208 -4
- package/docs/resize.md +129 -0
- package/docs/rich-document.md +442 -25
- package/package.json +12 -4
- package/src/components/shared/_internal/SDialogSurface.css +43 -7
- package/src/components/shared/_internal/SMenuItem.css +22 -1
- package/src/components/shared/_internal/SMenuLayer.css +4 -0
- package/src/components/shared/containers/SDrawer.css +20 -2
- package/src/components/shared/containers/SOverlayHost.css +14 -0
- package/src/components/shared/containers/SPopover.css +8 -2
- package/src/components/shared/controls/SButton.css +4 -0
- package/src/components/shared/controls/SField.css +6 -0
- package/src/components/shared/controls/SListbox.css +17 -0
- package/src/components/shared/controls/SMenuSurface.css +38 -4
- package/src/components/shared/controls/STextarea.css +42 -3
- package/src/components/shared/data-display/SProgressBar.css +79 -0
- package/src/components/shared/data-display/SRichDocument.css +1 -0
- package/src/components/shared/data-display/SStatus.css +8 -25
- package/src/components/shared/data-display/STable.css +0 -113
- package/src/components/shared/data-display/STooltip.css +4 -1
- package/src/components/shared/data-display/_internal/SRichBlockNode.css +11 -7
- package/src/components/shared/data-display/_internal/SRichDisclosure.css +16 -0
- package/src/components/shared/data-display/_internal/SRichImage.css +37 -0
- package/src/components/shared/data-display/_internal/STableCell.css +55 -0
- package/src/components/shared/data-display/_internal/STableFrame.css +41 -0
- package/src/components/shared/data-display/_internal/STableRow.css +12 -0
- package/src/components/shared/feedback/SAsyncState.css +0 -4
- package/src/styles/style.css +9 -5
- package/src/styles/tokens.css +30 -0
- package/dist/assets/src/components/layout/SDockRegion.vue_vue_type_style_index_0_scoped_2932631d_lang.css +0 -1
- package/dist/assets/src/components/shared/_internal/SDialogSurface.css_vue_type_style_index_0_src_d1b65adf_scoped_d1b65adf_lang.css +0 -2
- package/dist/assets/src/components/shared/_internal/SMenuItem.css_vue_type_style_index_0_src_e5bd192e_scoped_e5bd192e_lang.css +0 -2
- package/dist/assets/src/components/shared/_internal/SMenuLayer.css_vue_type_style_index_0_src_4913bbe1_scoped_4913bbe1_lang.css +0 -1
- package/dist/assets/src/components/shared/containers/SDrawer.css_vue_type_style_index_0_src_091d7325_scoped_091d7325_lang.css +0 -2
- package/dist/assets/src/components/shared/containers/SPopover.css_vue_type_style_index_0_src_deded766_scoped_deded766_lang.css +0 -2
- package/dist/assets/src/components/shared/containers/SSidebarSection.css_vue_type_style_index_0_src_96f51ac6_scoped_96f51ac6_lang.css +0 -2
- package/dist/assets/src/components/shared/controls/SButton.css_vue_type_style_index_0_src_a5d8f7e0_scoped_a5d8f7e0_lang.css +0 -2
- package/dist/assets/src/components/shared/controls/SCombobox.css_vue_type_style_index_0_src_e3b4f580_scoped_e3b4f580_lang.css +0 -2
- package/dist/assets/src/components/shared/controls/SContextMenu.css_vue_type_style_index_0_src_00c91d39_scoped_00c91d39_lang.css +0 -1
- package/dist/assets/src/components/shared/controls/SField.css_vue_type_style_index_0_src_60628f96_scoped_60628f96_lang.css +0 -2
- package/dist/assets/src/components/shared/controls/SListbox.css_vue_type_style_index_0_src_24db4abb_scoped_24db4abb_lang.css +0 -2
- package/dist/assets/src/components/shared/controls/SMenuSurface.css_vue_type_style_index_0_src_bc7c7be4_scoped_bc7c7be4_lang.css +0 -2
- package/dist/assets/src/components/shared/controls/SSelect.css_vue_type_style_index_0_src_441648c9_scoped_441648c9_lang.css +0 -2
- package/dist/assets/src/components/shared/data-display/SProgressBar.css_vue_type_style_index_0_src_9308293a_scoped_9308293a_lang.css +0 -2
- package/dist/assets/src/components/shared/data-display/SRichDocument.css_vue_type_style_index_0_src_d1afafc5_scoped_d1afafc5_lang.css +0 -2
- package/dist/assets/src/components/shared/data-display/STable.css_vue_type_style_index_0_src_9955d482_scoped_9955d482_lang.css +0 -2
- package/dist/assets/src/components/shared/data-display/SVirtualList.css_vue_type_style_index_0_src_cee8c247_scoped_cee8c247_lang.css +0 -2
- package/dist/assets/src/components/shared/data-display/_internal/SRichBlockNode.css_vue_type_style_index_0_src_195d5c06_scoped_195d5c06_lang.css +0 -2
- package/dist/assets/src/components/shared/data-display/_internal/SRichDisclosure.css_vue_type_style_index_0_src_fa94e2ff_scoped_fa94e2ff_lang.css +0 -2
- package/dist/assets/src/components/shared/feedback/SAsyncState.css_vue_type_style_index_0_src_bfc28903_scoped_bfc28903_lang.css +0 -2
package/docs/getting-started.md
CHANGED
|
@@ -12,6 +12,22 @@ UI-kit поставляется как собранные Vue 3 ESM-модули
|
|
|
12
12
|
Vite-based приложений. Consumer отвечает за единственные экземпляры `vue`,
|
|
13
13
|
`pinia`, `@vue/devtools-api` и `vue-router`.
|
|
14
14
|
|
|
15
|
+
Build-инструменты Tailwind/PostCSS объявляются прямыми dev dependencies
|
|
16
|
+
приложения:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install -D tailwindcss@^4.3.3 @tailwindcss/postcss@^4.3.3 postcss@^8.5.28
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`postcss.config.mjs`:
|
|
23
|
+
|
|
24
|
+
```js
|
|
25
|
+
export default { plugins: { '@tailwindcss/postcss': {} } }
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Это контракт [интеграции Tailwind с PostCSS](https://tailwindcss.com/docs/installation/using-postcss).
|
|
29
|
+
Зависимости UI-kit не заменяют прямые imports build-контура приложения.
|
|
30
|
+
|
|
15
31
|
### Подключение
|
|
16
32
|
|
|
17
33
|
UI-kit публикует собранные component-модули и использует Tailwind 4 utilities.
|
|
@@ -29,6 +45,10 @@ UI-kit публикует собранные component-модули и испо
|
|
|
29
45
|
source root приложения задаётся явно, сохраните его на собственном
|
|
30
46
|
`@import "tailwindcss" source("…")`.
|
|
31
47
|
|
|
48
|
+
Typography plugin включён в пакет как полная upstream-сборка. Отдельная
|
|
49
|
+
установка `@tailwindcss/typography` и consumer overrides его зависимостей не
|
|
50
|
+
требуются. Лицензии включённых модулей находятся в `dist/typography.LICENSE.txt`.
|
|
51
|
+
|
|
32
52
|
```ts
|
|
33
53
|
import { createApp } from 'vue'
|
|
34
54
|
import { createPinia } from 'pinia'
|
|
@@ -155,6 +175,21 @@ The UI kit is distributed as built Vue 3 ESM modules and declaration files for
|
|
|
155
175
|
Vite-based applications. The consumer owns the single `vue`, `pinia`,
|
|
156
176
|
`@vue/devtools-api`, and `vue-router` instances.
|
|
157
177
|
|
|
178
|
+
Declare the application's Tailwind/PostCSS build tools as direct dev dependencies:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
npm install -D tailwindcss@^4.3.3 @tailwindcss/postcss@^4.3.3 postcss@^8.5.28
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
`postcss.config.mjs`:
|
|
185
|
+
|
|
186
|
+
```js
|
|
187
|
+
export default { plugins: { '@tailwindcss/postcss': {} } }
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
This follows the [Tailwind PostCSS integration contract](https://tailwindcss.com/docs/installation/using-postcss).
|
|
191
|
+
UI-kit dependencies do not replace direct imports owned by the application's build pipeline.
|
|
192
|
+
|
|
158
193
|
### Setup
|
|
159
194
|
|
|
160
195
|
The UI kit publishes built component modules and uses Tailwind 4 utilities.
|
|
@@ -172,6 +207,10 @@ line is required and resolves relative to this CSS file. Consumers do not need
|
|
|
172
207
|
a `reference.css` import. If the application uses an explicit source root, keep
|
|
173
208
|
it on its own `@import "tailwindcss" source("…")`.
|
|
174
209
|
|
|
210
|
+
The package bundles the complete upstream typography plugin. No separate
|
|
211
|
+
`@tailwindcss/typography` installation or consumer dependency overrides are
|
|
212
|
+
required. Included module licenses are provided in `dist/typography.LICENSE.txt`.
|
|
213
|
+
|
|
175
214
|
```ts
|
|
176
215
|
import { createApp } from 'vue'
|
|
177
216
|
import { createPinia } from 'pinia'
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Скачивание вложений / Attachment downloads
|
|
2
|
+
|
|
3
|
+
`SButton` и `SLink` принимают `download` только вместе с `href`. В этом режиме
|
|
4
|
+
activation owner — обычный `HTMLAnchorElement`. UI-kit сохраняет native default
|
|
5
|
+
action для pointer click и Enter; обработчик consumer `@click` может отменить его
|
|
6
|
+
через `event.preventDefault()`. Router `to` и action button отвергают `download`
|
|
7
|
+
при типизации и во время работы, включая явно переданное `false`.
|
|
8
|
+
|
|
9
|
+
`SButton` and `SLink` accept `download` with `href` only. The activation owner is
|
|
10
|
+
a native `HTMLAnchorElement`. The kit preserves its pointer-click and Enter
|
|
11
|
+
default actions; a consumer `@click` listener can cancel the action with
|
|
12
|
+
`event.preventDefault()`. Router `to` and action buttons reject `download` both
|
|
13
|
+
in types and at runtime, including an explicitly supplied `false`.
|
|
14
|
+
|
|
15
|
+
Публичный модуль `@pgcorp/ui-kit/shared/controls/SLink` экспортирует `LinkDownload`,
|
|
16
|
+
`HrefDownloadDestination` и `DownloadLinkDestination`. Они описывают capability
|
|
17
|
+
`SButton/SLink`; обычный `LinkDestination` и модели menu/breadcrumb/bottom-nav
|
|
18
|
+
download не принимают. Это не отдельный control и не иной activation owner.
|
|
19
|
+
|
|
20
|
+
The public module `@pgcorp/ui-kit/shared/controls/SLink` exports `LinkDownload`,
|
|
21
|
+
`HrefDownloadDestination`, and `DownloadLinkDestination`. These express the
|
|
22
|
+
`SButton/SLink` capability; ordinary `LinkDestination` and menu/breadcrumb/bottom-nav
|
|
23
|
+
models do not accept downloads. They do not introduce a separate control or
|
|
24
|
+
activation owner.
|
|
25
|
+
|
|
26
|
+
| Значение / Value | Native intent |
|
|
27
|
+
| --- | --- |
|
|
28
|
+
| `"Полное вложение — профиль.bin"` | Имя передаётся буквально / The filename is passed verbatim |
|
|
29
|
+
| `true` или / or `""` | `download=""`; имя определяет браузер / The browser chooses the filename |
|
|
30
|
+
| `false` или отсутствие / or omission | Атрибут отсутствует / No download attribute |
|
|
31
|
+
|
|
32
|
+
`download` является рекомендацией браузеру, а не обходом его политики безопасности.
|
|
33
|
+
Для cross-origin HTTP-ресурса сервер управляет `Content-Disposition: attachment`;
|
|
34
|
+
server filename и ограничения файловой системы могут влиять на сохранённое имя.
|
|
35
|
+
Кит не изменяет строку filename, не проверяет origin эвристиками и не обещает
|
|
36
|
+
скачивание любого стороннего URL. Контракт следует
|
|
37
|
+
[HTML downloading resources](https://html.spec.whatwg.org/multipage/links.html#downloading-resources).
|
|
38
|
+
|
|
39
|
+
`download` expresses browser intent, not a security-policy override. For
|
|
40
|
+
cross-origin HTTP resources the server controls `Content-Disposition: attachment`;
|
|
41
|
+
server filenames and filesystem restrictions may affect the saved name. The kit
|
|
42
|
+
does not transform the filename, infer origin policy, or guarantee downloads of
|
|
43
|
+
arbitrary remote URLs. See the
|
|
44
|
+
[HTML download contract](https://html.spec.whatwg.org/multipage/links.html#downloading-resources).
|
|
45
|
+
|
|
46
|
+
## Полный Blob и ограниченный просмотр / Complete Blob and limited preview
|
|
47
|
+
|
|
48
|
+
Consumer владеет полным `Blob`, его object URL и временем жизни. Просмотр может
|
|
49
|
+
показывать часть файла; `href` для скачивания должен указывать на полный исходный
|
|
50
|
+
Blob. Компоненты не читают, не сериализуют и не обрезают его содержимое.
|
|
51
|
+
|
|
52
|
+
The consumer owns the complete `Blob`, its object URL, and its lifetime. A preview
|
|
53
|
+
may display only part of the file; the download `href` must reference the complete
|
|
54
|
+
original Blob. Neither component reads, serializes, or truncates that content.
|
|
55
|
+
|
|
56
|
+
```vue
|
|
57
|
+
<script setup lang="ts">
|
|
58
|
+
import { onBeforeUnmount, onMounted, shallowRef } from 'vue'
|
|
59
|
+
import SButton from '@pgcorp/ui-kit/shared/controls/SButton.vue'
|
|
60
|
+
import SLink from '@pgcorp/ui-kit/shared/controls/SLink.vue'
|
|
61
|
+
|
|
62
|
+
// One immutable attachment per mounted view; replace the view for another file.
|
|
63
|
+
const { attachment, filename } = defineProps<{
|
|
64
|
+
attachment: Blob
|
|
65
|
+
filename: string
|
|
66
|
+
}>()
|
|
67
|
+
const attachmentUrl = shallowRef<string>()
|
|
68
|
+
|
|
69
|
+
onMounted(() => {
|
|
70
|
+
attachmentUrl.value = URL.createObjectURL(attachment)
|
|
71
|
+
})
|
|
72
|
+
onBeforeUnmount(() => {
|
|
73
|
+
if (attachmentUrl.value !== undefined) URL.revokeObjectURL(attachmentUrl.value)
|
|
74
|
+
})
|
|
75
|
+
</script>
|
|
76
|
+
|
|
77
|
+
<template>
|
|
78
|
+
<SButton
|
|
79
|
+
v-if="attachmentUrl"
|
|
80
|
+
:href="attachmentUrl"
|
|
81
|
+
:download="filename"
|
|
82
|
+
label="Скачать полное вложение"
|
|
83
|
+
/>
|
|
84
|
+
<SLink v-if="attachmentUrl" :href="attachmentUrl" :download="filename">
|
|
85
|
+
Скачать оригинал
|
|
86
|
+
</SLink>
|
|
87
|
+
</template>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Создание object URL находится в `onMounted`, поэтому SSR не обращается к Blob URL
|
|
91
|
+
API. Ссылка остаётся действительной всё время, пока действие доступно. Не
|
|
92
|
+
отзывайте URL и не уничтожайте его владельца в click listener до запуска native
|
|
93
|
+
скачивания. [File API](https://w3c.github.io/FileAPI/#creating-revoking) определяет
|
|
94
|
+
отзыв URL и ошибку последующего доступа к нему.
|
|
95
|
+
|
|
96
|
+
Creating the URL in `onMounted` keeps Blob URL APIs out of SSR. Keep the URL alive
|
|
97
|
+
while its action remains available. Do not revoke it or destroy its owner in a
|
|
98
|
+
click listener before the native download starts. The
|
|
99
|
+
[File API](https://w3c.github.io/FileAPI/#creating-revoking) defines revocation and
|
|
100
|
+
the failure of subsequent access.
|
|
101
|
+
|
|
102
|
+
## Недоступные состояния / Unavailable states
|
|
103
|
+
|
|
104
|
+
`SLink.disabled` и `SButton.disabled/loading` удаляют native `href` и `download`,
|
|
105
|
+
выставляют `aria-disabled` и исключают ссылку из Tab order. Они отменяют click
|
|
106
|
+
default action и не эмитят `click`. Снятие состояния восстанавливает исходные
|
|
107
|
+
`href` и filename. Для загрузки `SButton` также предоставляет `aria-busy` и
|
|
108
|
+
собственный индикатор. Нового download callback или hidden DOM owner нет.
|
|
109
|
+
|
|
110
|
+
`SLink.disabled` and `SButton.disabled/loading` remove native `href` and `download`,
|
|
111
|
+
set `aria-disabled`, and remove the link from the Tab order. They cancel click
|
|
112
|
+
default actions and do not emit `click`. Clearing the state restores the original
|
|
113
|
+
`href` and filename. A loading `SButton` also exposes `aria-busy` and its indicator.
|
|
114
|
+
There is no separate download callback or hidden DOM owner.
|
package/docs/listbox.md
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# SListbox: полный каталог и виртуальное окно
|
|
2
|
+
|
|
3
|
+
`SListbox` владеет единым контрактом выбора, keyboard navigation и доступности.
|
|
4
|
+
`SSelect` и `SCombobox` используют его как общий selection-компонент. Потребитель
|
|
5
|
+
передаёт полный `options`, а не видимый срез каталога.
|
|
6
|
+
|
|
7
|
+
## Типизированная виртуализация
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
interface SListboxVirtualization {
|
|
11
|
+
viewportHeight: number
|
|
12
|
+
estimatedItemHeight: number
|
|
13
|
+
overscan?: number
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`virtualization` необязателен. При отсутствии свойства все options находятся в
|
|
18
|
+
DOM. Он поддерживается для `variant="select"`; цветовая grid-композиция требует
|
|
19
|
+
другой геометрии и отвергает этот контракт.
|
|
20
|
+
|
|
21
|
+
`viewportHeight` — высота viewport в CSS px. `estimatedItemHeight` — оценочная
|
|
22
|
+
высота строки до измерения `ResizeObserver`. Оба значения должны быть конечными
|
|
23
|
+
числами в диапазоне `[1, 100000]`. `overscan` — число дополнительных строк с каждой
|
|
24
|
+
стороны окна, целое число `[0, 1000]`, штатное значение `8`. Неизвестные поля,
|
|
25
|
+
`null`, отрицательные значения и несовместимый variant вызывают точную ошибку.
|
|
26
|
+
|
|
27
|
+
Общий private geometry-owner используется также `SVirtualList`: stable keys,
|
|
28
|
+
измеренные высоты, prefix offsets, поиск диапазона и выравнивание строки.
|
|
29
|
+
`SListbox` сохраняет собственную семантику `ul`/`li`, `role="listbox"`, именованные
|
|
30
|
+
группы и option leaves; `SVirtualList` сохраняет list/log и viewport lifecycle.
|
|
31
|
+
|
|
32
|
+
```vue
|
|
33
|
+
<SListbox
|
|
34
|
+
v-model="selectedFile"
|
|
35
|
+
:options="allFiles"
|
|
36
|
+
label="Файлы проекта"
|
|
37
|
+
:virtualization="{ viewportHeight: 240, estimatedItemHeight: 36, overscan: 4 }"
|
|
38
|
+
/>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
В DOM находится окно viewport + overscan, активная/focused option и необходимые
|
|
42
|
+
подписи групп. У каждой смонтированной option `aria-posinset` и `aria-setsize`
|
|
43
|
+
описывают весь каталог: clear-option входит в набор, group labels не входят.
|
|
44
|
+
Смонтированная группа содержит хотя бы одну option и собственное доступное имя.
|
|
45
|
+
|
|
46
|
+
## Identity, выбор и навигация
|
|
47
|
+
|
|
48
|
+
`value` каждой option — уникальный непустой string или конечное number. Числовой
|
|
49
|
+
`1` и строковый `'1'` являются разными ключами. Option DOM ID выводится из её
|
|
50
|
+
stable typed key, а не из позиции, поэтому prepend/reorder не меняют identity.
|
|
51
|
+
|
|
52
|
+
Arrow keys, Home/End, `moveActive()` и typeahead работают по полному inventory,
|
|
53
|
+
включая offscreen options, и пропускают disabled. Переход монтирует и прокручивает
|
|
54
|
+
целевую строку. Навигация не изменяет `modelValue`: выбор происходит через
|
|
55
|
+
Enter/Space/click или `selectActive()`.
|
|
56
|
+
|
|
57
|
+
`readonly` допускает навигацию, но не выбор. `disabled` блокирует оба действия.
|
|
58
|
+
У disabled виртуального списка viewport остаётся доступен через Tab для обычной
|
|
59
|
+
прокрутки клавишами PageUp/PageDown; focus не переходит на options и выбор
|
|
60
|
+
недоступен.
|
|
61
|
+
`selectionMode="multiple"` сохраняет порядок controlled выбранных ключей.
|
|
62
|
+
`clearOptionLabel` доступен только в single режиме. Невалидный selected/active
|
|
63
|
+
key, отсутствующий в каталоге, отвергается; kit не подменяет его другой option.
|
|
64
|
+
|
|
65
|
+
## Внешний focus owner: STextarea
|
|
66
|
+
|
|
67
|
+
`focusMode="activedescendant"` поддерживает single selection и требует
|
|
68
|
+
`activeValue: TKey | null`. Focus остаётся в поле; options не становятся Tab stops
|
|
69
|
+
и pointer selection не переносит focus из поля.
|
|
70
|
+
|
|
71
|
+
Методы `initializeActive()`, `moveActive('next' | 'previous' | 'first' | 'last')`
|
|
72
|
+
и `selectActive()` управляют активной option. Событие `update:activeValue`
|
|
73
|
+
публикует typed key. Компонент удерживает последний requested cursor, пока
|
|
74
|
+
родитель подтверждает controlled значение; последовательные действия не должны
|
|
75
|
+
ждать перерисовку родителя.
|
|
76
|
+
|
|
77
|
+
Clear-option имеет отдельную cursor identity: после её запроса и подтверждения
|
|
78
|
+
`activeValue=null` она остаётся активной, а `selectActive()` очищает selection.
|
|
79
|
+
Метод `resetActive()` снимает активный cursor и публикует `activeValue=null`,
|
|
80
|
+
не выбирая clear-option и не меняя selection. Он служит явным reset-намерением,
|
|
81
|
+
в том числе когда clear-option уже подтверждена значением `null`.
|
|
82
|
+
Исходный `activeValue=null` без запроса clear-option означает отсутствие cursor.
|
|
83
|
+
Внешнее изменение `activeValue` без ожидающего запроса применяет переданное
|
|
84
|
+
controlled значение. Escape в composition вызывает `resetActive()`;
|
|
85
|
+
последующие Home/End и Arrow keys продолжают навигацию по полному каталогу.
|
|
86
|
+
Reset хранится в той же очереди typed запросов: запоздалое подтверждение
|
|
87
|
+
предыдущей option не восстанавливает снятый cursor.
|
|
88
|
+
|
|
89
|
+
`active-descendant-change(id: string | null)` сообщает DOM ID только после
|
|
90
|
+
монтирования целевой option. Exposed `activeOptionId` содержит то же значение.
|
|
91
|
+
При ручной прокрутке активная option остаётся смонтированной; `null` означает
|
|
92
|
+
отсутствие доступной mounted active target. При уничтожении списка связь
|
|
93
|
+
сбрасывается. Потребитель передаёт это событие в `STextarea.suggestions`, а не
|
|
94
|
+
вычисляет ID самостоятельно.
|
|
95
|
+
|
|
96
|
+
```vue
|
|
97
|
+
<STextarea
|
|
98
|
+
v-model="message"
|
|
99
|
+
label="Сообщение"
|
|
100
|
+
:suggestions="{
|
|
101
|
+
controls: 'files',
|
|
102
|
+
...(activeOptionId ? { activeDescendant: activeOptionId } : {}),
|
|
103
|
+
}"
|
|
104
|
+
/>
|
|
105
|
+
<SListbox
|
|
106
|
+
id="files"
|
|
107
|
+
ref="fileList"
|
|
108
|
+
v-model="selectedFile"
|
|
109
|
+
v-model:active-value="activeFile"
|
|
110
|
+
:options="allFiles"
|
|
111
|
+
label="Файлы проекта"
|
|
112
|
+
focus-mode="activedescendant"
|
|
113
|
+
:virtualization="{ viewportHeight: 240, estimatedItemHeight: 36 }"
|
|
114
|
+
@active-descendant-change="activeOptionId = $event"
|
|
115
|
+
/>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Приложение владеет командами composer и вызывает методы списка из своего
|
|
119
|
+
`STextarea` keyboard handler. Оно не перехватывает IME, обычные caret keys или
|
|
120
|
+
модифицированные chords, не относящиеся к открытому suggestions-сценарию.
|
|
121
|
+
Строки списка, DOM поиск и локальные стили controls не нужны.
|
|
122
|
+
|
|
123
|
+
## Проверочные состояния
|
|
124
|
+
|
|
125
|
+
Storybook: `VirtualCatalog`, `VirtualGrouped`, `VirtualMultiple`,
|
|
126
|
+
`VirtualReadonly`, `VirtualDisabled`, `VirtualExternalFocus`. Полный каталог
|
|
127
|
+
содержит 10000 options; внешняя композиция использует реальный `STextarea`.
|
|
128
|
+
Browser proof проверяет narrow/dark, ARIA target lifetime, offscreen focus,
|
|
129
|
+
выбор, scroll geometry, группы и accessibility.
|
package/docs/public-api.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
- `layout/*` — каркас приложения, dock regions, stack и workbench layouts;
|
|
11
11
|
- `shared/controls/*` — buttons, fields, inputs, selects, menus и selection controls;
|
|
12
|
-
- `shared/containers/*` — panels, modal, drawer, popover и sidebars;
|
|
12
|
+
- `shared/containers/*` — panels, modal, drawer, overlay host, popover и sidebars;
|
|
13
13
|
- `shared/data-display/*` — badges, tables, code, JSON, progress, status и tooltips;
|
|
14
14
|
- `shared/navigation/*` — tabs, breadcrumbs, catalog navigation и wizard steps;
|
|
15
15
|
- `shared/database/*`, `shared/graph/*`, `shared/persona/*` — доменные сложные поверхности;
|
|
@@ -27,12 +27,36 @@ UI-kit-owned атрибуты `data-s-*` относятся к внутренн
|
|
|
27
27
|
runtime-зависимости через layout конкретного package manager. Сборка использует
|
|
28
28
|
`target/lib: ES2020`, совпадающий с baseline `@vue/tsconfig/tsconfig.dom.json`,
|
|
29
29
|
и не требует скрытых полифиллов.
|
|
30
|
+
`icons` публикует именованные tree-shakeable компоненты, включая `HardDrive`,
|
|
31
|
+
`Usb`, `Disc`, `CalendarDays`, `ArrowUpRight`, `Paperclip`, `GitFork`, `ZoomIn`,
|
|
32
|
+
`ZoomOut`, `RotateCw`, `Volume2`, `Radio`, `Pause`, `ChevronLeft` и `Zap`. `Zap`
|
|
33
|
+
обозначает молнию для роли быстрой модели и сохраняет primary-only силуэт
|
|
34
|
+
во всех цветовых режимах. `Pause`
|
|
35
|
+
обозначает состояние паузы; `ChevronLeft` — переход влево. `Radio` обозначает сетевое вещание
|
|
36
|
+
или фоновое уведомление, не radio input. `ZoomIn` и `ZoomOut` обозначают изменение
|
|
37
|
+
масштаба; `RotateCw` — поворот по часовой стрелке; `Volume2` — звук с двумя
|
|
38
|
+
волнами. Они используют общий icon
|
|
39
|
+
contract с `classic | sputnig` наборами, `auto | duotone | monochrome` цветом
|
|
40
|
+
и семантическим размером владельца control при передаче через icon slot.
|
|
30
41
|
Типы таблицы импортируются из `shared/data-display/table`, типы графиков — из
|
|
31
42
|
`shared/data-display/chart`, типы и чистая функция diff — из
|
|
32
43
|
`shared/data-display/diff`. `SDiffViewer` принимает exact-text snapshots,
|
|
33
44
|
показывает unified/split представление, виртуализирует строки и управляет
|
|
34
45
|
вычислением в worker для больших входов. Смена source и unmount отменяют
|
|
35
46
|
неактуальную работу; завершившийся устаревший результат не публикуется.
|
|
47
|
+
`SProgressBar.shape="circular"` предоставляет 24/28/32 px numerical indicator
|
|
48
|
+
через существующий progressbar owner. Determinate круг требует явный `value`
|
|
49
|
+
0–100; `showValue` округляет только отображаемый процент, не `aria-valuenow`.
|
|
50
|
+
`valueText` описывает предметное измерение. `accuracy="estimated"` требует
|
|
51
|
+
`valueText` и видимую приблизительную отметку; явный `mode="unknown"` требует
|
|
52
|
+
`valueText`, отвергает `value` и не создаёт numerical или animated state.
|
|
53
|
+
Пассивная круговая форма допускает phrasing-композицию внутри кнопки в
|
|
54
|
+
decorative mode; интерактивный owner и доступное имя остаются у кнопки.
|
|
55
|
+
Штатная композиция использует `SButton.appearance="ghost"`, `iconOnly`,
|
|
56
|
+
`shape="circle"`, `size="lg"` и `density="default"` с областью 48×48 px.
|
|
57
|
+
Default linear/determinate и native range 0–100 сохраняются. Scoped default
|
|
58
|
+
slot с точным value относится только к linear label; circular отклоняет этот
|
|
59
|
+
slot и управляет числом и uncertainty marker через публичные props.
|
|
36
60
|
`SChart` объединяет line/area/bar/pie/donut,
|
|
37
61
|
responsive geometry, semantic palette и доступную таблицу данных. `SMetricCard`
|
|
38
62
|
принимает компактный график через `#chart`. `SCodeBlock` сохраняет CodeMirror за
|
|
@@ -43,6 +67,17 @@ async boundary; `presentation="plain"` является lightweight read-only к
|
|
|
43
67
|
`SActionListItem` держат primary activation и дополнительные controls
|
|
44
68
|
sibling-элементами внутри одного chrome; `actionsLayout`/`trailingLayout`
|
|
45
69
|
управляют inline, stacked и container-responsive раскладкой.
|
|
70
|
+
`SInteractiveSurface.tooltipTrigger` принимает полный combined `trigger` из
|
|
71
|
+
default slot `STooltip` и связывает ARIA, pointer/focus events и element ref
|
|
72
|
+
с primary activation owner в режимах action, link `href` и Vue Router `to`.
|
|
73
|
+
Link surface требует ровно один target и доступное имя; `to` требует
|
|
74
|
+
подключённого Vue Router. Static surface отклоняет tooltip binding.
|
|
75
|
+
Sibling `#actions` сохраняет независимые focus/activation. Подсказка
|
|
76
|
+
открывается по pointer/focus и закрывается через Escape.
|
|
77
|
+
Пассивная tooltip panel поддерживает hover без focus или Tab stop; выход из
|
|
78
|
+
target и панели закрывает её через `hideDelay`. Escape отменяет pending
|
|
79
|
+
`showDelay` без перехвата события у другого overlay. Blur, скрытие документа,
|
|
80
|
+
disabled и освобождение target завершают activation lease и его слушатели.
|
|
46
81
|
`SUiKitLocaleProvider` задаёт `en | ru | zh-CN | zh-TW` для одного Vue subtree,
|
|
47
82
|
а `composables/useUiKitLocale` экспортирует readonly context, полный список
|
|
48
83
|
локалей и типы messages/overrides/ключей. Provider не создаёт DOM owner и
|
|
@@ -62,12 +97,78 @@ callbacks и trust flags не входят в API.
|
|
|
62
97
|
`sm/md/lg = 32/36/40 px` и label typography `12/14/14 px`; тот же
|
|
63
98
|
`density="compact"` у `SInputText` даёт совместимую геометрию поля без
|
|
64
99
|
consumer CSS.
|
|
65
|
-
`SInputText.minLength` и `
|
|
100
|
+
`SInputText.minLength`/`maxLength` и `STextarea.minLength`/`maxLength` передают строгие
|
|
66
101
|
неотрицательные safe integers нативному textual input; `minLength <= maxLength`
|
|
67
102
|
проверяется до рендера, а numeric/temporal families отвергают этот контракт.
|
|
103
|
+
`STextareaContentContext.hasMultipleVisualLines` передаёт `false` для одной
|
|
104
|
+
native визуальной строки, `true` для нескольких и `null` при недоступном layout
|
|
105
|
+
(SSR/hidden/zero width). Soft wrapping и hard newline учитываются общей
|
|
106
|
+
editing/resize поверхностью; пустое значение при доступном layout имеет одну
|
|
107
|
+
строку. Условный helper использует `=== false`, `composing` и `disabled`, без
|
|
108
|
+
измерения private DOM; min/max ограничивают всю surface независимо от helper.
|
|
109
|
+
`STextareaApi.selectAll(focusOwner?: boolean): void` выделяет
|
|
110
|
+
`[0, currentNativeValue.length]` с direction `forward` через общий selection
|
|
111
|
+
owner. Default `true` запрашивает native focus; `false` его не меняет.
|
|
112
|
+
Readonly и non-rendered controls допускают selection; disabled/detached focus
|
|
113
|
+
зависит от native eligibility. Исходные CRLF/Unicode bytes, model и input/history
|
|
114
|
+
не меняются; текущий native value учитывает неподтверждённый controlled input.
|
|
115
|
+
Unavailable/disposed owner и non-boolean policy завершаются явной ошибкой.
|
|
116
|
+
`SDockRegion.keepMounted?: boolean` имеет default `false` и сохраняет
|
|
117
|
+
default disposal при скрытии. `true` сохраняет тот же slot owner, включая
|
|
118
|
+
initial hidden; `hidden`/`inert` исключают layout, Tab, pointer и accessibility,
|
|
119
|
+
а resize handle освобождается с typed cancellation активного drag.
|
|
120
|
+
Повторное отображение не перехватывает внешний focus. `true → false` при
|
|
121
|
+
скрытии и unmount освобождают содержимое. Transport/imperative buffers принадлежат
|
|
122
|
+
consumer; terminal `open()` требует visible connected host с positive extent.
|
|
123
|
+
Вложенные UI-kit overlays, включая Teleport, следуют `visible`: скрытие
|
|
124
|
+
завершает registered/pending cycles, освобождает leases/body lock и не
|
|
125
|
+
возвращает focus скрытому trigger. Initial hidden запрещает opening;
|
|
126
|
+
retired controlled `open=true` получает один close intent и требует свежего
|
|
127
|
+
`false → true`. Вложенные dock сочетают admission через AND; независимые
|
|
128
|
+
sibling overlays и consumer-owned arbitrary portals не затрагиваются.
|
|
68
129
|
`SModal.headingLevel` и `SDrawer.headingLevel` принимают только `1 | 2 | 3 | 4 |
|
|
69
130
|
5 | 6`, используют `2` по умолчанию и сохраняют связь видимого заголовка с
|
|
70
131
|
dialog surface через `aria-labelledby`.
|
|
132
|
+
`SModal.size="4xl"` задаёт responsive maximum `56rem`; при ошибке дочернего
|
|
133
|
+
mount modal освобождает body lock, layer registration и owned teleport nodes.
|
|
134
|
+
`SDrawer.placement` принимает `left | right | bottom` с default `right`.
|
|
135
|
+
Боковые размещения физические, не зависят от text direction и используют
|
|
136
|
+
общий size/scroll/focus owner; `left` зеркалирует сторону панели и её chrome.
|
|
137
|
+
В contained-режиме `extent` задаёт ширину для `left/right` и высоту для `bottom`.
|
|
138
|
+
`SOverlayHost` предоставляет default content и `#overlay` siblings.
|
|
139
|
+
`SDrawer.scope="contained"` требует этот host, оставляет внешний ввод доступным
|
|
140
|
+
и не объявляется глобально модальным. `extent` — конечный процент `(0,100]`
|
|
141
|
+
доступной области; без него `size=sm/md/lg` задаёт `50/70/90` процентов по оси
|
|
142
|
+
placement. `extent` запрещён для viewport-режима. `scrollBehavior="content"`
|
|
143
|
+
делегирует прокрутку дочернему viewport без второго scroll owner/полей.
|
|
144
|
+
Закрытие/retirement завершают дочерние overlay leases в общем stack; consumer
|
|
145
|
+
обрабатывает `update:open`, повторное открытие требует явного нового open-cycle.
|
|
146
|
+
`SPopover` сохраняет native anchor и исходного focus owner trigger-запроса до
|
|
147
|
+
подтверждения controlled `open`, без перехвата последующего внешнего фокуса.
|
|
148
|
+
Программный `close()` отменяет ожидающий запрос через `update:open=false`.
|
|
149
|
+
Ширина `trigger` является минимальной шириной anchor, `content` — intrinsic,
|
|
150
|
+
`sm/md/lg` — viewport-bounded `20/28/36rem`. Chrome и focus owner используют
|
|
151
|
+
единые bounds; прозрачная поверхность задаёт всему dialog максимум `90vw`,
|
|
152
|
+
при `width="trigger"` минимальная ширина anchor имеет приоритет.
|
|
153
|
+
`SDropdownMenu` публикует controlled `open`, `defaultOpen`, размещение
|
|
154
|
+
`auto | bottom | top`, `closeOnSelect`, semantic group entries и доступные
|
|
155
|
+
описания пунктов. Dropdown, контекстные и вложенные меню используют доступную
|
|
156
|
+
область viewport и собственную прокрутку полной коллекции. Размещение задаёт
|
|
157
|
+
предпочтительную сторону с collision/flip; keyboard focus раскрывает строку
|
|
158
|
+
внутри menu surface без прокрутки документа. Внутренний scroll сохраняет
|
|
159
|
+
открытое меню и parent layer; высота учитывает viewport и содержимое без
|
|
160
|
+
consumer `max-height` или дочерних CSS-переопределений.
|
|
161
|
+
Home/End раскрывают строку после ручной прокрутки; при отсутствии места по обеим
|
|
162
|
+
inline-сторонам вложенное меню использует доступную верхнюю/нижнюю сторону общего
|
|
163
|
+
collision owner.
|
|
164
|
+
`SCollapsiblePanel` связывает compact/dense density с
|
|
165
|
+
32-пиксельной disclosure geometry через публичный API `SButton`.
|
|
166
|
+
`SStatus` использует общую feedback tone-пару; `neutral` соответствует
|
|
167
|
+
`secondary`. Текстовый статус в passive content `SButton` использует foreground
|
|
168
|
+
интерактивной поверхности во всех доступных состояниях. `appearance="soft"`
|
|
169
|
+
владеет собственной фоновой/текстовой парой. `tone`, подпись, иконка и live
|
|
170
|
+
semantics сохраняются; `SCollapsiblePanel.summaryStatus` использует тот же путь
|
|
171
|
+
без consumer color overrides.
|
|
71
172
|
`shared/data-display/SScrollViewport.vue` владеет accessible scroll region,
|
|
72
173
|
разрешёнными осями, semantic block size, root-only keyboard navigation и
|
|
73
174
|
ResizeObserver lifecycle. `shared/data-display/scrollViewport` экспортирует
|
|
@@ -83,7 +184,7 @@ Primary groups:
|
|
|
83
184
|
|
|
84
185
|
- `layout/*` — application shells, dock regions, stacks, and workbench layouts;
|
|
85
186
|
- `shared/controls/*` — buttons, fields, inputs, selects, menus, and selection controls;
|
|
86
|
-
- `shared/containers/*` — panels, modal, drawer, popover, and sidebars;
|
|
187
|
+
- `shared/containers/*` — panels, modal, drawer, overlay host, popover, and sidebars;
|
|
87
188
|
- `shared/data-display/*` — badges, tables, code, JSON, progress, status, and tooltips;
|
|
88
189
|
- `shared/navigation/*` — tabs, breadcrumbs, catalog navigation, and wizard steps;
|
|
89
190
|
- `shared/database/*`, `shared/graph/*`, `shared/persona/*` — complex domain surfaces;
|
|
@@ -101,12 +202,36 @@ Consumer type checkers do not compile internal SFCs or resolve their runtime
|
|
|
101
202
|
dependencies through a package-manager-specific layout. The build uses the
|
|
102
203
|
`target/lib: ES2020` baseline from `@vue/tsconfig/tsconfig.dom.json` and does not
|
|
103
204
|
require implicit polyfills.
|
|
205
|
+
`icons` exports named tree-shakeable components, including `HardDrive`, `Usb`,
|
|
206
|
+
`Disc`, `CalendarDays`, `ArrowUpRight`, `Paperclip`, `GitFork`, `ZoomIn`, `ZoomOut`,
|
|
207
|
+
`RotateCw`, `Volume2`, `Radio`, `Pause`, `ChevronLeft`, and `Zap`. `Zap` represents
|
|
208
|
+
a lightning bolt for the fast-model role and retains its primary-only silhouette
|
|
209
|
+
in every color mode. `Pause` represents
|
|
210
|
+
a paused state; `ChevronLeft` represents leftward navigation. `Radio` represents network broadcast or a
|
|
211
|
+
background notification, not a radio input. `ZoomIn` and `ZoomOut` represent zoom actions,
|
|
212
|
+
`RotateCw` clockwise rotation, and `Volume2` a speaker with two sound waves.
|
|
213
|
+
They share the icon contract with
|
|
214
|
+
`classic | sputnig` sets, `auto | duotone | monochrome` color modes, and the
|
|
215
|
+
control owner's semantic sizing when passed through an icon slot.
|
|
104
216
|
Table types are imported from `shared/data-display/table`; chart types are
|
|
105
217
|
imported from `shared/data-display/chart`; diff types and its pure computation
|
|
106
218
|
function are imported from `shared/data-display/diff`. `SDiffViewer` accepts
|
|
107
219
|
exact-text snapshots, renders unified or split presentation, virtualizes lines,
|
|
108
220
|
and manages worker computation for large inputs. Source replacement and unmount
|
|
109
221
|
cancel obsolete work, and a completed stale result is never published.
|
|
222
|
+
`SProgressBar.shape="circular"` exposes 24/28/32 px measured progress through
|
|
223
|
+
the existing numerical/accessibility owner. Circular determinate progress
|
|
224
|
+
requires an explicit value in 0–100. `showValue` rounds only the displayed
|
|
225
|
+
percentage, retaining precise `aria-valuenow`; `valueText` provides a domain
|
|
226
|
+
description. Estimated accuracy requires `valueText` and a visible approximation
|
|
227
|
+
marker. Explicit unknown mode requires `valueText`, rejects `value`, and omits
|
|
228
|
+
the numerical value and animation. The passive circular root supports phrasing
|
|
229
|
+
composition in a button with decorative accessibility; the button owns the
|
|
230
|
+
action and accessible name. The public recipe uses `SButton.appearance="ghost"`,
|
|
231
|
+
`iconOnly`, `shape="circle"`, `size="lg"`, and default density for a 48×48 px
|
|
232
|
+
target. Default linear/determinate behavior is preserved;
|
|
233
|
+
its scoped default slot receives the exact value. Circular progress rejects a
|
|
234
|
+
supplied default slot and owns central numerical and uncertainty display.
|
|
110
235
|
`SChart` unifies
|
|
111
236
|
line/area/bar/pie/donut charts, responsive geometry, the semantic palette, and
|
|
112
237
|
an accessible data table. `SMetricCard` accepts a compact chart through
|
|
@@ -118,6 +243,17 @@ the editor runtime. `SChip.surface` owns action/link semantics, while
|
|
|
118
243
|
compositions keep primary activation and additional controls as siblings inside
|
|
119
244
|
one chrome; `actionsLayout`/`trailingLayout` control inline, stacked, and
|
|
120
245
|
container-responsive layout.
|
|
246
|
+
`SInteractiveSurface.tooltipTrigger` accepts the complete combined `trigger`
|
|
247
|
+
from the `STooltip` default slot and binds ARIA, pointer/focus events, and the
|
|
248
|
+
element ref to the primary activation owner for action, link `href`, and Vue
|
|
249
|
+
Router `to`. A link surface requires exactly one target and an accessible name;
|
|
250
|
+
`to` requires Vue Router installed in the application. A static surface rejects
|
|
251
|
+
the tooltip binding. Sibling `#actions` retain independent focus and activation.
|
|
252
|
+
The tooltip opens on pointer/focus and closes with Escape.
|
|
253
|
+
The passive tooltip panel supports hover without focus or a Tab stop; leaving
|
|
254
|
+
the target and panel closes it after `hideDelay`. Escape cancels a pending
|
|
255
|
+
`showDelay` without consuming another overlay's event. Blur, a hidden document,
|
|
256
|
+
disabled state, and target release terminate the activation lease and listeners.
|
|
121
257
|
`SUiKitLocaleProvider` selects `en | ru | zh-CN | zh-TW` for one Vue subtree,
|
|
122
258
|
while `composables/useUiKitLocale` exports the readonly context, the complete
|
|
123
259
|
locale list, and message/override/key types. The provider renders no DOM owner
|
|
@@ -138,12 +274,80 @@ and trust flags are not part of the API.
|
|
|
138
274
|
`sm/md/lg = 32/36/40 px` with `12/14/14 px` label typography. The matching
|
|
139
275
|
`SInputText.density="compact"` exposes the same field geometry without consumer
|
|
140
276
|
CSS.
|
|
141
|
-
`SInputText.minLength` and `
|
|
277
|
+
`SInputText.minLength`/`maxLength` and `STextarea.minLength`/`maxLength` pass strict non-negative safe
|
|
142
278
|
integers to the native textual input. `minLength <= maxLength` is validated
|
|
143
279
|
before rendering, and numeric/temporal families reject this contract.
|
|
280
|
+
`STextareaContentContext.hasMultipleVisualLines` is `false` for one native
|
|
281
|
+
visual line, `true` for multiple lines, and `null` when layout is unavailable
|
|
282
|
+
(SSR/hidden/zero width). The editing/resize owner measures soft wrapping and
|
|
283
|
+
hard newlines; an empty value has one line once layout is available. Conditional
|
|
284
|
+
helpers use `=== false`, `composing` and `disabled`, without private DOM
|
|
285
|
+
measurement. Min/max bounds include the complete surface independently of the
|
|
286
|
+
helper visibility policy.
|
|
287
|
+
`STextareaApi.selectAll(focusOwner?: boolean): void` selects
|
|
288
|
+
`[0, currentNativeValue.length]` forward through the shared selection owner.
|
|
289
|
+
The default `true` requests native focus; `false` leaves it unchanged.
|
|
290
|
+
Readonly and non-rendered controls support selection; disabled/detached focus
|
|
291
|
+
follows native eligibility. Source CRLF/Unicode bytes, model, and input/history
|
|
292
|
+
are unchanged; the current native value includes unacknowledged controlled input.
|
|
293
|
+
An unavailable/disposed owner or non-boolean policy throws an explicit error.
|
|
294
|
+
`SDockRegion.keepMounted?: boolean` defaults to `false`, preserving disposal
|
|
295
|
+
on hide. `true` retains the same slot owner, including initially hidden content;
|
|
296
|
+
`hidden`/`inert` exclude layout, Tab, pointer, and accessibility, while the
|
|
297
|
+
resize handle retires with typed cancellation of an active drag.
|
|
298
|
+
Showing does not steal external focus. Hidden `true → false` and unmount
|
|
299
|
+
dispose the content. Transport/imperative buffers remain consumer-owned;
|
|
300
|
+
terminal `open()` requires a visible, connected host with positive extent.
|
|
301
|
+
Nested UI-kit overlays, including Teleports, follow `visible`: hiding retires
|
|
302
|
+
registered/pending cycles, releases leases/body locks, and never restores focus
|
|
303
|
+
to a hidden trigger. Initially hidden content cannot open overlays; retired
|
|
304
|
+
controlled `open=true` receives one close intent and needs a fresh `false → true`
|
|
305
|
+
request. Nested docks compose admission with AND; independent sibling overlays
|
|
306
|
+
and arbitrary consumer-owned portals are unaffected.
|
|
144
307
|
`SModal.headingLevel` and `SDrawer.headingLevel` accept `1 | 2 | 3 | 4 | 5 | 6`
|
|
145
308
|
only, default to `2`, and preserve the visible-title relationship with the
|
|
146
309
|
dialog surface through `aria-labelledby`.
|
|
310
|
+
`SModal.size="4xl"` provides a responsive `56rem` maximum; a failed child mount
|
|
311
|
+
releases body lock, layer registration, and owned teleport nodes.
|
|
312
|
+
`SDrawer.placement` accepts `left | right | bottom`, defaulting to `right`.
|
|
313
|
+
Side placements are physical, independent of text direction, and share the
|
|
314
|
+
size/scroll/focus owner; `left` mirrors the panel edge and its chrome.
|
|
315
|
+
Contained `extent` specifies width for `left/right` and height for `bottom`.
|
|
316
|
+
`SOverlayHost` provides default content and `#overlay` sibling regions.
|
|
317
|
+
`SDrawer.scope="contained"` requires that host, keeps external input available,
|
|
318
|
+
and is not globally modal. `extent` is a finite percentage `(0,100]` of the
|
|
319
|
+
available region; without it, `size=sm/md/lg` specifies `50/70/90` percent along
|
|
320
|
+
the placement axis. Viewport mode rejects `extent`. `scrollBehavior="content"`
|
|
321
|
+
delegates scrolling to a child viewport without a second scroll owner/padding.
|
|
322
|
+
Close/retirement retires descendant overlay leases in the shared stack; the
|
|
323
|
+
consumer handles `update:open` and an explicit new open-cycle controls reopening.
|
|
324
|
+
`SPopover` preserves the native anchor and original focus owner of a trigger
|
|
325
|
+
request through controlled `open` acknowledgement without taking subsequent
|
|
326
|
+
external focus. Programmatic `close()` cancels a pending request with
|
|
327
|
+
`update:open=false`.
|
|
328
|
+
The `trigger` width is the anchor minimum, `content` is intrinsic, and
|
|
329
|
+
`sm/md/lg` are viewport-bounded `20/28/36rem`. Chrome and focus owner share
|
|
330
|
+
the same bounds; a transparent surface sets the entire dialog's maximum to `90vw`.
|
|
331
|
+
With `width="trigger"`, the anchor minimum takes precedence.
|
|
332
|
+
`SDropdownMenu` exposes controlled `open`, `defaultOpen`,
|
|
333
|
+
`auto | bottom | top` placement, `closeOnSelect`, semantic group entries, and
|
|
334
|
+
accessible item descriptions. Dropdown, context, and nested menus use the
|
|
335
|
+
available viewport and own scrolling of the complete inventory. Placement
|
|
336
|
+
specifies a preferred side with collision/flip; keyboard focus reveals its row
|
|
337
|
+
inside the menu surface without scrolling the document. Internal scrolling
|
|
338
|
+
preserves the open menu and parent layer; height follows the viewport and
|
|
339
|
+
content without consumer `max-height` or child CSS overrides.
|
|
340
|
+
Home/End reveal the current row after manual scrolling; when neither inline
|
|
341
|
+
side fits a submenu, it uses the available top/bottom side of the shared
|
|
342
|
+
collision owner.
|
|
343
|
+
`SCollapsiblePanel` maps compact/dense density to
|
|
344
|
+
the 32px disclosure geometry through the public `SButton` API.
|
|
345
|
+
`SStatus` uses the shared feedback tone pair; `neutral` maps to `secondary`.
|
|
346
|
+
A text status in `SButton` passive content uses the interactive surface's
|
|
347
|
+
foreground across its available states. `appearance="soft"` owns its
|
|
348
|
+
background/text pair. Tone, label, icon, and live semantics are preserved;
|
|
349
|
+
`SCollapsiblePanel.summaryStatus` uses the same path without consumer color
|
|
350
|
+
overrides.
|
|
147
351
|
`shared/data-display/SScrollViewport.vue` owns the accessible scroll region,
|
|
148
352
|
enabled axes, semantic block size, root-only keyboard navigation, and
|
|
149
353
|
ResizeObserver lifecycle. `shared/data-display/scrollViewport` exports
|