@feugene/granularity 0.44.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +3 -3
  2. package/dist/chunks/config-bjDf8nBf.js +43 -0
  3. package/dist/chunks/config-bjDf8nBf.js.map +1 -0
  4. package/dist/chunks/{generated-Hxu_sWPs.js → generated-CQ4h6Ieq.js} +45 -3
  5. package/dist/chunks/{generated-Hxu_sWPs.js.map → generated-CQ4h6Ieq.js.map} +1 -1
  6. package/dist/chunks/{granular-provider-CCNbQa5U.js → granular-provider-CsN_R9dB.js} +2 -0
  7. package/dist/chunks/granular-provider-CsN_R9dB.js.map +1 -0
  8. package/dist/chunks/useTree-BebEiBcL.js +525 -0
  9. package/dist/chunks/useTree-BebEiBcL.js.map +1 -0
  10. package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-CwCBMh4h.js → GrJsonViewer-C6q8dEEZ.js} +1 -1
  11. package/dist/components/GrJsonViewer/chunks/{GrJsonViewer-CwCBMh4h.js.map → GrJsonViewer-C6q8dEEZ.js.map} +1 -1
  12. package/dist/components/GrJsonViewer/index.js +1 -1
  13. package/dist/components/GrTree/chunks/{GrTree-CkHzgYg1.js → GrTree-6yZrncJE.js} +137 -540
  14. package/dist/components/GrTree/chunks/GrTree-6yZrncJE.js.map +1 -0
  15. package/dist/components/GrTree/index.js +2 -2
  16. package/dist/components/GrTree/styles.css +1 -1
  17. package/dist/components/GrTreeSections/chunks/GrTreeSections-DcmDcLwj.js +149 -0
  18. package/dist/components/GrTreeSections/chunks/GrTreeSections-DcmDcLwj.js.map +1 -0
  19. package/dist/components/GrTreeSections/index.js +3 -0
  20. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DUsv3_mF.js → GrTreeSelect-DBu5nMGA.js} +1 -1
  21. package/dist/components/GrTreeSelect/chunks/{GrTreeSelect-DUsv3_mF.js.map → GrTreeSelect-DBu5nMGA.js.map} +1 -1
  22. package/dist/components/GrTreeSelect/index.js +1 -1
  23. package/dist/composables/useTree.js +2 -0
  24. package/dist/granular-provider-node.js +1 -1
  25. package/dist/granular-provider.js +1 -1
  26. package/dist/index.js +7 -4
  27. package/dist/theme.js +1 -1
  28. package/dist/tokens.js +1 -1
  29. package/dist/types/components/GrTree/grTreeProps.d.ts +8 -1
  30. package/dist/types/components/GrTree/grTreeStyles.d.ts +12 -0
  31. package/dist/types/components/GrTree/index.d.ts +3 -2
  32. package/dist/types/components/GrTreeSections/GrTreeSections.vue.d.ts +71 -0
  33. package/dist/types/components/GrTreeSections/config.d.ts +1 -0
  34. package/dist/types/components/GrTreeSections/grTreeSectionsStyles.d.ts +23 -0
  35. package/dist/types/components/GrTreeSections/index.d.ts +8 -0
  36. package/dist/types/components/GrTreeSections/safelist.d.ts +1 -0
  37. package/dist/types/{components/GrTree/grTreeDataAdapter.d.ts → composables/internal/treeAdapter.d.ts} +3 -3
  38. package/dist/types/{components/GrTree/grTreeChecking.d.ts → composables/internal/treeChecking.d.ts} +1 -1
  39. package/dist/types/composables/useTree.d.ts +107 -0
  40. package/dist/types/granular-provider/shared.d.ts +1 -0
  41. package/dist/types/index.d.ts +3 -0
  42. package/dist/web-types.json +143 -3
  43. package/package.json +9 -1
  44. package/dist/chunks/granular-provider-CCNbQa5U.js.map +0 -1
  45. package/dist/components/GrTree/chunks/GrTree-CkHzgYg1.js.map +0 -1
  46. package/dist/types/components/GrTree/grTreeStore.d.ts +0 -71
@@ -0,0 +1,8 @@
1
+ import type { ComponentExposed } from '../shared/instance';
2
+ import type GrTreeSectionsComponent from './GrTreeSections.vue';
3
+ export { default } from './GrTreeSections.vue';
4
+ export { default as GrTreeSections } from './GrTreeSections.vue';
5
+ export type { GrTreeSectionsEmits, GrTreeSectionsProps } from './GrTreeSections.vue';
6
+ export { grTreeSectionsConfig } from './config';
7
+ export { grTreeSectionsSafelist } from './safelist';
8
+ export type GrTreeSectionsInstance = ComponentExposed<typeof GrTreeSectionsComponent>;
@@ -0,0 +1 @@
1
+ export declare const grTreeSectionsSafelist: string[];
@@ -1,5 +1,5 @@
1
- import type { GrTreeKey } from './grTreeTypes';
2
- import type { GrTreeDataProps } from './grTreeProps';
1
+ import type { GrTreeKey } from '../../components/GrTree/grTreeTypes';
2
+ import type { GrTreeDataProps } from '../../components/GrTree/grTreeProps';
3
3
  export type GrTreeDataAdapterOptions<T extends object> = Pick<GrTreeDataProps<T>, 'props' | 'nodeKey'>;
4
4
  export type GrTreeDataAdapter<T extends object> = {
5
5
  hasNodeKey: () => boolean;
@@ -13,4 +13,4 @@ export type GrTreeDataAdapter<T extends object> = {
13
13
  getNodeKey: (data: T, index: number, parentKey: GrTreeKey | undefined) => GrTreeKey;
14
14
  getExplicitNodeKey: (data: T) => GrTreeKey | undefined;
15
15
  };
16
- export declare function createGrTreeDataAdapter<T extends Record<string, any> = any>(options: GrTreeDataAdapterOptions<T>): GrTreeDataAdapter<T>;
16
+ export declare function createGrTreeDataAdapter<T extends object>(options: GrTreeDataAdapterOptions<T>): GrTreeDataAdapter<T>;
@@ -1,4 +1,4 @@
1
- import type { GrTreeKey, GrTreeNode } from './grTreeTypes';
1
+ import type { GrTreeKey, GrTreeNode } from '../../components/GrTree/grTreeTypes';
2
2
  /**
3
3
  * Состояние отметки узла. `half` — часть потомков отмечена: в ARIA это
4
4
  * `aria-checked="mixed"`.
@@ -0,0 +1,107 @@
1
+ import type { ComputedRef, MaybeRefOrGetter, Ref, ShallowRef } from 'vue';
2
+ import type { GrTreeKey, GrTreeNode, GrTreeNodeDropType, GrTreeNodeTarget } from '../components/GrTree/grTreeTypes';
3
+ import type { GrTreeDataAdapter } from './internal/treeAdapter';
4
+ import type { GrTreeDataProps, GrTreeLoad, GrTreePropsMap, GrTreeVisibleRow } from '../components/GrTree/grTreeProps';
5
+ import type { GrTreeCheckState, GrTreeCheckStates } from './internal/treeChecking';
6
+ export type GrTreeModel<T extends object> = {
7
+ roots: GrTreeNode<T>[];
8
+ byKey: Map<GrTreeKey, GrTreeNode<T>>;
9
+ byData: WeakMap<T, GrTreeNode<T>>;
10
+ };
11
+ export type GrTreeFilterInfo = {
12
+ isActive: boolean;
13
+ subtreeHasMatch: Map<GrTreeKey, boolean>;
14
+ matchedKeys: Set<GrTreeKey>;
15
+ autoExpandKeys: Set<GrTreeKey>;
16
+ };
17
+ export type UseTreeOptions<T extends object> = {
18
+ data: MaybeRefOrGetter<GrTreeDataProps<T>['data']>;
19
+ defaultExpandedKeys?: MaybeRefOrGetter<GrTreeDataProps<T>['defaultExpandedKeys']>;
20
+ defaultExpandAll?: MaybeRefOrGetter<boolean | undefined>;
21
+ /**
22
+ * Совпал ли узел с запросом фильтра.
23
+ *
24
+ * Обычная функция, а не `MaybeRefOrGetter`: `toValue` не отличает геттер от
25
+ * значения-функции и вызвал бы её вместо того, чтобы вернуть. Реактивность
26
+ * при этом не теряется — потребитель читает своё состояние внутри вызова.
27
+ */
28
+ /**
29
+ * Совпал ли узел с запросом. Вернуть `undefined` — оставить решение модели
30
+ * (подстрочный матч по подписи).
31
+ */
32
+ filterNodeMethod?: (value: string, data: T, node: GrTreeNode<T>) => boolean | undefined;
33
+ defaultCheckedKeys?: MaybeRefOrGetter<GrTreeKey[] | undefined>;
34
+ /** Внешние отмеченные ключи (`v-model:checked-keys`), если потребитель их ведёт. */
35
+ checkedKeys?: MaybeRefOrGetter<GrTreeKey[] | undefined>;
36
+ checkStrictly?: MaybeRefOrGetter<boolean | undefined>;
37
+ lazy?: MaybeRefOrGetter<boolean | undefined>;
38
+ /** Загрузка детей ветки. Обычная функция — по той же причине, что `filterNodeMethod`. */
39
+ load?: GrTreeLoad<T>;
40
+ /** Форма данных: поля детей, подписи и признака листа. */
41
+ props?: GrTreePropsMap;
42
+ /** Поле-идентификатор узла. */
43
+ nodeKey?: GrTreeDataProps<T>['nodeKey'];
44
+ /**
45
+ * Готовый адаптер. Не задан — собирается из `props` и `nodeKey`.
46
+ *
47
+ * Необязателен намеренно: фабрика адаптера наружу не публикуется, и
48
+ * требовать её значило бы сделать композабл невызываемым вне пакета.
49
+ * Компонент передаёт свой, потому что уже собрал его для себя.
50
+ */
51
+ adapter?: GrTreeDataAdapter<T>;
52
+ /**
53
+ * Цвет направляющей уровня для узла. Не задан — `branchColors` у строк
54
+ * остаётся пустым: направляющие рисует потребитель, и модель о них не знает.
55
+ *
56
+ * Обычная функция, а не `MaybeRefOrGetter`: `toValue` не отличает геттер от
57
+ * значения-функции и вызвал бы её вместо того, чтобы вернуть.
58
+ */
59
+ branchColorFor?: (node: GrTreeNode<T>) => string | undefined | null;
60
+ };
61
+ export type UseTreeReturn<T extends object> = {
62
+ filterValue: Ref<string>;
63
+ expandedKeys: ShallowRef<Set<GrTreeKey>>;
64
+ checkedKeys: ShallowRef<Set<GrTreeKey>>;
65
+ checkStates: ComputedRef<GrTreeCheckStates>;
66
+ loadingKeys: ShallowRef<Set<GrTreeKey>>;
67
+ loadedKeys: ShallowRef<Set<GrTreeKey>>;
68
+ loadedChildren: ShallowRef<Map<GrTreeKey, T[]>>;
69
+ currentKey: Ref<GrTreeKey | undefined>;
70
+ /**
71
+ * Видимые строки одним плоским списком в порядке отображения — то, из чего
72
+ * строится разметка. Иерархию несут `node.level`, `posInSet` и `setSize`:
73
+ * в плоском DOM группы нет, и структуру диктору сообщают они.
74
+ */
75
+ visibleRows: ComputedRef<GrTreeVisibleRow<T>[]>;
76
+ treeModel: ComputedRef<GrTreeModel<T>>;
77
+ filterInfo: ComputedRef<GrTreeFilterInfo>;
78
+ filter: (value: string) => void;
79
+ isExpandedKey: (key: GrTreeKey) => boolean;
80
+ setExpandedKey: (key: GrTreeKey, expanded: boolean) => void;
81
+ toggleExpand: (node: GrTreeNode<T>) => void;
82
+ setCurrentKey: (key?: GrTreeKey) => void;
83
+ getCurrentKey: () => GrTreeKey | undefined;
84
+ getCurrentNode: () => GrTreeNode<T> | undefined;
85
+ setCurrentNode: (node?: GrTreeNodeTarget<T>) => boolean;
86
+ getNode: (key: GrTreeKey) => GrTreeNode<T> | undefined;
87
+ canMoveNode: (node: GrTreeNodeTarget<T>, referenceNode: GrTreeNodeTarget<T>, dropType: GrTreeNodeDropType) => boolean;
88
+ moveNode: (node: GrTreeNodeTarget<T>, referenceNode: GrTreeNodeTarget<T>, dropType: GrTreeNodeDropType) => GrTreeNode<T> | undefined;
89
+ appendNode: (data: T, parent: GrTreeNodeTarget<T>) => GrTreeNode<T> | undefined;
90
+ removeNode: (node: GrTreeNodeTarget<T>) => boolean;
91
+ insertNodeBefore: (data: T, referenceNode: GrTreeNodeTarget<T>) => GrTreeNode<T> | undefined;
92
+ insertNodeAfter: (data: T, referenceNode: GrTreeNodeTarget<T>) => GrTreeNode<T> | undefined;
93
+ getCheckState: (key: GrTreeKey) => GrTreeCheckState;
94
+ setChecked: (node: GrTreeNodeTarget<T>, checked: boolean) => GrTreeNode<T> | undefined;
95
+ toggleChecked: (node: GrTreeNode<T>) => GrTreeNode<T> | undefined;
96
+ getCheckedKeys: (options?: {
97
+ leafOnly?: boolean;
98
+ }) => GrTreeKey[];
99
+ setCheckedKeys: (keys: GrTreeKey[]) => void;
100
+ getHalfCheckedKeys: () => GrTreeKey[];
101
+ /** Лист ли узел с точки зрения раскрытия: в ленивом режиме решают данные и факт загрузки. */
102
+ isLeafNode: (node: GrTreeNode<T>) => boolean;
103
+ isLoadingKey: (key: GrTreeKey) => boolean;
104
+ /** Грузит детей ветки, если это нужно и ещё не делалось. */
105
+ ensureLoaded: (node: GrTreeNode<T>) => void;
106
+ };
107
+ export declare function useTree<T extends object>(options: UseTreeOptions<T>): UseTreeReturn<T>;
@@ -90,6 +90,7 @@ export declare const granularityComponentConfigs: {
90
90
  GrTooltip: GranularComponentDescriptor<"GrTooltip">;
91
91
  GrTransfer: GranularComponentDescriptor<"GrTransfer">;
92
92
  GrTree: GranularComponentDescriptor<"GrTree">;
93
+ GrTreeSections: GranularComponentDescriptor<"GrTreeSections">;
93
94
  GrTreeSelect: GranularComponentDescriptor<"GrTreeSelect">;
94
95
  GrValue: GranularComponentDescriptor<"GrValue">;
95
96
  };
@@ -77,6 +77,7 @@ export * from './components/GrToaster';
77
77
  export * from './components/GrTooltip';
78
78
  export * from './components/GrTransfer';
79
79
  export * from './components/GrTree';
80
+ export * from './components/GrTreeSections';
80
81
  export * from './components/GrTreeSelect';
81
82
  export * from './components/GrValue';
82
83
  export { useDismissible } from './composables/useDismissible';
@@ -87,6 +88,8 @@ export { usePortalTarget } from './composables/usePortalTarget';
87
88
  export type { PortalTarget } from './composables/usePortalTarget';
88
89
  export { useOverlayLayer } from './composables/useOverlayLayer';
89
90
  export type { OverlayLayerHandle, UseOverlayLayerOptions } from './composables/useOverlayLayer';
91
+ export { useTree } from './composables/useTree';
92
+ export type { GrTreeFilterInfo, GrTreeModel, UseTreeOptions, UseTreeReturn, } from './composables/useTree';
90
93
  export { useScrollSpy } from './composables/useScrollSpy';
91
94
  export type { UseScrollSpyOptions, UseScrollSpyReturn } from './composables/useScrollSpy';
92
95
  export { useRovingFocus } from './composables/useRovingFocus';
@@ -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.44.0",
4
+ "version": "0.46.0",
5
5
  "framework": "vue",
6
6
  "js-types-syntax": "typescript",
7
7
  "description-markup": "markdown",
@@ -11584,10 +11584,11 @@
11584
11584
  },
11585
11585
  {
11586
11586
  "name": "branchLine",
11587
- "default": "false",
11587
+ "description": "Направляющие уровней. `true` — то же, что `'line'`: одна вертикаль на уровень. `'elbow'` добавляет горизонтальное колено к строке и обрывает линию на середине последнего ребёнка — так видно не только уровень, но и то, какие ветки ещё продолжаются.",
11588
+ "default": "\"line\"",
11588
11589
  "value": {
11589
11590
  "kind": "expression",
11590
- "type": "boolean | undefined"
11591
+ "type": "boolean | GrTreeBranchLine | undefined"
11591
11592
  }
11592
11593
  },
11593
11594
  {
@@ -11822,6 +11823,145 @@
11822
11823
  ]
11823
11824
  }
11824
11825
  },
11826
+ {
11827
+ "name": "GrTreeSections",
11828
+ "source": {
11829
+ "module": "@feugene/granularity/components/GrTreeSections",
11830
+ "symbol": "GrTreeSections"
11831
+ },
11832
+ "props": [
11833
+ {
11834
+ "name": "data",
11835
+ "required": true,
11836
+ "description": "Данные обычного дерева. Корни становятся заголовками, их дети — деревьями.",
11837
+ "value": {
11838
+ "kind": "expression",
11839
+ "type": "T[]"
11840
+ }
11841
+ },
11842
+ {
11843
+ "name": "nodeKey",
11844
+ "default": "\"id\" as never",
11845
+ "value": {
11846
+ "kind": "expression",
11847
+ "type": "\"id\" | Extract<keyof T, string> | undefined"
11848
+ }
11849
+ },
11850
+ {
11851
+ "name": "props",
11852
+ "default": "undefined",
11853
+ "value": {
11854
+ "kind": "expression",
11855
+ "type": "GrTreePropsMap | undefined"
11856
+ }
11857
+ },
11858
+ {
11859
+ "name": "size",
11860
+ "default": "undefined",
11861
+ "value": {
11862
+ "kind": "expression",
11863
+ "type": "\"xs\" | \"sm\" | \"md\" | \"lg\" | undefined"
11864
+ }
11865
+ },
11866
+ {
11867
+ "name": "headingLevel",
11868
+ "description": "Уровень заголовка группы под структуру страницы.",
11869
+ "default": "3",
11870
+ "value": {
11871
+ "kind": "expression",
11872
+ "type": "2 | 3 | 4 | 5 | 6 | undefined"
11873
+ }
11874
+ },
11875
+ {
11876
+ "name": "showCount",
11877
+ "description": "Показывать число узлов первого уровня в группе.",
11878
+ "default": "false",
11879
+ "value": {
11880
+ "kind": "expression",
11881
+ "type": "boolean | undefined"
11882
+ }
11883
+ },
11884
+ {
11885
+ "name": "showCheckbox",
11886
+ "default": "false",
11887
+ "value": {
11888
+ "kind": "expression",
11889
+ "type": "boolean | undefined"
11890
+ }
11891
+ },
11892
+ {
11893
+ "name": "checkStrictly",
11894
+ "default": "false",
11895
+ "value": {
11896
+ "kind": "expression",
11897
+ "type": "boolean | undefined"
11898
+ }
11899
+ },
11900
+ {
11901
+ "name": "branchLine",
11902
+ "default": "undefined",
11903
+ "value": {
11904
+ "kind": "expression",
11905
+ "type": "boolean | GrTreeBranchLine | undefined"
11906
+ }
11907
+ },
11908
+ {
11909
+ "name": "indent",
11910
+ "default": "0",
11911
+ "value": {
11912
+ "kind": "expression",
11913
+ "type": "number | undefined"
11914
+ }
11915
+ },
11916
+ {
11917
+ "name": "defaultExpandedKeys",
11918
+ "default": "[]",
11919
+ "value": {
11920
+ "kind": "expression",
11921
+ "type": "GrTreeKey[] | undefined"
11922
+ }
11923
+ },
11924
+ {
11925
+ "name": "currentKey",
11926
+ "default": "undefined",
11927
+ "value": {
11928
+ "kind": "expression",
11929
+ "type": "GrTreeKey | undefined"
11930
+ }
11931
+ },
11932
+ {
11933
+ "name": "checkedKeys",
11934
+ "default": "undefined",
11935
+ "value": {
11936
+ "kind": "expression",
11937
+ "type": "GrTreeKey[] | undefined"
11938
+ }
11939
+ }
11940
+ ],
11941
+ "slots": [
11942
+ {
11943
+ "name": "heading",
11944
+ "description": "Заголовок группы целиком — вместо подписи корневого узла."
11945
+ },
11946
+ {
11947
+ "name": "default",
11948
+ "description": "Строка внутри группы, как у `GrTree`."
11949
+ }
11950
+ ],
11951
+ "js": {
11952
+ "events": [
11953
+ {
11954
+ "name": "update:currentKey"
11955
+ },
11956
+ {
11957
+ "name": "update:checkedKeys"
11958
+ },
11959
+ {
11960
+ "name": "nodeClick"
11961
+ }
11962
+ ]
11963
+ }
11964
+ },
11825
11965
  {
11826
11966
  "name": "GrTreeSelect",
11827
11967
  "source": {
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.44.0",
4
+ "version": "0.46.0",
5
5
  "license": "LicenseRef-Granularity-EUC-1.1",
6
6
  "author": {
7
7
  "name": "Evgeniy Fureev",
@@ -454,6 +454,10 @@
454
454
  "types": "./dist/types/components/GrTree/index.d.ts",
455
455
  "import": "./dist/components/GrTree/index.js"
456
456
  },
457
+ "./components/GrTreeSections": {
458
+ "types": "./dist/types/components/GrTreeSections/index.d.ts",
459
+ "import": "./dist/components/GrTreeSections/index.js"
460
+ },
457
461
  "./components/GrTreeSelect": {
458
462
  "types": "./dist/types/components/GrTreeSelect/index.d.ts",
459
463
  "import": "./dist/components/GrTreeSelect/index.js"
@@ -490,6 +494,10 @@
490
494
  "types": "./dist/types/composables/useOverlayLayer.d.ts",
491
495
  "import": "./dist/composables/useOverlayLayer.js"
492
496
  },
497
+ "./composables/useTree": {
498
+ "types": "./dist/types/composables/useTree.d.ts",
499
+ "import": "./dist/composables/useTree.js"
500
+ },
493
501
  "./composables/useScrollSpy": {
494
502
  "types": "./dist/types/composables/useScrollSpy.d.ts",
495
503
  "import": "./dist/composables/useScrollSpy.js"
@@ -1 +0,0 @@
1
- {"version":3,"file":"granular-provider-CCNbQa5U.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 { grAffixConfig } from '../components/GrAffix/config'\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 { grCarouselConfig } from '../components/GrCarousel/config'\nimport { grCheckboxConfig } from '../components/GrCheckbox/config'\nimport { grCheckboxGroupConfig } from '../components/GrCheckboxGroup/config'\nimport { grChipConfig } from '../components/GrChip/config'\nimport { grChipGroupConfig } from '../components/GrChipGroup/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 { grContextMenuConfig } from '../components/GrContextMenu/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 { grScrollSpyConfig } from '../components/GrScrollSpy/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 { grStepsConfig } from '../components/GrSteps/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 { grTransferConfig } from '../components/GrTransfer/config'\nimport { grTreeConfig } from '../components/GrTree/config'\nimport { grTreeSelectConfig } from '../components/GrTreeSelect/config'\nimport { grValueConfig } from '../components/GrValue/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 GrAffix: grAffixConfig,\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 GrCarousel: grCarouselConfig,\n GrCheckbox: grCheckboxConfig,\n GrCheckboxGroup: grCheckboxGroupConfig,\n GrChip: grChipConfig,\n GrChipGroup: grChipGroupConfig,\n GrCollapse: grCollapseConfig,\n GrColorPicker: grColorPickerConfig,\n GrCommandPalette: grCommandPaletteConfig,\n GrConfigProvider: grConfigProviderConfig,\n GrConfirmDialog: grConfirmDialogConfig,\n GrContextMenu: grContextMenuConfig,\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 GrScrollSpy: grScrollSpyConfig,\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 GrSteps: grStepsConfig,\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 GrTransfer: grTransferConfig,\n GrTree: grTreeConfig,\n GrTreeSelect: grTreeSelectConfig,\n GrValue: grValueConfig,\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,YAAY,KAAK;CACrE,MAAM;CACN,cAAc,CAAC,YAAY,SAAS;CACpC,UAAU;AACZ,CAAC;;;ACND,IAAa,8BAA8B,wBAAwB,YAAY,KAAK;CAClF,MAAM;CACN,cAAc,CAAC,WAAW,UAAU;AACtC,CAAC;;;;AC+FD,IAAa,0BAA0B;AAIvC,IAAM,iBAAiB,sBAAsB,YAAY,GAAG;;AAG5D,IAAa,wBAAwB,CAAC,SAAS,MAAM;;AAIrD,IAAa,2BAA4D,CAAC,OAAO;AAEjF,IAAM,QAAQ;CACZ,YAAY,IAAA,IAAA,q5KAAA,KAAA,YAAA,GAAA,CAA8C,CAAC;CAC3D,cAAc,IAAA,IAAA,65YAAA,KAAA,YAAA,GAAA,CAAgD,CAAC;CAC/D,QAAQ;EACN,OAAO,IAAA,IAAA,iyYAAA,KAAA,YAAA,GAAA,CAAsD,CAAC;EAC9D,MAAM,IAAA,IAAA,y/SAAA,KAAA,YAAA,GAAA,CAAqD,CAAC;CAC9D;CACA,eAAe;AACjB;;;;;AAMA,IAAa,8BAA8B;CAEzC,SAAS;CACT,SAAS;CACT,gBAAgB;CAChB,UAAU;CACV,SAAS;CACT,aAAa;CACb,aAAa;CACb,eAAe;CACf,UAAU;CACV,eAAe;CACf,QAAQ;CACR,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB,QAAQ;CACR,aAAa;CACb,YAAY;CACZ,eAAe;CACf,kBAAkB;CAClB,kBAAkB;CAClB,iBAAiB;CACjB,eAAe;CACf,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,aAAa;CACb,UAAU;CACV,WAAW;CACX,YAAY;CACZ,UAAU;CACV,gBAAgB;CAChB,YAAY;CACZ,aAAa;CACb,SAAS;CACT,UAAU;CACV,SAAS;CACT,aAAa;CACb,QAAQ;CACR,YAAY;CACZ,YAAY;CACZ,WAAW;CACX,WAAW;CACX,YAAY;CACZ,QAAQ;CACR,cAAc;CACd,SAAS;AAEX;;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;CACA,MAAM,aAA4C,CAChD,GAAG,eAAe,KAAI,cAAa,eAAe,IAAI,UAAU,IAAI,KAAK,SAAS,GAClF,GAAG,UAAU,QAAO,cAAa,CAAC,eAAe,MAAK,SAAQ,KAAK,SAAS,UAAU,IAAI,CAAC,CAC7F;CAEA,OAAO,uBAAuB;EAC5B,IAAI;EACJ,iBAAiB;EACjB;EACA;EACA;CACF,CAAC;AACH;;;AChPA,IAAa,sBAAsB,0BAA0B"}