@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
package/LICENSE
CHANGED
|
@@ -235,7 +235,7 @@
|
|
|
235
235
|
described in (a) or (b).
|
|
236
236
|
|
|
237
237
|
For the purposes of this clause (including, without limitation,
|
|
238
|
-
paragraphs 3
|
|
238
|
+
paragraphs 3 and 5 and all their subparagraphs), the terms
|
|
239
239
|
"prohibited use" and "use in violation of paragraph 1" mean any
|
|
240
240
|
use, reproduction, modification, execution, deployment, hosting,
|
|
241
241
|
integration, distribution, sublicensing, or making available of
|
|
@@ -267,85 +267,17 @@
|
|
|
267
267
|
terminate automatically and immediately upon such violation, without
|
|
268
268
|
the need for notice by the Author.
|
|
269
269
|
|
|
270
|
-
4.
|
|
271
|
-
uses the Software, in whole or in part, in violation of paragraph 1
|
|
272
|
-
of this clause shall, in addition to the automatic termination of
|
|
273
|
-
rights under paragraph 3, owe the Author monetary compensation in an
|
|
274
|
-
amount equal to no less than ten percent (10%) of the violator's
|
|
275
|
-
gross revenue (for legal entities) or gross annual income (for
|
|
276
|
-
natural persons) for each calendar year during which any prohibited
|
|
277
|
-
use occurred. The ten-percent figure is calculated on the full
|
|
278
|
-
calendar year's gross revenue or gross annual income and is NOT
|
|
279
|
-
prorated: any prohibited use lasting for any length of time within a
|
|
280
|
-
given calendar year - including a single day, a single hour, or a
|
|
281
|
-
single instance of execution - triggers the compensation obligation
|
|
282
|
-
for that entire calendar year in full. The amount of compensation
|
|
283
|
-
payable under this paragraph 4 is calculated per "Accrual Period"
|
|
284
|
-
and, within a single Accrual Period, shall not exceed the product
|
|
285
|
-
of (i) one million United States dollars (USD 1,000,000) and
|
|
286
|
-
(ii) the number of calendar days (UTC) within that Accrual Period
|
|
287
|
-
on which any prohibited use of the Software occurred, provided
|
|
288
|
-
that the number of such days counted for this cap within a single
|
|
289
|
-
Accrual Period shall not exceed three hundred and sixty-five (365).
|
|
290
|
-
Any prohibited use during a calendar day (UTC), regardless of its
|
|
291
|
-
duration within that day, counts as one (1) full day. An
|
|
292
|
-
"Accrual Period" is a period of twelve (12) consecutive months,
|
|
293
|
-
the first of which begins on the date of the first prohibited use
|
|
294
|
-
of the Software by the violator (the "Accrual Date"); each
|
|
295
|
-
subsequent Accrual Period begins immediately upon the expiry of
|
|
296
|
-
the preceding one. A separate compensation, calculated
|
|
297
|
-
independently on the same basis, accrues for each Accrual Period
|
|
298
|
-
during which any prohibited use occurs, and there is no aggregate
|
|
299
|
-
ceiling on compensation across Accrual Periods.
|
|
300
|
-
|
|
301
|
-
(a) This obligation applies regardless of whether the violator knew
|
|
302
|
-
or should have known about the restrictions set forth in this
|
|
303
|
-
clause; lack of knowledge, lack of notice, good faith, mistake,
|
|
304
|
-
or reliance on a third party does NOT excuse the obligation or
|
|
305
|
-
reduce the amount owed.
|
|
306
|
-
|
|
307
|
-
(b) The ten percent (10%) figure is a contractually agreed minimum.
|
|
308
|
-
The Author reserves the right to claim any greater amount of
|
|
309
|
-
actual damages, disgorgement of profits, statutory damages,
|
|
310
|
-
injunctive relief, attorneys' fees, and any other remedy
|
|
311
|
-
available under applicable law, cumulatively and not
|
|
312
|
-
alternatively.
|
|
313
|
-
|
|
314
|
-
(c) "Gross revenue" and "gross annual income" mean the total amount
|
|
315
|
-
received from all sources before any deductions, taxes, costs,
|
|
316
|
-
or expenses, as reported in the violator's audited financial
|
|
317
|
-
statements, tax filings, or, in their absence, any other
|
|
318
|
-
reasonable evidence of income. The violator bears the burden of
|
|
319
|
-
proving a lower figure by clear and convincing evidence.
|
|
320
|
-
|
|
321
|
-
(d) Compensation is due within thirty (30) days of the Author's
|
|
322
|
-
written demand. Overdue amounts accrue default interest at the
|
|
323
|
-
maximum rate permitted by applicable law. Use of the Software
|
|
324
|
-
after the demand without full payment constitutes a continuing
|
|
325
|
-
and separate violation for each calendar year.
|
|
326
|
-
|
|
327
|
-
(e) This obligation is independent of, and survives, the termination
|
|
328
|
-
of rights under paragraph 3 and any cessation of use of the
|
|
329
|
-
Software by the violator.
|
|
330
|
-
|
|
331
|
-
5. This clause is an integral and non-severable part of this License.
|
|
332
|
-
If any part of this clause is held to be unenforceable in a given
|
|
333
|
-
jurisdiction, the Author does not grant any license to the Software
|
|
334
|
-
to parties described in paragraphs 1(a)–(c) in that jurisdiction
|
|
335
|
-
under any other terms.
|
|
336
|
-
|
|
337
|
-
6. This clause does not restrict, and shall not be interpreted to
|
|
270
|
+
4. This clause does not restrict, and shall not be interpreted to
|
|
338
271
|
restrict, legitimate academic research, journalism, education,
|
|
339
272
|
historical documentation, or human-rights advocacy that critically
|
|
340
273
|
examines the ideologies and actions described above, provided such
|
|
341
274
|
use does not promote, endorse, or materially support them.
|
|
342
275
|
|
|
343
|
-
|
|
276
|
+
5. GOVERNING LAW, FORUM AND JURISDICTION. Any dispute, claim,
|
|
344
277
|
controversy or cause of action arising out of or relating to this
|
|
345
278
|
Addendum, the License, the Software, or any alleged breach of any
|
|
346
|
-
of them
|
|
347
|
-
|
|
348
|
-
the Author (as the claimant / plaintiff), be:
|
|
279
|
+
of them, shall, at the sole and exclusive election of the Author
|
|
280
|
+
(as the claimant / plaintiff), be:
|
|
349
281
|
|
|
350
282
|
(a) governed by and construed in accordance with the substantive
|
|
351
283
|
law of the jurisdiction of the Author's domicile or principal
|
|
@@ -365,7 +297,7 @@
|
|
|
365
297
|
(c) To the maximum extent permitted by applicable mandatory law,
|
|
366
298
|
the violator waives any right to bring or join any such
|
|
367
299
|
dispute in any other forum, and waives any right to trial by
|
|
368
|
-
jury. Nothing in this paragraph
|
|
300
|
+
jury. Nothing in this paragraph 5 limits the Author's right,
|
|
369
301
|
at the Author's sole discretion, to (i) seek injunctive,
|
|
370
302
|
provisional, or conservatory relief (including asset freezes
|
|
371
303
|
and evidence-preservation orders) in any court of competent
|
|
@@ -377,7 +309,7 @@
|
|
|
377
309
|
(d) If mandatory local consumer-protection or procedural law of
|
|
378
310
|
the violator's jurisdiction would otherwise grant the violator
|
|
379
311
|
a non-waivable right to sue or be sued in a different forum,
|
|
380
|
-
this paragraph
|
|
312
|
+
this paragraph 5 shall be read as granting the Author the
|
|
381
313
|
broadest election of forum permitted by such mandatory law,
|
|
382
314
|
and the remainder of this paragraph shall continue in full
|
|
383
315
|
force and effect.
|
|
@@ -422,7 +354,7 @@
|
|
|
422
354
|
инфраструктуру сторонам, описанным в пунктах (а) или (б).
|
|
423
355
|
|
|
424
356
|
Для целей настоящей оговорки (в том числе, без ограничений,
|
|
425
|
-
пунктов 3
|
|
357
|
+
пунктов 3 и 5 и всех их подпунктов) термины «запрещённое
|
|
426
358
|
использование» и «использование в нарушение пункта 1» означают
|
|
427
359
|
любое использование, воспроизведение, изменение, запуск,
|
|
428
360
|
развёртывание, размещение (в том числе в облаке), интеграцию,
|
|
@@ -461,87 +393,7 @@
|
|
|
461
393
|
с момента такого нарушения, без необходимости уведомления со стороны
|
|
462
394
|
Автора.
|
|
463
395
|
|
|
464
|
-
4.
|
|
465
|
-
физическое или юридическое лицо, использующее Программное
|
|
466
|
-
обеспечение, полностью или частично, в нарушение пункта 1 настоящей
|
|
467
|
-
оговорки, в дополнение к автоматическому прекращению прав по пункту
|
|
468
|
-
3, обязано выплатить Автору денежную компенсацию в размере не менее
|
|
469
|
-
десяти процентов (10%) от валовой выручки (для юридических лиц)
|
|
470
|
-
или валового годового дохода (для физических лиц) за каждый
|
|
471
|
-
календарный год, в течение которого имело место любое запрещённое
|
|
472
|
-
использование. Указанные десять процентов исчисляются от валовой
|
|
473
|
-
выручки или валового годового дохода за полный календарный год и
|
|
474
|
-
НЕ подлежат пропорциональному уменьшению: любое запрещённое
|
|
475
|
-
использование любой продолжительности в пределах соответствующего
|
|
476
|
-
календарного года, в том числе в течение одного дня, одного часа
|
|
477
|
-
или единичного запуска, порождает обязанность по выплате
|
|
478
|
-
компенсации за весь этот календарный год полностью. Размер
|
|
479
|
-
компенсации, подлежащей выплате по настоящему пункту 4,
|
|
480
|
-
исчисляется отдельно за каждый «Период начисления» и в пределах
|
|
481
|
-
одного Периода начисления не может превышать произведения
|
|
482
|
-
(i) одного миллиона долларов США (1 000 000 долл. США) и
|
|
483
|
-
(ii) количества календарных дней (по UTC) в пределах такого
|
|
484
|
-
Периода начисления, в течение которых имело место любое
|
|
485
|
-
запрещённое использование Программного обеспечения, при этом
|
|
486
|
-
количество таких дней, учитываемых для целей настоящего
|
|
487
|
-
ограничения в рамках одного Периода начисления, не может
|
|
488
|
-
превышать трёхсот шестидесяти пяти (365). Любое запрещённое
|
|
489
|
-
использование в течение календарного дня (по UTC), независимо от
|
|
490
|
-
его продолжительности в пределах такого дня, считается одним (1)
|
|
491
|
-
полным днём. «Период начисления» — это период из двенадцати (12)
|
|
492
|
-
следующих подряд месяцев; первый такой период начинается в дату
|
|
493
|
-
первого запрещённого использования Программного обеспечения
|
|
494
|
-
нарушителем («Дата начала начисления»), каждый последующий Период
|
|
495
|
-
начисления начинается непосредственно по истечении предыдущего.
|
|
496
|
-
За каждый Период начисления, в течение которого имело место любое
|
|
497
|
-
запрещённое использование, начисляется самостоятельная
|
|
498
|
-
компенсация, рассчитываемая независимо по тем же правилам; при
|
|
499
|
-
этом какое-либо совокупное верхнее ограничение компенсации по
|
|
500
|
-
всем Периодам начисления не применяется.
|
|
501
|
-
|
|
502
|
-
(а) Настоящая обязанность возникает независимо от того, знал или
|
|
503
|
-
должен был знать нарушитель об ограничениях, установленных
|
|
504
|
-
настоящей оговоркой. Отсутствие осведомлённости, отсутствие
|
|
505
|
-
уведомления, добросовестность, заблуждение или ссылка на
|
|
506
|
-
действия третьих лиц НЕ освобождают от обязанности и не
|
|
507
|
-
уменьшают размер подлежащей выплате суммы.
|
|
508
|
-
|
|
509
|
-
(б) Десять процентов (10%) представляют собой договорно согласованный
|
|
510
|
-
минимум. Автор сохраняет право требовать любую большую сумму
|
|
511
|
-
фактических убытков, возврат полученной прибыли, законную
|
|
512
|
-
неустойку, судебный запрет, возмещение судебных расходов и
|
|
513
|
-
гонораров представителей, а также любые иные средства правовой
|
|
514
|
-
защиты, предусмотренные применимым правом, кумулятивно, а не
|
|
515
|
-
альтернативно.
|
|
516
|
-
|
|
517
|
-
(в) Под «валовой выручкой» и «валовым годовым доходом» понимается
|
|
518
|
-
общая сумма поступлений из всех источников до вычета каких-либо
|
|
519
|
-
налогов, затрат или расходов, отражённая в аудированной
|
|
520
|
-
финансовой отчётности нарушителя, налоговых декларациях, а в
|
|
521
|
-
их отсутствие — в любых иных разумных доказательствах дохода.
|
|
522
|
-
Бремя доказывания меньшей суммы лежит на нарушителе и требует
|
|
523
|
-
ясных и убедительных доказательств.
|
|
524
|
-
|
|
525
|
-
(г) Компенсация подлежит выплате в течение тридцати (30) дней с
|
|
526
|
-
момента письменного требования Автора. На просроченные суммы
|
|
527
|
-
начисляются проценты по максимальной ставке, допускаемой
|
|
528
|
-
применимым правом. Использование Программного обеспечения
|
|
529
|
-
после такого требования без полной оплаты образует длящееся
|
|
530
|
-
и отдельное нарушение за каждый календарный год.
|
|
531
|
-
|
|
532
|
-
(д) Настоящая обязанность является самостоятельной, сохраняется
|
|
533
|
-
после прекращения прав по пункту 3 и не прекращается в
|
|
534
|
-
результате фактического прекращения использования Программного
|
|
535
|
-
обеспечения нарушителем.
|
|
536
|
-
|
|
537
|
-
5. Настоящая оговорка является неотъемлемой и неделимой частью
|
|
538
|
-
Лицензии. Если какая-либо её часть будет признана не подлежащей
|
|
539
|
-
принудительному исполнению в отдельной юрисдикции, Автор не
|
|
540
|
-
предоставляет лицам, указанным в пунктах 1(а)–(в), никакой лицензии
|
|
541
|
-
на Программное обеспечение в этой юрисдикции ни на каких иных
|
|
542
|
-
условиях.
|
|
543
|
-
|
|
544
|
-
6. Настоящая оговорка не ограничивает и не должна толковаться как
|
|
396
|
+
4. Настоящая оговорка не ограничивает и не должна толковаться как
|
|
545
397
|
ограничивающая добросовестные академические исследования,
|
|
546
398
|
журналистику, образовательную деятельность, историческую
|
|
547
399
|
документацию и правозащитную деятельность, критически изучающую
|
|
@@ -549,11 +401,10 @@
|
|
|
549
401
|
деятельность не продвигает, не поддерживает и не обеспечивает их
|
|
550
402
|
материально.
|
|
551
403
|
|
|
552
|
-
|
|
404
|
+
5. ПРИМЕНИМОЕ ПРАВО, ПОДСУДНОСТЬ И ВЫБОР СУДА. Любой спор, требование,
|
|
553
405
|
разногласие или основание иска, возникающие из настоящей
|
|
554
406
|
Оговорки, Лицензии, Программного обеспечения или связанные с ними,
|
|
555
|
-
либо из их предполагаемого
|
|
556
|
-
любые требования о компенсации по пункту 4), по единоличному и
|
|
407
|
+
либо из их предполагаемого нарушения, по единоличному и
|
|
557
408
|
исключительному выбору Автора (как истца / заявителя):
|
|
558
409
|
|
|
559
410
|
(а) регулируются и подлежат толкованию по материальному праву
|
|
@@ -575,7 +426,7 @@
|
|
|
575
426
|
(в) В максимально допустимых применимым императивным правом
|
|
576
427
|
пределах нарушитель отказывается от права инициировать или
|
|
577
428
|
присоединяться к такому спору в любом ином суде, а также от
|
|
578
|
-
права на суд присяжных. Ничто в настоящем пункте
|
|
429
|
+
права на суд присяжных. Ничто в настоящем пункте 5 не
|
|
579
430
|
ограничивает права Автора по единоличному усмотрению
|
|
580
431
|
(i) требовать обеспечительных, предварительных или
|
|
581
432
|
временных мер (в том числе ареста активов и обеспечения
|
|
@@ -589,7 +440,7 @@
|
|
|
589
440
|
потребителей или процессуального законодательства
|
|
590
441
|
юрисдикции нарушителя предоставляют нарушителю не
|
|
591
442
|
подлежащее отказу право предъявлять иск или быть ответчиком
|
|
592
|
-
в ином суде, настоящий пункт
|
|
443
|
+
в ином суде, настоящий пункт 5 толкуется как
|
|
593
444
|
предоставляющий Автору наиболее широкий выбор суда,
|
|
594
445
|
допускаемый такими императивными нормами, а в остальной
|
|
595
446
|
части сохраняет полную юридическую силу.
|
package/README.md
CHANGED
|
@@ -91,10 +91,10 @@ from its own chunk, so a granular import already brings everything it needs.
|
|
|
91
91
|
<!-- entry-sizes:generated:start lang=en -->
|
|
92
92
|
| What you import | gzip | of the barrel |
|
|
93
93
|
| --- | ---: | ---: |
|
|
94
|
-
| the whole package from the root |
|
|
94
|
+
| the whole package from the root | 580.9 kB | 100 % |
|
|
95
95
|
| the lightest component — `GrButtonGroup` | 1.8 kB | < 1 % |
|
|
96
|
-
| the median component — `
|
|
97
|
-
| the 5 heaviest together | 171.
|
|
96
|
+
| the median component — `GrNavbar` | 15.4 kB | 3 % |
|
|
97
|
+
| the 5 heaviest together | 171.9 kB | 30 % |
|
|
98
98
|
|
|
99
99
|
These numbers **do not add up**: shared code is counted again in every row but paid for once, which is why
|
|
100
100
|
the set is shown as a union rather than a sum. They are an upper bound — the gzip of everything a subpath
|
|
@@ -114,14 +114,14 @@ on this one — the core stays lean, and you install only what you reach for.
|
|
|
114
114
|
| --- | --- | --- |
|
|
115
115
|
| [`@feugene/granularity-charts`](../granularity-charts) | 0.11.0 | Charts — own SVG, zero dependencies, drawn with theme tokens. |
|
|
116
116
|
| [`@feugene/granularity-chrono`](../granularity-chrono) | 0.10.0 | Calendar, date and time components — no third-party date widget, no date library. |
|
|
117
|
-
| [`@feugene/granularity-code`](../granularity-code) | 0.
|
|
117
|
+
| [`@feugene/granularity-code`](../granularity-code) | 0.2.0 | Code surfaces: view, edit and diff — the viewer and the diff carry no dependencies at all. |
|
|
118
118
|
| [`@feugene/granularity-dashboard`](../granularity-dashboard) | 0.6.0 | Widget grid — drag, resize, breakpoints and layout persistence, zero dependencies. |
|
|
119
119
|
| [`@feugene/granularity-datasource`](../granularity-datasource) | 0.1.2 | List state: sorting, filters, paging, URL sync and race-free fetching behind one composable. |
|
|
120
120
|
| [`@feugene/granularity-devtools`](../granularity-devtools) | 0.3.2 | Vue DevTools panel — where a prop value came from, the overlay layer stack and design-system warnings. |
|
|
121
121
|
| [`@feugene/granularity-editor`](../granularity-editor) | 0.3.1 | Rich-text editing: a TipTap-backed GrRichText field with a design-system toolbar. |
|
|
122
122
|
| [`@feugene/granularity-forms-schema`](../granularity-forms-schema) | 0.4.0 | Schema-driven forms — zod and JSON Schema into real form fields, zero dependencies. |
|
|
123
123
|
| [`@feugene/granularity-media`](../granularity-media) | 0.7.1 | Media components: image cropping, camera capture, code scanning and video playback. |
|
|
124
|
-
| [`@feugene/granularity-test-kit`](../granularity-test-kit) | 0.
|
|
124
|
+
| [`@feugene/granularity-test-kit`](../granularity-test-kit) | 0.10.0 | Test gates for @feugene/granularity design-system packages — token, registry and defaults contracts as reusable factories. |
|
|
125
125
|
| [`@feugene/unplugin-granularity`](../unplugin-granularity) | 0.7.1 | unplugin-vue-components resolver — granular auto-import for components and directives. |
|
|
126
126
|
<!-- ecosystem:generated:end -->
|
|
127
127
|
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { n as splitClassTokens } from "./classTokens-8v2XC74x.js";
|
|
2
|
+
import { t as GR_TONES } from "./tones-CRJAaYyg.js";
|
|
3
|
+
import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
|
|
4
|
+
//#region src/components/GrCarousel/grCarouselStyles.ts
|
|
5
|
+
/**
|
|
6
|
+
* Тон текущего переключателя. Своей шкалы компонент не заводит: она одна на
|
|
7
|
+
* пакет, и хук `--gr-carousel-dot-active` перебивает её точечно.
|
|
8
|
+
*/
|
|
9
|
+
var dotToneVars = {
|
|
10
|
+
primary: "var(--gr-carousel-dot-active,var(--gr-primary))",
|
|
11
|
+
neutral: "var(--gr-carousel-dot-active,var(--gr-secondary))",
|
|
12
|
+
success: "var(--gr-carousel-dot-active,var(--gr-success))",
|
|
13
|
+
warning: "var(--gr-carousel-dot-active,var(--gr-warning))",
|
|
14
|
+
danger: "var(--gr-carousel-dot-active,var(--gr-danger))",
|
|
15
|
+
info: "var(--gr-carousel-dot-active,var(--gr-info))",
|
|
16
|
+
slate: "var(--gr-carousel-dot-active,var(--gr-slate))",
|
|
17
|
+
azure: "var(--gr-carousel-dot-active,var(--gr-azure))"
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Текущая точка: заливка **и** обвод вокруг неё.
|
|
21
|
+
*
|
|
22
|
+
* Одной заливки мало: при диаметре в 8 пикселей текущая точка отличалась от
|
|
23
|
+
* соседних только оттенком, а на тон вроде `slate` разница почти пропадала. Обвод
|
|
24
|
+
* добавляет второй признак — форму, — и работает там, где цвет не различают.
|
|
25
|
+
*
|
|
26
|
+
* `outline`, а не `ring`: он рисуется вне потока и не требует цвета подложки под
|
|
27
|
+
* зазор, тогда как `ring-offset` пришлось бы красить в фон страницы, которого
|
|
28
|
+
* компонент не знает.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* Скобки приносит хелпер, а не литерал.
|
|
32
|
+
*
|
|
33
|
+
* Гейт safelist читает класс-литералы `.ts`-хелперов статически, и запись вида
|
|
34
|
+
* `` `bg-[${color}]` `` он видит как класс, которого в safelist нет. Приём взят
|
|
35
|
+
* у `GrProgressBar`: в литерале скобок не остаётся вовсе.
|
|
36
|
+
*/
|
|
37
|
+
function arbitrary(value) {
|
|
38
|
+
return `[${value}]`;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Текущая точка: заливка **и** обвод вокруг неё.
|
|
42
|
+
*
|
|
43
|
+
* Одной заливки мало: при диаметре в 8 пикселей текущая точка отличалась от
|
|
44
|
+
* соседних только оттенком, а на приглушённом тоне разница почти пропадала.
|
|
45
|
+
* Обвод добавляет второй признак — форму, — и работает там, где цвет не
|
|
46
|
+
* различают.
|
|
47
|
+
*
|
|
48
|
+
* `outline`, а не `ring`: он рисуется вне потока и не требует цвета подложки под
|
|
49
|
+
* зазор, тогда как `ring-offset` пришлось бы красить в фон страницы, которого
|
|
50
|
+
* компонент не знает.
|
|
51
|
+
*/
|
|
52
|
+
function grCarouselDotActiveClass(tone) {
|
|
53
|
+
const color = dotToneVars[tone];
|
|
54
|
+
return [
|
|
55
|
+
`bg-${arbitrary(color)}`,
|
|
56
|
+
arbitrary(`outline:var(--gr-carousel-dot-ring-width,2px)_solid_${color}`),
|
|
57
|
+
arbitrary("outline-offset:var(--gr-carousel-dot-ring-offset,2px)")
|
|
58
|
+
].join(" ");
|
|
59
|
+
}
|
|
60
|
+
function grCarouselThumbActiveClass(tone) {
|
|
61
|
+
return `border-${arbitrary(dotToneVars[tone])}`;
|
|
62
|
+
}
|
|
63
|
+
var carouselRootBase = "relative w-full";
|
|
64
|
+
var carouselViewportBase = "relative w-full overflow-hidden";
|
|
65
|
+
/**
|
|
66
|
+
* Вертикальная прокрутка страницы остаётся браузеру, горизонталь забирает лента.
|
|
67
|
+
* `select-none` — против выделения текста слайда протяжкой.
|
|
68
|
+
*/
|
|
69
|
+
var carouselViewportSwipeClass = "[touch-action:pan-y] select-none";
|
|
70
|
+
var carouselTrackBase = "flex w-full will-change-transform transition-transform duration-[var(--gr-duration-base)] ease-[var(--gr-ease-out)]";
|
|
71
|
+
var carouselSlideBase = "w-full min-w-0 shrink-0 grow-0 basis-full";
|
|
72
|
+
/**
|
|
73
|
+
* Стрелки лежат поверх произвольного содержимого, поэтому несут собственную
|
|
74
|
+
* подложку: на светлом кадре иконка без неё пропадает. `z-10` — порядок внутри
|
|
75
|
+
* собственного stacking-контекста компонента, а не слой страницы.
|
|
76
|
+
*/
|
|
77
|
+
var carouselControlBase = "absolute top-1/2 z-10 inline-flex h-9 w-9 -translate-y-1/2 items-center justify-center rounded-[var(--gr-radius-full)] border border-[var(--gr-brd)] bg-[var(--gr-carousel-control-bg,var(--gr-bg))] text-[var(--gr-carousel-control-fg,var(--gr-fg))] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]";
|
|
78
|
+
var carouselControlPositions = {
|
|
79
|
+
prev: "start-2",
|
|
80
|
+
next: "end-2"
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Стрелка на краю без `loop` гасится фоном, а не `opacity`: прозрачность
|
|
84
|
+
* разбавляет выверенные на AA токены текста и роняет контраст.
|
|
85
|
+
*/
|
|
86
|
+
var carouselControlStates = {
|
|
87
|
+
idle: "hover:bg-[var(--gr-carousel-control-bg-hover,var(--gr-muted))]",
|
|
88
|
+
disabled: "cursor-not-allowed bg-[var(--gr-muted)] text-[var(--gr-disabled-fg)]"
|
|
89
|
+
};
|
|
90
|
+
/** Тумблер автопрокрутки: тот же хром, что у стрелок, но в углу ленты. */
|
|
91
|
+
var carouselToggleClass = "absolute end-2 top-2 z-10 inline-flex h-8 w-8 items-center justify-center rounded-[var(--gr-radius-full)] border border-[var(--gr-brd)] bg-[var(--gr-carousel-control-bg,var(--gr-bg))] text-[var(--gr-carousel-control-fg,var(--gr-fg))] transition-colors hover:bg-[var(--gr-carousel-control-bg-hover,var(--gr-muted))] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]";
|
|
92
|
+
var carouselIconClass = "h-4 w-4 shrink-0";
|
|
93
|
+
/**
|
|
94
|
+
* Полоса переключателей прокручивается, а не переносится: перенос увёл бы
|
|
95
|
+
* миниатюры под соседний блок. Своей остановки `Tab` у неё нет — её дети
|
|
96
|
+
* фокусируемы, и вторая остановка была бы лишней (приём `GrTabs`).
|
|
97
|
+
*/
|
|
98
|
+
var carouselIndicatorsBase = "flex max-w-full items-center overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden";
|
|
99
|
+
var carouselIndicatorsVariants = {
|
|
100
|
+
dots: "justify-center gap-[var(--gr-carousel-gap,0.5rem)] px-1 pt-3.5 pb-1.5",
|
|
101
|
+
thumbnails: "gap-[var(--gr-carousel-gap,0.5rem)] pt-3",
|
|
102
|
+
none: ""
|
|
103
|
+
};
|
|
104
|
+
var carouselIndicatorBase = "shrink-0 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]";
|
|
105
|
+
var carouselDotBase = "rounded-[var(--gr-radius-full)] h-[var(--gr-carousel-dot-size,0.5rem)] w-[var(--gr-carousel-dot-size,0.5rem)]";
|
|
106
|
+
var carouselDotStates = { idle: "bg-[var(--gr-carousel-dot,var(--gr-brd))] hover:bg-[var(--gr-muted-fg)]" };
|
|
107
|
+
var carouselThumbBase = "overflow-hidden rounded-[var(--gr-radius-md)] border-2 w-[var(--gr-carousel-thumb-width,4rem)] h-[var(--gr-carousel-thumb-height,2.5rem)]";
|
|
108
|
+
var carouselThumbStates = { idle: "border-[var(--gr-brd)] hover:border-[var(--gr-muted-fg)]" };
|
|
109
|
+
var carouselThumbImageClass = "h-full w-full object-cover";
|
|
110
|
+
/** Миниатюры не дали — плитка держит ритм полосы номером слайда. */
|
|
111
|
+
var carouselThumbFallbackClass = "flex h-full w-full items-center justify-center bg-[var(--gr-muted)] text-[var(--gr-muted-fg)] text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]";
|
|
112
|
+
function grCarouselControlClass(direction, disabled) {
|
|
113
|
+
return [
|
|
114
|
+
carouselControlBase,
|
|
115
|
+
carouselControlPositions[direction],
|
|
116
|
+
disabled ? carouselControlStates.disabled : carouselControlStates.idle
|
|
117
|
+
].join(" ");
|
|
118
|
+
}
|
|
119
|
+
function grCarouselIndicatorsClass(variant) {
|
|
120
|
+
return [carouselIndicatorsBase, carouselIndicatorsVariants[variant]].filter(Boolean).join(" ");
|
|
121
|
+
}
|
|
122
|
+
function grCarouselIndicatorClass(variant, active, tone = "primary") {
|
|
123
|
+
if (variant === "thumbnails") return [
|
|
124
|
+
carouselIndicatorBase,
|
|
125
|
+
carouselThumbBase,
|
|
126
|
+
active ? grCarouselThumbActiveClass(tone) : carouselThumbStates.idle
|
|
127
|
+
].join(" ");
|
|
128
|
+
return [
|
|
129
|
+
carouselIndicatorBase,
|
|
130
|
+
carouselDotBase,
|
|
131
|
+
active ? grCarouselDotActiveClass(tone) : carouselDotStates.idle
|
|
132
|
+
].join(" ");
|
|
133
|
+
}
|
|
134
|
+
//#endregion
|
|
135
|
+
//#region src/components/GrCarousel/safelist.ts
|
|
136
|
+
var grCarouselSafelist = [.../* @__PURE__ */ new Set([
|
|
137
|
+
...GR_TONES.flatMap((tone) => splitClassTokens(grCarouselDotActiveClass(tone))),
|
|
138
|
+
...GR_TONES.flatMap((tone) => splitClassTokens(grCarouselThumbActiveClass(tone))),
|
|
139
|
+
...Object.values(carouselControlPositions).flatMap(splitClassTokens),
|
|
140
|
+
...Object.values(carouselControlStates).flatMap(splitClassTokens),
|
|
141
|
+
...Object.values(carouselIndicatorsVariants).flatMap(splitClassTokens),
|
|
142
|
+
...Object.values(carouselDotStates).flatMap(splitClassTokens),
|
|
143
|
+
...Object.values(carouselThumbStates).flatMap(splitClassTokens),
|
|
144
|
+
...splitClassTokens(carouselRootBase),
|
|
145
|
+
...splitClassTokens(carouselViewportBase),
|
|
146
|
+
...splitClassTokens(carouselViewportSwipeClass),
|
|
147
|
+
...splitClassTokens(carouselTrackBase),
|
|
148
|
+
...splitClassTokens(carouselSlideBase),
|
|
149
|
+
...splitClassTokens(carouselControlBase),
|
|
150
|
+
...splitClassTokens(carouselToggleClass),
|
|
151
|
+
...splitClassTokens(carouselIconClass),
|
|
152
|
+
...splitClassTokens(carouselIndicatorsBase),
|
|
153
|
+
...splitClassTokens(carouselIndicatorBase),
|
|
154
|
+
...splitClassTokens(carouselDotBase),
|
|
155
|
+
...splitClassTokens(carouselThumbBase),
|
|
156
|
+
...splitClassTokens(carouselThumbImageClass),
|
|
157
|
+
...splitClassTokens(carouselThumbFallbackClass)
|
|
158
|
+
])];
|
|
159
|
+
//#endregion
|
|
160
|
+
//#region src/components/GrCarousel/config.ts
|
|
161
|
+
/**
|
|
162
|
+
* `dependencies` пуст намеренно: стрелки и тумблер — обычные `<button>`, а не
|
|
163
|
+
* `GrButton`. Тот связывает `disabled` с нативным атрибутом, а стрелка на краю
|
|
164
|
+
* без `loop` обязана остаться фокусируемой (`aria-disabled`), иначе фокус
|
|
165
|
+
* падает в `<body>` ровно в момент, когда пользователь долистал до конца.
|
|
166
|
+
*/
|
|
167
|
+
var grCarouselConfig = defineGranularComponent(import.meta.url, {
|
|
168
|
+
name: "GrCarousel",
|
|
169
|
+
safelist: grCarouselSafelist
|
|
170
|
+
});
|
|
171
|
+
//#endregion
|
|
172
|
+
export { carouselSlideBase as a, carouselToggleClass as c, carouselViewportSwipeClass as d, grCarouselControlClass as f, carouselRootBase as i, carouselTrackBase as l, grCarouselIndicatorsClass as m, grCarouselSafelist as n, carouselThumbFallbackClass as o, grCarouselIndicatorClass as p, carouselIconClass as r, carouselThumbImageClass as s, grCarouselConfig as t, carouselViewportBase as u };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-BXRmsn3t.js","names":[],"sources":["../../src/components/GrCarousel/grCarouselStyles.ts","../../src/components/GrCarousel/safelist.ts","../../src/components/GrCarousel/config.ts"],"sourcesContent":["import type { GrTone } from '../shared/tones'\n\n/**\n * Вид переключателя слайдов. `none` меняет не только внешность, но и роль самих\n * слайдов: без переключателя `tabpanel` не к чему привязать — см. `GrCarousel.vue`.\n */\nexport const GR_CAROUSEL_INDICATORS = ['dots', 'thumbnails', 'none'] as const\nexport type GrCarouselIndicators = typeof GR_CAROUSEL_INDICATORS[number]\n\n/**\n * Тон текущего переключателя. Своей шкалы компонент не заводит: она одна на\n * пакет, и хук `--gr-carousel-dot-active` перебивает её точечно.\n */\nconst dotToneVars: Record<GrTone, string> = {\n primary: 'var(--gr-carousel-dot-active,var(--gr-primary))',\n neutral: 'var(--gr-carousel-dot-active,var(--gr-secondary))',\n success: 'var(--gr-carousel-dot-active,var(--gr-success))',\n warning: 'var(--gr-carousel-dot-active,var(--gr-warning))',\n danger: 'var(--gr-carousel-dot-active,var(--gr-danger))',\n info: 'var(--gr-carousel-dot-active,var(--gr-info))',\n slate: 'var(--gr-carousel-dot-active,var(--gr-slate))',\n azure: 'var(--gr-carousel-dot-active,var(--gr-azure))',\n}\n\n/**\n * Текущая точка: заливка **и** обвод вокруг неё.\n *\n * Одной заливки мало: при диаметре в 8 пикселей текущая точка отличалась от\n * соседних только оттенком, а на тон вроде `slate` разница почти пропадала. Обвод\n * добавляет второй признак — форму, — и работает там, где цвет не различают.\n *\n * `outline`, а не `ring`: он рисуется вне потока и не требует цвета подложки под\n * зазор, тогда как `ring-offset` пришлось бы красить в фон страницы, которого\n * компонент не знает.\n */\n/**\n * Скобки приносит хелпер, а не литерал.\n *\n * Гейт safelist читает класс-литералы `.ts`-хелперов статически, и запись вида\n * `` `bg-[${color}]` `` он видит как класс, которого в safelist нет. Приём взят\n * у `GrProgressBar`: в литерале скобок не остаётся вовсе.\n */\nfunction arbitrary(value: string): string {\n return `[${value}]`\n}\n\n/**\n * Текущая точка: заливка **и** обвод вокруг неё.\n *\n * Одной заливки мало: при диаметре в 8 пикселей текущая точка отличалась от\n * соседних только оттенком, а на приглушённом тоне разница почти пропадала.\n * Обвод добавляет второй признак — форму, — и работает там, где цвет не\n * различают.\n *\n * `outline`, а не `ring`: он рисуется вне потока и не требует цвета подложки под\n * зазор, тогда как `ring-offset` пришлось бы красить в фон страницы, которого\n * компонент не знает.\n */\nexport function grCarouselDotActiveClass(tone: GrTone): string {\n const color = dotToneVars[tone]\n\n return [\n `bg-${arbitrary(color)}`,\n arbitrary(`outline:var(--gr-carousel-dot-ring-width,2px)_solid_${color}`),\n arbitrary('outline-offset:var(--gr-carousel-dot-ring-offset,2px)'),\n ].join(' ')\n}\n\nexport function grCarouselThumbActiveClass(tone: GrTone): string {\n return `border-${arbitrary(dotToneVars[tone])}`\n}\n\n/** `automatic` — стрелка по индикаторам сразу листает; `manual` — только двигает фокус. */\nexport const GR_CAROUSEL_ACTIVATION_MODES = ['automatic', 'manual'] as const\nexport type GrCarouselActivationMode = typeof GR_CAROUSEL_ACTIVATION_MODES[number]\n\nexport const carouselRootBase = 'relative w-full'\n\nexport const carouselViewportBase = 'relative w-full overflow-hidden'\n\n/**\n * Вертикальная прокрутка страницы остаётся браузеру, горизонталь забирает лента.\n * `select-none` — против выделения текста слайда протяжкой.\n */\nexport const carouselViewportSwipeClass = '[touch-action:pan-y] select-none'\n\nexport const carouselTrackBase = 'flex w-full will-change-transform transition-transform duration-[var(--gr-duration-base)] ease-[var(--gr-ease-out)]'\n\nexport const carouselSlideBase = 'w-full min-w-0 shrink-0 grow-0 basis-full'\n\n/**\n * Стрелки лежат поверх произвольного содержимого, поэтому несут собственную\n * подложку: на светлом кадре иконка без неё пропадает. `z-10` — порядок внутри\n * собственного stacking-контекста компонента, а не слой страницы.\n */\nexport const carouselControlBase = 'absolute top-1/2 z-10 inline-flex h-9 w-9 -translate-y-1/2 items-center justify-center rounded-[var(--gr-radius-full)] border border-[var(--gr-brd)] bg-[var(--gr-carousel-control-bg,var(--gr-bg))] text-[var(--gr-carousel-control-fg,var(--gr-fg))] transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\nexport const carouselControlPositions = {\n prev: 'start-2',\n next: 'end-2',\n} as const\n\n/**\n * Стрелка на краю без `loop` гасится фоном, а не `opacity`: прозрачность\n * разбавляет выверенные на AA токены текста и роняет контраст.\n */\nexport const carouselControlStates = {\n idle: 'hover:bg-[var(--gr-carousel-control-bg-hover,var(--gr-muted))]',\n disabled: 'cursor-not-allowed bg-[var(--gr-muted)] text-[var(--gr-disabled-fg)]',\n} as const\n\n/** Тумблер автопрокрутки: тот же хром, что у стрелок, но в углу ленты. */\nexport const carouselToggleClass = 'absolute end-2 top-2 z-10 inline-flex h-8 w-8 items-center justify-center rounded-[var(--gr-radius-full)] border border-[var(--gr-brd)] bg-[var(--gr-carousel-control-bg,var(--gr-bg))] text-[var(--gr-carousel-control-fg,var(--gr-fg))] transition-colors hover:bg-[var(--gr-carousel-control-bg-hover,var(--gr-muted))] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\nexport const carouselIconClass = 'h-4 w-4 shrink-0'\n\n/**\n * Полоса переключателей прокручивается, а не переносится: перенос увёл бы\n * миниатюры под соседний блок. Своей остановки `Tab` у неё нет — её дети\n * фокусируемы, и вторая остановка была бы лишней (приём `GrTabs`).\n */\nexport const carouselIndicatorsBase = 'flex max-w-full items-center overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden'\n\nexport const carouselIndicatorsVariants = {\n // Поля по вертикали не украшение: полоса — скроллер, а `overflow-x: auto`\n // по спецификации обрезает и по вертикали, и обвод текущей точки срезался бы.\n dots: 'justify-center gap-[var(--gr-carousel-gap,0.5rem)] px-1 pt-3.5 pb-1.5',\n thumbnails: 'gap-[var(--gr-carousel-gap,0.5rem)] pt-3',\n none: '',\n} as const\n\nexport const carouselIndicatorBase = 'shrink-0 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\nexport const carouselDotBase = 'rounded-[var(--gr-radius-full)] h-[var(--gr-carousel-dot-size,0.5rem)] w-[var(--gr-carousel-dot-size,0.5rem)]'\n\nexport const carouselDotStates = {\n idle: 'bg-[var(--gr-carousel-dot,var(--gr-brd))] hover:bg-[var(--gr-muted-fg)]',\n} as const\n\nexport const carouselThumbBase = 'overflow-hidden rounded-[var(--gr-radius-md)] border-2 w-[var(--gr-carousel-thumb-width,4rem)] h-[var(--gr-carousel-thumb-height,2.5rem)]'\n\nexport const carouselThumbStates = {\n idle: 'border-[var(--gr-brd)] hover:border-[var(--gr-muted-fg)]',\n} as const\n\nexport const carouselThumbImageClass = 'h-full w-full object-cover'\n\n/** Миниатюры не дали — плитка держит ритм полосы номером слайда. */\nexport const carouselThumbFallbackClass = 'flex h-full w-full items-center justify-center bg-[var(--gr-muted)] text-[var(--gr-muted-fg)] text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]'\n\nexport function grCarouselControlClass(direction: 'prev' | 'next', disabled: boolean): string {\n return [\n carouselControlBase,\n carouselControlPositions[direction],\n disabled ? carouselControlStates.disabled : carouselControlStates.idle,\n ].join(' ')\n}\n\nexport function grCarouselIndicatorsClass(variant: GrCarouselIndicators): string {\n return [carouselIndicatorsBase, carouselIndicatorsVariants[variant]].filter(Boolean).join(' ')\n}\n\nexport function grCarouselIndicatorClass(\n variant: GrCarouselIndicators,\n active: boolean,\n tone: GrTone = 'primary',\n): string {\n if (variant === 'thumbnails') {\n return [\n carouselIndicatorBase,\n carouselThumbBase,\n active ? grCarouselThumbActiveClass(tone) : carouselThumbStates.idle,\n ].join(' ')\n }\n\n return [\n carouselIndicatorBase,\n carouselDotBase,\n active ? grCarouselDotActiveClass(tone) : carouselDotStates.idle,\n ].join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport { GR_TONES } from '../shared/tones'\nimport {\n carouselControlBase,\n carouselControlPositions,\n carouselControlStates,\n carouselDotBase,\n carouselDotStates,\n carouselIconClass,\n carouselIndicatorBase,\n carouselIndicatorsBase,\n carouselIndicatorsVariants,\n carouselRootBase,\n carouselSlideBase,\n carouselThumbBase,\n carouselThumbFallbackClass,\n carouselThumbImageClass,\n carouselThumbStates,\n carouselToggleClass,\n grCarouselDotActiveClass,\n grCarouselThumbActiveClass,\n carouselTrackBase,\n carouselViewportBase,\n carouselViewportSwipeClass,\n} from './grCarouselStyles'\n\nexport const grCarouselSafelist = [...new Set([\n // Тон приходит пропом, поэтому в скан попадает не он, а вся шкала.\n ...GR_TONES.flatMap(tone => splitClassTokens(grCarouselDotActiveClass(tone))),\n ...GR_TONES.flatMap(tone => splitClassTokens(grCarouselThumbActiveClass(tone))),\n ...Object.values(carouselControlPositions).flatMap(splitClassTokens),\n ...Object.values(carouselControlStates).flatMap(splitClassTokens),\n ...Object.values(carouselIndicatorsVariants).flatMap(splitClassTokens),\n ...Object.values(carouselDotStates).flatMap(splitClassTokens),\n ...Object.values(carouselThumbStates).flatMap(splitClassTokens),\n ...splitClassTokens(carouselRootBase),\n ...splitClassTokens(carouselViewportBase),\n ...splitClassTokens(carouselViewportSwipeClass),\n ...splitClassTokens(carouselTrackBase),\n ...splitClassTokens(carouselSlideBase),\n ...splitClassTokens(carouselControlBase),\n ...splitClassTokens(carouselToggleClass),\n ...splitClassTokens(carouselIconClass),\n ...splitClassTokens(carouselIndicatorsBase),\n ...splitClassTokens(carouselIndicatorBase),\n ...splitClassTokens(carouselDotBase),\n ...splitClassTokens(carouselThumbBase),\n ...splitClassTokens(carouselThumbImageClass),\n ...splitClassTokens(carouselThumbFallbackClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grCarouselSafelist } from './safelist'\n\n/**\n * `dependencies` пуст намеренно: стрелки и тумблер — обычные `<button>`, а не\n * `GrButton`. Тот связывает `disabled` с нативным атрибутом, а стрелка на краю\n * без `loop` обязана остаться фокусируемой (`aria-disabled`), иначе фокус\n * падает в `<body>` ровно в момент, когда пользователь долистал до конца.\n */\nexport const grCarouselConfig = defineGranularComponent(import.meta.url, {\n name: 'GrCarousel',\n safelist: grCarouselSafelist,\n})\n"],"mappings":";;;;;;;;AAaA,IAAM,cAAsC;CAC1C,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;AACT;;;;;;;;;;;;;;;;;;;AAoBA,SAAS,UAAU,OAAuB;CACxC,OAAO,IAAI,MAAM;AACnB;;;;;;;;;;;;;AAcA,SAAgB,yBAAyB,MAAsB;CAC7D,MAAM,QAAQ,YAAY;CAE1B,OAAO;EACL,MAAM,UAAU,KAAK;EACrB,UAAU,uDAAuD,OAAO;EACxE,UAAU,uDAAuD;CACnE,CAAC,CAAC,KAAK,GAAG;AACZ;AAEA,SAAgB,2BAA2B,MAAsB;CAC/D,OAAO,UAAU,UAAU,YAAY,KAAK;AAC9C;AAMA,IAAa,mBAAmB;AAEhC,IAAa,uBAAuB;;;;;AAMpC,IAAa,6BAA6B;AAE1C,IAAa,oBAAoB;AAEjC,IAAa,oBAAoB;;;;;;AAOjC,IAAa,sBAAsB;AAEnC,IAAa,2BAA2B;CACtC,MAAM;CACN,MAAM;AACR;;;;;AAMA,IAAa,wBAAwB;CACnC,MAAM;CACN,UAAU;AACZ;;AAGA,IAAa,sBAAsB;AAEnC,IAAa,oBAAoB;;;;;;AAOjC,IAAa,yBAAyB;AAEtC,IAAa,6BAA6B;CAGxC,MAAM;CACN,YAAY;CACZ,MAAM;AACR;AAEA,IAAa,wBAAwB;AAErC,IAAa,kBAAkB;AAE/B,IAAa,oBAAoB,EAC/B,MAAM,0EACR;AAEA,IAAa,oBAAoB;AAEjC,IAAa,sBAAsB,EACjC,MAAM,2DACR;AAEA,IAAa,0BAA0B;;AAGvC,IAAa,6BAA6B;AAE1C,SAAgB,uBAAuB,WAA4B,UAA2B;CAC5F,OAAO;EACL;EACA,yBAAyB;EACzB,WAAW,sBAAsB,WAAW,sBAAsB;CACpE,CAAC,CAAC,KAAK,GAAG;AACZ;AAEA,SAAgB,0BAA0B,SAAuC;CAC/E,OAAO,CAAC,wBAAwB,2BAA2B,QAAQ,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC/F;AAEA,SAAgB,yBACd,SACA,QACA,OAAe,WACP;CACR,IAAI,YAAY,cACd,OAAO;EACL;EACA;EACA,SAAS,2BAA2B,IAAI,IAAI,oBAAoB;CAClE,CAAC,CAAC,KAAK,GAAG;CAGZ,OAAO;EACL;EACA;EACA,SAAS,yBAAyB,IAAI,IAAI,kBAAkB;CAC9D,CAAC,CAAC,KAAK,GAAG;AACZ;;;AC1JA,IAAa,qBAAqB,CAAC,mBAAG,IAAI,IAAI;CAE5C,GAAG,SAAS,SAAQ,SAAQ,iBAAiB,yBAAyB,IAAI,CAAC,CAAC;CAC5E,GAAG,SAAS,SAAQ,SAAQ,iBAAiB,2BAA2B,IAAI,CAAC,CAAC;CAC9E,GAAG,OAAO,OAAO,wBAAwB,CAAC,CAAC,QAAQ,gBAAgB;CACnE,GAAG,OAAO,OAAO,qBAAqB,CAAC,CAAC,QAAQ,gBAAgB;CAChE,GAAG,OAAO,OAAO,0BAA0B,CAAC,CAAC,QAAQ,gBAAgB;CACrE,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,mBAAmB,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,0BAA0B;AAChD,CAAC,CAAC;;;;;;;;;ACvCF,IAAa,mBAAmB,wBAAwB,YAAY,KAAK;CACvE,MAAM;CACN,UAAU;AACZ,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as splitClassTokens } from "./classTokens-8v2XC74x.js";
|
|
2
|
-
import { c as mergedGaps, d as sequenceSeparatorClass, l as mergedKeyClass, n as comboGaps, o as keyBaseClass, s as keySizes, t as comboBaseClass, u as separatorClass } from "./grKbdStyles-
|
|
2
|
+
import { c as mergedGaps, d as sequenceSeparatorClass, l as mergedKeyClass, n as comboGaps, o as keyBaseClass, s as keySizes, t as comboBaseClass, u as separatorClass } from "./grKbdStyles-ByMsX-lQ.js";
|
|
3
3
|
import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
|
|
4
4
|
//#region src/components/GrKbd/safelist.ts
|
|
5
5
|
var grKbdSafelist = [.../* @__PURE__ */ new Set([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-
|
|
1
|
+
{"version":3,"file":"config-Ca8qr8Q3.js","names":[],"sources":["../../src/components/GrKbd/safelist.ts","../../src/components/GrKbd/config.ts"],"sourcesContent":["import { splitClassTokens } from '../shared/classTokens'\nimport {\n comboBaseClass,\n comboGaps,\n keyBaseClass,\n keySizes,\n mergedGaps,\n mergedKeyClass,\n separatorClass,\n sequenceSeparatorClass,\n} from './grKbdStyles'\n\nexport const grKbdSafelist = [...new Set([\n ...splitClassTokens(keyBaseClass),\n ...Object.values(keySizes).flatMap(splitClassTokens),\n ...splitClassTokens(comboBaseClass),\n ...Object.values(comboGaps).flatMap(splitClassTokens),\n ...Object.values(mergedGaps).flatMap(splitClassTokens),\n ...splitClassTokens(mergedKeyClass),\n ...splitClassTokens(separatorClass),\n ...splitClassTokens(sequenceSeparatorClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grKbdSafelist } from './safelist'\n\nexport const grKbdConfig = defineGranularComponent(import.meta.url, {\n name: 'GrKbd',\n safelist: grKbdSafelist,\n})\n"],"mappings":";;;;AAYA,IAAa,gBAAgB,CAAC,mBAAG,IAAI,IAAI;CACvC,GAAG,iBAAiB,YAAY;CAChC,GAAG,OAAO,OAAO,QAAQ,CAAC,CAAC,QAAQ,gBAAgB;CACnD,GAAG,iBAAiB,cAAc;CAClC,GAAG,OAAO,OAAO,SAAS,CAAC,CAAC,QAAQ,gBAAgB;CACpD,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CACrD,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,sBAAsB;AAC5C,CAAC,CAAC;;;ACjBF,IAAa,cAAc,wBAAwB,YAAY,KAAK;CAClE,MAAM;CACN,UAAU;AACZ,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { n as splitClassTokens } from "./classTokens-8v2XC74x.js";
|
|
2
|
+
import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
|
|
3
|
+
//#region src/components/GrAffix/grAffixStyles.ts
|
|
4
|
+
/**
|
|
5
|
+
* Слой — локальное число, а не токен шкалы `--gr-z-*`, и это осознанно.
|
|
6
|
+
* `docs/z-index.md` оставляет шаг между слоями приложению «вклиниться между
|
|
7
|
+
* уровнями — например, свой sticky-хедер под дропдауном»; аффикс это он и есть,
|
|
8
|
+
* так что занимать под него ступень шкалы значило бы забрать оставленное место.
|
|
9
|
+
* К тому же `sticky` с `z-index` заводит свой stacking-контекст — число всё
|
|
10
|
+
* равно локально, и глобального ответа «выше или ниже нижней навигации» у
|
|
11
|
+
* компонента нет: он зависит от приложения. Нужен слой шкалы — приложение
|
|
12
|
+
* ставит `--gr-affix-z: var(--gr-z-navbar)`.
|
|
13
|
+
*
|
|
14
|
+
* `ease-*` обязателен вместе с `duration-*`: без него `presetMini` подставит
|
|
15
|
+
* свою кривую, и движение задавал бы пресет, а не дизайн-система.
|
|
16
|
+
*/
|
|
17
|
+
var affixBaseClass = "z-[var(--gr-affix-z,10)] transition-[box-shadow,background-color] duration-[var(--gr-duration-fast)] ease-[var(--gr-ease-out)]";
|
|
18
|
+
var affixStickyClass = "sticky";
|
|
19
|
+
var affixEdgeClass = {
|
|
20
|
+
top: "top-[var(--gr-affix-offset,0px)]",
|
|
21
|
+
bottom: "bottom-[var(--gr-affix-offset,0px)]"
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Поверхность прилипшей панели.
|
|
25
|
+
*
|
|
26
|
+
* Фон обязателен: без него уезжающее под панель содержимое просвечивает
|
|
27
|
+
* насквозь — тот же дефект, что у `stickyHeader` в `GrTable` и у закреплённых
|
|
28
|
+
* колонок `GrDataTable`. Отделяет панель тень, а не рамка: рамка добавляет
|
|
29
|
+
* высоту и сдвигает раскладку ровно в момент прилипания.
|
|
30
|
+
*
|
|
31
|
+
* Дефолт фона — `--gr-bg`, а не `--gr-card`: аффикс стоит на странице, и
|
|
32
|
+
* содержимое обязано под ним исчезать, а не наезжать на вторую поверхность.
|
|
33
|
+
* Внутри карточки перекрывается строкой `style="--gr-affix-bg: var(--gr-card)"`.
|
|
34
|
+
*
|
|
35
|
+
* Тень направлена от края прилипания, поэтому наборов два. Верхний берёт
|
|
36
|
+
* системный уровень elevation — тема даёт ему свою плотность. У нижнего
|
|
37
|
+
* направление обратное, системного зеркала нет, и он собирается подмесом
|
|
38
|
+
* `--gr-fg`: подмес переворачивается вместе с темой, литеральный `rgba` — нет.
|
|
39
|
+
*/
|
|
40
|
+
var affixSurfaceClass = {
|
|
41
|
+
top: "bg-[var(--gr-affix-bg,var(--gr-bg))] shadow-[var(--gr-affix-shadow,var(--gr-shadow-2))]",
|
|
42
|
+
bottom: "bg-[var(--gr-affix-bg,var(--gr-bg))] shadow-[var(--gr-affix-shadow,0_-8px_24px_-12px_color-mix(in_srgb,var(--gr-fg)_45%,transparent))]"
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Сентинел — зонд положения в потоке: отмечает место, где коробка стояла бы, не
|
|
46
|
+
* будь она липкой. Раскладку не сдвигает, потому что пиксель высоты гасится
|
|
47
|
+
* пикселем отрицательного поля с той стороны, где стоит коробка.
|
|
48
|
+
*
|
|
49
|
+
* Высота именно пиксель, а не ноль: нулевая площадь у цели
|
|
50
|
+
* `IntersectionObserver` — спорный по спецификации угол, и полагаться на него
|
|
51
|
+
* незачем, когда пиксель ничего не стоит.
|
|
52
|
+
*/
|
|
53
|
+
var affixSentinelClass = {
|
|
54
|
+
top: "h-px -mb-px pointer-events-none",
|
|
55
|
+
bottom: "h-px -mt-px pointer-events-none"
|
|
56
|
+
};
|
|
57
|
+
function grAffixRootClass(placement, sticky, surface) {
|
|
58
|
+
return [
|
|
59
|
+
affixBaseClass,
|
|
60
|
+
sticky ? affixStickyClass : "",
|
|
61
|
+
sticky ? affixEdgeClass[placement] : "",
|
|
62
|
+
surface ? affixSurfaceClass[placement] : ""
|
|
63
|
+
].filter(Boolean).join(" ");
|
|
64
|
+
}
|
|
65
|
+
//#endregion
|
|
66
|
+
//#region src/components/GrAffix/safelist.ts
|
|
67
|
+
var grAffixSafelist = [.../* @__PURE__ */ new Set([
|
|
68
|
+
...splitClassTokens(affixBaseClass),
|
|
69
|
+
...splitClassTokens(affixStickyClass),
|
|
70
|
+
...Object.values(affixEdgeClass).flatMap(splitClassTokens),
|
|
71
|
+
...Object.values(affixSurfaceClass).flatMap(splitClassTokens),
|
|
72
|
+
...Object.values(affixSentinelClass).flatMap(splitClassTokens)
|
|
73
|
+
])];
|
|
74
|
+
//#endregion
|
|
75
|
+
//#region src/components/GrAffix/config.ts
|
|
76
|
+
var grAffixConfig = defineGranularComponent(import.meta.url, {
|
|
77
|
+
name: "GrAffix",
|
|
78
|
+
safelist: grAffixSafelist
|
|
79
|
+
});
|
|
80
|
+
//#endregion
|
|
81
|
+
export { grAffixRootClass as i, grAffixSafelist as n, affixSentinelClass as r, grAffixConfig as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-Dg0bSoGw.js","names":[],"sources":["../../src/components/GrAffix/grAffixStyles.ts","../../src/components/GrAffix/safelist.ts","../../src/components/GrAffix/config.ts"],"sourcesContent":["import type { GrAffixPlacement } from './affixState'\n\n/**\n * Слой — локальное число, а не токен шкалы `--gr-z-*`, и это осознанно.\n * `docs/z-index.md` оставляет шаг между слоями приложению «вклиниться между\n * уровнями — например, свой sticky-хедер под дропдауном»; аффикс это он и есть,\n * так что занимать под него ступень шкалы значило бы забрать оставленное место.\n * К тому же `sticky` с `z-index` заводит свой stacking-контекст — число всё\n * равно локально, и глобального ответа «выше или ниже нижней навигации» у\n * компонента нет: он зависит от приложения. Нужен слой шкалы — приложение\n * ставит `--gr-affix-z: var(--gr-z-navbar)`.\n *\n * `ease-*` обязателен вместе с `duration-*`: без него `presetMini` подставит\n * свою кривую, и движение задавал бы пресет, а не дизайн-система.\n */\nexport const affixBaseClass = 'z-[var(--gr-affix-z,10)] transition-[box-shadow,background-color] duration-[var(--gr-duration-fast)] ease-[var(--gr-ease-out)]'\n\nexport const affixStickyClass = 'sticky'\n\nexport const affixEdgeClass: Record<GrAffixPlacement, string> = {\n top: 'top-[var(--gr-affix-offset,0px)]',\n bottom: 'bottom-[var(--gr-affix-offset,0px)]',\n}\n\n/**\n * Поверхность прилипшей панели.\n *\n * Фон обязателен: без него уезжающее под панель содержимое просвечивает\n * насквозь — тот же дефект, что у `stickyHeader` в `GrTable` и у закреплённых\n * колонок `GrDataTable`. Отделяет панель тень, а не рамка: рамка добавляет\n * высоту и сдвигает раскладку ровно в момент прилипания.\n *\n * Дефолт фона — `--gr-bg`, а не `--gr-card`: аффикс стоит на странице, и\n * содержимое обязано под ним исчезать, а не наезжать на вторую поверхность.\n * Внутри карточки перекрывается строкой `style=\"--gr-affix-bg: var(--gr-card)\"`.\n *\n * Тень направлена от края прилипания, поэтому наборов два. Верхний берёт\n * системный уровень elevation — тема даёт ему свою плотность. У нижнего\n * направление обратное, системного зеркала нет, и он собирается подмесом\n * `--gr-fg`: подмес переворачивается вместе с темой, литеральный `rgba` — нет.\n */\nexport const affixSurfaceClass: Record<GrAffixPlacement, string> = {\n top: 'bg-[var(--gr-affix-bg,var(--gr-bg))] shadow-[var(--gr-affix-shadow,var(--gr-shadow-2))]',\n bottom: 'bg-[var(--gr-affix-bg,var(--gr-bg))] shadow-[var(--gr-affix-shadow,0_-8px_24px_-12px_color-mix(in_srgb,var(--gr-fg)_45%,transparent))]',\n}\n\n/**\n * Сентинел — зонд положения в потоке: отмечает место, где коробка стояла бы, не\n * будь она липкой. Раскладку не сдвигает, потому что пиксель высоты гасится\n * пикселем отрицательного поля с той стороны, где стоит коробка.\n *\n * Высота именно пиксель, а не ноль: нулевая площадь у цели\n * `IntersectionObserver` — спорный по спецификации угол, и полагаться на него\n * незачем, когда пиксель ничего не стоит.\n */\nexport const affixSentinelClass: Record<GrAffixPlacement, string> = {\n top: 'h-px -mb-px pointer-events-none',\n bottom: 'h-px -mt-px pointer-events-none',\n}\n\nexport function grAffixRootClass(placement: GrAffixPlacement, sticky: boolean, surface: boolean): string {\n return [\n affixBaseClass,\n sticky ? affixStickyClass : '',\n sticky ? affixEdgeClass[placement] : '',\n surface ? affixSurfaceClass[placement] : '',\n ].filter(Boolean).join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n affixBaseClass,\n affixEdgeClass,\n affixSentinelClass,\n affixStickyClass,\n affixSurfaceClass,\n} from './grAffixStyles'\n\nexport const grAffixSafelist = [...new Set([\n ...splitClassTokens(affixBaseClass),\n ...splitClassTokens(affixStickyClass),\n ...Object.values(affixEdgeClass).flatMap(splitClassTokens),\n ...Object.values(affixSurfaceClass).flatMap(splitClassTokens),\n ...Object.values(affixSentinelClass).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grAffixSafelist } from './safelist'\n\nexport const grAffixConfig = defineGranularComponent(import.meta.url, {\n name: 'GrAffix',\n safelist: grAffixSafelist,\n})\n"],"mappings":";;;;;;;;;;;;;;;;AAeA,IAAa,iBAAiB;AAE9B,IAAa,mBAAmB;AAEhC,IAAa,iBAAmD;CAC9D,KAAK;CACL,QAAQ;AACV;;;;;;;;;;;;;;;;;;AAmBA,IAAa,oBAAsD;CACjE,KAAK;CACL,QAAQ;AACV;;;;;;;;;;AAWA,IAAa,qBAAuD;CAClE,KAAK;CACL,QAAQ;AACV;AAEA,SAAgB,iBAAiB,WAA6B,QAAiB,SAA0B;CACvG,OAAO;EACL;EACA,SAAS,mBAAmB;EAC5B,SAAS,eAAe,aAAa;EACrC,UAAU,kBAAkB,aAAa;CAC3C,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;;;ACzDA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;AAC/D,CAAC,CAAC;;;ACZF,IAAa,gBAAgB,wBAAwB,YAAY,KAAK;CACpE,MAAM;CACN,UAAU;AACZ,CAAC"}
|