@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/rich-document.md
CHANGED
|
@@ -25,11 +25,13 @@ import SRichDocument from '@pgcorp/ui-kit/shared/data-display/SRichDocument.vue'
|
|
|
25
25
|
import {
|
|
26
26
|
SRichDocumentContractError,
|
|
27
27
|
validateRichDocument,
|
|
28
|
+
validateRichDocumentModel,
|
|
28
29
|
validateRichDocumentResources,
|
|
29
30
|
type SRichDocumentActionIntent,
|
|
30
31
|
type SRichDocumentResource,
|
|
31
32
|
type SRichDocumentResourceActivate,
|
|
32
33
|
type SRichDocumentV1,
|
|
34
|
+
type SRichHeadingPresentation,
|
|
33
35
|
} from '@pgcorp/ui-kit/shared/data-display/richDocument'
|
|
34
36
|
```
|
|
35
37
|
|
|
@@ -50,6 +52,7 @@ at the application boundary.
|
|
|
50
52
|
```ts
|
|
51
53
|
const document = validateRichDocument(workerMessage.document)
|
|
52
54
|
const resources = validateRichDocumentResources(apiResponse.resources)
|
|
55
|
+
const model = validateRichDocumentModel(document, resources)
|
|
53
56
|
```
|
|
54
57
|
|
|
55
58
|
`SRichDocumentContractError` содержит стабильный `code`, точный `path` и
|
|
@@ -73,16 +76,21 @@ try {
|
|
|
73
76
|
```
|
|
74
77
|
|
|
75
78
|
Links принимают относительные application paths и `http:`, `https:`, `mailto:`,
|
|
76
|
-
`tel:`. Resource records принимают относительные paths,
|
|
77
|
-
`blob:`.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
79
|
+
`tel:`, `irc:`, `ircs:`, `xmpp:`. Resource records принимают относительные paths,
|
|
80
|
+
`http:`, `https:` и `blob:`. Только image resources допускают raster data URL
|
|
81
|
+
по отдельному строгому контракту. Скриптовые, scheme-relative, неизвестные
|
|
82
|
+
protocols, пробелы, control characters и backslashes отклоняются. HTTP(S) URLs
|
|
83
|
+
не допускают userinfo (`username`/`password`); адресная семантика `irc:`,
|
|
84
|
+
`ircs:` и `xmpp:` сохраняется без общего запрета символа `@`. Валидатор не
|
|
85
|
+
переписывает URL, не исправляет protocol и не авторизует origin.
|
|
86
|
+
|
|
87
|
+
Links accept relative application paths and the listed inert link protocols.
|
|
88
|
+
Resources accept relative paths, HTTP(S), and blob URLs; image resources also
|
|
89
|
+
support the strict raster data contract below. Script and unknown protocols,
|
|
90
|
+
scheme-relative URLs, whitespace, control characters, and backslashes are
|
|
91
|
+
rejected. HTTP(S) userinfo is forbidden; other admitted protocols retain their
|
|
92
|
+
own address semantics. Validation preserves the exact URL and does not authorize
|
|
93
|
+
its origin.
|
|
86
94
|
|
|
87
95
|
## Модель документа / Document model
|
|
88
96
|
|
|
@@ -94,28 +102,29 @@ The closed model supports:
|
|
|
94
102
|
|
|
95
103
|
- paragraph, heading, strong, emphasis, inline code и links с optional
|
|
96
104
|
`current`-состоянием;
|
|
97
|
-
-
|
|
105
|
+
- distinct attention/importance, idiomatic/emphasis и strikethrough/deletion;
|
|
106
|
+
- insertion, quotation, sample, variable, monospace, ruby, rich
|
|
107
|
+
`keyboard`, superscript и subscript inline semantics;
|
|
108
|
+
- `hardBreak`, inline images, passive inline/block groups и sections;
|
|
109
|
+
- definition lists с отдельными rich terms и block descriptions;
|
|
98
110
|
- ordered/unordered и task lists с inert checked-state и обязательной доступной
|
|
99
111
|
меткой каждого task checkbox;
|
|
100
|
-
- quote, divider и keyboard-operable `disclosure` с текстовым summary;
|
|
101
|
-
- scoped footnote reference/definition/backlink, где DOM
|
|
102
|
-
renderer, а payload передаёт
|
|
112
|
+
- quote, divider и keyboard-operable `disclosure` с текстовым или rich summary;
|
|
113
|
+
- scoped anchors и повторные footnote reference/definition/backlink, где DOM
|
|
114
|
+
targets вычисляет renderer, а payload передаёт логические identities;
|
|
103
115
|
- code blocks с optional language, line numbers и label;
|
|
104
116
|
- inline/block math;
|
|
105
|
-
-
|
|
106
|
-
- image/file resources по ID;
|
|
117
|
+
- прямоугольные rich tables и структурные semantic tables с head/body/foot;
|
|
118
|
+
- callouts и image/file resources по ID, responsive image candidates;
|
|
107
119
|
- action groups с serializable action IDs.
|
|
108
120
|
|
|
109
|
-
Внутренняя навигация
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
intent-действиями. Task checkbox отображает readonly-состояние документа и не
|
|
113
|
-
эмитит обновления.
|
|
121
|
+
Внутренняя навигация anchors и сносок принадлежит renderer. Обычные `link`-узлы
|
|
122
|
+
остаются управляемыми intent-действиями. Task и inline checkbox отображают
|
|
123
|
+
readonly-состояние документа и не эмитят обновления.
|
|
114
124
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
Task checkboxes are read-only document state and do not emit updates.
|
|
125
|
+
The renderer owns local anchor and footnote navigation. Ordinary links remain
|
|
126
|
+
controlled intents. Task and inline checkboxes show read-only document state
|
|
127
|
+
without emitting updates.
|
|
119
128
|
|
|
120
129
|
```ts
|
|
121
130
|
const document = {
|
|
@@ -158,6 +167,342 @@ const resources = [{
|
|
|
158
167
|
}] as const satisfies readonly SRichDocumentResource[]
|
|
159
168
|
```
|
|
160
169
|
|
|
170
|
+
## Safe HTML projection profile
|
|
171
|
+
|
|
172
|
+
Таблица задаёт явное преобразование всех 53 тегов
|
|
173
|
+
[`hast-util-sanitize` defaultSchema 5.0.2](https://github.com/syntax-tree/hast-util-sanitize/blob/5.0.2/lib/schema.js)
|
|
174
|
+
в закрытые типы кита. Это producer boundary, а не HTML allowlist renderer.
|
|
175
|
+
Sanitized HAST не передаётся в `SRichDocument` напрямую. Legacy-теги получают
|
|
176
|
+
указанный semantic owner; произвольные HTML attributes и визуальные свойства
|
|
177
|
+
не становятся полями AST.
|
|
178
|
+
|
|
179
|
+
The table defines an explicit producer projection, not a raw HTML renderer.
|
|
180
|
+
Sanitized HAST is projected to the closed types; visual attributes, arbitrary
|
|
181
|
+
attributes, and unsupported structure are not passed through.
|
|
182
|
+
|
|
183
|
+
| Sanitized tag | Типизированное представление |
|
|
184
|
+
| --- | --- |
|
|
185
|
+
| `a` | `link`; local fragment → `anchorLink`; standalone ID target → metadata `anchorId` или `anchorTarget`; GFM footnote → explicit footnote node |
|
|
186
|
+
| `b` | `attention` → `b`, без семантики strong importance |
|
|
187
|
+
| `blockquote` | `quote`, optional `cite`, block children |
|
|
188
|
+
| `br` | `hardBreak` внутри inline content |
|
|
189
|
+
| `code` | `inlineCode`; внутри `pre` — содержимое `codeBlock` |
|
|
190
|
+
| `dd` | `definitionList.entries[].descriptions[]`, block children и metadata |
|
|
191
|
+
| `del` | `deletion`, optional `cite`/`dateTime` |
|
|
192
|
+
| `details` | `disclosure`, `summary`, optional `summaryChildren`/`open`, block children |
|
|
193
|
+
| `div` | `blockGroup` с block children |
|
|
194
|
+
| `dl` | `definitionList` с `entries` |
|
|
195
|
+
| `dt` | `definitionList.entries[].terms[]`, inline children и metadata |
|
|
196
|
+
| `em` | `emphasis` |
|
|
197
|
+
| `h1` | `heading`, `level: 1` |
|
|
198
|
+
| `h2` | `heading`, `level: 2`; explicit sanitized assistive semantics → `presentation: 'assistive'` |
|
|
199
|
+
| `h3` | `heading`, `level: 3` |
|
|
200
|
+
| `h4` | `heading`, `level: 4` |
|
|
201
|
+
| `h5` | `heading`, `level: 5` |
|
|
202
|
+
| `h6` | `heading`, `level: 6` |
|
|
203
|
+
| `hr` | `divider` |
|
|
204
|
+
| `i` | `idiomatic` → `i`, без семантики emphasis |
|
|
205
|
+
| `img` | `inlineImage` в phrasing content; `image` в block content; resource admission обязателен |
|
|
206
|
+
| `input` | Только disabled checkbox: `inlineCheckbox` или task `listItem.checked`, с доступной меткой |
|
|
207
|
+
| `ins` | `insertion`, optional `cite`/`dateTime` |
|
|
208
|
+
| `kbd` | `keyboard` с `value` **либо** inline `children`, в том числе вложенными `keyboard` |
|
|
209
|
+
| `li` | `listItem`; optional `value` только внутри ordered list |
|
|
210
|
+
| `ol` | `list`, `ordered: true`, optional `start` |
|
|
211
|
+
| `p` | `paragraph` с inline children |
|
|
212
|
+
| `picture` | `inlineImage` или `image` с `pictureSources` и base `resourceId` |
|
|
213
|
+
| `pre` | `codeBlock`, код как строка; optional language/label/line numbers |
|
|
214
|
+
| `q` | `quotation`, optional `cite`, inline children |
|
|
215
|
+
| `rp` | `rubyFallback`, только прямой child `ruby` |
|
|
216
|
+
| `rt` | `rubyText`, только прямой child `ruby` |
|
|
217
|
+
| `ruby` | `ruby`, последовательность inline base/`rubyText`/`rubyFallback` |
|
|
218
|
+
| `s` | `strikethrough` → `s`, не deletion/edit |
|
|
219
|
+
| `samp` | `sample` |
|
|
220
|
+
| `section` | `section` с block children; GFM footnote section сохраняет label `heading` и explicit `footnoteDefinition` nodes |
|
|
221
|
+
| `source` | `pictureSources[]`, только admitted typed candidate IDs |
|
|
222
|
+
| `span` | `inlineGroup`; math-inline marker → `mathInline` с source строкой |
|
|
223
|
+
| `strike` | `strikethrough` → `s` по явному producer projection contract |
|
|
224
|
+
| `strong` | `strong` |
|
|
225
|
+
| `sub` | `subscript` |
|
|
226
|
+
| `summary` | `disclosure.summary` + optional rich `summaryChildren`; отдельный root-node не принимается |
|
|
227
|
+
| `sup` | `superscript`; footnote markup → explicit `footnoteReference` |
|
|
228
|
+
| `table` | `table` для прямоугольной модели или `semanticTable` для структуры/объединений |
|
|
229
|
+
| `tbody` | `semanticTable.body`, optional `bodyMetadata` |
|
|
230
|
+
| `td` | `semanticTable` cell `type: 'data'` |
|
|
231
|
+
| `tfoot` | `semanticTable.foot`, optional `footMetadata` |
|
|
232
|
+
| `th` | `semanticTable` cell `type: 'header'`; rich column header в прямоугольной модели |
|
|
233
|
+
| `thead` | `semanticTable.head`, optional `headMetadata` |
|
|
234
|
+
| `tr` | Row со своим `cells` и semantic metadata |
|
|
235
|
+
| `tt` | `monospace` → `code` DOM owner, без obsolete `tt` |
|
|
236
|
+
| `ul` | `list`, `ordered: false` |
|
|
237
|
+
| `var` | `variable` |
|
|
238
|
+
|
|
239
|
+
`tt` и `strike` относятся к
|
|
240
|
+
[obsolete HTML features](https://html.spec.whatwg.org/multipage/obsolete.html#non-conforming-features).
|
|
241
|
+
Проекция сохраняет явно выбранную семантику кита, а не воспроизводит obsolete
|
|
242
|
+
HTML. Для исходника с иной доменной семантикой producer выбирает подходящий
|
|
243
|
+
typed node до сериализации; downstream renderer не угадывает намерение.
|
|
244
|
+
|
|
245
|
+
`attention`/`strong`, `idiomatic`/`emphasis`, `strikethrough`/`deletion` —
|
|
246
|
+
отдельные типы с отдельными native semantic owners. Типография принадлежит
|
|
247
|
+
киту, но визуальное сходство не заменяет значение HTML-элемента.
|
|
248
|
+
|
|
249
|
+
## Представление заголовка / Heading presentation
|
|
250
|
+
|
|
251
|
+
`heading.presentation` принимает `visible | assistive`; отсутствие поля
|
|
252
|
+
означает `visible`. Тип экспортируется как `SRichHeadingPresentation`.
|
|
253
|
+
`assistive` визуально скрывает сам native `h1`–`h6` вне normal flow: heading не
|
|
254
|
+
создаёт строку или дополнительный gap в document/section/group layout. Уровень,
|
|
255
|
+
phrasing content, `anchorId`, naming и description metadata сохраняются.
|
|
256
|
+
`hidden`, `aria-hidden` и `display: none` для этого режима не применяются.
|
|
257
|
+
|
|
258
|
+
Скрытый heading не содержит `link`, `anchorLink`, `footnoteReference`,
|
|
259
|
+
`footnoteBacklink` или `inlineCheckbox`, в том числе внутри formatting/ruby.
|
|
260
|
+
Нарушение даёт `invalid_structure` по пути конкретного потомка. Неизвестное
|
|
261
|
+
значение presentation даёт `invalid_value` по `.presentation`. Passive semantic
|
|
262
|
+
anchors и heading anchor сохраняют programmatic `tabindex=-1`, без Tab stop;
|
|
263
|
+
явный `anchorLink` переводит фокус на локальный heading, следующая Tab продолжает
|
|
264
|
+
native focus order. Native `th` content restrictions действуют независимо от
|
|
265
|
+
presentation.
|
|
266
|
+
|
|
267
|
+
A heading defaults to `visible`. The `assistive` presentation preserves its
|
|
268
|
+
native level, content and scoped metadata without consuming a normal-flow row
|
|
269
|
+
or layout gap. Interactive descendants are rejected recursively at their exact
|
|
270
|
+
source path; programmatic semantic anchors remain available without adding Tab
|
|
271
|
+
stops. The native table-header content model is unchanged.
|
|
272
|
+
|
|
273
|
+
GFM producer проецирует admitted `h2#footnote-label` с семантикой `sr-only` в
|
|
274
|
+
`heading` с `level: 2`, `presentation: 'assistive'` и точным sanitized
|
|
275
|
+
`anchorId`. `section[data-footnotes]` сохраняет этот heading вместе с
|
|
276
|
+
definitions; references сохраняют `describedBy` на тот же logical ID.
|
|
277
|
+
Sanitizer prefix, текст и уровень не угадываются и не переписываются.
|
|
278
|
+
Произвольный `className` не входит в AST: semantic mapping выполняется явно на
|
|
279
|
+
producer boundary. Удаление label или `describedBy` не является преобразованием
|
|
280
|
+
этого профиля.
|
|
281
|
+
Default GFM footer не объявляет имя section: producer не добавляет ей
|
|
282
|
+
`labelledBy` только из-за наличия hidden heading. Явные section naming fields
|
|
283
|
+
сохраняются, если они присутствуют в source contract.
|
|
284
|
+
|
|
285
|
+
```ts
|
|
286
|
+
const footnoteLabel = {
|
|
287
|
+
type: 'heading',
|
|
288
|
+
level: 2,
|
|
289
|
+
presentation: 'assistive',
|
|
290
|
+
anchorId: 'user-content-footnote-label',
|
|
291
|
+
children: [{ type: 'text', value: 'Footnotes' }],
|
|
292
|
+
} as const
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
A GFM projection retains its sanitized footnote-label heading, definitions and
|
|
296
|
+
reference `describedBy` relationships. It maps admitted assistive semantics
|
|
297
|
+
explicitly rather than forwarding raw CSS classes, dropping labels or changing
|
|
298
|
+
sanitizer identities.
|
|
299
|
+
The default GFM footer does not name its section. Section naming is preserved
|
|
300
|
+
only when declared by the source; it is not inferred from the hidden heading.
|
|
301
|
+
The [GFM footer implementation](https://github.com/syntax-tree/mdast-util-to-hast/blob/13.2.1/lib/footer.js)
|
|
302
|
+
declares the heading, while the [reference implementation](https://github.com/syntax-tree/mdast-util-to-hast/blob/13.2.1/lib/handlers/footnote-reference.js)
|
|
303
|
+
declares its description relationship.
|
|
304
|
+
|
|
305
|
+
## Metadata, anchors и сноски / Metadata and local navigation
|
|
306
|
+
|
|
307
|
+
`SRichSemanticMetadata` содержит только `anchorId`, `title`, `lang`, `direction`,
|
|
308
|
+
`accessibleLabel`, `labelledBy`, `describedBy`. `lang` — well-formed BCP47 tag,
|
|
309
|
+
`direction` — `ltr | rtl | auto`. Accessibility references — массивы logical
|
|
310
|
+
anchor IDs того же документа. `class`, `style`, DOM `id`, `tabindex`, handlers,
|
|
311
|
+
произвольные ARIA/HTML attrs не принимаются. Plain `text` и `hardBreak` не имеют
|
|
312
|
+
semantic metadata.
|
|
313
|
+
|
|
314
|
+
Metadata naming соответствует native semantics, а не применяется ко всем
|
|
315
|
+
элементам одинаково. `SRichPassiveMetadata` запрещает `accessibleLabel` и
|
|
316
|
+
`labelledBy`, сохраняя `anchorId`, `title`, `lang`, `direction`, `describedBy`.
|
|
317
|
+
|
|
318
|
+
| Metadata owner | Допустимые naming fields |
|
|
319
|
+
| --- | --- |
|
|
320
|
+
| `strong`, `emphasis`, `attention`, `idiomatic`, `deletion`, `strikethrough`, `insertion`, `quotation`, `sample`, `monospace`, `variable`, `keyboard`, `superscript`, `subscript`, `inlineCode`, `inlineGroup`, `anchorTarget`, `rubyText`, `rubyFallback`, `paragraph`, `blockGroup` | Passive metadata: без `accessibleLabel`/`labelledBy` |
|
|
321
|
+
| `mathInline`, `mathBlock`, `codeBlock`, `callout`, `resource`, `action`, `inlineCheckbox` | Passive wrapper metadata; собственные canonical `label`/`title` fields и control names принадлежат owner API |
|
|
322
|
+
| `ruby`, `link`, `anchorLink`, `footnoteReference`, `footnoteBacklink`, `inlineImage`, `image`, `heading`, `list`, `listItem`, `quote`, `disclosure`, `footnoteDefinition`, `section`, `divider`, `table`, `semanticTable`, table row/cell/row-group metadata, definition list/term/description, `actionGroup` | Semantic metadata с `accessibleLabel`/`labelledBy`; owner сохраняет соответствующую native/group семантику |
|
|
323
|
+
| `text`, `hardBreak` | Metadata отсутствует |
|
|
324
|
+
|
|
325
|
+
Программная focus target identity (`tabindex=-1` внутри owner) не добавляет
|
|
326
|
+
остановку последовательной Tab-навигации. Она не разрешает naming там, где
|
|
327
|
+
семантика HTML запрещает accessible name.
|
|
328
|
+
|
|
329
|
+
Одновременные `accessibleLabel` и `labelledBy` сохраняются на допустимом native
|
|
330
|
+
owner: `aria-labelledby` имеет стандартный приоритет над `aria-label` при
|
|
331
|
+
вычислении доступного имени. / Both explicit naming attributes are preserved;
|
|
332
|
+
the browser applies native `aria-labelledby` precedence over `aria-label`.
|
|
333
|
+
|
|
334
|
+
Metadata is closed and follows native naming rules. Passive owners reject
|
|
335
|
+
accessible-label/labelled-by metadata; canonical control labels remain in their
|
|
336
|
+
own API. Accessibility references resolve inside the same document. Consumers
|
|
337
|
+
do not supply DOM IDs, classes, styles, tab stops, or handlers through nodes.
|
|
338
|
+
|
|
339
|
+
Текстовый контент и доступное имя имеют разные контракты. Пустые `text`,
|
|
340
|
+
paragraph, inline code и пустые ordered/unordered lists сохраняются как
|
|
341
|
+
допустимая семантика документа. Canonical `summary`, column `header`, table и
|
|
342
|
+
action-group `label`, action/resource/footnote/checkbox labels содержат хотя бы
|
|
343
|
+
один непробельный символ. Optional naming fields проверяются по тому же правилу
|
|
344
|
+
при наличии; валидатор сохраняет строку, а не обрезает её.
|
|
345
|
+
|
|
346
|
+
`link` и `anchorLink` требуют объявленный источник имени: `accessibleLabel`,
|
|
347
|
+
`labelledBy`, непустой `title` либо читаемый phrasing content. Image-only link
|
|
348
|
+
получает имя из `alt` admitted image resource; этот инвариант проверяет
|
|
349
|
+
`validateRichDocumentModel(document, resources)`, поскольку отдельный document
|
|
350
|
+
не содержит resource descriptors. Structural acceptance не заменяет проверку
|
|
351
|
+
итогового accessible name в браузере.
|
|
352
|
+
|
|
353
|
+
Empty content is valid where native document semantics permits it. Control,
|
|
354
|
+
summary and table labels must contain non-whitespace content. Links require a
|
|
355
|
+
declared naming source; image-only link names are checked against admitted alt
|
|
356
|
+
text at the complete model boundary. The validator preserves strings and does
|
|
357
|
+
not emulate the browser's accessible-name computation.
|
|
358
|
+
|
|
359
|
+
Идентификаторы anchors/occurrences сохраняют точный Unicode, без case folding,
|
|
360
|
+
slugification, trim или удаления sanitizer prefix. Пробелы, control characters
|
|
361
|
+
и malformed surrogate pairs запрещены; unknown/duplicate targets дают ошибку
|
|
362
|
+
по точному source path. Anchor IDs имеют предел 256 символов, footnote IDs —
|
|
363
|
+
128. Producer задаёт identity явно: heading text не используется для её
|
|
364
|
+
угадывания.
|
|
365
|
+
|
|
366
|
+
`anchorLink.anchorId` ссылается на объявленный metadata anchor или
|
|
367
|
+
`anchorTarget`. HTML-fragment producer декодирует и сопоставляет в своей
|
|
368
|
+
serialization boundary; renderer получает уже точный logical ID, не raw hash.
|
|
369
|
+
Application URL и fragment navigation — разные typed nodes.
|
|
370
|
+
|
|
371
|
+
Renderer создаёт injective, mount-scoped DOM IDs, включая две копии документа
|
|
372
|
+
с одинаковым `document.id`. Локальный переход раскрывает закрытые ancestor
|
|
373
|
+
`details`, прокручивает цель и передаёт ей фокус. Следующая `Tab` продолжает
|
|
374
|
+
порядок фокуса от цели. `location.hash`, URL и browser history не меняются.
|
|
375
|
+
|
|
376
|
+
The renderer owns mount-scoped DOM identities. Navigation reveals closed
|
|
377
|
+
ancestor disclosures, scrolls and focuses the target, and preserves the URL,
|
|
378
|
+
hash, and browser history. Identical documents mounted together remain isolated.
|
|
379
|
+
|
|
380
|
+
`footnoteReference` и `footnoteBacklink` адресуют пару `id` + `occurrenceId`.
|
|
381
|
+
Для единственного reference `occurrenceId` можно опустить; для повторных
|
|
382
|
+
references producer задаёт уникальные occurrence IDs. Definition объявляется
|
|
383
|
+
один раз на `id`, а backlink выбирает конкретный reference occurrence. Метки
|
|
384
|
+
`label` обязательны, визуальный `marker` необязателен.
|
|
385
|
+
|
|
386
|
+
```ts
|
|
387
|
+
const repeatedNotes = {
|
|
388
|
+
version: 1,
|
|
389
|
+
id: 'notes',
|
|
390
|
+
nodes: [
|
|
391
|
+
{ type: 'heading', level: 2, anchorId: 'Раздел_日本', children: [{ type: 'text', value: 'Details' }] },
|
|
392
|
+
{ type: 'paragraph', children: [
|
|
393
|
+
{ type: 'anchorLink', anchorId: 'Раздел_日本', children: [{ type: 'text', value: 'Open details' }] },
|
|
394
|
+
{ type: 'footnoteReference', id: 'Примечание', occurrenceId: 'first', label: 'First note reference', marker: '1' },
|
|
395
|
+
{ type: 'footnoteReference', id: 'Примечание', occurrenceId: 'second', label: 'Second note reference', marker: '1' },
|
|
396
|
+
] },
|
|
397
|
+
{ type: 'footnoteDefinition', id: 'Примечание', label: 'Note', children: [
|
|
398
|
+
{ type: 'paragraph', children: [
|
|
399
|
+
{ type: 'text', value: 'Note content. ' },
|
|
400
|
+
{ type: 'footnoteBacklink', id: 'Примечание', occurrenceId: 'second', label: 'Return to second reference' },
|
|
401
|
+
] },
|
|
402
|
+
] },
|
|
403
|
+
],
|
|
404
|
+
} as const satisfies SRichDocumentV1
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
## Таблицы / Tables
|
|
408
|
+
|
|
409
|
+
`table` задаёт прямоугольную модель: непустые `columns`, стабильные column/row
|
|
410
|
+
IDs и одинаковое число inline cells в каждой строке. Column `header` —
|
|
411
|
+
обязательная непустая доступная метка. `headerChildren` задаёт rich inline
|
|
412
|
+
presentation, `headerPresentation: 'assistive'` визуально скрывает заголовок,
|
|
413
|
+
`align` принимает `left | center | right`.
|
|
414
|
+
|
|
415
|
+
`semanticTable` задаёт обязательные `label`/`body`, optional `caption` с inline
|
|
416
|
+
children, `head`, `foot` и соответствующие `headMetadata`, `bodyMetadata`,
|
|
417
|
+
`footMetadata`. Optional `columnGroups: readonly { span: number }[]` объявляет
|
|
418
|
+
native column groups, чья суммарная ширина равна ширине полной сетки; `scope:
|
|
419
|
+
'colgroup'` ссылается на диапазон объявленной группы. Row содержит `cells` и
|
|
420
|
+
metadata. Cell имеет:
|
|
421
|
+
|
|
422
|
+
- `type: 'header' | 'data'`;
|
|
423
|
+
- `content: 'inline' | 'block'` и соответствующий union `children`;
|
|
424
|
+
- optional `cellId`, `headers`, `rowSpan`, `colSpan`, `align` и metadata;
|
|
425
|
+
- `scope: 'row' | 'col' | 'rowgroup' | 'colgroup'` только у header cell.
|
|
426
|
+
|
|
427
|
+
`cellId` уникален в своей таблице. `headers` ссылается только на другие header
|
|
428
|
+
cells той же таблицы, а не на произвольные DOM IDs. Header content соблюдает
|
|
429
|
+
HTML-модель `th`: без heading/sectioning/header/footer descendants. Ограничение
|
|
430
|
+
рекурсивно включает `footnoteDefinition`, создающий named note, и neutral callout
|
|
431
|
+
с `title`, чей shared owner создаёт heading. Block data cells сохраняют
|
|
432
|
+
paragraph/list и другие допустимые block nodes.
|
|
433
|
+
|
|
434
|
+
Каждая row group образует полную прямоугольную сетку, ширина групп совпадает.
|
|
435
|
+
Spans не пересекаются; `rowSpan: 0` означает остаток текущей row group,
|
|
436
|
+
положительный `rowSpan` не выходит за её границы. `colSpan` — 1..100.
|
|
437
|
+
Некорректная сетка и missing header references отвергаются до DOM. Table,
|
|
438
|
+
sections, rows и cells используют общие semantic owners со `STable`; rich
|
|
439
|
+
document table не становится интерактивным data-grid и не добавляет row tab
|
|
440
|
+
stops.
|
|
441
|
+
|
|
442
|
+
The rectangular model supports rich/assistive column headers. The structural
|
|
443
|
+
model preserves head/body/foot groups, captions, row headers, explicit header
|
|
444
|
+
relations, spans, alignment, and inline/block cell content. Invalid grids,
|
|
445
|
+
cross-table references, and unsupported header descendants fail before render.
|
|
446
|
+
|
|
447
|
+
## Изображения и admission / Images and admission
|
|
448
|
+
|
|
449
|
+
`inlineImage` — phrasing content: отображается внутри paragraph/link/summary
|
|
450
|
+
без block `figure`. `image` — block content с optional inline `caption`.
|
|
451
|
+
Оба используют общий image presentation owner и `resourceId`, а не `src`.
|
|
452
|
+
Image resource содержит `id`, `kind: 'image'`, `url`, `alt` и optional `title`.
|
|
453
|
+
Пустой `alt` означает декоративное изображение.
|
|
454
|
+
|
|
455
|
+
`candidates` задаёт responsive набор resource IDs. Каждый candidate имеет
|
|
456
|
+
ровно один descriptor: положительный safe integer `width` либо положительный
|
|
457
|
+
finite `density`. Набор не смешивает descriptor families, значения уникальны.
|
|
458
|
+
`pictureSources` содержит optional `media` и отдельный `candidates` набор.
|
|
459
|
+
Каждый base/candidate/source resource должен существовать и иметь `kind:
|
|
460
|
+
'image'`. Raw `srcset`, `src`, HTML source strings и callbacks запрещены.
|
|
461
|
+
|
|
462
|
+
Raster data URL принимает canonical `data:image/<format>;base64,...`, где
|
|
463
|
+
`<format>` — только `png`, `jpeg`, `gif`, `webp` или `avif`, без дополнительных
|
|
464
|
+
parameters. Base64 и format signature должны
|
|
465
|
+
соответствовать заявленному MIME. SVG/HTML data, MIME mismatch и malformed data
|
|
466
|
+
отвергаются. Эта проверка admission не является полным декодером raster файла;
|
|
467
|
+
декодирование и выбор responsive source выполняет браузер.
|
|
468
|
+
|
|
469
|
+
Inline and block images resolve separately admitted resource IDs. Every
|
|
470
|
+
responsive candidate is validated, including picture-source branches. Raster
|
|
471
|
+
data admission verifies MIME, canonical base64, and format signatures; it does
|
|
472
|
+
not accept SVG or HTML payloads and is not a complete image decoder.
|
|
473
|
+
|
|
474
|
+
**Producer владеет network admission.** URL protocol validation не заменяет
|
|
475
|
+
origin/permissions policy. В privacy-preserving Markdown projection локальные
|
|
476
|
+
same-origin/blob/raster resources объявляются в `resources`; внешний media URL
|
|
477
|
+
представляется обычным controlled `link`, если его загрузка не разрешена.
|
|
478
|
+
Renderer не делает скрытое преобразование внешнего image в link: такое решение
|
|
479
|
+
принимается явно до AST serialization. Admitted image URL создаёт browser image
|
|
480
|
+
load; обычные link/resource intents не создают загрузку до consumer action.
|
|
481
|
+
Candidate URL проходит тот же admission, что и base image; добавление raw URL
|
|
482
|
+
через `pictureSources` не является отдельным каналом разрешения.
|
|
483
|
+
|
|
484
|
+
Producers own origin authorization. A declared image resource authorizes the
|
|
485
|
+
browser image load; protocol validation alone is not an origin policy. A
|
|
486
|
+
privacy-preserving producer projects unadmitted external media to controlled
|
|
487
|
+
links explicitly, without hidden renderer substitution or candidate bypasses.
|
|
488
|
+
|
|
489
|
+
## Rich summary
|
|
490
|
+
|
|
491
|
+
`disclosure.summary` — обязательная текстовая метка. `summaryChildren` задаёт
|
|
492
|
+
rich phrasing content: emphasis, code, keyboard, image и links. Без этого поля
|
|
493
|
+
отображается `summary`. Пассивный summary использует native `details`/`summary`.
|
|
494
|
+
Summary с links или inline control отображается рядом с отдельным SButton
|
|
495
|
+
disclosure toggle; содержимое и порядок rich nodes сохраняются. `Enter`/`Space`
|
|
496
|
+
на toggle переключают секцию, `open` задаёт начальное отображение. Ссылки имеют
|
|
497
|
+
собственный focus и intent, не являются потомками toggle и не переключают секцию.
|
|
498
|
+
Локальная anchor navigation раскрывает оба вида disclosure ancestors.
|
|
499
|
+
|
|
500
|
+
Passive summaries use native details/summary. Interactive rich summaries use a
|
|
501
|
+
separate native button owner beside the complete rich content, preserving link
|
|
502
|
+
focus and activation without nested interactive elements. The toggle exposes
|
|
503
|
+
aria-expanded/aria-controls; local navigation reveals native and composed owners.
|
|
504
|
+
Footnote definitions expose named note semantics, not page navigation landmarks.
|
|
505
|
+
|
|
161
506
|
## Controlled intents
|
|
162
507
|
|
|
163
508
|
Ссылки, resources и actions не выполняют application effects. Компонент эмитит
|
|
@@ -219,6 +564,78 @@ SSR renders stable safe fallbacks for code and math. After mount, the client
|
|
|
219
564
|
runtime replaces them with highlighted code and rendered math. The package uses
|
|
220
565
|
no CDN and runs no document parser inside the main-thread component.
|
|
221
566
|
|
|
567
|
+
## Worker snapshots и producer migration
|
|
568
|
+
|
|
569
|
+
Markdown parsing, `rehypeRaw`, sanitizer и HAST projection принадлежат
|
|
570
|
+
consumer worker. Main thread принимает сериализованный typed AST/resources,
|
|
571
|
+
проверяет `validateRichDocumentModel` и отображает результат. UI-kit не
|
|
572
|
+
включает Markdown parser в renderer и не принимает HAST, HTML или VNodes как
|
|
573
|
+
альтернативный вход. JSON text и structured-clone payloads используют один
|
|
574
|
+
контракт данных.
|
|
575
|
+
|
|
576
|
+
Parsing, sanitation, and HAST projection belong to the consumer worker. The
|
|
577
|
+
main thread receives and validates the serialized typed document/resources;
|
|
578
|
+
it does not rerun the document parser or mount sanitized HAST directly.
|
|
579
|
+
|
|
580
|
+
Producer выполняет проекцию законченного документа или согласованного
|
|
581
|
+
streaming snapshot целиком: forward anchors, footnote definitions и resource
|
|
582
|
+
references должны быть доступны в том же model. Неполная ссылка не становится
|
|
583
|
+
угадываемым target. Для streamed append immutable replacement сохраняет
|
|
584
|
+
порядок и содержимое существующего prefix и добавляет nodes в конец; renderer
|
|
585
|
+
сохраняет mounted prefix, focus и пользовательское раскрытие существующих
|
|
586
|
+
`details`. Изменения и переупорядочение содержимого — отдельные snapshots, не
|
|
587
|
+
implicit patch protocol.
|
|
588
|
+
|
|
589
|
+
Worker scheduling, cancellation и отбрасывание результатов отменённых jobs
|
|
590
|
+
принадлежат типизированному application job contract. Ошибка worker/parser/
|
|
591
|
+
projection/validation должна попадать в управляемое error state с диагностикой;
|
|
592
|
+
пустой документ, пропуск неизвестного tag, invalid resource или неприменённая
|
|
593
|
+
новая версия не служат silent fallback. Валидатор создаёт frozen result; он не
|
|
594
|
+
мутирует входной snapshot.
|
|
595
|
+
|
|
596
|
+
The application owns worker scheduling and cancellation. Complete snapshots
|
|
597
|
+
must resolve forward references. Immutable append preserves the unchanged
|
|
598
|
+
mounted prefix and its focus/disclosure state. Worker and contract errors are
|
|
599
|
+
explicit error states, not empty-document or dropped-node fallbacks.
|
|
600
|
+
|
|
601
|
+
Граница миграции existing producer adapter:
|
|
602
|
+
|
|
603
|
+
1. Сохранить worker parser/sanitizer и текущую origin/media admission policy.
|
|
604
|
+
2. Преобразовать каждый admitted tag по таблице profile, с точными metadata,
|
|
605
|
+
heading/HTML anchors и repeated footnote identities. Unknown или
|
|
606
|
+
непредставимая семантика даёт явную source-coordinate ошибку.
|
|
607
|
+
GFM footnote section сохраняет assistive label heading и reference
|
|
608
|
+
`describedBy`, включая точный sanitizer prefix.
|
|
609
|
+
3. Разделить inline/block image context. Все responsive candidates пройти
|
|
610
|
+
через тот же admission; не копировать raw `srcset` в AST.
|
|
611
|
+
4. Прямоугольные таблицы описать `table`; rich headers передать через
|
|
612
|
+
`headerChildren`. Row groups, spans, row headers и block cells описать
|
|
613
|
+
`semanticTable`, без consumer table markup/CSS.
|
|
614
|
+
5. Rich summary передать как `summaryChildren` и сохранить `summary` как
|
|
615
|
+
доступную текстовую метку. Обычные ссылки оставить controlled intents,
|
|
616
|
+
local fragments — `anchorLink`.
|
|
617
|
+
6. Валидировать document/resources совместно, передавать immutable snapshots,
|
|
618
|
+
обрабатывать точные ошибки и typed intents на application boundary.
|
|
619
|
+
7. Проверить реальные consumer документы: две одинаковые копии, Unicode IDs,
|
|
620
|
+
повторные сноски, закрытые nested sections, keyboard summary/link,
|
|
621
|
+
responsive local resources, streaming focus, SSR/hydration, обе темы и
|
|
622
|
+
узкий viewport.
|
|
623
|
+
|
|
624
|
+
Migration keeps the producer's worker and admission owners. Project explicitly
|
|
625
|
+
to typed semantic families; preserve exact identities, separate image context,
|
|
626
|
+
use structural tables where required, validate complete immutable models, and
|
|
627
|
+
verify the real consumer scenarios rather than a raw-HTML compatibility path.
|
|
628
|
+
|
|
629
|
+
## Пределы / Limits
|
|
630
|
+
|
|
631
|
+
`S_RICH_DOCUMENT_MAX_NODES` — 10 000 структурных узлов документа,
|
|
632
|
+
`S_RICH_DOCUMENT_MAX_DEPTH` — 32,
|
|
633
|
+
`S_RICH_DOCUMENT_MAX_TEXT_LENGTH` — 1 048 576 символов. Таблица имеет максимум
|
|
634
|
+
100 колонок. Nested implicit structures — cells, rows, definition members,
|
|
635
|
+
picture sources и column groups — входят в document budget; массивы и strings
|
|
636
|
+
имеют дополнительные field-level bounds. Превышение даёт `limit_exceeded` с
|
|
637
|
+
точным path; документ не обрезается.
|
|
638
|
+
|
|
222
639
|
## Версионирование / Versioning
|
|
223
640
|
|
|
224
641
|
`version` является частью persisted/transport contract. Не добавляйте
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pgcorp/ui-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "Typed Vue 3 design system with accessible components, semantic themes, and workbench patterns.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -176,6 +176,9 @@
|
|
|
176
176
|
"shared/containers/SModal.vue": [
|
|
177
177
|
"dist/src/components/shared/containers/SModal.vue.d.ts"
|
|
178
178
|
],
|
|
179
|
+
"shared/containers/SOverlayHost.vue": [
|
|
180
|
+
"dist/src/components/shared/containers/SOverlayHost.vue.d.ts"
|
|
181
|
+
],
|
|
179
182
|
"shared/containers/SPageHeader.vue": [
|
|
180
183
|
"dist/src/components/shared/containers/SPageHeader.vue.d.ts"
|
|
181
184
|
],
|
|
@@ -582,7 +585,7 @@
|
|
|
582
585
|
"import": "./dist/src/components/layout/types.js",
|
|
583
586
|
"default": "./dist/src/components/layout/types.js"
|
|
584
587
|
},
|
|
585
|
-
"./reference.css": "./
|
|
588
|
+
"./reference.css": "./dist/reference.css",
|
|
586
589
|
"./shared/codeLanguages": {
|
|
587
590
|
"types": "./dist/src/components/shared/codeLanguages.d.ts",
|
|
588
591
|
"import": "./dist/src/components/shared/codeLanguages.js",
|
|
@@ -673,6 +676,11 @@
|
|
|
673
676
|
"import": "./dist/src/components/shared/containers/SModal.vue.js",
|
|
674
677
|
"default": "./dist/src/components/shared/containers/SModal.vue.js"
|
|
675
678
|
},
|
|
679
|
+
"./shared/containers/SOverlayHost.vue": {
|
|
680
|
+
"types": "./dist/src/components/shared/containers/SOverlayHost.vue.d.ts",
|
|
681
|
+
"import": "./dist/src/components/shared/containers/SOverlayHost.vue.js",
|
|
682
|
+
"default": "./dist/src/components/shared/containers/SOverlayHost.vue.js"
|
|
683
|
+
},
|
|
676
684
|
"./shared/containers/SPageHeader.vue": {
|
|
677
685
|
"types": "./dist/src/components/shared/containers/SPageHeader.vue.d.ts",
|
|
678
686
|
"import": "./dist/src/components/shared/containers/SPageHeader.vue.js",
|
|
@@ -1159,7 +1167,7 @@
|
|
|
1159
1167
|
"default": "./dist/src/stores/useNotifierStore.js"
|
|
1160
1168
|
},
|
|
1161
1169
|
"./style.css": "./src/styles/style.css",
|
|
1162
|
-
"./tailwind.css": "./
|
|
1170
|
+
"./tailwind.css": "./dist/tailwind.css",
|
|
1163
1171
|
"./theme": {
|
|
1164
1172
|
"types": "./dist/src/theme.d.ts",
|
|
1165
1173
|
"import": "./dist/src/theme.js",
|
|
@@ -1194,7 +1202,6 @@
|
|
|
1194
1202
|
"highlight.js": "^11.12.0",
|
|
1195
1203
|
"katex": "0.18.7",
|
|
1196
1204
|
"@lucide/vue": "^1.47.0",
|
|
1197
|
-
"@tailwindcss/typography": "^0.5.20",
|
|
1198
1205
|
"marked": "^18.0.13",
|
|
1199
1206
|
"sigma": "^3.0.3",
|
|
1200
1207
|
"tailwindcss": "^4.3.3",
|
|
@@ -1204,6 +1211,7 @@
|
|
|
1204
1211
|
"devDependencies": {
|
|
1205
1212
|
"@storybook/vue3-vite": "10.6.0",
|
|
1206
1213
|
"@tailwindcss/postcss": "^4.3.3",
|
|
1214
|
+
"@tailwindcss/typography": "0.5.20",
|
|
1207
1215
|
"@types/node": "^22.20.4",
|
|
1208
1216
|
"@vitejs/plugin-vue": "^6.0.9",
|
|
1209
1217
|
"@vitest/coverage-v8": "^5.0.1",
|