@feugene/granularity 0.39.0 → 0.41.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 (91) hide show
  1. package/README.md +6 -5
  2. package/dist/chunks/{config-DOYz_SVK.js → config--t2dxj0t.js} +9 -0
  3. package/dist/chunks/{config-DOYz_SVK.js.map → config--t2dxj0t.js.map} +1 -1
  4. package/dist/chunks/{config-DUNH02Fg.js → config-BGCyyXiD.js} +9 -0
  5. package/dist/chunks/{config-DUNH02Fg.js.map → config-BGCyyXiD.js.map} +1 -1
  6. package/dist/chunks/{config-CYthTVK2.js → config-BHLMTJaR.js} +9 -0
  7. package/dist/chunks/{config-CYthTVK2.js.map → config-BHLMTJaR.js.map} +1 -1
  8. package/dist/chunks/{config-ChPg-BQv.js → config-CviN-0d4.js} +6 -0
  9. package/dist/chunks/{config-ChPg-BQv.js.map → config-CviN-0d4.js.map} +1 -1
  10. package/dist/chunks/{config-DBi0GVce.js → config-DZv2N7zH.js} +6 -0
  11. package/dist/chunks/{config-DBi0GVce.js.map → config-DZv2N7zH.js.map} +1 -1
  12. package/dist/chunks/{config-BDSaD-5p.js → config-DjRhIB5g.js} +6 -0
  13. package/dist/chunks/{config-BDSaD-5p.js.map → config-DjRhIB5g.js.map} +1 -1
  14. package/dist/chunks/{config-BTmfQFwi.js → config-iemgzS4x.js} +9 -0
  15. package/dist/chunks/{config-BTmfQFwi.js.map → config-iemgzS4x.js.map} +1 -1
  16. package/dist/chunks/{config-DVCNvhIG.js → config-tNqtapcT.js} +6 -0
  17. package/dist/chunks/{config-DVCNvhIG.js.map → config-tNqtapcT.js.map} +1 -1
  18. package/dist/chunks/{en-NpP9e7lC.js → en-CuuLfNHX.js} +1 -7
  19. package/dist/chunks/{en-NpP9e7lC.js.map → en-CuuLfNHX.js.map} +1 -1
  20. package/dist/chunks/{es-DaeA2Ql-.js → es-CSnmrcMw.js} +1 -7
  21. package/dist/chunks/{es-DaeA2Ql-.js.map → es-CSnmrcMw.js.map} +1 -1
  22. package/dist/chunks/{es-Do2CNrC2.js → es-CsmvfESn.js} +3 -3
  23. package/dist/chunks/{es-Do2CNrC2.js.map → es-CsmvfESn.js.map} +1 -1
  24. package/dist/chunks/{generated-BcfXQY4j.js → generated-B95IBXs6.js} +0 -56
  25. package/dist/chunks/{generated-BcfXQY4j.js.map → generated-B95IBXs6.js.map} +1 -1
  26. package/dist/chunks/{granular-provider-DP2gk0oa.js → granular-provider-BshNi2la.js} +8 -10
  27. package/dist/chunks/granular-provider-BshNi2la.js.map +1 -0
  28. package/dist/chunks/{ru-Bg9-DPmg.js → ru-BKWafECI.js} +1 -7
  29. package/dist/chunks/{ru-Bg9-DPmg.js.map → ru-BKWafECI.js.map} +1 -1
  30. package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-BpmFmpKs.js → GrAutocomplete-D396_JrW.js} +1 -1
  31. package/dist/components/GrAutocomplete/chunks/{GrAutocomplete-BpmFmpKs.js.map → GrAutocomplete-D396_JrW.js.map} +1 -1
  32. package/dist/components/GrAutocomplete/index.js +2 -2
  33. package/dist/components/GrDataTable/chunks/{GrDataTable-BYYG_XZA.js.map → GrDataTable-DpyipOFx.js.map} +1 -1
  34. package/dist/components/GrDataTable/index.js +1 -1
  35. package/dist/components/GrDrawer/chunks/{GrDrawer-BRMHhvbd.js → GrDrawer-CNpSMuN-.js} +1 -1
  36. package/dist/components/GrDrawer/chunks/{GrDrawer-BRMHhvbd.js.map → GrDrawer-CNpSMuN-.js.map} +1 -1
  37. package/dist/components/GrDrawer/index.js +2 -2
  38. package/dist/components/GrImageViewer/chunks/{GrImageViewer-CcduIFsa.js → GrImageViewer-Dd2gJ-j_.js} +2 -2
  39. package/dist/components/GrImageViewer/chunks/{GrImageViewer-CcduIFsa.js.map → GrImageViewer-Dd2gJ-j_.js.map} +1 -1
  40. package/dist/components/GrImageViewer/index.js +2 -2
  41. package/dist/components/GrInputTag/chunks/{GrInputTag-DhfUNOA5.js.map → GrInputTag-3Au5HWZL.js.map} +1 -1
  42. package/dist/components/GrInputTag/index.js +1 -1
  43. package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-CdtmUpZ3.js → GrJsonViewer-CDGOX3C0.js} +30 -4
  44. package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-CdtmUpZ3.js.map → GrJsonViewer-CDGOX3C0.js.map} +1 -1
  45. package/dist/components/GrJsonViewer/index.js +1 -1
  46. package/dist/components/GrModal/index.js +1 -1
  47. package/dist/components/GrPopover/index.js +1 -1
  48. package/dist/components/GrSelect/index.js +1 -1
  49. package/dist/components/GrTooltip/chunks/{GrTooltip-BUiTbROv.js → GrTooltip-DkMMM0uq.js} +1 -1
  50. package/dist/components/GrTooltip/chunks/{GrTooltip-BUiTbROv.js.map → GrTooltip-DkMMM0uq.js.map} +1 -1
  51. package/dist/components/GrTooltip/index.js +2 -2
  52. package/dist/components/GrTree/chunks/{GrTree-CkELQwR8.js.map → GrTree-BFWFc0Bm.js.map} +1 -1
  53. package/dist/components/GrTree/index.js +1 -1
  54. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DurwZ7Cz.js → GrTreeSelect-DJa2lYGe.js} +2 -2
  55. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DurwZ7Cz.js.map → GrTreeSelect-DJa2lYGe.js.map} +1 -1
  56. package/dist/components/GrTreeSelect/index.js +2 -2
  57. package/dist/granular-provider-node.js +1 -1
  58. package/dist/granular-provider.js +1 -1
  59. package/dist/i18n/all.js +1 -1
  60. package/dist/i18n/index.js +1 -1
  61. package/dist/index.js +19 -21
  62. package/dist/theme.js +1 -1
  63. package/dist/tokens.js +1 -1
  64. package/dist/types/components/GrJsonViewer/GrJsonViewer.vue.d.ts +1 -1
  65. package/dist/types/granular-provider/shared.d.ts +0 -1
  66. package/dist/types/i18n/messages/en.d.ts +0 -10
  67. package/dist/types/i18n/messages/es.d.ts +0 -10
  68. package/dist/types/i18n/messages/ru.d.ts +0 -10
  69. package/dist/types/index.d.ts +0 -1
  70. package/dist/web-types.json +37 -122
  71. package/package.json +2 -6
  72. package/dist/chunks/config-DolULhjJ.js +0 -92
  73. package/dist/chunks/config-DolULhjJ.js.map +0 -1
  74. package/dist/chunks/copy-DChChcq-.js +0 -29
  75. package/dist/chunks/copy-DChChcq-.js.map +0 -1
  76. package/dist/chunks/granular-provider-DP2gk0oa.js.map +0 -1
  77. package/dist/components/GrCodeBlock/chunks/GrCodeBlock-BUOwKwQE.js +0 -315
  78. package/dist/components/GrCodeBlock/chunks/GrCodeBlock-BUOwKwQE.js.map +0 -1
  79. package/dist/components/GrCodeBlock/index.js +0 -3
  80. package/dist/components/GrCodeBlock/styles.css +0 -1
  81. package/dist/types/components/GrCodeBlock/GrCodeBlock.vue.d.ts +0 -79
  82. package/dist/types/components/GrCodeBlock/config.d.ts +0 -1
  83. package/dist/types/components/GrCodeBlock/defaults.d.ts +0 -21
  84. package/dist/types/components/GrCodeBlock/grCodeBlockStyles.d.ts +0 -53
  85. package/dist/types/components/GrCodeBlock/index.d.ts +0 -6
  86. package/dist/types/components/GrCodeBlock/safelist.d.ts +0 -1
  87. package/dist/types/components/GrCodeBlock/serializeCode.d.ts +0 -19
  88. package/dist/types/components/GrCodeBlock/tokenizeJson.d.ts +0 -22
  89. package/dist/components/GrDataTable/chunks/{GrDataTable-BYYG_XZA.js → GrDataTable-DpyipOFx.js} +1 -1
  90. package/dist/components/GrInputTag/chunks/{GrInputTag-DhfUNOA5.js → GrInputTag-3Au5HWZL.js} +1 -1
  91. package/dist/components/GrTree/chunks/{GrTree-CkELQwR8.js → GrTree-BFWFc0Bm.js} +1 -1
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 | 542.9 kB | 100 % |
94
+ | the whole package from the root | 537.9 kB | 100 % |
95
95
  | the lightest component — `GrButtonGroup` | 1.8 kB | < 1 % |
96
- | the median component — `GrNavbar` | 15.4 kB | 3 % |
97
- | the 5 heaviest together | 171.1 kB | 32 % |
96
+ | the median component — `GrSegmented` | 15.1 kB | 3 % |
97
+ | the 5 heaviest together | 171.7 kB | 32 % |
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
@@ -112,11 +112,12 @@ on this one — the core stays lean, and you install only what you reach for.
112
112
  <!-- ecosystem:generated:start -->
113
113
  | Package | Version | What it adds |
114
114
  | --- | --- | --- |
115
- | [`@feugene/granularity-charts`](../granularity-charts) | 0.10.1 | Charts — own SVG, zero dependencies, drawn with theme tokens. |
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
118
  | [`@feugene/granularity-dashboard`](../granularity-dashboard) | 0.6.0 | Widget grid — drag, resize, breakpoints and layout persistence, zero dependencies. |
118
119
  | [`@feugene/granularity-datasource`](../granularity-datasource) | 0.1.2 | List state: sorting, filters, paging, URL sync and race-free fetching behind one composable. |
119
- | [`@feugene/granularity-devtools`](../granularity-devtools) | 0.3.1 | Vue DevTools panel — where a prop value came from, the overlay layer stack and design-system warnings. |
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. |
120
121
  | [`@feugene/granularity-editor`](../granularity-editor) | 0.3.1 | Rich-text editing: a TipTap-backed GrRichText field with a design-system toolbar. |
121
122
  | [`@feugene/granularity-forms-schema`](../granularity-forms-schema) | 0.4.0 | Schema-driven forms — zod and JSON Schema into real form fields, zero dependencies. |
122
123
  | [`@feugene/granularity-media`](../granularity-media) | 0.7.1 | Media components: image cropping, camera capture, code scanning and video playback. |
@@ -36,6 +36,15 @@ var grSelectSafelist = [.../* @__PURE__ */ new Set([
36
36
  //#region src/components/GrSelect/config.ts
37
37
  var grSelectConfig = defineGranularComponent(import.meta.url, {
38
38
  name: "GrSelect",
39
+ /**
40
+ * Слой панели задаёт `useFloating` → `floatingLayerZIndex`: имя приходит
41
+ * параметром, а `var()` собирается в рантайме (`overlayStack.ts`). В
42
+ * исходниках `var(--gr-z-*)` не встречается, статический скан их не видит.
43
+ *
44
+ * `gr-z-modal` — из ветки `calc(var(--gr-z-modal) + N)`: панель, открытая
45
+ * внутри модалки, встаёт над ней.
46
+ */
47
+ dynamicTokens: ["gr-z-dropdown", "gr-z-modal"],
39
48
  dependencies: ["GrChip", "GrInput"],
40
49
  safelist: grSelectSafelist
41
50
  });
@@ -1 +1 @@
1
- {"version":3,"file":"config-DOYz_SVK.js","names":[],"sources":["../../src/components/GrSelect/safelist.ts","../../src/components/GrSelect/config.ts"],"sourcesContent":["import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport {\n borderClassByState,\n defaultBaseClass,\n grSelectLinkNativeLabelBaseClass,\n grSelectLinkNativeLabelDisabledClass,\n grSelectLinkNativeLabelFocusClass,\n grSelectLinkNativeOverlayClass,\n grSelectPanelClasses,\n invalidBorderClass,\n linkBaseClass,\n selectOptionActiveClass,\n selectOptionBaseClass,\n selectOptionDisabledClass,\n selectOptionEnabledClass,\n selectOptionLinkWidthClass,\n selectOptionWidthClass,\n selectLinkNativeLabelVariantClassByVariant,\n selectLinkSizeClassBySize,\n selectLinkVariantClassByVariant,\n selectSizeClassBySize,\n} from './grSelectStyles'\n\n// Всё, что живёт в `grSelectStyles.ts`: и вычисляемые мапы, и строковые литералы\n// оболочки, link-режима, native-overlay и панели. Хелпер уезжает в общий\n// `dist/chunks/`, вне области скана компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grSelectSafelist = [...new Set([\n ...Object.values(borderClassByState).flatMap(splitClassTokens),\n ...splitClassTokens(invalidBorderClass),\n ...Object.values(selectSizeClassBySize).flatMap(splitClassTokens),\n ...splitClassTokens(defaultBaseClass),\n ...splitClassTokens(linkBaseClass),\n ...splitClassTokens(grSelectLinkNativeOverlayClass),\n ...splitClassTokens(grSelectLinkNativeLabelBaseClass),\n ...splitClassTokens(grSelectLinkNativeLabelDisabledClass),\n ...splitClassTokens(grSelectLinkNativeLabelFocusClass),\n ...splitClassTokens(grSelectPanelClasses),\n ...Object.values(selectLinkSizeClassBySize).flatMap(splitClassTokens),\n ...Object.values(selectLinkVariantClassByVariant).flatMap(splitClassTokens),\n ...Object.values(selectLinkNativeLabelVariantClassByVariant).flatMap(splitClassTokens),\n ...splitClassTokens('no-underline underline underline-offset-4 hover:underline hover:underline-offset-4 peer-hover:underline peer-hover:underline-offset-4'),\n ...splitClassTokens('disabled:cursor-not-allowed disabled:text-[var(--gr-muted-fg)] disabled:no-underline'),\n ...splitClassTokens('disabled:cursor-not-allowed disabled:bg-[var(--gr-muted)] disabled:text-[var(--gr-muted-fg)]'),\n ...splitClassTokens(selectOptionBaseClass),\n ...splitClassTokens(selectOptionWidthClass),\n ...splitClassTokens(selectOptionLinkWidthClass),\n ...splitClassTokens(selectOptionEnabledClass),\n ...splitClassTokens(selectOptionActiveClass),\n ...splitClassTokens(selectOptionDisabledClass),\n ...splitClassTokens('appearance-none pr-9'),\n ...splitClassTokens('inline-flex items-center gap-1 text-left'),\n ...splitClassTokens('flex items-center justify-between text-left'),\n ...splitClassTokens('block min-w-full w-max whitespace-nowrap'),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grSelectSafelist } from './safelist'\n\nexport const grSelectConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSelect',\n dependencies: ['GrChip', 'GrInput'],\n safelist: grSelectSafelist,\n})\n"],"mappings":";;;;;AA2BA,IAAa,mBAAmB,CAAC,mBAAG,IAAI,IAAI;CAC1C,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;CAC7D,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,OAAO,OAAO,qBAAqB,CAAC,CAAC,QAAQ,gBAAgB;CAChE,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,8BAA8B;CAClD,GAAG,iBAAiB,gCAAgC;CACpD,GAAG,iBAAiB,oCAAoC;CACxD,GAAG,iBAAiB,iCAAiC;CACrD,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,OAAO,OAAO,yBAAyB,CAAC,CAAC,QAAQ,gBAAgB;CACpE,GAAG,OAAO,OAAO,+BAA+B,CAAC,CAAC,QAAQ,gBAAgB;CAC1E,GAAG,OAAO,OAAO,0CAA0C,CAAC,CAAC,QAAQ,gBAAgB;CACrF,GAAG,iBAAiB,uIAAuI;CAC3J,GAAG,iBAAiB,sFAAsF;CAC1G,GAAG,iBAAiB,8FAA8F;CAClH,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,yBAAyB;CAC7C,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,0CAA0C;CAC9D,GAAG,iBAAiB,6CAA6C;CACjE,GAAG,iBAAiB,0CAA0C;CAI9D,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACtDF,IAAa,iBAAiB,wBAAwB,YAAY,KAAK;CACrE,MAAM;CACN,cAAc,CAAC,UAAU,SAAS;CAClC,UAAU;AACZ,CAAC"}
1
+ {"version":3,"file":"config--t2dxj0t.js","names":[],"sources":["../../src/components/GrSelect/safelist.ts","../../src/components/GrSelect/config.ts"],"sourcesContent":["import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport {\n borderClassByState,\n defaultBaseClass,\n grSelectLinkNativeLabelBaseClass,\n grSelectLinkNativeLabelDisabledClass,\n grSelectLinkNativeLabelFocusClass,\n grSelectLinkNativeOverlayClass,\n grSelectPanelClasses,\n invalidBorderClass,\n linkBaseClass,\n selectOptionActiveClass,\n selectOptionBaseClass,\n selectOptionDisabledClass,\n selectOptionEnabledClass,\n selectOptionLinkWidthClass,\n selectOptionWidthClass,\n selectLinkNativeLabelVariantClassByVariant,\n selectLinkSizeClassBySize,\n selectLinkVariantClassByVariant,\n selectSizeClassBySize,\n} from './grSelectStyles'\n\n// Всё, что живёт в `grSelectStyles.ts`: и вычисляемые мапы, и строковые литералы\n// оболочки, link-режима, native-overlay и панели. Хелпер уезжает в общий\n// `dist/chunks/`, вне области скана компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grSelectSafelist = [...new Set([\n ...Object.values(borderClassByState).flatMap(splitClassTokens),\n ...splitClassTokens(invalidBorderClass),\n ...Object.values(selectSizeClassBySize).flatMap(splitClassTokens),\n ...splitClassTokens(defaultBaseClass),\n ...splitClassTokens(linkBaseClass),\n ...splitClassTokens(grSelectLinkNativeOverlayClass),\n ...splitClassTokens(grSelectLinkNativeLabelBaseClass),\n ...splitClassTokens(grSelectLinkNativeLabelDisabledClass),\n ...splitClassTokens(grSelectLinkNativeLabelFocusClass),\n ...splitClassTokens(grSelectPanelClasses),\n ...Object.values(selectLinkSizeClassBySize).flatMap(splitClassTokens),\n ...Object.values(selectLinkVariantClassByVariant).flatMap(splitClassTokens),\n ...Object.values(selectLinkNativeLabelVariantClassByVariant).flatMap(splitClassTokens),\n ...splitClassTokens('no-underline underline underline-offset-4 hover:underline hover:underline-offset-4 peer-hover:underline peer-hover:underline-offset-4'),\n ...splitClassTokens('disabled:cursor-not-allowed disabled:text-[var(--gr-muted-fg)] disabled:no-underline'),\n ...splitClassTokens('disabled:cursor-not-allowed disabled:bg-[var(--gr-muted)] disabled:text-[var(--gr-muted-fg)]'),\n ...splitClassTokens(selectOptionBaseClass),\n ...splitClassTokens(selectOptionWidthClass),\n ...splitClassTokens(selectOptionLinkWidthClass),\n ...splitClassTokens(selectOptionEnabledClass),\n ...splitClassTokens(selectOptionActiveClass),\n ...splitClassTokens(selectOptionDisabledClass),\n ...splitClassTokens('appearance-none pr-9'),\n ...splitClassTokens('inline-flex items-center gap-1 text-left'),\n ...splitClassTokens('flex items-center justify-between text-left'),\n ...splitClassTokens('block min-w-full w-max whitespace-nowrap'),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grSelectSafelist } from './safelist'\n\nexport const grSelectConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSelect',\n /**\n * Слой панели задаёт `useFloating` → `floatingLayerZIndex`: имя приходит\n * параметром, а `var()` собирается в рантайме (`overlayStack.ts`). В\n * исходниках `var(--gr-z-*)` не встречается, статический скан их не видит.\n *\n * `gr-z-modal` — из ветки `calc(var(--gr-z-modal) + N)`: панель, открытая\n * внутри модалки, встаёт над ней.\n */\n dynamicTokens: ['gr-z-dropdown', 'gr-z-modal'],\n dependencies: ['GrChip', 'GrInput'],\n safelist: grSelectSafelist,\n})\n"],"mappings":";;;;;AA2BA,IAAa,mBAAmB,CAAC,mBAAG,IAAI,IAAI;CAC1C,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;CAC7D,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,OAAO,OAAO,qBAAqB,CAAC,CAAC,QAAQ,gBAAgB;CAChE,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,8BAA8B;CAClD,GAAG,iBAAiB,gCAAgC;CACpD,GAAG,iBAAiB,oCAAoC;CACxD,GAAG,iBAAiB,iCAAiC;CACrD,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,OAAO,OAAO,yBAAyB,CAAC,CAAC,QAAQ,gBAAgB;CACpE,GAAG,OAAO,OAAO,+BAA+B,CAAC,CAAC,QAAQ,gBAAgB;CAC1E,GAAG,OAAO,OAAO,0CAA0C,CAAC,CAAC,QAAQ,gBAAgB;CACrF,GAAG,iBAAiB,uIAAuI;CAC3J,GAAG,iBAAiB,sFAAsF;CAC1G,GAAG,iBAAiB,8FAA8F;CAClH,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,yBAAyB;CAC7C,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,0CAA0C;CAC9D,GAAG,iBAAiB,6CAA6C;CACjE,GAAG,iBAAiB,0CAA0C;CAI9D,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACtDF,IAAa,iBAAiB,wBAAwB,YAAY,KAAK;CACrE,MAAM;;;;;;;;;CASN,eAAe,CAAC,iBAAiB,YAAY;CAC7C,cAAc,CAAC,UAAU,SAAS;CAClC,UAAU;AACZ,CAAC"}
@@ -71,6 +71,15 @@ var grTreeSelectSafelist = [.../* @__PURE__ */ new Set([
71
71
  //#region src/components/GrTreeSelect/config.ts
72
72
  var grTreeSelectConfig = defineGranularComponent(import.meta.url, {
73
73
  name: "GrTreeSelect",
74
+ /**
75
+ * Слой панели задаёт `useFloating` → `floatingLayerZIndex`: имя приходит
76
+ * параметром, а `var()` собирается в рантайме (`overlayStack.ts`). В
77
+ * исходниках `var(--gr-z-*)` не встречается, статический скан их не видит.
78
+ *
79
+ * `gr-z-modal` — из ветки `calc(var(--gr-z-modal) + N)`: панель, открытая
80
+ * внутри модалки, встаёт над ней.
81
+ */
82
+ dynamicTokens: ["gr-z-dropdown", "gr-z-modal"],
74
83
  safelist: grTreeSelectSafelist,
75
84
  dependencies: ["GrInput", "GrTree"]
76
85
  });
@@ -1 +1 @@
1
- {"version":3,"file":"config-DUNH02Fg.js","names":[],"sources":["../../src/components/GrTreeSelect/grTreeSelectStyles.ts","../../src/components/GrTreeSelect/safelist.ts","../../src/components/GrTreeSelect/config.ts"],"sourcesContent":["import type { GrControlState } from '../shared/sizes'\nimport { overlayPanelSurfaceClass } from '../shared/overlayPanelSurface'\n\nimport type { GrInputSize } from '../GrInput'\n\nexport type GrTreeSelectState = GrControlState\n\nexport const sizeClassBySize: Record<GrInputSize, string> = {\n xs: 'h-7 px-2.5 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'h-8 px-3 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: 'h-10 px-3 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n lg: 'h-11 px-4 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n\n/**\n * Горизонтальный отступ из `sizeClassBySize`, но числом: аддоны задают паддинг\n * инлайн-стилем, а он перекрывает класс — значение нужно обеим формам, и\n * расходиться им нельзя.\n */\nexport const paddingX: Record<GrInputSize, string> = {\n xs: '10px',\n sm: '12px',\n md: '12px',\n lg: '16px',\n}\n\n/** Ширина зоны шеврона/крестика справа (`pr-9` в классе триггера). */\nexport const trailingZoneWidth = '2.25rem'\n\nexport const borderClassByState: Record<GrTreeSelectState, string> = {\n default: 'border-[var(--gr-brd)]',\n success: 'border-[var(--gr-success)] focus-visible:ring-[var(--gr-success)]',\n warning: 'border-[var(--gr-warning)] focus-visible:ring-[var(--gr-warning)]',\n danger: 'border-[var(--gr-danger)] focus-visible:ring-[var(--gr-danger)]',\n}\n\n/**\n * Ошибка валидации красится своей ролью, а не декоративным тоном `danger`:\n * `state=\"danger\"` — это подсветка по решению разработчика, `invalid` — вердикт\n * валидации, и тема вправе развести их по цвету.\n */\nexport const invalidBorderClass = 'border-[var(--gr-invalid-brd)] focus-visible:ring-[var(--gr-invalid-ring)]'\n\n/**\n * Disabled красится фоном и цветом текста, а не прозрачностью: `opacity`\n * разбавляет выверенные на AA токены и роняет контраст подписи.\n */\nexport const shellEnabledClass = 'bg-[var(--gr-bg)] text-[var(--gr-fg)]'\nexport const shellDisabledClass = 'bg-[var(--gr-muted)] text-[var(--gr-muted-fg)] cursor-not-allowed'\n\nexport function grTreeSelectClass(options: {\n size: GrInputSize\n state: GrTreeSelectState\n invalid: boolean\n disabled?: boolean\n}): string {\n return [\n sizeClassBySize[options.size],\n 'pr-9',\n options.disabled ? shellDisabledClass : shellEnabledClass,\n options.invalid ? invalidBorderClass : borderClassByState[options.state],\n ].join(' ')\n}\n\nexport const grTreeSelectPanelClass = `${overlayPanelSurfaceClass} overflow-hidden`\n\n/**\n * Строка состояния панели: загрузка и «нет данных». По центру и с двойным\n * воздухом — тот же язык, что у `GrSelect`, `GrAutocomplete` и палитры команд.\n * Слева она расходилась с содержимым дерева на паддинг скроллера.\n */\nexport const grTreeSelectStateClass = 'flex items-center justify-center gap-2 px-3 py-4 text-center text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] text-[var(--gr-muted-fg)]'\n","import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport {\n borderClassByState,\n grTreeSelectPanelClass,\n grTreeSelectStateClass,\n invalidBorderClass,\n shellDisabledClass,\n shellEnabledClass,\n sizeClassBySize,\n} from './grTreeSelectStyles'\n\nexport const grTreeSelectSafelist = [...new Set([\n ...Object.values(sizeClassBySize).flatMap(splitClassTokens),\n ...Object.values(borderClassByState).flatMap(splitClassTokens),\n ...splitClassTokens(invalidBorderClass),\n 'pr-9',\n ...splitClassTokens(shellEnabledClass),\n ...splitClassTokens(shellDisabledClass),\n ...splitClassTokens(grTreeSelectPanelClass),\n ...splitClassTokens(grTreeSelectStateClass),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTreeSelectSafelist } from './safelist'\n\nexport const grTreeSelectConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTreeSelect',\n safelist: grTreeSelectSafelist,\n dependencies: ['GrInput', 'GrTree'],\n})\n"],"mappings":";;;;AAOA,IAAa,kBAA+C;CAC1D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;AAOA,IAAa,WAAwC;CACnD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,oBAAoB;AAEjC,IAAa,qBAAwD;CACnE,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;AACV;;;;;;AAOA,IAAa,qBAAqB;;;;;AAMlC,IAAa,oBAAoB;AACjC,IAAa,qBAAqB;AAElC,SAAgB,kBAAkB,SAKvB;CACT,OAAO;EACL,gBAAgB,QAAQ;EACxB;EACA,QAAQ,WAAW,qBAAqB;EACxC,QAAQ,UAAU,qBAAqB,mBAAmB,QAAQ;CACpE,CAAC,CAAC,KAAK,GAAG;AACZ;AAEA,IAAa,yBAAyB,GAAG,yBAAyB;;;;;;AAOlE,IAAa,yBAAyB;;;AC3DtC,IAAa,uBAAuB,CAAC,mBAAG,IAAI,IAAI;CAC9C,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;CAC7D,GAAG,iBAAiB,kBAAkB;CACtC;CACA,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,sBAAsB;CAI1C,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACrBF,IAAa,qBAAqB,wBAAwB,YAAY,KAAK;CACzE,MAAM;CACN,UAAU;CACV,cAAc,CAAC,WAAW,QAAQ;AACpC,CAAC"}
1
+ {"version":3,"file":"config-BGCyyXiD.js","names":[],"sources":["../../src/components/GrTreeSelect/grTreeSelectStyles.ts","../../src/components/GrTreeSelect/safelist.ts","../../src/components/GrTreeSelect/config.ts"],"sourcesContent":["import type { GrControlState } from '../shared/sizes'\nimport { overlayPanelSurfaceClass } from '../shared/overlayPanelSurface'\n\nimport type { GrInputSize } from '../GrInput'\n\nexport type GrTreeSelectState = GrControlState\n\nexport const sizeClassBySize: Record<GrInputSize, string> = {\n xs: 'h-7 px-2.5 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'h-8 px-3 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: 'h-10 px-3 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n lg: 'h-11 px-4 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n\n/**\n * Горизонтальный отступ из `sizeClassBySize`, но числом: аддоны задают паддинг\n * инлайн-стилем, а он перекрывает класс — значение нужно обеим формам, и\n * расходиться им нельзя.\n */\nexport const paddingX: Record<GrInputSize, string> = {\n xs: '10px',\n sm: '12px',\n md: '12px',\n lg: '16px',\n}\n\n/** Ширина зоны шеврона/крестика справа (`pr-9` в классе триггера). */\nexport const trailingZoneWidth = '2.25rem'\n\nexport const borderClassByState: Record<GrTreeSelectState, string> = {\n default: 'border-[var(--gr-brd)]',\n success: 'border-[var(--gr-success)] focus-visible:ring-[var(--gr-success)]',\n warning: 'border-[var(--gr-warning)] focus-visible:ring-[var(--gr-warning)]',\n danger: 'border-[var(--gr-danger)] focus-visible:ring-[var(--gr-danger)]',\n}\n\n/**\n * Ошибка валидации красится своей ролью, а не декоративным тоном `danger`:\n * `state=\"danger\"` — это подсветка по решению разработчика, `invalid` — вердикт\n * валидации, и тема вправе развести их по цвету.\n */\nexport const invalidBorderClass = 'border-[var(--gr-invalid-brd)] focus-visible:ring-[var(--gr-invalid-ring)]'\n\n/**\n * Disabled красится фоном и цветом текста, а не прозрачностью: `opacity`\n * разбавляет выверенные на AA токены и роняет контраст подписи.\n */\nexport const shellEnabledClass = 'bg-[var(--gr-bg)] text-[var(--gr-fg)]'\nexport const shellDisabledClass = 'bg-[var(--gr-muted)] text-[var(--gr-muted-fg)] cursor-not-allowed'\n\nexport function grTreeSelectClass(options: {\n size: GrInputSize\n state: GrTreeSelectState\n invalid: boolean\n disabled?: boolean\n}): string {\n return [\n sizeClassBySize[options.size],\n 'pr-9',\n options.disabled ? shellDisabledClass : shellEnabledClass,\n options.invalid ? invalidBorderClass : borderClassByState[options.state],\n ].join(' ')\n}\n\nexport const grTreeSelectPanelClass = `${overlayPanelSurfaceClass} overflow-hidden`\n\n/**\n * Строка состояния панели: загрузка и «нет данных». По центру и с двойным\n * воздухом — тот же язык, что у `GrSelect`, `GrAutocomplete` и палитры команд.\n * Слева она расходилась с содержимым дерева на паддинг скроллера.\n */\nexport const grTreeSelectStateClass = 'flex items-center justify-center gap-2 px-3 py-4 text-center text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] text-[var(--gr-muted-fg)]'\n","import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport {\n borderClassByState,\n grTreeSelectPanelClass,\n grTreeSelectStateClass,\n invalidBorderClass,\n shellDisabledClass,\n shellEnabledClass,\n sizeClassBySize,\n} from './grTreeSelectStyles'\n\nexport const grTreeSelectSafelist = [...new Set([\n ...Object.values(sizeClassBySize).flatMap(splitClassTokens),\n ...Object.values(borderClassByState).flatMap(splitClassTokens),\n ...splitClassTokens(invalidBorderClass),\n 'pr-9',\n ...splitClassTokens(shellEnabledClass),\n ...splitClassTokens(shellDisabledClass),\n ...splitClassTokens(grTreeSelectPanelClass),\n ...splitClassTokens(grTreeSelectStateClass),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTreeSelectSafelist } from './safelist'\n\nexport const grTreeSelectConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTreeSelect',\n /**\n * Слой панели задаёт `useFloating` → `floatingLayerZIndex`: имя приходит\n * параметром, а `var()` собирается в рантайме (`overlayStack.ts`). В\n * исходниках `var(--gr-z-*)` не встречается, статический скан их не видит.\n *\n * `gr-z-modal` — из ветки `calc(var(--gr-z-modal) + N)`: панель, открытая\n * внутри модалки, встаёт над ней.\n */\n dynamicTokens: ['gr-z-dropdown', 'gr-z-modal'],\n safelist: grTreeSelectSafelist,\n dependencies: ['GrInput', 'GrTree'],\n})\n"],"mappings":";;;;AAOA,IAAa,kBAA+C;CAC1D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;AAOA,IAAa,WAAwC;CACnD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,oBAAoB;AAEjC,IAAa,qBAAwD;CACnE,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;AACV;;;;;;AAOA,IAAa,qBAAqB;;;;;AAMlC,IAAa,oBAAoB;AACjC,IAAa,qBAAqB;AAElC,SAAgB,kBAAkB,SAKvB;CACT,OAAO;EACL,gBAAgB,QAAQ;EACxB;EACA,QAAQ,WAAW,qBAAqB;EACxC,QAAQ,UAAU,qBAAqB,mBAAmB,QAAQ;CACpE,CAAC,CAAC,KAAK,GAAG;AACZ;AAEA,IAAa,yBAAyB,GAAG,yBAAyB;;;;;;AAOlE,IAAa,yBAAyB;;;AC3DtC,IAAa,uBAAuB,CAAC,mBAAG,IAAI,IAAI;CAC9C,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;CAC7D,GAAG,iBAAiB,kBAAkB;CACtC;CACA,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,sBAAsB;CAI1C,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACrBF,IAAa,qBAAqB,wBAAwB,YAAY,KAAK;CACzE,MAAM;;;;;;;;;CASN,eAAe,CAAC,iBAAiB,YAAY;CAC7C,UAAU;CACV,cAAc,CAAC,WAAW,QAAQ;AACpC,CAAC"}
@@ -85,6 +85,15 @@ var grAutocompleteSafelist = [.../* @__PURE__ */ new Set([
85
85
  //#region src/components/GrAutocomplete/config.ts
86
86
  var grAutocompleteConfig = defineGranularComponent(import.meta.url, {
87
87
  name: "GrAutocomplete",
88
+ /**
89
+ * Слой панели задаёт `useFloating` → `floatingLayerZIndex`: имя приходит
90
+ * параметром, а `var()` собирается в рантайме (`overlayStack.ts`). В
91
+ * исходниках `var(--gr-z-*)` не встречается, статический скан их не видит.
92
+ *
93
+ * `gr-z-modal` — из ветки `calc(var(--gr-z-modal) + N)`: панель, открытая
94
+ * внутри модалки, встаёт над ней.
95
+ */
96
+ dynamicTokens: ["gr-z-dropdown", "gr-z-modal"],
88
97
  dependencies: ["GrChip"],
89
98
  safelist: grAutocompleteSafelist
90
99
  });
@@ -1 +1 @@
1
- {"version":3,"file":"config-CYthTVK2.js","names":[],"sources":["../../src/components/GrAutocomplete/grAutocompleteStyles.ts","../../src/components/GrAutocomplete/safelist.ts","../../src/components/GrAutocomplete/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\nimport { overlayPanelSurfaceClass } from '../shared/overlayPanelSurface'\n\nexport type GrAutocompleteSize = GrComponentSize\n/**\n * Тип значения опции — те же примитивы, что у `GrSelect`: значение должно\n * однозначно восстанавливаться из строкового представления.\n */\nexport type GrAutocompleteValue = string | number\n\n/** Опция автокомплита. Метка — строка, значение параметризуется. */\nexport type GrAutocompleteOption<TValue extends GrAutocompleteValue = string> = {\n value: TValue\n label: string\n disabled?: boolean\n}\nexport type GrAutocompleteModelValue<TValue extends GrAutocompleteValue = string> = TValue | TValue[]\n\n/**\n * Оболочка (визуально повторяет `GrInput`): бордер + focus-ring по `focus-within`,\n * т.к. фокус живёт на вложенном `<input role=\"combobox\">`. Flex-контейнер с\n * `flex-wrap` — чтобы chips в multiple-режиме переносились и коробка росла в высоту.\n */\nexport const autocompleteShellBase = 'relative flex w-full flex-wrap items-center gap-1 rounded-[var(--gr-radius-control)] border text-[var(--gr-fg)] transition-colors duration-[var(--gr-duration-fast)] focus-within:ring-2 focus-within:ring-[var(--gr-ring)]'\n\nexport const autocompleteShellEnabledClass = 'bg-[var(--gr-bg)]'\n\n/**\n * Заблокированная оболочка гасится фоном, а не `opacity` (как `GrInput`):\n * прозрачность разбавляет выверенные на AA токены текста и роняет контраст.\n * Фон взаимоисключающий с `autocompleteShellEnabledClass` — два `bg-*` одной\n * специфичности разрулил бы порядок в сгенерированном CSS, а не порядок в\n * списке классов.\n */\nexport const autocompleteShellDisabledClass = 'bg-[var(--gr-muted)] text-[var(--gr-muted-fg)] cursor-not-allowed'\n\n/**\n * Ошибка валидации красится своей ролью, а не декоративным тоном `danger`:\n * тема вправе развести вердикт валидации и подсветку по решению разработчика.\n */\nexport const invalidShellClass = 'border-[var(--gr-invalid-brd)] focus-within:ring-[var(--gr-invalid-ring)]'\n\n// Размеры совпадают с `GrInput`/`GrSelect` (h → min-h, чтобы multiple мог расти).\nexport const autocompleteSizeClassBySize: Record<GrAutocompleteSize, string> = {\n xs: 'min-h-7 px-2.5 py-1 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'min-h-8 px-3 py-1 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: 'min-h-10 px-3 py-1.5 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n lg: 'min-h-11 px-4 py-2 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n\nexport function autocompleteShellClass(options: {\n size: GrAutocompleteSize\n disabled: boolean\n invalid: boolean\n}): string {\n return [\n autocompleteShellBase,\n autocompleteSizeClassBySize[options.size],\n options.invalid ? invalidShellClass : 'border-[var(--gr-brd)]',\n options.disabled ? autocompleteShellDisabledClass : autocompleteShellEnabledClass,\n ]\n .filter(Boolean)\n .join(' ')\n}\n\n/** Общая подсветка наведения и активной опции. */\nconst autocompleteOptionHighlight = 'bg-[color-mix(in_srgb,var(--gr-muted)_30%,transparent)]'\n\nexport const autocompleteOptionBaseClass = 'w-full rounded-[var(--gr-radius-md)] px-3 py-2 text-left text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]'\nexport const autocompleteOptionActiveClass = autocompleteOptionHighlight\nexport const autocompleteOptionEnabledClass = `hover:${autocompleteOptionHighlight}`\n/** Выключенная опция гасится токеном текста — по той же причине, что и оболочка. */\nexport const autocompleteOptionDisabledClass = 'cursor-not-allowed text-[var(--gr-muted-fg)]'\n\nexport function autocompleteOptionClass(options: { disabled: boolean, active: boolean }): string {\n return [\n autocompleteOptionBaseClass,\n options.disabled ? autocompleteOptionDisabledClass : autocompleteOptionEnabledClass,\n !options.disabled && options.active ? autocompleteOptionActiveClass : '',\n ]\n .filter(Boolean)\n .join(' ')\n}\n\n/**\n * Строка состояния панели: загрузка, «введите ещё N», «ничего не найдено».\n *\n * По центру и с двойным вертикальным воздухом — как у `GrSelect` и палитры команд.\n * Слева, как у опций, она стоять не может: опции лежат внутри listbox с его `p-1`,\n * а состояние — сиблинг, и текст расходился с опциями на 4px.\n */\nexport const autocompleteStateClass = 'flex items-center justify-center gap-2 px-3 py-4 text-center text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] text-[var(--gr-muted-fg)]'\n\n/**\n * Панель списка опций — тот же «язык» поверхностей, что у `GrSelect`\n * (card + бордер + shadow-2 + скругление). Держим локальную копию строки,\n * чтобы не тянуть зависимость от `GrSelect` (компоненты гранулярно независимы).\n */\nexport const autocompletePanelClasses = `${overlayPanelSurfaceClass} overflow-hidden`\n","import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport {\n autocompleteOptionActiveClass,\n autocompleteOptionBaseClass,\n autocompleteOptionDisabledClass,\n autocompleteOptionEnabledClass,\n autocompletePanelClasses,\n autocompleteShellBase,\n autocompleteShellDisabledClass,\n autocompleteShellEnabledClass,\n autocompleteSizeClassBySize,\n autocompleteStateClass,\n invalidShellClass,\n} from './grAutocompleteStyles'\n\n// Всё, что живёт в `grAutocompleteStyles.ts`: и вычисляемые мапы, и строковые\n// литералы оболочки, опций и панели (чип — это `GrBadge`, его safelist приезжает\n// зависимостью). Хелпер уезжает в общий\n// `dist/chunks/`, вне области скана компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grAutocompleteSafelist = [...new Set([\n ...Object.values(autocompleteSizeClassBySize).flatMap(splitClassTokens),\n ...splitClassTokens(autocompleteShellBase),\n ...splitClassTokens(autocompleteShellEnabledClass),\n ...splitClassTokens(autocompleteShellDisabledClass),\n ...splitClassTokens(autocompletePanelClasses),\n ...splitClassTokens(autocompleteOptionBaseClass),\n ...splitClassTokens(autocompleteOptionEnabledClass),\n ...splitClassTokens(autocompleteOptionActiveClass),\n ...splitClassTokens(autocompleteOptionDisabledClass),\n ...splitClassTokens(autocompleteStateClass),\n ...splitClassTokens(invalidShellClass),\n ...splitClassTokens('border-[var(--gr-brd)]'),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grAutocompleteSafelist } from './safelist'\n\nexport const grAutocompleteConfig = defineGranularComponent(import.meta.url, {\n name: 'GrAutocomplete',\n dependencies: ['GrChip'],\n safelist: grAutocompleteSafelist,\n})\n"],"mappings":";;;;;;;;;AAuBA,IAAa,wBAAwB;AAErC,IAAa,gCAAgC;;;;;;;;AAS7C,IAAa,iCAAiC;;;;;AAM9C,IAAa,oBAAoB;AAGjC,IAAa,8BAAkE;CAC7E,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,SAAgB,uBAAuB,SAI5B;CACT,OAAO;EACL;EACA,4BAA4B,QAAQ;EACpC,QAAQ,UAAU,oBAAoB;EACtC,QAAQ,WAAW,iCAAiC;CACtD,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;AAGA,IAAM,8BAA8B;AAEpC,IAAa,8BAA8B;AAC3C,IAAa,gCAAgC;AAC7C,IAAa,iCAAiC,SAAS;;AAEvD,IAAa,kCAAkC;AAE/C,SAAgB,wBAAwB,SAAyD;CAC/F,OAAO;EACL;EACA,QAAQ,WAAW,kCAAkC;EACrD,CAAC,QAAQ,YAAY,QAAQ,SAAS,gCAAgC;CACxE,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;;;;;;;AASA,IAAa,yBAAyB;;;;;;AAOtC,IAAa,2BAA2B,GAAG,yBAAyB;;;AC9EpE,IAAa,yBAAyB,CAAC,mBAAG,IAAI,IAAI;CAChD,GAAG,OAAO,OAAO,2BAA2B,CAAC,CAAC,QAAQ,gBAAgB;CACtE,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,6BAA6B;CACjD,GAAG,iBAAiB,8BAA8B;CAClD,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,8BAA8B;CAClD,GAAG,iBAAiB,6BAA6B;CACjD,GAAG,iBAAiB,+BAA+B;CACnD,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,wBAAwB;CAI5C,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACjCF,IAAa,uBAAuB,wBAAwB,YAAY,KAAK;CAC3E,MAAM;CACN,cAAc,CAAC,QAAQ;CACvB,UAAU;AACZ,CAAC"}
1
+ {"version":3,"file":"config-BHLMTJaR.js","names":[],"sources":["../../src/components/GrAutocomplete/grAutocompleteStyles.ts","../../src/components/GrAutocomplete/safelist.ts","../../src/components/GrAutocomplete/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\nimport { overlayPanelSurfaceClass } from '../shared/overlayPanelSurface'\n\nexport type GrAutocompleteSize = GrComponentSize\n/**\n * Тип значения опции — те же примитивы, что у `GrSelect`: значение должно\n * однозначно восстанавливаться из строкового представления.\n */\nexport type GrAutocompleteValue = string | number\n\n/** Опция автокомплита. Метка — строка, значение параметризуется. */\nexport type GrAutocompleteOption<TValue extends GrAutocompleteValue = string> = {\n value: TValue\n label: string\n disabled?: boolean\n}\nexport type GrAutocompleteModelValue<TValue extends GrAutocompleteValue = string> = TValue | TValue[]\n\n/**\n * Оболочка (визуально повторяет `GrInput`): бордер + focus-ring по `focus-within`,\n * т.к. фокус живёт на вложенном `<input role=\"combobox\">`. Flex-контейнер с\n * `flex-wrap` — чтобы chips в multiple-режиме переносились и коробка росла в высоту.\n */\nexport const autocompleteShellBase = 'relative flex w-full flex-wrap items-center gap-1 rounded-[var(--gr-radius-control)] border text-[var(--gr-fg)] transition-colors duration-[var(--gr-duration-fast)] focus-within:ring-2 focus-within:ring-[var(--gr-ring)]'\n\nexport const autocompleteShellEnabledClass = 'bg-[var(--gr-bg)]'\n\n/**\n * Заблокированная оболочка гасится фоном, а не `opacity` (как `GrInput`):\n * прозрачность разбавляет выверенные на AA токены текста и роняет контраст.\n * Фон взаимоисключающий с `autocompleteShellEnabledClass` — два `bg-*` одной\n * специфичности разрулил бы порядок в сгенерированном CSS, а не порядок в\n * списке классов.\n */\nexport const autocompleteShellDisabledClass = 'bg-[var(--gr-muted)] text-[var(--gr-muted-fg)] cursor-not-allowed'\n\n/**\n * Ошибка валидации красится своей ролью, а не декоративным тоном `danger`:\n * тема вправе развести вердикт валидации и подсветку по решению разработчика.\n */\nexport const invalidShellClass = 'border-[var(--gr-invalid-brd)] focus-within:ring-[var(--gr-invalid-ring)]'\n\n// Размеры совпадают с `GrInput`/`GrSelect` (h → min-h, чтобы multiple мог расти).\nexport const autocompleteSizeClassBySize: Record<GrAutocompleteSize, string> = {\n xs: 'min-h-7 px-2.5 py-1 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n sm: 'min-h-8 px-3 py-1 text-[length:var(--gr-control-text-sm)] leading-[var(--gr-control-leading-sm)]',\n md: 'min-h-10 px-3 py-1.5 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n lg: 'min-h-11 px-4 py-2 text-[length:var(--gr-control-text-lg)] leading-[var(--gr-control-leading-lg)]',\n}\n\nexport function autocompleteShellClass(options: {\n size: GrAutocompleteSize\n disabled: boolean\n invalid: boolean\n}): string {\n return [\n autocompleteShellBase,\n autocompleteSizeClassBySize[options.size],\n options.invalid ? invalidShellClass : 'border-[var(--gr-brd)]',\n options.disabled ? autocompleteShellDisabledClass : autocompleteShellEnabledClass,\n ]\n .filter(Boolean)\n .join(' ')\n}\n\n/** Общая подсветка наведения и активной опции. */\nconst autocompleteOptionHighlight = 'bg-[color-mix(in_srgb,var(--gr-muted)_30%,transparent)]'\n\nexport const autocompleteOptionBaseClass = 'w-full rounded-[var(--gr-radius-md)] px-3 py-2 text-left text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]'\nexport const autocompleteOptionActiveClass = autocompleteOptionHighlight\nexport const autocompleteOptionEnabledClass = `hover:${autocompleteOptionHighlight}`\n/** Выключенная опция гасится токеном текста — по той же причине, что и оболочка. */\nexport const autocompleteOptionDisabledClass = 'cursor-not-allowed text-[var(--gr-muted-fg)]'\n\nexport function autocompleteOptionClass(options: { disabled: boolean, active: boolean }): string {\n return [\n autocompleteOptionBaseClass,\n options.disabled ? autocompleteOptionDisabledClass : autocompleteOptionEnabledClass,\n !options.disabled && options.active ? autocompleteOptionActiveClass : '',\n ]\n .filter(Boolean)\n .join(' ')\n}\n\n/**\n * Строка состояния панели: загрузка, «введите ещё N», «ничего не найдено».\n *\n * По центру и с двойным вертикальным воздухом — как у `GrSelect` и палитры команд.\n * Слева, как у опций, она стоять не может: опции лежат внутри listbox с его `p-1`,\n * а состояние — сиблинг, и текст расходился с опциями на 4px.\n */\nexport const autocompleteStateClass = 'flex items-center justify-center gap-2 px-3 py-4 text-center text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] text-[var(--gr-muted-fg)]'\n\n/**\n * Панель списка опций — тот же «язык» поверхностей, что у `GrSelect`\n * (card + бордер + shadow-2 + скругление). Держим локальную копию строки,\n * чтобы не тянуть зависимость от `GrSelect` (компоненты гранулярно независимы).\n */\nexport const autocompletePanelClasses = `${overlayPanelSurfaceClass} overflow-hidden`\n","import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport {\n autocompleteOptionActiveClass,\n autocompleteOptionBaseClass,\n autocompleteOptionDisabledClass,\n autocompleteOptionEnabledClass,\n autocompletePanelClasses,\n autocompleteShellBase,\n autocompleteShellDisabledClass,\n autocompleteShellEnabledClass,\n autocompleteSizeClassBySize,\n autocompleteStateClass,\n invalidShellClass,\n} from './grAutocompleteStyles'\n\n// Всё, что живёт в `grAutocompleteStyles.ts`: и вычисляемые мапы, и строковые\n// литералы оболочки, опций и панели (чип — это `GrBadge`, его safelist приезжает\n// зависимостью). Хелпер уезжает в общий\n// `dist/chunks/`, вне области скана компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grAutocompleteSafelist = [...new Set([\n ...Object.values(autocompleteSizeClassBySize).flatMap(splitClassTokens),\n ...splitClassTokens(autocompleteShellBase),\n ...splitClassTokens(autocompleteShellEnabledClass),\n ...splitClassTokens(autocompleteShellDisabledClass),\n ...splitClassTokens(autocompletePanelClasses),\n ...splitClassTokens(autocompleteOptionBaseClass),\n ...splitClassTokens(autocompleteOptionEnabledClass),\n ...splitClassTokens(autocompleteOptionActiveClass),\n ...splitClassTokens(autocompleteOptionDisabledClass),\n ...splitClassTokens(autocompleteStateClass),\n ...splitClassTokens(invalidShellClass),\n ...splitClassTokens('border-[var(--gr-brd)]'),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grAutocompleteSafelist } from './safelist'\n\nexport const grAutocompleteConfig = defineGranularComponent(import.meta.url, {\n name: 'GrAutocomplete',\n /**\n * Слой панели задаёт `useFloating` → `floatingLayerZIndex`: имя приходит\n * параметром, а `var()` собирается в рантайме (`overlayStack.ts`). В\n * исходниках `var(--gr-z-*)` не встречается, статический скан их не видит.\n *\n * `gr-z-modal` — из ветки `calc(var(--gr-z-modal) + N)`: панель, открытая\n * внутри модалки, встаёт над ней.\n */\n dynamicTokens: ['gr-z-dropdown', 'gr-z-modal'],\n dependencies: ['GrChip'],\n safelist: grAutocompleteSafelist,\n})\n"],"mappings":";;;;;;;;;AAuBA,IAAa,wBAAwB;AAErC,IAAa,gCAAgC;;;;;;;;AAS7C,IAAa,iCAAiC;;;;;AAM9C,IAAa,oBAAoB;AAGjC,IAAa,8BAAkE;CAC7E,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,SAAgB,uBAAuB,SAI5B;CACT,OAAO;EACL;EACA,4BAA4B,QAAQ;EACpC,QAAQ,UAAU,oBAAoB;EACtC,QAAQ,WAAW,iCAAiC;CACtD,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;AAGA,IAAM,8BAA8B;AAEpC,IAAa,8BAA8B;AAC3C,IAAa,gCAAgC;AAC7C,IAAa,iCAAiC,SAAS;;AAEvD,IAAa,kCAAkC;AAE/C,SAAgB,wBAAwB,SAAyD;CAC/F,OAAO;EACL;EACA,QAAQ,WAAW,kCAAkC;EACrD,CAAC,QAAQ,YAAY,QAAQ,SAAS,gCAAgC;CACxE,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;;;;;;;AASA,IAAa,yBAAyB;;;;;;AAOtC,IAAa,2BAA2B,GAAG,yBAAyB;;;AC9EpE,IAAa,yBAAyB,CAAC,mBAAG,IAAI,IAAI;CAChD,GAAG,OAAO,OAAO,2BAA2B,CAAC,CAAC,QAAQ,gBAAgB;CACtE,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,6BAA6B;CACjD,GAAG,iBAAiB,8BAA8B;CAClD,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,8BAA8B;CAClD,GAAG,iBAAiB,6BAA6B;CACjD,GAAG,iBAAiB,+BAA+B;CACnD,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,wBAAwB;CAI5C,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACjCF,IAAa,uBAAuB,wBAAwB,YAAY,KAAK;CAC3E,MAAM;;;;;;;;;CASN,eAAe,CAAC,iBAAiB,YAAY;CAC7C,cAAc,CAAC,QAAQ;CACvB,UAAU;AACZ,CAAC"}
@@ -119,6 +119,12 @@ var grDrawerSafelist = [.../* @__PURE__ */ new Set([
119
119
  //#region src/components/GrDrawer/config.ts
120
120
  var grDrawerConfig = defineGranularComponent(import.meta.url, {
121
121
  name: "GrDrawer",
122
+ /**
123
+ * Высоту слоя задаёт `useModalOverlay` → `modalLayerZIndex`: имя приходит
124
+ * параметром (дефолт живёт в `overlayStack.ts`), а `var()` собирается в
125
+ * рантайме. Статический скан такое не видит.
126
+ */
127
+ dynamicTokens: ["gr-z-modal"],
122
128
  dependencies: ["GrButton", "GrIcon"],
123
129
  safelist: grDrawerSafelist
124
130
  });
@@ -1 +1 @@
1
- {"version":3,"file":"config-ChPg-BQv.js","names":[],"sources":["../../src/components/GrDrawer/grDrawerStyles.ts","../../src/components/GrDrawer/safelist.ts","../../src/components/GrDrawer/config.ts"],"sourcesContent":["import type { GrOverlaySize } from '../shared/sizes'\n\nexport type GrDrawerSide = 'left' | 'right' | 'top' | 'bottom'\nexport type GrDrawerSize = GrOverlaySize\n\n/** Ось, по которой панель выезжает и по которой считается её размер. */\nexport type GrDrawerAxis = 'horizontal' | 'vertical'\n\nexport function grDrawerAxis(side: GrDrawerSide): GrDrawerAxis {\n return side === 'left' || side === 'right' ? 'horizontal' : 'vertical'\n}\n\n/**\n * Настройка паддингов и рамки секции. Структурно совпадает с\n * `GrDialogSectionConfig` намеренно: потребитель не должен переучиваться при\n * переходе между двумя оверлеями библиотеки. Свой тип, а не импорт из\n * `GrDialog`, — чтобы не тянуть чужой чанк ради двух полей.\n */\nexport interface GrDrawerSectionConfig {\n paddingX?: string\n paddingY?: string\n bordered?: boolean\n}\n\nexport const DEFAULT_GR_DRAWER_HEADER_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-4',\n bordered: true,\n}\n\nexport const DEFAULT_GR_DRAWER_BODY_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-5',\n bordered: false,\n}\n\nexport const DEFAULT_GR_DRAWER_FOOTER_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-4',\n bordered: true,\n}\n\nexport function resolveGrDrawerSectionConfig(\n config: GrDrawerSectionConfig | undefined,\n defaults: Required<GrDrawerSectionConfig>,\n): Required<GrDrawerSectionConfig> {\n return {\n paddingX: config?.paddingX ?? defaults.paddingX,\n paddingY: config?.paddingY ?? defaults.paddingY,\n bordered: config?.bordered ?? defaults.bordered,\n }\n}\n\n/** Слой модального класса — тот же, что у `GrModal`: бэкдроп, фокус, scroll-lock. */\nexport const rootClass = 'fixed inset-0 z-[var(--gr-z-modal)]'\n\n/**\n * Немодальная панель обязана пропускать клики мимо себя: корень растянут на весь\n * экран ради позиционирования, и без этого «немодальный» режим гасил бы всю\n * страницу — ровно то, чего он должен избегать. Панель кликабельность себе\n * возвращает.\n */\nexport const rootPassThroughClass = 'pointer-events-none'\nexport const panelInteractiveClass = 'pointer-events-auto'\n\nexport const overlayClass = 'fixed inset-0 bg-[var(--gr-overlay-bg)]'\n\n/** Ширина панели для боковых сторон. */\nexport const panelWidthBySize: Record<GrDrawerSize, string> = {\n sm: 'w-[360px] max-w-[90vw]',\n md: 'w-[420px] max-w-[92vw]',\n lg: 'w-[560px] max-w-[94vw]',\n xl: 'w-[720px] max-w-[96vw]',\n full: 'w-[100vw]',\n}\n\n/** Высота панели для верхней и нижней сторон — та же шкала, но по своей оси. */\nexport const panelHeightBySize: Record<GrDrawerSize, string> = {\n sm: 'h-[280px] max-h-[90vh]',\n md: 'h-[360px] max-h-[92vh]',\n lg: 'h-[480px] max-h-[94vh]',\n xl: 'h-[640px] max-h-[96vh]',\n full: 'h-[100vh]',\n}\n\nexport const panelSizeByAxis: Record<GrDrawerAxis, Record<GrDrawerSize, string>> = {\n horizontal: panelWidthBySize,\n vertical: panelHeightBySize,\n}\n\n/**\n * Позиция панели. Растяжка по поперечной оси живёт здесь же: у боковой панели\n * это `inset-y-0`, у верхней и нижней — `inset-x-0`, и держать их в разметке\n * значило бы иметь в шаблоне половину стороны.\n */\nexport const panelSideClass: Record<GrDrawerSide, string> = {\n left: 'inset-y-0 left-0 border-r',\n right: 'inset-y-0 right-0 border-l',\n top: 'inset-x-0 top-0 border-b',\n bottom: 'inset-x-0 bottom-0 border-t',\n}\n\nexport const panelTransitionClass: Record<GrDrawerSide, string> = {\n left: '-translate-x-full',\n right: 'translate-x-full',\n top: '-translate-y-full',\n bottom: 'translate-y-full',\n}\n\nexport const panelBaseClass = 'fixed flex flex-col border-[var(--gr-brd)] bg-[var(--gr-card)] text-[var(--gr-card-fg)] shadow-[var(--gr-shadow-2)] outline-none'\n\nexport const headerBorderClass = 'border-b border-[var(--gr-brd)]'\nexport const footerBorderClass = 'border-t border-[var(--gr-brd)]'\nexport const titleClass = 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] font-700 min-w-0 truncate'\n\n/** Скрытый заголовок: имя слоя есть даже там, где шапки на экране нет. */\nexport const srOnlyTitleClass = 'sr-only'\n\n// Произвольный размер отменяет размерный класс: иначе `w-[420px]` из шкалы\n// спорил бы с инлайновым стилем панели.\nexport function grDrawerPanelClass(options: {\n side: GrDrawerSide\n size: GrDrawerSize\n hasCustomLength: boolean\n}): string {\n const axis = grDrawerAxis(options.side)\n\n return [\n panelBaseClass,\n panelInteractiveClass,\n panelSideClass[options.side],\n options.hasCustomLength ? '' : panelSizeByAxis[axis][options.size],\n ].filter(Boolean).join(' ')\n}\n\nexport function grDrawerPanelEnterFrom(side: GrDrawerSide): string {\n return panelTransitionClass[side]\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n DEFAULT_GR_DRAWER_BODY_CONFIG,\n DEFAULT_GR_DRAWER_FOOTER_CONFIG,\n DEFAULT_GR_DRAWER_HEADER_CONFIG,\n footerBorderClass,\n headerBorderClass,\n overlayClass,\n panelBaseClass,\n panelHeightBySize,\n panelInteractiveClass,\n panelSideClass,\n panelTransitionClass,\n panelWidthBySize,\n rootClass,\n rootPassThroughClass,\n srOnlyTitleClass,\n titleClass,\n} from './grDrawerStyles'\n\n// И динамические токены (`side`/`size`), и литералы отделки панели: `grDrawerStyles.ts`\n// бандлер волен вынести в общий `dist/chunks/`, вне области скана компонента —\n// гейт `src/__tests__/safelist.test.ts`.\nconst sectionDefaults = [\n DEFAULT_GR_DRAWER_HEADER_CONFIG,\n DEFAULT_GR_DRAWER_BODY_CONFIG,\n DEFAULT_GR_DRAWER_FOOTER_CONFIG,\n].flatMap(config => [config.paddingX, config.paddingY])\n\nexport const grDrawerSafelist = [...new Set([\n ...Object.values(panelSideClass).flatMap(splitClassTokens),\n ...Object.values(panelWidthBySize).flatMap(splitClassTokens),\n ...Object.values(panelHeightBySize).flatMap(splitClassTokens),\n ...Object.values(panelTransitionClass).flatMap(splitClassTokens),\n ...splitClassTokens(panelBaseClass),\n ...splitClassTokens(panelInteractiveClass),\n ...splitClassTokens(rootClass),\n ...splitClassTokens(rootPassThroughClass),\n ...splitClassTokens(overlayClass),\n ...splitClassTokens(headerBorderClass),\n ...splitClassTokens(footerBorderClass),\n ...splitClassTokens(titleClass),\n ...splitClassTokens(srOnlyTitleClass),\n ...sectionDefaults.flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\nimport { grDrawerSafelist } from './safelist'\n\nexport const grDrawerConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDrawer',\n dependencies: ['GrButton', 'GrIcon'],\n safelist: grDrawerSafelist,\n})\n"],"mappings":";;;AAQA,SAAgB,aAAa,MAAkC;CAC7D,OAAO,SAAS,UAAU,SAAS,UAAU,eAAe;AAC9D;AAcA,IAAa,kCAAmE;CAC9E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,IAAa,gCAAiE;CAC5E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,IAAa,kCAAmE;CAC9E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,SAAgB,6BACd,QACA,UACiC;CACjC,OAAO;EACL,UAAU,QAAQ,YAAY,SAAS;EACvC,UAAU,QAAQ,YAAY,SAAS;EACvC,UAAU,QAAQ,YAAY,SAAS;CACzC;AACF;;AAGA,IAAa,YAAY;;;;;;;AAQzB,IAAa,uBAAuB;AACpC,IAAa,wBAAwB;AAErC,IAAa,eAAe;;AAG5B,IAAa,mBAAiD;CAC5D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;AACR;;AAGA,IAAa,oBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;AACR;AAEA,IAAa,kBAAsE;CACjF,YAAY;CACZ,UAAU;AACZ;;;;;;AAOA,IAAa,iBAA+C;CAC1D,MAAM;CACN,OAAO;CACP,KAAK;CACL,QAAQ;AACV;AAEA,IAAa,uBAAqD;CAChE,MAAM;CACN,OAAO;CACP,KAAK;CACL,QAAQ;AACV;AAEA,IAAa,iBAAiB;AAE9B,IAAa,oBAAoB;AACjC,IAAa,oBAAoB;AACjC,IAAa,aAAa;;AAG1B,IAAa,mBAAmB;AAIhC,SAAgB,mBAAmB,SAIxB;CACT,MAAM,OAAO,aAAa,QAAQ,IAAI;CAEtC,OAAO;EACL;EACA;EACA,eAAe,QAAQ;EACvB,QAAQ,kBAAkB,KAAK,gBAAgB,KAAK,CAAC,QAAQ;CAC/D,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;AAEA,SAAgB,uBAAuB,MAA4B;CACjE,OAAO,qBAAqB;AAC9B;;;AClHA,IAAM,kBAAkB;CACtB;CACA;CACA;AACF,CAAC,CAAC,SAAQ,WAAU,CAAC,OAAO,UAAU,OAAO,QAAQ,CAAC;AAEtD,IAAa,mBAAmB,CAAC,mBAAG,IAAI,IAAI;CAC1C,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,gBAAgB,CAAC,CAAC,QAAQ,gBAAgB;CAC3D,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;CAC/D,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,gBAAgB,QAAQ,gBAAgB;AAC7C,CAAC,CAAC;;;ACzCF,IAAa,iBAAiB,wBAAwB,YAAY,KAAK;CACrE,MAAM;CACN,cAAc,CAAC,YAAY,QAAQ;CACnC,UAAU;AACZ,CAAC"}
1
+ {"version":3,"file":"config-CviN-0d4.js","names":[],"sources":["../../src/components/GrDrawer/grDrawerStyles.ts","../../src/components/GrDrawer/safelist.ts","../../src/components/GrDrawer/config.ts"],"sourcesContent":["import type { GrOverlaySize } from '../shared/sizes'\n\nexport type GrDrawerSide = 'left' | 'right' | 'top' | 'bottom'\nexport type GrDrawerSize = GrOverlaySize\n\n/** Ось, по которой панель выезжает и по которой считается её размер. */\nexport type GrDrawerAxis = 'horizontal' | 'vertical'\n\nexport function grDrawerAxis(side: GrDrawerSide): GrDrawerAxis {\n return side === 'left' || side === 'right' ? 'horizontal' : 'vertical'\n}\n\n/**\n * Настройка паддингов и рамки секции. Структурно совпадает с\n * `GrDialogSectionConfig` намеренно: потребитель не должен переучиваться при\n * переходе между двумя оверлеями библиотеки. Свой тип, а не импорт из\n * `GrDialog`, — чтобы не тянуть чужой чанк ради двух полей.\n */\nexport interface GrDrawerSectionConfig {\n paddingX?: string\n paddingY?: string\n bordered?: boolean\n}\n\nexport const DEFAULT_GR_DRAWER_HEADER_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-4',\n bordered: true,\n}\n\nexport const DEFAULT_GR_DRAWER_BODY_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-5',\n bordered: false,\n}\n\nexport const DEFAULT_GR_DRAWER_FOOTER_CONFIG: Required<GrDrawerSectionConfig> = {\n paddingX: 'px-5',\n paddingY: 'py-4',\n bordered: true,\n}\n\nexport function resolveGrDrawerSectionConfig(\n config: GrDrawerSectionConfig | undefined,\n defaults: Required<GrDrawerSectionConfig>,\n): Required<GrDrawerSectionConfig> {\n return {\n paddingX: config?.paddingX ?? defaults.paddingX,\n paddingY: config?.paddingY ?? defaults.paddingY,\n bordered: config?.bordered ?? defaults.bordered,\n }\n}\n\n/** Слой модального класса — тот же, что у `GrModal`: бэкдроп, фокус, scroll-lock. */\nexport const rootClass = 'fixed inset-0 z-[var(--gr-z-modal)]'\n\n/**\n * Немодальная панель обязана пропускать клики мимо себя: корень растянут на весь\n * экран ради позиционирования, и без этого «немодальный» режим гасил бы всю\n * страницу — ровно то, чего он должен избегать. Панель кликабельность себе\n * возвращает.\n */\nexport const rootPassThroughClass = 'pointer-events-none'\nexport const panelInteractiveClass = 'pointer-events-auto'\n\nexport const overlayClass = 'fixed inset-0 bg-[var(--gr-overlay-bg)]'\n\n/** Ширина панели для боковых сторон. */\nexport const panelWidthBySize: Record<GrDrawerSize, string> = {\n sm: 'w-[360px] max-w-[90vw]',\n md: 'w-[420px] max-w-[92vw]',\n lg: 'w-[560px] max-w-[94vw]',\n xl: 'w-[720px] max-w-[96vw]',\n full: 'w-[100vw]',\n}\n\n/** Высота панели для верхней и нижней сторон — та же шкала, но по своей оси. */\nexport const panelHeightBySize: Record<GrDrawerSize, string> = {\n sm: 'h-[280px] max-h-[90vh]',\n md: 'h-[360px] max-h-[92vh]',\n lg: 'h-[480px] max-h-[94vh]',\n xl: 'h-[640px] max-h-[96vh]',\n full: 'h-[100vh]',\n}\n\nexport const panelSizeByAxis: Record<GrDrawerAxis, Record<GrDrawerSize, string>> = {\n horizontal: panelWidthBySize,\n vertical: panelHeightBySize,\n}\n\n/**\n * Позиция панели. Растяжка по поперечной оси живёт здесь же: у боковой панели\n * это `inset-y-0`, у верхней и нижней — `inset-x-0`, и держать их в разметке\n * значило бы иметь в шаблоне половину стороны.\n */\nexport const panelSideClass: Record<GrDrawerSide, string> = {\n left: 'inset-y-0 left-0 border-r',\n right: 'inset-y-0 right-0 border-l',\n top: 'inset-x-0 top-0 border-b',\n bottom: 'inset-x-0 bottom-0 border-t',\n}\n\nexport const panelTransitionClass: Record<GrDrawerSide, string> = {\n left: '-translate-x-full',\n right: 'translate-x-full',\n top: '-translate-y-full',\n bottom: 'translate-y-full',\n}\n\nexport const panelBaseClass = 'fixed flex flex-col border-[var(--gr-brd)] bg-[var(--gr-card)] text-[var(--gr-card-fg)] shadow-[var(--gr-shadow-2)] outline-none'\n\nexport const headerBorderClass = 'border-b border-[var(--gr-brd)]'\nexport const footerBorderClass = 'border-t border-[var(--gr-brd)]'\nexport const titleClass = 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] font-700 min-w-0 truncate'\n\n/** Скрытый заголовок: имя слоя есть даже там, где шапки на экране нет. */\nexport const srOnlyTitleClass = 'sr-only'\n\n// Произвольный размер отменяет размерный класс: иначе `w-[420px]` из шкалы\n// спорил бы с инлайновым стилем панели.\nexport function grDrawerPanelClass(options: {\n side: GrDrawerSide\n size: GrDrawerSize\n hasCustomLength: boolean\n}): string {\n const axis = grDrawerAxis(options.side)\n\n return [\n panelBaseClass,\n panelInteractiveClass,\n panelSideClass[options.side],\n options.hasCustomLength ? '' : panelSizeByAxis[axis][options.size],\n ].filter(Boolean).join(' ')\n}\n\nexport function grDrawerPanelEnterFrom(side: GrDrawerSide): string {\n return panelTransitionClass[side]\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n DEFAULT_GR_DRAWER_BODY_CONFIG,\n DEFAULT_GR_DRAWER_FOOTER_CONFIG,\n DEFAULT_GR_DRAWER_HEADER_CONFIG,\n footerBorderClass,\n headerBorderClass,\n overlayClass,\n panelBaseClass,\n panelHeightBySize,\n panelInteractiveClass,\n panelSideClass,\n panelTransitionClass,\n panelWidthBySize,\n rootClass,\n rootPassThroughClass,\n srOnlyTitleClass,\n titleClass,\n} from './grDrawerStyles'\n\n// И динамические токены (`side`/`size`), и литералы отделки панели: `grDrawerStyles.ts`\n// бандлер волен вынести в общий `dist/chunks/`, вне области скана компонента —\n// гейт `src/__tests__/safelist.test.ts`.\nconst sectionDefaults = [\n DEFAULT_GR_DRAWER_HEADER_CONFIG,\n DEFAULT_GR_DRAWER_BODY_CONFIG,\n DEFAULT_GR_DRAWER_FOOTER_CONFIG,\n].flatMap(config => [config.paddingX, config.paddingY])\n\nexport const grDrawerSafelist = [...new Set([\n ...Object.values(panelSideClass).flatMap(splitClassTokens),\n ...Object.values(panelWidthBySize).flatMap(splitClassTokens),\n ...Object.values(panelHeightBySize).flatMap(splitClassTokens),\n ...Object.values(panelTransitionClass).flatMap(splitClassTokens),\n ...splitClassTokens(panelBaseClass),\n ...splitClassTokens(panelInteractiveClass),\n ...splitClassTokens(rootClass),\n ...splitClassTokens(rootPassThroughClass),\n ...splitClassTokens(overlayClass),\n ...splitClassTokens(headerBorderClass),\n ...splitClassTokens(footerBorderClass),\n ...splitClassTokens(titleClass),\n ...splitClassTokens(srOnlyTitleClass),\n ...sectionDefaults.flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\nimport { grDrawerSafelist } from './safelist'\n\nexport const grDrawerConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDrawer',\n /**\n * Высоту слоя задаёт `useModalOverlay` → `modalLayerZIndex`: имя приходит\n * параметром (дефолт живёт в `overlayStack.ts`), а `var()` собирается в\n * рантайме. Статический скан такое не видит.\n */\n dynamicTokens: ['gr-z-modal'],\n dependencies: ['GrButton', 'GrIcon'],\n safelist: grDrawerSafelist,\n})\n"],"mappings":";;;AAQA,SAAgB,aAAa,MAAkC;CAC7D,OAAO,SAAS,UAAU,SAAS,UAAU,eAAe;AAC9D;AAcA,IAAa,kCAAmE;CAC9E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,IAAa,gCAAiE;CAC5E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,IAAa,kCAAmE;CAC9E,UAAU;CACV,UAAU;CACV,UAAU;AACZ;AAEA,SAAgB,6BACd,QACA,UACiC;CACjC,OAAO;EACL,UAAU,QAAQ,YAAY,SAAS;EACvC,UAAU,QAAQ,YAAY,SAAS;EACvC,UAAU,QAAQ,YAAY,SAAS;CACzC;AACF;;AAGA,IAAa,YAAY;;;;;;;AAQzB,IAAa,uBAAuB;AACpC,IAAa,wBAAwB;AAErC,IAAa,eAAe;;AAG5B,IAAa,mBAAiD;CAC5D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;AACR;;AAGA,IAAa,oBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;AACR;AAEA,IAAa,kBAAsE;CACjF,YAAY;CACZ,UAAU;AACZ;;;;;;AAOA,IAAa,iBAA+C;CAC1D,MAAM;CACN,OAAO;CACP,KAAK;CACL,QAAQ;AACV;AAEA,IAAa,uBAAqD;CAChE,MAAM;CACN,OAAO;CACP,KAAK;CACL,QAAQ;AACV;AAEA,IAAa,iBAAiB;AAE9B,IAAa,oBAAoB;AACjC,IAAa,oBAAoB;AACjC,IAAa,aAAa;;AAG1B,IAAa,mBAAmB;AAIhC,SAAgB,mBAAmB,SAIxB;CACT,MAAM,OAAO,aAAa,QAAQ,IAAI;CAEtC,OAAO;EACL;EACA;EACA,eAAe,QAAQ;EACvB,QAAQ,kBAAkB,KAAK,gBAAgB,KAAK,CAAC,QAAQ;CAC/D,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;AAEA,SAAgB,uBAAuB,MAA4B;CACjE,OAAO,qBAAqB;AAC9B;;;AClHA,IAAM,kBAAkB;CACtB;CACA;CACA;AACF,CAAC,CAAC,SAAQ,WAAU,CAAC,OAAO,UAAU,OAAO,QAAQ,CAAC;AAEtD,IAAa,mBAAmB,CAAC,mBAAG,IAAI,IAAI;CAC1C,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,gBAAgB,CAAC,CAAC,QAAQ,gBAAgB;CAC3D,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;CAC/D,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,gBAAgB,QAAQ,gBAAgB;AAC7C,CAAC,CAAC;;;ACzCF,IAAa,iBAAiB,wBAAwB,YAAY,KAAK;CACrE,MAAM;;;;;;CAMN,eAAe,CAAC,YAAY;CAC5B,cAAc,CAAC,YAAY,QAAQ;CACnC,UAAU;AACZ,CAAC"}
@@ -39,6 +39,12 @@ var grModalSafelist = [.../* @__PURE__ */ new Set([
39
39
  //#region src/components/GrModal/config.ts
40
40
  var grModalConfig = defineGranularComponent(import.meta.url, {
41
41
  name: "GrModal",
42
+ /**
43
+ * Высоту слоя задаёт `useModalOverlay` → `modalLayerZIndex`: имя приходит
44
+ * параметром (дефолт живёт в `overlayStack.ts`), а `var()` собирается в
45
+ * рантайме. Статический скан такое не видит.
46
+ */
47
+ dynamicTokens: ["gr-z-modal"],
42
48
  safelist: grModalSafelist
43
49
  });
44
50
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"config-DBi0GVce.js","names":[],"sources":["../../src/components/GrModal/safelist.ts","../../src/components/GrModal/config.ts"],"sourcesContent":["import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport {\n layoutByScroll,\n overlay,\n overlayTransition,\n panelBase,\n panelBodyScrollClass,\n panelHeightBySize,\n panelSectionClass,\n panelOverflowByScroll,\n panelRadiusBySize,\n panelTransition,\n panelWidthBySize,\n root,\n rootClosingClass,\n shellBase,\n shellByScroll,\n shellPaddingBySize,\n} from './grModalStyles'\n\ntype GrModalClassTokens = {\n root: readonly string[]\n shell: readonly string[]\n layout: readonly string[]\n overlay: readonly string[]\n overlayTransition: readonly string[]\n panelBase: readonly string[]\n panelTransition: readonly string[]\n panelWidth: readonly string[]\n panelRadius: readonly string[]\n panelHeight: readonly string[]\n}\n\nexport const grModalClassTokens: GrModalClassTokens = {\n root: [...splitClassTokens(root), ...splitClassTokens(rootClosingClass)],\n shell: [\n ...splitClassTokens(shellBase),\n ...Object.values(shellPaddingBySize).flatMap(splitClassTokens),\n ...Object.values(shellByScroll).flatMap(splitClassTokens),\n ],\n layout: Object.values(layoutByScroll).flatMap(splitClassTokens),\n overlay: splitClassTokens(overlay),\n overlayTransition: flattenTransitionTokens(overlayTransition),\n panelBase: [\n ...splitClassTokens(panelBase),\n ...Object.values(panelOverflowByScroll).flatMap(splitClassTokens),\n ...splitClassTokens(panelBodyScrollClass),\n ...splitClassTokens(panelSectionClass),\n ],\n panelTransition: flattenTransitionTokens(panelTransition),\n panelWidth: Object.values(panelWidthBySize).flatMap(splitClassTokens),\n panelRadius: Object.values(panelRadiusBySize).flatMap(splitClassTokens),\n panelHeight: Object.values(panelHeightBySize).flatMap(v => splitClassTokens(v ?? '')),\n}\n\nexport const grModalSafelist = [...new Set([\n ...grModalClassTokens.root,\n ...grModalClassTokens.shell,\n ...grModalClassTokens.layout,\n ...grModalClassTokens.overlay,\n ...grModalClassTokens.overlayTransition,\n ...grModalClassTokens.panelBase,\n ...grModalClassTokens.panelTransition,\n ...grModalClassTokens.panelWidth,\n ...grModalClassTokens.panelRadius,\n ...grModalClassTokens.panelHeight,\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grModalSafelist } from './safelist'\n\nexport const grModalConfig = defineGranularComponent(import.meta.url, {\n name: 'GrModal',\n safelist: grModalSafelist,\n})\n"],"mappings":";;;;AAiCA,IAAa,qBAAyC;CACpD,MAAM,CAAC,GAAG,iBAAiB,IAAI,GAAG,GAAG,iBAAiB,gBAAgB,CAAC;CACvE,OAAO;EACL,GAAG,iBAAiB,SAAS;EAC7B,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;EAC7D,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CAC1D;CACA,QAAQ,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,SAAS,iBAAiB,OAAO;CACjC,mBAAmB,wBAAwB,iBAAiB;CAC5D,WAAW;EACT,GAAG,iBAAiB,SAAS;EAC7B,GAAG,OAAO,OAAO,qBAAqB,CAAC,CAAC,QAAQ,gBAAgB;EAChE,GAAG,iBAAiB,oBAAoB;EACxC,GAAG,iBAAiB,iBAAiB;CACvC;CACA,iBAAiB,wBAAwB,eAAe;CACxD,YAAY,OAAO,OAAO,gBAAgB,CAAC,CAAC,QAAQ,gBAAgB;CACpE,aAAa,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CACtE,aAAa,OAAO,OAAO,iBAAiB,CAAC,CAAC,SAAQ,MAAK,iBAAiB,KAAK,EAAE,CAAC;AACtF;AAEA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;AACxB,CAAC,CAAC;;;AC9DF,IAAa,gBAAgB,wBAAwB,YAAY,KAAK;CACpE,MAAM;CACN,UAAU;AACZ,CAAC"}
1
+ {"version":3,"file":"config-DZv2N7zH.js","names":[],"sources":["../../src/components/GrModal/safelist.ts","../../src/components/GrModal/config.ts"],"sourcesContent":["import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport {\n layoutByScroll,\n overlay,\n overlayTransition,\n panelBase,\n panelBodyScrollClass,\n panelHeightBySize,\n panelSectionClass,\n panelOverflowByScroll,\n panelRadiusBySize,\n panelTransition,\n panelWidthBySize,\n root,\n rootClosingClass,\n shellBase,\n shellByScroll,\n shellPaddingBySize,\n} from './grModalStyles'\n\ntype GrModalClassTokens = {\n root: readonly string[]\n shell: readonly string[]\n layout: readonly string[]\n overlay: readonly string[]\n overlayTransition: readonly string[]\n panelBase: readonly string[]\n panelTransition: readonly string[]\n panelWidth: readonly string[]\n panelRadius: readonly string[]\n panelHeight: readonly string[]\n}\n\nexport const grModalClassTokens: GrModalClassTokens = {\n root: [...splitClassTokens(root), ...splitClassTokens(rootClosingClass)],\n shell: [\n ...splitClassTokens(shellBase),\n ...Object.values(shellPaddingBySize).flatMap(splitClassTokens),\n ...Object.values(shellByScroll).flatMap(splitClassTokens),\n ],\n layout: Object.values(layoutByScroll).flatMap(splitClassTokens),\n overlay: splitClassTokens(overlay),\n overlayTransition: flattenTransitionTokens(overlayTransition),\n panelBase: [\n ...splitClassTokens(panelBase),\n ...Object.values(panelOverflowByScroll).flatMap(splitClassTokens),\n ...splitClassTokens(panelBodyScrollClass),\n ...splitClassTokens(panelSectionClass),\n ],\n panelTransition: flattenTransitionTokens(panelTransition),\n panelWidth: Object.values(panelWidthBySize).flatMap(splitClassTokens),\n panelRadius: Object.values(panelRadiusBySize).flatMap(splitClassTokens),\n panelHeight: Object.values(panelHeightBySize).flatMap(v => splitClassTokens(v ?? '')),\n}\n\nexport const grModalSafelist = [...new Set([\n ...grModalClassTokens.root,\n ...grModalClassTokens.shell,\n ...grModalClassTokens.layout,\n ...grModalClassTokens.overlay,\n ...grModalClassTokens.overlayTransition,\n ...grModalClassTokens.panelBase,\n ...grModalClassTokens.panelTransition,\n ...grModalClassTokens.panelWidth,\n ...grModalClassTokens.panelRadius,\n ...grModalClassTokens.panelHeight,\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grModalSafelist } from './safelist'\n\nexport const grModalConfig = defineGranularComponent(import.meta.url, {\n name: 'GrModal',\n /**\n * Высоту слоя задаёт `useModalOverlay` → `modalLayerZIndex`: имя приходит\n * параметром (дефолт живёт в `overlayStack.ts`), а `var()` собирается в\n * рантайме. Статический скан такое не видит.\n */\n dynamicTokens: ['gr-z-modal'],\n safelist: grModalSafelist,\n})\n"],"mappings":";;;;AAiCA,IAAa,qBAAyC;CACpD,MAAM,CAAC,GAAG,iBAAiB,IAAI,GAAG,GAAG,iBAAiB,gBAAgB,CAAC;CACvE,OAAO;EACL,GAAG,iBAAiB,SAAS;EAC7B,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;EAC7D,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CAC1D;CACA,QAAQ,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,SAAS,iBAAiB,OAAO;CACjC,mBAAmB,wBAAwB,iBAAiB;CAC5D,WAAW;EACT,GAAG,iBAAiB,SAAS;EAC7B,GAAG,OAAO,OAAO,qBAAqB,CAAC,CAAC,QAAQ,gBAAgB;EAChE,GAAG,iBAAiB,oBAAoB;EACxC,GAAG,iBAAiB,iBAAiB;CACvC;CACA,iBAAiB,wBAAwB,eAAe;CACxD,YAAY,OAAO,OAAO,gBAAgB,CAAC,CAAC,QAAQ,gBAAgB;CACpE,aAAa,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CACtE,aAAa,OAAO,OAAO,iBAAiB,CAAC,CAAC,SAAQ,MAAK,iBAAiB,KAAK,EAAE,CAAC;AACtF;AAEA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;CACtB,GAAG,mBAAmB;AACxB,CAAC,CAAC;;;AC9DF,IAAa,gBAAgB,wBAAwB,YAAY,KAAK;CACpE,MAAM;;;;;;CAMN,eAAe,CAAC,YAAY;CAC5B,UAAU;AACZ,CAAC"}
@@ -37,6 +37,12 @@ var grImageViewerSafelist = [.../* @__PURE__ */ new Set([
37
37
  //#region src/components/GrImageViewer/config.ts
38
38
  var grImageViewerConfig = defineGranularComponent(import.meta.url, {
39
39
  name: "GrImageViewer",
40
+ /**
41
+ * Высоту слоя задаёт `useModalOverlay` → `modalLayerZIndex`: имя приходит
42
+ * параметром (дефолт живёт в `overlayStack.ts`), а `var()` собирается в
43
+ * рантайме. Статический скан такое не видит.
44
+ */
45
+ dynamicTokens: ["gr-z-modal"],
40
46
  dependencies: ["GrIcon"],
41
47
  safelist: grImageViewerSafelist,
42
48
  tokenDefinitionsRef: {
@@ -1 +1 @@
1
- {"version":3,"file":"config-BDSaD-5p.js","names":[],"sources":["../../src/components/GrImageViewer/grImageViewerStyles.ts","../../src/components/GrImageViewer/safelist.ts","../../src/components/GrImageViewer/config.ts"],"sourcesContent":["/**\n * Классы хрома просмотрщика.\n *\n * Живут отдельным `.ts`-хелпером и целиком объявлены в safelist: бандлер волен\n * вынести модуль в общий `dist/chunks/`, вне области скана компонента, и у\n * изолированного потребителя хром остался бы без цветов — правило про safelist.\n *\n * Цвета — покомпонентные токены (`themes/*.css`), а не литералы `bg-black/35`:\n * так потребитель может перекрасить панель под свой продукт, не переписывая\n * шаблон.\n */\n\nexport const scrimClass = 'absolute inset-0 bg-[var(--gr-image-viewer-scrim)] backdrop-blur-sm'\n\n/** Круглая кнопка хрома: закрыть, предыдущее/следующее изображение. */\nexport const chromeButtonClass = 'flex items-center justify-center rounded-[var(--gr-radius-full)] border border-[var(--gr-image-viewer-chrome-brd)] bg-[var(--gr-image-viewer-chrome-bg)] text-[var(--gr-image-viewer-chrome-fg)] transition-colors hover:bg-[var(--gr-image-viewer-chrome-bg-hover)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-image-viewer-ring)]'\n\n/** Кнопка внутри панели инструментов — без рамки, подсветка мягкая. */\nexport const toolbarButtonClass = 'flex items-center justify-center rounded-[var(--gr-radius-full)] text-[var(--gr-image-viewer-chrome-fg)] transition-colors hover:bg-[var(--gr-image-viewer-chrome-bg-soft)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-image-viewer-ring)]'\n\nexport const toolbarShellClass = 'rounded-[var(--gr-radius-full)] border border-[var(--gr-image-viewer-chrome-brd)] bg-[var(--gr-image-viewer-chrome-bg)] p-1 backdrop-blur-sm flex items-center gap-1'\n\nexport const toolbarSeparatorClass = 'mx-1 h-6 w-px bg-[var(--gr-image-viewer-chrome-brd)]'\n\n/** Плашки счётчика и масштаба. */\nexport const badgeClass = 'rounded-[var(--gr-radius-full)] bg-[var(--gr-image-viewer-chrome-bg)] px-3 py-1 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)] text-[var(--gr-image-viewer-chrome-fg)] sm:text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]'\n\nexport const emptyStateClass = 'rounded-[var(--gr-radius-xl)] border border-[var(--gr-image-viewer-chrome-brd)] bg-[var(--gr-image-viewer-chrome-bg)] px-4 py-3 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] text-[var(--gr-image-viewer-chrome-fg-muted)]'\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n badgeClass,\n chromeButtonClass,\n emptyStateClass,\n scrimClass,\n toolbarButtonClass,\n toolbarSeparatorClass,\n toolbarShellClass,\n} from './grImageViewerStyles'\n\nexport const grImageViewerSafelist = [...new Set([\n ...splitClassTokens(scrimClass),\n ...splitClassTokens(chromeButtonClass),\n ...splitClassTokens(toolbarButtonClass),\n ...splitClassTokens(toolbarShellClass),\n ...splitClassTokens(toolbarSeparatorClass),\n ...splitClassTokens(badgeClass),\n ...splitClassTokens(emptyStateClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grImageViewerSafelist } from './safelist'\n\nexport const grImageViewerConfig = defineGranularComponent(import.meta.url, {\n name: 'GrImageViewer',\n dependencies: ['GrIcon'],\n safelist: grImageViewerSafelist,\n tokenDefinitionsRef: {\n light: { url: './themes/light.css', selector: ':root' },\n dark: { url: './themes/dark.css', as: '.dark, [data-theme=\"dark\"]' },\n },\n})\n"],"mappings":";;;;;;;;;;;;;;AAYA,IAAa,aAAa;;AAG1B,IAAa,oBAAoB;;AAGjC,IAAa,qBAAqB;AAElC,IAAa,oBAAoB;AAEjC,IAAa,wBAAwB;;AAGrC,IAAa,aAAa;AAE1B,IAAa,kBAAkB;;;ACf/B,IAAa,wBAAwB,CAAC,mBAAG,IAAI,IAAI;CAC/C,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,eAAe;AACrC,CAAC,CAAC;;;AChBF,IAAa,sBAAsB,wBAAwB,YAAY,KAAK;CAC1E,MAAM;CACN,cAAc,CAAC,QAAQ;CACvB,UAAU;CACV,qBAAqB;EACnB,OAAO;GAAE,KAAK;GAAsB,UAAU;EAAQ;EACtD,MAAM;GAAE,KAAK;GAAqB,IAAI;EAA6B;CACrE;AACF,CAAC"}
1
+ {"version":3,"file":"config-DjRhIB5g.js","names":[],"sources":["../../src/components/GrImageViewer/grImageViewerStyles.ts","../../src/components/GrImageViewer/safelist.ts","../../src/components/GrImageViewer/config.ts"],"sourcesContent":["/**\n * Классы хрома просмотрщика.\n *\n * Живут отдельным `.ts`-хелпером и целиком объявлены в safelist: бандлер волен\n * вынести модуль в общий `dist/chunks/`, вне области скана компонента, и у\n * изолированного потребителя хром остался бы без цветов — правило про safelist.\n *\n * Цвета — покомпонентные токены (`themes/*.css`), а не литералы `bg-black/35`:\n * так потребитель может перекрасить панель под свой продукт, не переписывая\n * шаблон.\n */\n\nexport const scrimClass = 'absolute inset-0 bg-[var(--gr-image-viewer-scrim)] backdrop-blur-sm'\n\n/** Круглая кнопка хрома: закрыть, предыдущее/следующее изображение. */\nexport const chromeButtonClass = 'flex items-center justify-center rounded-[var(--gr-radius-full)] border border-[var(--gr-image-viewer-chrome-brd)] bg-[var(--gr-image-viewer-chrome-bg)] text-[var(--gr-image-viewer-chrome-fg)] transition-colors hover:bg-[var(--gr-image-viewer-chrome-bg-hover)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-image-viewer-ring)]'\n\n/** Кнопка внутри панели инструментов — без рамки, подсветка мягкая. */\nexport const toolbarButtonClass = 'flex items-center justify-center rounded-[var(--gr-radius-full)] text-[var(--gr-image-viewer-chrome-fg)] transition-colors hover:bg-[var(--gr-image-viewer-chrome-bg-soft)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-image-viewer-ring)]'\n\nexport const toolbarShellClass = 'rounded-[var(--gr-radius-full)] border border-[var(--gr-image-viewer-chrome-brd)] bg-[var(--gr-image-viewer-chrome-bg)] p-1 backdrop-blur-sm flex items-center gap-1'\n\nexport const toolbarSeparatorClass = 'mx-1 h-6 w-px bg-[var(--gr-image-viewer-chrome-brd)]'\n\n/** Плашки счётчика и масштаба. */\nexport const badgeClass = 'rounded-[var(--gr-radius-full)] bg-[var(--gr-image-viewer-chrome-bg)] px-3 py-1 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)] text-[var(--gr-image-viewer-chrome-fg)] sm:text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]'\n\nexport const emptyStateClass = 'rounded-[var(--gr-radius-xl)] border border-[var(--gr-image-viewer-chrome-brd)] bg-[var(--gr-image-viewer-chrome-bg)] px-4 py-3 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] text-[var(--gr-image-viewer-chrome-fg-muted)]'\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n badgeClass,\n chromeButtonClass,\n emptyStateClass,\n scrimClass,\n toolbarButtonClass,\n toolbarSeparatorClass,\n toolbarShellClass,\n} from './grImageViewerStyles'\n\nexport const grImageViewerSafelist = [...new Set([\n ...splitClassTokens(scrimClass),\n ...splitClassTokens(chromeButtonClass),\n ...splitClassTokens(toolbarButtonClass),\n ...splitClassTokens(toolbarShellClass),\n ...splitClassTokens(toolbarSeparatorClass),\n ...splitClassTokens(badgeClass),\n ...splitClassTokens(emptyStateClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grImageViewerSafelist } from './safelist'\n\nexport const grImageViewerConfig = defineGranularComponent(import.meta.url, {\n name: 'GrImageViewer',\n /**\n * Высоту слоя задаёт `useModalOverlay` → `modalLayerZIndex`: имя приходит\n * параметром (дефолт живёт в `overlayStack.ts`), а `var()` собирается в\n * рантайме. Статический скан такое не видит.\n */\n dynamicTokens: ['gr-z-modal'],\n dependencies: ['GrIcon'],\n safelist: grImageViewerSafelist,\n tokenDefinitionsRef: {\n light: { url: './themes/light.css', selector: ':root' },\n dark: { url: './themes/dark.css', as: '.dark, [data-theme=\"dark\"]' },\n },\n})\n"],"mappings":";;;;;;;;;;;;;;AAYA,IAAa,aAAa;;AAG1B,IAAa,oBAAoB;;AAGjC,IAAa,qBAAqB;AAElC,IAAa,oBAAoB;AAEjC,IAAa,wBAAwB;;AAGrC,IAAa,aAAa;AAE1B,IAAa,kBAAkB;;;ACf/B,IAAa,wBAAwB,CAAC,mBAAG,IAAI,IAAI;CAC/C,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,eAAe;AACrC,CAAC,CAAC;;;AChBF,IAAa,sBAAsB,wBAAwB,YAAY,KAAK;CAC1E,MAAM;;;;;;CAMN,eAAe,CAAC,YAAY;CAC5B,cAAc,CAAC,QAAQ;CACvB,UAAU;CACV,qBAAqB;EACnB,OAAO;GAAE,KAAK;GAAsB,UAAU;EAAQ;EACtD,MAAM;GAAE,KAAK;GAAqB,IAAI;EAA6B;CACrE;AACF,CAAC"}
@@ -29,6 +29,15 @@ var grTooltipSafelist = [.../* @__PURE__ */ new Set([...Object.values(panelSizes
29
29
  //#region src/components/GrTooltip/config.ts
30
30
  var grTooltipConfig = defineGranularComponent(import.meta.url, {
31
31
  name: "GrTooltip",
32
+ /**
33
+ * Слой панели задаёт `useFloating` → `floatingLayerZIndex`: имя приходит
34
+ * параметром, а `var()` собирается в рантайме (`overlayStack.ts`). В
35
+ * исходниках `var(--gr-z-*)` не встречается, статический скан их не видит.
36
+ *
37
+ * `gr-z-modal` — из ветки `calc(var(--gr-z-modal) + N)`: панель, открытая
38
+ * внутри модалки, встаёт над ней.
39
+ */
40
+ dynamicTokens: ["gr-z-tooltip", "gr-z-modal"],
32
41
  dependencies: ["GrIcon"],
33
42
  safelist: grTooltipSafelist
34
43
  });
@@ -1 +1 @@
1
- {"version":3,"file":"config-BTmfQFwi.js","names":[],"sources":["../../src/components/GrTooltip/grTooltipStyles.ts","../../src/components/GrTooltip/safelist.ts","../../src/components/GrTooltip/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrTooltipSize = GrComponentSize\n\n/** Панель подсказки: кегль и внутренние поля. */\nexport const panelSizes: Record<GrTooltipSize, string> = {\n xs: 'px-1.5 py-0.5 text-[length:var(--gr-control-text-3xs)] leading-[var(--gr-control-leading-3xs)]',\n sm: 'px-2 py-1 text-[length:var(--gr-control-text-2xs)] leading-[var(--gr-control-leading-2xs)]',\n md: 'px-2 py-1 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n lg: 'px-3 py-1.5 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n}\n\n/** Ширина панели растёт вместе с кеглем — иначе на `lg` строка рвётся втрое. */\nexport const panelWidths: Record<GrTooltipSize, string> = {\n xs: 'max-w-[220px]',\n sm: 'max-w-[260px]',\n md: 'max-w-[280px]',\n lg: 'max-w-[340px]',\n}\n\n/** Дефолтный триггер — иконка info из шкалы `GrIcon` (`xs…lg` → `14…20px`). */\nexport const triggerIconSizes: Record<GrTooltipSize, GrComponentSize> = {\n xs: 'xs',\n sm: 'xs',\n md: 'sm',\n lg: 'md',\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport { panelSizes, panelWidths } from './grTooltipStyles'\n\nexport const grTooltipSafelist = [...new Set([\n ...Object.values(panelSizes).flatMap(splitClassTokens),\n ...Object.values(panelWidths).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTooltipSafelist } from './safelist'\n\nexport const grTooltipConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTooltip',\n dependencies: ['GrIcon'],\n safelist: grTooltipSafelist,\n})\n"],"mappings":";;;;AAKA,IAAa,aAA4C;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,cAA6C;CACxD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,mBAA2D;CACtE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;ACvBA,IAAa,oBAAoB,CAAC,mBAAG,IAAI,IAAI,CAC3C,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB,GACrD,GAAG,OAAO,OAAO,WAAW,CAAC,CAAC,QAAQ,gBAAgB,CACxD,CAAC,CAAC;;;ACFF,IAAa,kBAAkB,wBAAwB,YAAY,KAAK;CACtE,MAAM;CACN,cAAc,CAAC,QAAQ;CACvB,UAAU;AACZ,CAAC"}
1
+ {"version":3,"file":"config-iemgzS4x.js","names":[],"sources":["../../src/components/GrTooltip/grTooltipStyles.ts","../../src/components/GrTooltip/safelist.ts","../../src/components/GrTooltip/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrTooltipSize = GrComponentSize\n\n/** Панель подсказки: кегль и внутренние поля. */\nexport const panelSizes: Record<GrTooltipSize, string> = {\n xs: 'px-1.5 py-0.5 text-[length:var(--gr-control-text-3xs)] leading-[var(--gr-control-leading-3xs)]',\n sm: 'px-2 py-1 text-[length:var(--gr-control-text-2xs)] leading-[var(--gr-control-leading-2xs)]',\n md: 'px-2 py-1 text-[length:var(--gr-control-text-xs)] leading-[var(--gr-control-leading-xs)]',\n lg: 'px-3 py-1.5 text-[length:var(--gr-control-text-md)] leading-[var(--gr-control-leading-md)]',\n}\n\n/** Ширина панели растёт вместе с кеглем — иначе на `lg` строка рвётся втрое. */\nexport const panelWidths: Record<GrTooltipSize, string> = {\n xs: 'max-w-[220px]',\n sm: 'max-w-[260px]',\n md: 'max-w-[280px]',\n lg: 'max-w-[340px]',\n}\n\n/** Дефолтный триггер — иконка info из шкалы `GrIcon` (`xs…lg` → `14…20px`). */\nexport const triggerIconSizes: Record<GrTooltipSize, GrComponentSize> = {\n xs: 'xs',\n sm: 'xs',\n md: 'sm',\n lg: 'md',\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport { panelSizes, panelWidths } from './grTooltipStyles'\n\nexport const grTooltipSafelist = [...new Set([\n ...Object.values(panelSizes).flatMap(splitClassTokens),\n ...Object.values(panelWidths).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTooltipSafelist } from './safelist'\n\nexport const grTooltipConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTooltip',\n /**\n * Слой панели задаёт `useFloating` → `floatingLayerZIndex`: имя приходит\n * параметром, а `var()` собирается в рантайме (`overlayStack.ts`). В\n * исходниках `var(--gr-z-*)` не встречается, статический скан их не видит.\n *\n * `gr-z-modal` — из ветки `calc(var(--gr-z-modal) + N)`: панель, открытая\n * внутри модалки, встаёт над ней.\n */\n dynamicTokens: ['gr-z-tooltip', 'gr-z-modal'],\n dependencies: ['GrIcon'],\n safelist: grTooltipSafelist,\n})\n"],"mappings":";;;;AAKA,IAAa,aAA4C;CACvD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,cAA6C;CACxD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,mBAA2D;CACtE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;ACvBA,IAAa,oBAAoB,CAAC,mBAAG,IAAI,IAAI,CAC3C,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB,GACrD,GAAG,OAAO,OAAO,WAAW,CAAC,CAAC,QAAQ,gBAAgB,CACxD,CAAC,CAAC;;;ACFF,IAAa,kBAAkB,wBAAwB,YAAY,KAAK;CACtE,MAAM;;;;;;;;;CASN,eAAe,CAAC,gBAAgB,YAAY;CAC5C,cAAc,CAAC,QAAQ;CACvB,UAAU;AACZ,CAAC"}
@@ -15,6 +15,12 @@ var grPopoverSafelist = [.../* @__PURE__ */ new Set([
15
15
  //#region src/components/GrPopover/config.ts
16
16
  var grPopoverConfig = defineGranularComponent(import.meta.url, {
17
17
  name: "GrPopover",
18
+ /**
19
+ * Слои задают `useFloating` и `useModalOverlay` через `overlayStack.ts`:
20
+ * имя приходит параметром, а `var()` собирается в рантайме. В исходниках
21
+ * `var(--gr-z-*)` не встречается — статический скан их не видит.
22
+ */
23
+ dynamicTokens: ["gr-z-dropdown", "gr-z-modal"],
18
24
  safelist: grPopoverSafelist
19
25
  });
20
26
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"config-DVCNvhIG.js","names":[],"sources":["../../src/components/GrPopover/safelist.ts","../../src/components/GrPopover/config.ts"],"sourcesContent":["import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport { overlayOriginClassByPlacement } from '../shared/overlayOrigin'\nimport { panelSizes, panelSizesFlush, popoverPanelBaseClass } from './grPopoverStyles'\n\nexport const grPopoverSafelist = [...new Set([\n ...Object.values(panelSizes).flatMap(splitClassTokens),\n ...Object.values(panelSizesFlush).flatMap(splitClassTokens),\n ...Object.values(overlayOriginClassByPlacement).flatMap(splitClassTokens),\n // Базовый класс живёт литералом в `grPopoverStyles.ts`, а такой хелпер на\n // сборке уезжает в общий чанк, которого скан не видит (см. gotchas.md §2).\n ...splitClassTokens(popoverPanelBaseClass),\n // Обёртка триггера: две взаимоисключающие раскладки. Обе объявлены, потому\n // что в разметке они приезжают тернарником, а не отдельными литералами.\n ...splitClassTokens('inline-block max-w-full block w-full'),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grPopoverSafelist } from './safelist'\n\nexport const grPopoverConfig = defineGranularComponent(import.meta.url, {\n name: 'GrPopover',\n safelist: grPopoverSafelist,\n})\n"],"mappings":";;;;;AAKA,IAAa,oBAAoB,CAAC,mBAAG,IAAI,IAAI;CAC3C,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CACrD,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,6BAA6B,CAAC,CAAC,QAAQ,gBAAgB;CAGxE,GAAG,iBAAiB,qBAAqB;CAGzC,GAAG,iBAAiB,sCAAsC;CAI1D,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACfF,IAAa,kBAAkB,wBAAwB,YAAY,KAAK;CACtE,MAAM;CACN,UAAU;AACZ,CAAC"}
1
+ {"version":3,"file":"config-tNqtapcT.js","names":[],"sources":["../../src/components/GrPopover/safelist.ts","../../src/components/GrPopover/config.ts"],"sourcesContent":["import { flattenTransitionTokens, splitClassTokens } from '../shared/classTokens'\nimport { panelPopTransition } from '../shared/overlayTransition'\nimport { overlayOriginClassByPlacement } from '../shared/overlayOrigin'\nimport { panelSizes, panelSizesFlush, popoverPanelBaseClass } from './grPopoverStyles'\n\nexport const grPopoverSafelist = [...new Set([\n ...Object.values(panelSizes).flatMap(splitClassTokens),\n ...Object.values(panelSizesFlush).flatMap(splitClassTokens),\n ...Object.values(overlayOriginClassByPlacement).flatMap(splitClassTokens),\n // Базовый класс живёт литералом в `grPopoverStyles.ts`, а такой хелпер на\n // сборке уезжает в общий чанк, которого скан не видит (см. gotchas.md §2).\n ...splitClassTokens(popoverPanelBaseClass),\n // Обёртка триггера: две взаимоисключающие раскладки. Обе объявлены, потому\n // что в разметке они приезжают тернарником, а не отдельными литералами.\n ...splitClassTokens('inline-block max-w-full block w-full'),\n // Набор перехода панели общий на пять компонентов и живёт безадресным\n // модулем в `shared/`: в `dist` он лежит в общем чанке, который пресет не\n // сканирует, поэтому объявить его обязан каждый потребитель.\n ...flattenTransitionTokens(panelPopTransition),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grPopoverSafelist } from './safelist'\n\nexport const grPopoverConfig = defineGranularComponent(import.meta.url, {\n name: 'GrPopover',\n /**\n * Слои задают `useFloating` и `useModalOverlay` через `overlayStack.ts`:\n * имя приходит параметром, а `var()` собирается в рантайме. В исходниках\n * `var(--gr-z-*)` не встречается — статический скан их не видит.\n */\n dynamicTokens: ['gr-z-dropdown', 'gr-z-modal'],\n safelist: grPopoverSafelist,\n})\n"],"mappings":";;;;;AAKA,IAAa,oBAAoB,CAAC,mBAAG,IAAI,IAAI;CAC3C,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CACrD,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,6BAA6B,CAAC,CAAC,QAAQ,gBAAgB;CAGxE,GAAG,iBAAiB,qBAAqB;CAGzC,GAAG,iBAAiB,sCAAsC;CAI1D,GAAG,wBAAwB,kBAAkB;AAC/C,CAAC,CAAC;;;ACfF,IAAa,kBAAkB,wBAAwB,YAAY,KAAK;CACtE,MAAM;;;;;;CAMN,eAAe,CAAC,iBAAiB,YAAY;CAC7C,UAAU;AACZ,CAAC"}
@@ -308,11 +308,6 @@ var sortable = {
308
308
  "dropped": "Dropped at position {position} of {count}",
309
309
  "cancelled": "Move cancelled"
310
310
  };
311
- var codeBlock = {
312
- "copy": "Copy code",
313
- "copied": "Code copied",
314
- "copyFailed": "Could not copy code"
315
- };
316
311
  var jsonViewer = {
317
312
  "search": "Search key or value",
318
313
  "expandAll": "Expand all",
@@ -374,9 +369,8 @@ var en_default = {
374
369
  bottomNav,
375
370
  emptyState,
376
371
  sortable,
377
- codeBlock,
378
372
  jsonViewer,
379
373
  contextMenu
380
374
  };
381
375
  //#endregion
382
- export { autocomplete, avatar, badgeWrap, bottomNav, breadcrumbs, button, chip, codeBlock, collapse, colorPicker, colors, commandPalette, common, contextMenu, dataTable, en_default as default, dialog, drawer, emptyState, fileUpload, fileValidation, form, formErrorBanner, formFile, imageViewer, input, inputTag, jsonViewer, kbd, link, list, loading, modal, navbar, numberInput, pagination, rating, responseError, select, sidebar, slider, sortable, splitter, statistic, steps, table, tabs, textarea, timeline, toaster, tree, treeSelect, uploadErrorBanner };
376
+ export { autocomplete, avatar, badgeWrap, bottomNav, breadcrumbs, button, chip, collapse, colorPicker, colors, commandPalette, common, contextMenu, dataTable, en_default as default, dialog, drawer, emptyState, fileUpload, fileValidation, form, formErrorBanner, formFile, imageViewer, input, inputTag, jsonViewer, kbd, link, list, loading, modal, navbar, numberInput, pagination, rating, responseError, select, sidebar, slider, sortable, splitter, statistic, steps, table, tabs, textarea, timeline, toaster, tree, treeSelect, uploadErrorBanner };
@@ -1 +1 @@
1
- {"version":3,"file":"en-NpP9e7lC.js","names":[],"sources":["../../src/i18n/locales/en.json"],"sourcesContent":["{\n \"chip\": {\n \"remove\": \"Remove\",\n \"removeNamed\": \"Remove {label}\"\n },\n \"common\": {\n \"confirm\": \"Confirm\",\n \"cancel\": \"Cancel\",\n \"add\": \"Add\",\n \"clear\": \"Clear\",\n \"close\": \"Close\"\n },\n \"loading\": {\n \"defaultText\": \"Loading...\"\n },\n \"steps\": {\n \"label\": \"Progress\",\n \"status\": \"Step {step} of {count}\",\n \"completed\": \"completed\",\n \"error\": \"has errors\"\n },\n \"treeSelect\": {\n \"filterPlaceholder\": \"Search…\",\n \"empty\": \"No data\",\n \"loading\": \"Loading…\"\n },\n \"badgeWrap\": {\n \"count\": \"{count} new\"\n },\n \"avatar\": {\n \"group\": \"People\",\n \"groupOverflow\": \"and {count} more\",\n \"status\": {\n \"online\": \"online\",\n \"offline\": \"offline\",\n \"busy\": \"busy\",\n \"away\": \"away\"\n }\n },\n \"tree\": {\n \"drag\": \"Drag\",\n \"expand\": \"Expand\",\n \"collapse\": \"Collapse\",\n \"moved\": \"Moved {label}\"\n },\n \"select\": {\n \"customValuePlaceholder\": \"Add value…\",\n \"addOption\": \"Add \\\"{value}\\\"\",\n \"clearOption\": \"None\",\n \"searchPlaceholder\": \"Search…\",\n \"loading\": \"Loading…\",\n \"noResults\": \"No results\",\n \"removeTag\": \"Remove {label}\"\n },\n \"dataTable\": {\n \"loading\": \"Loading…\",\n \"empty\": \"No data\",\n \"selectAll\": \"Select all rows\",\n \"selectRow\": \"Select row\",\n \"sortAsc\": \"Activate to sort ascending\",\n \"sortDesc\": \"Activate to sort descending\",\n \"sortNone\": \"Activate to remove sorting\",\n \"moveColumn\": \"Move column {label}\",\n \"columnMoved\": \"Column {label} moved to position {position} of {count}\",\n \"resizeColumn\": \"Width of column {label}\",\n \"columnResized\": \"Column {label} is {width} pixels wide\"\n },\n \"breadcrumbs\": {\n \"label\": \"Breadcrumb\",\n \"expand\": \"Show hidden path\"\n },\n \"autocomplete\": {\n \"loading\": \"Loading…\",\n \"noResults\": \"No results\",\n \"addOption\": \"Add \\\"{value}\\\"\",\n \"removeValue\": \"Remove {label}\",\n \"typeMore\": {\n \"one\": \"Type at least {n} character\",\n \"other\": \"Type at least {n} characters\"\n }\n },\n \"form\": {\n \"required\": \"This field is required\",\n \"min\": \"Minimum is {min}\",\n \"max\": \"Maximum is {max}\",\n \"len\": \"Length must be {len}\",\n \"pattern\": \"Invalid format\",\n \"email\": \"Enter a valid email\",\n \"url\": \"Enter a valid URL\",\n \"file\": \"Invalid file\",\n \"invalid\": \"Invalid value\",\n \"readonly\": \"Read only\",\n \"validating\": \"Checking…\"\n },\n \"dialog\": {\n \"confirm\": {\n \"title\": \"Confirm\"\n },\n \"prompt\": {\n \"title\": \"Prompt\",\n \"label\": \"Value\",\n \"required\": \"Enter a value.\"\n },\n \"ok\": \"OK\"\n },\n \"switch\": {\n \"loading\": \"Saving…\"\n },\n \"slider\": {\n \"min\": \"min\",\n \"max\": \"max\"\n },\n \"sidebar\": {\n \"expand\": \"Expand sidebar\",\n \"collapse\": \"Collapse sidebar\"\n },\n \"splitter\": {\n \"label\": \"Resize panels\"\n },\n \"statistic\": {\n \"trendUp\": \"Increase\",\n \"trendDown\": \"Decrease\",\n \"trendFlat\": \"No change\"\n },\n \"pagination\": {\n \"label\": \"Pagination\",\n \"pageSize\": \"Page size\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"page\": \"Page {n}\",\n \"first\": \"First page\",\n \"last\": \"Last page\",\n \"jumpTo\": \"Go to\",\n \"total\": \"{from}–{to} of {total}\",\n \"status\": \"Page {page} of {count}\"\n },\n \"navbar\": {\n \"openMenu\": \"Open menu\"\n },\n \"responseError\": {\n \"networkTitle\": \"No connection to the server\",\n \"networkMessage\": \"Check your internet connection and try again.\",\n \"abortedTitle\": \"Request cancelled\",\n \"abortedMessage\": \"The request was cancelled.\",\n \"validationTitle\": \"Check the data\",\n \"validationMessage\": \"The server returned a validation error. Fix the fields and try again.\",\n \"clientTitle\": \"Request error\",\n \"clientMessage\": \"The server rejected the request.\",\n \"serverTitle\": \"Server error\",\n \"serverMessage\": \"A server error occurred. Please try again.\",\n \"unknownTitle\": \"Something went wrong\",\n \"unknownMessage\": \"The operation could not be completed. Please try again.\",\n \"statusLabel\": \"HTTP {status}\",\n \"retryLabel\": \"Retry\",\n \"dismissLabel\": \"Dismiss\"\n },\n \"colors\": {\n \"neutral\": \"Neutral\",\n \"success\": \"Success\",\n \"warning\": \"Warning\",\n \"danger\": \"Danger\",\n \"info\": \"Info\",\n \"primary\": \"Primary\",\n \"slate\": \"Slate\",\n \"azure\": \"Azure\"\n },\n \"drawer\": {\n \"title\": \"Drawer\"\n },\n \"modal\": {\n \"title\": \"Dialog\"\n },\n \"numberInput\": {\n \"increase\": \"Increase\",\n \"decrease\": \"Decrease\"\n },\n \"toaster\": {\n \"dismiss\": \"Dismiss\",\n \"region\": \"Notifications\"\n },\n \"inputTag\": {\n \"removeTag\": \"Remove tag\",\n \"removeTagNamed\": \"Remove tag {tag}\",\n \"clearAll\": \"Clear all tags\",\n \"added\": \"Tag added: {tag}\",\n \"addedMany\": \"{count} tags added\",\n \"removed\": \"Tag removed: {tag}\",\n \"cleared\": \"All tags removed\",\n \"limitReached\": \"Tag limit reached\"\n },\n \"fileUpload\": {\n \"placeholder\": \"Drag files here or click to select\",\n \"progress\": \"Upload progress\",\n \"uploading\": \"Uploading…\",\n \"success\": \"Upload complete\",\n \"error\": \"Upload failed\",\n \"remove\": \"Remove {fileName}\",\n \"retry\": \"Retry upload\",\n \"retryFile\": \"Retry {fileName}\",\n \"abortFile\": \"Cancel upload of {fileName}\",\n \"statusPending\": \"Pending\",\n \"statusUploading\": \"Uploading\",\n \"statusSuccess\": \"Uploaded\",\n \"statusError\": \"Failed\"\n },\n \"formFile\": {\n \"upload\": \"Upload file\",\n \"change\": \"Change file\",\n \"remove\": \"Remove\",\n \"clearAll\": \"Clear all\",\n \"placeholder\": \"No files selected\",\n \"validateError\": \"Failed to validate dropped files\",\n \"removeFile\": \"Remove {fileName}\"\n },\n \"imageViewer\": {\n \"close\": \"Close image viewer\",\n \"prev\": \"Previous image\",\n \"next\": \"Next image\",\n \"zoomIn\": \"Zoom in\",\n \"zoomOut\": \"Zoom out\",\n \"resetZoom\": \"Reset zoom\",\n \"zoomToNatural\": \"Actual size (1:1)\",\n \"rotateLeft\": \"Rotate left\",\n \"rotateRight\": \"Rotate right\",\n \"download\": \"Download image\",\n \"empty\": \"No image\",\n \"label\": \"Image viewer\",\n \"position\": \"Image {index} of {total}\"\n },\n \"formErrorBanner\": {\n \"validationTitle\": \"Check the form fields\",\n \"validationMessage\": \"The server rejected the data. Fix the highlighted fields and try again.\",\n \"clientTitle\": \"Failed to save\",\n \"serverTitle\": \"Save error\",\n \"serverMessage\": \"Could not save the data. Please try again later.\"\n },\n \"uploadErrorBanner\": {\n \"networkTitle\": \"Failed to upload files\",\n \"networkMessage\": \"Check your connection and try again.\",\n \"validationTitle\": \"Files did not pass validation\",\n \"validationMessage\": \"Some of the files do not meet the requirements.\",\n \"serverTitle\": \"Upload error on the server\",\n \"serverMessage\": \"The server could not process the upload. Please try again.\"\n },\n \"input\": {\n \"clear\": \"Clear\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"limitReached\": \"Character limit reached\"\n },\n \"textarea\": {\n \"lines\": {\n \"one\": \"{n} line\",\n \"other\": \"{n} lines\"\n }\n },\n \"rating\": {\n \"label\": \"Rating\",\n \"valueText\": \"{value} of {max}\",\n \"valueTextWithLabel\": \"{value} of {max}, {label}\"\n },\n \"commandPalette\": {\n \"label\": \"Command palette\",\n \"placeholder\": \"Type a command or search…\",\n \"empty\": \"Nothing found\",\n \"recent\": \"Recent\",\n \"loading\": \"Loading…\"\n },\n \"fileValidation\": {\n \"accept\": \"File \\\"{fileName}\\\" does not match accept=\\\"{accept}\\\"\",\n \"extension\": \"File \\\"{fileName}\\\" has disallowed extension \\\".{extension}\\\"\",\n \"mimeType\": \"File \\\"{fileName}\\\" has disallowed mime type \\\"{mimeType}\\\"\",\n \"mimeTypeFallback\": \"File \\\"{fileName}\\\" has fallback mime type \\\"{mimeType}\\\"\",\n \"maxFileSize\": \"File \\\"{fileName}\\\" is too large ({size} bytes), maxBytes={maxBytes}\",\n \"maxCount\": \"Too many files selected ({count}), maxCount={maxCount}\",\n \"maxTotalSize\": \"Total files size is too large ({total} bytes), maxTotalSizeBytes={maxBytes}\"\n },\n \"kbd\": {\n \"command\": \"Command\",\n \"option\": \"Option\",\n \"shift\": \"Shift\",\n \"control\": \"Control\",\n \"enter\": \"Enter\",\n \"escape\": \"Escape\",\n \"tab\": \"Tab\",\n \"backspace\": \"Backspace\",\n \"delete\": \"Delete\",\n \"pageUp\": \"Page Up\",\n \"pageDown\": \"Page Down\",\n \"arrowUp\": \"Arrow Up\",\n \"arrowDown\": \"Arrow Down\",\n \"arrowLeft\": \"Arrow Left\",\n \"arrowRight\": \"Arrow Right\",\n \"then\": \"then\"\n },\n \"link\": {\n \"opensInNewTab\": \"opens in a new tab\"\n },\n \"colorPicker\": {\n \"panelLabel\": \"Color picker\",\n \"hue\": \"Hue\",\n \"saturation\": \"Saturation\",\n \"lightness\": \"Lightness\",\n \"opacity\": \"Opacity\",\n \"hexLabel\": \"Hex value\",\n \"presetsLabel\": \"Color presets\",\n \"swatchLabel\": \"Color {color}\"\n },\n \"collapse\": {\n \"empty\": \"Nothing here yet\"\n },\n \"list\": {\n \"empty\": \"Nothing here yet\"\n },\n \"button\": {\n \"loading\": \"Loading…\"\n },\n \"table\": {\n \"empty\": \"Nothing here yet\"\n },\n \"timeline\": {\n \"empty\": \"Nothing here yet\"\n },\n \"tabs\": {\n \"empty\": \"Nothing here yet\",\n \"close\": \"Close tab\"\n },\n \"bottomNav\": {\n \"label\": \"Bottom navigation\",\n \"badge\": \"{count} new\"\n },\n \"emptyState\": {\n \"title\": \"Nothing here yet\"\n },\n \"sortable\": {\n \"label\": \"Sortable list\",\n \"handle\": \"Reorder\",\n \"empty\": \"Nothing to sort yet\",\n \"grabbed\": \"Grabbed. Position {position} of {count}\",\n \"moved\": \"Position {position} of {count}\",\n \"dropped\": \"Dropped at position {position} of {count}\",\n \"cancelled\": \"Move cancelled\"\n },\n \"codeBlock\": {\n \"copy\": \"Copy code\",\n \"copied\": \"Code copied\",\n \"copyFailed\": \"Could not copy code\"\n },\n \"jsonViewer\": {\n \"search\": \"Search key or value\",\n \"expandAll\": \"Expand all\",\n \"collapseAll\": \"Collapse all\",\n \"copy\": \"Copy value\",\n \"copied\": \"Value copied\",\n \"copyFailed\": \"Could not copy value\",\n \"moreItems\": \"more\"\n },\n \"contextMenu\": {\n \"label\": \"Context menu\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"en-CuuLfNHX.js","names":[],"sources":["../../src/i18n/locales/en.json"],"sourcesContent":["{\n \"chip\": {\n \"remove\": \"Remove\",\n \"removeNamed\": \"Remove {label}\"\n },\n \"common\": {\n \"confirm\": \"Confirm\",\n \"cancel\": \"Cancel\",\n \"add\": \"Add\",\n \"clear\": \"Clear\",\n \"close\": \"Close\"\n },\n \"loading\": {\n \"defaultText\": \"Loading...\"\n },\n \"steps\": {\n \"label\": \"Progress\",\n \"status\": \"Step {step} of {count}\",\n \"completed\": \"completed\",\n \"error\": \"has errors\"\n },\n \"treeSelect\": {\n \"filterPlaceholder\": \"Search…\",\n \"empty\": \"No data\",\n \"loading\": \"Loading…\"\n },\n \"badgeWrap\": {\n \"count\": \"{count} new\"\n },\n \"avatar\": {\n \"group\": \"People\",\n \"groupOverflow\": \"and {count} more\",\n \"status\": {\n \"online\": \"online\",\n \"offline\": \"offline\",\n \"busy\": \"busy\",\n \"away\": \"away\"\n }\n },\n \"tree\": {\n \"drag\": \"Drag\",\n \"expand\": \"Expand\",\n \"collapse\": \"Collapse\",\n \"moved\": \"Moved {label}\"\n },\n \"select\": {\n \"customValuePlaceholder\": \"Add value…\",\n \"addOption\": \"Add \\\"{value}\\\"\",\n \"clearOption\": \"None\",\n \"searchPlaceholder\": \"Search…\",\n \"loading\": \"Loading…\",\n \"noResults\": \"No results\",\n \"removeTag\": \"Remove {label}\"\n },\n \"dataTable\": {\n \"loading\": \"Loading…\",\n \"empty\": \"No data\",\n \"selectAll\": \"Select all rows\",\n \"selectRow\": \"Select row\",\n \"sortAsc\": \"Activate to sort ascending\",\n \"sortDesc\": \"Activate to sort descending\",\n \"sortNone\": \"Activate to remove sorting\",\n \"moveColumn\": \"Move column {label}\",\n \"columnMoved\": \"Column {label} moved to position {position} of {count}\",\n \"resizeColumn\": \"Width of column {label}\",\n \"columnResized\": \"Column {label} is {width} pixels wide\"\n },\n \"breadcrumbs\": {\n \"label\": \"Breadcrumb\",\n \"expand\": \"Show hidden path\"\n },\n \"autocomplete\": {\n \"loading\": \"Loading…\",\n \"noResults\": \"No results\",\n \"addOption\": \"Add \\\"{value}\\\"\",\n \"removeValue\": \"Remove {label}\",\n \"typeMore\": {\n \"one\": \"Type at least {n} character\",\n \"other\": \"Type at least {n} characters\"\n }\n },\n \"form\": {\n \"required\": \"This field is required\",\n \"min\": \"Minimum is {min}\",\n \"max\": \"Maximum is {max}\",\n \"len\": \"Length must be {len}\",\n \"pattern\": \"Invalid format\",\n \"email\": \"Enter a valid email\",\n \"url\": \"Enter a valid URL\",\n \"file\": \"Invalid file\",\n \"invalid\": \"Invalid value\",\n \"readonly\": \"Read only\",\n \"validating\": \"Checking…\"\n },\n \"dialog\": {\n \"confirm\": {\n \"title\": \"Confirm\"\n },\n \"prompt\": {\n \"title\": \"Prompt\",\n \"label\": \"Value\",\n \"required\": \"Enter a value.\"\n },\n \"ok\": \"OK\"\n },\n \"switch\": {\n \"loading\": \"Saving…\"\n },\n \"slider\": {\n \"min\": \"min\",\n \"max\": \"max\"\n },\n \"sidebar\": {\n \"expand\": \"Expand sidebar\",\n \"collapse\": \"Collapse sidebar\"\n },\n \"splitter\": {\n \"label\": \"Resize panels\"\n },\n \"statistic\": {\n \"trendUp\": \"Increase\",\n \"trendDown\": \"Decrease\",\n \"trendFlat\": \"No change\"\n },\n \"pagination\": {\n \"label\": \"Pagination\",\n \"pageSize\": \"Page size\",\n \"prev\": \"Prev\",\n \"next\": \"Next\",\n \"page\": \"Page {n}\",\n \"first\": \"First page\",\n \"last\": \"Last page\",\n \"jumpTo\": \"Go to\",\n \"total\": \"{from}–{to} of {total}\",\n \"status\": \"Page {page} of {count}\"\n },\n \"navbar\": {\n \"openMenu\": \"Open menu\"\n },\n \"responseError\": {\n \"networkTitle\": \"No connection to the server\",\n \"networkMessage\": \"Check your internet connection and try again.\",\n \"abortedTitle\": \"Request cancelled\",\n \"abortedMessage\": \"The request was cancelled.\",\n \"validationTitle\": \"Check the data\",\n \"validationMessage\": \"The server returned a validation error. Fix the fields and try again.\",\n \"clientTitle\": \"Request error\",\n \"clientMessage\": \"The server rejected the request.\",\n \"serverTitle\": \"Server error\",\n \"serverMessage\": \"A server error occurred. Please try again.\",\n \"unknownTitle\": \"Something went wrong\",\n \"unknownMessage\": \"The operation could not be completed. Please try again.\",\n \"statusLabel\": \"HTTP {status}\",\n \"retryLabel\": \"Retry\",\n \"dismissLabel\": \"Dismiss\"\n },\n \"colors\": {\n \"neutral\": \"Neutral\",\n \"success\": \"Success\",\n \"warning\": \"Warning\",\n \"danger\": \"Danger\",\n \"info\": \"Info\",\n \"primary\": \"Primary\",\n \"slate\": \"Slate\",\n \"azure\": \"Azure\"\n },\n \"drawer\": {\n \"title\": \"Drawer\"\n },\n \"modal\": {\n \"title\": \"Dialog\"\n },\n \"numberInput\": {\n \"increase\": \"Increase\",\n \"decrease\": \"Decrease\"\n },\n \"toaster\": {\n \"dismiss\": \"Dismiss\",\n \"region\": \"Notifications\"\n },\n \"inputTag\": {\n \"removeTag\": \"Remove tag\",\n \"removeTagNamed\": \"Remove tag {tag}\",\n \"clearAll\": \"Clear all tags\",\n \"added\": \"Tag added: {tag}\",\n \"addedMany\": \"{count} tags added\",\n \"removed\": \"Tag removed: {tag}\",\n \"cleared\": \"All tags removed\",\n \"limitReached\": \"Tag limit reached\"\n },\n \"fileUpload\": {\n \"placeholder\": \"Drag files here or click to select\",\n \"progress\": \"Upload progress\",\n \"uploading\": \"Uploading…\",\n \"success\": \"Upload complete\",\n \"error\": \"Upload failed\",\n \"remove\": \"Remove {fileName}\",\n \"retry\": \"Retry upload\",\n \"retryFile\": \"Retry {fileName}\",\n \"abortFile\": \"Cancel upload of {fileName}\",\n \"statusPending\": \"Pending\",\n \"statusUploading\": \"Uploading\",\n \"statusSuccess\": \"Uploaded\",\n \"statusError\": \"Failed\"\n },\n \"formFile\": {\n \"upload\": \"Upload file\",\n \"change\": \"Change file\",\n \"remove\": \"Remove\",\n \"clearAll\": \"Clear all\",\n \"placeholder\": \"No files selected\",\n \"validateError\": \"Failed to validate dropped files\",\n \"removeFile\": \"Remove {fileName}\"\n },\n \"imageViewer\": {\n \"close\": \"Close image viewer\",\n \"prev\": \"Previous image\",\n \"next\": \"Next image\",\n \"zoomIn\": \"Zoom in\",\n \"zoomOut\": \"Zoom out\",\n \"resetZoom\": \"Reset zoom\",\n \"zoomToNatural\": \"Actual size (1:1)\",\n \"rotateLeft\": \"Rotate left\",\n \"rotateRight\": \"Rotate right\",\n \"download\": \"Download image\",\n \"empty\": \"No image\",\n \"label\": \"Image viewer\",\n \"position\": \"Image {index} of {total}\"\n },\n \"formErrorBanner\": {\n \"validationTitle\": \"Check the form fields\",\n \"validationMessage\": \"The server rejected the data. Fix the highlighted fields and try again.\",\n \"clientTitle\": \"Failed to save\",\n \"serverTitle\": \"Save error\",\n \"serverMessage\": \"Could not save the data. Please try again later.\"\n },\n \"uploadErrorBanner\": {\n \"networkTitle\": \"Failed to upload files\",\n \"networkMessage\": \"Check your connection and try again.\",\n \"validationTitle\": \"Files did not pass validation\",\n \"validationMessage\": \"Some of the files do not meet the requirements.\",\n \"serverTitle\": \"Upload error on the server\",\n \"serverMessage\": \"The server could not process the upload. Please try again.\"\n },\n \"input\": {\n \"clear\": \"Clear\",\n \"showPassword\": \"Show password\",\n \"hidePassword\": \"Hide password\",\n \"limitReached\": \"Character limit reached\"\n },\n \"textarea\": {\n \"lines\": {\n \"one\": \"{n} line\",\n \"other\": \"{n} lines\"\n }\n },\n \"rating\": {\n \"label\": \"Rating\",\n \"valueText\": \"{value} of {max}\",\n \"valueTextWithLabel\": \"{value} of {max}, {label}\"\n },\n \"commandPalette\": {\n \"label\": \"Command palette\",\n \"placeholder\": \"Type a command or search…\",\n \"empty\": \"Nothing found\",\n \"recent\": \"Recent\",\n \"loading\": \"Loading…\"\n },\n \"fileValidation\": {\n \"accept\": \"File \\\"{fileName}\\\" does not match accept=\\\"{accept}\\\"\",\n \"extension\": \"File \\\"{fileName}\\\" has disallowed extension \\\".{extension}\\\"\",\n \"mimeType\": \"File \\\"{fileName}\\\" has disallowed mime type \\\"{mimeType}\\\"\",\n \"mimeTypeFallback\": \"File \\\"{fileName}\\\" has fallback mime type \\\"{mimeType}\\\"\",\n \"maxFileSize\": \"File \\\"{fileName}\\\" is too large ({size} bytes), maxBytes={maxBytes}\",\n \"maxCount\": \"Too many files selected ({count}), maxCount={maxCount}\",\n \"maxTotalSize\": \"Total files size is too large ({total} bytes), maxTotalSizeBytes={maxBytes}\"\n },\n \"kbd\": {\n \"command\": \"Command\",\n \"option\": \"Option\",\n \"shift\": \"Shift\",\n \"control\": \"Control\",\n \"enter\": \"Enter\",\n \"escape\": \"Escape\",\n \"tab\": \"Tab\",\n \"backspace\": \"Backspace\",\n \"delete\": \"Delete\",\n \"pageUp\": \"Page Up\",\n \"pageDown\": \"Page Down\",\n \"arrowUp\": \"Arrow Up\",\n \"arrowDown\": \"Arrow Down\",\n \"arrowLeft\": \"Arrow Left\",\n \"arrowRight\": \"Arrow Right\",\n \"then\": \"then\"\n },\n \"link\": {\n \"opensInNewTab\": \"opens in a new tab\"\n },\n \"colorPicker\": {\n \"panelLabel\": \"Color picker\",\n \"hue\": \"Hue\",\n \"saturation\": \"Saturation\",\n \"lightness\": \"Lightness\",\n \"opacity\": \"Opacity\",\n \"hexLabel\": \"Hex value\",\n \"presetsLabel\": \"Color presets\",\n \"swatchLabel\": \"Color {color}\"\n },\n \"collapse\": {\n \"empty\": \"Nothing here yet\"\n },\n \"list\": {\n \"empty\": \"Nothing here yet\"\n },\n \"button\": {\n \"loading\": \"Loading…\"\n },\n \"table\": {\n \"empty\": \"Nothing here yet\"\n },\n \"timeline\": {\n \"empty\": \"Nothing here yet\"\n },\n \"tabs\": {\n \"empty\": \"Nothing here yet\",\n \"close\": \"Close tab\"\n },\n \"bottomNav\": {\n \"label\": \"Bottom navigation\",\n \"badge\": \"{count} new\"\n },\n \"emptyState\": {\n \"title\": \"Nothing here yet\"\n },\n \"sortable\": {\n \"label\": \"Sortable list\",\n \"handle\": \"Reorder\",\n \"empty\": \"Nothing to sort yet\",\n \"grabbed\": \"Grabbed. Position {position} of {count}\",\n \"moved\": \"Position {position} of {count}\",\n \"dropped\": \"Dropped at position {position} of {count}\",\n \"cancelled\": \"Move cancelled\"\n },\n \"jsonViewer\": {\n \"search\": \"Search key or value\",\n \"expandAll\": \"Expand all\",\n \"collapseAll\": \"Collapse all\",\n \"copy\": \"Copy value\",\n \"copied\": \"Value copied\",\n \"copyFailed\": \"Could not copy value\",\n \"moreItems\": \"more\"\n },\n \"contextMenu\": {\n \"label\": \"Context menu\"\n }\n}\n"],"mappings":""}
@@ -310,11 +310,6 @@ var sortable = {
310
310
  "dropped": "Soltado en la posición {position} de {count}",
311
311
  "cancelled": "Movimiento cancelado"
312
312
  };
313
- var codeBlock = {
314
- "copy": "Copiar código",
315
- "copied": "Código copiado",
316
- "copyFailed": "No se pudo copiar el código"
317
- };
318
313
  var jsonViewer = {
319
314
  "search": "Buscar clave o valor",
320
315
  "expandAll": "Expandir todo",
@@ -376,9 +371,8 @@ var es_default = {
376
371
  bottomNav,
377
372
  emptyState,
378
373
  sortable,
379
- codeBlock,
380
374
  jsonViewer,
381
375
  contextMenu
382
376
  };
383
377
  //#endregion
384
- export { autocomplete, avatar, badgeWrap, bottomNav, breadcrumbs, button, chip, codeBlock, collapse, colorPicker, colors, commandPalette, common, contextMenu, dataTable, es_default as default, dialog, drawer, emptyState, fileUpload, fileValidation, form, formErrorBanner, formFile, imageViewer, input, inputTag, jsonViewer, kbd, link, list, loading, modal, navbar, numberInput, pagination, rating, responseError, select, sidebar, slider, sortable, splitter, statistic, steps, table, tabs, textarea, timeline, toaster, tree, treeSelect, uploadErrorBanner };
378
+ export { autocomplete, avatar, badgeWrap, bottomNav, breadcrumbs, button, chip, collapse, colorPicker, colors, commandPalette, common, contextMenu, dataTable, es_default as default, dialog, drawer, emptyState, fileUpload, fileValidation, form, formErrorBanner, formFile, imageViewer, input, inputTag, jsonViewer, kbd, link, list, loading, modal, navbar, numberInput, pagination, rating, responseError, select, sidebar, slider, sortable, splitter, statistic, steps, table, tabs, textarea, timeline, toaster, tree, treeSelect, uploadErrorBanner };