@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.
Files changed (220) hide show
  1. package/LICENSE +13 -162
  2. package/README.md +5 -5
  3. package/dist/chunks/config-BXRmsn3t.js +172 -0
  4. package/dist/chunks/config-BXRmsn3t.js.map +1 -0
  5. package/dist/chunks/{config-BRESvs9g.js → config-Ca8qr8Q3.js} +1 -1
  6. package/dist/chunks/{config-BRESvs9g.js.map → config-Ca8qr8Q3.js.map} +1 -1
  7. package/dist/chunks/config-Dg0bSoGw.js +81 -0
  8. package/dist/chunks/config-Dg0bSoGw.js.map +1 -0
  9. package/dist/chunks/config-DmED6aJV.js +237 -0
  10. package/dist/chunks/config-DmED6aJV.js.map +1 -0
  11. package/dist/chunks/{config-DWL81-aM.js → config-hnoZvcIM.js} +2 -20
  12. package/dist/chunks/config-hnoZvcIM.js.map +1 -0
  13. package/dist/chunks/dragSortGeometry-CY-llfrQ.js +87 -0
  14. package/dist/chunks/dragSortGeometry-CY-llfrQ.js.map +1 -0
  15. package/dist/chunks/{en-CuuLfNHX.js → en-C_QkUTRL.js} +36 -1
  16. package/dist/chunks/en-C_QkUTRL.js.map +1 -0
  17. package/dist/chunks/{es-CsmvfESn.js → es-B4t_3Wnh.js} +3 -3
  18. package/dist/chunks/{es-CsmvfESn.js.map → es-B4t_3Wnh.js.map} +1 -1
  19. package/dist/chunks/{es-CSnmrcMw.js → es-DemSEhZE.js} +36 -1
  20. package/dist/chunks/es-DemSEhZE.js.map +1 -0
  21. package/dist/chunks/{generated-B95IBXs6.js → generated-VcxJTo_q.js} +210 -0
  22. package/dist/chunks/generated-VcxJTo_q.js.map +1 -0
  23. package/dist/chunks/{grKbdStyles-DENu8pUK.js → grKbdStyles-ByMsX-lQ.js} +17 -2
  24. package/dist/chunks/grKbdStyles-ByMsX-lQ.js.map +1 -0
  25. package/dist/chunks/{granular-provider-BshNi2la.js → granular-provider-BohXQcNt.js} +8 -2
  26. package/dist/chunks/granular-provider-BohXQcNt.js.map +1 -0
  27. package/dist/chunks/{ru-BKWafECI.js → ru-CLUErjhY.js} +36 -1
  28. package/dist/chunks/ru-CLUErjhY.js.map +1 -0
  29. package/dist/chunks/scrollOverflow-B_kEdcol.js +31 -0
  30. package/dist/chunks/scrollOverflow-B_kEdcol.js.map +1 -0
  31. package/dist/chunks/tones-CRJAaYyg.js +21 -0
  32. package/dist/chunks/tones-CRJAaYyg.js.map +1 -0
  33. package/dist/components/GrAffix/chunks/GrAffix-CWtC7yi8.js +272 -0
  34. package/dist/components/GrAffix/chunks/GrAffix-CWtC7yi8.js.map +1 -0
  35. package/dist/components/GrAffix/index.js +3 -0
  36. package/dist/components/GrBreadcrumbs/chunks/{GrBreadcrumbs-DOpwY2EF.js → GrBreadcrumbs-D0qPry_R.js} +4 -1
  37. package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-D0qPry_R.js.map +1 -0
  38. package/dist/components/GrBreadcrumbs/index.js +1 -1
  39. package/dist/components/GrCarousel/chunks/GrCarousel-ByuughtI.js +761 -0
  40. package/dist/components/GrCarousel/chunks/GrCarousel-ByuughtI.js.map +1 -0
  41. package/dist/components/GrCarousel/index.js +3 -0
  42. package/dist/components/GrCarousel/styles.css +1 -0
  43. package/dist/components/GrColorPicker/chunks/{GrColorPicker-BwzRLs-i.js → GrColorPicker-9mTR-YZ_.js} +1 -1
  44. package/dist/components/GrColorPicker/chunks/{GrColorPicker-BwzRLs-i.js.map → GrColorPicker-9mTR-YZ_.js.map} +1 -1
  45. package/dist/components/GrColorPicker/index.js +1 -1
  46. package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-CnzPuoIM.js → GrCommandPalette-Ha4s3DMT.js} +1 -1
  47. package/dist/components/GrCommandPalette/chunks/{GrCommandPalette-CnzPuoIM.js.map → GrCommandPalette-Ha4s3DMT.js.map} +1 -1
  48. package/dist/components/GrCommandPalette/index.js +1 -1
  49. package/dist/components/GrDataTable/chunks/{GrDataTable-DpyipOFx.js → GrDataTable-xNSmO_I-.js} +9 -4
  50. package/dist/components/GrDataTable/chunks/GrDataTable-xNSmO_I-.js.map +1 -0
  51. package/dist/components/GrDataTable/index.js +1 -1
  52. package/dist/components/GrDelta/chunks/{GrDelta-BpfqebEV.js → GrDelta-CgTvfoIN.js} +0 -0
  53. package/dist/components/GrDelta/chunks/GrDelta-CgTvfoIN.js.map +1 -0
  54. package/dist/components/GrDelta/index.js +1 -1
  55. package/dist/components/GrDescriptionList/chunks/{GrDescriptionList-D8ANFpn_.js → GrDescriptionList-Dz2Jj1if.js} +26 -11
  56. package/dist/components/GrDescriptionList/chunks/GrDescriptionList-Dz2Jj1if.js.map +1 -0
  57. package/dist/components/GrDescriptionList/index.js +1 -1
  58. package/dist/components/GrFilePreview/chunks/{GrFilePreview-PabkLgYX.js → GrFilePreview-2kVOg1C7.js} +40 -5
  59. package/dist/components/GrFilePreview/chunks/GrFilePreview-2kVOg1C7.js.map +1 -0
  60. package/dist/components/GrFilePreview/index.js +1 -1
  61. package/dist/components/GrImageViewer/chunks/{GrImageViewer-Dd2gJ-j_.js.map → GrImageViewer-DK-iVHHC.js.map} +1 -1
  62. package/dist/components/GrImageViewer/index.js +1 -1
  63. package/dist/components/GrInputTag/chunks/{GrInputTag-3Au5HWZL.js → GrInputTag-Ci8AO1ze.js} +5 -2
  64. package/dist/components/GrInputTag/chunks/GrInputTag-Ci8AO1ze.js.map +1 -0
  65. package/dist/components/GrInputTag/index.js +1 -1
  66. package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-CDGOX3C0.js → GrJsonViewer-CwCBMh4h.js} +34 -8
  67. package/dist/components/GrJsonViewer/chunks/GrJsonViewer-CwCBMh4h.js.map +1 -0
  68. package/dist/components/GrJsonViewer/index.js +1 -1
  69. package/dist/components/GrKbd/chunks/{GrKbd-D_a1mPLe.js → GrKbd-BNMeoaLV.js} +1 -1
  70. package/dist/components/GrKbd/chunks/{GrKbd-D_a1mPLe.js.map → GrKbd-BNMeoaLV.js.map} +1 -1
  71. package/dist/components/GrKbd/index.js +2 -2
  72. package/dist/components/GrNumberInput/chunks/{GrNumberInput-BqPydXpK.js → GrNumberInput-CL5QhOmx.js} +5 -2
  73. package/dist/components/GrNumberInput/chunks/GrNumberInput-CL5QhOmx.js.map +1 -0
  74. package/dist/components/GrNumberInput/index.js +1 -1
  75. package/dist/components/GrProgressBar/index.js +1 -1
  76. package/dist/components/GrSegmented/chunks/{GrSegmented-NKTi9bMG.js → GrSegmented-CuDaKA6S.js} +5 -1
  77. package/dist/components/GrSegmented/chunks/GrSegmented-CuDaKA6S.js.map +1 -0
  78. package/dist/components/GrSegmented/index.js +1 -1
  79. package/dist/components/GrSlider/chunks/{GrSlider-Db-jACXz.js.map → GrSlider-CO8N9SF6.js.map} +1 -1
  80. package/dist/components/GrSlider/index.js +1 -1
  81. package/dist/components/GrSortableList/chunks/{GrSortableList-CQCaWivn.js → GrSortableList-NKriuGm_.js} +6 -2
  82. package/dist/components/GrSortableList/chunks/GrSortableList-NKriuGm_.js.map +1 -0
  83. package/dist/components/GrSortableList/index.js +1 -1
  84. package/dist/components/GrSteps/chunks/{GrSteps-DXj7m-WO.js → GrSteps-Cng-Wrjk.js} +5 -1
  85. package/dist/components/GrSteps/chunks/GrSteps-Cng-Wrjk.js.map +1 -0
  86. package/dist/components/GrSteps/index.js +1 -1
  87. package/dist/components/GrTabs/chunks/{GrTabs-DHfv67cp.js → GrTabs-s9RzC1WX.js} +7 -32
  88. package/dist/components/GrTabs/chunks/GrTabs-s9RzC1WX.js.map +1 -0
  89. package/dist/components/GrTabs/index.js +1 -1
  90. package/dist/components/GrTransfer/chunks/GrTransfer-8FA78ny6.js +1368 -0
  91. package/dist/components/GrTransfer/chunks/GrTransfer-8FA78ny6.js.map +1 -0
  92. package/dist/components/GrTransfer/index.js +3 -0
  93. package/dist/components/GrTransfer/styles.css +1 -0
  94. package/dist/components/GrTree/chunks/{GrTree-BFWFc0Bm.js → GrTree-CkHzgYg1.js} +3 -3
  95. package/dist/components/GrTree/chunks/{GrTree-BFWFc0Bm.js.map → GrTree-CkHzgYg1.js.map} +1 -1
  96. package/dist/components/GrTree/index.js +1 -1
  97. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DJa2lYGe.js → GrTreeSelect-DUsv3_mF.js} +1 -1
  98. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DJa2lYGe.js.map → GrTreeSelect-DUsv3_mF.js.map} +1 -1
  99. package/dist/components/GrTreeSelect/index.js +1 -1
  100. package/dist/composables/useDragSort.js +179 -1
  101. package/dist/composables/useDragSort.js.map +1 -0
  102. package/dist/granular-provider-node.js +1 -1
  103. package/dist/granular-provider.js +1 -1
  104. package/dist/i18n/all.js +1 -1
  105. package/dist/i18n/index.js +1 -1
  106. package/dist/index.js +32 -28
  107. package/dist/theme.js +1 -1
  108. package/dist/tokens.js +1 -1
  109. package/dist/types/components/GrAffix/GrAffix.vue.d.ts +91 -0
  110. package/dist/types/components/GrAffix/affixState.d.ts +81 -0
  111. package/dist/types/components/GrAffix/config.d.ts +1 -0
  112. package/dist/types/components/GrAffix/grAffixStyles.d.ts +46 -0
  113. package/dist/types/components/GrAffix/index.d.ts +9 -0
  114. package/dist/types/components/GrAffix/safelist.d.ts +1 -0
  115. package/dist/types/components/GrAlert/GrAlert.vue.d.ts +1 -1
  116. package/dist/types/components/GrBadgeWrap/GrBadgeWrap.vue.d.ts +2 -2
  117. package/dist/types/components/GrButton/GrButton.vue.d.ts +2 -2
  118. package/dist/types/components/GrCard/GrCard.vue.d.ts +1 -1
  119. package/dist/types/components/GrCarousel/GrCarousel.vue.d.ts +151 -0
  120. package/dist/types/components/GrCarousel/GrCarouselSlide.vue.d.ts +53 -0
  121. package/dist/types/components/GrCarousel/carouselNavigation.d.ts +57 -0
  122. package/dist/types/components/GrCarousel/composables/useCarouselAutoplay.d.ts +33 -0
  123. package/dist/types/components/GrCarousel/composables/useCarouselSwipe.d.ts +20 -0
  124. package/dist/types/components/GrCarousel/config.d.ts +7 -0
  125. package/dist/types/components/GrCarousel/defaults.d.ts +13 -0
  126. package/dist/types/components/GrCarousel/grCarouselContext.d.ts +46 -0
  127. package/dist/types/components/GrCarousel/grCarouselStyles.d.ts +80 -0
  128. package/dist/types/components/GrCarousel/index.d.ts +12 -0
  129. package/dist/types/components/GrCarousel/safelist.d.ts +1 -0
  130. package/dist/types/components/GrCheckbox/GrCheckbox.vue.d.ts +3 -3
  131. package/dist/types/components/GrCheckboxGroup/GrCheckboxGroup.vue.d.ts +2 -2
  132. package/dist/types/components/GrChip/GrChip.vue.d.ts +2 -2
  133. package/dist/types/components/GrChipGroup/GrChipGroup.vue.d.ts +2 -2
  134. package/dist/types/components/GrCollapse/GrCollapse.vue.d.ts +1 -1
  135. package/dist/types/components/GrCollapse/GrCollapseItem.vue.d.ts +1 -1
  136. package/dist/types/components/GrColorPicker/GrColorPicker.vue.d.ts +3 -3
  137. package/dist/types/components/GrCommandPalette/GrCommandPalette.vue.d.ts +1 -1
  138. package/dist/types/components/GrConfirmDialog/GrConfirmDialog.vue.d.ts +1 -1
  139. package/dist/types/components/GrContextMenu/GrContextMenu.vue.d.ts +2 -2
  140. package/dist/types/components/GrDialog/GrDialog.vue.d.ts +1 -1
  141. package/dist/types/components/GrDivider/GrDivider.vue.d.ts +2 -2
  142. package/dist/types/components/GrDrawer/GrDrawer.vue.d.ts +1 -1
  143. package/dist/types/components/GrDropdown/GrDropdown.vue.d.ts +3 -3
  144. package/dist/types/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +3 -3
  145. package/dist/types/components/GrDropdownMenu/GrDropdownMenuItem.vue.d.ts +1 -1
  146. package/dist/types/components/GrEmptyState/GrEmptyState.vue.d.ts +1 -1
  147. package/dist/types/components/GrFilePreview/GrFilePreview.vue.d.ts +14 -0
  148. package/dist/types/components/GrFileUpload/GrFileUpload.vue.d.ts +1 -1
  149. package/dist/types/components/GrFormField/GrFormField.vue.d.ts +3 -3
  150. package/dist/types/components/GrFormFile/GrFormFile.vue.d.ts +2 -2
  151. package/dist/types/components/GrFormSection/GrFormSection.vue.d.ts +1 -1
  152. package/dist/types/components/GrIcon/GrIcon.vue.d.ts +1 -1
  153. package/dist/types/components/GrImageViewer/GrImageViewer.vue.d.ts +3 -3
  154. package/dist/types/components/GrInput/GrInput.vue.d.ts +4 -4
  155. package/dist/types/components/GrInputTag/GrInputTag.vue.d.ts +3 -3
  156. package/dist/types/components/GrKbd/GrKbd.vue.d.ts +1 -1
  157. package/dist/types/components/GrKbd/grKbdStyles.d.ts +17 -2
  158. package/dist/types/components/GrLink/GrLink.vue.d.ts +1 -1
  159. package/dist/types/components/GrList/GrListItem.vue.d.ts +2 -2
  160. package/dist/types/components/GrNavbar/GrNavbar.vue.d.ts +2 -2
  161. package/dist/types/components/GrNumberInput/GrNumberInput.vue.d.ts +3 -3
  162. package/dist/types/components/GrPagination/GrPagination.vue.d.ts +1 -1
  163. package/dist/types/components/GrPopover/GrPopover.vue.d.ts +3 -3
  164. package/dist/types/components/GrPromptDialog/GrPromptDialog.vue.d.ts +3 -3
  165. package/dist/types/components/GrRadio/GrRadio.vue.d.ts +2 -2
  166. package/dist/types/components/GrRadioGroup/GrRadioGroup.vue.d.ts +2 -2
  167. package/dist/types/components/GrRating/GrRating.vue.d.ts +2 -2
  168. package/dist/types/components/GrSegmented/GrSegmented.vue.d.ts +2 -2
  169. package/dist/types/components/GrSidebar/GrSidebarItem.vue.d.ts +1 -1
  170. package/dist/types/components/GrSkeleton/GrSkeleton.vue.d.ts +1 -1
  171. package/dist/types/components/GrSlider/GrSlider.vue.d.ts +3 -3
  172. package/dist/types/components/GrSplitter/GrSplitter.vue.d.ts +1 -1
  173. package/dist/types/components/GrStatistic/GrStatistic.vue.d.ts +2 -2
  174. package/dist/types/components/GrSwitch/GrSwitch.vue.d.ts +3 -3
  175. package/dist/types/components/GrTable/GrTable.vue.d.ts +1 -1
  176. package/dist/types/components/GrTabs/GrTabs.vue.d.ts +1 -1
  177. package/dist/types/components/GrTextarea/GrTextarea.vue.d.ts +2 -2
  178. package/dist/types/components/GrTimeline/GrTimelineItem.vue.d.ts +2 -2
  179. package/dist/types/components/GrToaster/GrToaster.vue.d.ts +1 -1
  180. package/dist/types/components/GrTooltip/GrTooltip.vue.d.ts +3 -3
  181. package/dist/types/components/GrTransfer/GrTransfer.vue.d.ts +103 -0
  182. package/dist/types/components/GrTransfer/config.d.ts +1 -0
  183. package/dist/types/components/GrTransfer/defaults.d.ts +15 -0
  184. package/dist/types/components/GrTransfer/grTransferStyles.d.ts +127 -0
  185. package/dist/types/components/GrTransfer/index.d.ts +11 -0
  186. package/dist/types/components/GrTransfer/safelist.d.ts +1 -0
  187. package/dist/types/components/GrTransfer/transferGeometry.d.ts +44 -0
  188. package/dist/types/components/GrTransfer/transferModel.d.ts +68 -0
  189. package/dist/types/components/GrTransfer/transferSelection.d.ts +36 -0
  190. package/dist/types/components/GrTransfer/useTransferDrag.d.ts +48 -0
  191. package/dist/types/granular-provider/shared.d.ts +3 -0
  192. package/dist/types/i18n/messages/en.d.ts +70 -0
  193. package/dist/types/i18n/messages/es.d.ts +70 -0
  194. package/dist/types/i18n/messages/ru.d.ts +70 -0
  195. package/dist/types/index.d.ts +3 -0
  196. package/dist/web-types.json +735 -287
  197. package/package.json +19 -3
  198. package/dist/chunks/config-DWL81-aM.js.map +0 -1
  199. package/dist/chunks/en-CuuLfNHX.js.map +0 -1
  200. package/dist/chunks/es-CSnmrcMw.js.map +0 -1
  201. package/dist/chunks/generated-B95IBXs6.js.map +0 -1
  202. package/dist/chunks/grKbdStyles-DENu8pUK.js.map +0 -1
  203. package/dist/chunks/granular-provider-BshNi2la.js.map +0 -1
  204. package/dist/chunks/ru-BKWafECI.js.map +0 -1
  205. package/dist/chunks/useDragSort-0l47h4yb.js +0 -265
  206. package/dist/chunks/useDragSort-0l47h4yb.js.map +0 -1
  207. package/dist/components/GrBreadcrumbs/chunks/GrBreadcrumbs-DOpwY2EF.js.map +0 -1
  208. package/dist/components/GrDataTable/chunks/GrDataTable-DpyipOFx.js.map +0 -1
  209. package/dist/components/GrDelta/chunks/GrDelta-BpfqebEV.js.map +0 -1
  210. package/dist/components/GrDescriptionList/chunks/GrDescriptionList-D8ANFpn_.js.map +0 -1
  211. package/dist/components/GrFilePreview/chunks/GrFilePreview-PabkLgYX.js.map +0 -1
  212. package/dist/components/GrInputTag/chunks/GrInputTag-3Au5HWZL.js.map +0 -1
  213. package/dist/components/GrJsonViewer/chunks/GrJsonViewer-CDGOX3C0.js.map +0 -1
  214. package/dist/components/GrNumberInput/chunks/GrNumberInput-BqPydXpK.js.map +0 -1
  215. package/dist/components/GrSegmented/chunks/GrSegmented-NKTi9bMG.js.map +0 -1
  216. package/dist/components/GrSortableList/chunks/GrSortableList-CQCaWivn.js.map +0 -1
  217. package/dist/components/GrSteps/chunks/GrSteps-DXj7m-WO.js.map +0 -1
  218. package/dist/components/GrTabs/chunks/GrTabs-DHfv67cp.js.map +0 -1
  219. package/dist/components/GrImageViewer/chunks/{GrImageViewer-Dd2gJ-j_.js → GrImageViewer-DK-iVHHC.js} +3 -3
  220. 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, 4, and 7 and all their subparagraphs), the terms
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. MANDATORY COMPENSATION FOR PROHIBITED USE. Any person or entity that
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
- 7. GOVERNING LAW, FORUM AND JURISDICTION. Any dispute, claim,
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 (including, without limitation, any claim for compensation
347
- under paragraph 4), shall, at the sole and exclusive election of
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 7 limits the Author's right,
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 7 shall be read as granting the Author the
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, 4 и 7 и всех их подпунктов) термины «запрещённое
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
- 7. ПРИМЕНИМОЕ ПРАВО, ПОДСУДНОСТЬ И ВЫБОР СУДА. Любой спор, требование,
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
- права на суд присяжных. Ничто в настоящем пункте 7 не
429
+ права на суд присяжных. Ничто в настоящем пункте 5 не
579
430
  ограничивает права Автора по единоличному усмотрению
580
431
  (i) требовать обеспечительных, предварительных или
581
432
  временных мер (в том числе ареста активов и обеспечения
@@ -589,7 +440,7 @@
589
440
  потребителей или процессуального законодательства
590
441
  юрисдикции нарушителя предоставляют нарушителю не
591
442
  подлежащее отказу право предъявлять иск или быть ответчиком
592
- в ином суде, настоящий пункт 7 толкуется как
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 | 537.9 kB | 100 % |
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 — `GrSegmented` | 15.1 kB | 3 % |
97
- | the 5 heaviest together | 171.7 kB | 32 % |
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.1.0 | Code surfaces: view, edit and diff — the viewer and the diff carry no dependencies at all. |
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.8.1 | Test gates for @feugene/granularity design-system packages — token, registry and defaults contracts as reusable factories. |
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-DENu8pUK.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-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-BRESvs9g.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"}
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"}