@feugene/granularity 0.22.0 → 0.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/chunks/config-BFJIxE8b.js +62 -0
  2. package/dist/chunks/config-BFJIxE8b.js.map +1 -0
  3. package/dist/chunks/{config-DBQQT-WP.js → config-BIa3ilQm.js} +18 -3
  4. package/dist/chunks/config-BIa3ilQm.js.map +1 -0
  5. package/dist/chunks/config-BSyiFlbi2.js.map +1 -0
  6. package/dist/chunks/config-BViooYNv2.js.map +1 -0
  7. package/dist/chunks/config-BoNR7_PD.js.map +1 -0
  8. package/dist/chunks/{config-Be9k9bOf.js → config-C8tVRv8i.js} +16 -2
  9. package/dist/chunks/config-C8tVRv8i.js.map +1 -0
  10. package/dist/chunks/{config-Bm_Sovla.js → config-DYgfMrIF.js} +14 -2
  11. package/dist/chunks/config-DYgfMrIF.js.map +1 -0
  12. package/dist/chunks/config-rkcKArZQ2.js +86 -0
  13. package/dist/chunks/config-rkcKArZQ2.js.map +1 -0
  14. package/dist/chunks/config-vSji8w902.js.map +1 -0
  15. package/dist/chunks/{trending-up-Bf9AQmoq.js → deltaTone-B5OoS1vo.js} +19 -1
  16. package/dist/chunks/deltaTone-B5OoS1vo.js.map +1 -0
  17. package/dist/chunks/{generated-CiCrGDQO.js → generated-1WEi10KK.js} +89 -6
  18. package/dist/chunks/{generated-CiCrGDQO.js.map → generated-1WEi10KK.js.map} +1 -1
  19. package/dist/chunks/{granular-provider-CYroWMjO.js → granular-provider-Dr2PKgl1.js} +13 -11
  20. package/dist/chunks/granular-provider-Dr2PKgl1.js.map +1 -0
  21. package/dist/components/GrCard/chunks/{GrCard-Bc7nRfbe.js → GrCard-gI2wA8ZZ.js} +8 -2
  22. package/dist/components/GrCard/chunks/GrCard-gI2wA8ZZ.js.map +1 -0
  23. package/dist/components/GrCard/index.js +2 -2
  24. package/dist/components/GrCollapse/chunks/{GrCollapse-C1rCfbc0.js → GrCollapse-DIHEiTju.js} +1 -1
  25. package/dist/components/GrCollapse/chunks/{GrCollapse-C1rCfbc0.js.map → GrCollapse-DIHEiTju.js.map} +1 -1
  26. package/dist/components/GrCollapse/index.js +1 -1
  27. package/dist/components/GrDelta/chunks/GrDelta-NE5HhXoo.js +0 -0
  28. package/dist/components/GrDelta/chunks/GrDelta-NE5HhXoo.js.map +1 -0
  29. package/dist/components/GrDelta/index.js +4 -3
  30. package/dist/components/GrDescriptionList/chunks/{GrDescriptionList-pXh1LZEe.js → GrDescriptionList-C6Pxjjbh.js} +21 -6
  31. package/dist/components/GrDescriptionList/chunks/GrDescriptionList-C6Pxjjbh.js.map +1 -0
  32. package/dist/components/GrDescriptionList/index.js +2 -2
  33. package/dist/components/GrDropdown/index.js +1 -1
  34. package/dist/components/GrEmptyState/chunks/{GrEmptyState-CS9do8eM.js → GrEmptyState-BGUX8O0U.js} +1 -1
  35. package/dist/components/GrEmptyState/chunks/{GrEmptyState-CS9do8eM.js.map → GrEmptyState-BGUX8O0U.js.map} +1 -1
  36. package/dist/components/GrEmptyState/index.js +2 -2
  37. package/dist/components/GrFilePreview/chunks/{GrFilePreview-rbE3zL9w.js → GrFilePreview-D0Bt-0nn.js} +1 -1
  38. package/dist/components/GrFilePreview/chunks/{GrFilePreview-rbE3zL9w.js.map → GrFilePreview-D0Bt-0nn.js.map} +1 -1
  39. package/dist/components/GrFilePreview/index.js +2 -2
  40. package/dist/components/GrList/chunks/{GrList-BRYhpqIe.js → GrList-DAtzVIHh.js} +1 -1
  41. package/dist/components/GrList/chunks/{GrList-BRYhpqIe.js.map → GrList-DAtzVIHh.js.map} +1 -1
  42. package/dist/components/GrList/index.js +1 -1
  43. package/dist/components/GrLoading/chunks/{GrLoading-C3DZSSuh.js → GrLoading-DeBFTvFX.js} +1 -1
  44. package/dist/components/GrLoading/chunks/GrLoading-DeBFTvFX.js.map +1 -0
  45. package/dist/components/GrLoading/index.js +1 -1
  46. package/dist/components/GrPopover/index.js +1 -1
  47. package/dist/components/GrSegmented/chunks/{GrSegmented-D1mjxF_O.js → GrSegmented-DKpo3cnC.js} +30 -5
  48. package/dist/components/GrSegmented/chunks/GrSegmented-DKpo3cnC.js.map +1 -0
  49. package/dist/components/GrSegmented/index.js +1 -1
  50. package/dist/components/GrSortableList/chunks/{GrSortableList-DPjxilmN.js → GrSortableList-BmcUVAMb.js} +1 -1
  51. package/dist/components/GrSortableList/chunks/{GrSortableList-DPjxilmN.js.map → GrSortableList-BmcUVAMb.js.map} +1 -1
  52. package/dist/components/GrSortableList/index.js +1 -1
  53. package/dist/components/GrStatistic/chunks/{GrStatistic-DkzWUAw1.js → GrStatistic-BJQv5aOS.js} +60 -29
  54. package/dist/components/GrStatistic/chunks/GrStatistic-BJQv5aOS.js.map +1 -0
  55. package/dist/components/GrStatistic/index.js +2 -2
  56. package/dist/components/GrSwitch/chunks/{GrSwitch-x_vQQ6ao.js → GrSwitch-CHiIj9GT.js} +1 -1
  57. package/dist/components/GrSwitch/chunks/{GrSwitch-x_vQQ6ao.js.map → GrSwitch-CHiIj9GT.js.map} +1 -1
  58. package/dist/components/GrSwitch/index.js +2 -2
  59. package/dist/components/GrValue/chunks/GrValue-CZsuZ4x-.js +38 -0
  60. package/dist/components/GrValue/chunks/GrValue-CZsuZ4x-.js.map +1 -0
  61. package/dist/components/GrValue/index.js +3 -0
  62. package/dist/directives/loading.js +1 -1
  63. package/dist/granular-provider-node.js +1 -1
  64. package/dist/granular-provider.js +1 -1
  65. package/dist/index.js +24 -21
  66. package/dist/styles/themes/dark.css +11 -6
  67. package/dist/styles/themes/light.css +5 -0
  68. package/dist/theme.js +1 -1
  69. package/dist/tokens.js +1 -1
  70. package/dist/types/components/GrCard/grCardStyles.d.ts +11 -0
  71. package/dist/types/components/GrDelta/grDeltaStyles.d.ts +13 -1
  72. package/dist/types/components/GrDelta/index.d.ts +1 -0
  73. package/dist/types/components/GrDescriptionList/GrDescriptionList.vue.d.ts +6 -2
  74. package/dist/types/components/GrDescriptionList/grDescriptionListStyles.d.ts +41 -6
  75. package/dist/types/components/GrFilePreview/index.d.ts +1 -0
  76. package/dist/types/components/GrInput/GrInput.vue.d.ts +1 -1
  77. package/dist/types/components/GrNumberInput/GrNumberInput.vue.d.ts +1 -1
  78. package/dist/types/components/GrPromptDialog/GrPromptDialog.vue.d.ts +1 -1
  79. package/dist/types/components/GrStatistic/GrStatistic.vue.d.ts +17 -7
  80. package/dist/types/components/GrStatistic/defaults.d.ts +6 -0
  81. package/dist/types/components/GrStatistic/grStatisticStyles.d.ts +9 -0
  82. package/dist/types/components/GrValue/GrValue.vue.d.ts +51 -0
  83. package/dist/types/components/GrValue/config.d.ts +1 -0
  84. package/dist/types/components/GrValue/grValueStyles.d.ts +34 -0
  85. package/dist/types/components/GrValue/index.d.ts +5 -0
  86. package/dist/types/components/GrValue/safelist.d.ts +1 -0
  87. package/dist/types/components/shared/truncationTitle.d.ts +16 -0
  88. package/dist/types/granular-provider/shared.d.ts +1 -0
  89. package/dist/types/index.d.ts +2 -0
  90. package/dist/types/internal/granularityFormat.d.ts +26 -0
  91. package/dist/web-types.json +69 -4
  92. package/package.json +5 -1
  93. package/tokens/themes/dark.json +26 -6
  94. package/tokens/themes/light.json +20 -0
  95. package/dist/chunks/config-BSyiFlbi.js.map +0 -1
  96. package/dist/chunks/config-BViooYNv.js.map +0 -1
  97. package/dist/chunks/config-Be9k9bOf.js.map +0 -1
  98. package/dist/chunks/config-Bm_Sovla.js.map +0 -1
  99. package/dist/chunks/config-BoNR7_PD2.js.map +0 -1
  100. package/dist/chunks/config-DBQQT-WP.js.map +0 -1
  101. package/dist/chunks/config-jyZq8XKL.js +0 -58
  102. package/dist/chunks/config-jyZq8XKL.js.map +0 -1
  103. package/dist/chunks/config-vSji8w90.js.map +0 -1
  104. package/dist/chunks/granular-provider-CYroWMjO.js.map +0 -1
  105. package/dist/chunks/trending-up-Bf9AQmoq.js.map +0 -1
  106. package/dist/components/GrCard/chunks/GrCard-Bc7nRfbe.js.map +0 -1
  107. package/dist/components/GrDelta/chunks/GrDelta-BMmpYz8K.js +0 -0
  108. package/dist/components/GrDelta/chunks/GrDelta-BMmpYz8K.js.map +0 -1
  109. package/dist/components/GrDescriptionList/chunks/GrDescriptionList-pXh1LZEe.js.map +0 -1
  110. package/dist/components/GrLoading/chunks/GrLoading-C3DZSSuh.js.map +0 -1
  111. package/dist/components/GrSegmented/chunks/GrSegmented-D1mjxF_O.js.map +0 -1
  112. package/dist/components/GrStatistic/chunks/GrStatistic-DkzWUAw1.js.map +0 -1
  113. /package/dist/chunks/{config-BSyiFlbi.js → config-BSyiFlbi2.js} +0 -0
  114. /package/dist/chunks/{config-BViooYNv.js → config-BViooYNv2.js} +0 -0
  115. /package/dist/chunks/{config-BoNR7_PD2.js → config-BoNR7_PD.js} +0 -0
  116. /package/dist/chunks/{config-vSji8w90.js → config-vSji8w902.js} +0 -0
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Классы `GrValue`.
3
+ *
4
+ * Оформление аффиксов задаётся токенами, а не решением компонента. Раньше это
5
+ * решение было зашито: префикс набирался как число, суффикс — как единица
6
+ * измерения. Для `$14,99` и `42 %` правило верное, но доменное: рубль пишут
7
+ * справа (`1 284 500 ₽`), и в роли суффикса он получал вид подписи.
8
+ *
9
+ * Дефолты сохраняют прежний вид, поэтому потребителю, которого он устраивал,
10
+ * менять нечего.
11
+ */
12
+ /**
13
+ * Величина набирается кеглем и цветом того места, где стоит: своей шкалы у
14
+ * примитива нет. `tabular-nums` держит ширину строки, когда число меняется.
15
+ */
16
+ export declare const valueRootClass = "inline-flex items-baseline tabular-nums";
17
+ /**
18
+ * Префикс — часть записи величины: по умолчанию её цвет, её кегль, вплотную.
19
+ * `inherit` в фолбэке и делает «по умолчанию» наследованием, а не копией: тон
20
+ * задаётся один раз на родителе и доезжает сюда сам.
21
+ */
22
+ export declare const valuePrefixClass: string;
23
+ /**
24
+ * Суффикс по умолчанию — единица измерения: приглушён, на ступень мельче и
25
+ * отбит от числа.
26
+ *
27
+ * `leading-none` обязателен вместе с уменьшенным кеглем: межстрочный
28
+ * наследуется от величины и рассчитан на её размер, а выровненная по базовой
29
+ * линии приписка со своим меньшим кеглем растягивала бы им всю строку.
30
+ *
31
+ * Логический `me`/`ms` вместо `mr`/`ml`: в RTL отбивка обязана встать с другой
32
+ * стороны, иначе суффикс прилипнет к числу.
33
+ */
34
+ export declare const valueSuffixClass: string;
@@ -0,0 +1,5 @@
1
+ export { default } from './GrValue.vue';
2
+ export { default as GrValue } from './GrValue.vue';
3
+ export { grValueConfig } from './config';
4
+ export type { GrValueProps } from './GrValue.vue';
5
+ export { grValueSafelist } from './safelist';
@@ -0,0 +1 @@
1
+ export declare const grValueSafelist: string[];
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Полный текст обрезанной строки — нативной подсказкой по наведению.
3
+ *
4
+ * `truncate` прячет хвост **визуально**: в DOM и для скринридера подпись
5
+ * остаётся целой, поэтому теряет её ровно один читатель — тот, кто смотрит
6
+ * глазами. Он видит «Включе…» и узнать остальное не может ничем.
7
+ *
8
+ * Подсказка ставится **по факту обрезки**, а не всегда: тултип, дублирующий
9
+ * видимую целиком подпись, — шум, которого никто не просил. Замер делается на
10
+ * самом наведении, поэтому ни наблюдателей, ни подписок заводить не нужно.
11
+ *
12
+ * Ширина сравнивается с запасом в пиксель: браузеры считают `scrollWidth`
13
+ * округлением вверх, и у необрезанной строки он бывает на единицу больше
14
+ * `clientWidth` — без запаса подсказка появлялась бы на ровном месте.
15
+ */
16
+ export declare function titleWhenTruncated(event: Event): void;
@@ -84,6 +84,7 @@ export declare const granularityComponentConfigs: {
84
84
  GrTooltip: GranularComponentDescriptor<"GrTooltip">;
85
85
  GrTree: GranularComponentDescriptor<"GrTree">;
86
86
  GrTreeSelect: GranularComponentDescriptor<"GrTreeSelect">;
87
+ GrValue: GranularComponentDescriptor<"GrValue">;
87
88
  };
88
89
  export type GranularityComponentName = keyof typeof granularityComponentConfigs;
89
90
  /**
@@ -71,6 +71,7 @@ export * from './components/GrToaster';
71
71
  export * from './components/GrTooltip';
72
72
  export * from './components/GrTree';
73
73
  export * from './components/GrTreeSelect';
74
+ export * from './components/GrValue';
74
75
  export { useDismissible } from './composables/useDismissible';
75
76
  export type { UseDismissibleOptions } from './composables/useDismissible';
76
77
  export { useFocusTrap } from './composables/useFocusTrap';
@@ -104,5 +105,6 @@ export { GRANULARITY_TOAST_STATE, granularityToastPlugin, useToast } from './com
104
105
  export type { GranularityToastPluginOptions, GrToastTone, Toast, ToastInput, ToastPromiseMessages, ToastState, } from './composables/useToast';
105
106
  export { GR_TONES } from './components/shared/tones';
106
107
  export type { GrTone } from './components/shared/tones';
108
+ export { titleWhenTruncated } from './components/shared/truncationTitle';
107
109
  export type * from './fileValidation/types';
108
110
  export * from './directives';
@@ -16,4 +16,30 @@
16
16
  * сводим к `en`.
17
17
  */
18
18
  export declare function formatNumber(locale: string, value: number | bigint, options?: Intl.NumberFormatOptions): string;
19
+ /**
20
+ * Те же правила, что у `formatNumber`, но по частям: вызывающему нужно знать,
21
+ * где в записи стоит знак, чтобы вынести его отдельным узлом.
22
+ *
23
+ * Инстанс тот же, что у `formatNumber`: `Intl.NumberFormat` умеет оба метода, а
24
+ * второй кэш под теми же ключами разъехался бы с первым на первом вытеснении.
25
+ */
26
+ export declare function formatNumberToParts(locale: string, value: number | bigint, options?: Intl.NumberFormatOptions): Intl.NumberFormatPart[];
27
+ /**
28
+ * Ведущий знак и остаток записи.
29
+ *
30
+ * Нужно там, где знаку полагается свой узел разметки: валюта обязана стоять
31
+ * после знака (`+$0,03`, а не `$+0,03`). Резать готовую строку по первому
32
+ * символу нельзя — в RTL-локалях знаку предшествует невидимая метка
33
+ * направления (`he-IL` — U+200E, `ar-EG` — U+061C), которой и разворачивается
34
+ * минус относительно цифр. Метка уходит вместе со знаком: она управляет им.
35
+ *
36
+ * `sign` пуст, когда знака нет вовсе (ноль, положительное при `signDisplay:
37
+ * 'auto'`, `NaN`) либо когда перед ним стоит содержательная часть. Во втором
38
+ * случае запись не делится совсем: вернуть половину по догадке хуже, чем
39
+ * вернуть целое.
40
+ */
41
+ export declare function splitLeadingSign(parts: readonly Intl.NumberFormatPart[]): {
42
+ sign: string;
43
+ rest: string;
44
+ };
19
45
  export declare function formatDate(locale: string, value: Date | number | string, options?: Intl.DateTimeFormatOptions): string;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "name": "@feugene/granularity",
4
- "version": "0.22.0",
4
+ "version": "0.24.1",
5
5
  "framework": "vue",
6
6
  "js-types-syntax": "typescript",
7
7
  "description-markup": "markdown",
@@ -2734,7 +2734,7 @@
2734
2734
  },
2735
2735
  {
2736
2736
  "name": "divided",
2737
- "description": "Отбивать пары линиями.",
2737
+ "description": "Отбивать пары линиями. В `flow` не применяется.",
2738
2738
  "default": "undefined",
2739
2739
  "value": {
2740
2740
  "kind": "expression",
@@ -2752,6 +2752,7 @@
2752
2752
  },
2753
2753
  {
2754
2754
  "name": "columns",
2755
+ "description": "Колонки сетки. В `flow` не применяются: строка колонок не имеет.",
2755
2756
  "default": "undefined",
2756
2757
  "value": {
2757
2758
  "kind": "expression",
@@ -2760,7 +2761,7 @@
2760
2761
  },
2761
2762
  {
2762
2763
  "name": "layout",
2763
- "description": "`inline` — подпись слева колонкой; `stacked` — над значением.",
2764
+ "description": "`inline` — подпись слева колонкой; `stacked` — над значением; `flow` — пары текут по строке с переносом (метаданные внутри пункта списка).",
2764
2765
  "default": "undefined",
2765
2766
  "value": {
2766
2767
  "kind": "expression",
@@ -9070,7 +9071,7 @@
9070
9071
  {
9071
9072
  "name": "tone",
9072
9073
  "description": "Тон значения; точечно перекрывается `--gr-statistic-value-color`.",
9073
- "default": "\"neutral\"",
9074
+ "default": "undefined",
9074
9075
  "value": {
9075
9076
  "kind": "expression",
9076
9077
  "type": "\"primary\" | \"neutral\" | \"success\" | \"warning\" | \"danger\" | \"info\" | \"slate\" | \"azure\" | undefined"
@@ -9183,6 +9184,15 @@
9183
9184
  "type": "string | undefined"
9184
9185
  }
9185
9186
  },
9187
+ {
9188
+ "name": "polarity",
9189
+ "description": "Что считать хорошим: тон выводится из знака самого значения. Для выручки рост — успех, для себестоимости и оттока — наоборот. Явный `tone` сильнее: выведенный тон — умолчание, а не диктат.",
9190
+ "default": "undefined",
9191
+ "value": {
9192
+ "kind": "expression",
9193
+ "type": "GrDeltaPolarity | undefined"
9194
+ }
9195
+ },
9186
9196
  {
9187
9197
  "name": "decimalSeparator",
9188
9198
  "description": "Десятичный разделитель. Сильнее локали; без него и без локали — точка.",
@@ -10967,6 +10977,61 @@
10967
10977
  }
10968
10978
  ]
10969
10979
  }
10980
+ },
10981
+ {
10982
+ "name": "GrValue",
10983
+ "source": {
10984
+ "module": "@feugene/granularity/components/GrValue",
10985
+ "symbol": "GrValue"
10986
+ },
10987
+ "props": [
10988
+ {
10989
+ "name": "value",
10990
+ "description": "Готовое к показу значение. Не форматируется: «2 ч 15 мин» и «—» тоже величины.",
10991
+ "value": {
10992
+ "kind": "expression",
10993
+ "type": "string | number | null | undefined"
10994
+ }
10995
+ },
10996
+ {
10997
+ "name": "prefix",
10998
+ "description": "Приписка перед значением: валюта, знак приближения.",
10999
+ "value": {
11000
+ "kind": "expression",
11001
+ "type": "string | undefined"
11002
+ }
11003
+ },
11004
+ {
11005
+ "name": "suffix",
11006
+ "description": "Приписка после значения: единица измерения, валюта справа.",
11007
+ "value": {
11008
+ "kind": "expression",
11009
+ "type": "string | undefined"
11010
+ }
11011
+ }
11012
+ ],
11013
+ "slots": [
11014
+ {
11015
+ "name": "default",
11016
+ "description": "Значение вместо пропа."
11017
+ },
11018
+ {
11019
+ "name": "prefix",
11020
+ "description": "Приписка перед значением."
11021
+ },
11022
+ {
11023
+ "name": "suffix",
11024
+ "description": "Приписка после значения."
11025
+ },
11026
+ {
11027
+ "name": "lead",
11028
+ "description": "Перед префиксом: знак величины у `GrDelta`, стрелка направления. Слотом, а не пропом, — разметка там принадлежит потребителю."
11029
+ },
11030
+ {
11031
+ "name": "trail",
11032
+ "description": "После значения: скрытый узел для диктора у `GrStatistic`."
11033
+ }
11034
+ ]
10970
11035
  }
10971
11036
  ]
10972
11037
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@feugene/granularity",
3
3
  "description": "Granularity design system package with Vue 3 components, consumed via the `@feugene/unocss-preset-granular` preset.",
4
- "version": "0.22.0",
4
+ "version": "0.24.1",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": {
7
7
  "name": "Evgeniy Fureev",
@@ -349,6 +349,10 @@
349
349
  "types": "./dist/types/components/GrTreeSelect/index.d.ts",
350
350
  "import": "./dist/components/GrTreeSelect/index.js"
351
351
  },
352
+ "./components/GrValue": {
353
+ "types": "./dist/types/components/GrValue/index.d.ts",
354
+ "import": "./dist/components/GrValue/index.js"
355
+ },
352
356
  "./composables/useDismissible": {
353
357
  "types": "./dist/types/composables/useDismissible.d.ts",
354
358
  "import": "./dist/composables/useDismissible.js"
@@ -154,7 +154,7 @@
154
154
  },
155
155
  {
156
156
  "name": "--gr-success-light",
157
- "value": "#064e3b",
157
+ "value": "#194536",
158
158
  "description": "Облегчённая success-подложка для мягких статусов и подсветок."
159
159
  },
160
160
  {
@@ -179,7 +179,7 @@
179
179
  },
180
180
  {
181
181
  "name": "--gr-warning-light",
182
- "value": "#7c2d12",
182
+ "value": "#672e1c",
183
183
  "description": "Облегчённая warning-подложка для мягких warning-состояний."
184
184
  },
185
185
  {
@@ -199,7 +199,7 @@
199
199
  },
200
200
  {
201
201
  "name": "--gr-danger-light",
202
- "value": "#7f1d1d",
202
+ "value": "#6a2522",
203
203
  "description": "Облегчённая danger-подложка для мягких error-состояний."
204
204
  },
205
205
  {
@@ -219,7 +219,7 @@
219
219
  },
220
220
  {
221
221
  "name": "--gr-info-light",
222
- "value": "#1e3a8a",
222
+ "value": "#213771",
223
223
  "description": "Облегчённая info-подложка для спокойных информационных блоков."
224
224
  },
225
225
  {
@@ -239,7 +239,7 @@
239
239
  },
240
240
  {
241
241
  "name": "--gr-slate-light",
242
- "value": "#334155",
242
+ "value": "#313b4a",
243
243
  "description": "Облегчённая slate-подложка для мягких нейтральных состояний."
244
244
  },
245
245
  {
@@ -259,7 +259,7 @@
259
259
  },
260
260
  {
261
261
  "name": "--gr-azure-light",
262
- "value": "#0c4a6e",
262
+ "value": "#1b425c",
263
263
  "description": "Облегчённая azure-подложка для мягких informational поверхностей."
264
264
  },
265
265
  {
@@ -495,6 +495,26 @@
495
495
  "description": "Focus-ring для интерактивных элементов внутри sidebar."
496
496
  }
497
497
  ]
498
+ },
499
+ {
500
+ "title": "Elevation",
501
+ "tokens": [
502
+ {
503
+ "name": "--gr-shadow-1",
504
+ "value": "0 1px 2px rgba(0, 0, 0, 0.45)",
505
+ "description": "Уровень elevation `1`. Тень тёмной темы чернее и плотнее светлой: на тёмном фоне полупрозрачный синий не даёт тени вовсе, и поверхность теряет один из двух каналов подъёма."
506
+ },
507
+ {
508
+ "name": "--gr-shadow-2",
509
+ "value": "0 8px 24px rgba(0, 0, 0, 0.55)",
510
+ "description": "Уровень elevation `2` для всплывающих слоёв."
511
+ },
512
+ {
513
+ "name": "--gr-shadow-3",
514
+ "value": "0 16px 48px rgba(0, 0, 0, 0.65)",
515
+ "description": "Уровень elevation `3` для модальных слоёв."
516
+ }
517
+ ]
498
518
  }
499
519
  ]
500
520
  }
@@ -494,6 +494,26 @@
494
494
  "description": "Focus-ring для интерактивных элементов внутри sidebar."
495
495
  }
496
496
  ]
497
+ },
498
+ {
499
+ "title": "Elevation",
500
+ "tokens": [
501
+ {
502
+ "name": "--gr-shadow-1",
503
+ "value": "0 1px 2px rgba(15, 23, 42, 0.08)",
504
+ "description": "Уровень elevation `1`. Синеватая полупрозрачная тень читается на светлом фоне мягче чёрной."
505
+ },
506
+ {
507
+ "name": "--gr-shadow-2",
508
+ "value": "0 8px 24px rgba(15, 23, 42, 0.14)",
509
+ "description": "Уровень elevation `2` для всплывающих слоёв."
510
+ },
511
+ {
512
+ "name": "--gr-shadow-3",
513
+ "value": "0 16px 48px rgba(15, 23, 42, 0.20)",
514
+ "description": "Уровень elevation `3` для модальных слоёв."
515
+ }
516
+ ]
497
517
  }
498
518
  ]
499
519
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-BSyiFlbi.js","names":[],"sources":["../../src/components/GrPopover/safelist.ts","../../src/components/GrPopover/config.ts"],"sourcesContent":["import { splitClassTokens } from '../shared/classTokens'\nimport { originClassByPlacement, panelSizes, popoverPanelBaseClass } from './grPopoverStyles'\n\nexport const grPopoverSafelist = [...new Set([\n ...Object.values(panelSizes).flatMap(splitClassTokens),\n ...Object.values(originClassByPlacement).flatMap(splitClassTokens),\n // Базовый класс живёт литералом в `grPopoverStyles.ts`, а такой хелпер на\n // сборке уезжает в общий чанк, которого скан не видит (см. gotchas.md §2).\n ...splitClassTokens(popoverPanelBaseClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grPopoverSafelist } from './safelist'\n\nexport const grPopoverConfig = defineGranularComponent(import.meta.url, {\n name: 'GrPopover',\n safelist: grPopoverSafelist,\n})\n"],"mappings":";;;;AAGA,IAAa,oBAAoB,CAAC,mBAAG,IAAI,IAAI;CAC3C,GAAG,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CACrD,GAAG,OAAO,OAAO,sBAAsB,CAAC,CAAC,QAAQ,gBAAgB;CAGjE,GAAG,iBAAiB,qBAAqB;AAC3C,CAAC,CAAC;;;ACLF,IAAa,kBAAkB,wBAAwB,OAAO,KAAK,KAAK;CACtE,MAAM;CACN,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-BViooYNv.js","names":[],"sources":["../../src/components/GrDropdown/safelist.ts","../../src/components/GrDropdown/config.ts"],"sourcesContent":["import { splitClassTokens } from '../shared/classTokens'\nimport {\n dropdownContentBaseClass,\n originClassByPlacement,\n} from './grDropdownStyles'\n\n// И динамические токены (`resolvedPlacement`), и литералы отделки панели:\n// `grDropdownStyles.ts` уезжает в общий `dist/chunks/`, вне области скана\n// компонента — гейт `src/__tests__/safelist.test.ts`.\nexport const grDropdownSafelist = [...new Set([\n ...Object.values(originClassByPlacement).flatMap(v => splitClassTokens(v ?? '')),\n ...splitClassTokens(dropdownContentBaseClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDropdownSafelist } from './safelist'\n\nexport const grDropdownConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDropdown',\n safelist: grDropdownSafelist,\n})"],"mappings":";;;;AASA,IAAa,qBAAqB,CAAC,mBAAG,IAAI,IAAI,CAC5C,GAAG,OAAO,OAAO,sBAAsB,CAAC,CAAC,SAAQ,MAAK,iBAAiB,KAAK,EAAE,CAAC,GAC/E,GAAG,iBAAiB,wBAAwB,CAC9C,CAAC,CAAC;;;ACRF,IAAa,mBAAmB,wBAAwB,OAAO,KAAK,KAAK;CACvE,MAAM;CACN,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-Be9k9bOf.js","names":[],"sources":["../../src/components/GrStatistic/grStatisticStyles.ts","../../src/components/GrStatistic/safelist.ts","../../src/components/GrStatistic/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nimport type { GrTone } from '../shared/tones'\n\nexport type GrStatisticSize = GrComponentSize\nexport type GrStatisticTone = GrTone\n/** Направление динамики показателя. */\nexport type GrStatisticTrend = 'up' | 'down' | 'flat'\n\n/**\n * Кастомизация через CSS-переменные:\n *\n * - `--gr-statistic-value-color` — цвет значения (по умолчанию — из `tone`).\n * - `--gr-statistic-title-color` — цвет подписи показателя.\n */\n\nexport const statisticTitleSizeBySize: Record<GrStatisticSize, string> = {\n xs: 'text-[length:var(--gr-text-2xs)]',\n sm: 'text-[length:var(--gr-text-xs)]',\n md: 'text-[length:var(--gr-text-xs)]',\n lg: 'text-[length:var(--gr-text-sm)]',\n}\n\nexport const statisticValueSizeBySize: Record<GrStatisticSize, string> = {\n xs: 'text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n sm: 'text-[length:var(--gr-text-xl)] leading-[var(--gr-leading-xl)]',\n md: 'text-[length:var(--gr-text-3xl)] leading-[var(--gr-leading-3xl)]',\n lg: 'text-[length:var(--gr-text-4xl)] leading-tight',\n}\n\nexport const statisticAffixSizeBySize: Record<GrStatisticSize, string> = {\n xs: 'text-[length:var(--gr-text-xs)]',\n sm: 'text-[length:var(--gr-text-xs)]',\n md: 'text-[length:var(--gr-text-base)]',\n lg: 'text-[length:var(--gr-text-xl)]',\n}\n\n// Высота плейсхолдера загрузки повторяет строку значения — блок не «прыгает».\n// Значение отдаётся в `GrSkeleton` пропом, поэтому это px, а не класс.\nexport const statisticPlaceholderHeightBySize: Record<GrStatisticSize, string> = {\n xs: '22px',\n sm: '28px',\n md: '36px',\n lg: '44px',\n}\n\nexport const statisticTrendSizeBySize: Record<GrStatisticSize, string> = {\n xs: 'text-[length:var(--gr-text-2xs)]',\n sm: 'text-[length:var(--gr-text-xs)]',\n md: 'text-[length:var(--gr-text-xs)]',\n lg: 'text-[length:var(--gr-text-sm)]',\n}\n\n// Цвет значения по тону. `neutral` наследует основной цвет текста.\n//\n// Тона берутся из `-text`, а не из насыщенного `--gr-{tone}`: значение — это\n// ТЕКСТ на фоне страницы, а насыщенный тон для этого не предназначен\n// (`--gr-success` на `--gr-bg` — 2.2:1, ниже даже послабления 3:1 для крупного\n// текста). `-text` — ровно роль «тон как текст».\nexport const statisticValueClassByTone: Record<GrStatisticTone, string> = {\n neutral: 'text-[var(--gr-statistic-value-color,var(--gr-fg))]',\n primary: 'text-[var(--gr-statistic-value-color,var(--gr-primary))]',\n success: 'text-[var(--gr-statistic-value-color,var(--gr-success-text))]',\n warning: 'text-[var(--gr-statistic-value-color,var(--gr-warning-text))]',\n danger: 'text-[var(--gr-statistic-value-color,var(--gr-danger-text))]',\n info: 'text-[var(--gr-statistic-value-color,var(--gr-info-text))]',\n slate: 'text-[var(--gr-statistic-value-color,var(--gr-slate-text))]',\n azure: 'text-[var(--gr-statistic-value-color,var(--gr-azure-text))]',\n}\n\n// Строка динамики: рост — успех, падение — опасность, без изменений — приглушённый.\nexport const statisticTrendClassByTrend: Record<GrStatisticTrend, string> = {\n up: 'text-[var(--gr-success-text)]',\n down: 'text-[var(--gr-danger-text)]',\n flat: 'text-[var(--gr-muted-fg)]',\n}\n\nexport const statisticTitleClass = 'font-medium tracking-wide text-[var(--gr-statistic-title-color,var(--gr-muted-fg))]'\n\nexport const statisticRootBase = 'flex items-start gap-3 text-left'\n\n/**\n * Показатель-ссылка или показатель-кнопка. Своей заливки не получает: плитка\n * дашборда обычно уже лежит в `GrCard`, и вторая поверхность спорила бы с ней.\n * Видимость интерактивности держат курсор, фокус-кольцо и подсветка подписи.\n */\nexport const statisticRootInteractiveClass = 'w-full cursor-pointer rounded-[var(--gr-radius-md)] transition-colors hover:bg-[var(--gr-muted)] focus:outline-none focus-visible:ring-2 focus-visible:ring-[var(--gr-ring)]'\n\nexport function statisticRootClass(options: { interactive: boolean }): string {\n return [\n statisticRootBase,\n options.interactive ? statisticRootInteractiveClass : '',\n ].filter(Boolean).join(' ')\n}\n\n/** `tabular-nums` держит ширину строки при переборе чисел и при смене значения. */\nexport const statisticValueTypographyClass = 'font-semibold tabular-nums'\n\nexport function statisticValueClass(options: { size: GrStatisticSize, tone: GrStatisticTone }): string {\n return [\n statisticValueTypographyClass,\n statisticValueSizeBySize[options.size],\n statisticValueClassByTone[options.tone],\n ].join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n statisticAffixSizeBySize,\n statisticRootBase,\n statisticRootInteractiveClass,\n statisticTitleClass,\n statisticTitleSizeBySize,\n statisticTrendClassByTrend,\n statisticTrendSizeBySize,\n statisticValueClassByTone,\n statisticValueSizeBySize,\n statisticValueTypographyClass,\n} from './grStatisticStyles'\n\n// Классы из вычисляемых мап (size/tone/trend) UnoCSS сканом не находит — только safelist.\nexport const grStatisticSafelist = [...new Set([\n ...Object.values(statisticTitleSizeBySize).flatMap(splitClassTokens),\n ...Object.values(statisticValueSizeBySize).flatMap(splitClassTokens),\n ...Object.values(statisticAffixSizeBySize).flatMap(splitClassTokens),\n ...Object.values(statisticTrendSizeBySize).flatMap(splitClassTokens),\n ...Object.values(statisticValueClassByTone).flatMap(splitClassTokens),\n ...Object.values(statisticTrendClassByTrend).flatMap(splitClassTokens),\n // Иконки динамики приходят из мапы — как классы-маски их тоже надо сгенерировать.\n // Литералы из grStatisticStyles.ts (корень, подпись, типографика значения).\n ...splitClassTokens(statisticRootBase),\n ...splitClassTokens(statisticRootInteractiveClass),\n ...splitClassTokens(statisticTitleClass),\n ...splitClassTokens(statisticValueTypographyClass),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grStatisticSafelist } from './safelist'\n\nexport const grStatisticConfig = defineGranularComponent(import.meta.url, {\n name: 'GrStatistic',\n safelist: grStatisticSafelist,\n dependencies: ['GrSkeleton'],\n})\n"],"mappings":";;;;;;;;;AAgBA,IAAa,2BAA4D;CACvE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,2BAA4D;CACvE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,2BAA4D;CACvE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAIA,IAAa,mCAAoE;CAC/E,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,2BAA4D;CACvE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAQA,IAAa,4BAA6D;CACxE,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAGA,IAAa,6BAA+D;CAC1E,IAAI;CACJ,MAAM;CACN,MAAM;AACR;AAEA,IAAa,sBAAsB;AAEnC,IAAa,oBAAoB;;;;;;AAOjC,IAAa,gCAAgC;AAE7C,SAAgB,mBAAmB,SAA2C;CAC5E,OAAO,CACL,mBACA,QAAQ,cAAc,gCAAgC,EACxD,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AAC5B;;AAGA,IAAa,gCAAgC;AAE7C,SAAgB,oBAAoB,SAAmE;CACrG,OAAO;EACL;EACA,yBAAyB,QAAQ;EACjC,0BAA0B,QAAQ;CACpC,CAAC,CAAC,KAAK,GAAG;AACZ;;;ACzFA,IAAa,sBAAsB,CAAC,mBAAG,IAAI,IAAI;CAC7C,GAAG,OAAO,OAAO,wBAAwB,CAAC,CAAC,QAAQ,gBAAgB;CACnE,GAAG,OAAO,OAAO,wBAAwB,CAAC,CAAC,QAAQ,gBAAgB;CACnE,GAAG,OAAO,OAAO,wBAAwB,CAAC,CAAC,QAAQ,gBAAgB;CACnE,GAAG,OAAO,OAAO,wBAAwB,CAAC,CAAC,QAAQ,gBAAgB;CACnE,GAAG,OAAO,OAAO,yBAAyB,CAAC,CAAC,QAAQ,gBAAgB;CACpE,GAAG,OAAO,OAAO,0BAA0B,CAAC,CAAC,QAAQ,gBAAgB;CAGrE,GAAG,iBAAiB,iBAAiB;CACrC,GAAG,iBAAiB,6BAA6B;CACjD,GAAG,iBAAiB,mBAAmB;CACvC,GAAG,iBAAiB,6BAA6B;AACnD,CAAC,CAAC;;;ACxBF,IAAa,oBAAoB,wBAAwB,OAAO,KAAK,KAAK;CACxE,MAAM;CACN,UAAU;CACV,cAAc,CAAC,YAAY;AAC7B,CAAC"}
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-BoNR7_PD2.js","names":[],"sources":["../../src/components/GrSwitch/grSwitchStyles.ts","../../src/components/GrSwitch/safelist.ts","../../src/components/GrSwitch/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrSwitchSize = GrComponentSize\n\n/** Сторона подписи относительно дорожки — логическая, не физическая (RTL). */\nexport const GR_SWITCH_LABEL_POSITIONS = ['start', 'end'] as const\nexport type GrSwitchLabelPosition = typeof GR_SWITCH_LABEL_POSITIONS[number]\n\ntype GrSwitchThumbClassOptions = {\n checked: boolean\n size: GrSwitchSize\n}\n\nexport const rootBase = 'inline-flex items-center gap-2 select-none disabled:cursor-not-allowed'\n\n/** `start` разворачивает ряд, а не меняет порядок узлов: DOM-порядок читает диктор. */\nexport const rootLabelPositions: Record<GrSwitchLabelPosition, string> = {\n start: 'flex-row-reverse',\n end: '',\n}\n\nexport const trackBase =\n 'relative inline-flex shrink-0 items-center rounded-[var(--gr-radius-full)] border border-[var(--gr-switch-track-brd)] transition-colors duration-[var(--gr-duration-fast)]'\n\nexport const trackSizes: Record<GrSwitchSize, string> = {\n xs: 'h-4 w-7',\n sm: 'h-5 w-9',\n md: 'h-6 w-11',\n lg: 'h-7 w-14',\n}\n\nexport const thumbBase =\n 'inline-flex shrink-0 items-center justify-center rounded-[var(--gr-radius-full)] bg-[var(--gr-card)] shadow-[var(--gr-shadow-1)] transition-transform duration-[var(--gr-duration-fast)]'\n\nexport const thumbSizes: Record<GrSwitchSize, string> = {\n xs: 'h-3 w-3',\n sm: 'h-4 w-4',\n md: 'h-5 w-5',\n lg: 'h-6 w-6',\n}\n\n/** Спиннер загрузки живёт в бегунке, поэтому мельче его на ступень. */\nexport const thumbSpinnerSizes: Record<GrSwitchSize, string> = {\n xs: 'h-2 w-2',\n sm: 'h-2.5 w-2.5',\n md: 'h-3 w-3',\n lg: 'h-4 w-4',\n}\n\nexport const thumbSpinnerBase = 'animate-spin text-[var(--gr-muted-fg)]'\n\n/**\n * Сдвиг бегунка по горизонтали.\n *\n * Бегунок — обычный флекс-ребёнок дорожки, поэтому сдвиг отсчитывается от её\n * **content-box**, а он на 2px уже внешнего размера: рамка по 1px с каждой\n * стороны. Отсюда и весь расчёт.\n *\n * Зазор по вертикали задан геометрией и равен 1px на всех ступенях\n * (`(content-height − thumb) / 2`, дорожка центрирует бегунок сама). Значит и по\n * горизонтали он обязан быть 1px: иначе бегунок в покое выглядит вдавленным\n * внутрь, а в крайнем положении прижатым к краю — именно так и было, зазоры\n * расходились на 1–2px у `xs`, `sm` и `lg`.\n *\n * | ступень | дорожка | content | бегунок | покой | крайнее |\n * | --- | --- | --- | --- | --- | --- |\n * | `xs` | 28 | 26 | 12 | 1 | 13 |\n * | `sm` | 36 | 34 | 16 | 1 | 17 |\n * | `md` | 44 | 42 | 20 | 1 | 21 |\n * | `lg` | 56 | 54 | 24 | 1 | 29 |\n *\n * Крайнее положение — `content − thumb − зазор`. Гейт на эту арифметику живёт в\n * `__tests__/GrSwitch.test.ts`: он считает её заново из `trackSizes`/`thumbSizes`,\n * поэтому смена любой ступени размера сразу покажет разъехавшийся зазор.\n */\nexport const thumbTranslations: Record<GrSwitchSize, { checked: string, unchecked: string }> = {\n xs: {\n checked: 'translate-x-[13px]',\n unchecked: 'translate-x-[1px]',\n },\n sm: {\n checked: 'translate-x-[17px]',\n unchecked: 'translate-x-[1px]',\n },\n md: {\n checked: 'translate-x-[21px]',\n unchecked: 'translate-x-[1px]',\n },\n lg: {\n checked: 'translate-x-[29px]',\n unchecked: 'translate-x-[1px]',\n },\n}\n\nexport const labelBase = 'text-[var(--gr-muted-fg)]'\n\n/**\n * Недоступность гасится токеном, а не `opacity`: прозрачность разбавляет\n * выверенные на AA токены текста и роняет контраст подписи.\n */\nexport const labelDisabledClass = 'text-[var(--gr-disabled-fg)]'\n\nexport const labelSizes: Record<GrSwitchSize, string> = {\n xs: 'text-[length:var(--gr-text-xs)] leading-[var(--gr-leading-xs)]',\n sm: 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n md: 'text-[length:var(--gr-text-sm)] leading-[var(--gr-leading-sm)]',\n lg: 'text-[length:var(--gr-text-base)] leading-[var(--gr-leading-base)]',\n}\n\nexport function grSwitchRootClass(labelPosition: GrSwitchLabelPosition): string {\n return [rootBase, rootLabelPositions[labelPosition]].filter(Boolean).join(' ')\n}\n\nexport function grSwitchTrackClass(size: GrSwitchSize): string {\n return [trackBase, trackSizes[size]].join(' ')\n}\n\nexport function grSwitchThumbClass(options: GrSwitchThumbClassOptions): string {\n return [\n thumbBase,\n thumbSizes[options.size],\n thumbTranslations[options.size][options.checked ? 'checked' : 'unchecked'],\n ].join(' ')\n}\n\nexport function grSwitchSpinnerClass(size: GrSwitchSize): string {\n return [thumbSpinnerBase, thumbSpinnerSizes[size]].join(' ')\n}\n\nexport function grSwitchLabelClass(size: GrSwitchSize, disabled = false): string {\n return [disabled ? labelDisabledClass : labelBase, labelSizes[size]].join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n labelBase,\n labelDisabledClass,\n labelSizes,\n rootBase,\n rootLabelPositions,\n thumbBase,\n thumbSizes,\n thumbSpinnerBase,\n thumbSpinnerSizes,\n thumbTranslations,\n trackBase,\n trackSizes,\n} from './grSwitchStyles'\n\nexport const grSwitchClassTokens = {\n rootBase: splitClassTokens(rootBase),\n rootLabelPositions: Object.values(rootLabelPositions).flatMap(splitClassTokens),\n trackBase: splitClassTokens(trackBase),\n trackSizes: Object.values(trackSizes).flatMap(splitClassTokens),\n thumbBase: splitClassTokens(thumbBase),\n thumbSizes: Object.values(thumbSizes).flatMap(splitClassTokens),\n thumbSpinner: [\n ...splitClassTokens(thumbSpinnerBase),\n ...Object.values(thumbSpinnerSizes).flatMap(splitClassTokens),\n ],\n thumbTranslations: Object.values(thumbTranslations).flatMap(({checked, unchecked}) => {\n return [...splitClassTokens(checked), ...splitClassTokens(unchecked)]\n }),\n labelBase: [...splitClassTokens(labelBase), ...splitClassTokens(labelDisabledClass)],\n labelSizes: Object.values(labelSizes).flatMap(splitClassTokens),\n} as const\n\nexport const grSwitchSafelist = [...new Set([\n ...grSwitchClassTokens.rootBase,\n ...grSwitchClassTokens.rootLabelPositions,\n ...grSwitchClassTokens.trackBase,\n ...grSwitchClassTokens.trackSizes,\n ...grSwitchClassTokens.thumbBase,\n ...grSwitchClassTokens.thumbSizes,\n ...grSwitchClassTokens.thumbSpinner,\n ...grSwitchClassTokens.thumbTranslations,\n ...grSwitchClassTokens.labelBase,\n ...grSwitchClassTokens.labelSizes,\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grSwitchSafelist } from './safelist'\n\nexport const grSwitchConfig = defineGranularComponent(import.meta.url, {\n name: 'GrSwitch',\n safelist: grSwitchSafelist,\n})"],"mappings":";;;AAaA,IAAa,WAAW;;AAGxB,IAAa,qBAA4D;CACrE,OAAO;CACP,KAAK;AACT;AAEA,IAAa,YACT;AAEJ,IAAa,aAA2C;CACpD,IAAI;CACN,IAAI;CACF,IAAI;CACJ,IAAI;AACR;AAEA,IAAa,YACT;AAEJ,IAAa,aAA2C;CACpD,IAAI;CACN,IAAI;CACF,IAAI;CACJ,IAAI;AACR;;AAGA,IAAa,oBAAkD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACR;AAEA,IAAa,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;AA0BhC,IAAa,oBAAkF;CAC3F,IAAI;EACA,SAAS;EACT,WAAW;CACf;CACA,IAAI;EACA,SAAS;EACT,WAAW;CACf;CACA,IAAI;EACA,SAAS;EACT,WAAW;CACf;CACA,IAAI;EACA,SAAS;EACT,WAAW;CACf;AACJ;AAEA,IAAa,YAAY;;;;;AAMzB,IAAa,qBAAqB;AAElC,IAAa,aAA2C;CACpD,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACR;AAEA,SAAgB,kBAAkB,eAA8C;CAC5E,OAAO,CAAC,UAAU,mBAAmB,cAAc,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AACjF;AAEA,SAAgB,mBAAmB,MAA4B;CAC3D,OAAO,CAAC,WAAW,WAAW,KAAK,CAAC,CAAC,KAAK,GAAG;AACjD;AAEA,SAAgB,mBAAmB,SAA4C;CAC3E,OAAO;EACH;EACA,WAAW,QAAQ;EACnB,kBAAkB,QAAQ,KAAK,CAAC,QAAQ,UAAU,YAAY;CAClE,CAAC,CAAC,KAAK,GAAG;AACd;AAEA,SAAgB,qBAAqB,MAA4B;CAC7D,OAAO,CAAC,kBAAkB,kBAAkB,KAAK,CAAC,CAAC,KAAK,GAAG;AAC/D;AAEA,SAAgB,mBAAmB,MAAoB,WAAW,OAAe;CAC7E,OAAO,CAAC,WAAW,qBAAqB,WAAW,WAAW,KAAK,CAAC,CAAC,KAAK,GAAG;AACjF;;;ACnHA,IAAa,sBAAsB;CACjC,UAAU,iBAAiB,QAAQ;CACnC,oBAAoB,OAAO,OAAO,kBAAkB,CAAC,CAAC,QAAQ,gBAAgB;CAC9E,WAAW,iBAAiB,SAAS;CACrC,YAAY,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,WAAW,iBAAiB,SAAS;CACrC,YAAY,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;CAC9D,cAAc,CACZ,GAAG,iBAAiB,gBAAgB,GACpC,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB,CAC9D;CACA,mBAAmB,OAAO,OAAO,iBAAiB,CAAC,CAAC,SAAS,EAAC,SAAS,gBAAe;EACpF,OAAO,CAAC,GAAG,iBAAiB,OAAO,GAAG,GAAG,iBAAiB,SAAS,CAAC;CACtE,CAAC;CACD,WAAW,CAAC,GAAG,iBAAiB,SAAS,GAAG,GAAG,iBAAiB,kBAAkB,CAAC;CACnF,YAAY,OAAO,OAAO,UAAU,CAAC,CAAC,QAAQ,gBAAgB;AAChE;AAEA,IAAa,mBAAmB,CAAC,mBAAG,IAAI,IAAI;CAC1C,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;CACvB,GAAG,oBAAoB;AACzB,CAAC,CAAC;;;ACzCF,IAAa,iBAAiB,wBAAwB,OAAO,KAAK,KAAK;CACrE,MAAM;CACN,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
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"}
@@ -1,58 +0,0 @@
1
- import { t as splitClassTokens } from "./classTokens-BzazaERD.js";
2
- import { defineGranularComponent } from "@feugene/unocss-preset-granular/contract";
3
- //#region src/components/GrDescriptionList/grDescriptionListStyles.ts
4
- var descriptionRootClass = "m-0 grid gap-x-4 [row-gap:var(--gr-description-list-row-gap,0.375rem)]";
5
- var descriptionColumnsClass = {
6
- 1: "grid-cols-1",
7
- 2: "grid-cols-1 sm:grid-cols-2"
8
- };
9
- var descriptionPairInlineClass = "flex min-w-0 items-baseline gap-2";
10
- var descriptionPairStackedClass = "min-w-0";
11
- var descriptionDividedClass = "border-b border-[var(--gr-description-list-divider,var(--gr-brd))] pb-1 last:border-b-0 last:pb-0";
12
- var descriptionLabelInlineClass = "shrink-0 text-[var(--gr-description-list-label-color,var(--gr-muted-fg))]";
13
- var descriptionLabelStackedClass = "text-[var(--gr-description-list-label-color,var(--gr-muted-fg))]";
14
- var descriptionValueClass = "m-0 min-w-0 break-words";
15
- /** Тон — только у значения: красная подпись читается как «поле сломано». */
16
- var descriptionValueToneClass = {
17
- primary: "text-[var(--gr-primary-text)]",
18
- neutral: "",
19
- success: "text-[var(--gr-success-text)]",
20
- warning: "text-[var(--gr-warning-text)]",
21
- danger: "text-[var(--gr-danger-text)]",
22
- info: "text-[var(--gr-info-text)]",
23
- slate: "text-[var(--gr-slate-text)]",
24
- azure: "text-[var(--gr-azure-text)]"
25
- };
26
- var descriptionSizeClass = {
27
- xs: "text-[length:var(--gr-control-text-2xs)]",
28
- sm: "text-[length:var(--gr-control-text-xs)]",
29
- md: "text-[length:var(--gr-control-text-sm)]",
30
- lg: "text-[length:var(--gr-control-text-md)]"
31
- };
32
- var descriptionDensityClass = {
33
- regular: "",
34
- compact: "[row-gap:var(--gr-description-list-row-gap,0.125rem)]"
35
- };
36
- //#endregion
37
- //#region src/components/GrDescriptionList/safelist.ts
38
- var grDescriptionListSafelist = [.../* @__PURE__ */ new Set([
39
- ...splitClassTokens(descriptionRootClass),
40
- ...splitClassTokens(descriptionPairInlineClass),
41
- ...splitClassTokens(descriptionPairStackedClass),
42
- ...splitClassTokens(descriptionDividedClass),
43
- ...splitClassTokens(descriptionLabelInlineClass),
44
- ...splitClassTokens(descriptionLabelStackedClass),
45
- ...splitClassTokens(descriptionValueClass),
46
- ...Object.values(descriptionColumnsClass).flatMap(splitClassTokens),
47
- ...Object.values(descriptionValueToneClass).flatMap(splitClassTokens),
48
- ...Object.values(descriptionSizeClass).flatMap(splitClassTokens),
49
- ...Object.values(descriptionDensityClass).flatMap(splitClassTokens)
50
- ])];
51
- //#endregion
52
- //#region src/components/GrDescriptionList/config.ts
53
- var grDescriptionListConfig = defineGranularComponent(import.meta.url, {
54
- name: "GrDescriptionList",
55
- safelist: grDescriptionListSafelist
56
- });
57
- //#endregion
58
- export { descriptionDividedClass as a, descriptionPairInlineClass as c, descriptionSizeClass as d, descriptionValueClass as f, descriptionDensityClass as i, descriptionPairStackedClass as l, grDescriptionListSafelist as n, descriptionLabelInlineClass as o, descriptionValueToneClass as p, descriptionColumnsClass as r, descriptionLabelStackedClass as s, grDescriptionListConfig as t, descriptionRootClass as u };
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-jyZq8XKL.js","names":[],"sources":["../../src/components/GrDescriptionList/grDescriptionListStyles.ts","../../src/components/GrDescriptionList/safelist.ts","../../src/components/GrDescriptionList/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\nimport type { GrTone } from '../shared/tones'\n\n/**\n * Классы `GrDescriptionList`.\n *\n * Тон перечислен целиком по одному литералу на ветку: UnoCSS сканирует исходный\n * текст файла, и собранное шаблонной строкой имя уехало бы в CSS литералом.\n */\n\n/** `inline` — подпись колонкой слева; `stacked` — над значением. */\nexport type GrDescriptionLayout = 'inline' | 'stacked'\n\nexport type GrDescriptionDensity = 'regular' | 'compact'\n\n/** Сколько колонок пар. Длинный список читается в две. */\nexport type GrDescriptionColumns = 1 | 2\n\n// `m-0` — у нативного `<dl>` есть браузерные отступы, и без сброса список\n// разъезжается по вертикали. Ряды разводит `--gr-description-list-row-gap`,\n// потому что зазор здесь — точка кастомизации, а не ступень шкалы.\nexport const descriptionRootClass = 'm-0 grid gap-x-4 [row-gap:var(--gr-description-list-row-gap,0.375rem)]'\n\nexport const descriptionColumnsClass: Record<GrDescriptionColumns, string> = {\n 1: 'grid-cols-1',\n // Пара — элемент сетки, поэтому между колонками она не рвётся. `column-count`\n // рвал бы: он раскладывает поток, а не блоки.\n 2: 'grid-cols-1 sm:grid-cols-2',\n}\n\nexport const descriptionPairInlineClass = 'flex min-w-0 items-baseline gap-2'\nexport const descriptionPairStackedClass = 'min-w-0'\n\nexport const descriptionDividedClass = 'border-b border-[var(--gr-description-list-divider,var(--gr-brd))] pb-1 last:border-b-0 last:pb-0'\n\n// `shrink-0` держит колонку подписей ровной: иначе длинное значение сжимало бы\n// подпись, и значения переставали бы стоять в колонку — ровно то, ради чего\n// раскладка `inline` и существует.\nexport const descriptionLabelInlineClass = 'shrink-0 text-[var(--gr-description-list-label-color,var(--gr-muted-fg))]'\nexport const descriptionLabelStackedClass = 'text-[var(--gr-description-list-label-color,var(--gr-muted-fg))]'\n\n// `break-words` обязателен: в парах живут идентификаторы, хеши и `X-Request-Id`,\n// и без переноса они выталкивают вёрстку.\nexport const descriptionValueClass = 'm-0 min-w-0 break-words'\n\n/** Тон — только у значения: красная подпись читается как «поле сломано». */\nexport const descriptionValueToneClass: Record<GrTone, string> = {\n primary: 'text-[var(--gr-primary-text)]',\n neutral: '',\n success: 'text-[var(--gr-success-text)]',\n warning: 'text-[var(--gr-warning-text)]',\n danger: 'text-[var(--gr-danger-text)]',\n info: 'text-[var(--gr-info-text)]',\n slate: 'text-[var(--gr-slate-text)]',\n azure: 'text-[var(--gr-azure-text)]',\n}\n\nexport const descriptionSizeClass: Record<GrComponentSize, string> = {\n xs: 'text-[length:var(--gr-control-text-2xs)]',\n sm: 'text-[length:var(--gr-control-text-xs)]',\n md: 'text-[length:var(--gr-control-text-sm)]',\n lg: 'text-[length:var(--gr-control-text-md)]',\n}\n\nexport const descriptionDensityClass: Record<GrDescriptionDensity, string> = {\n regular: '',\n compact: '[row-gap:var(--gr-description-list-row-gap,0.125rem)]',\n}\n","import { splitClassTokens } from '../shared/classTokens'\n\nimport {\n descriptionColumnsClass,\n descriptionDensityClass,\n descriptionDividedClass,\n descriptionLabelInlineClass,\n descriptionLabelStackedClass,\n descriptionPairInlineClass,\n descriptionPairStackedClass,\n descriptionRootClass,\n descriptionSizeClass,\n descriptionValueClass,\n descriptionValueToneClass,\n} from './grDescriptionListStyles'\n\n// Классы из вычисляемых мап (тон, размер, колонки) UnoCSS сканом не находит —\n// только safelist. Литералы хелпера туда же: на сборке он уезжает в общий чанк.\nexport const grDescriptionListSafelist = [...new Set([\n ...splitClassTokens(descriptionRootClass),\n ...splitClassTokens(descriptionPairInlineClass),\n ...splitClassTokens(descriptionPairStackedClass),\n ...splitClassTokens(descriptionDividedClass),\n ...splitClassTokens(descriptionLabelInlineClass),\n ...splitClassTokens(descriptionLabelStackedClass),\n ...splitClassTokens(descriptionValueClass),\n ...Object.values(descriptionColumnsClass).flatMap(splitClassTokens),\n ...Object.values(descriptionValueToneClass).flatMap(splitClassTokens),\n ...Object.values(descriptionSizeClass).flatMap(splitClassTokens),\n ...Object.values(descriptionDensityClass).flatMap(splitClassTokens),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDescriptionListSafelist } from './safelist'\n\nexport const grDescriptionListConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDescriptionList',\n safelist: grDescriptionListSafelist,\n})\n"],"mappings":";;;AAqBA,IAAa,uBAAuB;AAEpC,IAAa,0BAAgE;CAC3E,GAAG;CAGH,GAAG;AACL;AAEA,IAAa,6BAA6B;AAC1C,IAAa,8BAA8B;AAE3C,IAAa,0BAA0B;AAKvC,IAAa,8BAA8B;AAC3C,IAAa,+BAA+B;AAI5C,IAAa,wBAAwB;;AAGrC,IAAa,4BAAoD;CAC/D,SAAS;CACT,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;AACT;AAEA,IAAa,uBAAwD;CACnE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,0BAAgE;CAC3E,SAAS;CACT,SAAS;AACX;;;ACjDA,IAAa,4BAA4B,CAAC,mBAAG,IAAI,IAAI;CACnD,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,0BAA0B;CAC9C,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,uBAAuB;CAC3C,GAAG,iBAAiB,2BAA2B;CAC/C,GAAG,iBAAiB,4BAA4B;CAChD,GAAG,iBAAiB,qBAAqB;CACzC,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;CAClE,GAAG,OAAO,OAAO,yBAAyB,CAAC,CAAC,QAAQ,gBAAgB;CACpE,GAAG,OAAO,OAAO,oBAAoB,CAAC,CAAC,QAAQ,gBAAgB;CAC/D,GAAG,OAAO,OAAO,uBAAuB,CAAC,CAAC,QAAQ,gBAAgB;AACpE,CAAC,CAAC;;;AC1BF,IAAa,0BAA0B,wBAAwB,OAAO,KAAK,KAAK;CAC9E,MAAM;CACN,UAAU;AACZ,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-vSji8w90.js","names":[],"sources":["../../src/components/GrEmptyState/grEmptyStateStyles.ts","../../src/components/GrEmptyState/safelist.ts","../../src/components/GrEmptyState/config.ts"],"sourcesContent":["import type { GrComponentSize } from '../shared/sizes'\n\nexport type GrEmptyStateSize = GrComponentSize\n\n/** Поверхность карточки. `ghost` — для встраивания в уже существующую карточку. */\nexport const GR_EMPTY_STATE_VARIANTS = ['outlined', 'ghost'] as const\nexport type GrEmptyStateVariant = typeof GR_EMPTY_STATE_VARIANTS[number]\n\n/**\n * Уровень заголовка. `h1` намеренно нет: пустое состояние живёт внутри уже\n * существующей структуры страницы, а не задаёт её.\n */\nexport const GR_EMPTY_STATE_HEADING_LEVELS = [2, 3, 4, 5, 6] as const\nexport type GrEmptyStateHeadingLevel = typeof GR_EMPTY_STATE_HEADING_LEVELS[number]\n\nexport const rootBaseClass = 'text-center'\n\nexport const variantClass: Record<GrEmptyStateVariant, string> = {\n outlined: 'rounded-[var(--gr-radius-lg)] border border-[var(--gr-brd)] bg-[var(--gr-card)]',\n // Карточка внутри карточки: вторая рамка только шумит (тот же смысл, что у `GrCard`).\n ghost: '',\n}\n\nexport const rootPaddingBySize: Record<GrEmptyStateSize, string> = {\n xs: 'p-3',\n sm: 'p-4',\n md: 'p-6',\n lg: 'p-8',\n}\n\nexport const iconBoxBaseClass = 'flex items-center justify-center border border-[var(--gr-brd)] bg-[var(--gr-muted)] text-[var(--gr-muted-fg)]'\n\nexport const iconBoxBySize: Record<GrEmptyStateSize, string> = {\n xs: 'h-8 w-8 rounded-[var(--gr-radius-md)]',\n sm: 'h-10 w-10 rounded-[var(--gr-radius-md)]',\n md: 'h-12 w-12 rounded-[var(--gr-radius-lg)]',\n lg: 'h-14 w-14 rounded-[var(--gr-radius-lg)]',\n}\n\n/** Размер самой иконки в пикселях — `GrIcon` принимает число. */\nexport const iconSizeBySize: Record<GrEmptyStateSize, number> = {\n xs: 16,\n sm: 20,\n md: 24,\n lg: 28,\n}\n\n/**\n * `mb-0` гасит браузерный отступ снизу у настоящего заголовка: без сброса\n * карточка разъезжается по вертикали.\n */\nexport const titleBaseClass = 'mb-0 font-700'\n\nexport const titleBySize: Record<GrEmptyStateSize, string> = {\n xs: 'mt-2 text-[length:var(--gr-text-xs)]',\n sm: 'mt-3 text-[length:var(--gr-text-sm)]',\n md: 'mt-4 text-[length:var(--gr-text-sm)]',\n lg: 'mt-5 text-[length:var(--gr-text-base)]',\n}\n\nexport const descriptionBaseClass = 'text-[var(--gr-muted-fg)]'\n\nexport const descriptionBySize: Record<GrEmptyStateSize, string> = {\n xs: 'mt-0.5 text-[length:var(--gr-text-xs)]',\n sm: 'mt-1 text-[length:var(--gr-text-xs)]',\n md: 'mt-1 text-[length:var(--gr-text-sm)]',\n lg: 'mt-2 text-[length:var(--gr-text-sm)]',\n}\n\nexport const actionsBaseClass = 'flex justify-center'\n\nexport const actionsBySize: Record<GrEmptyStateSize, string> = {\n xs: 'mt-2',\n sm: 'mt-3',\n md: 'mt-4',\n lg: 'mt-5',\n}\n\nexport function grEmptyStateRootClass(options: {\n variant: GrEmptyStateVariant\n size: GrEmptyStateSize\n}): string {\n return [rootBaseClass, variantClass[options.variant], rootPaddingBySize[options.size]]\n .filter(Boolean)\n .join(' ')\n}\n","import { splitClassTokens } from '../shared/classTokens'\nimport {\n actionsBaseClass,\n actionsBySize,\n descriptionBaseClass,\n descriptionBySize,\n iconBoxBaseClass,\n iconBoxBySize,\n rootBaseClass,\n rootPaddingBySize,\n titleBaseClass,\n titleBySize,\n variantClass,\n} from './grEmptyStateStyles'\n\nexport const grEmptyStateSafelist = [...new Set([\n ...splitClassTokens(rootBaseClass),\n ...splitClassTokens(iconBoxBaseClass),\n ...splitClassTokens(titleBaseClass),\n ...splitClassTokens(descriptionBaseClass),\n ...splitClassTokens(actionsBaseClass),\n ...Object.values(variantClass).flatMap(splitClassTokens),\n ...Object.values(rootPaddingBySize).flatMap(splitClassTokens),\n ...Object.values(iconBoxBySize).flatMap(splitClassTokens),\n ...Object.values(titleBySize).flatMap(splitClassTokens),\n ...Object.values(descriptionBySize).flatMap(splitClassTokens),\n ...Object.values(actionsBySize).flatMap(splitClassTokens),\n // Центрирование блока иконки живёт литералом в шаблоне.\n ...splitClassTokens('flex justify-center'),\n])]\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grEmptyStateSafelist } from './safelist'\n\nexport const grEmptyStateConfig = defineGranularComponent(import.meta.url, {\n name: 'GrEmptyState',\n safelist: grEmptyStateSafelist,\n dependencies: ['GrIcon'],\n})\n"],"mappings":";;;AAeA,IAAa,gBAAgB;AAE7B,IAAa,eAAoD;CAC/D,UAAU;CAEV,OAAO;AACT;AAEA,IAAa,oBAAsD;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,mBAAmB;AAEhC,IAAa,gBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;AAGA,IAAa,iBAAmD;CAC9D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;AAMA,IAAa,iBAAiB;AAE9B,IAAa,cAAgD;CAC3D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,uBAAuB;AAEpC,IAAa,oBAAsD;CACjE,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAa,mBAAmB;AAEhC,IAAa,gBAAkD;CAC7D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,SAAgB,sBAAsB,SAG3B;CACT,OAAO;EAAC;EAAe,aAAa,QAAQ;EAAU,kBAAkB,QAAQ;CAAK,CAAC,CACnF,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;AACb;;;ACtEA,IAAa,uBAAuB,CAAC,mBAAG,IAAI,IAAI;CAC9C,GAAG,iBAAiB,aAAa;CACjC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,iBAAiB,cAAc;CAClC,GAAG,iBAAiB,oBAAoB;CACxC,GAAG,iBAAiB,gBAAgB;CACpC,GAAG,OAAO,OAAO,YAAY,CAAC,CAAC,QAAQ,gBAAgB;CACvD,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CACxD,GAAG,OAAO,OAAO,WAAW,CAAC,CAAC,QAAQ,gBAAgB;CACtD,GAAG,OAAO,OAAO,iBAAiB,CAAC,CAAC,QAAQ,gBAAgB;CAC5D,GAAG,OAAO,OAAO,aAAa,CAAC,CAAC,QAAQ,gBAAgB;CAExD,GAAG,iBAAiB,qBAAqB;AAC3C,CAAC,CAAC;;;ACzBF,IAAa,qBAAqB,wBAAwB,OAAO,KAAK,KAAK;CACzE,MAAM;CACN,UAAU;CACV,cAAc,CAAC,QAAQ;AACzB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"granular-provider-CYroWMjO.js","names":[],"sources":["../../src/components/GrDialog/config.ts","../../src/components/GrResponseErrorBanner/config.ts","../../src/granular-provider/shared.ts","../../src/granular-provider/index.ts"],"sourcesContent":["import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nimport { grDialogSafelist } from './safelist'\n\nexport const grDialogConfig = defineGranularComponent(import.meta.url, {\n name: 'GrDialog',\n dependencies: ['GrButton', 'GrModal'],\n safelist: grDialogSafelist,\n})\n","import { defineGranularComponent } from '@feugene/unocss-preset-granular/contract'\n\nexport const grResponseErrorBannerConfig = defineGranularComponent(import.meta.url, {\n name: 'GrResponseErrorBanner',\n dependencies: ['GrAlert', 'GrButton'],\n})\n","// `id`, `theme.*`, `packageBaseUrl` и реестр компонентов провайдера.\n//\n// Все `new URL('../styles/...', import.meta.url)` обязаны лежать именно здесь:\n// `shared.ts` в одной директории с `index.ts` / `node.ts`, поэтому\n// относительные пути совпадают. Для браузера безопасно — бандлеры\n// транслируют такие литералы в статические asset-URL.\n//\n// `apps/showcase/scripts/generate-component-api.mjs` читает список компонентов\n// из `Object.keys(granularityComponentConfigs)` через vite SSR.\nimport {\n defineGranularProvider,\n type GranularComponentDescriptor,\n type GranularProvider,\n resolvePackageBaseUrl,\n} from '@feugene/unocss-preset-granular/contract'\n// <granularity:components:imports> — блок генерируется `yarn generate:registry`\nimport { grAlertConfig } from '../components/GrAlert/config'\nimport { grAutocompleteConfig } from '../components/GrAutocomplete/config'\nimport { grAvatarConfig } from '../components/GrAvatar/config'\nimport { grBadgeConfig } from '../components/GrBadge/config'\nimport { grBadgeWrapConfig } from '../components/GrBadgeWrap/config'\nimport { grBottomNavConfig } from '../components/GrBottomNav/config'\nimport { grBreadcrumbsConfig } from '../components/GrBreadcrumbs/config'\nimport { grButtonConfig } from '../components/GrButton/config'\nimport { grButtonGroupConfig } from '../components/GrButtonGroup/config'\nimport { grCardConfig } from '../components/GrCard/config'\nimport { grCheckboxConfig } from '../components/GrCheckbox/config'\nimport { grCheckboxGroupConfig } from '../components/GrCheckboxGroup/config'\nimport { grCodeBlockConfig } from '../components/GrCodeBlock/config'\nimport { grCollapseConfig } from '../components/GrCollapse/config'\nimport { grColorPickerConfig } from '../components/GrColorPicker/config'\nimport { grCommandPaletteConfig } from '../components/GrCommandPalette/config'\nimport { grConfigProviderConfig } from '../components/GrConfigProvider/config'\nimport { grConfirmDialogConfig } from '../components/GrConfirmDialog/config'\nimport { grDataTableConfig } from '../components/GrDataTable/config'\nimport { grDeltaConfig } from '../components/GrDelta/config'\nimport { grDescriptionListConfig } from '../components/GrDescriptionList/config'\nimport { grDialogConfig } from '../components/GrDialog/config'\nimport { grDialogServiceConfig } from '../components/GrDialogService/config'\nimport { grDividerConfig } from '../components/GrDivider/config'\nimport { grDrawerConfig } from '../components/GrDrawer/config'\nimport { grDropdownConfig } from '../components/GrDropdown/config'\nimport { grDropdownMenuConfig } from '../components/GrDropdownMenu/config'\nimport { grEmptyStateConfig } from '../components/GrEmptyState/config'\nimport { grFilePreviewConfig } from '../components/GrFilePreview/config'\nimport { grFileUploadConfig } from '../components/GrFileUpload/config'\nimport { grFormConfig } from '../components/GrForm/config'\nimport { grFormFieldConfig } from '../components/GrFormField/config'\nimport { grFormFileConfig } from '../components/GrFormFile/config'\nimport { grFormSectionConfig } from '../components/GrFormSection/config'\nimport { grIconConfig } from '../components/GrIcon/config'\nimport { grImageViewerConfig } from '../components/GrImageViewer/config'\nimport { grInputConfig } from '../components/GrInput/config'\nimport { grInputTagConfig } from '../components/GrInputTag/config'\nimport { grJsonViewerConfig } from '../components/GrJsonViewer/config'\nimport { grKbdConfig } from '../components/GrKbd/config'\nimport { grLinkConfig } from '../components/GrLink/config'\nimport { grListConfig } from '../components/GrList/config'\nimport { grLoadingConfig } from '../components/GrLoading/config'\nimport { grModalConfig } from '../components/GrModal/config'\nimport { grNavbarConfig } from '../components/GrNavbar/config'\nimport { grNumberInputConfig } from '../components/GrNumberInput/config'\nimport { grPaginationConfig } from '../components/GrPagination/config'\nimport { grPopoverConfig } from '../components/GrPopover/config'\nimport { grProgressBarConfig } from '../components/GrProgressBar/config'\nimport { grProgressCircleConfig } from '../components/GrProgressCircle/config'\nimport { grPromptDialogConfig } from '../components/GrPromptDialog/config'\nimport { grRadioConfig } from '../components/GrRadio/config'\nimport { grRadioGroupConfig } from '../components/GrRadioGroup/config'\nimport { grRatingConfig } from '../components/GrRating/config'\nimport { grResponseErrorBannerConfig } from '../components/GrResponseErrorBanner/config'\nimport { grSegmentedConfig } from '../components/GrSegmented/config'\nimport { grSelectConfig } from '../components/GrSelect/config'\nimport { grSidebarConfig } from '../components/GrSidebar/config'\nimport { grSkeletonConfig } from '../components/GrSkeleton/config'\nimport { grSliderConfig } from '../components/GrSlider/config'\nimport { grSortableListConfig } from '../components/GrSortableList/config'\nimport { grSplitterConfig } from '../components/GrSplitter/config'\nimport { grStatisticConfig } from '../components/GrStatistic/config'\nimport { grSwitchConfig } from '../components/GrSwitch/config'\nimport { grTableConfig } from '../components/GrTable/config'\nimport { grTabPanelsConfig } from '../components/GrTabPanels/config'\nimport { grTabsConfig } from '../components/GrTabs/config'\nimport { grTextareaConfig } from '../components/GrTextarea/config'\nimport { grTimelineConfig } from '../components/GrTimeline/config'\nimport { grToasterConfig } from '../components/GrToaster/config'\nimport { grTooltipConfig } from '../components/GrTooltip/config'\nimport { grTreeConfig } from '../components/GrTree/config'\nimport { grTreeSelectConfig } from '../components/GrTreeSelect/config'\n// </granularity:components:imports>\n\n/** Идентификатор провайдера — совпадает с именем пакета. */\nexport const GRANULARITY_PROVIDER_ID = '@feugene/granularity'\n\n// Не заменять на `new URL('..', import.meta.url)`: Vite и rolldown распознают\n// этот литерал и подставляют `data:`-URL, после чего scan-директории пустеют.\nconst packageBaseUrl = resolvePackageBaseUrl(import.meta.url)\n\n/** Встроенные темы пакета. Единственный источник правды о списке тем. */\nexport const granularityThemeNames = ['light', 'dark'] as const\nexport type GranularityThemeName = (typeof granularityThemeNames)[number]\n\n/** Темы, активные по умолчанию, если окружение не переопределяет выбор. */\nexport const granularityDefaultThemes: readonly GranularityThemeName[] = ['light']\n\nconst theme = {\n baseCssUrl: new URL('../styles/base.css', import.meta.url).href,\n tokensCssUrl: new URL('../styles/tokens.css', import.meta.url).href,\n themes: {\n light: new URL('../styles/themes/light.css', import.meta.url).href,\n dark: new URL('../styles/themes/dark.css', import.meta.url).href,\n },\n defaultThemes: granularityDefaultThemes,\n} as const\n\n/**\n * Реестр публичных компонентов. Ключи совпадают с subpath-экспортом\n * `@feugene/granularity/components/<Name>`.\n */\nexport const granularityComponentConfigs = {\n // <granularity:components:registry> — блок генерируется `yarn generate:registry`\n GrAlert: grAlertConfig,\n GrAutocomplete: grAutocompleteConfig,\n GrAvatar: grAvatarConfig,\n GrBadge: grBadgeConfig,\n GrBadgeWrap: grBadgeWrapConfig,\n GrBottomNav: grBottomNavConfig,\n GrBreadcrumbs: grBreadcrumbsConfig,\n GrButton: grButtonConfig,\n GrButtonGroup: grButtonGroupConfig,\n GrCard: grCardConfig,\n GrCheckbox: grCheckboxConfig,\n GrCheckboxGroup: grCheckboxGroupConfig,\n GrCodeBlock: grCodeBlockConfig,\n GrCollapse: grCollapseConfig,\n GrColorPicker: grColorPickerConfig,\n GrCommandPalette: grCommandPaletteConfig,\n GrConfigProvider: grConfigProviderConfig,\n GrConfirmDialog: grConfirmDialogConfig,\n GrDataTable: grDataTableConfig,\n GrDelta: grDeltaConfig,\n GrDescriptionList: grDescriptionListConfig,\n GrDialog: grDialogConfig,\n GrDialogService: grDialogServiceConfig,\n GrDivider: grDividerConfig,\n GrDrawer: grDrawerConfig,\n GrDropdown: grDropdownConfig,\n GrDropdownMenu: grDropdownMenuConfig,\n GrEmptyState: grEmptyStateConfig,\n GrFilePreview: grFilePreviewConfig,\n GrFileUpload: grFileUploadConfig,\n GrForm: grFormConfig,\n GrFormField: grFormFieldConfig,\n GrFormFile: grFormFileConfig,\n GrFormSection: grFormSectionConfig,\n GrIcon: grIconConfig,\n GrImageViewer: grImageViewerConfig,\n GrInput: grInputConfig,\n GrInputTag: grInputTagConfig,\n GrJsonViewer: grJsonViewerConfig,\n GrKbd: grKbdConfig,\n GrLink: grLinkConfig,\n GrList: grListConfig,\n GrLoading: grLoadingConfig,\n GrModal: grModalConfig,\n GrNavbar: grNavbarConfig,\n GrNumberInput: grNumberInputConfig,\n GrPagination: grPaginationConfig,\n GrPopover: grPopoverConfig,\n GrProgressBar: grProgressBarConfig,\n GrProgressCircle: grProgressCircleConfig,\n GrPromptDialog: grPromptDialogConfig,\n GrRadio: grRadioConfig,\n GrRadioGroup: grRadioGroupConfig,\n GrRating: grRatingConfig,\n GrResponseErrorBanner: grResponseErrorBannerConfig,\n GrSegmented: grSegmentedConfig,\n GrSelect: grSelectConfig,\n GrSidebar: grSidebarConfig,\n GrSkeleton: grSkeletonConfig,\n GrSlider: grSliderConfig,\n GrSortableList: grSortableListConfig,\n GrSplitter: grSplitterConfig,\n GrStatistic: grStatisticConfig,\n GrSwitch: grSwitchConfig,\n GrTable: grTableConfig,\n GrTabPanels: grTabPanelsConfig,\n GrTabs: grTabsConfig,\n GrTextarea: grTextareaConfig,\n GrTimeline: grTimelineConfig,\n GrToaster: grToasterConfig,\n GrTooltip: grTooltipConfig,\n GrTree: grTreeConfig,\n GrTreeSelect: grTreeSelectConfig,\n // </granularity:components:registry>\n}\n\nexport type GranularityComponentName = keyof typeof granularityComponentConfigs\n\n/** Базовый набор компонентов в порядке реестра. */\nconst baseComponents: readonly GranularComponentDescriptor[] = Object.values(\n granularityComponentConfigs,\n)\n\n/**\n * Собирает granular-provider пакета.\n *\n * `overrides` — точка расширения для потребителя: дескриптор с именем из\n * базового реестра заменяет его, остальные дописываются в конец.\n */\nexport function createGranularityProvider(\n overrides: readonly GranularComponentDescriptor[] = [],\n): GranularProvider {\n const overrideByName = new Map(\n overrides.map(component => [component.name, component]),\n )\n const components: GranularComponentDescriptor[] = [\n ...baseComponents.map(component => overrideByName.get(component.name) ?? component),\n ...overrides.filter(component => !baseComponents.some(base => base.name === component.name)),\n ]\n\n return defineGranularProvider({\n id: GRANULARITY_PROVIDER_ID,\n contractVersion: 1,\n packageBaseUrl,\n components,\n theme,\n })\n}\n","import { createGranularityProvider } from './shared'\n\nexport * from './shared'\n\nexport const granularityProvider = createGranularityProvider()\n\nexport default granularityProvider\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,IAAa,iBAAiB,wBAAwB,OAAO,KAAK,KAAK;CACrE,MAAM;CACN,cAAc,CAAC,YAAY,SAAS;CACpC,UAAU;AACZ,CAAC;;;ACND,IAAa,8BAA8B,wBAAwB,OAAO,KAAK,KAAK;CAClF,MAAM;CACN,cAAc,CAAC,WAAW,UAAU;AACtC,CAAC;;;;ACuFD,IAAa,0BAA0B;AAIvC,IAAM,iBAAiB,sBAAsB,OAAO,KAAK,GAAG;;AAG5D,IAAa,wBAAwB,CAAC,SAAS,MAAM;;AAIrD,IAAa,2BAA4D,CAAC,OAAO;AAEjF,IAAM,QAAQ;CACZ,YAAY,IAAA,IAAA,q5KAAA,KAAA,OAAA,KAAA,GAAA,CAA8C,CAAC;CAC3D,cAAc,IAAA,IAAA,ykXAAA,KAAA,OAAA,KAAA,GAAA,CAAgD,CAAC;CAC/D,QAAQ;EACN,OAAO,IAAA,IAAA,qjYAAA,KAAA,OAAA,KAAA,GAAA,CAAsD,CAAC;EAC9D,MAAM,IAAA,IAAA,yxSAAA,KAAA,OAAA,KAAA,GAAA,CAAqD,CAAC;CAC9D;CACA,eAAe;AACjB;;;;;AAMA,IAAa,8BAA8B;CAEzC,SAAS;CACT,gBAAgB;CAChB,UAAU;CACV,SAAS;CACT,aAAa;CACb,aAAa;CACb,eAAe;CACf,UAAU;CACV,eAAe;CACf,QAAQ;CACR,YAAY;CACZ,iBAAiB;CACjB,aAAa;CACb,YAAY;CACZ,eAAe;CACf,kBAAkB;CAClB,kBAAkB;CAClB,iBAAiB;CACjB,aAAa;CACb,SAAS;CACT,mBAAmB;CACnB,UAAU;CACV,iBAAiB;CACjB,WAAW;CACX,UAAU;CACV,YAAY;CACZ,gBAAgB;CAChB,cAAc;CACd,eAAe;CACf,cAAc;CACd,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,eAAe;CACf,QAAQ;CACR,eAAe;CACf,SAAS;CACT,YAAY;CACZ,cAAc;CACd,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,WAAW;CACX,SAAS;CACT,UAAU;CACV,eAAe;CACf,cAAc;CACd,WAAW;CACX,eAAe;CACf,kBAAkB;CAClB,gBAAgB;CAChB,SAAS;CACT,cAAc;CACd,UAAU;CACV,uBAAuB;CACvB,aAAa;CACb,UAAU;CACV,WAAW;CACX,YAAY;CACZ,UAAU;CACV,gBAAgB;CAChB,YAAY;CACZ,aAAa;CACb,UAAU;CACV,SAAS;CACT,aAAa;CACb,QAAQ;CACR,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,WAAW;CACX,QAAQ;CACR,cAAc;AAEhB;;AAKA,IAAM,iBAAyD,OAAO,OACpE,2BACF;;;;;;;AAQA,SAAgB,0BACd,YAAoD,CAAC,GACnC;CAClB,MAAM,iBAAiB,IAAI,IACzB,UAAU,KAAI,cAAa,CAAC,UAAU,MAAM,SAAS,CAAC,CACxD;CAMA,OAAO,uBAAuB;EAC5B,IAAI;EACJ,iBAAiB;EACjB;EACA,aARA,GAAG,eAAe,KAAI,cAAa,eAAe,IAAI,UAAU,IAAI,KAAK,SAAS,GAClF,GAAG,UAAU,QAAO,cAAa,CAAC,eAAe,MAAK,SAAQ,KAAK,SAAS,UAAU,IAAI,CAAC,CAO3F;EACA;CACF,CAAC;AACH;;;AChOA,IAAa,sBAAsB,0BAA0B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"trending-up-Bf9AQmoq.js","names":[],"sources":[],"mappings":""}