@feugene/granularity 0.20.0 → 0.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{config-BJ7Bv_G2.js → config-BC8d_smz.js} +10 -2
- package/dist/chunks/config-BC8d_smz.js.map +1 -0
- package/dist/chunks/config-BDfTXHo1.js.map +1 -0
- package/dist/chunks/config-BEVBsvni2.js.map +1 -0
- package/dist/chunks/config-BTCOJO5z2.js.map +1 -0
- package/dist/chunks/config-B_qi4Fma.js +92 -0
- package/dist/chunks/config-B_qi4Fma.js.map +1 -0
- package/dist/chunks/{config-gwro_7yn.js → config-Bm_Sovla.js} +6 -2
- package/dist/chunks/config-Bm_Sovla.js.map +1 -0
- package/dist/chunks/{config-BKvX0q10.js → config-C5mO5DYZ.js} +10 -1
- package/dist/chunks/config-C5mO5DYZ.js.map +1 -0
- package/dist/chunks/config-CIcynHGr.js +96 -0
- package/dist/chunks/config-CIcynHGr.js.map +1 -0
- package/dist/chunks/{config-BsuDM3Hb.js → config-CKULiuvc.js} +15 -1
- package/dist/chunks/config-CKULiuvc.js.map +1 -0
- package/dist/chunks/config-COpuWGr_.js.map +1 -0
- package/dist/chunks/config-DBQQT-WP.js +66 -0
- package/dist/chunks/config-DBQQT-WP.js.map +1 -0
- package/dist/chunks/config-DU2DNSRx.js.map +1 -0
- package/dist/chunks/config-QJ54_fcM.js +61 -0
- package/dist/chunks/config-QJ54_fcM.js.map +1 -0
- package/dist/chunks/config-ScuvHw6k.js.map +1 -0
- package/dist/chunks/config-eXB87DOi.js.map +1 -0
- package/dist/chunks/config-jyZq8XKL.js +58 -0
- package/dist/chunks/config-jyZq8XKL.js.map +1 -0
- package/dist/chunks/copy-DChChcq-.js +29 -0
- package/dist/chunks/copy-DChChcq-.js.map +1 -0
- package/dist/chunks/{en-COdzxgAX.js → en-DCCFP4qu.js} +18 -2
- package/dist/chunks/{en-COdzxgAX.js.map → en-DCCFP4qu.js.map} +1 -1
- package/dist/chunks/{es-ClqJ-4hr.js → es-CT34HBVM.js} +18 -2
- package/dist/chunks/{es-ClqJ-4hr.js.map → es-CT34HBVM.js.map} +1 -1
- package/dist/chunks/{es-DGMHwknJ.js → es-DdJsxlUr.js} +3 -3
- package/dist/chunks/{es-DGMHwknJ.js.map → es-DdJsxlUr.js.map} +1 -1
- package/dist/chunks/{generated-BRkbhyxk.js → generated-CiCrGDQO.js} +147 -0
- package/dist/chunks/{generated-BRkbhyxk.js.map → generated-CiCrGDQO.js.map} +1 -1
- package/dist/chunks/{granular-provider-CZYm70Pm.js → granular-provider-CYroWMjO.js} +21 -11
- package/dist/chunks/granular-provider-CYroWMjO.js.map +1 -0
- package/dist/chunks/{ru-9z8ix45c.js → ru-CLiAMwrx.js} +18 -2
- package/dist/chunks/{ru-9z8ix45c.js.map → ru-CLiAMwrx.js.map} +1 -1
- package/dist/chunks/trending-up-Bf9AQmoq.js +42 -0
- package/dist/chunks/trending-up-Bf9AQmoq.js.map +1 -0
- package/dist/components/GrCard/chunks/GrCard-Bc7nRfbe.js +144 -0
- package/dist/components/GrCard/chunks/GrCard-Bc7nRfbe.js.map +1 -0
- package/dist/components/GrCard/index.js +2 -2
- package/dist/components/GrCodeBlock/chunks/GrCodeBlock-BmXCLgLS.js +315 -0
- package/dist/components/GrCodeBlock/chunks/GrCodeBlock-BmXCLgLS.js.map +1 -0
- package/dist/components/GrCodeBlock/index.js +3 -0
- package/dist/components/GrCodeBlock/styles.css +1 -0
- package/dist/components/GrCollapse/chunks/{GrCollapse-KFcrji1L.js → GrCollapse-C1rCfbc0.js} +2 -2
- package/dist/components/GrCollapse/chunks/{GrCollapse-KFcrji1L.js.map → GrCollapse-C1rCfbc0.js.map} +1 -1
- package/dist/components/GrCollapse/index.js +2 -2
- package/dist/components/GrDataTable/chunks/{GrDataTable-CNvZg2HZ.js → GrDataTable-B5MmZFUg.js} +67 -5
- package/dist/components/GrDataTable/chunks/GrDataTable-B5MmZFUg.js.map +1 -0
- package/dist/components/GrDataTable/index.js +2 -2
- package/dist/components/GrDelta/chunks/GrDelta-BMmpYz8K.js +0 -0
- package/dist/components/GrDelta/chunks/GrDelta-BMmpYz8K.js.map +1 -0
- package/dist/components/GrDelta/index.js +3 -0
- package/dist/components/GrDescriptionList/chunks/GrDescriptionList-pXh1LZEe.js +103 -0
- package/dist/components/GrDescriptionList/chunks/GrDescriptionList-pXh1LZEe.js.map +1 -0
- package/dist/components/GrDescriptionList/index.js +3 -0
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-LOaFSCyd.js → GrDropdownMenu-DyS6dWDp.js} +2 -2
- package/dist/components/GrDropdownMenu/chunks/{GrDropdownMenu-LOaFSCyd.js.map → GrDropdownMenu-DyS6dWDp.js.map} +1 -1
- package/dist/components/GrDropdownMenu/index.js +2 -2
- package/dist/components/GrFilePreview/chunks/GrFilePreview-rbE3zL9w.js +315 -0
- package/dist/components/GrFilePreview/chunks/GrFilePreview-rbE3zL9w.js.map +1 -0
- package/dist/components/GrFilePreview/index.js +3 -0
- package/dist/components/GrForm/chunks/{GrForm-DdJw23Pz.js → GrForm-B_Qq_13k.js} +14 -7
- package/dist/components/GrForm/chunks/GrForm-B_Qq_13k.js.map +1 -0
- package/dist/components/GrForm/index.js +1 -1
- package/dist/components/GrImageViewer/chunks/{GrImageViewer-CMO10TS7.js.map → GrImageViewer-ng7el4wn.js.map} +1 -1
- package/dist/components/GrImageViewer/index.js +1 -1
- package/dist/components/GrInputTag/chunks/{GrInputTag-Dghhg03-.js.map → GrInputTag-C7QVPijj.js.map} +1 -1
- package/dist/components/GrInputTag/index.js +1 -1
- package/dist/components/GrJsonViewer/chunks/GrJsonViewer-DFUppRNb.js +389 -0
- package/dist/components/GrJsonViewer/chunks/GrJsonViewer-DFUppRNb.js.map +1 -0
- package/dist/components/GrJsonViewer/index.js +3 -0
- package/dist/components/GrList/chunks/{GrList-CHibO0xA.js → GrList-BRYhpqIe.js} +4 -4
- package/dist/components/GrList/chunks/GrList-BRYhpqIe.js.map +1 -0
- package/dist/components/GrList/index.js +2 -2
- package/dist/components/GrList/styles.css +1 -1
- package/dist/components/GrRadio/index.js +1 -1
- package/dist/components/GrSegmented/chunks/{GrSegmented-DP9WMAbm.js → GrSegmented-D1mjxF_O.js} +1 -1
- package/dist/components/GrSegmented/chunks/GrSegmented-D1mjxF_O.js.map +1 -0
- package/dist/components/GrSegmented/index.js +2 -2
- package/dist/components/GrSidebar/chunks/{GrSidebar-DG_t4aPE.js → GrSidebar-D7WxRtIu.js} +7 -1
- package/dist/components/GrSidebar/chunks/{GrSidebar-DG_t4aPE.js.map → GrSidebar-D7WxRtIu.js.map} +1 -1
- package/dist/components/GrSidebar/index.js +1 -1
- package/dist/components/GrSortableList/chunks/{GrSortableList-DJFPdUVv.js → GrSortableList-DPjxilmN.js} +1 -1
- package/dist/components/GrSortableList/chunks/{GrSortableList-DJFPdUVv.js.map → GrSortableList-DPjxilmN.js.map} +1 -1
- package/dist/components/GrSortableList/index.js +1 -1
- package/dist/components/GrStatistic/chunks/{GrStatistic-C3VpykHo.js → GrStatistic-DkzWUAw1.js} +8 -41
- package/dist/components/GrStatistic/chunks/GrStatistic-DkzWUAw1.js.map +1 -0
- package/dist/components/GrStatistic/index.js +1 -1
- package/dist/components/GrTabPanels/index.js +1 -1
- package/dist/components/GrTextarea/index.js +1 -1
- package/dist/components/GrTimeline/chunks/{GrTimeline-DlTraRn5.js → GrTimeline-Ch9sHzwL.js} +1 -1
- package/dist/components/GrTimeline/chunks/GrTimeline-Ch9sHzwL.js.map +1 -0
- package/dist/components/GrTimeline/index.js +2 -2
- package/dist/components/GrTimeline/styles.css +1 -1
- package/dist/components/GrToaster/chunks/{GrToaster-Db2NgrXu.js → GrToaster-DJUzx3sR.js} +1 -1
- package/dist/components/GrToaster/chunks/{GrToaster-Db2NgrXu.js.map → GrToaster-DJUzx3sR.js.map} +1 -1
- package/dist/components/GrToaster/index.js +2 -2
- package/dist/composables/useToast.js +14 -2
- package/dist/composables/useToast.js.map +1 -1
- package/dist/granular-provider-node.js +1 -1
- package/dist/granular-provider.js +1 -1
- package/dist/i18n/all.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/index.js +38 -28
- package/dist/theme.js +1 -1
- package/dist/tokens.js +1 -1
- package/dist/types/components/GrButton/GrButton.vue.d.ts +1 -1
- package/dist/types/components/GrCard/GrCard.vue.d.ts +25 -6
- package/dist/types/components/GrCard/defaults.d.ts +2 -1
- package/dist/types/components/GrCard/grCardStyles.d.ts +8 -0
- package/dist/types/components/GrCard/index.d.ts +1 -1
- package/dist/types/components/GrCodeBlock/GrCodeBlock.vue.d.ts +79 -0
- package/dist/types/components/GrCodeBlock/config.d.ts +1 -0
- package/dist/types/components/GrCodeBlock/defaults.d.ts +21 -0
- package/dist/types/components/GrCodeBlock/grCodeBlockStyles.d.ts +53 -0
- package/dist/types/components/GrCodeBlock/index.d.ts +6 -0
- package/dist/types/components/GrCodeBlock/safelist.d.ts +1 -0
- package/dist/types/components/GrCodeBlock/serializeCode.d.ts +19 -0
- package/dist/types/components/GrCodeBlock/tokenizeJson.d.ts +24 -0
- package/dist/types/components/GrCollapse/GrCollapse.vue.d.ts +2 -2
- package/dist/types/components/GrCommandPalette/GrCommandPalette.vue.d.ts +2 -2
- package/dist/types/components/GrDataTable/GrDataTable.vue.d.ts +38 -1
- package/dist/types/components/GrDataTable/grDataTableStyles.d.ts +7 -0
- package/dist/types/components/GrDataTable/index.d.ts +1 -1
- package/dist/types/components/GrDelta/GrDelta.vue.d.ts +84 -0
- package/dist/types/components/GrDelta/config.d.ts +1 -0
- package/dist/types/components/GrDelta/defaults.d.ts +22 -0
- package/dist/types/components/GrDelta/deltaTone.d.ts +24 -0
- package/dist/types/components/GrDelta/grDeltaStyles.d.ts +38 -0
- package/dist/types/components/GrDelta/index.d.ts +6 -0
- package/dist/types/components/GrDelta/safelist.d.ts +1 -0
- package/dist/types/components/GrDescriptionList/GrDescriptionList.vue.d.ts +107 -0
- package/dist/types/components/GrDescriptionList/config.d.ts +1 -0
- package/dist/types/components/GrDescriptionList/defaults.d.ts +21 -0
- package/dist/types/components/GrDescriptionList/grDescriptionListStyles.d.ts +25 -0
- package/dist/types/components/GrDescriptionList/index.d.ts +6 -0
- package/dist/types/components/GrDescriptionList/safelist.d.ts +1 -0
- package/dist/types/components/GrDropdownMenu/GrDropdownMenu.vue.d.ts +1 -1
- package/dist/types/components/GrDropdownMenu/grDropdownMenuStyles.d.ts +10 -1
- package/dist/types/components/GrFilePreview/GrFilePreview.vue.d.ts +100 -0
- package/dist/types/components/GrFilePreview/config.d.ts +1 -0
- package/dist/types/components/GrFilePreview/defaults.d.ts +20 -0
- package/dist/types/components/GrFilePreview/fileKindOf.d.ts +14 -0
- package/dist/types/components/GrFilePreview/grFilePreviewStyles.d.ts +37 -0
- package/dist/types/components/GrFilePreview/index.d.ts +6 -0
- package/dist/types/components/GrFilePreview/safelist.d.ts +1 -0
- package/dist/types/components/GrForm/GrForm.vue.d.ts +47 -86
- package/dist/types/components/GrFormField/GrFormField.vue.d.ts +2 -2
- package/dist/types/components/GrImageViewer/GrImageViewer.vue.d.ts +1 -1
- package/dist/types/components/GrInput/GrInput.vue.d.ts +1 -1
- package/dist/types/components/GrInputTag/GrInputTag.vue.d.ts +1 -1
- package/dist/types/components/GrJsonViewer/GrJsonViewer.vue.d.ts +129 -0
- package/dist/types/components/GrJsonViewer/config.d.ts +1 -0
- package/dist/types/components/GrJsonViewer/defaults.d.ts +23 -0
- package/dist/types/components/GrJsonViewer/grJsonViewerStyles.d.ts +57 -0
- package/dist/types/components/GrJsonViewer/index.d.ts +9 -0
- package/dist/types/components/GrJsonViewer/jsonToNodes.d.ts +47 -0
- package/dist/types/components/GrJsonViewer/safelist.d.ts +1 -0
- package/dist/types/components/GrList/grListStyles.d.ts +13 -0
- package/dist/types/components/GrNumberInput/GrNumberInput.vue.d.ts +1 -1
- package/dist/types/components/GrRating/GrRating.vue.d.ts +1 -1
- package/dist/types/components/GrSegmented/GrSegmented.vue.d.ts +1 -1
- package/dist/types/components/GrStatistic/GrStatistic.vue.d.ts +2 -2
- package/dist/types/components/GrSwitch/GrSwitch.vue.d.ts +1 -1
- package/dist/types/components/GrTable/GrTable.vue.d.ts +2 -2
- package/dist/types/components/GrTabs/GrTabs.vue.d.ts +1 -1
- package/dist/types/components/GrTimeline/GrTimelineItem.vue.d.ts +3 -3
- package/dist/types/components/shared/sizes.d.ts +5 -1
- package/dist/types/composables/useToast.d.ts +11 -0
- package/dist/types/granular-provider/shared.d.ts +5 -0
- package/dist/types/i18n/messages/en.d.ts +28 -0
- package/dist/types/i18n/messages/es.d.ts +28 -0
- package/dist/types/i18n/messages/ru.d.ts +28 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/web-types.json +661 -124
- package/package.json +22 -1
- package/dist/chunks/config-BDfTXHo12.js.map +0 -1
- package/dist/chunks/config-BEVBsvni.js.map +0 -1
- package/dist/chunks/config-BJ7Bv_G2.js.map +0 -1
- package/dist/chunks/config-BKvX0q10.js.map +0 -1
- package/dist/chunks/config-BTCOJO5z.js.map +0 -1
- package/dist/chunks/config-BsuDM3Hb.js.map +0 -1
- package/dist/chunks/config-COpuWGr_2.js.map +0 -1
- package/dist/chunks/config-DU2DNSRx2.js.map +0 -1
- package/dist/chunks/config-ScuvHw6k2.js.map +0 -1
- package/dist/chunks/config-eXB87DOi2.js.map +0 -1
- package/dist/chunks/config-gwro_7yn.js.map +0 -1
- package/dist/chunks/granular-provider-CZYm70Pm.js.map +0 -1
- package/dist/components/GrCard/chunks/GrCard-DfIZOP5N.js +0 -89
- package/dist/components/GrCard/chunks/GrCard-DfIZOP5N.js.map +0 -1
- package/dist/components/GrDataTable/chunks/GrDataTable-CNvZg2HZ.js.map +0 -1
- package/dist/components/GrForm/chunks/GrForm-DdJw23Pz.js.map +0 -1
- package/dist/components/GrList/chunks/GrList-CHibO0xA.js.map +0 -1
- package/dist/components/GrSegmented/chunks/GrSegmented-DP9WMAbm.js.map +0 -1
- package/dist/components/GrStatistic/chunks/GrStatistic-C3VpykHo.js.map +0 -1
- package/dist/components/GrTimeline/chunks/GrTimeline-DlTraRn5.js.map +0 -1
- package/dist/chunks/{config-BDfTXHo12.js → config-BDfTXHo1.js} +0 -0
- package/dist/chunks/{config-BEVBsvni.js → config-BEVBsvni2.js} +0 -0
- package/dist/chunks/{config-BTCOJO5z.js → config-BTCOJO5z2.js} +0 -0
- package/dist/chunks/{config-COpuWGr_2.js → config-COpuWGr_.js} +0 -0
- package/dist/chunks/{config-DU2DNSRx2.js → config-DU2DNSRx.js} +0 -0
- package/dist/chunks/{config-ScuvHw6k2.js → config-ScuvHw6k.js} +0 -0
- package/dist/chunks/{config-eXB87DOi2.js → config-eXB87DOi.js} +0 -0
- package/dist/components/GrImageViewer/chunks/{GrImageViewer-CMO10TS7.js → GrImageViewer-ng7el4wn.js} +1 -1
- package/dist/components/GrInputTag/chunks/{GrInputTag-Dghhg03-.js → GrInputTag-C7QVPijj.js} +1 -1
|
@@ -48,6 +48,13 @@ var columnDropAfterClass = "after:absolute after:inset-y-0 after:right-0 after:w
|
|
|
48
48
|
*/
|
|
49
49
|
var rowSelectedClass = "bg-[color-mix(in_srgb,var(--gr-primary)_8%,transparent)]";
|
|
50
50
|
/**
|
|
51
|
+
* Итоговая строка. Отбивка та же, что между строками тела, плюс вес: итог —
|
|
52
|
+
* вывод из набора, а не ещё одна его запись, и читатель должен видеть это до
|
|
53
|
+
* того, как разберёт цифры. Тон оставлен потребителю: «возвраты» и «прибыль» —
|
|
54
|
+
* разные сообщения, и выбирать за него компонент не должен.
|
|
55
|
+
*/
|
|
56
|
+
var summaryRowClass = "border-t border-[var(--gr-brd)] font-600";
|
|
57
|
+
/**
|
|
51
58
|
* Ручка ширины — полоса у правого края заголовка. Видима она узкой линией, а
|
|
52
59
|
* ловится широкой зоной: попасть в двухпиксельную границу мышью тяжело.
|
|
53
60
|
*/
|
|
@@ -131,7 +138,8 @@ var grDataTableSafelist = [.../* @__PURE__ */ new Set([
|
|
|
131
138
|
...splitClassTokens(columnPinnedClass),
|
|
132
139
|
...splitClassTokens(columnPinnedLeftEdgeClass),
|
|
133
140
|
...splitClassTokens(columnPinnedRightEdgeClass),
|
|
134
|
-
...splitClassTokens(rowSelectedClass)
|
|
141
|
+
...splitClassTokens(rowSelectedClass),
|
|
142
|
+
...splitClassTokens(summaryRowClass)
|
|
135
143
|
])];
|
|
136
144
|
//#endregion
|
|
137
145
|
//#region src/components/GrDataTable/config.ts
|
|
@@ -145,4 +153,4 @@ var grDataTableConfig = defineGranularComponent(import.meta.url, {
|
|
|
145
153
|
safelist: grDataTableSafelist
|
|
146
154
|
});
|
|
147
155
|
//#endregion
|
|
148
|
-
export { sortIconSizes as C, selectColumnWidths as S, headerTextSizes as _, columnDropAfterClass as a, rowSelectedClass as b, columnHandleClass as c, columnPinnedRightEdgeClass as d, columnResizerClass as f, headerGaps as g, columnResizerLineClass as h, columnDraggingClass as i, columnPinnedClass as l, columnResizerLineActiveClass as m, grDataTableSafelist as n, columnDropBeforeClass as o, columnResizerHoverClass as p, cellPaddings as r, columnHandleActiveClass as s, grDataTableConfig as t, columnPinnedLeftEdgeClass as u, placeholderPaddings as v, spinnerSizes as w, selectCheckboxSizes as x, rowHeightEstimates as y };
|
|
156
|
+
export { sortIconSizes as C, selectColumnWidths as S, summaryRowClass as T, headerTextSizes as _, columnDropAfterClass as a, rowSelectedClass as b, columnHandleClass as c, columnPinnedRightEdgeClass as d, columnResizerClass as f, headerGaps as g, columnResizerLineClass as h, columnDraggingClass as i, columnPinnedClass as l, columnResizerLineActiveClass as m, grDataTableSafelist as n, columnDropBeforeClass as o, columnResizerHoverClass as p, cellPaddings as r, columnHandleActiveClass as s, grDataTableConfig as t, columnPinnedLeftEdgeClass as u, placeholderPaddings as v, spinnerSizes as w, selectCheckboxSizes as x, rowHeightEstimates as y };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-BC8d_smz.js","names":[],"sources":["../../src/components/GrDataTable/grDataTableStyles.ts","../../src/components/GrDataTable/safelist.ts","../../src/components/GrDataTable/config.ts"],"sourcesContent":["import type { GrCheckboxSize } from '../GrCheckbox/grCheckboxStyles'\nimport type { GrComponentSize } from '../shared/sizes'\n\nexport type GrDataTableSize = GrComponentSize\n\n/** Паддинг ячейки — и в шапке, и в теле: колонки обязаны совпадать по сетке. */\nexport const cellPaddings: Record<GrDataTableSize, string> = {\n xs: 'px-2 py-1.5',\n sm: 'px-3 py-2',\n md: 'px-4 py-3',\n lg: 'px-5 py-4',\n}\n\n/**\n * Оценка высоты строки по размеру: два вертикальных отступа ячейки плюс строка\n * текста и рамка. Виртуализация уточняет её замером — точное число здесь знать\n * неоткуда, содержимое ячейки задаёт потребитель.\n */\nexport const rowHeightEstimates: Record<GrDataTableSize, number> = {\n xs: 33,\n sm: 41,\n md: 49,\n lg: 57,\n}\n\n/** Заглушки loading/empty: по горизонтали как ячейка, по вертикали просторнее. */\nexport const placeholderPaddings: Record<GrDataTableSize, string> = {\n xs: 'px-2 py-3',\n sm: 'px-3 py-4',\n md: 'px-4 py-6',\n lg: 'px-5 py-8',\n}\n\n/**\n * Ручка перестановки колонки. Появляется по наведению на заголовок и по\n * фокусу: постоянная сетка ручек в шапке из десяти колонок читается как рябь,\n * а не как управление.\n */\nexport const columnHandleClass = 'inline-flex shrink-0 cursor-grab items-center text-[var(--gr-datatable-drag-handle,var(--gr-muted-fg))] opacity-0 [touch-action:none] transition-opacity duration-[var(--gr-duration-fast)] focus:outline-none focus-visible:opacity-100 focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] rounded-[var(--gr-radius-sm)] group-hover:opacity-100'\n\nexport const columnHandleActiveClass = 'opacity-100'\n\n\n/** Переносимая колонка гасится, чтобы было видно, что она «поднята». */\nexport const columnDraggingClass = 'bg-[var(--gr-muted)]'\n\n/**\n * Место вставки — полоса по краю ячейки заголовка. Псевдоэлемент, а не свой\n * узел: `<th>` не терпит посторонних детей в раскладке таблицы.\n */\nexport const columnDropBeforeClass = 'before:absolute before:inset-y-0 before:left-0 before:w-[var(--gr-datatable-drag-indicator-width,2px)] before:bg-[var(--gr-datatable-drag-indicator,var(--gr-primary))] before:content-empty'\n\nexport const columnDropAfterClass = 'after:absolute after:inset-y-0 after:right-0 after:w-[var(--gr-datatable-drag-indicator-width,2px)] after:bg-[var(--gr-datatable-drag-indicator,var(--gr-primary))] after:content-empty'\n\n/**\n * Подсветка выбранной строки. Живёт здесь, потому что закреплённой ячейке её\n * приходится повторять: у ячейки свой непрозрачный фон, и подсветка строки\n * сквозь него не видна.\n */\nexport const rowSelectedClass = 'bg-[color-mix(in_srgb,var(--gr-primary)_8%,transparent)]'\n\n/**\n * Итоговая строка. Отбивка та же, что между строками тела, плюс вес: итог —\n * вывод из набора, а не ещё одна его запись, и читатель должен видеть это до\n * того, как разберёт цифры. Тон оставлен потребителю: «возвраты» и «прибыль» —\n * разные сообщения, и выбирать за него компонент не должен.\n */\nexport const summaryRowClass = 'border-t border-[var(--gr-brd)] font-600'\n\n/**\n * Ручка ширины — полоса у правого края заголовка. Видима она узкой линией, а\n * ловится широкой зоной: попасть в двухпиксельную границу мышью тяжело.\n */\nexport const columnResizerClass = 'absolute inset-y-0 right-0 z-[1] flex w-3 translate-x-1/2 cursor-col-resize items-stretch justify-center [touch-action:none] focus:outline-none'\n\nexport const columnResizerLineClass = 'w-[var(--gr-datatable-resizer-width,2px)] bg-transparent transition-colors duration-[var(--gr-duration-fast)]'\n\n/** Полоса подсвечивается только когда её ведут или на неё встал фокус. */\nexport const columnResizerLineActiveClass = 'bg-[var(--gr-datatable-resizer,var(--gr-primary))]'\n\nexport const columnResizerHoverClass = 'hover:bg-[var(--gr-datatable-resizer,var(--gr-primary))] focus-visible:bg-[var(--gr-datatable-resizer,var(--gr-primary))]'\n\n/**\n * Закреплённая колонка липнет к краю прокрутки. Фон обязателен: без него\n * уезжающие под неё ячейки просвечивают насквозь.\n */\nexport const columnPinnedClass = 'sticky z-[2] bg-[var(--gr-card)]'\n\n/** Граница группы закреплённых колонок — тень, а не рамка: рамка сдвигает сетку. */\nexport const columnPinnedLeftEdgeClass = 'shadow-[var(--gr-datatable-pinned-shadow,4px_0_6px_-4px_rgba(0,0,0,0.25))]'\n\nexport const columnPinnedRightEdgeClass = 'shadow-[var(--gr-datatable-pinned-shadow-end,-4px_0_6px_-4px_rgba(0,0,0,0.25))]'\n\n/** Подпись колонки набирается мельче тела таблицы — она не данные, а навигация. */\nexport const headerTextSizes: Record<GrDataTableSize, string> = {\n xs: 'text-[length:var(--gr-control-text-3xs)]',\n sm: 'text-[length:var(--gr-control-text-2xs)]',\n md: 'text-[length:var(--gr-control-text-xs)] leading-[var(--gr-leading-xs)]',\n lg: 'text-[length:var(--gr-control-text-md)] leading-[var(--gr-leading-sm)]',\n}\n\n/**\n * Размер `GrCheckbox` в колонке выбора. Здесь не классы, а ступень шкалы:\n * коробку рисует сам чекбокс — он же держит `indeterminate`, disabled без\n * `opacity` и фокус-кольцо.\n */\nexport const selectCheckboxSizes: Record<GrDataTableSize, GrCheckboxSize> = {\n xs: 'xs',\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n}\n\n/** Ширина колонки выбора: коробка чекбокса плюс горизонтальный паддинг ячейки. */\nexport const selectColumnWidths: Record<GrDataTableSize, string> = {\n xs: 'w-7',\n sm: 'w-8',\n md: 'w-10',\n lg: 'w-12',\n}\n\n/** Зазор между подписью колонки и стрелкой сортировки. */\nexport const headerGaps: Record<GrDataTableSize, string> = {\n xs: 'gap-1',\n sm: 'gap-1.5',\n md: 'gap-2',\n lg: 'gap-2',\n}\n\n/** Спиннер в строке загрузки — тем же кеглем, что иконка сортировки рядом. */\nexport const spinnerSizes: Record<GrDataTableSize, string> = {\n xs: 'h-3 w-3',\n sm: 'h-3.5 w-3.5',\n md: 'h-4 w-4',\n lg: 'h-5 w-5',\n}\n\n/** Стрелка сортировки берёт размер из шкалы `GrIcon` (`xs…lg` → `14…20px`). */\nexport const sortIconSizes: Record<GrDataTableSize, GrComponentSize> = {\n xs: 'xs',\n sm: 'xs',\n md: 'sm',\n lg: 'md',\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n cellPaddings,\n columnDraggingClass,\n columnDropAfterClass,\n columnDropBeforeClass,\n columnHandleActiveClass,\n columnHandleClass,\n columnPinnedClass,\n columnPinnedLeftEdgeClass,\n columnPinnedRightEdgeClass,\n columnResizerClass,\n columnResizerHoverClass,\n columnResizerLineActiveClass,\n columnResizerLineClass,\n headerGaps,\n headerTextSizes,\n placeholderPaddings,\n rowSelectedClass,\n selectColumnWidths,\n spinnerSizes,\n summaryRowClass,\n} from './grDataTableStyles'\n\nexport const grDataTableSafelist = [...new Set([\n ...Object.values(cellPaddings).flatMap(splitClassTokens),\n ...Object.values(placeholderPaddings).flatMap(splitClassTokens),\n ...Object.values(headerTextSizes).flatMap(splitClassTokens),\n ...Object.values(selectColumnWidths).flatMap(splitClassTokens),\n ...Object.values(headerGaps).flatMap(splitClassTokens),\n ...Object.values(spinnerSizes).flatMap(splitClassTokens),\n ...splitClassTokens(columnHandleClass),\n ...splitClassTokens(columnHandleActiveClass),\n ...splitClassTokens(columnDraggingClass),\n ...splitClassTokens(columnDropBeforeClass),\n ...splitClassTokens(columnDropAfterClass),\n ...splitClassTokens(columnResizerClass),\n ...splitClassTokens(columnResizerLineClass),\n ...splitClassTokens(columnResizerLineActiveClass),\n ...splitClassTokens(columnResizerHoverClass),\n ...splitClassTokens(columnPinnedClass),\n ...splitClassTokens(columnPinnedLeftEdgeClass),\n ...splitClassTokens(columnPinnedRightEdgeClass),\n ...splitClassTokens(rowSelectedClass),\n ...splitClassTokens(summaryRowClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDataTableSafelist } from './safelist'\n\nexport const grDataTableConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDataTable',\n dependencies: ['GrTable', 'GrIcon', 'GrCheckbox'],\n safelist: grDataTableSafelist,\n})\n"],"mappings":";;;;AAMA,IAAa,eAAgD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;AAOA,IAAa,qBAAsD;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,sBAAuD;CAClE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;AAOA,IAAa,oBAAoB;AAEjC,IAAa,0BAA0B;;AAIvC,IAAa,sBAAsB;;;;;AAMnC,IAAa,wBAAwB;AAErC,IAAa,uBAAuB;;;;;;AAOpC,IAAa,mBAAmB;;;;;;;AAQhC,IAAa,kBAAkB;;;;;AAM/B,IAAa,qBAAqB;AAElC,IAAa,yBAAyB;;AAGtC,IAAa,+BAA+B;AAE5C,IAAa,0BAA0B;;;;;AAMvC,IAAa,oBAAoB;;AAGjC,IAAa,4BAA4B;AAEzC,IAAa,6BAA6B;;AAG1C,IAAa,kBAAmD;CAC9D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;AAOA,IAAa,sBAA+D;CAC1E,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,qBAAsD;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,aAA8C;CACzD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,eAAgD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,gBAA0D;CACrE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;ACvHA,IAAa,sBAAsB,CAAC,mBAAG,IAAI,IAAI;CAC7C,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,OAAO,OAAO,mBAAmB,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;CAC7D,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CACrD,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,4BAA4B;CAChD,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,yBAAyB;CAC7C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,eAAe;AACrC,CAAC,CAAC;;;ACzCF,IAAa,oBAAoB,wBAAwB,OAAO,KAAK,KAAK;CACxE,MAAM;CACN,cAAc;EAAC;EAAW;EAAU;CAAY;CAChD,UAAU;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-BDfTXHo1.js","names":[],"sources":["../../src/components/GrTextarea/safelist.ts","../../src/components/GrTextarea/config.ts"],"sourcesContent":["import { splitClassTokens } from '../shared/classTokens'\nimport {\n borderClassByState,\n countClass,\n countRowClass,\n lineCountClass,\n disabledSurfaceClass,\n enabledSurfaceClass,\n invalidBorderClass,\n resizeClass,\n sizes,\n} from './grTextareaStyles'\n\nexport const grTextareaSafelist = [...new Set([\n ...Object.values(borderClassByState).flatMap(splitClassTokens),\n ...splitClassTokens(invalidBorderClass),\n ...Object.values(sizes).flatMap(splitClassTokens),\n ...Object.values(resizeClass).flatMap(splitClassTokens),\n ...splitClassTokens(enabledSurfaceClass),\n ...splitClassTokens(disabledSurfaceClass),\n ...splitClassTokens(countClass),\n ...splitClassTokens(countRowClass),\n ...splitClassTokens(lineCountClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTextareaSafelist } from './safelist'\n\nexport const grTextareaConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTextarea',\n safelist: grTextareaSafelist,\n})"],"mappings":";;;;AAaA,IAAa,qBAAqB,CAAC,mBAAG,IAAI,IAAI;CAC5C,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;CAC7D,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,OAAO,OAAO,KAAK,CAAC,CAAC,QAAQ,gBAAgB;CAChD,GAAG,OAAO,OAAO,WAAW,CAAC,CAAC,QAAQ,gBAAgB;CACtD,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,cAAc;AACpC,CAAC,CAAC;;;ACnBF,IAAa,mBAAmB,wBAAwB,OAAO,KAAK,KAAK;CACvE,MAAM;CACN,UAAU;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-BEVBsvni2.js","names":[],"sources":["../../src/components/GrSegmented/grSegmentedStyles.ts","../../src/components/GrSegmented/safelist.ts","../../src/components/GrSegmented/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nimport type { Component } from 'vue'\nexport type GrSegmentedVariant = 'pills' | 'button'\nexport type GrSegmentedSize = GrComponentSize\n\n/** Направление ряда сегментов. Вертикаль — боковые фильтры. */\nexport const GR_SEGMENTED_ORIENTATIONS = ['horizontal', 'vertical'] as const\nexport type GrSegmentedOrientation = typeof GR_SEGMENTED_ORIENTATIONS[number]\nexport type GrSegmentedValue = string | number\nexport type GrSegmentedOption = {\n value: GrSegmentedValue\n label?: string\n icon?: Component\n disabled?: boolean\n /**\n * Сегмент занят: вместо иконки крутится спиннер, выбор не принимается.\n * От `disabled` отличается смыслом — сегмент доступен, но сейчас работает.\n */\n loading?: boolean\n /**\n * Доступное имя сегмента. Обязательно для icon-only опций: иконка декоративна\n * (`aria-hidden`), и без этого у сегмента нет имени вовсе — скринридер объявит\n * пустую кнопку. Когда есть `label`, имя берётся из него, и поле не нужно.\n */\n ariaLabel?: string\n}\nexport const rootBaseClass =\n 'relative inline-grid min-w-0 items-stretch rounded-[var(--gr-segmented-radius)] p-[var(--gr-segmented-padding)] transition-colors duration-[var(--gr-duration-fast)]'\n\n/** Направление потока: остальную раскладку задают `gridTemplate*` в стиле корня. */\nexport const rootOrientationClassMap: Record<GrSegmentedOrientation, string> = {\n horizontal: 'grid-flow-col',\n vertical: 'grid-flow-row',\n}\nexport const rootVariantClassMap: Record<GrSegmentedVariant, string> = {\n pills: 'border border-[var(--gr-segmented-track-brd)] bg-[var(--gr-segmented-track-bg)] text-[var(--gr-segmented-item-color)]',\n button: 'border border-[var(--gr-segmented-track-brd)] bg-[var(--gr-segmented-track-bg)] text-[var(--gr-segmented-item-color)] shadow-[var(--gr-segmented-track-shadow)]',\n}\nexport const rootBlockClass = 'w-full'\nexport const rootDisabledClass = 'text-[var(--gr-disabled-fg)]'\nexport const indicatorBaseClass =\n 'pointer-events-none absolute left-0 top-0 rounded-[calc(var(--gr-segmented-radius)-var(--gr-segmented-padding))] transition-[transform,width,height,opacity] ease-[var(--gr-ease-out)]'\nexport const indicatorVariantClassMap: Record<GrSegmentedVariant, string> = {\n pills: 'border border-[var(--gr-segmented-indicator-brd)] bg-[var(--gr-segmented-indicator-bg)] shadow-[var(--gr-segmented-indicator-shadow)]',\n button: 'border border-[var(--gr-segmented-indicator-brd)] bg-[var(--gr-segmented-indicator-bg)] shadow-[var(--gr-segmented-indicator-shadow)]',\n}\nexport const itemBaseClass =\n 'group/segmented-item relative z-[1] inline-flex min-h-[var(--gr-segmented-min-height)] min-w-0 items-center justify-center gap-2 rounded-[calc(var(--gr-segmented-radius)-var(--gr-segmented-padding))] px-[var(--gr-segmented-item-px)] py-[var(--gr-segmented-item-py)] text-[length:var(--gr-segmented-font-size)] leading-[var(--gr-segmented-line-height)] font-[var(--gr-segmented-font-weight)] text-[var(--gr-segmented-item-color)] transition-colors duration-[var(--gr-duration-fast)] select-none focus:outline-none focus-visible:shadow-[0_0_0_2px_var(--gr-ring),0_0_0_4px_var(--gr-bg)]'\nexport const itemVariantClassMap: Record<GrSegmentedVariant, string> = {\n pills: '',\n button: '',\n}\nexport const itemSelectedClass = 'text-[var(--gr-segmented-item-selected-color)]'\n/**\n * Недоступный сегмент гасится токеном, а не `opacity`: прозрачность разбавляет\n * выверенные на AA токены текста и роняет контраст подписи.\n */\nexport const itemDisabledClass = 'cursor-not-allowed text-[var(--gr-disabled-fg)]'\nexport const itemEnabledClass = 'cursor-pointer hover:text-[var(--gr-segmented-item-hover-color)]'\nexport const itemLabelClass = 'truncate'\nexport const itemIconClass = 'h-4 w-4 shrink-0'\nexport const itemSpinnerClass = 'h-4 w-4 shrink-0 animate-spin'\nexport const iconOnlyClass = 'gap-0'\nconst rootSizeStyles: Record<GrSegmentedSize, Record<string, string>> = {\n xs: {\n '--gr-segmented-radius': '9999px',\n '--gr-segmented-padding': '4px',\n '--gr-segmented-item-px': '10px',\n '--gr-segmented-item-py': '4px',\n '--gr-segmented-font-size': '0.75rem',\n '--gr-segmented-line-height': '1rem',\n '--gr-segmented-font-weight': '600',\n '--gr-segmented-min-height': '24px',\n },\n sm: {\n '--gr-segmented-radius': '9999px',\n '--gr-segmented-padding': '4px',\n '--gr-segmented-item-px': '12px',\n '--gr-segmented-item-py': '6px',\n '--gr-segmented-font-size': '0.75rem',\n '--gr-segmented-line-height': '1rem',\n '--gr-segmented-font-weight': '600',\n '--gr-segmented-min-height': '28px',\n },\n md: {\n '--gr-segmented-radius': '9999px',\n '--gr-segmented-padding': '4px',\n '--gr-segmented-item-px': '14px',\n '--gr-segmented-item-py': '8px',\n '--gr-segmented-font-size': '0.875rem',\n '--gr-segmented-line-height': '1.25rem',\n '--gr-segmented-font-weight': '600',\n '--gr-segmented-min-height': '40px',\n },\n lg: {\n '--gr-segmented-radius': '9999px',\n '--gr-segmented-padding': '4px',\n '--gr-segmented-item-px': '16px',\n '--gr-segmented-item-py': '10px',\n '--gr-segmented-font-size': '0.9375rem',\n '--gr-segmented-line-height': '1.25rem',\n '--gr-segmented-font-weight': '600',\n '--gr-segmented-min-height': '46px',\n },\n}\nconst rootVariantStyles: Record<GrSegmentedVariant, Record<string, string>> = {\n pills: {\n '--gr-segmented-track-bg': 'var(--gr-muted)',\n '--gr-segmented-track-brd': 'var(--gr-brd)',\n '--gr-segmented-track-shadow': 'none',\n '--gr-segmented-indicator-bg': 'var(--gr-card)',\n '--gr-segmented-indicator-brd': 'color-mix(in srgb, var(--gr-card) 84%, var(--gr-brd) 16%)',\n '--gr-segmented-indicator-shadow': 'var(--gr-shadow-1), var(--gr-segmented-indicator-highlight-shadow, 0 0 0 0 transparent)',\n '--gr-segmented-item-color': 'var(--gr-muted-fg)',\n '--gr-segmented-item-selected-color': 'var(--gr-fg)',\n '--gr-segmented-item-hover-color': 'var(--gr-fg)',\n },\n button: {\n '--gr-segmented-track-bg': 'var(--gr-card)',\n '--gr-segmented-track-brd': 'var(--gr-brd)',\n '--gr-segmented-track-shadow': 'var(--gr-shadow-1)',\n '--gr-segmented-indicator-bg': 'var(--gr-primary)',\n '--gr-segmented-indicator-brd': 'color-mix(in srgb, var(--gr-primary) 88%, var(--gr-brd) 12%)',\n '--gr-segmented-indicator-shadow': 'var(--gr-shadow-2)',\n '--gr-segmented-item-color': 'var(--gr-muted-fg)',\n '--gr-segmented-item-selected-color': 'var(--gr-primary-fg)',\n '--gr-segmented-item-hover-color': 'var(--gr-fg)',\n },\n}\nexport function grSegmentedRootClass(options: {\n variant: GrSegmentedVariant\n orientation: GrSegmentedOrientation\n block: boolean\n disabled: boolean\n}): string {\n return [\n rootBaseClass,\n rootOrientationClassMap[options.orientation],\n rootVariantClassMap[options.variant],\n options.block ? rootBlockClass : '',\n options.disabled ? rootDisabledClass : '',\n ].filter(Boolean).join(' ')\n}\n/**\n * Радиус дорожки в вертикали — пилюля **одной строки**, а не всей колонки.\n * `9999px` выверен под короткий горизонтальный ряд; на высокой колонке он\n * превращает дорожку в эллипс. Формула повторяет высоту сегмента, поэтому\n * скругление у колонки ровно такое же, как у ряда, и сегменты внутри остаются\n * пилюлями: они считают свой радиус от этого же значения.\n */\nconst verticalRadiusStyle = {\n '--gr-segmented-radius': 'calc(var(--gr-segmented-min-height) / 2 + var(--gr-segmented-padding))',\n}\n\nexport function grSegmentedRootStyle(options: {\n variant: GrSegmentedVariant\n size: GrSegmentedSize\n orientation: GrSegmentedOrientation\n}): Record<string, string> {\n return {\n ...rootSizeStyles[options.size],\n ...rootVariantStyles[options.variant],\n ...(options.orientation === 'vertical' ? verticalRadiusStyle : {}),\n }\n}\nexport function grSegmentedIndicatorClass(variant: GrSegmentedVariant): string {\n return [indicatorBaseClass, indicatorVariantClassMap[variant]].join(' ')\n}\nexport function grSegmentedItemClass(options: {\n variant: GrSegmentedVariant\n selected: boolean\n disabled: boolean\n iconOnly: boolean\n}): string {\n return [\n itemBaseClass,\n itemVariantClassMap[options.variant],\n options.selected ? itemSelectedClass : '',\n options.disabled ? itemDisabledClass : itemEnabledClass,\n options.iconOnly ? iconOnlyClass : '',\n ].filter(Boolean).join(' ')\n}\nexport const grSegmentedItemLabelClass = itemLabelClass\nexport const grSegmentedItemIconClass = itemIconClass\nexport const grSegmentedItemSpinnerClass = itemSpinnerClass\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n iconOnlyClass,\n indicatorBaseClass,\n indicatorVariantClassMap,\n itemBaseClass,\n itemDisabledClass,\n itemEnabledClass,\n itemIconClass,\n itemLabelClass,\n itemSpinnerClass,\n itemSelectedClass,\n itemVariantClassMap,\n rootBaseClass,\n rootBlockClass,\n rootDisabledClass,\n rootOrientationClassMap,\n rootVariantClassMap,\n} from './grSegmentedStyles'\n\nexport const grSegmentedClassTokens = {\n rootBaseClass: splitClassTokens(rootBaseClass),\n rootOrientationClassMap: Object.values(rootOrientationClassMap).flatMap(splitClassTokens),\n rootVariantClassMap: Object.values(rootVariantClassMap).flatMap(splitClassTokens),\n rootBlockClass: splitClassTokens(rootBlockClass),\n rootDisabledClass: splitClassTokens(rootDisabledClass),\n indicatorBaseClass: splitClassTokens(indicatorBaseClass),\n indicatorVariantClassMap: Object.values(indicatorVariantClassMap).flatMap(splitClassTokens),\n itemBaseClass: splitClassTokens(itemBaseClass),\n itemVariantClassMap: Object.values(itemVariantClassMap).flatMap(splitClassTokens),\n itemSelectedClass: splitClassTokens(itemSelectedClass),\n itemDisabledClass: splitClassTokens(itemDisabledClass),\n itemEnabledClass: splitClassTokens(itemEnabledClass),\n itemLabelClass: splitClassTokens(itemLabelClass),\n itemIconClass: splitClassTokens(itemIconClass),\n itemSpinnerClass: splitClassTokens(itemSpinnerClass),\n iconOnlyClass: splitClassTokens(iconOnlyClass),\n} as const\n\nexport const grSegmentedSafelist = [...new Set([\n ...grSegmentedClassTokens.rootBaseClass,\n ...grSegmentedClassTokens.rootOrientationClassMap,\n ...grSegmentedClassTokens.rootVariantClassMap,\n ...grSegmentedClassTokens.rootBlockClass,\n ...grSegmentedClassTokens.rootDisabledClass,\n ...grSegmentedClassTokens.indicatorBaseClass,\n ...grSegmentedClassTokens.indicatorVariantClassMap,\n ...grSegmentedClassTokens.itemBaseClass,\n ...grSegmentedClassTokens.itemVariantClassMap,\n ...grSegmentedClassTokens.itemSelectedClass,\n ...grSegmentedClassTokens.itemDisabledClass,\n ...grSegmentedClassTokens.itemEnabledClass,\n ...grSegmentedClassTokens.itemLabelClass,\n ...grSegmentedClassTokens.itemIconClass,\n ...grSegmentedClassTokens.itemSpinnerClass,\n ...grSegmentedClassTokens.iconOnlyClass,\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grSegmentedSafelist } from './safelist'\n\nexport const grSegmentedConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSegmented',\n safelist: grSegmentedSafelist,\n tokenDefinitions: {\n light: {\n selector: ':root',\n tokens: {'gr-segmented-indicator-highlight-shadow': '0 0 0 0 transparent'}\n },\n dark: {\n selector: '.dark',\n tokens: {'gr-segmented-indicator-highlight-shadow': '0 0 0 1px rgba(248, 250, 252, 0.08)'}\n },\n }\n})"],"mappings":";;;AA2BA,IAAa,gBACX;;AAGF,IAAa,0BAAkE;CAC7E,YAAY;CACZ,UAAU;AACZ;AACA,IAAa,sBAA0D;CACrE,OAAO;CACP,QAAQ;AACV;AACA,IAAa,iBAAiB;AAC9B,IAAa,oBAAoB;AACjC,IAAa,qBACX;AACF,IAAa,2BAA+D;CAC1E,OAAQ;CACR,QAAQ;AACV;AACA,IAAa,gBACX;AACF,IAAa,sBAA0D;CACrE,OAAO;CACP,QAAQ;AACV;AACA,IAAa,oBAAoB;;;;;AAKjC,IAAa,oBAAoB;AACjC,IAAa,mBAAmB;AAChC,IAAa,iBAAiB;AAC9B,IAAa,gBAAgB;AAC7B,IAAa,mBAAmB;AAChC,IAAa,gBAAgB;AAC7B,IAAM,iBAAkE;CACtE,IAAI;EACF,yBAAyB;EACzB,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,4BAA4B;EAC5B,8BAA8B;EAC9B,8BAA8B;EAC9B,6BAA6B;CAC/B;CACA,IAAI;EACF,yBAAyB;EACzB,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,4BAA4B;EAC5B,8BAA8B;EAC9B,8BAA8B;EAC9B,6BAA6B;CAC/B;CACA,IAAI;EACF,yBAAyB;EACzB,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,4BAA4B;EAC5B,8BAA8B;EAC9B,8BAA8B;EAC9B,6BAA6B;CAC/B;CACA,IAAI;EACF,yBAAyB;EACzB,0BAA0B;EAC1B,0BAA0B;EAC1B,0BAA0B;EAC1B,4BAA4B;EAC5B,8BAA8B;EAC9B,8BAA8B;EAC9B,6BAA6B;CAC/B;AACF;AACA,IAAM,oBAAwE;CAC5E,OAAO;EACL,2BAA2B;EAC3B,4BAA4B;EAC5B,+BAA+B;EAC/B,+BAA+B;EAC/B,gCAAgC;EAChC,mCAAmC;EACnC,6BAA6B;EAC7B,sCAAsC;EACtC,mCAAmC;CACrC;CACA,QAAQ;EACN,2BAA2B;EAC3B,4BAA4B;EAC5B,+BAA+B;EAC/B,+BAA+B;EAC/B,gCAAgC;EAChC,mCAAmC;EACnC,6BAA6B;EAC7B,sCAAsC;EACtC,mCAAmC;CACrC;AACF;AACA,SAAgB,qBAAqB,SAK1B;CACT,OAAO;EACL;EACA,wBAAwB,QAAQ;EAChC,oBAAoB,QAAQ;EAC5B,QAAQ,QAAQ,iBAAiB;EACjC,QAAQ,WAAW,oBAAoB;CACzC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;;;;;;;;AAQA,IAAM,sBAAsB,EAC1B,yBAAyB,yEAC3B;AAEA,SAAgB,qBAAqB,SAIV;CACzB,OAAO;EACL,GAAG,eAAe,QAAQ;EAC1B,GAAG,kBAAkB,QAAQ;EAC7B,GAAI,QAAQ,gBAAgB,aAAa,sBAAsB,CAAC;CAClE;AACF;AACA,SAAgB,0BAA0B,SAAqC;CAC7E,OAAO,CAAC,oBAAoB,yBAAyB,QAAQ,CAAC,CAAC,KAAK,GAAG;AACzE;AACA,SAAgB,qBAAqB,SAK1B;CACT,OAAO;EACL;EACA,oBAAoB,QAAQ;EAC5B,QAAQ,WAAW,oBAAoB;EACvC,QAAQ,WAAW,oBAAoB;EACvC,QAAQ,WAAW,gBAAgB;CACrC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;AACA,IAAa,4BAA4B;AACzC,IAAa,2BAA2B;AACxC,IAAa,8BAA8B;;;ACrK3C,IAAa,yBAAyB;CACpC,eAAe,iBAAiB,aAAa;CAC7C,yBAAyB,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CACxF,qBAAqB,OAAO,OAAO,mBAAmB,CAAC,CAAC,QAAQ,gBAAgB;CAChF,gBAAgB,iBAAiB,cAAc;CAC/C,mBAAmB,iBAAiB,iBAAiB;CACrD,oBAAoB,iBAAiB,kBAAkB;CACvD,0BAA0B,OAAO,OAAO,wBAAwB,CAAC,CAAC,QAAQ,gBAAgB;CAC1F,eAAe,iBAAiB,aAAa;CAC7C,qBAAqB,OAAO,OAAO,mBAAmB,CAAC,CAAC,QAAQ,gBAAgB;CAChF,mBAAmB,iBAAiB,iBAAiB;CACrD,mBAAmB,iBAAiB,iBAAiB;CACrD,kBAAkB,iBAAiB,gBAAgB;CACnD,gBAAgB,iBAAiB,cAAc;CAC/C,eAAe,iBAAiB,aAAa;CAC7C,kBAAkB,iBAAiB,gBAAgB;CACnD,eAAe,iBAAiB,aAAa;AAC/C;AAEA,IAAa,sBAAsB,CAAC,mBAAG,IAAI,IAAI;CAC7C,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;CAC1B,GAAG,uBAAuB;AAC5B,CAAC,CAAC;;;ACpDF,IAAa,oBAAoB,wBAAwB,OAAO,KAAK,KAAK;CACxE,MAAM;CACN,UAAU;CACV,kBAAkB;EAChB,OAAO;GACL,UAAU;GACV,QAAQ,EAAC,2CAA2C,sBAAqB;EAC3E;EACA,MAAM;GACJ,UAAU;GACV,QAAQ,EAAC,2CAA2C,sCAAqC;EAC3F;CACF;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-BTCOJO5z2.js","names":[],"sources":["../../src/components/GrRadio/safelist.ts","../../src/components/GrRadio/config.ts"],"sourcesContent":["import { splitClassTokens } from '../shared/classTokens'\nimport { grButtonSafelist } from '../GrButton/safelist'\nimport {\n grRadioButtonDisabledCheckedClass,\n grRadioButtonDisabledClass,\n grRadioControlCheckedClass,\n grRadioControlDisabledClass,\n grRadioControlInvalidClass,\n grRadioControlUncheckedClass,\n grRadioControlSizes,\n grRadioDescriptionSizes,\n grRadioDotBaseClass,\n grRadioDotSizes,\n grRadioDotCheckedClass,\n grRadioDotDisabledClass,\n grRadioDotUncheckedClass,\n grRadioEnabledClass,\n grRadioLabelCheckedColorClass,\n grRadioLabelColorClass,\n grRadioLabelSizes,\n grRadioRootDisabledClass,\n grRadioRootReadonlyClass,\n grRadioRootEnabledClass,\n} from './grRadioStyles'\n\nexport const grRadioSafelist = [...new Set([\n ...grButtonSafelist,\n ...splitClassTokens(grRadioEnabledClass),\n ...splitClassTokens(grRadioButtonDisabledClass),\n ...splitClassTokens(grRadioButtonDisabledCheckedClass),\n ...splitClassTokens(grRadioRootDisabledClass),\n ...splitClassTokens(grRadioRootEnabledClass),\n ...splitClassTokens(grRadioRootReadonlyClass),\n ...splitClassTokens(grRadioControlCheckedClass),\n ...splitClassTokens(grRadioControlUncheckedClass),\n ...splitClassTokens(grRadioControlDisabledClass),\n ...splitClassTokens(grRadioControlInvalidClass),\n ...splitClassTokens(grRadioDotCheckedClass),\n ...splitClassTokens(grRadioDotUncheckedClass),\n ...splitClassTokens(grRadioDotDisabledClass),\n ...splitClassTokens(grRadioDotBaseClass),\n ...Object.values(grRadioControlSizes).flatMap(splitClassTokens),\n ...Object.values(grRadioDotSizes).flatMap(splitClassTokens),\n ...Object.values(grRadioLabelSizes).flatMap(splitClassTokens),\n ...Object.values(grRadioDescriptionSizes).flatMap(splitClassTokens),\n ...splitClassTokens(grRadioLabelColorClass),\n ...splitClassTokens(grRadioLabelCheckedColorClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grRadioSafelist } from './safelist'\n\nexport const grRadioConfig = defineGranularComponent(import.meta.url, {\n name: 'GrRadio',\n dependencies: ['GrButton'],\n safelist: grRadioSafelist,\n})"],"mappings":";;;;;AAyBA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG;CACH,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,iCAAiC;CACrD,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,4BAA4B;CAChD,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,wBAAwB;CAC5C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,OAAO,OAAO,mBAAmB,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,GAAG,OAAO,OAAO,eAAe,CAAC,CAAC,QAAQ,gBAAgB;CAC1D,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CAClE,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,6BAA6B;AACnD,CAAC,CAAC;;;AC3CF,IAAa,gBAAgB,wBAAwB,OAAO,KAAK,KAAK;CACpE,MAAM;CACN,cAAc,CAAC,UAAU;CACzB,UAAU;AACZ,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { t as splitClassTokens } from "./classTokens-BzazaERD.js";
|
|
2
|
+
import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
|
|
3
|
+
//#region src/components/GrCodeBlock/grCodeBlockStyles.ts
|
|
4
|
+
/**
|
|
5
|
+
* Классы `GrCodeBlock`.
|
|
6
|
+
*
|
|
7
|
+
* Роли подсветки перечислены целиком, по литералу на ветку: UnoCSS сканирует
|
|
8
|
+
* исходный текст файла, и собранное шаблонной строкой имя уехало бы в CSS как
|
|
9
|
+
* литерал.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Зацепка собственного CSS компонента (номера строк). Не утилита: CSS она не
|
|
13
|
+
* порождает, поэтому в `safelist` не идёт — там гейт справедливо считает такую
|
|
14
|
+
* запись мёртвой.
|
|
15
|
+
*/
|
|
16
|
+
var codeBlockHookClass = "gr-code-block";
|
|
17
|
+
/** Включает колонку номеров. Тоже зацепка, не утилита. */
|
|
18
|
+
var codeBlockNumberedClass = "gr-code-block--numbered";
|
|
19
|
+
/**
|
|
20
|
+
* Поверхность держит корень, а не `<pre>`: кнопка копирования стоит рядом со
|
|
21
|
+
* скроллером, и жёлоб под неё обязан быть частью блока, а не полем страницы.
|
|
22
|
+
*/
|
|
23
|
+
var codeBlockRootClass = "relative rounded-[var(--gr-radius-md)] bg-[var(--gr-code-block-bg,var(--gr-muted))] text-[var(--gr-code-block-fg,var(--gr-fg))]";
|
|
24
|
+
/**
|
|
25
|
+
* Полоса под кнопку: 28 px самой кнопки плюс отбивка `right-1`.
|
|
26
|
+
*
|
|
27
|
+
* Кнопка не может висеть поверх `<pre>`: полосу прокрутки браузер рисует у
|
|
28
|
+
* правого края скроллера, в тех же 8–15 px, и накрытую кнопкой её не ухватить
|
|
29
|
+
* мышью. Отступами это не лечится — их пришлось бы взять больше ширины самой
|
|
30
|
+
* кнопки, и «угол» перестал бы быть углом. Витринный `doc/CodeBlock.vue` решает
|
|
31
|
+
* то же самое шапкой; у пакетного блока шапки нет, поэтому место отдаётся
|
|
32
|
+
* жёлобом.
|
|
33
|
+
*/
|
|
34
|
+
var codeBlockGutterClass = "pr-9";
|
|
35
|
+
/** Скроллер обязан показывать фокус: он стоит в таб-порядке. */
|
|
36
|
+
var codeBlockScrollClass = "overflow-auto focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]";
|
|
37
|
+
var codeBlockWrapClass = "whitespace-pre-wrap break-words";
|
|
38
|
+
var codeBlockNowrapClass = "whitespace-pre";
|
|
39
|
+
/** Кнопка копирования: правый верхний угол, внутри жёлоба. */
|
|
40
|
+
var codeBlockCopyClass = "absolute right-1 top-1 z-[1]";
|
|
41
|
+
var codeBlockPaddings = {
|
|
42
|
+
xs: "p-2",
|
|
43
|
+
sm: "p-2.5",
|
|
44
|
+
md: "p-3",
|
|
45
|
+
lg: "p-4"
|
|
46
|
+
};
|
|
47
|
+
var codeBlockTextSizes = {
|
|
48
|
+
xs: "text-[length:var(--gr-control-text-3xs)]",
|
|
49
|
+
sm: "text-[length:var(--gr-control-text-2xs)]",
|
|
50
|
+
md: "text-[length:var(--gr-control-text-xs)]",
|
|
51
|
+
lg: "text-[length:var(--gr-control-text-sm)]"
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Роли подсветки. Дефолты — ссылки на `-text`-роли темы: они переключаются
|
|
55
|
+
* вместе с ней, поэтому подсветка работает в обеих без своего theme-слоя.
|
|
56
|
+
*
|
|
57
|
+
* Число взято от `azure`, а не от `info`: `info` — синий в двух шагах от индиго
|
|
58
|
+
* `primary`, и пара «ключ ↔ число» давала ΔE 9.4 в светлой теме и 7.8 в тёмной.
|
|
59
|
+
* В `{"count": 42}` эти два цвета стоят через двоеточие и читались бы как один.
|
|
60
|
+
* С `azure` расстояние 53.8 и 16.6. Гейт — `grCodeBlockContrast.test.ts`.
|
|
61
|
+
*/
|
|
62
|
+
var codeTokenClass = {
|
|
63
|
+
key: "text-[var(--gr-code-block-key,var(--gr-primary-text))]",
|
|
64
|
+
string: "text-[var(--gr-code-block-string,var(--gr-success-text))]",
|
|
65
|
+
number: "text-[var(--gr-code-block-number,var(--gr-azure-text))]",
|
|
66
|
+
literal: "text-[var(--gr-code-block-literal,var(--gr-warning-text))]",
|
|
67
|
+
punctuation: "text-[var(--gr-code-block-fg,var(--gr-fg))]",
|
|
68
|
+
plain: ""
|
|
69
|
+
};
|
|
70
|
+
//#endregion
|
|
71
|
+
//#region src/components/GrCodeBlock/safelist.ts
|
|
72
|
+
var grCodeBlockSafelist = [.../* @__PURE__ */ new Set([
|
|
73
|
+
...splitClassTokens(codeBlockRootClass),
|
|
74
|
+
...splitClassTokens("m-0"),
|
|
75
|
+
...splitClassTokens(codeBlockScrollClass),
|
|
76
|
+
...splitClassTokens(codeBlockWrapClass),
|
|
77
|
+
...splitClassTokens(codeBlockNowrapClass),
|
|
78
|
+
...splitClassTokens(codeBlockCopyClass),
|
|
79
|
+
...splitClassTokens(codeBlockGutterClass),
|
|
80
|
+
...Object.values(codeBlockPaddings).flatMap(splitClassTokens),
|
|
81
|
+
...Object.values(codeBlockTextSizes).flatMap(splitClassTokens),
|
|
82
|
+
...Object.values(codeTokenClass).flatMap(splitClassTokens)
|
|
83
|
+
])];
|
|
84
|
+
//#endregion
|
|
85
|
+
//#region src/components/GrCodeBlock/config.ts
|
|
86
|
+
var grCodeBlockConfig = defineGranularComponent(import.meta.url, {
|
|
87
|
+
name: "GrCodeBlock",
|
|
88
|
+
dependencies: ["GrButton"],
|
|
89
|
+
safelist: grCodeBlockSafelist
|
|
90
|
+
});
|
|
91
|
+
//#endregion
|
|
92
|
+
export { codeBlockHookClass as a, codeBlockPaddings as c, codeBlockTextSizes as d, codeBlockWrapClass as f, codeBlockGutterClass as i, codeBlockRootClass as l, grCodeBlockSafelist as n, codeBlockNowrapClass as o, codeTokenClass as p, codeBlockCopyClass as r, codeBlockNumberedClass as s, grCodeBlockConfig as t, codeBlockScrollClass as u };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-B_qi4Fma.js","names":[],"sources":["../../src/components/GrCodeBlock/grCodeBlockStyles.ts","../../src/components/GrCodeBlock/safelist.ts","../../src/components/GrCodeBlock/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nimport type { GrCodeTokenKind } from './tokenizeJson'\n\n/**\n * Классы `GrCodeBlock`.\n *\n * Роли подсветки перечислены целиком, по литералу на ветку: UnoCSS сканирует\n * исходный текст файла, и собранное шаблонной строкой имя уехало бы в CSS как\n * литерал.\n */\n\n/**\n * Зацепка собственного CSS компонента (номера строк). Не утилита: CSS она не\n * порождает, поэтому в `safelist` не идёт — там гейт справедливо считает такую\n * запись мёртвой.\n */\nexport const codeBlockHookClass = 'gr-code-block'\n\n/** Включает колонку номеров. Тоже зацепка, не утилита. */\nexport const codeBlockNumberedClass = 'gr-code-block--numbered'\n\n/**\n * Поверхность держит корень, а не `<pre>`: кнопка копирования стоит рядом со\n * скроллером, и жёлоб под неё обязан быть частью блока, а не полем страницы.\n */\nexport const codeBlockRootClass = 'relative rounded-[var(--gr-radius-md)] bg-[var(--gr-code-block-bg,var(--gr-muted))] text-[var(--gr-code-block-fg,var(--gr-fg))]'\n\n/**\n * Полоса под кнопку: 28 px самой кнопки плюс отбивка `right-1`.\n *\n * Кнопка не может висеть поверх `<pre>`: полосу прокрутки браузер рисует у\n * правого края скроллера, в тех же 8–15 px, и накрытую кнопкой её не ухватить\n * мышью. Отступами это не лечится — их пришлось бы взять больше ширины самой\n * кнопки, и «угол» перестал бы быть углом. Витринный `doc/CodeBlock.vue` решает\n * то же самое шапкой; у пакетного блока шапки нет, поэтому место отдаётся\n * жёлобом.\n */\nexport const codeBlockGutterClass = 'pr-9'\n\n/** Браузерный отступ `<pre>`: фон и радиус живут на корне, полю здесь не место. */\nexport const codeBlockSurfaceClass = 'm-0'\n\n/** Скроллер обязан показывать фокус: он стоит в таб-порядке. */\nexport const codeBlockScrollClass = 'overflow-auto focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\nexport const codeBlockWrapClass = 'whitespace-pre-wrap break-words'\nexport const codeBlockNowrapClass = 'whitespace-pre'\n\n/** Кнопка копирования: правый верхний угол, внутри жёлоба. */\nexport const codeBlockCopyClass = 'absolute right-1 top-1 z-[1]'\n\nexport const codeBlockPaddings: Record<GrComponentSize, string> = {\n xs: 'p-2',\n sm: 'p-2.5',\n md: 'p-3',\n lg: 'p-4',\n}\n\nexport const codeBlockTextSizes: Record<GrComponentSize, string> = {\n xs: 'text-[length:var(--gr-control-text-3xs)]',\n sm: 'text-[length:var(--gr-control-text-2xs)]',\n md: 'text-[length:var(--gr-control-text-xs)]',\n lg: 'text-[length:var(--gr-control-text-sm)]',\n}\n\n/**\n * Роли подсветки. Дефолты — ссылки на `-text`-роли темы: они переключаются\n * вместе с ней, поэтому подсветка работает в обеих без своего theme-слоя.\n *\n * Число взято от `azure`, а не от `info`: `info` — синий в двух шагах от индиго\n * `primary`, и пара «ключ ↔ число» давала ΔE 9.4 в светлой теме и 7.8 в тёмной.\n * В `{\"count\": 42}` эти два цвета стоят через двоеточие и читались бы как один.\n * С `azure` расстояние 53.8 и 16.6. Гейт — `grCodeBlockContrast.test.ts`.\n */\nexport const codeTokenClass: Record<GrCodeTokenKind, string> = {\n key: 'text-[var(--gr-code-block-key,var(--gr-primary-text))]',\n string: 'text-[var(--gr-code-block-string,var(--gr-success-text))]',\n number: 'text-[var(--gr-code-block-number,var(--gr-azure-text))]',\n literal: 'text-[var(--gr-code-block-literal,var(--gr-warning-text))]',\n punctuation: 'text-[var(--gr-code-block-fg,var(--gr-fg))]',\n plain: '',\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n codeBlockCopyClass,\n codeBlockGutterClass,\n codeBlockNowrapClass,\n codeBlockPaddings,\n codeBlockRootClass,\n codeBlockScrollClass,\n codeBlockSurfaceClass,\n codeBlockTextSizes,\n codeBlockWrapClass,\n codeTokenClass,\n} from './grCodeBlockStyles'\n\n// Классы из вычисляемых мап (роль токена, размер) UnoCSS сканом не находит —\n// только safelist. Литералы хелпера туда же: на сборке он уезжает в общий чанк.\n//\n// `codeBlockHookClass` и `codeBlockNumberedClass` сюда НЕ идут: это селекторы\n// собственного `<style>` компонента, CSS из них не порождается, и гейт\n// `documentedConfig` справедливо считал бы такую запись мёртвой.\nexport const grCodeBlockSafelist = [...new Set([\n ...splitClassTokens(codeBlockRootClass),\n ...splitClassTokens(codeBlockSurfaceClass),\n ...splitClassTokens(codeBlockScrollClass),\n ...splitClassTokens(codeBlockWrapClass),\n ...splitClassTokens(codeBlockNowrapClass),\n ...splitClassTokens(codeBlockCopyClass),\n ...splitClassTokens(codeBlockGutterClass),\n ...Object.values(codeBlockPaddings).flatMap(splitClassTokens),\n ...Object.values(codeBlockTextSizes).flatMap(splitClassTokens),\n ...Object.values(codeTokenClass).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grCodeBlockSafelist } from './safelist'\n\nexport const grCodeBlockConfig = defineGranularComponent(import.meta.url, {\n name: 'GrCodeBlock',\n dependencies: ['GrButton'],\n safelist: grCodeBlockSafelist,\n})\n"],"mappings":";;;;;;;;;;;;;;;AAiBA,IAAa,qBAAqB;;AAGlC,IAAa,yBAAyB;;;;;AAMtC,IAAa,qBAAqB;;;;;;;;;;;AAYlC,IAAa,uBAAuB;;AAMpC,IAAa,uBAAuB;AAEpC,IAAa,qBAAqB;AAClC,IAAa,uBAAuB;;AAGpC,IAAa,qBAAqB;AAElC,IAAa,oBAAqD;CAChE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,qBAAsD;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;;;;AAWA,IAAa,iBAAkD;CAC7D,KAAK;CACL,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,aAAa;CACb,OAAO;AACT;;;AC7DA,IAAa,sBAAsB,CAAC,mBAAG,IAAI,IAAI;CAC7C,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAA,KAAsC;CACzC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;CAC7D,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;AAC3D,CAAC,CAAC;;;AC5BF,IAAa,oBAAoB,wBAAwB,OAAO,KAAK,KAAK;CACxE,MAAM;CACN,cAAc,CAAC,UAAU;CACzB,UAAU;AACZ,CAAC"}
|
|
@@ -22,6 +22,8 @@ var paddingClass = {
|
|
|
22
22
|
};
|
|
23
23
|
var sectionDividerTopClass = "border-t border-[var(--gr-brd)]";
|
|
24
24
|
var sectionDividerBottomClass = "border-b border-[var(--gr-brd)]";
|
|
25
|
+
var cardTitleClass = "m-0 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] font-600";
|
|
26
|
+
var cardDescriptionClass = "mt-1 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)] text-[var(--gr-muted-fg)]";
|
|
25
27
|
/** Интерактивная карточка целиком: ссылка или кнопка во всю поверхность. */
|
|
26
28
|
var interactiveClass = "block w-full text-left transition-colors duration-[var(--gr-duration-fast)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]";
|
|
27
29
|
var hoverClass = "cursor-pointer hover:bg-[var(--gr-muted)]";
|
|
@@ -43,7 +45,9 @@ var grCardSafelist = [.../* @__PURE__ */ new Set([
|
|
|
43
45
|
...splitClassTokens(sectionDividerTopClass),
|
|
44
46
|
...splitClassTokens(sectionDividerBottomClass),
|
|
45
47
|
...splitClassTokens(interactiveClass),
|
|
46
|
-
...splitClassTokens(hoverClass)
|
|
48
|
+
...splitClassTokens(hoverClass),
|
|
49
|
+
...splitClassTokens(cardTitleClass),
|
|
50
|
+
...splitClassTokens(cardDescriptionClass)
|
|
47
51
|
])];
|
|
48
52
|
//#endregion
|
|
49
53
|
//#region src/components/GrCard/config.ts
|
|
@@ -52,4 +56,4 @@ var grCardConfig = defineGranularComponent(import.meta.url, {
|
|
|
52
56
|
safelist: grCardSafelist
|
|
53
57
|
});
|
|
54
58
|
//#endregion
|
|
55
|
-
export {
|
|
59
|
+
export { grCardRootClass as a, sectionDividerTopClass as c, cardTitleClass as i, grCardSafelist as n, paddingClass as o, cardDescriptionClass as r, sectionDividerBottomClass as s, grCardConfig as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-Bm_Sovla.js","names":[],"sources":["../../src/components/GrCard/grCardStyles.ts","../../src/components/GrCard/safelist.ts","../../src/components/GrCard/config.ts"],"sourcesContent":["export type GrCardPadding = 'none' | 'sm' | 'md' | 'lg'\nexport type GrCardVariant = 'elevated' | 'outlined' | 'ghost'\n\n/**\n * Классы `GrCard`.\n *\n * `elevated` — дефолт и ровно тот вид, что был у карточки до появления пропов:\n * `GrCollapse` и `GrList` рендерят содержимое внутрь `GrCard`, и любое смещение\n * дефолта поехало бы у них.\n */\n\nexport const surfaceBaseClass = 'rounded-[var(--gr-radius-lg)] bg-[var(--gr-card)] text-[var(--gr-card-fg)]'\n\nexport const variantClass: Record<GrCardVariant, string> = {\n elevated: 'border border-[var(--gr-brd)] shadow-sm',\n outlined: 'border border-[var(--gr-brd)]',\n // Карточка внутри карточки: вторая рамка только шумит.\n ghost: '',\n}\n\nexport const paddingClass: Record<GrCardPadding, string> = {\n none: '',\n sm: 'p-3',\n md: 'p-4',\n lg: 'p-6',\n}\n\nexport const sectionDividerTopClass = 'border-t border-[var(--gr-brd)]'\nexport const sectionDividerBottomClass = 'border-b border-[var(--gr-brd)]'\n\n/**\n * Уровень заголовка карточки. `h1` намеренно нет: его задаёт страница, а\n * карточка — блок внутри уже существующей структуры.\n */\nexport const GR_CARD_HEADING_LEVELS = [2, 3, 4, 5, 6] as const\n\nexport type GrCardHeadingLevel = typeof GR_CARD_HEADING_LEVELS[number]\n\n// `m-0` — у нативного заголовка есть браузерные отступы, и без сброса шапка\n// разъезжается по вертикали.\nexport const cardTitleClass = 'm-0 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)] font-600'\n\nexport const cardDescriptionClass = 'mt-1 text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)] text-[var(--gr-muted-fg)]'\n\n/** Интерактивная карточка целиком: ссылка или кнопка во всю поверхность. */\nexport const interactiveClass = 'block w-full text-left transition-colors duration-[var(--gr-duration-fast)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\nexport const hoverClass = 'cursor-pointer hover:bg-[var(--gr-muted)]'\n\nexport function grCardRootClass(options: {\n variant: GrCardVariant\n /** Падинг едет на корень, только пока нет секций — иначе лишняя обёртка. */\n padding: GrCardPadding\n interactive: boolean\n hoverable: boolean\n}): string {\n return [\n surfaceBaseClass,\n variantClass[options.variant],\n paddingClass[options.padding],\n options.interactive ? interactiveClass : '',\n options.interactive || options.hoverable ? hoverClass : '',\n ].filter(Boolean).join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n cardDescriptionClass,\n cardTitleClass,\n hoverClass,\n interactiveClass,\n paddingClass,\n sectionDividerBottomClass,\n sectionDividerTopClass,\n surfaceBaseClass,\n variantClass,\n} from './grCardStyles'\n\nexport const grCardSafelist = [...new Set([\n ...splitClassTokens(surfaceBaseClass),\n ...Object.values(variantClass).flatMap(splitClassTokens),\n ...Object.values(paddingClass).flatMap(splitClassTokens),\n ...splitClassTokens(sectionDividerTopClass),\n ...splitClassTokens(sectionDividerBottomClass),\n ...splitClassTokens(interactiveClass),\n ...splitClassTokens(hoverClass),\n ...splitClassTokens(cardTitleClass),\n ...splitClassTokens(cardDescriptionClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grCardSafelist } from './safelist'\n\nexport const grCardConfig = defineGranularComponent(import.meta.url, {\n name: 'GrCard',\n safelist: grCardSafelist,\n})\n"],"mappings":";;;;;;;;;;AAWA,IAAa,mBAAmB;AAEhC,IAAa,eAA8C;CACzD,UAAU;CACV,UAAU;CAEV,OAAO;AACT;AAEA,IAAa,eAA8C;CACzD,MAAM;CACN,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,yBAAyB;AACtC,IAAa,4BAA4B;AAYzC,IAAa,iBAAiB;AAE9B,IAAa,uBAAuB;;AAGpC,IAAa,mBAAmB;AAEhC,IAAa,aAAa;AAE1B,SAAgB,gBAAgB,SAMrB;CACT,OAAO;EACL;EACA,aAAa,QAAQ;EACrB,aAAa,QAAQ;EACrB,QAAQ,cAAc,mBAAmB;EACzC,QAAQ,eAAe,QAAQ,YAAY,aAAa;CAC1D,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;;;AClDA,IAAa,iBAAiB,CAAC,mBAAG,IAAI,IAAI;CACxC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,yBAAyB;CAC7C,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,oBAAoB;AAC1C,CAAC,CAAC;;;ACnBF,IAAa,eAAe,wBAAwB,OAAO,KAAK,KAAK;CACnE,MAAM;CACN,UAAU;AACZ,CAAC"}
|
|
@@ -16,7 +16,16 @@ var colsClass = {
|
|
|
16
16
|
3: "grid-cols-3",
|
|
17
17
|
4: "grid-cols-4"
|
|
18
18
|
};
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Радиус здесь не украшение: фон подсветки лежит на самом пункте, а панель
|
|
21
|
+
* `GrDropdown` скруглена на 16 px и содержимое не обрезает. Прямоугольник во всю
|
|
22
|
+
* ширину заливал бы угловые сегменты, вырезанные этим радиусом. Восемь
|
|
23
|
+
* пикселей — та же ступень, что у опций `GrSelect` и `GrAutocomplete`; внутренний
|
|
24
|
+
* угол панели после рамки и поля ≈ 11 px, так что подсветка до скругления не
|
|
25
|
+
* достаёт. Радиус в базовом классе, а не отдельной константой: hover, disabled и
|
|
26
|
+
* кольцо фокуса висят на одном элементе.
|
|
27
|
+
*/
|
|
28
|
+
var itemBaseClass = "w-full min-h-10 px-4 py-2.5 rounded-[var(--gr-radius-md)] flex items-center gap-2 text-[length:var(--gr-text-sm)] transition-colors duration-[var(--gr-duration-fast)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]";
|
|
20
29
|
var itemVariantClass = {
|
|
21
30
|
default: "text-[var(--gr-fg)]",
|
|
22
31
|
danger: "text-[var(--gr-danger-text)]"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-C5mO5DYZ.js","names":[],"sources":["../../src/components/GrDropdownMenu/grDropdownMenuStyles.ts","../../src/components/GrDropdownMenu/safelist.ts","../../src/components/GrDropdownMenu/config.ts"],"sourcesContent":["export type GrDropdownMenuItemAlign = 'left' | 'center' | 'right'\nexport type GrDropdownMenuItemVariant = 'default' | 'danger'\nexport type GrDropdownMenuHeaderAlign = GrDropdownMenuItemAlign\nexport type GrDropdownMenuColumnAlign = GrDropdownMenuItemAlign\nexport type GrDropdownMenuColumnsCount = 2 | 3 | 4\n\nexport const alignClass: Record<GrDropdownMenuItemAlign, string> = {\n left: 'justify-start text-left',\n center: 'justify-center text-center',\n right: 'justify-end text-right',\n}\n\nexport const textAlignClass: Record<GrDropdownMenuHeaderAlign, string> = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right',\n}\n\nexport const colsClass: Record<GrDropdownMenuColumnsCount, string> = {\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n}\n\n/**\n * Радиус здесь не украшение: фон подсветки лежит на самом пункте, а панель\n * `GrDropdown` скруглена на 16 px и содержимое не обрезает. Прямоугольник во всю\n * ширину заливал бы угловые сегменты, вырезанные этим радиусом. Восемь\n * пикселей — та же ступень, что у опций `GrSelect` и `GrAutocomplete`; внутренний\n * угол панели после рамки и поля ≈ 11 px, так что подсветка до скругления не\n * достаёт. Радиус в базовом классе, а не отдельной константой: hover, disabled и\n * кольцо фокуса висят на одном элементе.\n */\nexport const itemBaseClass = 'w-full min-h-10 px-4 py-2.5 rounded-[var(--gr-radius-md)] flex items-center gap-2 text-[length:var(--gr-text-sm)] transition-colors duration-[var(--gr-duration-fast)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\n// Насыщенный тон как цвет текста запрещён — для текста есть `-text`-роль.\nexport const itemVariantClass: Record<GrDropdownMenuItemVariant, string> = {\n default: 'text-[var(--gr-fg)]',\n danger: 'text-[var(--gr-danger-text)]',\n}\n\nexport const itemInteractiveClass = 'cursor-pointer hover:bg-[var(--gr-accent)] hover:text-[var(--gr-accent-fg)]'\n\n// Disabled гасится фоном, а не `opacity`: прозрачность разбавляет выверенные на\n// AA токены текста. `pointer-events-none` оставлен — он же гасит hover.\nexport const itemDisabledClass = 'cursor-not-allowed pointer-events-none bg-[var(--gr-muted)] text-[var(--gr-muted-fg)]'\n\nexport const itemIndicatorClass = 'h-3.5 w-3.5 shrink-0'\nexport const itemShortcutClass = 'ml-auto pl-4 text-[length:var(--gr-text-xs)] text-[var(--gr-muted-fg)]'\n\nexport const headerClass = 'px-4 py-2 text-[length:var(--gr-text-xs)] tracking-wide text-[var(--gr-muted-fg)]'\n\nexport const listBaseClass = 'w-full'\nexport const dividersClass = 'divide-y divide-[var(--gr-brd)]'\nexport const borderTopClass = 'border-t border-[var(--gr-brd)]'\nexport const borderBottomClass = 'border-b border-[var(--gr-brd)]'\n\nexport const columnsBaseClass = 'w-full grid divide-x divide-[var(--gr-brd)]'\nexport const columnBaseClass = 'px-3 py-2 flex items-center'\n\nexport const dividerClass = 'border-t border-[var(--gr-brd)]'\nexport const dividerInsetClass = 'mx-2'\n\nexport function grDropdownMenuItemClass(options: {\n align: GrDropdownMenuItemAlign\n variant: GrDropdownMenuItemVariant\n disabled: boolean\n}): string {\n return [\n itemBaseClass,\n alignClass[options.align],\n options.disabled ? itemDisabledClass : itemVariantClass[options.variant],\n options.disabled ? '' : itemInteractiveClass,\n ].filter(Boolean).join(' ')\n}\n\nexport function grDropdownMenuListClass(options: {\n dividers: boolean\n borderTop: boolean\n borderBottom: boolean\n}): string {\n return [\n listBaseClass,\n options.dividers ? dividersClass : '',\n options.borderTop ? borderTopClass : '',\n options.borderBottom ? borderBottomClass : '',\n ].filter(Boolean).join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n alignClass,\n borderBottomClass,\n borderTopClass,\n colsClass,\n columnBaseClass,\n columnsBaseClass,\n dividerClass,\n dividerInsetClass,\n dividersClass,\n headerClass,\n itemBaseClass,\n itemDisabledClass,\n itemIndicatorClass,\n itemInteractiveClass,\n itemShortcutClass,\n itemVariantClass,\n listBaseClass,\n textAlignClass,\n} from './grDropdownMenuStyles'\n\n/**\n * Классы каталога живут в `.ts`-хелпере, а его бандлер волен вынести в общий\n * `dist/chunks/` — вне области скана компонента. Симптом промаха тут особенно\n * незаметный: размеры пунктов на месте, а выравнивание, колонки и цвета\n * пропали. Гейт — `src/__tests__/safelist.test.ts`.\n */\nexport const grDropdownMenuSafelist = [...new Set([\n ...Object.values(alignClass).flatMap(splitClassTokens),\n ...Object.values(textAlignClass).flatMap(splitClassTokens),\n ...Object.values(colsClass).flatMap(splitClassTokens),\n ...Object.values(itemVariantClass).flatMap(splitClassTokens),\n ...splitClassTokens(itemBaseClass),\n ...splitClassTokens(itemInteractiveClass),\n ...splitClassTokens(itemDisabledClass),\n ...splitClassTokens(itemIndicatorClass),\n ...splitClassTokens(itemShortcutClass),\n ...splitClassTokens(headerClass),\n ...splitClassTokens(listBaseClass),\n ...splitClassTokens(dividersClass),\n ...splitClassTokens(borderTopClass),\n ...splitClassTokens(borderBottomClass),\n ...splitClassTokens(columnsBaseClass),\n ...splitClassTokens(columnBaseClass),\n ...splitClassTokens(dividerClass),\n ...splitClassTokens(dividerInsetClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDropdownMenuSafelist } from './safelist'\n\nexport const grDropdownMenuConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDropdownMenu',\n dependencies: ['GrDropdown'],\n safelist: grDropdownMenuSafelist,\n})\n"],"mappings":";;;AAMA,IAAa,aAAsD;CACjE,MAAM;CACN,QAAQ;CACR,OAAO;AACT;AAEA,IAAa,iBAA4D;CACvE,MAAM;CACN,QAAQ;CACR,OAAO;AACT;AAEA,IAAa,YAAwD;CACnE,GAAG;CACH,GAAG;CACH,GAAG;AACL;;;;;;;;;;AAWA,IAAa,gBAAgB;AAG7B,IAAa,mBAA8D;CACzE,SAAS;CACT,QAAQ;AACV;AAEA,IAAa,uBAAuB;AAIpC,IAAa,oBAAoB;AAEjC,IAAa,qBAAqB;AAClC,IAAa,oBAAoB;AAEjC,IAAa,cAAc;AAE3B,IAAa,gBAAgB;AAC7B,IAAa,gBAAgB;AAC7B,IAAa,iBAAiB;AAC9B,IAAa,oBAAoB;AAEjC,IAAa,mBAAmB;AAChC,IAAa,kBAAkB;AAE/B,IAAa,eAAe;AAC5B,IAAa,oBAAoB;AAEjC,SAAgB,wBAAwB,SAI7B;CACT,OAAO;EACL;EACA,WAAW,QAAQ;EACnB,QAAQ,WAAW,oBAAoB,iBAAiB,QAAQ;EAChE,QAAQ,WAAW,KAAK;CAC1B,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;AAEA,SAAgB,wBAAwB,SAI7B;CACT,OAAO;EACL;EACA,QAAQ,WAAW,gBAAgB;EACnC,QAAQ,YAAY,iBAAiB;EACrC,QAAQ,eAAe,oBAAoB;CAC7C,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;;;;;;;;;AC1DA,IAAa,yBAAyB,CAAC,mBAAG,IAAI,IAAI;CAC9C,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CACrD,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,SAAS,CAAC,CAAC,QAAQ,gBAAgB;CACpD,GAAG,OAAO,OAAO,gBAAgB,CAAC,CAAC,QAAQ,gBAAgB;CAC3D,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,WAAW;CAC/B,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,iBAAiB;AACzC,CAAC,CAAC;;;AC5CF,IAAa,uBAAuB,wBAAwB,OAAO,KAAK,KAAK;CAC3E,MAAM;CACN,cAAc,CAAC,YAAY;CAC3B,UAAU;AACZ,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { t as splitClassTokens } from "./classTokens-BzazaERD.js";
|
|
2
|
+
import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
|
|
3
|
+
//#region src/components/GrJsonViewer/grJsonViewerStyles.ts
|
|
4
|
+
/**
|
|
5
|
+
* Классы `GrJsonViewer`.
|
|
6
|
+
*
|
|
7
|
+
* Роли перечислены целиком, по литералу на ветку: UnoCSS сканирует исходный
|
|
8
|
+
* текст файла, и собранное шаблонной строкой имя уехало бы в CSS литералом.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* `min-w-0` и клип — не украшение: глубокая ветка шире контейнера, и без них
|
|
12
|
+
* панель растягивает раскладку страницы, вместо того чтобы прокручиваться
|
|
13
|
+
* внутри себя. Горизонтальный скролл остаётся у самого дерева.
|
|
14
|
+
*/
|
|
15
|
+
var jsonViewerRootClass = "min-w-0 overflow-hidden rounded-[var(--gr-radius-md)] bg-[var(--gr-json-viewer-bg,var(--gr-muted))] text-[var(--gr-fg)]";
|
|
16
|
+
/** Шапка с поиском и кнопками свёртки. Отбивается от дерева, а не от края. */
|
|
17
|
+
var jsonViewerToolbarClass = "flex items-center gap-2 border-b border-[var(--gr-brd)] p-2";
|
|
18
|
+
var jsonViewerSearchClass = "min-w-0 flex-1";
|
|
19
|
+
/** Строка узла моноширинная: значения выравниваются по разрядам, как в блоке кода. */
|
|
20
|
+
var jsonViewerRowClass = "relative flex min-w-0 items-center gap-1 font-[var(--gr-font-mono)]";
|
|
21
|
+
/** Область узла не даёт значению растянуть строку шире панели. */
|
|
22
|
+
var jsonViewerContentClass = "min-w-0";
|
|
23
|
+
var jsonViewerKeyClass = "shrink-0 text-[var(--gr-json-viewer-key,var(--gr-primary-text))]";
|
|
24
|
+
var jsonViewerPunctuationClass = "shrink-0 text-[var(--gr-json-viewer-punctuation,var(--gr-fg))]";
|
|
25
|
+
/**
|
|
26
|
+
* Значение обрезается по ширине строки, а не переносится: перенос превратил бы
|
|
27
|
+
* дерево в простыню и сломал бы оценку высоты строки у виртуализации.
|
|
28
|
+
*/
|
|
29
|
+
var jsonViewerValueClass = "min-w-0 truncate";
|
|
30
|
+
/** Счётчик у свёрнутой ветки и служебные подписи — тише значения. */
|
|
31
|
+
var jsonViewerMutedClass = "shrink-0 text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]";
|
|
32
|
+
/**
|
|
33
|
+
* Кнопка копирования узла: появляется по наведению и по фокусу внутри строки.
|
|
34
|
+
*
|
|
35
|
+
* Стоит в потоке сразу за значением, а не прижата к правому краю строки:
|
|
36
|
+
* прижать её не к чему — область узла у `GrTree` сжата по содержимому
|
|
37
|
+
* (`flex: 0 1 auto`) собственным scoped-правилом, а утилитой снаружи оно не
|
|
38
|
+
* перебивается: оба класса равной специфичности, и победителя выбирает порядок
|
|
39
|
+
* правил в CSS. Цена потока — 4 px высоты строки, и она дешевле этой лотереи.
|
|
40
|
+
*/
|
|
41
|
+
var jsonViewerCopyClass = "ml-2 shrink-0 opacity-0 focus-visible:opacity-100 group-hover:opacity-100";
|
|
42
|
+
/**
|
|
43
|
+
* Зацепка варианта `group-hover` у кнопки копирования. В safelist не идёт: CSS
|
|
44
|
+
* из неё не порождается — правило пишет сам вариант, а гейт справедливо считал
|
|
45
|
+
* бы такую запись мёртвой.
|
|
46
|
+
*/
|
|
47
|
+
var jsonViewerGroupClass = "group";
|
|
48
|
+
/**
|
|
49
|
+
* Цвет значения по виду.
|
|
50
|
+
*
|
|
51
|
+
* Дефолты — ссылки на `-text`-роли темы, те же, что у `GrCodeBlock`: роли
|
|
52
|
+
* переключаются вместе с темой, поэтому подсветка работает в обеих без своего
|
|
53
|
+
* theme-слоя, а два компонента остаются согласованными через роль, а не через
|
|
54
|
+
* общую константу — импорт чужой мапы притащил бы потребителю весь CSS донора.
|
|
55
|
+
*
|
|
56
|
+
* Число взято от `azure`, а не от `info`: `info` — синий в двух шагах от индиго
|
|
57
|
+
* `primary`, и пара «ключ ↔ число» стояла бы в одной строке неразличимой.
|
|
58
|
+
*/
|
|
59
|
+
var jsonValueClass = {
|
|
60
|
+
string: "text-[var(--gr-json-viewer-string,var(--gr-success-text))]",
|
|
61
|
+
number: "text-[var(--gr-json-viewer-number,var(--gr-azure-text))]",
|
|
62
|
+
boolean: "text-[var(--gr-json-viewer-literal,var(--gr-warning-text))]",
|
|
63
|
+
null: "text-[var(--gr-json-viewer-literal,var(--gr-warning-text))]",
|
|
64
|
+
object: "text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]",
|
|
65
|
+
array: "text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]",
|
|
66
|
+
unsupported: "text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]",
|
|
67
|
+
truncation: "text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]"
|
|
68
|
+
};
|
|
69
|
+
//#endregion
|
|
70
|
+
//#region src/components/GrJsonViewer/safelist.ts
|
|
71
|
+
var grJsonViewerSafelist = [.../* @__PURE__ */ new Set([
|
|
72
|
+
...splitClassTokens(jsonViewerRootClass),
|
|
73
|
+
...splitClassTokens(jsonViewerToolbarClass),
|
|
74
|
+
...splitClassTokens(jsonViewerSearchClass),
|
|
75
|
+
...splitClassTokens(jsonViewerRowClass),
|
|
76
|
+
...splitClassTokens(jsonViewerContentClass),
|
|
77
|
+
...splitClassTokens(jsonViewerKeyClass),
|
|
78
|
+
...splitClassTokens(jsonViewerPunctuationClass),
|
|
79
|
+
...splitClassTokens(jsonViewerValueClass),
|
|
80
|
+
...splitClassTokens(jsonViewerMutedClass),
|
|
81
|
+
...splitClassTokens(jsonViewerCopyClass),
|
|
82
|
+
...Object.values(jsonValueClass).flatMap(splitClassTokens)
|
|
83
|
+
])];
|
|
84
|
+
//#endregion
|
|
85
|
+
//#region src/components/GrJsonViewer/config.ts
|
|
86
|
+
var grJsonViewerConfig = defineGranularComponent(import.meta.url, {
|
|
87
|
+
name: "GrJsonViewer",
|
|
88
|
+
dependencies: [
|
|
89
|
+
"GrTree",
|
|
90
|
+
"GrInput",
|
|
91
|
+
"GrButton"
|
|
92
|
+
],
|
|
93
|
+
safelist: grJsonViewerSafelist
|
|
94
|
+
});
|
|
95
|
+
//#endregion
|
|
96
|
+
export { jsonViewerCopyClass as a, jsonViewerMutedClass as c, jsonViewerRowClass as d, jsonViewerSearchClass as f, jsonViewerContentClass as i, jsonViewerPunctuationClass as l, jsonViewerValueClass as m, grJsonViewerSafelist as n, jsonViewerGroupClass as o, jsonViewerToolbarClass as p, jsonValueClass as r, jsonViewerKeyClass as s, grJsonViewerConfig as t, jsonViewerRootClass as u };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-CIcynHGr.js","names":[],"sources":["../../src/components/GrJsonViewer/grJsonViewerStyles.ts","../../src/components/GrJsonViewer/safelist.ts","../../src/components/GrJsonViewer/config.ts"],"sourcesContent":["import type { GrJsonNodeKind } from './jsonToNodes'\n\n/**\n * Классы `GrJsonViewer`.\n *\n * Роли перечислены целиком, по литералу на ветку: UnoCSS сканирует исходный\n * текст файла, и собранное шаблонной строкой имя уехало бы в CSS литералом.\n */\n\n/**\n * `min-w-0` и клип — не украшение: глубокая ветка шире контейнера, и без них\n * панель растягивает раскладку страницы, вместо того чтобы прокручиваться\n * внутри себя. Горизонтальный скролл остаётся у самого дерева.\n */\nexport const jsonViewerRootClass = 'min-w-0 overflow-hidden rounded-[var(--gr-radius-md)] bg-[var(--gr-json-viewer-bg,var(--gr-muted))] text-[var(--gr-fg)]'\n\n/** Шапка с поиском и кнопками свёртки. Отбивается от дерева, а не от края. */\nexport const jsonViewerToolbarClass = 'flex items-center gap-2 border-b border-[var(--gr-brd)] p-2'\n\nexport const jsonViewerSearchClass = 'min-w-0 flex-1'\n\n/** Строка узла моноширинная: значения выравниваются по разрядам, как в блоке кода. */\nexport const jsonViewerRowClass = 'relative flex min-w-0 items-center gap-1 font-[var(--gr-font-mono)]'\n\n/** Область узла не даёт значению растянуть строку шире панели. */\nexport const jsonViewerContentClass = 'min-w-0'\n\nexport const jsonViewerKeyClass = 'shrink-0 text-[var(--gr-json-viewer-key,var(--gr-primary-text))]'\n\nexport const jsonViewerPunctuationClass = 'shrink-0 text-[var(--gr-json-viewer-punctuation,var(--gr-fg))]'\n\n/**\n * Значение обрезается по ширине строки, а не переносится: перенос превратил бы\n * дерево в простыню и сломал бы оценку высоты строки у виртуализации.\n */\nexport const jsonViewerValueClass = 'min-w-0 truncate'\n\n/** Счётчик у свёрнутой ветки и служебные подписи — тише значения. */\nexport const jsonViewerMutedClass = 'shrink-0 text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]'\n\n/**\n * Кнопка копирования узла: появляется по наведению и по фокусу внутри строки.\n *\n * Стоит в потоке сразу за значением, а не прижата к правому краю строки:\n * прижать её не к чему — область узла у `GrTree` сжата по содержимому\n * (`flex: 0 1 auto`) собственным scoped-правилом, а утилитой снаружи оно не\n * перебивается: оба класса равной специфичности, и победителя выбирает порядок\n * правил в CSS. Цена потока — 4 px высоты строки, и она дешевле этой лотереи.\n */\nexport const jsonViewerCopyClass = 'ml-2 shrink-0 opacity-0 focus-visible:opacity-100 group-hover:opacity-100'\n\n/**\n * Зацепка варианта `group-hover` у кнопки копирования. В safelist не идёт: CSS\n * из неё не порождается — правило пишет сам вариант, а гейт справедливо считал\n * бы такую запись мёртвой.\n */\nexport const jsonViewerGroupClass = 'group'\n\n/**\n * Цвет значения по виду.\n *\n * Дефолты — ссылки на `-text`-роли темы, те же, что у `GrCodeBlock`: роли\n * переключаются вместе с темой, поэтому подсветка работает в обеих без своего\n * theme-слоя, а два компонента остаются согласованными через роль, а не через\n * общую константу — импорт чужой мапы притащил бы потребителю весь CSS донора.\n *\n * Число взято от `azure`, а не от `info`: `info` — синий в двух шагах от индиго\n * `primary`, и пара «ключ ↔ число» стояла бы в одной строке неразличимой.\n */\nexport const jsonValueClass: Record<GrJsonNodeKind, string> = {\n string: 'text-[var(--gr-json-viewer-string,var(--gr-success-text))]',\n number: 'text-[var(--gr-json-viewer-number,var(--gr-azure-text))]',\n boolean: 'text-[var(--gr-json-viewer-literal,var(--gr-warning-text))]',\n null: 'text-[var(--gr-json-viewer-literal,var(--gr-warning-text))]',\n object: 'text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]',\n array: 'text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]',\n unsupported: 'text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]',\n truncation: 'text-[var(--gr-json-viewer-muted,var(--gr-muted-fg))]',\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n jsonValueClass,\n jsonViewerContentClass,\n jsonViewerCopyClass,\n jsonViewerKeyClass,\n jsonViewerMutedClass,\n jsonViewerPunctuationClass,\n jsonViewerRootClass,\n jsonViewerRowClass,\n jsonViewerSearchClass,\n jsonViewerToolbarClass,\n jsonViewerValueClass,\n} from './grJsonViewerStyles'\n\n// Классы из вычисляемой мапы (цвет по виду значения) UnoCSS сканом не находит —\n// только safelist. Литералы хелпера туда же: на сборке он уезжает в общий чанк,\n// который скан не видит.\nexport const grJsonViewerSafelist = [...new Set([\n ...splitClassTokens(jsonViewerRootClass),\n ...splitClassTokens(jsonViewerToolbarClass),\n ...splitClassTokens(jsonViewerSearchClass),\n ...splitClassTokens(jsonViewerRowClass),\n ...splitClassTokens(jsonViewerContentClass),\n ...splitClassTokens(jsonViewerKeyClass),\n ...splitClassTokens(jsonViewerPunctuationClass),\n ...splitClassTokens(jsonViewerValueClass),\n ...splitClassTokens(jsonViewerMutedClass),\n ...splitClassTokens(jsonViewerCopyClass),\n ...Object.values(jsonValueClass).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grJsonViewerSafelist } from './safelist'\n\nexport const grJsonViewerConfig = defineGranularComponent(import.meta.url, {\n name: 'GrJsonViewer',\n dependencies: ['GrTree', 'GrInput', 'GrButton'],\n safelist: grJsonViewerSafelist,\n})\n"],"mappings":";;;;;;;;;;;;;;AAcA,IAAa,sBAAsB;;AAGnC,IAAa,yBAAyB;AAEtC,IAAa,wBAAwB;;AAGrC,IAAa,qBAAqB;;AAGlC,IAAa,yBAAyB;AAEtC,IAAa,qBAAqB;AAElC,IAAa,6BAA6B;;;;;AAM1C,IAAa,uBAAuB;;AAGpC,IAAa,uBAAuB;;;;;;;;;;AAWpC,IAAa,sBAAsB;;;;;;AAOnC,IAAa,uBAAuB;;;;;;;;;;;;AAapC,IAAa,iBAAiD;CAC5D,QAAQ;CACR,QAAQ;CACR,SAAS;CACT,MAAM;CACN,QAAQ;CACR,OAAO;CACP,aAAa;CACb,YAAY;AACd;;;AC3DA,IAAa,uBAAuB,CAAC,mBAAG,IAAI,IAAI;CAC9C,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,sBAAsB;CAC1C,GAAG,iBAAiB,kBAAkB;CACtC,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;AAC3D,CAAC,CAAC;;;AC3BF,IAAa,qBAAqB,wBAAwB,OAAO,KAAK,KAAK;CACzE,MAAM;CACN,cAAc;EAAC;EAAU;EAAW;CAAU;CAC9C,UAAU;AACZ,CAAC"}
|
|
@@ -12,6 +12,19 @@ var densityPadding = {
|
|
|
12
12
|
compact: "px-4 py-2",
|
|
13
13
|
regular: "px-4 py-3"
|
|
14
14
|
};
|
|
15
|
+
/**
|
|
16
|
+
* Список обрезается по радиусу карточки под ним.
|
|
17
|
+
*
|
|
18
|
+
* Своего радиуса у строки нет и не нужно: строки идут вплотную, и скруглённая
|
|
19
|
+
* подсветка посреди сплошного списка читалась бы как случайная. Но поля у
|
|
20
|
+
* `GrCard` по умолчанию нет, строка лежит вплотную к скруглению, и без клипа
|
|
21
|
+
* фон первой и последней заливает углы — постоянно при `disabled` и по
|
|
22
|
+
* наведению при кликабельной строке.
|
|
23
|
+
*
|
|
24
|
+
* `inherit`, а не повтор `--gr-radius-lg`: значение принадлежит `GrCard`, и
|
|
25
|
+
* копия разошлась бы с ним молча.
|
|
26
|
+
*/
|
|
27
|
+
var listSurfaceClass = "overflow-hidden rounded-[inherit]";
|
|
15
28
|
var itemLayoutClass = "flex items-start justify-between gap-4";
|
|
16
29
|
/** Интерактивная строка занимает всю ширину пункта — кликабельна вся, а не текст. */
|
|
17
30
|
var itemInteractiveClass = "w-full text-left transition-colors duration-[var(--gr-duration-fast)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] focus-visible:ring-inset";
|
|
@@ -34,6 +47,7 @@ function grListItemPaddingClass(density) {
|
|
|
34
47
|
//#region src/components/GrList/safelist.ts
|
|
35
48
|
var grListSafelist = [.../* @__PURE__ */ new Set([
|
|
36
49
|
...Object.values(densityPadding).flatMap(splitClassTokens),
|
|
50
|
+
...splitClassTokens(listSurfaceClass),
|
|
37
51
|
...splitClassTokens(itemLayoutClass),
|
|
38
52
|
...splitClassTokens(itemTitleClass),
|
|
39
53
|
...splitClassTokens(itemDescriptionClass),
|
|
@@ -52,4 +66,4 @@ var grListConfig = defineGranularComponent(import.meta.url, {
|
|
|
52
66
|
dependencies: ["GrCard", "GrSkeleton"]
|
|
53
67
|
});
|
|
54
68
|
//#endregion
|
|
55
|
-
export { grListItemPaddingClass as a, itemHoverClass as c, itemTitleClass as d,
|
|
69
|
+
export { grListItemPaddingClass as a, itemHoverClass as c, itemTitleClass as d, listSurfaceClass as f, emptyClass as i, itemInteractiveClass as l, grListSafelist as n, itemDescriptionClass as o, loadingRowClass as p, dividedClass as r, itemDisabledClass as s, grListConfig as t, itemLayoutClass as u };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-CKULiuvc.js","names":[],"sources":["../../src/components/GrList/grListStyles.ts","../../src/components/GrList/safelist.ts","../../src/components/GrList/config.ts"],"sourcesContent":["export type GrListItemDensity = 'compact' | 'regular'\n\n/**\n * Классы `GrList`/`GrListItem`.\n *\n * Единственный источник правды для шаблонов и safelist: до этого карта\n * плотности жила в SFC, а её копия — строковыми литералами прямо в `config.ts`,\n * и разойтись они могли молча.\n */\n\nexport const densityPadding: Record<GrListItemDensity, string> = {\n compact: 'px-4 py-2',\n regular: 'px-4 py-3',\n}\n\n/**\n * Список обрезается по радиусу карточки под ним.\n *\n * Своего радиуса у строки нет и не нужно: строки идут вплотную, и скруглённая\n * подсветка посреди сплошного списка читалась бы как случайная. Но поля у\n * `GrCard` по умолчанию нет, строка лежит вплотную к скруглению, и без клипа\n * фон первой и последней заливает углы — постоянно при `disabled` и по\n * наведению при кликабельной строке.\n *\n * `inherit`, а не повтор `--gr-radius-lg`: значение принадлежит `GrCard`, и\n * копия разошлась бы с ним молча.\n */\nexport const listSurfaceClass = 'overflow-hidden rounded-[inherit]'\n\nexport const itemLayoutClass = 'flex items-start justify-between gap-4'\n\n/** Интерактивная строка занимает всю ширину пункта — кликабельна вся, а не текст. */\nexport const itemInteractiveClass = 'w-full text-left transition-colors duration-[var(--gr-duration-fast)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)] focus-visible:ring-inset'\n\nexport const itemHoverClass = 'cursor-pointer hover:bg-[var(--gr-muted)]'\n\n/**\n * Заблокированная строка гасится фоном и цветом, а не `opacity`: прозрачность\n * разбавляет выверенные на AA токены текста.\n */\nexport const itemDisabledClass = 'cursor-not-allowed bg-[var(--gr-muted)] text-[var(--gr-muted-fg)]'\n\nexport const dividedClass = 'divide-y divide-[var(--gr-brd)]'\n\nexport const emptyClass = 'px-4 py-6 text-center text-[length:var(--gr-text-sm)] text-[var(--gr-muted-fg)]'\n\n/** Заголовок и описание строки. Оба нужны обеим веткам пункта — интерактивной и обычной. */\nexport const itemTitleClass = 'text-[length:var(--gr-text-sm)] font-700'\nexport const itemDescriptionClass = 'mt-0.5 text-[length:var(--gr-text-sm)] text-[var(--gr-muted-fg)]'\n\nexport const loadingRowClass = 'px-4 py-3'\n\nexport function grListItemPaddingClass(density: GrListItemDensity): string {\n return densityPadding[density]\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n densityPadding,\n dividedClass,\n emptyClass,\n itemDescriptionClass,\n itemDisabledClass,\n itemHoverClass,\n itemInteractiveClass,\n itemLayoutClass,\n itemTitleClass,\n listSurfaceClass,\n loadingRowClass,\n} from './grListStyles'\n\nexport const grListSafelist = [...new Set([\n ...Object.values(densityPadding).flatMap(splitClassTokens),\n ...splitClassTokens(listSurfaceClass),\n ...splitClassTokens(itemLayoutClass),\n ...splitClassTokens(itemTitleClass),\n ...splitClassTokens(itemDescriptionClass),\n ...splitClassTokens(itemInteractiveClass),\n ...splitClassTokens(itemHoverClass),\n ...splitClassTokens(itemDisabledClass),\n ...splitClassTokens(dividedClass),\n ...splitClassTokens(emptyClass),\n ...splitClassTokens(loadingRowClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grListSafelist } from './safelist'\n\nexport const grListConfig = defineGranularComponent(import.meta.url, {\n name: 'GrList',\n safelist: grListSafelist,\n dependencies: ['GrCard', 'GrSkeleton'],\n})\n"],"mappings":";;;;;;;;;;AAUA,IAAa,iBAAoD;CAC/D,SAAS;CACT,SAAS;AACX;;;;;;;;;;;;;AAcA,IAAa,mBAAmB;AAEhC,IAAa,kBAAkB;;AAG/B,IAAa,uBAAuB;AAEpC,IAAa,iBAAiB;;;;;AAM9B,IAAa,oBAAoB;AAEjC,IAAa,eAAe;AAE5B,IAAa,aAAa;;AAG1B,IAAa,iBAAiB;AAC9B,IAAa,uBAAuB;AAEpC,IAAa,kBAAkB;AAE/B,SAAgB,uBAAuB,SAAoC;CACzE,OAAO,eAAe;AACxB;;;ACvCA,IAAa,iBAAiB,CAAC,mBAAG,IAAI,IAAI;CACxC,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,YAAY;CAChC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,eAAe;AACrC,CAAC,CAAC;;;ACvBF,IAAa,eAAe,wBAAwB,OAAO,KAAK,KAAK;CACnE,MAAM;CACN,UAAU;CACV,cAAc,CAAC,UAAU,YAAY;AACvC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-COpuWGr_.js","names":[],"sources":["../../src/components/GrTimeline/grTimelineStyles.ts","../../src/components/GrTimeline/safelist.ts","../../src/components/GrTimeline/config.ts"],"sourcesContent":["import type { GrTone } from '../shared/tones'\n\nexport type GrTimelineTone = GrTone\n\n/** Плотность вертикальных отступов пункта — та же ось, что `density` у `GrListItem`. */\nexport const GR_TIMELINE_DENSITIES = ['regular', 'compact'] as const\nexport type GrTimelineDensity = typeof GR_TIMELINE_DENSITIES[number]\n\n/**\n * `stacked` — одна ось слева; `time` — метка времени отдельной колонкой слева от\n * оси; `alternate` — пункты попеременно по обе стороны центральной оси.\n */\nexport const GR_TIMELINE_LAYOUTS = ['stacked', 'time', 'alternate'] as const\nexport type GrTimelineLayout = typeof GR_TIMELINE_LAYOUTS[number]\n\nexport const GR_TIMELINE_ORIENTATIONS = ['vertical', 'horizontal'] as const\nexport type GrTimelineOrientation = typeof GR_TIMELINE_ORIENTATIONS[number]\n\n/** Заполненная точка — событие случилось; полая — запланировано. */\nexport const GR_TIMELINE_MARKER_VARIANTS = ['filled', 'outlined'] as const\nexport type GrTimelineMarkerVariant = typeof GR_TIMELINE_MARKER_VARIANTS[number]\n\n/**\n * Отступ **под** пунктом, а не `gap` контейнера: отрезок оси растёт до низа\n * пункта, и промежуток, которого пункт не занимает, разорвал бы линию.\n */\nexport const densityPadding: Record<GrTimelineDensity, string> = {\n regular: 'pb-5',\n compact: 'pb-3',\n}\n\n/**\n * Заливка маркера. У тона `neutral` одноимённой роли в палитре нет — его вес\n * это приглушённый текст, поэтому точка красится `--gr-muted-fg`.\n */\nexport const markerFilledToneClass: Record<GrTimelineTone, string> = {\n neutral: 'bg-[var(--gr-muted-fg)]',\n primary: 'bg-[var(--gr-primary)]',\n success: 'bg-[var(--gr-success)]',\n warning: 'bg-[var(--gr-warning)]',\n danger: 'bg-[var(--gr-danger)]',\n info: 'bg-[var(--gr-info)]',\n slate: 'bg-[var(--gr-slate)]',\n azure: 'bg-[var(--gr-azure)]',\n}\n\n/** Полая точка: обводка тоном, середина — фон страницы, чтобы ось не просвечивала. */\nexport const markerOutlinedToneClass: Record<GrTimelineTone, string> = {\n neutral: 'bg-[var(--gr-bg)] border-[var(--gr-muted-fg)]',\n primary: 'bg-[var(--gr-bg)] border-[var(--gr-primary)]',\n success: 'bg-[var(--gr-bg)] border-[var(--gr-success)]',\n warning: 'bg-[var(--gr-bg)] border-[var(--gr-warning)]',\n danger: 'bg-[var(--gr-bg)] border-[var(--gr-danger)]',\n info: 'bg-[var(--gr-bg)] border-[var(--gr-info)]',\n slate: 'bg-[var(--gr-bg)] border-[var(--gr-slate)]',\n azure: 'bg-[var(--gr-bg)] border-[var(--gr-azure)]',\n}\n\nexport const markerBaseClass = 'block shrink-0 rounded-[var(--gr-radius-full)]'\n\nexport const timeClass = 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-normal)] text-[var(--gr-muted-fg)] tabular-nums'\n\nexport const titleClass = 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-normal)] font-600 text-[var(--gr-fg)]'\n\nexport const descriptionClass = 'mt-0.5 text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-normal)] text-[var(--gr-muted-fg)]'\n\nexport const groupTitleClass = 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-normal)] font-600 uppercase tracking-wide text-[var(--gr-muted-fg)]'\n\nexport const emptyClass = 'py-6 text-center text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-normal)] text-[var(--gr-muted-fg)]'\n\nexport const loadingRowClass = 'flex items-center gap-3 pb-5'\n\nexport function grTimelineDensityClass(density: GrTimelineDensity): string {\n return densityPadding[density]\n}\n\nexport function grTimelineMarkerClass(\n tone: GrTimelineTone,\n variant: GrTimelineMarkerVariant,\n): string {\n const toneClass = variant === 'filled'\n ? markerFilledToneClass[tone]\n : markerOutlinedToneClass[tone]\n\n return `${markerBaseClass} ${toneClass}`\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n densityPadding,\n descriptionClass,\n emptyClass,\n groupTitleClass,\n loadingRowClass,\n markerBaseClass,\n markerFilledToneClass,\n markerOutlinedToneClass,\n timeClass,\n titleClass,\n} from './grTimelineStyles'\n\nexport const grTimelineSafelist = [...new Set([\n ...Object.values(densityPadding).flatMap(splitClassTokens),\n ...Object.values(markerFilledToneClass).flatMap(splitClassTokens),\n ...Object.values(markerOutlinedToneClass).flatMap(splitClassTokens),\n ...splitClassTokens(markerBaseClass),\n ...splitClassTokens(timeClass),\n ...splitClassTokens(titleClass),\n ...splitClassTokens(descriptionClass),\n ...splitClassTokens(groupTitleClass),\n ...splitClassTokens(emptyClass),\n ...splitClassTokens(loadingRowClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grTimelineSafelist } from './safelist'\n\nexport const grTimelineConfig = defineGranularComponent(import.meta.url, {\n name: 'GrTimeline',\n safelist: grTimelineSafelist,\n dependencies: ['GrSkeleton'],\n})\n"],"mappings":";;;;;;;AA0BA,IAAa,iBAAoD;CAC/D,SAAS;CACT,SAAS;AACX;;;;;AAMA,IAAa,wBAAwD;CACnE,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;AACT;;AAGA,IAAa,0BAA0D;CACrE,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAEA,IAAa,kBAAkB;AAE/B,IAAa,YAAY;AAEzB,IAAa,aAAa;AAE1B,IAAa,mBAAmB;AAEhC,IAAa,kBAAkB;AAE/B,IAAa,aAAa;AAE1B,IAAa,kBAAkB;AAE/B,SAAgB,uBAAuB,SAAoC;CACzE,OAAO,eAAe;AACxB;AAEA,SAAgB,sBACd,MACA,SACQ;CAKR,OAAO,GAAG,gBAAgB,GAJR,YAAY,WAC1B,sBAAsB,QACtB,wBAAwB;AAG9B;;;ACvEA,IAAa,qBAAqB,CAAC,mBAAG,IAAI,IAAI;CAC5C,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,qBAAqB,CAAC,CAAC,QAAQ,gBAAgB;CAChE,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CAClE,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,SAAS;CAC7B,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,UAAU;CAC9B,GAAG,iBAAiB,eAAe;AACrC,CAAC,CAAC;;;ACrBF,IAAa,mBAAmB,wBAAwB,OAAO,KAAK,KAAK;CACvE,MAAM;CACN,UAAU;CACV,cAAc,CAAC,YAAY;AAC7B,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { t as splitClassTokens } from "./classTokens-BzazaERD.js";
|
|
2
|
+
import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
|
|
3
|
+
//#region src/components/GrDelta/grDeltaStyles.ts
|
|
4
|
+
/**
|
|
5
|
+
* Классы `GrDelta`.
|
|
6
|
+
*
|
|
7
|
+
* Тон перечислен целиком по одному литералу на ветку: UnoCSS сканирует исходный
|
|
8
|
+
* текст файла, и собранное шаблонной строкой имя (`text-[var(--gr-${tone}-text)]`)
|
|
9
|
+
* уехало бы в CSS литералом.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Величина стоит в строке текста, поэтому наследует её кегль и выравнивание.
|
|
13
|
+
*
|
|
14
|
+
* Общего `gap` нет намеренно: префикс — это валюта, и «$ 12,50» с зазором
|
|
15
|
+
* читается как опечатка. Отбивку получают только стрелка и суффикс.
|
|
16
|
+
*/
|
|
17
|
+
var deltaRootClass = "inline-flex items-baseline tabular-nums";
|
|
18
|
+
/** Суффикс — единица измерения, и от числа он отбивается: «−15 %», «120 мс». */
|
|
19
|
+
var deltaSuffixClass = "ml-1";
|
|
20
|
+
/**
|
|
21
|
+
* Стрелка выравнивается по строке, а не по базовой линии: у svg её нет.
|
|
22
|
+
*
|
|
23
|
+
* Размер — в `em`, потому что на ступени `md` кегля у величины нет вовсе:
|
|
24
|
+
* пиксельная лестница оставила бы стрелку 14-пиксельной внутри заголовка.
|
|
25
|
+
* Чуть меньше единицы: стрелка декоративна, и равный вес спорил бы с самим
|
|
26
|
+
* числом.
|
|
27
|
+
*/
|
|
28
|
+
var deltaArrowClass = "mr-0.5 self-center shrink-0 h-[0.875em] w-[0.875em]";
|
|
29
|
+
var deltaToneClass = {
|
|
30
|
+
success: "text-[var(--gr-success-text)]",
|
|
31
|
+
danger: "text-[var(--gr-danger-text)]",
|
|
32
|
+
neutral: "text-[var(--gr-muted-fg)]"
|
|
33
|
+
};
|
|
34
|
+
/** Прочерк вместо величины: тона у него нет, но и цвет основного текста ему не нужен. */
|
|
35
|
+
var deltaEmptyClass = "text-[var(--gr-muted-fg)]";
|
|
36
|
+
/**
|
|
37
|
+
* `md` пуст намеренно: на ступени по умолчанию величина набирается кеглем той
|
|
38
|
+
* строки, в которой стоит. Фиксированные 13 px разъезжаются и вверх, и вниз —
|
|
39
|
+
* внутри заголовка величина оставалась бы мелкой, в подписи под графиком
|
|
40
|
+
* крупной. Ступени по краям остаются явными: они нужны, когда величина стоит
|
|
41
|
+
* не в предложении, а в ряду с контролами.
|
|
42
|
+
*/
|
|
43
|
+
var deltaSizeClass = {
|
|
44
|
+
xs: "text-[length:var(--gr-control-text-xs)]",
|
|
45
|
+
sm: "text-[length:var(--gr-control-text-sm)]",
|
|
46
|
+
md: "",
|
|
47
|
+
lg: "text-[length:var(--gr-control-text-lg)]"
|
|
48
|
+
};
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region src/components/GrDelta/safelist.ts
|
|
51
|
+
var grDeltaSafelist = [.../* @__PURE__ */ new Set([
|
|
52
|
+
...splitClassTokens(deltaRootClass),
|
|
53
|
+
...splitClassTokens(deltaEmptyClass),
|
|
54
|
+
...splitClassTokens(deltaArrowClass),
|
|
55
|
+
...splitClassTokens(deltaSuffixClass),
|
|
56
|
+
...Object.values(deltaToneClass).flatMap(splitClassTokens),
|
|
57
|
+
...Object.values(deltaSizeClass).flatMap(splitClassTokens)
|
|
58
|
+
])];
|
|
59
|
+
//#endregion
|
|
60
|
+
//#region src/components/GrDelta/config.ts
|
|
61
|
+
var grDeltaConfig = defineGranularComponent(import.meta.url, {
|
|
62
|
+
name: "GrDelta",
|
|
63
|
+
safelist: grDeltaSafelist
|
|
64
|
+
});
|
|
65
|
+
//#endregion
|
|
66
|
+
export { deltaRootClass as a, deltaToneClass as c, deltaEmptyClass as i, grDeltaSafelist as n, deltaSizeClass as o, deltaArrowClass as r, deltaSuffixClass as s, grDeltaConfig as t };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-DBQQT-WP.js","names":[],"sources":["../../src/components/GrDelta/grDeltaStyles.ts","../../src/components/GrDelta/safelist.ts","../../src/components/GrDelta/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nimport type { GrDeltaTone } from './deltaTone'\n\n/**\n * Классы `GrDelta`.\n *\n * Тон перечислен целиком по одному литералу на ветку: UnoCSS сканирует исходный\n * текст файла, и собранное шаблонной строкой имя (`text-[var(--gr-${tone}-text)]`)\n * уехало бы в CSS литералом.\n */\n\n/**\n * Величина стоит в строке текста, поэтому наследует её кегль и выравнивание.\n *\n * Общего `gap` нет намеренно: префикс — это валюта, и «$ 12,50» с зазором\n * читается как опечатка. Отбивку получают только стрелка и суффикс.\n */\nexport const deltaRootClass = 'inline-flex items-baseline tabular-nums'\n\n/** Суффикс — единица измерения, и от числа он отбивается: «−15 %», «120 мс». */\nexport const deltaSuffixClass = 'ml-1'\n\n/**\n * Стрелка выравнивается по строке, а не по базовой линии: у svg её нет.\n *\n * Размер — в `em`, потому что на ступени `md` кегля у величины нет вовсе:\n * пиксельная лестница оставила бы стрелку 14-пиксельной внутри заголовка.\n * Чуть меньше единицы: стрелка декоративна, и равный вес спорил бы с самим\n * числом.\n */\nexport const deltaArrowClass = 'mr-0.5 self-center shrink-0 h-[0.875em] w-[0.875em]'\n\nexport const deltaToneClass: Record<GrDeltaTone, string> = {\n success: 'text-[var(--gr-success-text)]',\n danger: 'text-[var(--gr-danger-text)]',\n neutral: 'text-[var(--gr-muted-fg)]',\n}\n\n/** Прочерк вместо величины: тона у него нет, но и цвет основного текста ему не нужен. */\nexport const deltaEmptyClass = 'text-[var(--gr-muted-fg)]'\n\n/**\n * `md` пуст намеренно: на ступени по умолчанию величина набирается кеглем той\n * строки, в которой стоит. Фиксированные 13 px разъезжаются и вверх, и вниз —\n * внутри заголовка величина оставалась бы мелкой, в подписи под графиком\n * крупной. Ступени по краям остаются явными: они нужны, когда величина стоит\n * не в предложении, а в ряду с контролами.\n */\nexport const deltaSizeClass: Record<GrComponentSize, string> = {\n xs: 'text-[length:var(--gr-control-text-xs)]',\n sm: 'text-[length:var(--gr-control-text-sm)]',\n md: '',\n lg: 'text-[length:var(--gr-control-text-lg)]',\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n deltaArrowClass,\n deltaEmptyClass,\n deltaRootClass,\n deltaSizeClass,\n deltaSuffixClass,\n deltaToneClass,\n} from './grDeltaStyles'\n\n// Классы из вычисляемых мап (тон, размер) UnoCSS сканом не находит — только\n// safelist. Литералы хелпера туда же: на сборке он уезжает в общий чанк.\nexport const grDeltaSafelist = [...new Set([\n ...splitClassTokens(deltaRootClass),\n ...splitClassTokens(deltaEmptyClass),\n ...splitClassTokens(deltaArrowClass),\n ...splitClassTokens(deltaSuffixClass),\n ...Object.values(deltaToneClass).flatMap(splitClassTokens),\n ...Object.values(deltaSizeClass).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDeltaSafelist } from './safelist'\n\nexport const grDeltaConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDelta',\n safelist: grDeltaSafelist,\n})\n"],"mappings":";;;;;;;;;;;;;;;;AAkBA,IAAa,iBAAiB;;AAG9B,IAAa,mBAAmB;;;;;;;;;AAUhC,IAAa,kBAAkB;AAE/B,IAAa,iBAA8C;CACzD,SAAS;CACT,QAAQ;CACR,SAAS;AACX;;AAGA,IAAa,kBAAkB;;;;;;;;AAS/B,IAAa,iBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;ACzCA,IAAa,kBAAkB,CAAC,mBAAG,IAAI,IAAI;CACzC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,eAAe;CACnC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;CACzD,GAAG,OAAO,OAAO,cAAc,CAAC,CAAC,QAAQ,gBAAgB;AAC3D,CAAC,CAAC;;;AChBF,IAAa,gBAAgB,wBAAwB,OAAO,KAAK,KAAK;CACpE,MAAM;CACN,UAAU;AACZ,CAAC"}
|