@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
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { n as splitClassTokens } from "./classTokens-8v2XC74x.js";
|
|
2
|
+
import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
|
|
3
|
+
//#region src/components/GrTransfer/grTransferStyles.ts
|
|
4
|
+
var transferRootBase = "flex items-stretch gap-4";
|
|
5
|
+
var 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)]";
|
|
6
|
+
/**
|
|
7
|
+
* Панель под указателем во время переноса.
|
|
8
|
+
*
|
|
9
|
+
* Одной рамки мало: на широком экране она за пределами взгляда, занятого
|
|
10
|
+
* курсором. Мягкая подложка сообщает «сюда» там, где человек и смотрит.
|
|
11
|
+
*/
|
|
12
|
+
var 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))]";
|
|
13
|
+
var transferHeaderBase = "flex items-center gap-2 border-b border-[var(--gr-brd)]";
|
|
14
|
+
var transferTitleClass = "min-w-0 flex-1 truncate font-600 text-[var(--gr-fg)]";
|
|
15
|
+
var transferCounterClass = "shrink-0 text-[var(--gr-muted-fg)] tabular-nums";
|
|
16
|
+
var transferSearchBase = "border-b border-[var(--gr-brd)]";
|
|
17
|
+
/**
|
|
18
|
+
* Список — скроллер, но своего таб-стопа не получает: его строки фокусируемы,
|
|
19
|
+
* и вторая остановка `Tab` перед ними была бы лишней (приём `GrTabs`).
|
|
20
|
+
*/
|
|
21
|
+
var transferListBase = "relative min-h-0 flex-1 overflow-y-auto";
|
|
22
|
+
var 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";
|
|
23
|
+
/** Строку можно взять — курсор обязан это предложить до нажатия, а не после. */
|
|
24
|
+
var transferOptionGrabClass = "cursor-grab";
|
|
25
|
+
var transferOptionPlainClass = "cursor-pointer";
|
|
26
|
+
var transferOptionStates = {
|
|
27
|
+
selected: "bg-[var(--gr-transfer-selected-bg,color-mix(in_srgb,var(--gr-primary)_12%,transparent))] text-[var(--gr-fg)]",
|
|
28
|
+
idle: "text-[var(--gr-fg)] hover:bg-[var(--gr-muted)]",
|
|
29
|
+
disabled: "cursor-not-allowed bg-[var(--gr-muted)] text-[var(--gr-disabled-fg)]"
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Строка, только что приехавшая из соседней панели.
|
|
33
|
+
*
|
|
34
|
+
* Статичный итог перенос уже показывает — строка приходит отмеченной, счётчики
|
|
35
|
+
* меняются, — но само **движение** ничем не выдано: строки просто возникают.
|
|
36
|
+
* Короткая подсветка связывает «нажал» и «появилось». Под `prefers-reduced-motion`
|
|
37
|
+
* её гасит глобальный кламп, и остаётся тот же статичный итог.
|
|
38
|
+
*/
|
|
39
|
+
var transferOptionArrivedClass = "gr-transfer-arrived";
|
|
40
|
+
/**
|
|
41
|
+
* Место, откуда строку унесли.
|
|
42
|
+
*
|
|
43
|
+
* Правило живёт в `<style>` компонента, а не утилитой: цвет текста строки задаёт
|
|
44
|
+
* класс состояния той же специфичности, и кто победит, решал бы порядок правил в
|
|
45
|
+
* собранном CSS — та же ловушка, что записана в `grTabsStyles.ts`.
|
|
46
|
+
*/
|
|
47
|
+
var transferOptionDraggingClass = "gr-transfer-vacated";
|
|
48
|
+
/**
|
|
49
|
+
* Отметка строки декоративна: `GrCheckbox` внутрь `role="option"` вложить
|
|
50
|
+
* нельзя — его индикатор сам `role="checkbox"` с `tabindex="0"`, то есть ровно
|
|
51
|
+
* `nested-interactive`. Состояние объявляет `aria-selected` самой строки.
|
|
52
|
+
*/
|
|
53
|
+
var transferMarkBase = "inline-flex shrink-0 items-center justify-center rounded-[var(--gr-radius-sm)] border border-[var(--gr-brd)] bg-[var(--gr-bg)]";
|
|
54
|
+
var transferMarkStates = {
|
|
55
|
+
selected: "border-[var(--gr-primary)] bg-[var(--gr-primary)] text-[var(--gr-primary-fg)]",
|
|
56
|
+
idle: ""
|
|
57
|
+
};
|
|
58
|
+
var transferMarkIconClass = "h-3 w-3";
|
|
59
|
+
var transferLabelClass = "min-w-0 flex-1 truncate";
|
|
60
|
+
/**
|
|
61
|
+
* Место вставки — псевдоэлемент строки-соседа, а не отдельный узел: лишний узел
|
|
62
|
+
* между строками ломает подсчёт позиций и разделители.
|
|
63
|
+
*/
|
|
64
|
+
var 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";
|
|
65
|
+
var 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";
|
|
66
|
+
var transferEmptyClass = "flex h-full items-center justify-center px-4 py-6 text-center text-[var(--gr-muted-fg)]";
|
|
67
|
+
var transferActionsClass = "flex shrink-0 items-center";
|
|
68
|
+
/**
|
|
69
|
+
* Кнопки перестановки в шапке правой панели. Перестановка обязана быть видимой:
|
|
70
|
+
* сочетание `Alt` + стрелка её ускоряет, но само по себе неоткрываемо, а на
|
|
71
|
+
* macOS ещё и неудобно — почти все мета-клавиши там заняты системой.
|
|
72
|
+
*
|
|
73
|
+
* Стрелки горизонтальные, потому что порядок — это **последовательность**, а не
|
|
74
|
+
* положение на экране: правая панель задаёт порядок колонок отчёта или полей
|
|
75
|
+
* выгрузки, и они читаются слева направо.
|
|
76
|
+
*
|
|
77
|
+
* Сочетание при этом остаётся вертикальным (`Alt` + `↑`/`↓`), и расхождение с
|
|
78
|
+
* иконками намеренное: в Chrome и Firefox под Windows и Linux `Alt` + `←`/`→` —
|
|
79
|
+
* это «назад/вперёд» в истории браузера. В Safari навигация висит на
|
|
80
|
+
* `Cmd` + стрелках, то есть там сочетание было бы свободно, — но пакет едет ко
|
|
81
|
+
* всем, и ориентироваться на одну платформу нельзя.
|
|
82
|
+
*/
|
|
83
|
+
var 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)]";
|
|
84
|
+
var transferReorderSizes = {
|
|
85
|
+
xs: "h-5 w-5",
|
|
86
|
+
sm: "h-5 w-5",
|
|
87
|
+
md: "h-6 w-6",
|
|
88
|
+
lg: "h-7 w-7"
|
|
89
|
+
};
|
|
90
|
+
var transferReorderIconClass = "h-3.5 w-3.5";
|
|
91
|
+
function grTransferReorderClass(size) {
|
|
92
|
+
return [transferReorderBase, transferReorderSizes[size]].join(" ");
|
|
93
|
+
}
|
|
94
|
+
var transferActionIconClass = "h-4 w-4 shrink-0";
|
|
95
|
+
/**
|
|
96
|
+
* Кнопка без пути наружу остаётся в таб-порядке — нативный `disabled` уронил бы
|
|
97
|
+
* фокус в тело документа. Показывает она это правилом в `<style>` компонента, а
|
|
98
|
+
* не утилитой: у `GrButton` свой фон классом той же специфичности, и кто победит,
|
|
99
|
+
* решал бы порядок в сгенерированном CSS, то есть через раз.
|
|
100
|
+
*/
|
|
101
|
+
var transferActionInertClass = "cursor-not-allowed";
|
|
102
|
+
/**
|
|
103
|
+
* Предпросмотр переносимого: он и есть ответ на «где сейчас элемент».
|
|
104
|
+
*
|
|
105
|
+
* Без него строка оставалась на месте, а за курсором не двигалось ничего — жест
|
|
106
|
+
* выглядел так, будто ничего не происходит. Узел не ловит указатель
|
|
107
|
+
* (`pointer-events: none`), иначе он перехватывал бы попадание у самих панелей.
|
|
108
|
+
*/
|
|
109
|
+
var 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)]";
|
|
110
|
+
var transferGhostLabelClass = "min-w-0 flex-1 truncate text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]";
|
|
111
|
+
/** Сколько строк едет разом: одну видно по подписи, остальные — числом. */
|
|
112
|
+
var 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";
|
|
113
|
+
var transferStatusClass = "sr-only";
|
|
114
|
+
var transferHeaderSizes = {
|
|
115
|
+
xs: "px-2 py-1 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]",
|
|
116
|
+
sm: "px-2.5 py-1.5 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]",
|
|
117
|
+
md: "px-3 py-2 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]",
|
|
118
|
+
lg: "px-4 py-2.5 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]"
|
|
119
|
+
};
|
|
120
|
+
var transferOptionSizes = {
|
|
121
|
+
xs: "px-2 py-1 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]",
|
|
122
|
+
sm: "px-2.5 py-1.5 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]",
|
|
123
|
+
md: "px-3 py-2 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]",
|
|
124
|
+
lg: "px-4 py-2.5 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]"
|
|
125
|
+
};
|
|
126
|
+
var transferMarkSizes = {
|
|
127
|
+
xs: "h-3.5 w-3.5",
|
|
128
|
+
sm: "h-4 w-4",
|
|
129
|
+
md: "h-4 w-4",
|
|
130
|
+
lg: "h-5 w-5"
|
|
131
|
+
};
|
|
132
|
+
var transferSearchSizes = {
|
|
133
|
+
xs: "p-1",
|
|
134
|
+
sm: "p-1.5",
|
|
135
|
+
md: "p-2",
|
|
136
|
+
lg: "p-2.5"
|
|
137
|
+
};
|
|
138
|
+
var transferEmptySizes = {
|
|
139
|
+
xs: "text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]",
|
|
140
|
+
sm: "text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]",
|
|
141
|
+
md: "text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]",
|
|
142
|
+
lg: "text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]"
|
|
143
|
+
};
|
|
144
|
+
var transferActionsSizes = {
|
|
145
|
+
xs: "px-1",
|
|
146
|
+
sm: "px-1.5",
|
|
147
|
+
md: "px-2",
|
|
148
|
+
lg: "px-2.5"
|
|
149
|
+
};
|
|
150
|
+
function grTransferOptionClass(options) {
|
|
151
|
+
const state = options.disabled ? transferOptionStates.disabled : options.selected ? transferOptionStates.selected : transferOptionStates.idle;
|
|
152
|
+
return [
|
|
153
|
+
transferOptionBase,
|
|
154
|
+
options.draggable && !options.disabled ? transferOptionGrabClass : transferOptionPlainClass,
|
|
155
|
+
transferOptionSizes[options.size],
|
|
156
|
+
state,
|
|
157
|
+
options.dragging ? transferOptionDraggingClass : "",
|
|
158
|
+
options.arrived ? transferOptionArrivedClass : "",
|
|
159
|
+
options.indicator === "before" ? transferIndicatorBeforeClass : "",
|
|
160
|
+
options.indicator === "after" ? transferIndicatorAfterClass : ""
|
|
161
|
+
].filter(Boolean).join(" ");
|
|
162
|
+
}
|
|
163
|
+
function grTransferMarkClass(size, selected) {
|
|
164
|
+
return [
|
|
165
|
+
transferMarkBase,
|
|
166
|
+
transferMarkSizes[size],
|
|
167
|
+
selected ? transferMarkStates.selected : transferMarkStates.idle
|
|
168
|
+
].filter(Boolean).join(" ");
|
|
169
|
+
}
|
|
170
|
+
function grTransferPanelClass(dropActive) {
|
|
171
|
+
return [transferPanelBase, dropActive ? transferPanelDropClass : ""].filter(Boolean).join(" ");
|
|
172
|
+
}
|
|
173
|
+
function grTransferEmptyClass(size) {
|
|
174
|
+
return [transferEmptyClass, transferEmptySizes[size]].join(" ");
|
|
175
|
+
}
|
|
176
|
+
function grTransferHeaderClass(size) {
|
|
177
|
+
return [transferHeaderBase, transferHeaderSizes[size]].join(" ");
|
|
178
|
+
}
|
|
179
|
+
function grTransferSearchClass(size) {
|
|
180
|
+
return [transferSearchBase, transferSearchSizes[size]].join(" ");
|
|
181
|
+
}
|
|
182
|
+
function grTransferActionsClass(size) {
|
|
183
|
+
return [transferActionsClass, transferActionsSizes[size]].join(" ");
|
|
184
|
+
}
|
|
185
|
+
//#endregion
|
|
186
|
+
//#region src/components/GrTransfer/safelist.ts
|
|
187
|
+
var grTransferSafelist = [.../* @__PURE__ */ new Set([
|
|
188
|
+
...Object.values(transferHeaderSizes).flatMap(splitClassTokens),
|
|
189
|
+
...Object.values(transferOptionSizes).flatMap(splitClassTokens),
|
|
190
|
+
...Object.values(transferMarkSizes).flatMap(splitClassTokens),
|
|
191
|
+
...Object.values(transferSearchSizes).flatMap(splitClassTokens),
|
|
192
|
+
...Object.values(transferEmptySizes).flatMap(splitClassTokens),
|
|
193
|
+
...Object.values(transferActionsSizes).flatMap(splitClassTokens),
|
|
194
|
+
...Object.values(transferReorderSizes).flatMap(splitClassTokens),
|
|
195
|
+
...Object.values(transferOptionStates).flatMap(splitClassTokens),
|
|
196
|
+
...Object.values(transferMarkStates).flatMap(splitClassTokens),
|
|
197
|
+
...splitClassTokens(transferRootBase),
|
|
198
|
+
...splitClassTokens(transferPanelBase),
|
|
199
|
+
...splitClassTokens(transferPanelDropClass),
|
|
200
|
+
...splitClassTokens(transferHeaderBase),
|
|
201
|
+
...splitClassTokens(transferTitleClass),
|
|
202
|
+
...splitClassTokens(transferCounterClass),
|
|
203
|
+
...splitClassTokens(transferGhostClass),
|
|
204
|
+
...splitClassTokens(transferGhostLabelClass),
|
|
205
|
+
...splitClassTokens(transferGhostCountClass),
|
|
206
|
+
...splitClassTokens(transferSearchBase),
|
|
207
|
+
...splitClassTokens(transferListBase),
|
|
208
|
+
...splitClassTokens(transferOptionBase),
|
|
209
|
+
...splitClassTokens(transferOptionGrabClass),
|
|
210
|
+
...splitClassTokens(transferOptionPlainClass),
|
|
211
|
+
...splitClassTokens(transferMarkBase),
|
|
212
|
+
...splitClassTokens(transferMarkIconClass),
|
|
213
|
+
...splitClassTokens(transferLabelClass),
|
|
214
|
+
...splitClassTokens(transferIndicatorBeforeClass),
|
|
215
|
+
...splitClassTokens(transferIndicatorAfterClass),
|
|
216
|
+
...splitClassTokens(transferEmptyClass),
|
|
217
|
+
...splitClassTokens(transferActionsClass),
|
|
218
|
+
...splitClassTokens(transferActionIconClass),
|
|
219
|
+
...splitClassTokens(transferActionInertClass),
|
|
220
|
+
...splitClassTokens(transferReorderBase),
|
|
221
|
+
...splitClassTokens(transferReorderIconClass),
|
|
222
|
+
...splitClassTokens(transferStatusClass)
|
|
223
|
+
])];
|
|
224
|
+
//#endregion
|
|
225
|
+
//#region src/components/GrTransfer/config.ts
|
|
226
|
+
var grTransferConfig = defineGranularComponent(import.meta.url, {
|
|
227
|
+
name: "GrTransfer",
|
|
228
|
+
dependencies: [
|
|
229
|
+
"GrButton",
|
|
230
|
+
"GrButtonGroup",
|
|
231
|
+
"GrCheckbox",
|
|
232
|
+
"GrInput"
|
|
233
|
+
],
|
|
234
|
+
safelist: grTransferSafelist
|
|
235
|
+
});
|
|
236
|
+
//#endregion
|
|
237
|
+
export { transferTitleClass as C, transferStatusClass as S, transferLabelClass as _, grTransferHeaderClass as a, transferReorderIconClass as b, grTransferPanelClass as c, transferActionIconClass as d, transferActionInertClass as f, transferGhostLabelClass as g, transferGhostCountClass as h, grTransferEmptyClass as i, grTransferReorderClass as l, transferGhostClass as m, grTransferSafelist as n, grTransferMarkClass as o, transferCounterClass as p, grTransferActionsClass as r, grTransferOptionClass as s, grTransferConfig as t, grTransferSearchClass as u, transferListBase as v, transferRootBase as x, transferMarkIconClass as y };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-DmED6aJV.js","names":[],"sources":["../../src/components/GrTransfer/grTransferStyles.ts","../../src/components/GrTransfer/safelist.ts","../../src/components/GrTransfer/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrTransferSize = GrComponentSize\n\nexport const transferRootBase = 'flex items-stretch gap-4'\n\nexport 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)]'\n\n/**\n * Панель под указателем во время переноса.\n *\n * Одной рамки мало: на широком экране она за пределами взгляда, занятого\n * курсором. Мягкая подложка сообщает «сюда» там, где человек и смотрит.\n */\nexport 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))]'\n\nexport const transferHeaderBase = 'flex items-center gap-2 border-b border-[var(--gr-brd)]'\n\nexport const transferTitleClass = 'min-w-0 flex-1 truncate font-600 text-[var(--gr-fg)]'\n\nexport const transferCounterClass = 'shrink-0 text-[var(--gr-muted-fg)] tabular-nums'\n\nexport const transferSearchBase = 'border-b border-[var(--gr-brd)]'\n\n/**\n * Список — скроллер, но своего таб-стопа не получает: его строки фокусируемы,\n * и вторая остановка `Tab` перед ними была бы лишней (приём `GrTabs`).\n */\nexport const transferListBase = 'relative min-h-0 flex-1 overflow-y-auto'\n\nexport 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'\n\n/** Строку можно взять — курсор обязан это предложить до нажатия, а не после. */\nexport const transferOptionGrabClass = 'cursor-grab'\n\nexport const transferOptionPlainClass = 'cursor-pointer'\n\nexport const transferOptionStates = {\n // Тон, а не заливка: строка остаётся читаемой обычным `--gr-fg`, и контраст\n // не приходится выверять заново. Мягкой подложки под `--gr-primary` в темах\n // нет (есть только у danger/info/success/warning), поэтому `color-mix` —\n // тот же приём, которым красят наведение `GrTabs` и `GrSelect`.\n selected: 'bg-[var(--gr-transfer-selected-bg,color-mix(in_srgb,var(--gr-primary)_12%,transparent))] text-[var(--gr-fg)]',\n idle: 'text-[var(--gr-fg)] hover:bg-[var(--gr-muted)]',\n // Гашение фоном, а не `opacity`: прозрачность разбавляет выверенные на AA\n // токены текста и роняет контраст.\n disabled: 'cursor-not-allowed bg-[var(--gr-muted)] text-[var(--gr-disabled-fg)]',\n} as const\n\n/**\n * Строка, только что приехавшая из соседней панели.\n *\n * Статичный итог перенос уже показывает — строка приходит отмеченной, счётчики\n * меняются, — но само **движение** ничем не выдано: строки просто возникают.\n * Короткая подсветка связывает «нажал» и «появилось». Под `prefers-reduced-motion`\n * её гасит глобальный кламп, и остаётся тот же статичный итог.\n */\nexport const transferOptionArrivedClass = 'gr-transfer-arrived'\n\n/**\n * Место, откуда строку унесли.\n *\n * Правило живёт в `<style>` компонента, а не утилитой: цвет текста строки задаёт\n * класс состояния той же специфичности, и кто победит, решал бы порядок правил в\n * собранном CSS — та же ловушка, что записана в `grTabsStyles.ts`.\n */\nexport const transferOptionDraggingClass = 'gr-transfer-vacated'\n\n/**\n * Отметка строки декоративна: `GrCheckbox` внутрь `role=\"option\"` вложить\n * нельзя — его индикатор сам `role=\"checkbox\"` с `tabindex=\"0\"`, то есть ровно\n * `nested-interactive`. Состояние объявляет `aria-selected` самой строки.\n */\nexport const transferMarkBase = 'inline-flex shrink-0 items-center justify-center rounded-[var(--gr-radius-sm)] border border-[var(--gr-brd)] bg-[var(--gr-bg)]'\n\nexport const transferMarkStates = {\n selected: 'border-[var(--gr-primary)] bg-[var(--gr-primary)] text-[var(--gr-primary-fg)]',\n idle: '',\n} as const\n\nexport const transferMarkIconClass = 'h-3 w-3'\n\nexport const transferLabelClass = 'min-w-0 flex-1 truncate'\n\n/**\n * Место вставки — псевдоэлемент строки-соседа, а не отдельный узел: лишний узел\n * между строками ломает подсчёт позиций и разделители.\n */\nexport 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'\n\nexport 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'\n\nexport const transferEmptyClass = 'flex h-full items-center justify-center px-4 py-6 text-center text-[var(--gr-muted-fg)]'\n\nexport const transferActionsClass = 'flex shrink-0 items-center'\n\n/**\n * Кнопки перестановки в шапке правой панели. Перестановка обязана быть видимой:\n * сочетание `Alt` + стрелка её ускоряет, но само по себе неоткрываемо, а на\n * macOS ещё и неудобно — почти все мета-клавиши там заняты системой.\n *\n * Стрелки горизонтальные, потому что порядок — это **последовательность**, а не\n * положение на экране: правая панель задаёт порядок колонок отчёта или полей\n * выгрузки, и они читаются слева направо.\n *\n * Сочетание при этом остаётся вертикальным (`Alt` + `↑`/`↓`), и расхождение с\n * иконками намеренное: в Chrome и Firefox под Windows и Linux `Alt` + `←`/`→` —\n * это «назад/вперёд» в истории браузера. В Safari навигация висит на\n * `Cmd` + стрелках, то есть там сочетание было бы свободно, — но пакет едет ко\n * всем, и ориентироваться на одну платформу нельзя.\n */\nexport 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)]'\n\nexport const transferReorderSizes: Record<GrTransferSize, string> = {\n xs: 'h-5 w-5',\n sm: 'h-5 w-5',\n md: 'h-6 w-6',\n lg: 'h-7 w-7',\n}\n\nexport const transferReorderIconClass = 'h-3.5 w-3.5'\n\nexport function grTransferReorderClass(size: GrTransferSize): string {\n return [transferReorderBase, transferReorderSizes[size]].join(' ')\n}\n\nexport const transferActionIconClass = 'h-4 w-4 shrink-0'\n\n/**\n * Кнопка без пути наружу остаётся в таб-порядке — нативный `disabled` уронил бы\n * фокус в тело документа. Показывает она это правилом в `<style>` компонента, а\n * не утилитой: у `GrButton` свой фон классом той же специфичности, и кто победит,\n * решал бы порядок в сгенерированном CSS, то есть через раз.\n */\nexport const transferActionInertClass = 'cursor-not-allowed'\n\n/**\n * Предпросмотр переносимого: он и есть ответ на «где сейчас элемент».\n *\n * Без него строка оставалась на месте, а за курсором не двигалось ничего — жест\n * выглядел так, будто ничего не происходит. Узел не ловит указатель\n * (`pointer-events: none`), иначе он перехватывал бы попадание у самих панелей.\n */\nexport 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)]'\n\nexport const transferGhostLabelClass = 'min-w-0 flex-1 truncate text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]'\n\n/** Сколько строк едет разом: одну видно по подписи, остальные — числом. */\nexport 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'\n\nexport const transferStatusClass = 'sr-only'\n\nexport const transferHeaderSizes: Record<GrTransferSize, string> = {\n xs: 'px-2 py-1 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'px-2.5 py-1.5 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: 'px-3 py-2 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n lg: 'px-4 py-2.5 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n\nexport const transferOptionSizes: Record<GrTransferSize, string> = {\n xs: 'px-2 py-1 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'px-2.5 py-1.5 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: 'px-3 py-2 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n lg: 'px-4 py-2.5 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n\nexport const transferMarkSizes: Record<GrTransferSize, string> = {\n xs: 'h-3.5 w-3.5',\n sm: 'h-4 w-4',\n md: 'h-4 w-4',\n lg: 'h-5 w-5',\n}\n\nexport const transferSearchSizes: Record<GrTransferSize, string> = {\n xs: 'p-1',\n sm: 'p-1.5',\n md: 'p-2',\n lg: 'p-2.5',\n}\n\nexport const transferEmptySizes: Record<GrTransferSize, string> = {\n xs: 'text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: 'text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n lg: 'text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n\nexport const transferActionsSizes: Record<GrTransferSize, string> = {\n xs: 'px-1',\n sm: 'px-1.5',\n md: 'px-2',\n lg: 'px-2.5',\n}\n\nexport interface GrTransferOptionClassOptions {\n size: GrTransferSize\n selected: boolean\n disabled: boolean\n draggable: boolean\n dragging: boolean\n arrived: boolean\n indicator: 'before' | 'after' | null\n}\n\nexport function grTransferOptionClass(options: GrTransferOptionClassOptions): string {\n const state = options.disabled\n ? transferOptionStates.disabled\n : options.selected ? transferOptionStates.selected : transferOptionStates.idle\n\n return [\n transferOptionBase,\n options.draggable && !options.disabled ? transferOptionGrabClass : transferOptionPlainClass,\n transferOptionSizes[options.size],\n state,\n options.dragging ? transferOptionDraggingClass : '',\n options.arrived ? transferOptionArrivedClass : '',\n options.indicator === 'before' ? transferIndicatorBeforeClass : '',\n options.indicator === 'after' ? transferIndicatorAfterClass : '',\n ].filter(Boolean).join(' ')\n}\n\nexport function grTransferMarkClass(size: GrTransferSize, selected: boolean): string {\n return [\n transferMarkBase,\n transferMarkSizes[size],\n selected ? transferMarkStates.selected : transferMarkStates.idle,\n ].filter(Boolean).join(' ')\n}\n\nexport function grTransferPanelClass(dropActive: boolean): string {\n return [transferPanelBase, dropActive ? transferPanelDropClass : ''].filter(Boolean).join(' ')\n}\n\nexport function grTransferEmptyClass(size: GrTransferSize): string {\n return [transferEmptyClass, transferEmptySizes[size]].join(' ')\n}\n\nexport function grTransferHeaderClass(size: GrTransferSize): string {\n return [transferHeaderBase, transferHeaderSizes[size]].join(' ')\n}\n\nexport function grTransferSearchClass(size: GrTransferSize): string {\n return [transferSearchBase, transferSearchSizes[size]].join(' ')\n}\n\nexport function grTransferActionsClass(size: GrTransferSize): string {\n return [transferActionsClass, transferActionsSizes[size]].join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n transferActionIconClass,\n transferActionInertClass,\n transferActionsClass,\n transferActionsSizes,\n transferCounterClass,\n transferGhostClass,\n transferGhostCountClass,\n transferGhostLabelClass,\n transferEmptyClass,\n transferEmptySizes,\n transferHeaderBase,\n transferHeaderSizes,\n transferIndicatorAfterClass,\n transferIndicatorBeforeClass,\n transferLabelClass,\n transferListBase,\n transferMarkBase,\n transferMarkIconClass,\n transferMarkSizes,\n transferMarkStates,\n transferOptionBase,\n transferOptionGrabClass,\n transferOptionPlainClass,\n transferOptionSizes,\n transferOptionStates,\n transferPanelBase,\n transferPanelDropClass,\n transferReorderBase,\n transferReorderIconClass,\n transferReorderSizes,\n transferRootBase,\n transferSearchBase,\n transferSearchSizes,\n transferStatusClass,\n transferTitleClass,\n} from './grTransferStyles'\n\n// `gr-transfer-vacated` и `gr-transfer-arrived` сюда не входят: это обычные\n// классы из `<style>` компонента, а не утилиты — генерировать их нечем.\nexport const grTransferSafelist = [...new Set([\n ...Object.values(transferHeaderSizes).flatMap(splitClassTokens),\n ...Object.values(transferOptionSizes).flatMap(splitClassTokens),\n ...Object.values(transferMarkSizes).flatMap(splitClassTokens),\n ...Object.values(transferSearchSizes).flatMap(splitClassTokens),\n ...Object.values(transferEmptySizes).flatMap(splitClassTokens),\n ...Object.values(transferActionsSizes).flatMap(splitClassTokens),\n ...Object.values(transferReorderSizes).flatMap(splitClassTokens),\n ...Object.values(transferOptionStates).flatMap(splitClassTokens),\n ...Object.values(transferMarkStates).flatMap(splitClassTokens),\n ...splitClassTokens(transferRootBase),\n ...splitClassTokens(transferPanelBase),\n ...splitClassTokens(transferPanelDropClass),\n ...splitClassTokens(transferHeaderBase),\n ...splitClassTokens(transferTitleClass),\n ...splitClassTokens(transferCounterClass),\n ...splitClassTokens(transferGhostClass),\n ...splitClassTokens(transferGhostLabelClass),\n ...splitClassTokens(transferGhostCountClass),\n ...splitClassTokens(transferSearchBase),\n ...splitClassTokens(transferListBase),\n ...splitClassTokens(transferOptionBase),\n ...splitClassTokens(transferOptionGrabClass),\n ...splitClassTokens(transferOptionPlainClass),\n ...splitClassTokens(transferMarkBase),\n ...splitClassTokens(transferMarkIconClass),\n ...splitClassTokens(transferLabelClass),\n ...splitClassTokens(transferIndicatorBeforeClass),\n ...splitClassTokens(transferIndicatorAfterClass),\n ...splitClassTokens(transferEmptyClass),\n ...splitClassTokens(transferActionsClass),\n ...splitClassTokens(transferActionIconClass),\n ...splitClassTokens(transferActionInertClass),\n ...splitClassTokens(transferReorderBase),\n ...splitClassTokens(transferReorderIconClass),\n ...splitClassTokens(transferStatusClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTransferSafelist } from './safelist'\n\nexport const grTransferConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTransfer',\n dependencies: ['GrButton', 'GrButtonGroup', 'GrCheckbox', 'GrInput'],\n safelist: grTransferSafelist,\n})\n"],"mappings":"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"}
|
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
import { n as splitClassTokens } from "./classTokens-8v2XC74x.js";
|
|
2
|
+
import { t as GR_TONES } from "./tones-CRJAaYyg.js";
|
|
2
3
|
import { a as valueTextSizes, i as trackSizes, n as grProgressBarFillClass, r as rowGaps, t as bufferClass } from "./grStyle-CrgLQKKf.js";
|
|
3
4
|
import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
|
|
4
|
-
//#region src/components/shared/tones.ts
|
|
5
|
-
/**
|
|
6
|
-
* Единый перечень дизайн-тонов для всех компонентов библиотеки.
|
|
7
|
-
*
|
|
8
|
-
* Источник истины: список объявлен как `as const`-кортеж, из которого
|
|
9
|
-
* автоматически выводится тип `GrTone`. Это позволяет использовать
|
|
10
|
-
* `GR_TONES` в рантайме (валидация, итерация, safelist) и `GrTone`
|
|
11
|
-
* в типах одновременно, без расхождений.
|
|
12
|
-
*/
|
|
13
|
-
var GR_TONES = [
|
|
14
|
-
"primary",
|
|
15
|
-
"neutral",
|
|
16
|
-
"success",
|
|
17
|
-
"warning",
|
|
18
|
-
"danger",
|
|
19
|
-
"info",
|
|
20
|
-
"slate",
|
|
21
|
-
"azure"
|
|
22
|
-
];
|
|
23
5
|
var grProgressBarClassTokens = {
|
|
24
6
|
fill: GR_TONES.flatMap((tone) => splitClassTokens(grProgressBarFillClass(tone))),
|
|
25
7
|
track: Object.values(trackSizes).flatMap(splitClassTokens),
|
|
@@ -51,4 +33,4 @@ var grProgressBarConfig = defineGranularComponent(import.meta.url, {
|
|
|
51
33
|
}
|
|
52
34
|
});
|
|
53
35
|
//#endregion
|
|
54
|
-
export { grProgressBarSafelist as n,
|
|
36
|
+
export { grProgressBarSafelist as n, grProgressBarConfig as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-hnoZvcIM.js","names":[],"sources":["../../src/components/GrProgressBar/safelist.ts","../../src/components/GrProgressBar/config.ts"],"sourcesContent":["import { splitClassTokens } from '../shared/classTokens'\nimport { GR_TONES } from '../shared/tones'\nimport { bufferClass, grProgressBarFillClass, rowGaps, trackSizes, valueTextSizes } from './grStyle'\n\nconst fillTokens = GR_TONES.flatMap(tone => splitClassTokens(grProgressBarFillClass(tone)))\n\nexport const grProgressBarClassTokens = {\n fill: fillTokens,\n track: Object.values(trackSizes).flatMap(splitClassTokens),\n gap: Object.values(rowGaps).flatMap(splitClassTokens),\n value: Object.values(valueTextSizes).flatMap(splitClassTokens),\n buffer: splitClassTokens(bufferClass),\n} as const\n\nexport const grProgressBarSafelist = [...new Set([\n ...grProgressBarClassTokens.fill,\n ...grProgressBarClassTokens.track,\n ...grProgressBarClassTokens.gap,\n ...grProgressBarClassTokens.value,\n ...grProgressBarClassTokens.buffer,\n])] as const\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grProgressBarSafelist } from './safelist'\n\nexport const grProgressBarConfig = defineGranularComponent(import.meta.url, {\n name: 'GrProgressBar',\n safelist: grProgressBarSafelist,\n tokenDefinitionsRef: {\n light: { url: './themes/light.css', selector: ':root' },\n dark: { url: './themes/dark.css', as: '.dark, [data-theme=\"dark\"]' },\n },\n})\n"],"mappings":";;;;AAMA,IAAa,2BAA2B;CACtC,MAHiB,SAAS,SAAQ,SAAQ,iBAAiB,uBAAuB,IAAI,CAAC,CAGjF;CACN,OAAO,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CACzD,KAAK,OAAO,OAAO,OAAO,CAAC,CAAC,QAAQ,gBAAgB;CACpD,OAAO,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CAC7D,QAAQ,iBAAiB,WAAW;AACtC;AAEA,IAAa,wBAAwB,CAAC,mBAAG,IAAI,IAAI;CAC/C,GAAG,yBAAyB;CAC5B,GAAG,yBAAyB;CAC5B,GAAG,yBAAyB;CAC5B,GAAG,yBAAyB;CAC5B,GAAG,yBAAyB;AAC9B,CAAC,CAAC;;;AChBF,IAAa,sBAAsB,wBAAwB,YAAY,KAAK;CAC1E,MAAM;CACN,UAAU;CACV,qBAAqB;EACnB,OAAO;GAAE,KAAK;GAAsB,UAAU;EAAQ;EACtD,MAAM;GAAE,KAAK;GAAqB,IAAI;EAA6B;CACrE;AACF,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
//#region src/composables/internal/dragSortGeometry.ts
|
|
2
|
+
/**
|
|
3
|
+
* Какой элемент под указателем и в каком месте его.
|
|
4
|
+
*
|
|
5
|
+
* Промах не отбрасывается: между строками есть зазоры, а курсор уезжает за
|
|
6
|
+
* край списка — и в обоих случаях перенос обязан продолжать показывать
|
|
7
|
+
* ближайшую цель, иначе индикатор мигает на каждом пикселе между строками.
|
|
8
|
+
*
|
|
9
|
+
* Вырожденный отрезок (нулевая высота строки) даёт `fraction: 0` — цель
|
|
10
|
+
* остаётся детерминированной, а не зависящей от направления подхода.
|
|
11
|
+
*/
|
|
12
|
+
function hitTest(spans, position) {
|
|
13
|
+
if (spans.length === 0) return null;
|
|
14
|
+
let nearestIndex = 0;
|
|
15
|
+
let nearestDistance = Number.POSITIVE_INFINITY;
|
|
16
|
+
for (let index = 0; index < spans.length; index += 1) {
|
|
17
|
+
const span = spans[index];
|
|
18
|
+
if (position >= span.start && position <= span.end) return {
|
|
19
|
+
index,
|
|
20
|
+
fraction: fractionIn(span, position)
|
|
21
|
+
};
|
|
22
|
+
const distance = position < span.start ? span.start - position : position - span.end;
|
|
23
|
+
if (distance < nearestDistance) {
|
|
24
|
+
nearestDistance = distance;
|
|
25
|
+
nearestIndex = index;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const nearest = spans[nearestIndex];
|
|
29
|
+
return {
|
|
30
|
+
index: nearestIndex,
|
|
31
|
+
fraction: fractionIn(nearest, position)
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function fractionIn(span, position) {
|
|
35
|
+
const size = span.end - span.start;
|
|
36
|
+
if (size <= 0) return 0;
|
|
37
|
+
return clamp((position - span.start) / size, 0, 1);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Куда встанет элемент, если отпустить сейчас.
|
|
41
|
+
*
|
|
42
|
+
* Верхняя половина строки — «до неё», нижняя — «после». Индекс возвращается
|
|
43
|
+
* **в терминах итогового массива**, то есть уже с поправкой на то, что
|
|
44
|
+
* перетаскиваемый элемент из него временно вынут: без поправки перенос вниз
|
|
45
|
+
* на одну позицию не двигал бы ничего.
|
|
46
|
+
*/
|
|
47
|
+
function insertionIndex(hit, from, count) {
|
|
48
|
+
if (count <= 0) return 0;
|
|
49
|
+
const base = hit.fraction < .5 ? hit.index : hit.index + 1;
|
|
50
|
+
return clamp(from < base ? base - 1 : base, 0, count - 1);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* На сколько прокрутить контейнер за кадр: отрицательное — к началу.
|
|
54
|
+
*
|
|
55
|
+
* Скорость растёт линейно по мере приближения к краю, а не включается
|
|
56
|
+
* ступенькой: ступенька на длинном списке ощущается как рывок и промахивается
|
|
57
|
+
* мимо цели.
|
|
58
|
+
*/
|
|
59
|
+
function autoScrollDelta(viewport, position, options = {}) {
|
|
60
|
+
const zone = options.zone ?? 32;
|
|
61
|
+
const speed = options.speed ?? 12;
|
|
62
|
+
if (zone <= 0 || speed <= 0) return 0;
|
|
63
|
+
if (viewport.end - viewport.start <= zone * 2) return 0;
|
|
64
|
+
if (position < viewport.start || position > viewport.end) return 0;
|
|
65
|
+
const fromStart = position - viewport.start;
|
|
66
|
+
if (fromStart < zone) return -Math.ceil((zone - fromStart) / zone * speed);
|
|
67
|
+
const fromEnd = viewport.end - position;
|
|
68
|
+
if (fromEnd < zone) return Math.ceil((zone - fromEnd) / zone * speed);
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Перестановка без мутации входа: массив потребителя остаётся нетронутым,
|
|
73
|
+
* наружу уходит новый. `v-model` с мутацией исходного набора ломает и
|
|
74
|
+
* сравнение «было — стало», и историю в сторе потребителя.
|
|
75
|
+
*/
|
|
76
|
+
function moveItem(items, from, to) {
|
|
77
|
+
const next = items.slice();
|
|
78
|
+
if (from === to || from < 0 || from >= items.length) return next;
|
|
79
|
+
const [moved] = next.splice(from, 1);
|
|
80
|
+
next.splice(clamp(to, 0, next.length), 0, moved);
|
|
81
|
+
return next;
|
|
82
|
+
}
|
|
83
|
+
function clamp(value, min, max) {
|
|
84
|
+
return Math.min(max, Math.max(min, value));
|
|
85
|
+
}
|
|
86
|
+
//#endregion
|
|
87
|
+
export { moveItem as i, hitTest as n, insertionIndex as r, autoScrollDelta as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dragSortGeometry-CY-llfrQ.js","names":[],"sources":["../../src/composables/internal/dragSortGeometry.ts"],"sourcesContent":["/**\n * Геометрия перестановки: чистая арифметика без DOM и без реактивности.\n *\n * Вынесена отдельно, потому что ошибка здесь проявляется не исключением, а\n * «элемент встал не туда» — поймать это можно только тестом на числах.\n * Композабл `useDragSort` сводит `DOMRect` к отрезкам вдоль оси и зовёт эти\n * функции; какой смысл у попадания, решает уже компонент.\n */\n\n/** Отрезок, занимаемый элементом вдоль оси переноса. */\nexport interface DragSortSpan {\n start: number\n end: number\n}\n\nexport interface DragSortHitResult {\n /** Индекс элемента в переданном наборе. */\n index: number\n /** Доля вдоль элемента: 0 — его начало, 1 — конец. */\n fraction: number\n}\n\n/**\n * Какой элемент под указателем и в каком месте его.\n *\n * Промах не отбрасывается: между строками есть зазоры, а курсор уезжает за\n * край списка — и в обоих случаях перенос обязан продолжать показывать\n * ближайшую цель, иначе индикатор мигает на каждом пикселе между строками.\n *\n * Вырожденный отрезок (нулевая высота строки) даёт `fraction: 0` — цель\n * остаётся детерминированной, а не зависящей от направления подхода.\n */\nexport function hitTest(spans: readonly DragSortSpan[], position: number): DragSortHitResult | null {\n if (spans.length === 0)\n return null\n\n let nearestIndex = 0\n let nearestDistance = Number.POSITIVE_INFINITY\n\n for (let index = 0; index < spans.length; index += 1) {\n const span = spans[index]\n\n if (position >= span.start && position <= span.end)\n return { index, fraction: fractionIn(span, position) }\n\n const distance = position < span.start ? span.start - position : position - span.end\n if (distance < nearestDistance) {\n nearestDistance = distance\n nearestIndex = index\n }\n }\n\n const nearest = spans[nearestIndex]\n\n return { index: nearestIndex, fraction: fractionIn(nearest, position) }\n}\n\nfunction fractionIn(span: DragSortSpan, position: number): number {\n const size = span.end - span.start\n if (size <= 0)\n return 0\n\n return clamp((position - span.start) / size, 0, 1)\n}\n\n/**\n * Куда встанет элемент, если отпустить сейчас.\n *\n * Верхняя половина строки — «до неё», нижняя — «после». Индекс возвращается\n * **в терминах итогового массива**, то есть уже с поправкой на то, что\n * перетаскиваемый элемент из него временно вынут: без поправки перенос вниз\n * на одну позицию не двигал бы ничего.\n */\nexport function insertionIndex(hit: DragSortHitResult, from: number, count: number): number {\n if (count <= 0)\n return 0\n\n const base = hit.fraction < 0.5 ? hit.index : hit.index + 1\n const adjusted = from < base ? base - 1 : base\n\n return clamp(adjusted, 0, count - 1)\n}\n\nexport interface AutoScrollOptions {\n /** Ширина чувствительной полосы у каждого края, px. По умолчанию 32. */\n zone?: number\n /** Скорость на самом краю, px за кадр. По умолчанию 12. */\n speed?: number\n}\n\n/**\n * На сколько прокрутить контейнер за кадр: отрицательное — к началу.\n *\n * Скорость растёт линейно по мере приближения к краю, а не включается\n * ступенькой: ступенька на длинном списке ощущается как рывок и промахивается\n * мимо цели.\n */\nexport function autoScrollDelta(viewport: DragSortSpan, position: number, options: AutoScrollOptions = {}): number {\n const zone = options.zone ?? 32\n const speed = options.speed ?? 12\n\n if (zone <= 0 || speed <= 0)\n return 0\n // Вьюпорт короче двух зон: полосы наложились бы и тянули список в обе стороны.\n if (viewport.end - viewport.start <= zone * 2)\n return 0\n\n if (position < viewport.start || position > viewport.end)\n return 0\n\n const fromStart = position - viewport.start\n if (fromStart < zone)\n return -Math.ceil(((zone - fromStart) / zone) * speed)\n\n const fromEnd = viewport.end - position\n if (fromEnd < zone)\n return Math.ceil(((zone - fromEnd) / zone) * speed)\n\n return 0\n}\n\n/**\n * Перестановка без мутации входа: массив потребителя остаётся нетронутым,\n * наружу уходит новый. `v-model` с мутацией исходного набора ломает и\n * сравнение «было — стало», и историю в сторе потребителя.\n */\nexport function moveItem<T>(items: readonly T[], from: number, to: number): T[] {\n const next = items.slice()\n if (from === to || from < 0 || from >= items.length)\n return next\n\n const [moved] = next.splice(from, 1)\n next.splice(clamp(to, 0, next.length), 0, moved)\n\n return next\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value))\n}\n"],"mappings":";;;;;;;;;;;AAgCA,SAAgB,QAAQ,OAAgC,UAA4C;CAClG,IAAI,MAAM,WAAW,GACnB,OAAO;CAET,IAAI,eAAe;CACnB,IAAI,kBAAkB,OAAO;CAE7B,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS,GAAG;EACpD,MAAM,OAAO,MAAM;EAEnB,IAAI,YAAY,KAAK,SAAS,YAAY,KAAK,KAC7C,OAAO;GAAE;GAAO,UAAU,WAAW,MAAM,QAAQ;EAAE;EAEvD,MAAM,WAAW,WAAW,KAAK,QAAQ,KAAK,QAAQ,WAAW,WAAW,KAAK;EACjF,IAAI,WAAW,iBAAiB;GAC9B,kBAAkB;GAClB,eAAe;EACjB;CACF;CAEA,MAAM,UAAU,MAAM;CAEtB,OAAO;EAAE,OAAO;EAAc,UAAU,WAAW,SAAS,QAAQ;CAAE;AACxE;AAEA,SAAS,WAAW,MAAoB,UAA0B;CAChE,MAAM,OAAO,KAAK,MAAM,KAAK;CAC7B,IAAI,QAAQ,GACV,OAAO;CAET,OAAO,OAAO,WAAW,KAAK,SAAS,MAAM,GAAG,CAAC;AACnD;;;;;;;;;AAUA,SAAgB,eAAe,KAAwB,MAAc,OAAuB;CAC1F,IAAI,SAAS,GACX,OAAO;CAET,MAAM,OAAO,IAAI,WAAW,KAAM,IAAI,QAAQ,IAAI,QAAQ;CAG1D,OAAO,MAFU,OAAO,OAAO,OAAO,IAAI,MAEnB,GAAG,QAAQ,CAAC;AACrC;;;;;;;;AAgBA,SAAgB,gBAAgB,UAAwB,UAAkB,UAA6B,CAAC,GAAW;CACjH,MAAM,OAAO,QAAQ,QAAQ;CAC7B,MAAM,QAAQ,QAAQ,SAAS;CAE/B,IAAI,QAAQ,KAAK,SAAS,GACxB,OAAO;CAET,IAAI,SAAS,MAAM,SAAS,SAAS,OAAO,GAC1C,OAAO;CAET,IAAI,WAAW,SAAS,SAAS,WAAW,SAAS,KACnD,OAAO;CAET,MAAM,YAAY,WAAW,SAAS;CACtC,IAAI,YAAY,MACd,OAAO,CAAC,KAAK,MAAO,OAAO,aAAa,OAAQ,KAAK;CAEvD,MAAM,UAAU,SAAS,MAAM;CAC/B,IAAI,UAAU,MACZ,OAAO,KAAK,MAAO,OAAO,WAAW,OAAQ,KAAK;CAEpD,OAAO;AACT;;;;;;AAOA,SAAgB,SAAY,OAAqB,MAAc,IAAiB;CAC9E,MAAM,OAAO,MAAM,MAAM;CACzB,IAAI,SAAS,MAAM,OAAO,KAAK,QAAQ,MAAM,QAC3C,OAAO;CAET,MAAM,CAAC,SAAS,KAAK,OAAO,MAAM,CAAC;CACnC,KAAK,OAAO,MAAM,IAAI,GAAG,KAAK,MAAM,GAAG,GAAG,KAAK;CAE/C,OAAO;AACT;AAEA,SAAS,MAAM,OAAe,KAAa,KAAqB;CAC9D,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C"}
|
|
@@ -1,4 +1,33 @@
|
|
|
1
1
|
//#region src/i18n/locales/en.json
|
|
2
|
+
var transfer = {
|
|
3
|
+
"sourceTitle": "Available",
|
|
4
|
+
"targetTitle": "Selected",
|
|
5
|
+
"search": "Search",
|
|
6
|
+
"toTarget": "Move to selected",
|
|
7
|
+
"toSource": "Move back to available",
|
|
8
|
+
"selectAll": "Select everything shown",
|
|
9
|
+
"moveUp": "Move earlier",
|
|
10
|
+
"moveDown": "Move later",
|
|
11
|
+
"selected": "{count} of {total}",
|
|
12
|
+
"shown": "Showing {shown} of {total}",
|
|
13
|
+
"empty": "Nothing here yet",
|
|
14
|
+
"emptyFiltered": "Nothing matches the search",
|
|
15
|
+
"moved": "{count} moved to {list}",
|
|
16
|
+
"reordered": "Position {position} of {count}",
|
|
17
|
+
"reorderFiltered": "Reordering is off while a search is active",
|
|
18
|
+
"cancelled": "Move cancelled"
|
|
19
|
+
};
|
|
20
|
+
var carousel = {
|
|
21
|
+
"roledescription": "carousel",
|
|
22
|
+
"slideRoledescription": "slide",
|
|
23
|
+
"slidePosition": "{index} of {total}",
|
|
24
|
+
"previous": "Previous slide",
|
|
25
|
+
"next": "Next slide",
|
|
26
|
+
"play": "Start automatic slide show",
|
|
27
|
+
"pause": "Stop automatic slide show",
|
|
28
|
+
"indicators": "Slides",
|
|
29
|
+
"autoplayStopped": "Automatic slide show stopped"
|
|
30
|
+
};
|
|
2
31
|
var chip = {
|
|
3
32
|
"remove": "Remove",
|
|
4
33
|
"removeNamed": "Remove {label}"
|
|
@@ -247,6 +276,8 @@ var commandPalette = {
|
|
|
247
276
|
"recent": "Recent",
|
|
248
277
|
"loading": "Loading…"
|
|
249
278
|
};
|
|
279
|
+
var delta = { "increase": "increase" };
|
|
280
|
+
var filePreview = { "label": "File" };
|
|
250
281
|
var fileValidation = {
|
|
251
282
|
"accept": "File \"{fileName}\" does not match accept=\"{accept}\"",
|
|
252
283
|
"extension": "File \"{fileName}\" has disallowed extension \".{extension}\"",
|
|
@@ -319,6 +350,8 @@ var jsonViewer = {
|
|
|
319
350
|
};
|
|
320
351
|
var contextMenu = { "label": "Context menu" };
|
|
321
352
|
var en_default = {
|
|
353
|
+
transfer,
|
|
354
|
+
carousel,
|
|
322
355
|
chip,
|
|
323
356
|
common,
|
|
324
357
|
loading,
|
|
@@ -356,6 +389,8 @@ var en_default = {
|
|
|
356
389
|
textarea,
|
|
357
390
|
rating,
|
|
358
391
|
commandPalette,
|
|
392
|
+
delta,
|
|
393
|
+
filePreview,
|
|
359
394
|
fileValidation,
|
|
360
395
|
kbd,
|
|
361
396
|
link,
|
|
@@ -373,4 +408,4 @@ var en_default = {
|
|
|
373
408
|
contextMenu
|
|
374
409
|
};
|
|
375
410
|
//#endregion
|
|
376
|
-
export { autocomplete, avatar, badgeWrap, bottomNav, breadcrumbs, button, chip, collapse, colorPicker, colors, commandPalette, common, contextMenu, dataTable, en_default as default, dialog, drawer, emptyState, fileUpload, fileValidation, form, formErrorBanner, formFile, imageViewer, input, inputTag, jsonViewer, kbd, link, list, loading, modal, navbar, numberInput, pagination, rating, responseError, select, sidebar, slider, sortable, splitter, statistic, steps, table, tabs, textarea, timeline, toaster, tree, treeSelect, uploadErrorBanner };
|
|
411
|
+
export { autocomplete, avatar, badgeWrap, bottomNav, breadcrumbs, button, carousel, chip, collapse, colorPicker, colors, commandPalette, common, contextMenu, dataTable, en_default as default, delta, dialog, drawer, emptyState, filePreview, fileUpload, fileValidation, form, formErrorBanner, formFile, imageViewer, input, inputTag, jsonViewer, kbd, link, list, loading, modal, navbar, numberInput, pagination, rating, responseError, select, sidebar, slider, sortable, splitter, statistic, steps, table, tabs, textarea, timeline, toaster, transfer, tree, treeSelect, uploadErrorBanner };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"en-C_QkUTRL.js","names":[],"sources":["../../src/i18n/locales/en.json"],"sourcesContent":["{\n \"transfer\": {\n \"sourceTitle\": \"Available\",\n \"targetTitle\": \"Selected\",\n \"search\": \"Search\",\n \"toTarget\": \"Move to selected\",\n \"toSource\": \"Move back to available\",\n \"selectAll\": \"Select everything shown\",\n \"moveUp\": \"Move earlier\",\n \"moveDown\": \"Move later\",\n \"selected\": \"{count} of {total}\",\n \"shown\": \"Showing {shown} of {total}\",\n \"empty\": \"Nothing here yet\",\n \"emptyFiltered\": \"Nothing matches the search\",\n \"moved\": \"{count} moved to {list}\",\n \"reordered\": \"Position {position} of {count}\",\n \"reorderFiltered\": \"Reordering is off while a search is active\",\n \"cancelled\": \"Move cancelled\"\n },\n \"carousel\": {\n \"roledescription\": \"carousel\",\n \"slideRoledescription\": \"slide\",\n \"slidePosition\": \"{index} of {total}\",\n \"previous\": \"Previous slide\",\n \"next\": \"Next slide\",\n \"play\": \"Start automatic slide show\",\n \"pause\": \"Stop automatic slide show\",\n \"indicators\": \"Slides\",\n \"autoplayStopped\": \"Automatic slide show stopped\"\n },\n \"chip\": {\n \"remove\": \"Remove\",\n \"removeNamed\": \"Remove {label}\"\n },\n \"common\": {\n \"confirm\": \"Confirm\",\n \"cancel\": \"Cancel\",\n \"add\": \"Add\",\n \"clear\": \"Clear\",\n \"close\": \"Close\"\n },\n \"loading\": {\n \"defaultText\": \"Loading...\"\n },\n \"steps\": {\n \"label\": \"Progress\",\n \"status\": \"Step {step} of {count}\",\n \"completed\": \"completed\",\n \"error\": \"has errors\"\n },\n \"treeSelect\": {\n \"filterPlaceholder\": \"Search…\",\n \"empty\": \"No data\",\n \"loading\": \"Loading…\"\n },\n \"badgeWrap\": {\n \"count\": \"{count} new\"\n },\n \"avatar\": {\n \"group\": \"People\",\n \"groupOverflow\": \"and {count} more\",\n \"status\": {\n \"online\": \"online\",\n \"offline\": \"offline\",\n \"busy\": \"busy\",\n \"away\": \"away\"\n }\n },\n \"tree\": {\n \"drag\": \"Drag\",\n \"expand\": \"Expand\",\n \"collapse\": \"Collapse\",\n \"moved\": \"Moved {label}\"\n },\n \"select\": {\n \"customValuePlaceholder\": \"Add value…\",\n \"addOption\": \"Add \\\"{value}\\\"\",\n \"clearOption\": \"None\",\n \"searchPlaceholder\": \"Search…\",\n \"loading\": \"Loading…\",\n \"noResults\": \"No results\",\n \"removeTag\": \"Remove {label}\"\n },\n \"dataTable\": {\n \"loading\": \"Loading…\",\n \"empty\": \"No data\",\n \"selectAll\": \"Select all rows\",\n \"selectRow\": \"Select row\",\n \"sortAsc\": \"Activate to sort ascending\",\n \"sortDesc\": \"Activate to sort descending\",\n \"sortNone\": \"Activate to remove sorting\",\n \"moveColumn\": \"Move column {label}\",\n \"columnMoved\": \"Column {label} moved to position {position} of {count}\",\n \"resizeColumn\": \"Width of column {label}\",\n \"columnResized\": \"Column {label} is {width} pixels wide\"\n },\n \"breadcrumbs\": {\n \"label\": \"Breadcrumb\",\n \"expand\": \"Show hidden path\"\n },\n \"autocomplete\": {\n \"loading\": \"Loading…\",\n \"noResults\": \"No results\",\n \"addOption\": \"Add \\\"{value}\\\"\",\n \"removeValue\": \"Remove {label}\",\n \"typeMore\": {\n \"one\": \"Type at least {n} character\",\n \"other\": \"Type at least {n} characters\"\n }\n },\n \"form\": {\n \"required\": \"This field is required\",\n \"min\": \"Minimum is {min}\",\n \"max\": \"Maximum is {max}\",\n \"len\": \"Length must be {len}\",\n \"pattern\": \"Invalid format\",\n \"email\": \"Enter a valid email\",\n \"url\": \"Enter a valid URL\",\n \"file\": \"Invalid file\",\n \"invalid\": \"Invalid value\",\n \"readonly\": \"Read only\",\n \"validating\": \"Checking…\"\n },\n \"dialog\": {\n \"confirm\": {\n \"title\": \"Confirm\"\n },\n \"prompt\": {\n \"title\": \"Prompt\",\n \"label\": \"Value\",\n \"required\": \"Enter a value.\"\n },\n \"ok\": \"OK\"\n },\n \"switch\": {\n \"loading\": \"Saving…\"\n },\n \"slider\": {\n \"min\": \"min\",\n \"max\": \"max\"\n },\n \"sidebar\": {\n \"expand\": \"Expand sidebar\",\n \"collapse\": \"Collapse sidebar\"\n },\n \"splitter\": {\n \"label\": \"Resize panels\"\n },\n \"statistic\": {\n \"trendUp\": \"Increase\",\n \"trendDown\": \"Decrease\",\n \"trendFlat\": \"No change\"\n },\n \"pagination\": {\n \"label\": \"Pagination\",\n \"pageSize\": \"Page size\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"page\": \"Page {n}\",\n \"first\": \"First page\",\n \"last\": \"Last page\",\n \"jumpTo\": \"Go to\",\n \"total\": \"{from}–{to} of {total}\",\n \"status\": \"Page {page} of {count}\"\n },\n \"navbar\": {\n \"openMenu\": \"Open menu\"\n },\n \"responseError\": {\n \"networkTitle\": \"No connection to the server\",\n \"networkMessage\": \"Check your internet connection and try again.\",\n \"abortedTitle\": \"Request cancelled\",\n \"abortedMessage\": \"The request was cancelled.\",\n \"validationTitle\": \"Check the data\",\n \"validationMessage\": \"The server returned a validation error. Fix the fields and try again.\",\n \"clientTitle\": \"Request error\",\n \"clientMessage\": \"The server rejected the request.\",\n \"serverTitle\": \"Server error\",\n \"serverMessage\": \"A server error occurred. Please try again.\",\n \"unknownTitle\": \"Something went wrong\",\n \"unknownMessage\": \"The operation could not be completed. Please try again.\",\n \"statusLabel\": \"HTTP {status}\",\n \"retryLabel\": \"Retry\",\n \"dismissLabel\": \"Dismiss\"\n },\n \"colors\": {\n \"neutral\": \"Neutral\",\n \"success\": \"Success\",\n \"warning\": \"Warning\",\n \"danger\": \"Danger\",\n \"info\": \"Info\",\n \"primary\": \"Primary\",\n \"slate\": \"Slate\",\n \"azure\": \"Azure\"\n },\n \"drawer\": {\n \"title\": \"Drawer\"\n },\n \"modal\": {\n \"title\": \"Dialog\"\n },\n \"numberInput\": {\n \"increase\": \"Increase\",\n \"decrease\": \"Decrease\"\n },\n \"toaster\": {\n \"dismiss\": \"Dismiss\",\n \"region\": \"Notifications\"\n },\n \"inputTag\": {\n \"removeTag\": \"Remove tag\",\n \"removeTagNamed\": \"Remove tag {tag}\",\n \"clearAll\": \"Clear all tags\",\n \"added\": \"Tag added: {tag}\",\n \"addedMany\": \"{count} tags added\",\n \"removed\": \"Tag removed: {tag}\",\n \"cleared\": \"All tags removed\",\n \"limitReached\": \"Tag limit reached\"\n },\n \"fileUpload\": {\n \"placeholder\": \"Drag files here or click to select\",\n \"progress\": \"Upload progress\",\n \"uploading\": \"Uploading…\",\n \"success\": \"Upload complete\",\n \"error\": \"Upload failed\",\n \"remove\": \"Remove {fileName}\",\n \"retry\": \"Retry upload\",\n \"retryFile\": \"Retry {fileName}\",\n \"abortFile\": \"Cancel upload of {fileName}\",\n \"statusPending\": \"Pending\",\n \"statusUploading\": \"Uploading\",\n \"statusSuccess\": \"Uploaded\",\n \"statusError\": \"Failed\"\n },\n \"formFile\": {\n \"upload\": \"Upload file\",\n \"change\": \"Change file\",\n \"remove\": \"Remove\",\n \"clearAll\": \"Clear all\",\n \"placeholder\": \"No files selected\",\n \"validateError\": \"Failed to validate dropped files\",\n \"removeFile\": \"Remove {fileName}\"\n },\n \"imageViewer\": {\n \"close\": \"Close image viewer\",\n \"prev\": \"Previous image\",\n \"next\": \"Next image\",\n \"zoomIn\": \"Zoom in\",\n \"zoomOut\": \"Zoom out\",\n \"resetZoom\": \"Reset zoom\",\n \"zoomToNatural\": \"Actual size (1:1)\",\n \"rotateLeft\": \"Rotate left\",\n \"rotateRight\": \"Rotate right\",\n \"download\": \"Download image\",\n \"empty\": \"No image\",\n \"label\": \"Image viewer\",\n \"position\": \"Image {index} of {total}\"\n },\n \"formErrorBanner\": {\n \"validationTitle\": \"Check the form fields\",\n \"validationMessage\": \"The server rejected the data. Fix the highlighted fields and try again.\",\n \"clientTitle\": \"Failed to save\",\n \"serverTitle\": \"Save error\",\n \"serverMessage\": \"Could not save the data. Please try again later.\"\n },\n \"uploadErrorBanner\": {\n \"networkTitle\": \"Failed to upload files\",\n \"networkMessage\": \"Check your connection and try again.\",\n \"validationTitle\": \"Files did not pass validation\",\n \"validationMessage\": \"Some of the files do not meet the requirements.\",\n \"serverTitle\": \"Upload error on the server\",\n \"serverMessage\": \"The server could not process the upload. Please try again.\"\n },\n \"input\": {\n \"clear\": \"Clear\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"limitReached\": \"Character limit reached\"\n },\n \"textarea\": {\n \"lines\": {\n \"one\": \"{n} line\",\n \"other\": \"{n} lines\"\n }\n },\n \"rating\": {\n \"label\": \"Rating\",\n \"valueText\": \"{value} of {max}\",\n \"valueTextWithLabel\": \"{value} of {max}, {label}\"\n },\n \"commandPalette\": {\n \"label\": \"Command palette\",\n \"placeholder\": \"Type a command or search…\",\n \"empty\": \"Nothing found\",\n \"recent\": \"Recent\",\n \"loading\": \"Loading…\"\n },\n \"delta\": {\n \"increase\": \"increase\"\n },\n \"filePreview\": {\n \"label\": \"File\"\n },\n \"fileValidation\": {\n \"accept\": \"File \\\"{fileName}\\\" does not match accept=\\\"{accept}\\\"\",\n \"extension\": \"File \\\"{fileName}\\\" has disallowed extension \\\".{extension}\\\"\",\n \"mimeType\": \"File \\\"{fileName}\\\" has disallowed mime type \\\"{mimeType}\\\"\",\n \"mimeTypeFallback\": \"File \\\"{fileName}\\\" has fallback mime type \\\"{mimeType}\\\"\",\n \"maxFileSize\": \"File \\\"{fileName}\\\" is too large ({size} bytes), maxBytes={maxBytes}\",\n \"maxCount\": \"Too many files selected ({count}), maxCount={maxCount}\",\n \"maxTotalSize\": \"Total files size is too large ({total} bytes), maxTotalSizeBytes={maxBytes}\"\n },\n \"kbd\": {\n \"command\": \"Command\",\n \"option\": \"Option\",\n \"shift\": \"Shift\",\n \"control\": \"Control\",\n \"enter\": \"Enter\",\n \"escape\": \"Escape\",\n \"tab\": \"Tab\",\n \"backspace\": \"Backspace\",\n \"delete\": \"Delete\",\n \"pageUp\": \"Page Up\",\n \"pageDown\": \"Page Down\",\n \"arrowUp\": \"Arrow Up\",\n \"arrowDown\": \"Arrow Down\",\n \"arrowLeft\": \"Arrow Left\",\n \"arrowRight\": \"Arrow Right\",\n \"then\": \"then\"\n },\n \"link\": {\n \"opensInNewTab\": \"opens in a new tab\"\n },\n \"colorPicker\": {\n \"panelLabel\": \"Color picker\",\n \"hue\": \"Hue\",\n \"saturation\": \"Saturation\",\n \"lightness\": \"Lightness\",\n \"opacity\": \"Opacity\",\n \"hexLabel\": \"Hex value\",\n \"presetsLabel\": \"Color presets\",\n \"swatchLabel\": \"Color {color}\"\n },\n \"collapse\": {\n \"empty\": \"Nothing here yet\"\n },\n \"list\": {\n \"empty\": \"Nothing here yet\"\n },\n \"button\": {\n \"loading\": \"Loading…\"\n },\n \"table\": {\n \"empty\": \"Nothing here yet\"\n },\n \"timeline\": {\n \"empty\": \"Nothing here yet\"\n },\n \"tabs\": {\n \"empty\": \"Nothing here yet\",\n \"close\": \"Close tab\"\n },\n \"bottomNav\": {\n \"label\": \"Bottom navigation\",\n \"badge\": \"{count} new\"\n },\n \"emptyState\": {\n \"title\": \"Nothing here yet\"\n },\n \"sortable\": {\n \"label\": \"Sortable list\",\n \"handle\": \"Reorder\",\n \"empty\": \"Nothing to sort yet\",\n \"grabbed\": \"Grabbed. Position {position} of {count}\",\n \"moved\": \"Position {position} of {count}\",\n \"dropped\": \"Dropped at position {position} of {count}\",\n \"cancelled\": \"Move cancelled\"\n },\n \"jsonViewer\": {\n \"search\": \"Search key or value\",\n \"expandAll\": \"Expand all\",\n \"collapseAll\": \"Collapse all\",\n \"copy\": \"Copy value\",\n \"copied\": \"Value copied\",\n \"copyFailed\": \"Could not copy value\",\n \"moreItems\": \"more\"\n },\n \"contextMenu\": {\n \"label\": \"Context menu\"\n }\n}\n"],"mappings":""}
|
|
@@ -9,12 +9,12 @@ var GRANULARITY_I18N_BLOCK = "gr";
|
|
|
9
9
|
* can import only the languages they actually need — see the
|
|
10
10
|
* "Authoring localization packages" guide in the docs.
|
|
11
11
|
*/
|
|
12
|
-
var en = { en: { ["gr"]: () => import("./en-
|
|
12
|
+
var en = { en: { ["gr"]: () => import("./en-C_QkUTRL.js") } };
|
|
13
13
|
//#endregion
|
|
14
14
|
//#region src/i18n/messages/ru.ts
|
|
15
|
-
var ru = { ru: { ["gr"]: () => import("./ru-
|
|
15
|
+
var ru = { ru: { ["gr"]: () => import("./ru-CLUErjhY.js") } };
|
|
16
16
|
//#endregion
|
|
17
17
|
//#region src/i18n/messages/es.ts
|
|
18
|
-
var es = { es: { ["gr"]: () => import("./es-
|
|
18
|
+
var es = { es: { ["gr"]: () => import("./es-DemSEhZE.js") } };
|
|
19
19
|
//#endregion
|
|
20
20
|
export { GRANULARITY_I18N_BLOCK as i, ru as n, en as r, es as t };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"es-
|
|
1
|
+
{"version":3,"file":"es-B4t_3Wnh.js","names":[],"sources":["../../src/i18n/messages/const.ts","../../src/i18n/messages/en.ts","../../src/i18n/messages/ru.ts","../../src/i18n/messages/es.ts"],"sourcesContent":["export const GRANULARITY_I18N_BLOCK = 'gr'\n","import type { LocaleLoaderCollection } from '@feugene/fint-i18n/core'\nimport { GRANULARITY_I18N_BLOCK } from './const'\n\n/**\n * English locale loaders for the playground app.\n *\n * Exported separately from other locales so that consumers (and bundlers)\n * can import only the languages they actually need — see the\n * \"Authoring localization packages\" guide in the docs.\n */\nexport const en = {\n en: {\n [GRANULARITY_I18N_BLOCK]: () => import('../locales/en.json'),\n },\n} satisfies LocaleLoaderCollection\n\nexport default en\n","import type { LocaleLoaderCollection } from '@feugene/fint-i18n/core'\nimport { GRANULARITY_I18N_BLOCK } from './const'\n\nexport const ru = {\n ru: {\n [GRANULARITY_I18N_BLOCK]: () => import('../locales/ru.json'),\n },\n} satisfies LocaleLoaderCollection\n\nexport default ru\n","import type { LocaleLoaderCollection } from '@feugene/fint-i18n/core'\nimport { GRANULARITY_I18N_BLOCK } from './const'\n\nexport const es = {\n es: {\n [GRANULARITY_I18N_BLOCK]: () => import('../locales/es.json'),\n },\n} satisfies LocaleLoaderCollection\n\nexport default es\n"],"mappings":";AAAA,IAAa,yBAAyB;;;;;;;;;;ACUtC,IAAa,KAAK,EAChB,IAAI,GAAA,aAC8B,OAAO,oBACzC,EACF;;;ACXA,IAAa,KAAK,EAChB,IAAI,GAAA,aAC8B,OAAO,oBACzC,EACF;;;ACJA,IAAa,KAAK,EAChB,IAAI,GAAA,aAC8B,OAAO,oBACzC,EACF"}
|