@feugene/granularity 0.16.0 → 0.18.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/dist/chunks/{config-Zc_bUvZY2.js → config-BDfTXHo12.js} +1 -1
- package/dist/chunks/{config-Zc_bUvZY2.js.map → config-BDfTXHo12.js.map} +1 -1
- package/dist/chunks/config-BE6n20np2.js.map +1 -0
- package/dist/chunks/{config-CpwwkFBO.js → config-Baj7Wvx-.js} +1 -1
- package/dist/chunks/{config-CpwwkFBO.js.map → config-Baj7Wvx-.js.map} +1 -1
- package/dist/chunks/config-BoNR7_PD2.js.map +1 -0
- package/dist/chunks/{config-DxCTVBfx.js → config-BsPDQ0dS.js} +2 -2
- package/dist/chunks/config-BsPDQ0dS.js.map +1 -0
- package/dist/chunks/config-CN2ULSQL.js.map +1 -0
- package/dist/chunks/{config-Cw6TDzWv2.js → config-COpuWGr_.js} +1 -1
- package/dist/chunks/config-COpuWGr_.js.map +1 -0
- package/dist/chunks/config-D2aNP7Es.js +70 -0
- package/dist/chunks/config-D2aNP7Es.js.map +1 -0
- package/dist/chunks/config-D94Z9po5.js.map +1 -0
- package/dist/chunks/{config-B-g6lT19.js → config-DA6SnEoy.js} +5 -2
- package/dist/chunks/config-DA6SnEoy.js.map +1 -0
- package/dist/chunks/config-DCFvmHEv2.js.map +1 -0
- package/dist/chunks/config-DEvsMTQE.js +150 -0
- package/dist/chunks/config-DEvsMTQE.js.map +1 -0
- package/dist/chunks/{config-CvC0sX8p.js → config-MRvhUl-O.js} +1 -1
- package/dist/chunks/{config-CvC0sX8p.js.map → config-MRvhUl-O.js.map} +1 -1
- package/dist/chunks/config-ScuvHw6k2.js +42 -0
- package/dist/chunks/config-ScuvHw6k2.js.map +1 -0
- package/dist/chunks/config-T3qdQBgU2.js.map +1 -0
- package/dist/chunks/config-eXB87DOi.js.map +1 -0
- package/dist/chunks/{config-D8tSR2uS.js → config-gvq_hWNM.js} +1 -1
- package/dist/chunks/{config-D8tSR2uS.js.map → config-gvq_hWNM.js.map} +1 -1
- package/dist/chunks/context-BSYR7RZs.js.map +1 -1
- package/dist/chunks/{en-B3xMeswz.js → en-COdzxgAX.js} +30 -5
- package/dist/chunks/en-COdzxgAX.js.map +1 -0
- package/dist/chunks/{es-CA-mkU--.js → es-ClqJ-4hr.js} +30 -5
- package/dist/chunks/es-ClqJ-4hr.js.map +1 -0
- package/dist/chunks/{es-Bv8vvqdT.js → es-DGMHwknJ.js} +3 -3
- package/dist/chunks/{es-Bv8vvqdT.js.map → es-DGMHwknJ.js.map} +1 -1
- package/dist/chunks/grKbdStyles-CeZhGQHr.js +43 -0
- package/dist/chunks/grKbdStyles-CeZhGQHr.js.map +1 -0
- package/dist/chunks/{grTextareaStyles-CWI2SqC8.js → grTextareaStyles-iOcHuVMM.js} +2 -2
- package/dist/chunks/{grTextareaStyles-CWI2SqC8.js.map → grTextareaStyles-iOcHuVMM.js.map} +1 -1
- package/dist/chunks/{granular-provider-CtrXGa7c.js → granular-provider-B9nXQCMu.js} +18 -16
- package/dist/chunks/granular-provider-B9nXQCMu.js.map +1 -0
- package/dist/chunks/{keyboard-zYvvyHd4.js → keyboard-DE2yhz_b.js} +10 -1
- package/dist/chunks/keyboard-DE2yhz_b.js.map +1 -0
- package/dist/chunks/{optionFilter-BVY988pC.js → optionFilter-DYw9XPPx.js} +1 -71
- package/dist/chunks/optionFilter-DYw9XPPx.js.map +1 -0
- package/dist/chunks/{useOverlayLayer-BupuP_hs.js → overlayStack-C8cfsqXa.js} +11 -61
- package/dist/chunks/overlayStack-C8cfsqXa.js.map +1 -0
- package/dist/chunks/{ru-COWxgh2A.js → ru-9z8ix45c.js} +30 -5
- package/dist/chunks/ru-9z8ix45c.js.map +1 -0
- package/dist/chunks/useDragSort-0l47h4yb.js +265 -0
- package/dist/chunks/useDragSort-0l47h4yb.js.map +1 -0
- package/dist/chunks/{useModalOverlay-DCM4d3yA.js → useModalOverlay-BTq-0ImG.js} +1 -1
- package/dist/chunks/{useModalOverlay-DCM4d3yA.js.map → useModalOverlay-BTq-0ImG.js.map} +1 -1
- package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-CQ9T7Lly.js → GrAutocomplete-CPEQxmLZ.js} +4 -3
- package/dist/components/GrAutocomplete/chunks/GrAutocomplete-CPEQxmLZ.js.map +1 -0
- package/dist/components/GrAutocomplete/index.js +1 -1
- package/dist/components/GrAutocomplete/styles.css +1 -1
- package/dist/components/GrColorPicker/chunks/{GrColorPicker-bnYBRGk8.js → GrColorPicker-DAdQ-Gc3.js} +4 -4
- package/dist/components/GrColorPicker/chunks/{GrColorPicker-bnYBRGk8.js.map → GrColorPicker-DAdQ-Gc3.js.map} +1 -1
- package/dist/components/GrColorPicker/index.js +2 -2
- package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-MWDYDPNC.js → GrCommandPalette-DMeSqkEv.js} +6 -7
- package/dist/components/GrCommandPalette/chunks/GrCommandPalette-DMeSqkEv.js.map +1 -0
- package/dist/components/GrCommandPalette/index.js +1 -1
- package/dist/components/GrCommandPalette/styles.css +1 -1
- package/dist/components/GrConfigProvider/index.js +2 -2
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-DaQmlp1_.js → GrConfirmDialog-hUTi-GdJ.js} +1 -1
- package/dist/components/GrConfirmDialog/chunks/{GrConfirmDialog-DaQmlp1_.js.map → GrConfirmDialog-hUTi-GdJ.js.map} +1 -1
- package/dist/components/GrConfirmDialog/index.js +1 -1
- package/dist/components/GrDataTable/chunks/{GrDataTable-DVFho9Cj.js → GrDataTable-DzaGLG3A.js} +495 -47
- package/dist/components/GrDataTable/chunks/GrDataTable-DzaGLG3A.js.map +1 -0
- package/dist/components/GrDataTable/index.js +2 -2
- package/dist/components/GrDialog/chunks/{GrDialog-AE1gIZuz.js → GrDialog-MD9Fzy9C.js} +1 -1
- package/dist/components/GrDialog/chunks/{GrDialog-AE1gIZuz.js.map → GrDialog-MD9Fzy9C.js.map} +1 -1
- package/dist/components/GrDialog/index.js +1 -1
- package/dist/components/GrDialogService/chunks/{GrDialogService-B4DYWDkA.js → GrDialogService-DtgUijMj.js} +2 -2
- package/dist/components/GrDialogService/chunks/{GrDialogService-B4DYWDkA.js.map → GrDialogService-DtgUijMj.js.map} +1 -1
- package/dist/components/GrDialogService/index.js +1 -1
- package/dist/components/GrDrawer/chunks/{GrDrawer-DQwi6aRw.js → GrDrawer-DWHdZZzW.js} +2 -2
- package/dist/components/GrDrawer/chunks/{GrDrawer-DQwi6aRw.js.map → GrDrawer-DWHdZZzW.js.map} +1 -1
- package/dist/components/GrDrawer/index.js +2 -2
- package/dist/components/GrDropdown/chunks/{GrDropdown-BLng6V1m.js → GrDropdown-0tJK01Kq.js} +2 -2
- package/dist/components/GrDropdown/chunks/{GrDropdown-BLng6V1m.js.map → GrDropdown-0tJK01Kq.js.map} +1 -1
- package/dist/components/GrDropdown/index.js +1 -1
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-BImk2Vs7.js → GrDropdownMenu-VPPrpCoA.js} +1 -1
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-BImk2Vs7.js.map → GrDropdownMenu-VPPrpCoA.js.map} +1 -1
- package/dist/components/GrDropdownMenu/index.js +1 -1
- package/dist/components/GrFileUpload/chunks/{GrFileUpload-D0B-BEsd.js → GrFileUpload-DuDzC43S.js} +2 -2
- package/dist/components/GrFileUpload/chunks/{GrFileUpload-D0B-BEsd.js.map → GrFileUpload-DuDzC43S.js.map} +1 -1
- package/dist/components/GrFileUpload/index.js +1 -1
- package/dist/components/GrImageViewer/chunks/{GrImageViewer-BeCnE8XQ.js → GrImageViewer-DE7MBbF8.js} +46 -22
- package/dist/components/GrImageViewer/chunks/GrImageViewer-DE7MBbF8.js.map +1 -0
- package/dist/components/GrImageViewer/index.js +1 -1
- package/dist/components/GrInput/chunks/{GrInput-DD2gYdqS.js → GrInput-2wd7Crs0.js} +1 -1
- package/dist/components/GrInput/chunks/GrInput-2wd7Crs0.js.map +1 -0
- package/dist/components/GrInput/index.js +1 -1
- package/dist/components/GrInputTag/chunks/{GrInputTag-DmNunixz.js → GrInputTag-CyV2eY7Z.js} +20 -33
- package/dist/components/GrInputTag/chunks/GrInputTag-CyV2eY7Z.js.map +1 -0
- package/dist/components/GrInputTag/index.js +1 -1
- package/dist/components/GrKbd/chunks/{GrKbd-DRFPvW3G.js → GrKbd-DU2lBkRV.js} +218 -52
- package/dist/components/GrKbd/chunks/GrKbd-DU2lBkRV.js.map +1 -0
- package/dist/components/GrKbd/index.js +3 -3
- package/dist/components/GrModal/chunks/{GrModal-B8I78T0N.js → GrModal-BbhcsDQ8.js} +1 -1
- package/dist/components/GrModal/chunks/{GrModal-B8I78T0N.js.map → GrModal-BbhcsDQ8.js.map} +1 -1
- package/dist/components/GrModal/index.js +1 -1
- package/dist/components/GrPagination/chunks/{GrPagination-B6N0QZBf.js → GrPagination-waKhxBP7.js} +4 -4
- package/dist/components/GrPagination/chunks/GrPagination-waKhxBP7.js.map +1 -0
- package/dist/components/GrPagination/index.js +1 -1
- package/dist/components/GrPopover/chunks/{GrPopover-B1eRCOoO.js → GrPopover-DuqeoFaI.js} +1 -1
- package/dist/components/GrPopover/chunks/{GrPopover-B1eRCOoO.js.map → GrPopover-DuqeoFaI.js.map} +1 -1
- package/dist/components/GrPopover/index.js +1 -1
- package/dist/components/GrProgressBar/chunks/{GrProgressBar-BiHnaitu.js → GrProgressBar-xwbNM9QB.js} +1 -1
- package/dist/components/GrProgressBar/chunks/GrProgressBar-xwbNM9QB.js.map +1 -0
- package/dist/components/GrProgressBar/index.js +1 -1
- package/dist/components/GrProgressCircle/chunks/{GrProgressCircle-CTogjcHz.js → GrProgressCircle-B8olXRo5.js} +1 -1
- package/dist/components/GrProgressCircle/chunks/{GrProgressCircle-CTogjcHz.js.map → GrProgressCircle-B8olXRo5.js.map} +1 -1
- package/dist/components/GrProgressCircle/index.js +2 -2
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-Ct174NVD.js → GrPromptDialog-JVVqBsPY.js} +3 -3
- package/dist/components/GrPromptDialog/chunks/{GrPromptDialog-Ct174NVD.js.map → GrPromptDialog-JVVqBsPY.js.map} +1 -1
- package/dist/components/GrPromptDialog/index.js +1 -1
- package/dist/components/GrRadio/chunks/{GrRadio-DksDro_U.js → GrRadio-DWiRaMzt.js} +8 -32
- package/dist/components/GrRadio/chunks/GrRadio-DWiRaMzt.js.map +1 -0
- package/dist/components/GrRadio/index.js +1 -1
- package/dist/components/GrRadioGroup/chunks/{GrRadioGroup-BOIhejE6.js → GrRadioGroup-DIuBw0wk.js} +34 -27
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-DIuBw0wk.js.map +1 -0
- package/dist/components/GrRadioGroup/index.js +1 -1
- package/dist/components/GrRating/chunks/{GrRating-JrHXz0Rv.js → GrRating-LarIiwJL.js} +2 -2
- package/dist/components/GrRating/chunks/GrRating-LarIiwJL.js.map +1 -0
- package/dist/components/GrRating/index.js +2 -2
- package/dist/components/GrSegmented/chunks/{GrSegmented-BQIlH5KI.js → GrSegmented-CQw3ijqa.js} +47 -65
- package/dist/components/GrSegmented/chunks/GrSegmented-CQw3ijqa.js.map +1 -0
- package/dist/components/GrSegmented/index.js +1 -1
- package/dist/components/GrSelect/chunks/{GrSelect-aqkPCqjd.js → GrSelect-DAdu044K.js} +4 -3
- package/dist/components/GrSelect/chunks/GrSelect-DAdu044K.js.map +1 -0
- package/dist/components/GrSelect/index.js +1 -1
- package/dist/components/GrSlider/chunks/{GrSlider-DkU9IQSX.js → GrSlider-CyhVsNKn.js} +21 -34
- package/dist/components/GrSlider/chunks/GrSlider-CyhVsNKn.js.map +1 -0
- package/dist/components/GrSlider/index.js +2 -2
- package/dist/components/GrSortableList/chunks/GrSortableList-BefVfWKh.js +276 -0
- package/dist/components/GrSortableList/chunks/GrSortableList-BefVfWKh.js.map +1 -0
- package/dist/components/GrSortableList/index.js +3 -0
- package/dist/components/GrSplitter/chunks/{GrSplitter-7To8jbJ8.js → GrSplitter-BzxVQwbY.js} +17 -37
- package/dist/components/GrSplitter/chunks/GrSplitter-BzxVQwbY.js.map +1 -0
- package/dist/components/GrSplitter/index.js +2 -2
- package/dist/components/GrStatistic/chunks/{GrStatistic-CttyoYPT.js → GrStatistic-J4qLs3TH.js} +1 -1
- package/dist/components/GrStatistic/chunks/{GrStatistic-CttyoYPT.js.map → GrStatistic-J4qLs3TH.js.map} +1 -1
- package/dist/components/GrStatistic/index.js +2 -2
- package/dist/components/GrSwitch/chunks/{GrSwitch-B9TYbiih.js → GrSwitch-DpyvVrZG.js} +1 -1
- package/dist/components/GrSwitch/chunks/{GrSwitch-B9TYbiih.js.map → GrSwitch-DpyvVrZG.js.map} +1 -1
- package/dist/components/GrSwitch/index.js +2 -2
- package/dist/components/GrTabPanels/index.js +1 -1
- package/dist/components/GrTable/chunks/{GrTable-BB-mI_NM.js → GrTable-BfqgwETQ.js} +7 -1
- package/dist/components/GrTable/chunks/GrTable-BfqgwETQ.js.map +1 -0
- package/dist/components/GrTable/index.js +1 -1
- package/dist/components/GrTabs/chunks/{GrTabs-B8CDq2D9.js → GrTabs-TeXaU5Uh.js} +50 -61
- package/dist/components/GrTabs/chunks/GrTabs-TeXaU5Uh.js.map +1 -0
- package/dist/components/GrTabs/index.js +1 -1
- package/dist/components/GrTextarea/chunks/{GrTextarea-DUh5Tlo4.js → GrTextarea-DSvd1nSy.js} +1 -1
- package/dist/components/GrTextarea/chunks/{GrTextarea-DUh5Tlo4.js.map → GrTextarea-DSvd1nSy.js.map} +1 -1
- package/dist/components/GrTextarea/index.js +2 -2
- package/dist/components/GrTimeline/chunks/{GrTimeline-CE9b3s18.js → GrTimeline-B-h2Yanw.js} +1 -1
- package/dist/components/GrTimeline/chunks/{GrTimeline-CE9b3s18.js.map → GrTimeline-B-h2Yanw.js.map} +1 -1
- package/dist/components/GrTimeline/index.js +2 -2
- package/dist/components/GrToaster/chunks/{GrToaster-BKQy3Srm.js → GrToaster-Ct-39hga.js} +113 -12
- package/dist/components/GrToaster/chunks/GrToaster-Ct-39hga.js.map +1 -0
- package/dist/components/GrToaster/index.js +2 -2
- package/dist/components/GrToaster/styles.css +1 -1
- package/dist/components/GrTooltip/chunks/{GrTooltip-DEbejfhA.js → GrTooltip-xAcqs0bP.js} +1 -1
- package/dist/components/GrTooltip/chunks/{GrTooltip-DEbejfhA.js.map → GrTooltip-xAcqs0bP.js.map} +1 -1
- package/dist/components/GrTooltip/index.js +2 -2
- package/dist/components/GrTree/chunks/{GrTree-wfdbvygw.js → GrTree-CaYK8dGZ.js} +124 -92
- package/dist/components/GrTree/chunks/GrTree-CaYK8dGZ.js.map +1 -0
- package/dist/components/GrTree/index.js +1 -1
- package/dist/components/GrTree/styles.css +1 -1
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-lLWmAMtI.js → GrTreeSelect-DZp7CqqW.js} +4 -4
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-lLWmAMtI.js.map → GrTreeSelect-DZp7CqqW.js.map} +1 -1
- package/dist/components/GrTreeSelect/index.js +2 -2
- package/dist/composables/useComboboxNavigation.js +71 -0
- package/dist/composables/useComboboxNavigation.js.map +1 -0
- package/dist/composables/useDismissible.js +1 -1
- package/dist/composables/useDragGesture.js +55 -0
- package/dist/composables/useDragGesture.js.map +1 -0
- package/dist/composables/useDragSort.js +2 -0
- package/dist/composables/useFloating.js +22 -1
- package/dist/composables/useFloating.js.map +1 -1
- package/dist/composables/useGrComponentConfig.js +2 -0
- package/dist/composables/useGranularityTranslations.js +2 -0
- package/dist/composables/useOverlayLayer.js +64 -1
- package/dist/composables/useOverlayLayer.js.map +1 -0
- package/dist/composables/useRovingFocus.js +150 -0
- package/dist/composables/useRovingFocus.js.map +1 -0
- package/dist/directives/hotkey.js +13 -7
- package/dist/directives/hotkey.js.map +1 -1
- package/dist/granular-provider-node.js +1 -1
- package/dist/granular-provider.js +1 -1
- package/dist/i18n/all.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/index.js +67 -58
- package/dist/tokens.js +84 -0
- package/dist/tokens.js.map +1 -1
- package/dist/types/src/components/GrAlert/defaults.d.ts +1 -1
- package/dist/types/src/components/GrAutocomplete/defaults.d.ts +1 -1
- package/dist/types/src/components/GrAvatar/defaults.d.ts +1 -1
- package/dist/types/src/components/GrBadge/defaults.d.ts +1 -1
- package/dist/types/src/components/GrBottomNav/defaults.d.ts +1 -1
- package/dist/types/src/components/GrBreadcrumbs/defaults.d.ts +1 -1
- package/dist/types/src/components/GrButton/defaults.d.ts +1 -1
- package/dist/types/src/components/GrCard/defaults.d.ts +1 -1
- package/dist/types/src/components/GrCheckbox/defaults.d.ts +1 -1
- package/dist/types/src/components/GrCheckboxGroup/defaults.d.ts +1 -1
- package/dist/types/src/components/GrCollapse/defaults.d.ts +1 -1
- package/dist/types/src/components/GrColorPicker/defaults.d.ts +1 -1
- package/dist/types/src/components/GrColorPicker/grColorPickerStyles.d.ts +2 -2
- package/dist/types/src/components/GrCommandPalette/defaults.d.ts +1 -1
- package/dist/types/src/components/GrConfigProvider/context.d.ts +6 -22
- package/dist/types/src/components/GrConfigProvider/index.d.ts +1 -1
- package/dist/types/src/components/GrConfirmDialog/defaults.d.ts +1 -1
- package/dist/types/src/components/GrDataTable/GrDataTable.vue.d.ts +53 -0
- package/dist/types/src/components/GrDataTable/defaults.d.ts +1 -1
- package/dist/types/src/components/GrDataTable/grDataTableStyles.d.ts +39 -0
- package/dist/types/src/components/GrDialog/defaults.d.ts +1 -1
- package/dist/types/src/components/GrDivider/defaults.d.ts +1 -1
- package/dist/types/src/components/GrDrawer/defaults.d.ts +1 -1
- package/dist/types/src/components/GrEmptyState/defaults.d.ts +1 -1
- package/dist/types/src/components/GrFileUpload/defaults.d.ts +1 -1
- package/dist/types/src/components/GrFormField/defaults.d.ts +1 -1
- package/dist/types/src/components/GrFormFile/defaults.d.ts +1 -1
- package/dist/types/src/components/GrFormSection/defaults.d.ts +1 -1
- package/dist/types/src/components/GrIcon/defaults.d.ts +1 -1
- package/dist/types/src/components/GrImageViewer/composables/usePointerGestures.d.ts +1 -0
- package/dist/types/src/components/GrImageViewer/composables/useZoomPan.d.ts +1 -2
- package/dist/types/src/components/GrInput/defaults.d.ts +1 -1
- package/dist/types/src/components/GrInputTag/defaults.d.ts +1 -1
- package/dist/types/src/components/GrKbd/GrKbd.vue.d.ts +18 -3
- package/dist/types/src/components/GrKbd/defaults.d.ts +1 -1
- package/dist/types/src/components/GrKbd/grKbdStyles.d.ts +20 -3
- package/dist/types/src/components/GrKbd/index.d.ts +6 -0
- package/dist/types/src/components/GrLink/defaults.d.ts +1 -1
- package/dist/types/src/components/GrModal/defaults.d.ts +1 -1
- package/dist/types/src/components/GrNumberInput/defaults.d.ts +1 -1
- package/dist/types/src/components/GrPagination/defaults.d.ts +1 -1
- package/dist/types/src/components/GrPopover/GrPopover.vue.d.ts +1 -1
- package/dist/types/src/components/GrPopover/defaults.d.ts +1 -1
- package/dist/types/src/components/GrProgressBar/defaults.d.ts +1 -1
- package/dist/types/src/components/GrProgressCircle/defaults.d.ts +1 -1
- package/dist/types/src/components/GrProgressCircle/grProgressCircleStyles.d.ts +1 -1
- package/dist/types/src/components/GrPromptDialog/defaults.d.ts +1 -1
- package/dist/types/src/components/GrRadio/defaults.d.ts +1 -1
- package/dist/types/src/components/GrRadio/grRadioGroupContext.d.ts +12 -4
- package/dist/types/src/components/GrRadioGroup/defaults.d.ts +1 -1
- package/dist/types/src/components/GrRating/defaults.d.ts +1 -1
- package/dist/types/src/components/GrSegmented/defaults.d.ts +1 -1
- package/dist/types/src/components/GrSelect/defaults.d.ts +1 -1
- package/dist/types/src/components/GrSlider/defaults.d.ts +1 -1
- package/dist/types/src/components/GrSortableList/GrSortableList.vue.d.ts +68 -0
- package/dist/types/src/components/GrSortableList/config.d.ts +1 -0
- package/dist/types/src/components/GrSortableList/grSortableListStyles.d.ts +38 -0
- package/dist/types/src/components/GrSortableList/index.d.ts +9 -0
- package/dist/types/src/components/GrSortableList/safelist.d.ts +1 -0
- package/dist/types/src/components/GrSplitter/defaults.d.ts +1 -1
- package/dist/types/src/components/GrStatistic/defaults.d.ts +1 -1
- package/dist/types/src/components/GrStatistic/grStatisticStyles.d.ts +1 -1
- package/dist/types/src/components/GrSwitch/defaults.d.ts +1 -1
- package/dist/types/src/components/GrTable/GrTable.vue.d.ts +13 -0
- package/dist/types/src/components/GrTable/defaults.d.ts +1 -1
- package/dist/types/src/components/GrTabs/defaults.d.ts +1 -1
- package/dist/types/src/components/GrTextarea/defaults.d.ts +1 -1
- package/dist/types/src/components/GrTextarea/grTextareaStyles.d.ts +2 -2
- package/dist/types/src/components/GrTimeline/defaults.d.ts +1 -1
- package/dist/types/src/components/GrTimeline/grTimelineStyles.d.ts +1 -1
- package/dist/types/src/components/GrToaster/GrToaster.vue.d.ts +8 -0
- package/dist/types/src/components/GrToaster/grToasterStyles.d.ts +27 -0
- package/dist/types/src/components/GrTooltip/defaults.d.ts +1 -1
- package/dist/types/src/components/GrTree/defaults.d.ts +1 -1
- package/dist/types/src/components/GrTree/grTreeInteractionContext.d.ts +0 -1
- package/dist/types/src/components/GrTreeSelect/defaults.d.ts +1 -1
- package/dist/types/src/components/shared/hotkey.d.ts +7 -15
- package/dist/types/src/components/shared/hotkeyTokens.d.ts +37 -0
- package/dist/types/src/composables/internal/dragSortGeometry.d.ts +59 -0
- package/dist/types/src/composables/internal/overlayStack.d.ts +11 -0
- package/dist/types/src/composables/useDragGesture.d.ts +63 -0
- package/dist/types/src/composables/useDragSort.d.ts +80 -0
- package/dist/types/src/composables/useFloating.d.ts +5 -1
- package/dist/types/src/composables/useGrComponentConfig.d.ts +41 -0
- package/dist/types/src/composables/useGranularityTranslations.d.ts +13 -0
- package/dist/types/src/composables/useRovingFocus.d.ts +108 -0
- package/dist/types/src/granular-provider/shared.d.ts +1 -0
- package/dist/types/src/i18n/messages/en.d.ts +48 -0
- package/dist/types/src/i18n/messages/es.d.ts +48 -0
- package/dist/types/src/i18n/messages/ru.d.ts +48 -0
- package/dist/types/src/index.d.ts +12 -0
- package/dist/types/src/internal/keyboard.d.ts +6 -0
- package/dist/web-types.json +201 -3
- package/package.json +31 -3
- package/dist/chunks/config-B-g6lT19.js.map +0 -1
- package/dist/chunks/config-BE6n20np.js.map +0 -1
- package/dist/chunks/config-BNfQwyL4.js +0 -97
- package/dist/chunks/config-BNfQwyL4.js.map +0 -1
- package/dist/chunks/config-BoNR7_PD.js.map +0 -1
- package/dist/chunks/config-CN2ULSQL2.js.map +0 -1
- package/dist/chunks/config-Cw6TDzWv2.js.map +0 -1
- package/dist/chunks/config-D94Z9po52.js.map +0 -1
- package/dist/chunks/config-DCFvmHEv.js.map +0 -1
- package/dist/chunks/config-DxCTVBfx.js.map +0 -1
- package/dist/chunks/config-LGrZIdaZ.js +0 -21
- package/dist/chunks/config-LGrZIdaZ.js.map +0 -1
- package/dist/chunks/config-T3qdQBgU.js.map +0 -1
- package/dist/chunks/config-eXB87DOi2.js.map +0 -1
- package/dist/chunks/en-B3xMeswz.js.map +0 -1
- package/dist/chunks/es-CA-mkU--.js.map +0 -1
- package/dist/chunks/grKbdStyles-DAoxiytu.js +0 -31
- package/dist/chunks/grKbdStyles-DAoxiytu.js.map +0 -1
- package/dist/chunks/granular-provider-CtrXGa7c.js.map +0 -1
- package/dist/chunks/keyboard-zYvvyHd4.js.map +0 -1
- package/dist/chunks/optionFilter-BVY988pC.js.map +0 -1
- package/dist/chunks/ru-COWxgh2A.js.map +0 -1
- package/dist/chunks/useOverlayLayer-BupuP_hs.js.map +0 -1
- package/dist/components/GrAutocomplete/chunks/GrAutocomplete-CQ9T7Lly.js.map +0 -1
- package/dist/components/GrCommandPalette/chunks/GrCommandPalette-MWDYDPNC.js.map +0 -1
- package/dist/components/GrDataTable/chunks/GrDataTable-DVFho9Cj.js.map +0 -1
- package/dist/components/GrImageViewer/chunks/GrImageViewer-BeCnE8XQ.js.map +0 -1
- package/dist/components/GrInput/chunks/GrInput-DD2gYdqS.js.map +0 -1
- package/dist/components/GrInputTag/chunks/GrInputTag-DmNunixz.js.map +0 -1
- package/dist/components/GrKbd/chunks/GrKbd-DRFPvW3G.js.map +0 -1
- package/dist/components/GrPagination/chunks/GrPagination-B6N0QZBf.js.map +0 -1
- package/dist/components/GrProgressBar/chunks/GrProgressBar-BiHnaitu.js.map +0 -1
- package/dist/components/GrRadio/chunks/GrRadio-DksDro_U.js.map +0 -1
- package/dist/components/GrRadioGroup/chunks/GrRadioGroup-BOIhejE6.js.map +0 -1
- package/dist/components/GrRating/chunks/GrRating-JrHXz0Rv.js.map +0 -1
- package/dist/components/GrSegmented/chunks/GrSegmented-BQIlH5KI.js.map +0 -1
- package/dist/components/GrSelect/chunks/GrSelect-aqkPCqjd.js.map +0 -1
- package/dist/components/GrSlider/chunks/GrSlider-DkU9IQSX.js.map +0 -1
- package/dist/components/GrSplitter/chunks/GrSplitter-7To8jbJ8.js.map +0 -1
- package/dist/components/GrTable/chunks/GrTable-BB-mI_NM.js.map +0 -1
- package/dist/components/GrTabs/chunks/GrTabs-B8CDq2D9.js.map +0 -1
- package/dist/components/GrToaster/chunks/GrToaster-BKQy3Srm.js.map +0 -1
- package/dist/components/GrTree/chunks/GrTree-wfdbvygw.js.map +0 -1
- /package/dist/chunks/{config-BE6n20np.js → config-BE6n20np2.js} +0 -0
- /package/dist/chunks/{config-BoNR7_PD.js → config-BoNR7_PD2.js} +0 -0
- /package/dist/chunks/{config-CN2ULSQL2.js → config-CN2ULSQL.js} +0 -0
- /package/dist/chunks/{config-D94Z9po52.js → config-D94Z9po5.js} +0 -0
- /package/dist/chunks/{config-DCFvmHEv.js → config-DCFvmHEv2.js} +0 -0
- /package/dist/chunks/{config-T3qdQBgU.js → config-T3qdQBgU2.js} +0 -0
- /package/dist/chunks/{config-eXB87DOi2.js → config-eXB87DOi.js} +0 -0
- /package/dist/types/src/composables/{internal/useComboboxNavigation.d.ts → useComboboxNavigation.d.ts} +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Каталог клавиш, которые понимает `keys` у `GrKbd`.
|
|
3
|
+
*
|
|
4
|
+
* Таблица, а не цепочка `if`, по двум причинам: во-первых, список — часть
|
|
5
|
+
* публичного контракта (потребителю нужно знать, что можно написать), и
|
|
6
|
+
* витрина показывает именно его, а не свою копию; во-вторых, копия в демо или
|
|
7
|
+
* в доке разошлась бы с форматтером молча.
|
|
8
|
+
*/
|
|
9
|
+
/** Ключи читаемых имён — `gr.kbd.<name>`. */
|
|
10
|
+
export type GrKbdKeyName = 'command' | 'option' | 'shift' | 'control' | 'enter' | 'escape' | 'tab' | 'backspace' | 'delete' | 'pageUp' | 'pageDown' | 'arrowUp' | 'arrowDown' | 'arrowLeft' | 'arrowRight';
|
|
11
|
+
/** Одна клавиша в человекочитаемом виде. */
|
|
12
|
+
export interface HotkeyKeyView {
|
|
13
|
+
/** Что видно на экране: символ (`⌘`) или слово (`Ctrl`). */
|
|
14
|
+
label: string;
|
|
15
|
+
/**
|
|
16
|
+
* Ключ читаемого имени (`gr.kbd.<name>`) для символьных клавиш. У `K` или
|
|
17
|
+
* `Ctrl` его нет — они и так читаются вслух.
|
|
18
|
+
*/
|
|
19
|
+
name?: GrKbdKeyName;
|
|
20
|
+
/** Символ (`⌘`, `↑`) или слово (`Ctrl`, `Esc`): от этого зависит склейка в одной плашке. */
|
|
21
|
+
symbol?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** Смысловая группа — ею витрина и дока раскладывают каталог. */
|
|
24
|
+
export type GrKbdTokenGroup = 'modifier' | 'editing' | 'navigation';
|
|
25
|
+
export interface GrKbdTokenSpec {
|
|
26
|
+
/** Канонический токен: его пишут в `keys`. */
|
|
27
|
+
token: string;
|
|
28
|
+
/** Что ещё принимается — синонимы и сам глиф. */
|
|
29
|
+
aliases: readonly string[];
|
|
30
|
+
group: GrKbdTokenGroup;
|
|
31
|
+
/** Вид на macOS и на остальных платформах. */
|
|
32
|
+
apple: HotkeyKeyView;
|
|
33
|
+
other: HotkeyKeyView;
|
|
34
|
+
}
|
|
35
|
+
export declare const GR_KBD_TOKENS: readonly GrKbdTokenSpec[];
|
|
36
|
+
/** Токен или его синоним — в описание клавиши. Регистр не важен, глиф тоже принимается. */
|
|
37
|
+
export declare function findKbdToken(token: string): GrKbdTokenSpec | undefined;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Геометрия перестановки: чистая арифметика без DOM и без реактивности.
|
|
3
|
+
*
|
|
4
|
+
* Вынесена отдельно, потому что ошибка здесь проявляется не исключением, а
|
|
5
|
+
* «элемент встал не туда» — поймать это можно только тестом на числах.
|
|
6
|
+
* Композабл `useDragSort` сводит `DOMRect` к отрезкам вдоль оси и зовёт эти
|
|
7
|
+
* функции; какой смысл у попадания, решает уже компонент.
|
|
8
|
+
*/
|
|
9
|
+
/** Отрезок, занимаемый элементом вдоль оси переноса. */
|
|
10
|
+
export interface DragSortSpan {
|
|
11
|
+
start: number;
|
|
12
|
+
end: number;
|
|
13
|
+
}
|
|
14
|
+
export interface DragSortHitResult {
|
|
15
|
+
/** Индекс элемента в переданном наборе. */
|
|
16
|
+
index: number;
|
|
17
|
+
/** Доля вдоль элемента: 0 — его начало, 1 — конец. */
|
|
18
|
+
fraction: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Какой элемент под указателем и в каком месте его.
|
|
22
|
+
*
|
|
23
|
+
* Промах не отбрасывается: между строками есть зазоры, а курсор уезжает за
|
|
24
|
+
* край списка — и в обоих случаях перенос обязан продолжать показывать
|
|
25
|
+
* ближайшую цель, иначе индикатор мигает на каждом пикселе между строками.
|
|
26
|
+
*
|
|
27
|
+
* Вырожденный отрезок (нулевая высота строки) даёт `fraction: 0` — цель
|
|
28
|
+
* остаётся детерминированной, а не зависящей от направления подхода.
|
|
29
|
+
*/
|
|
30
|
+
export declare function hitTest(spans: readonly DragSortSpan[], position: number): DragSortHitResult | null;
|
|
31
|
+
/**
|
|
32
|
+
* Куда встанет элемент, если отпустить сейчас.
|
|
33
|
+
*
|
|
34
|
+
* Верхняя половина строки — «до неё», нижняя — «после». Индекс возвращается
|
|
35
|
+
* **в терминах итогового массива**, то есть уже с поправкой на то, что
|
|
36
|
+
* перетаскиваемый элемент из него временно вынут: без поправки перенос вниз
|
|
37
|
+
* на одну позицию не двигал бы ничего.
|
|
38
|
+
*/
|
|
39
|
+
export declare function insertionIndex(hit: DragSortHitResult, from: number, count: number): number;
|
|
40
|
+
export interface AutoScrollOptions {
|
|
41
|
+
/** Ширина чувствительной полосы у каждого края, px. По умолчанию 32. */
|
|
42
|
+
zone?: number;
|
|
43
|
+
/** Скорость на самом краю, px за кадр. По умолчанию 12. */
|
|
44
|
+
speed?: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* На сколько прокрутить контейнер за кадр: отрицательное — к началу.
|
|
48
|
+
*
|
|
49
|
+
* Скорость растёт линейно по мере приближения к краю, а не включается
|
|
50
|
+
* ступенькой: ступенька на длинном списке ощущается как рывок и промахивается
|
|
51
|
+
* мимо цели.
|
|
52
|
+
*/
|
|
53
|
+
export declare function autoScrollDelta(viewport: DragSortSpan, position: number, options?: AutoScrollOptions): number;
|
|
54
|
+
/**
|
|
55
|
+
* Перестановка без мутации входа: массив потребителя остаётся нетронутым,
|
|
56
|
+
* наружу уходит новый. `v-model` с мутацией исходного набора ломает и
|
|
57
|
+
* сравнение «было — стало», и историю в сторе потребителя.
|
|
58
|
+
*/
|
|
59
|
+
export declare function moveItem<T>(items: readonly T[], from: number, to: number): T[];
|
|
@@ -10,6 +10,9 @@
|
|
|
10
10
|
* - **`inert`** → ставится на модальные слои ниже последнего **модального**.
|
|
11
11
|
* Немодальный слой сверху модалку не понижает: иначе окно ушло бы в `inert`
|
|
12
12
|
* вместе со своим же открытым дропдауном и перестало отвечать.
|
|
13
|
+
* - **высота** → `openModalCount()` поднимает floating-панель над окном, из
|
|
14
|
+
* которого её открыли: телепортированная панель лежит рядом с корнем окна,
|
|
15
|
+
* и статический `z-index` дропдауна оставлял её под ним.
|
|
13
16
|
*
|
|
14
17
|
* Вести эти две вершины в двух независимых реестрах нельзя: реестры описывают
|
|
15
18
|
* один и тот же порядок и расходятся молча — достаточно оверлея, который
|
|
@@ -56,5 +59,13 @@ export declare function layerRootsAbove(id: number): HTMLElement[];
|
|
|
56
59
|
export declare function allLayerRoots(): HTMLElement[];
|
|
57
60
|
/** Сколько слоёв открыто. Для тестов и диагностики. */
|
|
58
61
|
export declare function overlayStackSize(): number;
|
|
62
|
+
/**
|
|
63
|
+
* Сколько **модальных** слоёв открыто прямо сейчас.
|
|
64
|
+
*
|
|
65
|
+
* Читает `useFloating`, когда считает высоту панели: панель телепортирована в
|
|
66
|
+
* общий портал и лежит рядом с корнем окна, а не внутри него, поэтому свой
|
|
67
|
+
* стек-контекст её не спасает — высоту приходится брать из порядка слоёв.
|
|
68
|
+
*/
|
|
69
|
+
export declare function openModalCount(): number;
|
|
59
70
|
/** Тестовая/служебная очистка стека. */
|
|
60
71
|
export declare function resetOverlayStack(): void;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Скелет указательного жеста: нажал, повёл, отпустил.
|
|
4
|
+
*
|
|
5
|
+
* Механика написана в пакете дважды дословно (`GrSlider`, `GrSplitter`) и
|
|
6
|
+
* ещё раз иначе (`GrImageViewer`), а следующие потребители известны заранее —
|
|
7
|
+
* swipe у `GrToaster`, перенос узла в `GrTree`, ресайз колонок `GrDataTable`.
|
|
8
|
+
* Дублируется при этом не разметка, а **правило**: оборванный жест не
|
|
9
|
+
* коммитит. Живя в двух копиях, оно разъезжается молча.
|
|
10
|
+
*
|
|
11
|
+
* Слушатели вешаются на `window`, а не на элемент: указатель уходит за
|
|
12
|
+
* границы дорожки и разделителя постоянно, и жест обязан это переживать.
|
|
13
|
+
* Захват (`setPointerCapture`) дал бы то же самое, но привязал бы жест к
|
|
14
|
+
* живому DOM-узлу — а он в середине жеста может перерисоваться.
|
|
15
|
+
*
|
|
16
|
+
* У жеста **два разных исхода**, и это главное, ради чего примитив заведён:
|
|
17
|
+
* `pointerup` — завершение (значение коммитится), `pointercancel` — обрыв
|
|
18
|
+
* (браузер забрал указатель: системный жест, скролл, потеря окна), и тогда
|
|
19
|
+
* состояние возвращается к тому, что было до нажатия.
|
|
20
|
+
*
|
|
21
|
+
* Осознанно **не** делает:
|
|
22
|
+
* - не вызывает `preventDefault` — в слайдере и сплиттере это гашение
|
|
23
|
+
* выделения текста, а в панорамировании картинки помешало бы; строка
|
|
24
|
+
* дешевле опции, меняющей поведение невидимо;
|
|
25
|
+
* - не считает координаты и дельты — это доменная арифметика компонента;
|
|
26
|
+
* - не знает про порог начала жеста: он нужен сортировке, где нажатие ещё не
|
|
27
|
+
* означает перенос, и появится вместе с ней.
|
|
28
|
+
*
|
|
29
|
+
* ```ts
|
|
30
|
+
* const drag = useDragGesture({
|
|
31
|
+
* disabled: () => isDisabled.value,
|
|
32
|
+
* onStart: (event) => { activeThumb.value = nearestThumb(event) },
|
|
33
|
+
* onMove: (event) => setValue(valueFromPointer(event), false),
|
|
34
|
+
* onEnd: () => commit(),
|
|
35
|
+
* onCancel: () => rollback(),
|
|
36
|
+
* })
|
|
37
|
+
*
|
|
38
|
+
* <div @pointerdown="drag.start" />
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export interface UseDragGestureOptions {
|
|
42
|
+
/** Жест не начинается: `disabled` / `readonly`. */
|
|
43
|
+
disabled?: () => boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Нажатие прошло проверки. Вернуть `false` — жест не начинать: так
|
|
46
|
+
* отсеивается попадание мимо цели, когда `disabled` тут ни при чём.
|
|
47
|
+
*/
|
|
48
|
+
onStart?: (event: PointerEvent) => boolean | void;
|
|
49
|
+
onMove: (event: PointerEvent) => void;
|
|
50
|
+
/** Жест завершён отпусканием: значение коммитится. */
|
|
51
|
+
onEnd?: (event?: PointerEvent) => void;
|
|
52
|
+
/** Жест оборван: откат к состоянию до нажатия. */
|
|
53
|
+
onCancel?: () => void;
|
|
54
|
+
}
|
|
55
|
+
export interface UseDragGestureReturn {
|
|
56
|
+
/** Идёт ли жест. Менять снаружи не нужно — состоянием владеет примитив. */
|
|
57
|
+
isDragging: Ref<boolean>;
|
|
58
|
+
/** Вешается на `@pointerdown` цели. */
|
|
59
|
+
start: (event: PointerEvent) => void;
|
|
60
|
+
/** Принудительное завершение. По умолчанию — как обрыв, без коммита. */
|
|
61
|
+
stop: (commit?: boolean) => void;
|
|
62
|
+
}
|
|
63
|
+
export declare function useDragGesture(options: UseDragGestureOptions): UseDragGestureReturn;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Модель перестановки: перенос элемента указателем и с клавиатуры.
|
|
4
|
+
*
|
|
5
|
+
* Композабл владеет **механикой** — сессией жеста поверх `useDragGesture`,
|
|
6
|
+
* порогом начала, попаданием в элемент, автопрокруткой у краёв и состоянием
|
|
7
|
+
* переноса. **Смысл** остаётся у компонента: что считать целью (индекс вставки
|
|
8
|
+
* у списка, «до / внутрь / после» у дерева), какими клавишами это делается и
|
|
9
|
+
* что сказать в живой регион.
|
|
10
|
+
*
|
|
11
|
+
* Граница проведена так не из вкуса: у списка цель переноса — число, у дерева —
|
|
12
|
+
* пара «узел и зона», а `Space` в дереве уже занят чекбоксом. Общая у них
|
|
13
|
+
* механика, а не семантика; обобщать семантику значило бы завести опцию на
|
|
14
|
+
* каждое расхождение.
|
|
15
|
+
*
|
|
16
|
+
* Данные композабл не меняет: он сообщает «источник и цель», перестановку
|
|
17
|
+
* делает потребитель (`moveItem` из `internal/dragSortGeometry` — если она
|
|
18
|
+
* обычная).
|
|
19
|
+
*
|
|
20
|
+
* ```ts
|
|
21
|
+
* const sort = useDragSort<string, number>({
|
|
22
|
+
* items: () => keys.value,
|
|
23
|
+
* elementFor: key => rowEls.get(key),
|
|
24
|
+
* scroller: () => scrollerEl.value,
|
|
25
|
+
* resolveTarget: (hit, source) => insertionIndex(hit, indexOf(source), keys.value.length),
|
|
26
|
+
* onDrop: (source, to) => emit('move', indexOf(source), to),
|
|
27
|
+
* })
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export type DragSortOrientation = 'vertical' | 'horizontal';
|
|
31
|
+
/** Чем ведётся перенос: указателем или с клавиатуры. */
|
|
32
|
+
export type DragSortMode = 'pointer' | 'keyboard';
|
|
33
|
+
export interface DragSortHit<TKey> {
|
|
34
|
+
key: TKey;
|
|
35
|
+
index: number;
|
|
36
|
+
/** Доля вдоль элемента: 0 — начало, 1 — конец. Зоны нарезает компонент. */
|
|
37
|
+
fraction: number;
|
|
38
|
+
}
|
|
39
|
+
export interface UseDragSortOptions<TKey, TTarget> {
|
|
40
|
+
items: () => readonly TKey[];
|
|
41
|
+
elementFor: (key: TKey) => HTMLElement | null | undefined;
|
|
42
|
+
/** По умолчанию `vertical`. */
|
|
43
|
+
orientation?: () => DragSortOrientation;
|
|
44
|
+
/** Скроллер для автопрокрутки у краёв. Не задан — автопрокрутки нет. */
|
|
45
|
+
scroller?: () => HTMLElement | null | undefined;
|
|
46
|
+
disabled?: () => boolean;
|
|
47
|
+
canDrag?: (key: TKey) => boolean;
|
|
48
|
+
/** Сдвиг, после которого нажатие становится переносом. По умолчанию 4px. */
|
|
49
|
+
threshold?: () => number;
|
|
50
|
+
/**
|
|
51
|
+
* Попадание указателя → цель переноса. `null` — сюда положить нельзя.
|
|
52
|
+
*
|
|
53
|
+
* Третьим аргументом приходит прежняя цель: цели сравниваются по ссылке, и
|
|
54
|
+
* объектной цели (как «узел плюс зона» у дерева) стоит вернуть **ту же**
|
|
55
|
+
* ссылку, пока смысл не изменился, — иначе подсветка и объявления будут
|
|
56
|
+
* дёргаться на каждом движении указателя.
|
|
57
|
+
*/
|
|
58
|
+
resolveTarget: (hit: DragSortHit<TKey>, source: TKey, previous: TTarget | null) => TTarget | null;
|
|
59
|
+
/** Перенос состоялся. */
|
|
60
|
+
onDrop: (source: TKey, target: TTarget) => void;
|
|
61
|
+
/** Состояние изменилось: подсветка строк и объявления — на этом. */
|
|
62
|
+
onUpdate?: (source: TKey | null, target: TTarget | null, mode: DragSortMode | null) => void;
|
|
63
|
+
}
|
|
64
|
+
export interface UseDragSortReturn<TKey, TTarget> {
|
|
65
|
+
source: Ref<TKey | null>;
|
|
66
|
+
target: Ref<TTarget | null>;
|
|
67
|
+
mode: Ref<DragSortMode | null>;
|
|
68
|
+
isActive: Ref<boolean>;
|
|
69
|
+
/** Вешается на `@pointerdown` ручки или строки. */
|
|
70
|
+
startFrom: (key: TKey) => (event: PointerEvent) => void;
|
|
71
|
+
/** Клавиатурный перенос: взять элемент. */
|
|
72
|
+
grab: (key: TKey) => void;
|
|
73
|
+
/** Клавиатурный перенос: назначить цель (двигать ведёт компонент). */
|
|
74
|
+
setTarget: (target: TTarget | null) => void;
|
|
75
|
+
/** Положить: если цель есть — состоится `onDrop`. */
|
|
76
|
+
drop: () => void;
|
|
77
|
+
/** Отменить: ничего не переносится. */
|
|
78
|
+
cancel: () => void;
|
|
79
|
+
}
|
|
80
|
+
export declare function useDragSort<TKey, TTarget>(options: UseDragSortOptions<TKey, TTarget>): UseDragSortReturn<TKey, TTarget>;
|
|
@@ -21,7 +21,11 @@ export interface UseFloatingOptions {
|
|
|
21
21
|
* - функция-геттер — как и `placement`, для реактивной зависимости от пропа.
|
|
22
22
|
*/
|
|
23
23
|
matchWidth?: boolean | 'min' | (() => boolean | 'min');
|
|
24
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* CSS-переменная шкалы слоёв (см. `styles/tokens.css`). По умолчанию
|
|
26
|
+
* `--gr-z-dropdown`. Действует, пока панель открыта вне модального окна: над
|
|
27
|
+
* окном высоту задаёт стек слоёв (см. {@link floatingZIndex}).
|
|
28
|
+
*/
|
|
25
29
|
zIndexVar?: string;
|
|
26
30
|
}
|
|
27
31
|
export interface UseFloatingReturn {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Чтение дефолтов `GrConfigProvider` — публичной точкой входа.
|
|
3
|
+
*
|
|
4
|
+
* Сами функции живут в `components/GrConfigProvider/context.ts` и оттуда же
|
|
5
|
+
* реэкспортируются барrelем компонента. Отдельный субпуть нужен пакетам-
|
|
6
|
+
* компаньонам: импорт из `components/GrConfigProvider` виден `granular doctor`
|
|
7
|
+
* как ребро графа компонентов, и он справедливо требует объявить зависимость.
|
|
8
|
+
* Объявлять её нельзя — композабл ничего не рендерит, а объявление притащило
|
|
9
|
+
* бы потребителю весь CSS и safelist провайдера. Импорт из `composables/*`
|
|
10
|
+
* ребра не создаёт.
|
|
11
|
+
*/
|
|
12
|
+
export { resolveGrConfig, useGrComponentDefaults, useGrComponentProp, useGrComponentSize, useGrConfig, useGrThemeAttrs, } from '../components/GrConfigProvider/context';
|
|
13
|
+
export type { GrConfigContext, GrConfigSource, GrConfigurableComponent, UseGrComponentSizeOptions, } from '../components/GrConfigProvider/context';
|
|
14
|
+
/**
|
|
15
|
+
* Открытый реестр компонентов, у которых есть настраиваемые через конфиг пропы.
|
|
16
|
+
*
|
|
17
|
+
* Объявление живёт здесь, а не в `GrConfigProvider/context`, потому что это
|
|
18
|
+
* **точка расширения**: компонент дополняет реестр из своей папки через
|
|
19
|
+
* declaration merging, и то же самое обязан уметь companion-пакет. Дополнять
|
|
20
|
+
* можно только тот модуль, который тип объявляет; через реэкспорт-баррель
|
|
21
|
+
* слияние работает лишь до первой чужой аугментации, а дальше молча
|
|
22
|
+
* отваливается — типы расходятся с рантаймом, ошибки нет.
|
|
23
|
+
*
|
|
24
|
+
* ```ts
|
|
25
|
+
* // GrButton/defaults.ts
|
|
26
|
+
* declare module '../../composables/useGrComponentConfig' {
|
|
27
|
+
* interface GrComponentDefaultsRegistry {
|
|
28
|
+
* GrButton: GrButtonConfigurableProps
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* Companion-пакет пишет тот же блок с публичным именем модуля
|
|
34
|
+
* `@feugene/granularity/composables/useGrComponentConfig`.
|
|
35
|
+
*
|
|
36
|
+
* Реестр пуст по умолчанию и состоит ровно из тех компонентов, которые попали
|
|
37
|
+
* в граф типов потребителя: импортировали только `GrButton` — в
|
|
38
|
+
* `componentDefaults` типизирована только кнопка.
|
|
39
|
+
*/
|
|
40
|
+
export interface GrComponentDefaultsRegistry {
|
|
41
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Публичная точка входа к строкам пакета.
|
|
3
|
+
*
|
|
4
|
+
* Реализация живёт в `internal/granularityI18n.ts` и остаётся внутренней: там
|
|
5
|
+
* же `resolveGranularityI18n` — резолвер адаптера для кода вне `setup`, который
|
|
6
|
+
* публичным контрактом не является. Наружу выходит только то, что нужно
|
|
7
|
+
* потребителю и companion-пакетам: сам композабл и тип адаптера.
|
|
8
|
+
*
|
|
9
|
+
* Файл-фасад, а не переезд: `internal/granularityI18n` импортируют 55 файлов
|
|
10
|
+
* пакета, и переписывание путей ради смены директории — риск без выгоды.
|
|
11
|
+
*/
|
|
12
|
+
export { useGranularityTranslations } from '../internal/granularityI18n';
|
|
13
|
+
export type { GranularityI18nLike } from '../internal/granularityI18n';
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import type { ComputedRef } from 'vue';
|
|
2
|
+
/**
|
|
3
|
+
* Roving tabindex: группа — одна остановка `Tab`, внутрь заходят стрелками.
|
|
4
|
+
*
|
|
5
|
+
* Механика написана в пакете шесть раз (`GrDropdownMenu`, `GrTree`, `GrTabs`,
|
|
6
|
+
* `GrSegmented`, `GrRadio`, `GrInputTag`) и разошлась не стилистически, а по
|
|
7
|
+
* существу: у одних кольцо зациклено, у других упирается в края; одни
|
|
8
|
+
* пропускают выключенные элементы, другие намеренно нет; адресуются то
|
|
9
|
+
* индексом, то ключом, то значением. Каждое расхождение здесь стало опцией —
|
|
10
|
+
* поэтому опций много, и это дешевле, чем седьмая копия.
|
|
11
|
+
*
|
|
12
|
+
* Осознанно **не** обобщается активация: `Enter`/`Space` и «двигает ли стрелка
|
|
13
|
+
* выбор» — доменная логика компонента. У `GrSegmented` и `GrRadio` стрелка
|
|
14
|
+
* меняет значение, у `GrTree` и `GrInputTag` — нет, у `GrTabs` это проп.
|
|
15
|
+
* Примитив ведёт фокус и отдаёт `onMove`; что делать с переездом, решает
|
|
16
|
+
* компонент.
|
|
17
|
+
*
|
|
18
|
+
* Инвариант «ровно один элемент с `tabindex="0"`» держит `rovingKey`: это
|
|
19
|
+
* `computed`, а не `ref`, поэтому при смене набора он самокорректируется в
|
|
20
|
+
* момент чтения. Отдельная нормализация с `watch(..., { flush: 'sync' })`,
|
|
21
|
+
* как в `GrTree`, больше не нужна.
|
|
22
|
+
*/
|
|
23
|
+
/** Какие стрелки ведут по набору. */
|
|
24
|
+
export type GrRovingOrientation = 'horizontal' | 'vertical' | 'both' | 'grid';
|
|
25
|
+
/** Край набора, в который упёрлось движение. */
|
|
26
|
+
export type GrRovingEdge = 'start' | 'end';
|
|
27
|
+
export interface UseRovingFocusOptions<TKey> {
|
|
28
|
+
/** Ключи элементов в порядке отображения. Индекс, значение, opaque-ключ — что угодно сравнимое по `===`. */
|
|
29
|
+
items: () => readonly TKey[];
|
|
30
|
+
/**
|
|
31
|
+
* DOM-узел элемента. Массив ref-ов, `Map`, `querySelector` — примитиву
|
|
32
|
+
* безразлично, знать раскладку обязан компонент.
|
|
33
|
+
*/
|
|
34
|
+
elementFor: (key: TKey) => HTMLElement | null | undefined;
|
|
35
|
+
/** Выключен ли элемент. Спрашивается только при `skipDisabled`. */
|
|
36
|
+
isDisabled?: (key: TKey) => boolean;
|
|
37
|
+
/** По умолчанию `vertical`. */
|
|
38
|
+
orientation?: () => GrRovingOrientation;
|
|
39
|
+
/** Ширина строки для `orientation: 'grid'`. Игнорируется в остальных режимах. */
|
|
40
|
+
columns?: () => number;
|
|
41
|
+
/** Замкнуто ли кольцо. По умолчанию `true`. */
|
|
42
|
+
wrap?: () => boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Пропускать выключенные при движении. По умолчанию `false`: в паттерне
|
|
45
|
+
* `menu` выключенный пункт остаётся в обходе намеренно — `aria-disabled`
|
|
46
|
+
* оставляет его фокусируемым, чтобы скринридер прочёл, что он есть.
|
|
47
|
+
*/
|
|
48
|
+
skipDisabled?: () => boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Стартовый элемент, когда фокус в группе ещё не был — обычно выбранное
|
|
51
|
+
* значение.
|
|
52
|
+
*
|
|
53
|
+
* **Выключенность здесь не проверяется, и это не упущение.** Проверить её
|
|
54
|
+
* автоматически по `isDisabled` нельзя: у `GrSegmented` загружающийся сегмент
|
|
55
|
+
* остановку `Tab` сохраняет, хотя для движения заблокирован, а у `GrRadio`
|
|
56
|
+
* выключенный переключатель терять её обязан. Условие знает только вызывающий,
|
|
57
|
+
* поэтому геттер обязан вернуть `undefined` для значения, которое не может
|
|
58
|
+
* принять фокус. Забыть об этом — значит оставить группу без остановки `Tab`
|
|
59
|
+
* вовсе: элемент с `tabindex="0"` будет назначен, но отрисует `-1`.
|
|
60
|
+
*/
|
|
61
|
+
initialKey?: () => TKey | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Позиция переехала — компонент решает, менять ли заодно выбор. Вызывается
|
|
64
|
+
* **до** переноса фокуса: в `radiogroup` стрелка переносит выбор, и модель
|
|
65
|
+
* обязана примениться раньше, чем сфокусируется целевой элемент.
|
|
66
|
+
*/
|
|
67
|
+
onMove?: (key: TKey, previous: TKey | undefined) => void;
|
|
68
|
+
/**
|
|
69
|
+
* Движение упёрлось в край при `wrap: false`. Вернул `true` — считаем клавишу
|
|
70
|
+
* обработанной (кольцо `GrInputTag` так отдаёт фокус полю ввода, календарь —
|
|
71
|
+
* листает месяц).
|
|
72
|
+
*/
|
|
73
|
+
onOverflow?: (edge: GrRovingEdge, delta: number) => boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Донести элемент до экрана перед фокусом: виртуализация, `scrollIntoView`,
|
|
76
|
+
* ожидание перерисовки после `onMove`. Вернул промис — фокус ждёт ровно его,
|
|
77
|
+
* без добавленных примитивом тиков; вернул `undefined` — фокус остаётся
|
|
78
|
+
* синхронным, чтобы не менять тайминг у компонентов, которые на него
|
|
79
|
+
* полагаются.
|
|
80
|
+
*/
|
|
81
|
+
beforeFocus?: (key: TKey) => void | Promise<void>;
|
|
82
|
+
}
|
|
83
|
+
export interface UseRovingFocusReturn<TKey> {
|
|
84
|
+
/** Элемент, который держит `tabindex="0"`. Никогда не «никто» при непустом наборе. */
|
|
85
|
+
rovingKey: ComputedRef<TKey | undefined>;
|
|
86
|
+
/** `0` для роверного элемента, `-1` для всех остальных. */
|
|
87
|
+
tabindexFor: (key: TKey) => 0 | -1;
|
|
88
|
+
/** Сделать активным без переноса фокуса — для синхронизации с мышью (`@focus`, `@click`). */
|
|
89
|
+
setActive: (key: TKey) => void;
|
|
90
|
+
/**
|
|
91
|
+
* Забыть явно наведённый фокус: остановка `Tab` возвращается к производной
|
|
92
|
+
* (`initialKey` → первый доступный). Нужно, когда набор опустел, — иначе
|
|
93
|
+
* устаревший ключ всплывёт, как только элементы появятся снова.
|
|
94
|
+
*/
|
|
95
|
+
reset: () => void;
|
|
96
|
+
/** Сделать активным и перенести фокус. */
|
|
97
|
+
focusKey: (key: TKey) => Promise<void>;
|
|
98
|
+
/** Сдвиг на `delta` позиций от текущего. Вернёт `false`, если движение не состоялось. */
|
|
99
|
+
moveBy: (delta: number) => boolean;
|
|
100
|
+
/** На край набора (в `grid` — на край текущей строки). */
|
|
101
|
+
moveToEdge: (edge: GrRovingEdge) => boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Стрелки, `Home`, `End` по объявленной ориентации. Возвращает `true`, если
|
|
104
|
+
* клавиша обработана (с `preventDefault`) — остальное компонент разбирает сам.
|
|
105
|
+
*/
|
|
106
|
+
handleNavigationKeys: (event: KeyboardEvent) => boolean;
|
|
107
|
+
}
|
|
108
|
+
export declare function useRovingFocus<TKey>(options: UseRovingFocusOptions<TKey>): UseRovingFocusReturn<TKey>;
|
|
@@ -66,6 +66,7 @@ export declare const granularityComponentConfigs: {
|
|
|
66
66
|
GrSidebar: GranularComponentDescriptor<"GrSidebar">;
|
|
67
67
|
GrSkeleton: GranularComponentDescriptor<"GrSkeleton">;
|
|
68
68
|
GrSlider: GranularComponentDescriptor<"GrSlider">;
|
|
69
|
+
GrSortableList: GranularComponentDescriptor<"GrSortableList">;
|
|
69
70
|
GrSplitter: GranularComponentDescriptor<"GrSplitter">;
|
|
70
71
|
GrStatistic: GranularComponentDescriptor<"GrStatistic">;
|
|
71
72
|
GrSwitch: GranularComponentDescriptor<"GrSwitch">;
|
|
@@ -41,6 +41,7 @@ export declare const en: {
|
|
|
41
41
|
drag: string;
|
|
42
42
|
expand: string;
|
|
43
43
|
collapse: string;
|
|
44
|
+
moved: string;
|
|
44
45
|
};
|
|
45
46
|
select: {
|
|
46
47
|
customValuePlaceholder: string;
|
|
@@ -59,6 +60,10 @@ export declare const en: {
|
|
|
59
60
|
sortAsc: string;
|
|
60
61
|
sortDesc: string;
|
|
61
62
|
sortNone: string;
|
|
63
|
+
moveColumn: string;
|
|
64
|
+
columnMoved: string;
|
|
65
|
+
resizeColumn: string;
|
|
66
|
+
columnResized: string;
|
|
62
67
|
};
|
|
63
68
|
breadcrumbs: {
|
|
64
69
|
label: string;
|
|
@@ -277,6 +282,16 @@ export declare const en: {
|
|
|
277
282
|
control: string;
|
|
278
283
|
enter: string;
|
|
279
284
|
escape: string;
|
|
285
|
+
tab: string;
|
|
286
|
+
backspace: string;
|
|
287
|
+
delete: string;
|
|
288
|
+
pageUp: string;
|
|
289
|
+
pageDown: string;
|
|
290
|
+
arrowUp: string;
|
|
291
|
+
arrowDown: string;
|
|
292
|
+
arrowLeft: string;
|
|
293
|
+
arrowRight: string;
|
|
294
|
+
then: string;
|
|
280
295
|
};
|
|
281
296
|
link: {
|
|
282
297
|
opensInNewTab: string;
|
|
@@ -317,6 +332,15 @@ export declare const en: {
|
|
|
317
332
|
emptyState: {
|
|
318
333
|
title: string;
|
|
319
334
|
};
|
|
335
|
+
sortable: {
|
|
336
|
+
label: string;
|
|
337
|
+
handle: string;
|
|
338
|
+
empty: string;
|
|
339
|
+
grabbed: string;
|
|
340
|
+
moved: string;
|
|
341
|
+
dropped: string;
|
|
342
|
+
cancelled: string;
|
|
343
|
+
};
|
|
320
344
|
};
|
|
321
345
|
common: {
|
|
322
346
|
confirm: string;
|
|
@@ -350,6 +374,7 @@ export declare const en: {
|
|
|
350
374
|
drag: string;
|
|
351
375
|
expand: string;
|
|
352
376
|
collapse: string;
|
|
377
|
+
moved: string;
|
|
353
378
|
};
|
|
354
379
|
select: {
|
|
355
380
|
customValuePlaceholder: string;
|
|
@@ -368,6 +393,10 @@ export declare const en: {
|
|
|
368
393
|
sortAsc: string;
|
|
369
394
|
sortDesc: string;
|
|
370
395
|
sortNone: string;
|
|
396
|
+
moveColumn: string;
|
|
397
|
+
columnMoved: string;
|
|
398
|
+
resizeColumn: string;
|
|
399
|
+
columnResized: string;
|
|
371
400
|
};
|
|
372
401
|
breadcrumbs: {
|
|
373
402
|
label: string;
|
|
@@ -586,6 +615,16 @@ export declare const en: {
|
|
|
586
615
|
control: string;
|
|
587
616
|
enter: string;
|
|
588
617
|
escape: string;
|
|
618
|
+
tab: string;
|
|
619
|
+
backspace: string;
|
|
620
|
+
delete: string;
|
|
621
|
+
pageUp: string;
|
|
622
|
+
pageDown: string;
|
|
623
|
+
arrowUp: string;
|
|
624
|
+
arrowDown: string;
|
|
625
|
+
arrowLeft: string;
|
|
626
|
+
arrowRight: string;
|
|
627
|
+
then: string;
|
|
589
628
|
};
|
|
590
629
|
link: {
|
|
591
630
|
opensInNewTab: string;
|
|
@@ -626,6 +665,15 @@ export declare const en: {
|
|
|
626
665
|
emptyState: {
|
|
627
666
|
title: string;
|
|
628
667
|
};
|
|
668
|
+
sortable: {
|
|
669
|
+
label: string;
|
|
670
|
+
handle: string;
|
|
671
|
+
empty: string;
|
|
672
|
+
grabbed: string;
|
|
673
|
+
moved: string;
|
|
674
|
+
dropped: string;
|
|
675
|
+
cancelled: string;
|
|
676
|
+
};
|
|
629
677
|
}>;
|
|
630
678
|
};
|
|
631
679
|
};
|