@feugene/granularity 0.41.0 → 0.43.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/LICENSE +13 -162
- package/README.md +5 -5
- package/dist/chunks/config-BXRmsn3t.js +172 -0
- package/dist/chunks/config-BXRmsn3t.js.map +1 -0
- package/dist/chunks/{config-BRESvs9g.js → config-Ca8qr8Q3.js} +1 -1
- package/dist/chunks/{config-BRESvs9g.js.map → config-Ca8qr8Q3.js.map} +1 -1
- package/dist/chunks/config-Dg0bSoGw.js +81 -0
- package/dist/chunks/config-Dg0bSoGw.js.map +1 -0
- package/dist/chunks/config-DmED6aJV.js +237 -0
- package/dist/chunks/config-DmED6aJV.js.map +1 -0
- package/dist/chunks/{config-DWL81-aM.js → config-hnoZvcIM.js} +2 -20
- package/dist/chunks/config-hnoZvcIM.js.map +1 -0
- package/dist/chunks/dragSortGeometry-CY-llfrQ.js +87 -0
- package/dist/chunks/dragSortGeometry-CY-llfrQ.js.map +1 -0
- package/dist/chunks/{en-CuuLfNHX.js → en-C_QkUTRL.js} +36 -1
- package/dist/chunks/en-C_QkUTRL.js.map +1 -0
- package/dist/chunks/{es-CsmvfESn.js → es-B4t_3Wnh.js} +3 -3
- package/dist/chunks/{es-CsmvfESn.js.map → es-B4t_3Wnh.js.map} +1 -1
- package/dist/chunks/{es-CSnmrcMw.js → es-DemSEhZE.js} +36 -1
- package/dist/chunks/es-DemSEhZE.js.map +1 -0
- package/dist/chunks/{generated-B95IBXs6.js → generated-VcxJTo_q.js} +210 -0
- package/dist/chunks/generated-VcxJTo_q.js.map +1 -0
- package/dist/chunks/{grKbdStyles-DENu8pUK.js → grKbdStyles-ByMsX-lQ.js} +17 -2
- package/dist/chunks/grKbdStyles-ByMsX-lQ.js.map +1 -0
- package/dist/chunks/{granular-provider-BshNi2la.js → granular-provider-BohXQcNt.js} +8 -2
- package/dist/chunks/granular-provider-BohXQcNt.js.map +1 -0
- package/dist/chunks/{ru-BKWafECI.js → ru-CLUErjhY.js} +36 -1
- package/dist/chunks/ru-CLUErjhY.js.map +1 -0
- package/dist/chunks/scrollOverflow-B_kEdcol.js +31 -0
- package/dist/chunks/scrollOverflow-B_kEdcol.js.map +1 -0
- package/dist/chunks/tones-CRJAaYyg.js +21 -0
- package/dist/chunks/tones-CRJAaYyg.js.map +1 -0
- package/dist/components/GrAffix/chunks/GrAffix-CWtC7yi8.js +272 -0
- package/dist/components/GrAffix/chunks/GrAffix-CWtC7yi8.js.map +1 -0
- package/dist/components/GrAffix/index.js +3 -0
- package/dist/components/GrBreadcrumbs/chunks/{GrBreadcrumbs-DOpwY2EF.js → GrBreadcrumbs-D0qPry_R.js} +4 -1
- package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-D0qPry_R.js.map +1 -0
- package/dist/components/GrBreadcrumbs/index.js +1 -1
- package/dist/components/GrCarousel/chunks/GrCarousel-ByuughtI.js +761 -0
- package/dist/components/GrCarousel/chunks/GrCarousel-ByuughtI.js.map +1 -0
- package/dist/components/GrCarousel/index.js +3 -0
- package/dist/components/GrCarousel/styles.css +1 -0
- package/dist/components/GrColorPicker/chunks/{GrColorPicker-BwzRLs-i.js → GrColorPicker-9mTR-YZ_.js} +1 -1
- package/dist/components/GrColorPicker/chunks/{GrColorPicker-BwzRLs-i.js.map → GrColorPicker-9mTR-YZ_.js.map} +1 -1
- package/dist/components/GrColorPicker/index.js +1 -1
- package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-CnzPuoIM.js → GrCommandPalette-Ha4s3DMT.js} +1 -1
- package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-CnzPuoIM.js.map → GrCommandPalette-Ha4s3DMT.js.map} +1 -1
- package/dist/components/GrCommandPalette/index.js +1 -1
- package/dist/components/GrDataTable/chunks/{GrDataTable-DpyipOFx.js → GrDataTable-xNSmO_I-.js} +9 -4
- package/dist/components/GrDataTable/chunks/GrDataTable-xNSmO_I-.js.map +1 -0
- package/dist/components/GrDataTable/index.js +1 -1
- package/dist/components/GrDelta/chunks/{GrDelta-BpfqebEV.js → GrDelta-CgTvfoIN.js} +0 -0
- package/dist/components/GrDelta/chunks/GrDelta-CgTvfoIN.js.map +1 -0
- package/dist/components/GrDelta/index.js +1 -1
- package/dist/components/GrDescriptionList/chunks/{GrDescriptionList-D8ANFpn_.js → GrDescriptionList-Dz2Jj1if.js} +26 -11
- package/dist/components/GrDescriptionList/chunks/GrDescriptionList-Dz2Jj1if.js.map +1 -0
- package/dist/components/GrDescriptionList/index.js +1 -1
- package/dist/components/GrFilePreview/chunks/{GrFilePreview-PabkLgYX.js → GrFilePreview-2kVOg1C7.js} +40 -5
- package/dist/components/GrFilePreview/chunks/GrFilePreview-2kVOg1C7.js.map +1 -0
- package/dist/components/GrFilePreview/index.js +1 -1
- package/dist/components/GrImageViewer/chunks/{GrImageViewer-Dd2gJ-j_.js.map → GrImageViewer-DK-iVHHC.js.map} +1 -1
- package/dist/components/GrImageViewer/index.js +1 -1
- package/dist/components/GrInputTag/chunks/{GrInputTag-3Au5HWZL.js → GrInputTag-Ci8AO1ze.js} +5 -2
- package/dist/components/GrInputTag/chunks/GrInputTag-Ci8AO1ze.js.map +1 -0
- package/dist/components/GrInputTag/index.js +1 -1
- package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-CDGOX3C0.js → GrJsonViewer-CwCBMh4h.js} +34 -8
- package/dist/components/GrJsonViewer/chunks/GrJsonViewer-CwCBMh4h.js.map +1 -0
- package/dist/components/GrJsonViewer/index.js +1 -1
- package/dist/components/GrKbd/chunks/{GrKbd-D_a1mPLe.js → GrKbd-BNMeoaLV.js} +1 -1
- package/dist/components/GrKbd/chunks/{GrKbd-D_a1mPLe.js.map → GrKbd-BNMeoaLV.js.map} +1 -1
- package/dist/components/GrKbd/index.js +2 -2
- package/dist/components/GrNumberInput/chunks/{GrNumberInput-BqPydXpK.js → GrNumberInput-CL5QhOmx.js} +5 -2
- package/dist/components/GrNumberInput/chunks/GrNumberInput-CL5QhOmx.js.map +1 -0
- package/dist/components/GrNumberInput/index.js +1 -1
- package/dist/components/GrProgressBar/index.js +1 -1
- package/dist/components/GrSegmented/chunks/{GrSegmented-NKTi9bMG.js → GrSegmented-CuDaKA6S.js} +5 -1
- package/dist/components/GrSegmented/chunks/GrSegmented-CuDaKA6S.js.map +1 -0
- package/dist/components/GrSegmented/index.js +1 -1
- package/dist/components/GrSlider/chunks/{GrSlider-Db-jACXz.js.map → GrSlider-CO8N9SF6.js.map} +1 -1
- package/dist/components/GrSlider/index.js +1 -1
- package/dist/components/GrSortableList/chunks/{GrSortableList-CQCaWivn.js → GrSortableList-NKriuGm_.js} +6 -2
- package/dist/components/GrSortableList/chunks/GrSortableList-NKriuGm_.js.map +1 -0
- package/dist/components/GrSortableList/index.js +1 -1
- package/dist/components/GrSteps/chunks/{GrSteps-DXj7m-WO.js → GrSteps-Cng-Wrjk.js} +5 -1
- package/dist/components/GrSteps/chunks/GrSteps-Cng-Wrjk.js.map +1 -0
- package/dist/components/GrSteps/index.js +1 -1
- package/dist/components/GrTabs/chunks/{GrTabs-DHfv67cp.js → GrTabs-s9RzC1WX.js} +7 -32
- package/dist/components/GrTabs/chunks/GrTabs-s9RzC1WX.js.map +1 -0
- package/dist/components/GrTabs/index.js +1 -1
- package/dist/components/GrTransfer/chunks/GrTransfer-8FA78ny6.js +1368 -0
- package/dist/components/GrTransfer/chunks/GrTransfer-8FA78ny6.js.map +1 -0
- package/dist/components/GrTransfer/index.js +3 -0
- package/dist/components/GrTransfer/styles.css +1 -0
- package/dist/components/GrTree/chunks/{GrTree-BFWFc0Bm.js → GrTree-CkHzgYg1.js} +3 -3
- package/dist/components/GrTree/chunks/{GrTree-BFWFc0Bm.js.map → GrTree-CkHzgYg1.js.map} +1 -1
- package/dist/components/GrTree/index.js +1 -1
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DJa2lYGe.js → GrTreeSelect-DUsv3_mF.js} +1 -1
- package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DJa2lYGe.js.map → GrTreeSelect-DUsv3_mF.js.map} +1 -1
- package/dist/components/GrTreeSelect/index.js +1 -1
- package/dist/composables/useDragSort.js +179 -1
- package/dist/composables/useDragSort.js.map +1 -0
- 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 +32 -28
- package/dist/theme.js +1 -1
- package/dist/tokens.js +1 -1
- package/dist/types/components/GrAffix/GrAffix.vue.d.ts +91 -0
- package/dist/types/components/GrAffix/affixState.d.ts +81 -0
- package/dist/types/components/GrAffix/config.d.ts +1 -0
- package/dist/types/components/GrAffix/grAffixStyles.d.ts +46 -0
- package/dist/types/components/GrAffix/index.d.ts +9 -0
- package/dist/types/components/GrAffix/safelist.d.ts +1 -0
- package/dist/types/components/GrAlert/GrAlert.vue.d.ts +1 -1
- package/dist/types/components/GrBadgeWrap/GrBadgeWrap.vue.d.ts +2 -2
- package/dist/types/components/GrButton/GrButton.vue.d.ts +2 -2
- package/dist/types/components/GrCard/GrCard.vue.d.ts +1 -1
- package/dist/types/components/GrCarousel/GrCarousel.vue.d.ts +151 -0
- package/dist/types/components/GrCarousel/GrCarouselSlide.vue.d.ts +53 -0
- package/dist/types/components/GrCarousel/carouselNavigation.d.ts +57 -0
- package/dist/types/components/GrCarousel/composables/useCarouselAutoplay.d.ts +33 -0
- package/dist/types/components/GrCarousel/composables/useCarouselSwipe.d.ts +20 -0
- package/dist/types/components/GrCarousel/config.d.ts +7 -0
- package/dist/types/components/GrCarousel/defaults.d.ts +13 -0
- package/dist/types/components/GrCarousel/grCarouselContext.d.ts +46 -0
- package/dist/types/components/GrCarousel/grCarouselStyles.d.ts +80 -0
- package/dist/types/components/GrCarousel/index.d.ts +12 -0
- package/dist/types/components/GrCarousel/safelist.d.ts +1 -0
- package/dist/types/components/GrCheckbox/GrCheckbox.vue.d.ts +3 -3
- package/dist/types/components/GrCheckboxGroup/GrCheckboxGroup.vue.d.ts +2 -2
- package/dist/types/components/GrChip/GrChip.vue.d.ts +2 -2
- package/dist/types/components/GrChipGroup/GrChipGroup.vue.d.ts +2 -2
- package/dist/types/components/GrCollapse/GrCollapse.vue.d.ts +1 -1
- package/dist/types/components/GrCollapse/GrCollapseItem.vue.d.ts +1 -1
- package/dist/types/components/GrColorPicker/GrColorPicker.vue.d.ts +3 -3
- package/dist/types/components/GrCommandPalette/GrCommandPalette.vue.d.ts +1 -1
- package/dist/types/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +1 -1
- package/dist/types/components/GrContextMenu/GrContextMenu.vue.d.ts +2 -2
- package/dist/types/components/GrDialog/GrDialog.vue.d.ts +1 -1
- package/dist/types/components/GrDivider/GrDivider.vue.d.ts +2 -2
- package/dist/types/components/GrDrawer/GrDrawer.vue.d.ts +1 -1
- package/dist/types/components/GrDropdown/GrDropdown.vue.d.ts +3 -3
- package/dist/types/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +3 -3
- package/dist/types/components/GrDropdownMenu/GrDropdownMenuItem.vue.d.ts +1 -1
- package/dist/types/components/GrEmptyState/GrEmptyState.vue.d.ts +1 -1
- package/dist/types/components/GrFilePreview/GrFilePreview.vue.d.ts +14 -0
- package/dist/types/components/GrFileUpload/GrFileUpload.vue.d.ts +1 -1
- package/dist/types/components/GrFormField/GrFormField.vue.d.ts +3 -3
- package/dist/types/components/GrFormFile/GrFormFile.vue.d.ts +2 -2
- package/dist/types/components/GrFormSection/GrFormSection.vue.d.ts +1 -1
- package/dist/types/components/GrIcon/GrIcon.vue.d.ts +1 -1
- package/dist/types/components/GrImageViewer/GrImageViewer.vue.d.ts +3 -3
- package/dist/types/components/GrInput/GrInput.vue.d.ts +4 -4
- package/dist/types/components/GrInputTag/GrInputTag.vue.d.ts +3 -3
- package/dist/types/components/GrKbd/GrKbd.vue.d.ts +1 -1
- package/dist/types/components/GrKbd/grKbdStyles.d.ts +17 -2
- package/dist/types/components/GrLink/GrLink.vue.d.ts +1 -1
- package/dist/types/components/GrList/GrListItem.vue.d.ts +2 -2
- package/dist/types/components/GrNavbar/GrNavbar.vue.d.ts +2 -2
- package/dist/types/components/GrNumberInput/GrNumberInput.vue.d.ts +3 -3
- package/dist/types/components/GrPagination/GrPagination.vue.d.ts +1 -1
- package/dist/types/components/GrPopover/GrPopover.vue.d.ts +3 -3
- package/dist/types/components/GrPromptDialog/GrPromptDialog.vue.d.ts +3 -3
- package/dist/types/components/GrRadio/GrRadio.vue.d.ts +2 -2
- package/dist/types/components/GrRadioGroup/GrRadioGroup.vue.d.ts +2 -2
- package/dist/types/components/GrRating/GrRating.vue.d.ts +2 -2
- package/dist/types/components/GrSegmented/GrSegmented.vue.d.ts +2 -2
- package/dist/types/components/GrSidebar/GrSidebarItem.vue.d.ts +1 -1
- package/dist/types/components/GrSkeleton/GrSkeleton.vue.d.ts +1 -1
- package/dist/types/components/GrSlider/GrSlider.vue.d.ts +3 -3
- package/dist/types/components/GrSplitter/GrSplitter.vue.d.ts +1 -1
- package/dist/types/components/GrStatistic/GrStatistic.vue.d.ts +2 -2
- package/dist/types/components/GrSwitch/GrSwitch.vue.d.ts +3 -3
- package/dist/types/components/GrTable/GrTable.vue.d.ts +1 -1
- package/dist/types/components/GrTabs/GrTabs.vue.d.ts +1 -1
- package/dist/types/components/GrTextarea/GrTextarea.vue.d.ts +2 -2
- package/dist/types/components/GrTimeline/GrTimelineItem.vue.d.ts +2 -2
- package/dist/types/components/GrToaster/GrToaster.vue.d.ts +1 -1
- package/dist/types/components/GrTooltip/GrTooltip.vue.d.ts +3 -3
- package/dist/types/components/GrTransfer/GrTransfer.vue.d.ts +103 -0
- package/dist/types/components/GrTransfer/config.d.ts +1 -0
- package/dist/types/components/GrTransfer/defaults.d.ts +15 -0
- package/dist/types/components/GrTransfer/grTransferStyles.d.ts +127 -0
- package/dist/types/components/GrTransfer/index.d.ts +11 -0
- package/dist/types/components/GrTransfer/safelist.d.ts +1 -0
- package/dist/types/components/GrTransfer/transferGeometry.d.ts +44 -0
- package/dist/types/components/GrTransfer/transferModel.d.ts +68 -0
- package/dist/types/components/GrTransfer/transferSelection.d.ts +36 -0
- package/dist/types/components/GrTransfer/useTransferDrag.d.ts +48 -0
- package/dist/types/granular-provider/shared.d.ts +3 -0
- package/dist/types/i18n/messages/en.d.ts +70 -0
- package/dist/types/i18n/messages/es.d.ts +70 -0
- package/dist/types/i18n/messages/ru.d.ts +70 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/web-types.json +735 -287
- package/package.json +19 -3
- package/dist/chunks/config-DWL81-aM.js.map +0 -1
- package/dist/chunks/en-CuuLfNHX.js.map +0 -1
- package/dist/chunks/es-CSnmrcMw.js.map +0 -1
- package/dist/chunks/generated-B95IBXs6.js.map +0 -1
- package/dist/chunks/grKbdStyles-DENu8pUK.js.map +0 -1
- package/dist/chunks/granular-provider-BshNi2la.js.map +0 -1
- package/dist/chunks/ru-BKWafECI.js.map +0 -1
- package/dist/chunks/useDragSort-0l47h4yb.js +0 -265
- package/dist/chunks/useDragSort-0l47h4yb.js.map +0 -1
- package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-DOpwY2EF.js.map +0 -1
- package/dist/components/GrDataTable/chunks/GrDataTable-DpyipOFx.js.map +0 -1
- package/dist/components/GrDelta/chunks/GrDelta-BpfqebEV.js.map +0 -1
- package/dist/components/GrDescriptionList/chunks/GrDescriptionList-D8ANFpn_.js.map +0 -1
- package/dist/components/GrFilePreview/chunks/GrFilePreview-PabkLgYX.js.map +0 -1
- package/dist/components/GrInputTag/chunks/GrInputTag-3Au5HWZL.js.map +0 -1
- package/dist/components/GrJsonViewer/chunks/GrJsonViewer-CDGOX3C0.js.map +0 -1
- package/dist/components/GrNumberInput/chunks/GrNumberInput-BqPydXpK.js.map +0 -1
- package/dist/components/GrSegmented/chunks/GrSegmented-NKTi9bMG.js.map +0 -1
- package/dist/components/GrSortableList/chunks/GrSortableList-CQCaWivn.js.map +0 -1
- package/dist/components/GrSteps/chunks/GrSteps-DXj7m-WO.js.map +0 -1
- package/dist/components/GrTabs/chunks/GrTabs-DHfv67cp.js.map +0 -1
- package/dist/components/GrImageViewer/chunks/{GrImageViewer-Dd2gJ-j_.js → GrImageViewer-DK-iVHHC.js} +3 -3
- package/dist/components/GrSlider/chunks/{GrSlider-Db-jACXz.js → GrSlider-CO8N9SF6.js} +1 -1
|
@@ -131,10 +131,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
131
131
|
fixedLayout: boolean;
|
|
132
132
|
tableMinWidth: undefined;
|
|
133
133
|
}>>> & Readonly<{}>, {
|
|
134
|
+
caption: string;
|
|
134
135
|
size: GrTableSize;
|
|
135
136
|
emptyText: string;
|
|
136
137
|
loading: boolean;
|
|
137
|
-
caption: string;
|
|
138
138
|
columnCount: number;
|
|
139
139
|
maxHeight: string | number;
|
|
140
140
|
ariaLabel: string;
|
|
@@ -88,10 +88,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
88
88
|
variant: GrTabsVariant;
|
|
89
89
|
closable: boolean;
|
|
90
90
|
size: GrTabsSize;
|
|
91
|
+
activationMode: GrTabsActivationMode;
|
|
91
92
|
emptyText: string;
|
|
92
93
|
orientation: GrTabsOrientation;
|
|
93
94
|
idBase: string;
|
|
94
|
-
activationMode: GrTabsActivationMode;
|
|
95
95
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
96
96
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
97
97
|
declare const _default: typeof __VLS_export;
|
|
@@ -104,14 +104,14 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
104
104
|
onFocus?: ((event: FocusEvent) => any) | undefined;
|
|
105
105
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
106
106
|
}>, {
|
|
107
|
+
disabled: boolean;
|
|
108
|
+
readonly: boolean;
|
|
107
109
|
size: GrTextareaSize;
|
|
108
110
|
clearable: boolean;
|
|
109
|
-
readonly: boolean;
|
|
110
111
|
name: string;
|
|
111
112
|
invalid: boolean;
|
|
112
113
|
resize: GrTextareaResize;
|
|
113
114
|
id: string;
|
|
114
|
-
disabled: boolean;
|
|
115
115
|
ariaLabel: string;
|
|
116
116
|
required: boolean;
|
|
117
117
|
placeholder: string;
|
|
@@ -48,10 +48,10 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
48
48
|
variant: string;
|
|
49
49
|
pending: boolean;
|
|
50
50
|
}>>> & Readonly<{}>, {
|
|
51
|
-
tone: GrTimelineTone;
|
|
52
|
-
variant: GrTimelineMarkerVariant;
|
|
53
51
|
time: string;
|
|
54
52
|
title: string;
|
|
53
|
+
tone: GrTimelineTone;
|
|
54
|
+
variant: GrTimelineMarkerVariant;
|
|
55
55
|
description: string;
|
|
56
56
|
pending: boolean;
|
|
57
57
|
datetime: string;
|
|
@@ -61,8 +61,8 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
61
61
|
focusHotkey: string;
|
|
62
62
|
swipeDismiss: boolean;
|
|
63
63
|
}>>> & Readonly<{}>, {
|
|
64
|
-
width: string | number;
|
|
65
64
|
placement: GrToasterPlacement;
|
|
65
|
+
width: string | number;
|
|
66
66
|
dismissLabel: string;
|
|
67
67
|
regionLabel: string;
|
|
68
68
|
maxVisible: number;
|
|
@@ -55,11 +55,11 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
|
|
|
55
55
|
}>>> & Readonly<{
|
|
56
56
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
57
57
|
}>, {
|
|
58
|
-
size: GrTooltipSize;
|
|
59
|
-
text: string;
|
|
60
58
|
placement: GrTooltipPlacement;
|
|
61
|
-
open: boolean;
|
|
62
59
|
disabled: boolean;
|
|
60
|
+
text: string;
|
|
61
|
+
size: GrTooltipSize;
|
|
62
|
+
open: boolean;
|
|
63
63
|
offsetPx: number;
|
|
64
64
|
openDelay: number;
|
|
65
65
|
closeDelay: number;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { GrComponentSize } from '../shared/sizes';
|
|
2
|
+
import type { GrTransferDirection, GrTransferKey, GrTransferSide } from './transferModel';
|
|
3
|
+
export type GrTransferItemKey<T> = string | ((item: T) => GrTransferKey);
|
|
4
|
+
export type GrTransferItemLabel<T> = string | ((item: T) => string);
|
|
5
|
+
export type GrTransferItemFlag<T> = string | ((item: T) => boolean);
|
|
6
|
+
export interface GrTransferProps<T extends Record<string, unknown> = Record<string, unknown>> {
|
|
7
|
+
/** Каталог целиком: обе панели — одна его раскладка. */
|
|
8
|
+
items: T[];
|
|
9
|
+
/** Ключи правой панели **в её порядке**: порядок и есть значение. */
|
|
10
|
+
modelValue: GrTransferKey[];
|
|
11
|
+
itemKey?: GrTransferItemKey<T>;
|
|
12
|
+
itemLabel?: GrTransferItemLabel<T>;
|
|
13
|
+
itemDisabled?: GrTransferItemFlag<T>;
|
|
14
|
+
/** Имя левой панели. Это доступное имя её `listbox`, а не украшение. */
|
|
15
|
+
sourceTitle?: string;
|
|
16
|
+
/** Имя правой панели. */
|
|
17
|
+
targetTitle?: string;
|
|
18
|
+
/** Поле поиска в каждой панели. */
|
|
19
|
+
searchable?: boolean;
|
|
20
|
+
/** Свой матчер: встроенный ищет по `itemLabel`, а строка может показывать больше. */
|
|
21
|
+
filter?: (item: T, query: string) => boolean;
|
|
22
|
+
/** Правую панель можно переставлять. */
|
|
23
|
+
sortable?: boolean;
|
|
24
|
+
/** Перетаскивание строк указателем. Усиление поверх кнопок, а не контракт. */
|
|
25
|
+
draggable?: boolean;
|
|
26
|
+
/** Высота панелей: обе одинаковы и прокручиваются внутри себя. */
|
|
27
|
+
maxHeight?: number | string;
|
|
28
|
+
size?: GrComponentSize;
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
readonly?: boolean;
|
|
31
|
+
invalid?: boolean;
|
|
32
|
+
required?: boolean;
|
|
33
|
+
ariaLabel?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface GrTransferEmits {
|
|
36
|
+
(e: 'update:modelValue', value: GrTransferKey[]): void;
|
|
37
|
+
(e: 'change', value: GrTransferKey[]): void;
|
|
38
|
+
(e: 'transfer', keys: GrTransferKey[], direction: GrTransferDirection): void;
|
|
39
|
+
(e: 'search', query: string, side: GrTransferSide): void;
|
|
40
|
+
(e: 'focus', event: FocusEvent): void;
|
|
41
|
+
(e: 'blur', event: FocusEvent): void;
|
|
42
|
+
}
|
|
43
|
+
declare const __VLS_export: <TItem extends Record<string, unknown> = Record<string, unknown>>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
44
|
+
props: import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & __VLS_PrettifyLocal<GrTransferProps<TItem> & {
|
|
45
|
+
onSearch?: ((query: string, side: GrTransferSide) => any) | undefined;
|
|
46
|
+
onBlur?: ((event: FocusEvent) => any) | undefined;
|
|
47
|
+
onChange?: ((value: GrTransferKey[]) => any) | undefined;
|
|
48
|
+
onFocus?: ((event: FocusEvent) => any) | undefined;
|
|
49
|
+
"onUpdate:modelValue"?: ((value: GrTransferKey[]) => any) | undefined;
|
|
50
|
+
onTransfer?: ((keys: GrTransferKey[], direction: GrTransferDirection) => any) | undefined;
|
|
51
|
+
}> & (typeof globalThis extends {
|
|
52
|
+
__VLS_PROPS_FALLBACK: infer P;
|
|
53
|
+
} ? P : {});
|
|
54
|
+
expose: (exposed: import("vue").ShallowUnwrapRef<{
|
|
55
|
+
focus: () => void;
|
|
56
|
+
blur: () => void;
|
|
57
|
+
focusSide: (side: GrTransferSide) => void;
|
|
58
|
+
transfer: (keys: GrTransferKey[], direction: GrTransferDirection) => undefined;
|
|
59
|
+
selectAll: (side: GrTransferSide) => void;
|
|
60
|
+
clearSelection: (side?: GrTransferSide) => void;
|
|
61
|
+
}>) => void;
|
|
62
|
+
attrs: any;
|
|
63
|
+
slots: {
|
|
64
|
+
/** Своя строка. Слот доменный: у соседей `item` — строка списка, здесь тоже. */
|
|
65
|
+
item?: (props: {
|
|
66
|
+
item: TItem;
|
|
67
|
+
side: GrTransferSide;
|
|
68
|
+
index: number;
|
|
69
|
+
selected: boolean;
|
|
70
|
+
disabled: boolean;
|
|
71
|
+
}) => unknown;
|
|
72
|
+
/** Своя шапка панели: имя, счётчик, отметка «выбрать всё». */
|
|
73
|
+
header?: (props: {
|
|
74
|
+
side: GrTransferSide;
|
|
75
|
+
title: string;
|
|
76
|
+
selected: number;
|
|
77
|
+
total: number;
|
|
78
|
+
shown: number;
|
|
79
|
+
}) => unknown;
|
|
80
|
+
/** Своя колонка кнопок между панелями. */
|
|
81
|
+
actions?: (props: {
|
|
82
|
+
toTarget: () => void;
|
|
83
|
+
toSource: () => void;
|
|
84
|
+
canToTarget: boolean;
|
|
85
|
+
canToSource: boolean;
|
|
86
|
+
}) => unknown;
|
|
87
|
+
/** Пустая панель. `filtered` — пусто из-за поиска, а не по сути. */
|
|
88
|
+
empty?: (props: {
|
|
89
|
+
side: GrTransferSide;
|
|
90
|
+
filtered: boolean;
|
|
91
|
+
}) => unknown;
|
|
92
|
+
};
|
|
93
|
+
emit: GrTransferEmits;
|
|
94
|
+
}>) => import("vue").VNode & {
|
|
95
|
+
__ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
|
|
96
|
+
};
|
|
97
|
+
declare const _default: typeof __VLS_export;
|
|
98
|
+
export default _default;
|
|
99
|
+
type __VLS_PrettifyLocal<T> = (T extends any ? {
|
|
100
|
+
[K in keyof T]: T[K];
|
|
101
|
+
} : {
|
|
102
|
+
[K in keyof T as K]: T[K];
|
|
103
|
+
}) & {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const grTransferConfig: import("@feugene/unocss-preset-granular/contract").GranularComponentDescriptor<"GrTransfer">;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { GrComponentSize } from '../GrConfigProvider/context';
|
|
2
|
+
/** Пропы `GrTransfer`, настраиваемые глобально через `componentDefaults`. */
|
|
3
|
+
export interface GrTransferConfigurableProps {
|
|
4
|
+
size: GrComponentSize;
|
|
5
|
+
/**
|
|
6
|
+
* Перетаскивание — усиление поверх кнопок, а не контракт: приложение вправе
|
|
7
|
+
* выключить его на всё поддерево, и клавиатурный путь от этого не пострадает.
|
|
8
|
+
*/
|
|
9
|
+
draggable: boolean;
|
|
10
|
+
}
|
|
11
|
+
declare module '../../composables/useGrComponentConfig' {
|
|
12
|
+
interface GrComponentDefaultsRegistry {
|
|
13
|
+
GrTransfer: GrTransferConfigurableProps;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { GrComponentSize } from '../shared/sizes';
|
|
2
|
+
export type GrTransferSize = GrComponentSize;
|
|
3
|
+
export declare const transferRootBase = "flex items-stretch gap-4";
|
|
4
|
+
export declare const transferPanelBase = "flex min-w-0 flex-1 flex-col overflow-hidden rounded-[var(--gr-radius-md)] border border-[var(--gr-brd)] bg-[var(--gr-card)]";
|
|
5
|
+
/**
|
|
6
|
+
* Панель под указателем во время переноса.
|
|
7
|
+
*
|
|
8
|
+
* Одной рамки мало: на широком экране она за пределами взгляда, занятого
|
|
9
|
+
* курсором. Мягкая подложка сообщает «сюда» там, где человек и смотрит.
|
|
10
|
+
*/
|
|
11
|
+
export declare const transferPanelDropClass = "border-[var(--gr-transfer-drop-brd,var(--gr-primary))] bg-[var(--gr-transfer-drop-bg,color-mix(in_srgb,var(--gr-primary)_6%,transparent))]";
|
|
12
|
+
export declare const transferHeaderBase = "flex items-center gap-2 border-b border-[var(--gr-brd)]";
|
|
13
|
+
export declare const transferTitleClass = "min-w-0 flex-1 truncate font-600 text-[var(--gr-fg)]";
|
|
14
|
+
export declare const transferCounterClass = "shrink-0 text-[var(--gr-muted-fg)] tabular-nums";
|
|
15
|
+
export declare const transferSearchBase = "border-b border-[var(--gr-brd)]";
|
|
16
|
+
/**
|
|
17
|
+
* Список — скроллер, но своего таб-стопа не получает: его строки фокусируемы,
|
|
18
|
+
* и вторая остановка `Tab` перед ними была бы лишней (приём `GrTabs`).
|
|
19
|
+
*/
|
|
20
|
+
export declare const transferListBase = "relative min-h-0 flex-1 overflow-y-auto";
|
|
21
|
+
export declare const transferOptionBase = "relative flex w-full select-none items-center gap-2 text-start transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] focus-visible:ring-inset";
|
|
22
|
+
/** Строку можно взять — курсор обязан это предложить до нажатия, а не после. */
|
|
23
|
+
export declare const transferOptionGrabClass = "cursor-grab";
|
|
24
|
+
export declare const transferOptionPlainClass = "cursor-pointer";
|
|
25
|
+
export declare const transferOptionStates: {
|
|
26
|
+
readonly selected: "bg-[var(--gr-transfer-selected-bg,color-mix(in_srgb,var(--gr-primary)_12%,transparent))] text-[var(--gr-fg)]";
|
|
27
|
+
readonly idle: "text-[var(--gr-fg)] hover:bg-[var(--gr-muted)]";
|
|
28
|
+
readonly disabled: "cursor-not-allowed bg-[var(--gr-muted)] text-[var(--gr-disabled-fg)]";
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Строка, только что приехавшая из соседней панели.
|
|
32
|
+
*
|
|
33
|
+
* Статичный итог перенос уже показывает — строка приходит отмеченной, счётчики
|
|
34
|
+
* меняются, — но само **движение** ничем не выдано: строки просто возникают.
|
|
35
|
+
* Короткая подсветка связывает «нажал» и «появилось». Под `prefers-reduced-motion`
|
|
36
|
+
* её гасит глобальный кламп, и остаётся тот же статичный итог.
|
|
37
|
+
*/
|
|
38
|
+
export declare const transferOptionArrivedClass = "gr-transfer-arrived";
|
|
39
|
+
/**
|
|
40
|
+
* Место, откуда строку унесли.
|
|
41
|
+
*
|
|
42
|
+
* Правило живёт в `<style>` компонента, а не утилитой: цвет текста строки задаёт
|
|
43
|
+
* класс состояния той же специфичности, и кто победит, решал бы порядок правил в
|
|
44
|
+
* собранном CSS — та же ловушка, что записана в `grTabsStyles.ts`.
|
|
45
|
+
*/
|
|
46
|
+
export declare const transferOptionDraggingClass = "gr-transfer-vacated";
|
|
47
|
+
/**
|
|
48
|
+
* Отметка строки декоративна: `GrCheckbox` внутрь `role="option"` вложить
|
|
49
|
+
* нельзя — его индикатор сам `role="checkbox"` с `tabindex="0"`, то есть ровно
|
|
50
|
+
* `nested-interactive`. Состояние объявляет `aria-selected` самой строки.
|
|
51
|
+
*/
|
|
52
|
+
export declare const transferMarkBase = "inline-flex shrink-0 items-center justify-center rounded-[var(--gr-radius-sm)] border border-[var(--gr-brd)] bg-[var(--gr-bg)]";
|
|
53
|
+
export declare const transferMarkStates: {
|
|
54
|
+
readonly selected: "border-[var(--gr-primary)] bg-[var(--gr-primary)] text-[var(--gr-primary-fg)]";
|
|
55
|
+
readonly idle: "";
|
|
56
|
+
};
|
|
57
|
+
export declare const transferMarkIconClass = "h-3 w-3";
|
|
58
|
+
export declare const transferLabelClass = "min-w-0 flex-1 truncate";
|
|
59
|
+
/**
|
|
60
|
+
* Место вставки — псевдоэлемент строки-соседа, а не отдельный узел: лишний узел
|
|
61
|
+
* между строками ломает подсчёт позиций и разделители.
|
|
62
|
+
*/
|
|
63
|
+
export declare const transferIndicatorBeforeClass = "before:absolute before:inset-x-0 before:top-0 before:h-[var(--gr-transfer-indicator-width,3px)] before:rounded-[var(--gr-radius-full)] before:bg-[var(--gr-transfer-indicator,var(--gr-primary))] before:content-empty";
|
|
64
|
+
export declare const transferIndicatorAfterClass = "after:absolute after:inset-x-0 after:bottom-0 after:h-[var(--gr-transfer-indicator-width,3px)] after:rounded-[var(--gr-radius-full)] after:bg-[var(--gr-transfer-indicator,var(--gr-primary))] after:content-empty";
|
|
65
|
+
export declare const transferEmptyClass = "flex h-full items-center justify-center px-4 py-6 text-center text-[var(--gr-muted-fg)]";
|
|
66
|
+
export declare const transferActionsClass = "flex shrink-0 items-center";
|
|
67
|
+
/**
|
|
68
|
+
* Кнопки перестановки в шапке правой панели. Перестановка обязана быть видимой:
|
|
69
|
+
* сочетание `Alt` + стрелка её ускоряет, но само по себе неоткрываемо, а на
|
|
70
|
+
* macOS ещё и неудобно — почти все мета-клавиши там заняты системой.
|
|
71
|
+
*
|
|
72
|
+
* Стрелки горизонтальные, потому что порядок — это **последовательность**, а не
|
|
73
|
+
* положение на экране: правая панель задаёт порядок колонок отчёта или полей
|
|
74
|
+
* выгрузки, и они читаются слева направо.
|
|
75
|
+
*
|
|
76
|
+
* Сочетание при этом остаётся вертикальным (`Alt` + `↑`/`↓`), и расхождение с
|
|
77
|
+
* иконками намеренное: в Chrome и Firefox под Windows и Linux `Alt` + `←`/`→` —
|
|
78
|
+
* это «назад/вперёд» в истории браузера. В Safari навигация висит на
|
|
79
|
+
* `Cmd` + стрелках, то есть там сочетание было бы свободно, — но пакет едет ко
|
|
80
|
+
* всем, и ориентироваться на одну платформу нельзя.
|
|
81
|
+
*/
|
|
82
|
+
export declare const transferReorderBase = "inline-flex shrink-0 items-center justify-center rounded-[var(--gr-radius-sm)] text-[var(--gr-muted-fg)] transition-colors hover:bg-[var(--gr-muted)] hover:text-[var(--gr-fg)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]";
|
|
83
|
+
export declare const transferReorderSizes: Record<GrTransferSize, string>;
|
|
84
|
+
export declare const transferReorderIconClass = "h-3.5 w-3.5";
|
|
85
|
+
export declare function grTransferReorderClass(size: GrTransferSize): string;
|
|
86
|
+
export declare const transferActionIconClass = "h-4 w-4 shrink-0";
|
|
87
|
+
/**
|
|
88
|
+
* Кнопка без пути наружу остаётся в таб-порядке — нативный `disabled` уронил бы
|
|
89
|
+
* фокус в тело документа. Показывает она это правилом в `<style>` компонента, а
|
|
90
|
+
* не утилитой: у `GrButton` свой фон классом той же специфичности, и кто победит,
|
|
91
|
+
* решал бы порядок в сгенерированном CSS, то есть через раз.
|
|
92
|
+
*/
|
|
93
|
+
export declare const transferActionInertClass = "cursor-not-allowed";
|
|
94
|
+
/**
|
|
95
|
+
* Предпросмотр переносимого: он и есть ответ на «где сейчас элемент».
|
|
96
|
+
*
|
|
97
|
+
* Без него строка оставалась на месте, а за курсором не двигалось ничего — жест
|
|
98
|
+
* выглядел так, будто ничего не происходит. Узел не ловит указатель
|
|
99
|
+
* (`pointer-events: none`), иначе он перехватывал бы попадание у самих панелей.
|
|
100
|
+
*/
|
|
101
|
+
export declare const transferGhostClass = "pointer-events-none fixed left-0 top-0 z-10 flex max-w-[16rem] items-center gap-2 rounded-[var(--gr-radius-md)] border border-[var(--gr-brd)] bg-[var(--gr-transfer-ghost-bg,var(--gr-card))] px-3 py-1.5 text-[var(--gr-fg)] shadow-[var(--gr-shadow-2)]";
|
|
102
|
+
export declare const transferGhostLabelClass = "min-w-0 flex-1 truncate text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]";
|
|
103
|
+
/** Сколько строк едет разом: одну видно по подписи, остальные — числом. */
|
|
104
|
+
export declare const transferGhostCountClass = "shrink-0 rounded-[var(--gr-radius-full)] bg-[var(--gr-primary)] px-1.5 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)] text-[var(--gr-primary-fg)] tabular-nums";
|
|
105
|
+
export declare const transferStatusClass = "sr-only";
|
|
106
|
+
export declare const transferHeaderSizes: Record<GrTransferSize, string>;
|
|
107
|
+
export declare const transferOptionSizes: Record<GrTransferSize, string>;
|
|
108
|
+
export declare const transferMarkSizes: Record<GrTransferSize, string>;
|
|
109
|
+
export declare const transferSearchSizes: Record<GrTransferSize, string>;
|
|
110
|
+
export declare const transferEmptySizes: Record<GrTransferSize, string>;
|
|
111
|
+
export declare const transferActionsSizes: Record<GrTransferSize, string>;
|
|
112
|
+
export interface GrTransferOptionClassOptions {
|
|
113
|
+
size: GrTransferSize;
|
|
114
|
+
selected: boolean;
|
|
115
|
+
disabled: boolean;
|
|
116
|
+
draggable: boolean;
|
|
117
|
+
dragging: boolean;
|
|
118
|
+
arrived: boolean;
|
|
119
|
+
indicator: 'before' | 'after' | null;
|
|
120
|
+
}
|
|
121
|
+
export declare function grTransferOptionClass(options: GrTransferOptionClassOptions): string;
|
|
122
|
+
export declare function grTransferMarkClass(size: GrTransferSize, selected: boolean): string;
|
|
123
|
+
export declare function grTransferPanelClass(dropActive: boolean): string;
|
|
124
|
+
export declare function grTransferEmptyClass(size: GrTransferSize): string;
|
|
125
|
+
export declare function grTransferHeaderClass(size: GrTransferSize): string;
|
|
126
|
+
export declare function grTransferSearchClass(size: GrTransferSize): string;
|
|
127
|
+
export declare function grTransferActionsClass(size: GrTransferSize): string;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ComponentExposed } from '../shared/instance';
|
|
2
|
+
import type GrTransferComponent from './GrTransfer.vue';
|
|
3
|
+
export { default } from './GrTransfer.vue';
|
|
4
|
+
export { default as GrTransfer } from './GrTransfer.vue';
|
|
5
|
+
export { grTransferConfig } from './config';
|
|
6
|
+
export type { GrTransferConfigurableProps } from './defaults';
|
|
7
|
+
export type { GrTransferEmits, GrTransferProps } from './GrTransfer.vue';
|
|
8
|
+
export type { GrTransferSize } from './grTransferStyles';
|
|
9
|
+
export { grTransferSafelist } from './safelist';
|
|
10
|
+
export type { GrTransferDirection, GrTransferKey, GrTransferSide, } from './transferModel';
|
|
11
|
+
export type GrTransferInstance = ComponentExposed<typeof GrTransferComponent>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const grTransferSafelist: string[];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { DragSortSpan } from '../../composables/internal/dragSortGeometry';
|
|
2
|
+
import type { GrTransferKey, GrTransferSide } from './transferModel';
|
|
3
|
+
/**
|
|
4
|
+
* Геометрия переноса между двумя панелями: чистая арифметика, без DOM.
|
|
5
|
+
*
|
|
6
|
+
* В jsdom раскладки нет — `getBoundingClientRect` там нули, — поэтому всё, что
|
|
7
|
+
* решает «куда попал указатель», живёт здесь и проверяется числами. Тот же
|
|
8
|
+
* довод, что у `dragSortGeometry` и `scrollOverflow`.
|
|
9
|
+
*/
|
|
10
|
+
/** Порог начала жеста. То же число, что у `useDragSort` и у переноса дашборда. */
|
|
11
|
+
export declare const GR_TRANSFER_DRAG_THRESHOLD = 4;
|
|
12
|
+
export interface GrTransferRect {
|
|
13
|
+
left: number;
|
|
14
|
+
right: number;
|
|
15
|
+
top: number;
|
|
16
|
+
bottom: number;
|
|
17
|
+
}
|
|
18
|
+
export interface GrTransferPoint {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
}
|
|
22
|
+
export interface GrTransferPanelRects {
|
|
23
|
+
source: GrTransferRect | null;
|
|
24
|
+
target: GrTransferRect | null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Панель под указателем; `null` — указатель в зазоре или за пределами обеих.
|
|
28
|
+
*
|
|
29
|
+
* Считается по прямоугольнику **обёртки панели**, а не по ближайшей строке:
|
|
30
|
+
* `hitTest` при промахе возвращает ближайший элемент, и указатель над пустой
|
|
31
|
+
* правой панелью резолвился бы в строку левой.
|
|
32
|
+
*/
|
|
33
|
+
export declare function sideAtPoint(rects: GrTransferPanelRects, point: GrTransferPoint): GrTransferSide | null;
|
|
34
|
+
/**
|
|
35
|
+
* Перед какой строкой встанет блок; `null` — в конец панели.
|
|
36
|
+
*
|
|
37
|
+
* Цель — ключ, а не индекс: индекс пришлось бы пересчитывать после изъятия
|
|
38
|
+
* блока, и именно ради этого `insertionIndex` в `dragSortGeometry` носит
|
|
39
|
+
* поправку «элемент временно вынут». Для вставки из чужой панели поправка
|
|
40
|
+
* вредна — там ничего не вынимается, — поэтому та функция здесь не годится.
|
|
41
|
+
*/
|
|
42
|
+
export declare function dropBefore(keys: readonly GrTransferKey[], spans: readonly DragSortSpan[], position: number): GrTransferKey | null;
|
|
43
|
+
/** Пройден ли порог начала жеста. */
|
|
44
|
+
export declare function passedThreshold(from: GrTransferPoint, to: GrTransferPoint, threshold?: number): boolean;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Порядок и состав панелей: чистая арифметика над ключами, без DOM и Vue.
|
|
3
|
+
*
|
|
4
|
+
* Вынесена отдельно по той же причине, что и `dragSortGeometry`: ошибка здесь
|
|
5
|
+
* проявляется не исключением, а «строка встала не туда» или «выбор исчез после
|
|
6
|
+
* перезагрузки каталога» — поймать это можно только тестом на числах и
|
|
7
|
+
* массивах.
|
|
8
|
+
*/
|
|
9
|
+
export type GrTransferKey = string | number;
|
|
10
|
+
export type GrTransferSide = 'source' | 'target';
|
|
11
|
+
export type GrTransferDirection = 'toTarget' | 'toSource';
|
|
12
|
+
export interface GrTransferSplit<TItem> {
|
|
13
|
+
/** Каталог минус модель, в порядке `items`. */
|
|
14
|
+
source: TItem[];
|
|
15
|
+
/** Отобранное, в порядке **модели**: порядок правой панели и есть значение. */
|
|
16
|
+
target: TItem[];
|
|
17
|
+
/** Ключи модели, которым в `items` ничего не соответствует. */
|
|
18
|
+
unresolved: GrTransferKey[];
|
|
19
|
+
/** Ключи, встретившиеся в `items` дважды: рисуется первый. */
|
|
20
|
+
duplicated: GrTransferKey[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Ключи без дублей, первый выигрывает.
|
|
24
|
+
*
|
|
25
|
+
* Нормализация идёт **на чтение** и наружу сама по себе не эмитится: эмит из
|
|
26
|
+
* рендера — источник петель обновления. Нормализованный вид уезжает потребителю
|
|
27
|
+
* при первом же коммите.
|
|
28
|
+
*/
|
|
29
|
+
export declare function normalizeKeys(keys: readonly GrTransferKey[]): GrTransferKey[];
|
|
30
|
+
/**
|
|
31
|
+
* Раскладка каталога по панелям.
|
|
32
|
+
*
|
|
33
|
+
* `target` строится обходом **модели**, а не `items`: порядок правой панели
|
|
34
|
+
* задаёт пользователь, и он же является значением. `source` — обходом `items`,
|
|
35
|
+
* потому что порядок каталога принадлежит потребителю.
|
|
36
|
+
*/
|
|
37
|
+
export declare function splitByModel<TItem>(items: readonly TItem[], keyOf: (item: TItem) => GrTransferKey, model: readonly GrTransferKey[]): GrTransferSplit<TItem>;
|
|
38
|
+
/** Ключи в порядке эталонного списка; чего в нём нет — в конец, в порядке входа. */
|
|
39
|
+
export declare function orderedBy(order: readonly GrTransferKey[], keys: Iterable<GrTransferKey>): GrTransferKey[];
|
|
40
|
+
/** Изъятие блока. Вход не мутируется. */
|
|
41
|
+
export declare function removeKeys(order: readonly GrTransferKey[], moving: readonly GrTransferKey[]): GrTransferKey[];
|
|
42
|
+
/**
|
|
43
|
+
* Вставка блока перед ключом `before`; `null` или ненайденный ключ — в конец.
|
|
44
|
+
*
|
|
45
|
+
* Цель выражена ключом, а не индексом, намеренно: индекс пришлось бы
|
|
46
|
+
* пересчитывать после изъятия блока, и это ровно тот класс off-by-one, из-за
|
|
47
|
+
* которого `insertionIndex` в `dragSortGeometry` носит поправку «элемент
|
|
48
|
+
* временно вынут». Здесь поправка не нужна вовсе.
|
|
49
|
+
*/
|
|
50
|
+
export declare function insertKeys(order: readonly GrTransferKey[], moving: readonly GrTransferKey[], before: GrTransferKey | null): GrTransferKey[];
|
|
51
|
+
/**
|
|
52
|
+
* Куда встанет блок при сдвиге на шаг; `undefined` — двигаться некуда.
|
|
53
|
+
*
|
|
54
|
+
* Рассыпанное выделение при сдвиге схлопывается в непрерывный блок: это
|
|
55
|
+
* предсказуемо и объяснимо, в отличие от попытки двигать каждый кусок
|
|
56
|
+
* независимо.
|
|
57
|
+
*/
|
|
58
|
+
export declare function stepTarget(order: readonly GrTransferKey[], moving: readonly GrTransferKey[], delta: 1 | -1): GrTransferKey | null | undefined;
|
|
59
|
+
/** Крайняя позиция блока: `-1` — в начало, `1` — в конец. */
|
|
60
|
+
export declare function edgeTarget(order: readonly GrTransferKey[], moving: readonly GrTransferKey[], edge: 'start' | 'end'): GrTransferKey | null | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Какая строка останется под фокусом после изъятия.
|
|
63
|
+
*
|
|
64
|
+
* Без этого фокус после переноса падает на тело документа, и клавиатурный
|
|
65
|
+
* сценарий обрывается на первом же шаге — тот же довод, что у `drop()` в
|
|
66
|
+
* `GrSortableList`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function keyAfterRemoval(visible: readonly GrTransferKey[], removed: readonly GrTransferKey[], focused: GrTransferKey | undefined): GrTransferKey | undefined;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { GrTransferKey } from './transferModel';
|
|
2
|
+
/**
|
|
3
|
+
* Алгебра выделения панели: чистая, без DOM и Vue.
|
|
4
|
+
*
|
|
5
|
+
* Мультивыбор со `Shift`-диапазоном в пакете появляется впервые, прецедента API
|
|
6
|
+
* нет — тем важнее, чтобы правила лежали числами в одном месте и проверялись
|
|
7
|
+
* без монтирования.
|
|
8
|
+
*/
|
|
9
|
+
export type GrTransferSelectMode = 'replace' | 'toggle' | 'range';
|
|
10
|
+
export interface GrTransferSelectIntent {
|
|
11
|
+
mode: GrTransferSelectMode;
|
|
12
|
+
/** Диапазон объединяется с текущим выделением, а не заменяет его. */
|
|
13
|
+
additive: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface GrTransferSelection {
|
|
16
|
+
keys: ReadonlySet<GrTransferKey>;
|
|
17
|
+
/** Опора диапазона. `Shift` её не двигает — иначе диапазон нельзя растянуть. */
|
|
18
|
+
anchor: GrTransferKey | undefined;
|
|
19
|
+
}
|
|
20
|
+
export declare const emptySelection: GrTransferSelection;
|
|
21
|
+
/** `Shift` сильнее `Ctrl`; их сочетание объединяет диапазон с выделением. */
|
|
22
|
+
export declare function selectIntentFrom(event: Pick<MouseEvent, 'shiftKey' | 'ctrlKey' | 'metaKey'>): GrTransferSelectIntent;
|
|
23
|
+
/**
|
|
24
|
+
* Новое состояние выделения после жеста по строке `key`.
|
|
25
|
+
*
|
|
26
|
+
* Диапазон считается по **видимому** порядку, а не по каталогу: пользователь
|
|
27
|
+
* растягивает то, что видит, и после фильтра «от сих до сих» обязано значить
|
|
28
|
+
* то же самое.
|
|
29
|
+
*/
|
|
30
|
+
export declare function applySelect(state: GrTransferSelection, key: GrTransferKey, intent: GrTransferSelectIntent, visible: readonly GrTransferKey[], isSelectable: (key: GrTransferKey) => boolean): GrTransferSelection;
|
|
31
|
+
/** Всё видимое и выбираемое; уже выбрано всё — снять. */
|
|
32
|
+
export declare function toggleAllVisible(state: GrTransferSelection, visible: readonly GrTransferKey[], isSelectable: (key: GrTransferKey) => boolean): GrTransferSelection;
|
|
33
|
+
/** Ключи, которых больше нет в панели. Якорь исчез — забываем и его. */
|
|
34
|
+
export declare function pruneSelection(state: GrTransferSelection, present: readonly GrTransferKey[]): GrTransferSelection;
|
|
35
|
+
/** Состояние отметки «выбрать всё видимое» в шапке панели. */
|
|
36
|
+
export declare function allVisibleState(state: GrTransferSelection, visible: readonly GrTransferKey[], isSelectable: (key: GrTransferKey) => boolean): 'checked' | 'indeterminate' | 'unchecked';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { ShallowRef } from 'vue';
|
|
2
|
+
import type { GrTransferPoint } from './transferGeometry';
|
|
3
|
+
import type { GrTransferKey, GrTransferSide } from './transferModel';
|
|
4
|
+
/** Что тянут: сторона-источник и весь переносимый блок. */
|
|
5
|
+
export interface GrTransferDragSession {
|
|
6
|
+
side: GrTransferSide;
|
|
7
|
+
keys: readonly GrTransferKey[];
|
|
8
|
+
}
|
|
9
|
+
/** Куда положат: сторона-приёмник и ключ, перед которым встанет блок. */
|
|
10
|
+
export interface GrTransferDropSpot {
|
|
11
|
+
side: GrTransferSide;
|
|
12
|
+
before: GrTransferKey | null;
|
|
13
|
+
}
|
|
14
|
+
export interface UseTransferDragOptions {
|
|
15
|
+
disabled: () => boolean;
|
|
16
|
+
/** Ключи панели в порядке показа. */
|
|
17
|
+
visibleKeys: (side: GrTransferSide) => readonly GrTransferKey[];
|
|
18
|
+
rowEl: (side: GrTransferSide, key: GrTransferKey) => HTMLElement | null;
|
|
19
|
+
/** Обёртка панели: по её прямоугольнику выбирается приёмник. */
|
|
20
|
+
panelEl: (side: GrTransferSide) => HTMLElement | null;
|
|
21
|
+
/** Скроллер панели: по нему считается автопрокрутка. */
|
|
22
|
+
scrollerEl: (side: GrTransferSide) => HTMLElement | null;
|
|
23
|
+
/** Что тянуть: всё выделение, если взялись за выделенную строку, иначе одну. */
|
|
24
|
+
blockFor: (side: GrTransferSide, key: GrTransferKey) => readonly GrTransferKey[];
|
|
25
|
+
/** Можно ли ронять обратно в свою панель (перестановка). */
|
|
26
|
+
allowSameSide: (side: GrTransferSide) => boolean;
|
|
27
|
+
onDrop: (session: GrTransferDragSession, spot: GrTransferDropSpot) => void;
|
|
28
|
+
onCancel?: () => void;
|
|
29
|
+
}
|
|
30
|
+
export interface UseTransferDragReturn {
|
|
31
|
+
session: Readonly<ShallowRef<GrTransferDragSession | null>>;
|
|
32
|
+
spot: Readonly<ShallowRef<GrTransferDropSpot | null>>;
|
|
33
|
+
/** Где указатель прямо сейчас: за ним едет предпросмотр переносимого. */
|
|
34
|
+
pointer: Readonly<ShallowRef<GrTransferPoint>>;
|
|
35
|
+
/** Был ли жест — чтобы следующий `click` не схлопнул выделение. */
|
|
36
|
+
consumeClick: () => boolean;
|
|
37
|
+
startFrom: (side: GrTransferSide, key: GrTransferKey) => (event: PointerEvent) => void;
|
|
38
|
+
cancel: () => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Перетаскивание между панелями.
|
|
42
|
+
*
|
|
43
|
+
* `useDragSort` здесь не подходит: его `resolveTarget` получает попадание, но не
|
|
44
|
+
* точку указателя, а панель-приёмник определяется прямоугольником под точкой —
|
|
45
|
+
* `hitTest` при промахе отдаёт ближайшую строку, и указатель над пустой правой
|
|
46
|
+
* панелью резолвился бы в строку левой.
|
|
47
|
+
*/
|
|
48
|
+
export declare function useTransferDrag(options: UseTransferDragOptions): UseTransferDragReturn;
|
|
@@ -11,6 +11,7 @@ export declare const granularityDefaultThemes: readonly GranularityThemeName[];
|
|
|
11
11
|
* `@feugene/granularity/components/<Name>`.
|
|
12
12
|
*/
|
|
13
13
|
export declare const granularityComponentConfigs: {
|
|
14
|
+
GrAffix: GranularComponentDescriptor<"GrAffix">;
|
|
14
15
|
GrAlert: GranularComponentDescriptor<"GrAlert">;
|
|
15
16
|
GrAutocomplete: GranularComponentDescriptor<"GrAutocomplete">;
|
|
16
17
|
GrAvatar: GranularComponentDescriptor<"GrAvatar">;
|
|
@@ -21,6 +22,7 @@ export declare const granularityComponentConfigs: {
|
|
|
21
22
|
GrButton: GranularComponentDescriptor<"GrButton">;
|
|
22
23
|
GrButtonGroup: GranularComponentDescriptor<"GrButtonGroup">;
|
|
23
24
|
GrCard: GranularComponentDescriptor<"GrCard">;
|
|
25
|
+
GrCarousel: GranularComponentDescriptor<"GrCarousel">;
|
|
24
26
|
GrCheckbox: GranularComponentDescriptor<"GrCheckbox">;
|
|
25
27
|
GrCheckboxGroup: GranularComponentDescriptor<"GrCheckboxGroup">;
|
|
26
28
|
GrChip: GranularComponentDescriptor<"GrChip">;
|
|
@@ -85,6 +87,7 @@ export declare const granularityComponentConfigs: {
|
|
|
85
87
|
GrTimeline: GranularComponentDescriptor<"GrTimeline">;
|
|
86
88
|
GrToaster: GranularComponentDescriptor<"GrToaster">;
|
|
87
89
|
GrTooltip: GranularComponentDescriptor<"GrTooltip">;
|
|
90
|
+
GrTransfer: GranularComponentDescriptor<"GrTransfer">;
|
|
88
91
|
GrTree: GranularComponentDescriptor<"GrTree">;
|
|
89
92
|
GrTreeSelect: GranularComponentDescriptor<"GrTreeSelect">;
|
|
90
93
|
GrValue: GranularComponentDescriptor<"GrValue">;
|