@fougere/admin 0.9.3-alpha.0 → 0.11.0-alpha.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 (217) hide show
  1. package/dist/{extensions.d.ts → AdminExtension.d.ts} +5 -14
  2. package/dist/AdminExtension.d.ts.map +1 -0
  3. package/dist/{extensions.js → AdminExtension.js} +3 -3
  4. package/dist/AdminExtension.js.map +1 -0
  5. package/dist/AdminFacetRegistry.d.ts +9 -0
  6. package/dist/AdminFacetRegistry.d.ts.map +1 -0
  7. package/dist/AdminFacetRegistry.js +2 -0
  8. package/dist/AdminFacetRegistry.js.map +1 -0
  9. package/dist/AdminFacets.d.ts +6 -0
  10. package/dist/AdminFacets.d.ts.map +1 -0
  11. package/dist/{facets.js → AdminFacets.js} +1 -1
  12. package/dist/AdminFacets.js.map +1 -0
  13. package/dist/AdminFieldExtension.d.ts +7 -0
  14. package/dist/AdminFieldExtension.d.ts.map +1 -0
  15. package/dist/AdminFieldExtension.js +2 -0
  16. package/dist/AdminFieldExtension.js.map +1 -0
  17. package/dist/AdminOperation.d.ts +9 -0
  18. package/dist/AdminOperation.d.ts.map +1 -0
  19. package/dist/AdminOperation.js +2 -0
  20. package/dist/AdminOperation.js.map +1 -0
  21. package/dist/AdminOperationExtension.d.ts +6 -0
  22. package/dist/AdminOperationExtension.d.ts.map +1 -0
  23. package/dist/AdminOperationExtension.js +2 -0
  24. package/dist/AdminOperationExtension.js.map +1 -0
  25. package/dist/{resources.d.ts → AdminResource.d.ts} +11 -17
  26. package/dist/AdminResource.d.ts.map +1 -0
  27. package/dist/{resources.js → AdminResource.js} +13 -14
  28. package/dist/AdminResource.js.map +1 -0
  29. package/dist/AdminRuntime.d.ts +11 -0
  30. package/dist/AdminRuntime.d.ts.map +1 -0
  31. package/dist/{runtime.js → AdminRuntime.js} +5 -6
  32. package/dist/AdminRuntime.js.map +1 -0
  33. package/dist/AdminRuntimeOptions.d.ts +8 -0
  34. package/dist/AdminRuntimeOptions.d.ts.map +1 -0
  35. package/dist/AdminRuntimeOptions.js +2 -0
  36. package/dist/AdminRuntimeOptions.js.map +1 -0
  37. package/dist/{topology.d.ts → Drawing.d.ts} +5 -46
  38. package/dist/Drawing.d.ts.map +1 -0
  39. package/dist/{topology.js → Drawing.js} +4 -5
  40. package/dist/Drawing.js.map +1 -0
  41. package/dist/EditorialFacet.d.ts +13 -0
  42. package/dist/EditorialFacet.d.ts.map +1 -0
  43. package/dist/EditorialFacet.js +2 -0
  44. package/dist/EditorialFacet.js.map +1 -0
  45. package/dist/FougereAdminProps.d.ts +17 -0
  46. package/dist/FougereAdminProps.d.ts.map +1 -0
  47. package/dist/FougereAdminProps.js +2 -0
  48. package/dist/FougereAdminProps.js.map +1 -0
  49. package/dist/FougereDashboardContextValue.d.ts +11 -0
  50. package/dist/FougereDashboardContextValue.d.ts.map +1 -0
  51. package/dist/FougereDashboardContextValue.js +2 -0
  52. package/dist/FougereDashboardContextValue.js.map +1 -0
  53. package/dist/FougereDashboardExtension.d.ts +13 -0
  54. package/dist/FougereDashboardExtension.d.ts.map +1 -0
  55. package/dist/FougereDashboardExtension.js +2 -0
  56. package/dist/FougereDashboardExtension.js.map +1 -0
  57. package/dist/FougereDashboardMetrics.d.ts +7 -0
  58. package/dist/FougereDashboardMetrics.d.ts.map +1 -0
  59. package/dist/FougereDashboardMetrics.js +2 -0
  60. package/dist/FougereDashboardMetrics.js.map +1 -0
  61. package/dist/FougereDashboardResource.d.ts +14 -0
  62. package/dist/FougereDashboardResource.d.ts.map +1 -0
  63. package/dist/FougereDashboardResource.js +2 -0
  64. package/dist/FougereDashboardResource.js.map +1 -0
  65. package/dist/FougereDashboardWidget.d.ts +11 -0
  66. package/dist/FougereDashboardWidget.d.ts.map +1 -0
  67. package/dist/FougereDashboardWidget.js +2 -0
  68. package/dist/FougereDashboardWidget.js.map +1 -0
  69. package/dist/FougereDashboardZone.d.ts +2 -0
  70. package/dist/FougereDashboardZone.d.ts.map +1 -0
  71. package/dist/FougereDashboardZone.js +2 -0
  72. package/dist/FougereDashboardZone.js.map +1 -0
  73. package/dist/{provider.d.ts → FougereDataProvider.d.ts} +2 -17
  74. package/dist/FougereDataProvider.d.ts.map +1 -0
  75. package/dist/{provider.js → FougereDataProvider.js} +2 -3
  76. package/dist/FougereDataProvider.js.map +1 -0
  77. package/dist/FougereResourceOptions.d.ts +16 -0
  78. package/dist/FougereResourceOptions.d.ts.map +1 -0
  79. package/dist/FougereResourceOptions.js +2 -0
  80. package/dist/FougereResourceOptions.js.map +1 -0
  81. package/dist/LoadedAdmin.d.ts +7 -0
  82. package/dist/LoadedAdmin.d.ts.map +1 -0
  83. package/dist/LoadedAdmin.js +2 -0
  84. package/dist/LoadedAdmin.js.map +1 -0
  85. package/dist/PlacedEdge.d.ts +17 -0
  86. package/dist/PlacedEdge.d.ts.map +1 -0
  87. package/dist/PlacedEdge.js +2 -0
  88. package/dist/PlacedEdge.js.map +1 -0
  89. package/dist/PlacedNode.d.ts +10 -0
  90. package/dist/PlacedNode.d.ts.map +1 -0
  91. package/dist/PlacedNode.js +2 -0
  92. package/dist/PlacedNode.js.map +1 -0
  93. package/dist/Point.d.ts +5 -0
  94. package/dist/Point.d.ts.map +1 -0
  95. package/dist/Point.js +2 -0
  96. package/dist/Point.js.map +1 -0
  97. package/dist/ProviderOptions.d.ts +10 -0
  98. package/dist/ProviderOptions.d.ts.map +1 -0
  99. package/dist/ProviderOptions.js +2 -0
  100. package/dist/ProviderOptions.js.map +1 -0
  101. package/dist/ReactAdminFieldContext.d.ts +10 -0
  102. package/dist/ReactAdminFieldContext.d.ts.map +1 -0
  103. package/dist/ReactAdminFieldContext.js +2 -0
  104. package/dist/ReactAdminFieldContext.js.map +1 -0
  105. package/dist/ReactAdminFieldRenderer.d.ts +4 -0
  106. package/dist/ReactAdminFieldRenderer.d.ts.map +1 -0
  107. package/dist/ReactAdminFieldRenderer.js +2 -0
  108. package/dist/ReactAdminFieldRenderer.js.map +1 -0
  109. package/dist/ReactAdminInputContext.d.ts +9 -0
  110. package/dist/ReactAdminInputContext.d.ts.map +1 -0
  111. package/dist/ReactAdminInputContext.js +2 -0
  112. package/dist/ReactAdminInputContext.js.map +1 -0
  113. package/dist/ReactAdminInputRenderer.d.ts +4 -0
  114. package/dist/ReactAdminInputRenderer.d.ts.map +1 -0
  115. package/dist/ReactAdminInputRenderer.js +2 -0
  116. package/dist/ReactAdminInputRenderer.js.map +1 -0
  117. package/dist/ReactAdminRenderers.d.ts +8 -0
  118. package/dist/ReactAdminRenderers.d.ts.map +1 -0
  119. package/dist/ReactAdminRenderers.js +2 -0
  120. package/dist/ReactAdminRenderers.js.map +1 -0
  121. package/dist/ReactAdminResourceComponents.d.ts +9 -0
  122. package/dist/ReactAdminResourceComponents.d.ts.map +1 -0
  123. package/dist/ReactAdminResourceComponents.js +2 -0
  124. package/dist/ReactAdminResourceComponents.js.map +1 -0
  125. package/dist/ResourceKey.d.ts +8 -0
  126. package/dist/ResourceKey.d.ts.map +1 -0
  127. package/dist/ResourceKey.js +2 -0
  128. package/dist/ResourceKey.js.map +1 -0
  129. package/dist/ResourceRenderOptions.d.ts +7 -0
  130. package/dist/ResourceRenderOptions.d.ts.map +1 -0
  131. package/dist/ResourceRenderOptions.js +2 -0
  132. package/dist/ResourceRenderOptions.js.map +1 -0
  133. package/dist/TopologyNode.d.ts +18 -0
  134. package/dist/TopologyNode.d.ts.map +1 -0
  135. package/dist/TopologyNode.js +2 -0
  136. package/dist/TopologyNode.js.map +1 -0
  137. package/dist/UsersFacet.d.ts +13 -0
  138. package/dist/UsersFacet.d.ts.map +1 -0
  139. package/dist/UsersFacet.js +2 -0
  140. package/dist/UsersFacet.js.map +1 -0
  141. package/dist/dashboard.d.ts +4 -61
  142. package/dist/dashboard.d.ts.map +1 -1
  143. package/dist/dashboard.js +9 -9
  144. package/dist/dashboard.js.map +1 -1
  145. package/dist/index.d.ts +3 -2
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js +1 -1
  148. package/dist/index.js.map +1 -1
  149. package/dist/react.d.ts +21 -65
  150. package/dist/react.d.ts.map +1 -1
  151. package/dist/react.js +7 -7
  152. package/dist/react.js.map +1 -1
  153. package/dist/theme.js +1 -1
  154. package/dist/topology-page.d.ts.map +1 -1
  155. package/dist/topology-page.js +3 -3
  156. package/dist/topology-page.js.map +1 -1
  157. package/package.json +6 -5
  158. package/src/{extensions.ts → AdminExtension.ts} +5 -16
  159. package/src/AdminFacetRegistry.ts +9 -0
  160. package/src/AdminFacets.ts +22 -0
  161. package/src/AdminFieldExtension.ts +6 -0
  162. package/src/AdminOperation.ts +9 -0
  163. package/src/AdminOperationExtension.ts +5 -0
  164. package/src/{resources.ts → AdminResource.ts} +18 -26
  165. package/src/{runtime.ts → AdminRuntime.ts} +6 -24
  166. package/src/AdminRuntimeOptions.ts +8 -0
  167. package/src/{topology.ts → Drawing.ts} +7 -60
  168. package/src/EditorialFacet.ts +12 -0
  169. package/src/FougereAdminProps.ts +17 -0
  170. package/src/FougereDashboardContextValue.ts +11 -0
  171. package/src/FougereDashboardExtension.ts +13 -0
  172. package/src/FougereDashboardMetrics.ts +6 -0
  173. package/src/FougereDashboardResource.ts +14 -0
  174. package/src/FougereDashboardWidget.ts +11 -0
  175. package/src/FougereDashboardZone.ts +1 -0
  176. package/src/{provider.ts → FougereDataProvider.ts} +3 -26
  177. package/src/FougereResourceOptions.ts +13 -0
  178. package/src/LoadedAdmin.ts +7 -0
  179. package/src/PlacedEdge.ts +17 -0
  180. package/src/PlacedNode.ts +10 -0
  181. package/src/Point.ts +4 -0
  182. package/src/ProviderOptions.ts +10 -0
  183. package/src/ReactAdminFieldContext.ts +10 -0
  184. package/src/ReactAdminFieldRenderer.ts +4 -0
  185. package/src/ReactAdminInputContext.ts +9 -0
  186. package/src/ReactAdminInputRenderer.ts +4 -0
  187. package/src/ReactAdminRenderers.ts +8 -0
  188. package/src/ReactAdminResourceComponents.ts +9 -0
  189. package/src/ResourceKey.ts +7 -0
  190. package/src/ResourceRenderOptions.ts +7 -0
  191. package/src/TopologyNode.ts +18 -0
  192. package/src/UsersFacet.ts +12 -0
  193. package/src/dashboard.tsx +19 -88
  194. package/src/index.ts +3 -9
  195. package/src/react.tsx +37 -80
  196. package/src/theme.tsx +1 -1
  197. package/src/topology-page.tsx +5 -3
  198. package/template/index.html +5 -0
  199. package/template/package.json +22 -0
  200. package/template/src/main.tsx +27 -0
  201. package/template/tsconfig.json +12 -0
  202. package/template/vite.config.ts +16 -0
  203. package/dist/extensions.d.ts.map +0 -1
  204. package/dist/extensions.js.map +0 -1
  205. package/dist/facets.d.ts +0 -36
  206. package/dist/facets.d.ts.map +0 -1
  207. package/dist/facets.js.map +0 -1
  208. package/dist/provider.d.ts.map +0 -1
  209. package/dist/provider.js.map +0 -1
  210. package/dist/resources.d.ts.map +0 -1
  211. package/dist/resources.js.map +0 -1
  212. package/dist/runtime.d.ts +0 -22
  213. package/dist/runtime.d.ts.map +0 -1
  214. package/dist/runtime.js.map +0 -1
  215. package/dist/topology.d.ts.map +0 -1
  216. package/dist/topology.js.map +0 -1
  217. package/src/facets.ts +0 -55
@@ -0,0 +1,18 @@
1
+ import { type DeclaredEdge, type Edge, type FrondPlacement } from '@fougere/core/contract';
2
+
3
+ /** One frond as the page draws it: its placement, and the calls observed around it. */
4
+ export interface TopologyNode extends FrondPlacement {
5
+ /** Fronds this one called, with what it cost them. */
6
+ calls: Edge[];
7
+ /** Fronds that called this one. */
8
+ calledBy: Edge[];
9
+ /** Fronds its code reaches, whether or not a call has ever gone down the link. */
10
+ declaredCalls: DeclaredEdge[];
11
+ /** Where the config says to reach it, when it says so. */
12
+ at?: string;
13
+ /**
14
+ * Declared in `remotes:` and never heard from. A different absence from an opaque remote,
15
+ * which answered and keeps its shape to itself: this one may simply be down.
16
+ */
17
+ silent: boolean;
18
+ }
@@ -0,0 +1,12 @@
1
+ export interface UsersFacet {
2
+ name: string;
3
+ email?: string;
4
+ role?: string;
5
+ state?: {
6
+ field: string;
7
+ active?: readonly string[];
8
+ invited?: readonly string[];
9
+ suspended?: readonly string[];
10
+ };
11
+ createdAt?: string;
12
+ }
package/src/dashboard.tsx CHANGED
@@ -1,3 +1,10 @@
1
+ import type { FougereResourceOptions } from './FougereResourceOptions.js';
2
+ import type { FougereDashboardResource } from './FougereDashboardResource.js';
3
+ import type { FougereDashboardMetrics } from './FougereDashboardMetrics.js';
4
+ import type { FougereDashboardContextValue } from './FougereDashboardContextValue.js';
5
+ import type { FougereDashboardZone } from './FougereDashboardZone.js';
6
+ import type { FougereDashboardWidget } from './FougereDashboardWidget.js';
7
+ import type { FougereDashboardExtension } from './FougereDashboardExtension.js';
1
8
  'use client';
2
9
 
3
10
  import {
@@ -12,65 +19,11 @@ import {
12
19
  Typography,
13
20
  type SvgIconProps,
14
21
  } from '@mui/material';
15
- import {
16
- createContext,
17
- useContext,
18
- useEffect,
19
- useMemo,
20
- useState,
21
- type ComponentType,
22
- type ReactElement,
23
- } from 'react';
24
- import {
25
- useDataProvider,
26
- useLocaleState,
27
- useRedirect,
28
- useResourceDefinitions,
29
- useTranslate,
30
- Title,
31
- type ResourceOptions,
32
- } from 'react-admin';
33
- import type { AdminFacets, EditorialFacet, UsersFacet } from './facets.js';
34
-
35
- export interface FougereResourceOptions extends ResourceOptions {
36
- primary: string;
37
- facets: AdminFacets;
38
- /** The frond that owns this door — the card groups by it, so the panel can too. */
39
- frond?: string;
40
- /** What the door answers, with each op's kind. `query` reads, `command` writes. */
41
- operations?: readonly { name: string; kind: 'query' | 'command' }[];
42
- /** How many columns the shape yields — a rough measure of an entity's width. */
43
- fieldCount?: number;
44
- }
45
-
46
- export interface FougereDashboardResource {
47
- name: string;
48
- label: string;
49
- primary: string;
50
- facets: AdminFacets;
51
- hasCreate: boolean;
52
- hasEdit: boolean;
53
- hasShow: boolean;
54
- total: number;
55
- rows: Record<string, unknown>[];
56
- states: Record<string, number>;
57
- }
58
-
59
- export interface FougereDashboardMetrics {
60
- content: number;
61
- drafts: number;
62
- published: number;
63
- users: number;
64
- }
22
+ import { createContext, useContext, useEffect, useMemo, useState, type ReactElement } from 'react';
23
+ import { useDataProvider, useLocaleState, useRedirect, useResourceDefinitions, useTranslate, Title } from 'react-admin';
65
24
 
66
- export interface FougereDashboardContextValue {
67
- loading: boolean;
68
- resources: FougereDashboardResource[];
69
- editorial: FougereDashboardResource[];
70
- users: FougereDashboardResource[];
71
- metrics: FougereDashboardMetrics;
72
- navigate(view: 'list' | 'show' | 'edit' | 'create', resource: string, id?: string | number): void;
73
- }
25
+ import type { EditorialFacet } from './EditorialFacet.js';
26
+ import type { UsersFacet } from './UsersFacet.js';
74
27
 
75
28
  const DashboardContext = createContext<FougereDashboardContextValue | undefined>(undefined);
76
29
 
@@ -81,28 +34,6 @@ export function useFougereDashboard(): FougereDashboardContextValue {
81
34
  return context;
82
35
  }
83
36
 
84
- export type FougereDashboardZone = 'hero' | 'metrics' | 'main';
85
-
86
- export interface FougereDashboardWidget {
87
- id: string;
88
- zone: FougereDashboardZone;
89
- /** Twelve-column width for `main`, four-column width for `metrics`. */
90
- span: number;
91
- component: ComponentType;
92
- hidden?: boolean;
93
- }
94
-
95
- /** A delta over stable widget ids; a component on a new id contributes a new widget. */
96
- export interface FougereDashboardExtension {
97
- widget: string;
98
- component?: ComponentType;
99
- zone?: FougereDashboardZone;
100
- span?: number;
101
- hidden?: boolean;
102
- before?: string;
103
- after?: string;
104
- }
105
-
106
37
  export function applyDashboardExtensions(
107
38
  defaults: readonly FougereDashboardWidget[],
108
39
  extensions: readonly FougereDashboardExtension[] = [],
@@ -388,7 +319,7 @@ function UsersWidget(): ReactElement {
388
319
  * What the application IS, as opposed to what it holds.
389
320
  *
390
321
  * Every other widget counts rows; this one counts the shape that produced them —
391
- * fronds, doors, operations split by kind, and how wide each entity is. All of it comes
322
+ * fronds, facades, operations split by kind, and how wide each entity is. All of it comes
392
323
  * from the same card the menu was built from, so it costs no query at all.
393
324
  *
394
325
  * **Remotes are not in it, and the card is why.** `identityCardOf` maps `app.fronds`,
@@ -402,7 +333,7 @@ function StructureWidget(): ReactElement {
402
333
  const definitions = useResourceDefinitions();
403
334
 
404
335
  const structure = useMemo(() => {
405
- const byFrond = new Map<string, { doors: number; queries: number; commands: number; fields: number }>();
336
+ const byFrond = new Map<string, { facades: number; queries: number; commands: number; fields: number }>();
406
337
  let queries = 0;
407
338
  let commands = 0;
408
339
  let fields = 0;
@@ -414,9 +345,9 @@ function StructureWidget(): ReactElement {
414
345
  const c = ops.length - q;
415
346
  const width = options?.fieldCount ?? 0;
416
347
  queries += q; commands += c; fields += width;
417
- const held = byFrond.get(frond) ?? { doors: 0, queries: 0, commands: 0, fields: 0 };
348
+ const held = byFrond.get(frond) ?? { facades: 0, queries: 0, commands: 0, fields: 0 };
418
349
  byFrond.set(frond, {
419
- doors: held.doors + 1,
350
+ facades: held.facades + 1,
420
351
  queries: held.queries + q,
421
352
  commands: held.commands + c,
422
353
  fields: held.fields + width,
@@ -424,14 +355,14 @@ function StructureWidget(): ReactElement {
424
355
  }
425
356
  return {
426
357
  fronds: [...byFrond.entries()].map(([name, counts]) => ({ name, ...counts })),
427
- doors: Object.keys(definitions).length,
358
+ facades: Object.keys(definitions).length,
428
359
  queries, commands, fields,
429
360
  };
430
361
  }, [definitions]);
431
362
 
432
363
  const totals: [string, string, number][] = [
433
364
  ['structure.fronds', 'Fronds', structure.fronds.length],
434
- ['structure.doors', 'Doors', structure.doors],
365
+ ['structure.facades', 'Facades', structure.facades],
435
366
  ['structure.queries', 'Queries', structure.queries],
436
367
  ['structure.commands', 'Commands', structure.commands],
437
368
  ];
@@ -468,7 +399,7 @@ function StructureWidget(): ReactElement {
468
399
  <Box sx={{ minWidth: 0 }}>
469
400
  <Typography noWrap sx={{ fontWeight: 640 }}>{frond.name}</Typography>
470
401
  <Typography variant="caption" color="text.secondary">
471
- {t('structure.frondDoors', `${frond.doors} doors`, { smart_count: frond.doors })}
402
+ {t('structure.frondDoors', `${frond.facades} facades`, { smart_count: frond.facades })}
472
403
  {' · '}
473
404
  {t('structure.frondFields', `${frond.fields} fields`, { smart_count: frond.fields })}
474
405
  </Typography>
@@ -495,7 +426,7 @@ function CollectionsWidget(): ReactElement {
495
426
  const { loading, resources, navigate } = useFougereDashboard();
496
427
  return (
497
428
  <Card><CardContent sx={{ p: 2.5, '&:last-child': { pb: 2.5 } }}>
498
- <Typography variant="h5">{t('collections.title', 'Collections')}</Typography><Typography variant="body2" color="text.secondary" sx={{ mt: .4, mb: 2 }}>{t('collections.subtitle', 'Every door the card announced')}</Typography>
429
+ <Typography variant="h5">{t('collections.title', 'Collections')}</Typography><Typography variant="body2" color="text.secondary" sx={{ mt: .4, mb: 2 }}>{t('collections.subtitle', 'Every facade the card announced')}</Typography>
499
430
  <Box sx={{ display: 'grid', gridTemplateColumns: { xs: '1fr', sm: 'repeat(2,minmax(0,1fr))', lg: 'repeat(3,minmax(0,1fr))' }, gap: 1 }}>
500
431
  {loading ? [1, 2, 3].map((key) => <Skeleton key={key} height={58} />) : resources.map((resource) => (
501
432
  <Box key={resource.name} component="button" onClick={() => navigate('list', resource.name)} sx={{ appearance: 'none', width: '100%', display: 'flex', alignItems: 'center', gap: 1.5, p: 1.25, color: 'text.primary', bgcolor: 'transparent', border: 0, borderRadius: 2, textAlign: 'left', cursor: 'pointer', font: 'inherit', '&:hover': { bgcolor: 'action.hover' } }}>
package/src/index.ts CHANGED
@@ -1,9 +1,3 @@
1
- export {
2
- defineAdminExtension,
3
- type AdminExtension,
4
- } from './extensions.js';
5
- export {
6
- type TopologyReport,
7
- type FrondPlacement,
8
- type Edge,
9
- } from './topology.js';
1
+ export { defineAdminExtension, type AdminExtension } from './AdminExtension.js';
2
+ export { type FrondPlacement } from '@fougere/core';
3
+ export { type Edge, type TopologyReport } from '@fougere/core';
package/src/react.tsx CHANGED
@@ -1,3 +1,15 @@
1
+ export type { ReactAdminFieldContext } from './ReactAdminFieldContext.js';
2
+ export type { ReactAdminInputContext } from './ReactAdminInputContext.js';
3
+ export type { ReactAdminFieldRenderer } from './ReactAdminFieldRenderer.js';
4
+ export type { ReactAdminInputRenderer } from './ReactAdminInputRenderer.js';
5
+ export type { ReactAdminRenderers } from './ReactAdminRenderers.js';
6
+ export type { ReactAdminResourceComponents } from './ReactAdminResourceComponents.js';
7
+ export type { ResourceRenderOptions } from './ResourceRenderOptions.js';
8
+ export type { FougereAdminProps } from './FougereAdminProps.js';
9
+ import type { ReactAdminRenderers } from './ReactAdminRenderers.js';
10
+
11
+ import type { ResourceRenderOptions } from './ResourceRenderOptions.js';
12
+ import type { FougereAdminProps } from './FougereAdminProps.js';
1
13
  'use client';
2
14
  /**
3
15
  * The rendering half — a column becomes a field, a form field becomes an input.
@@ -16,24 +28,22 @@ import {
16
28
  } from 'react-admin';
17
29
  import { Route } from 'react-router-dom';
18
30
  import { Box, Button, Card, CardContent, Dialog, DialogActions, DialogContent, DialogTitle, TextField as MuiTextField, Typography } from '@mui/material';
19
- import { cloneElement, useMemo, useState, type ComponentProps, type ComponentType, type ReactElement } from 'react';
20
- import { createAdminRuntime } from './runtime.js';
21
- import type { AdminExtension } from './extensions.js';
22
- import { actionsOf, type AdminOperation, type AdminResource } from './resources.js';
23
- import type { EditorialFacet, UsersFacet } from './facets.js';
24
- import type { Fetcher } from '@fougere/app/client';
31
+ import { cloneElement, useMemo, useState, type ComponentProps, type ReactElement } from 'react';
32
+ import { createAdminRuntime } from './AdminRuntime.js';
33
+ import type { AdminExtension } from './AdminExtension.js';
34
+ import { type AdminOperation } from './AdminOperation.js';
35
+ import { actionsOf, type AdminResource } from './AdminResource.js';
36
+ import type { EditorialFacet } from './EditorialFacet.js';
37
+ import type { UsersFacet } from './UsersFacet.js';
38
+
25
39
  import { formFieldsOf, type FormField, type TableColumn } from '@fougere/app/client';
26
40
  import { Card as SchemaCard } from '@fougere/schema';
27
41
  import { FougereLayout, fougereDarkTheme, fougereLightTheme } from './theme.js';
28
42
  import { FougereTopology } from './topology-page.js';
29
43
  export { FougereTopology, type FougereTopologyProps } from './topology-page.js';
30
- import {
31
- FougereContentIcon,
32
- FougereDashboard,
33
- FougereUsersIcon,
34
- type FougereDashboardExtension,
35
- type FougereResourceOptions,
36
- } from './dashboard.js';
44
+
45
+ import { type FougereResourceOptions } from './FougereResourceOptions.js';
46
+ import { FougereContentIcon, FougereDashboard, FougereUsersIcon } from './dashboard.js';
37
47
 
38
48
  export {
39
49
  FougereAppBar,
@@ -42,21 +52,14 @@ export {
42
52
  fougereDarkTheme,
43
53
  fougereLightTheme,
44
54
  } from './theme.js';
45
- export {
46
- FOUGERE_DASHBOARD_WIDGETS,
47
- FougereContentIcon,
48
- FougereDashboard,
49
- FougereUsersIcon,
50
- applyDashboardExtensions,
51
- useFougereDashboard,
52
- type FougereDashboardContextValue,
53
- type FougereDashboardExtension,
54
- type FougereDashboardMetrics,
55
- type FougereDashboardResource,
56
- type FougereDashboardWidget,
57
- type FougereDashboardZone,
58
- type FougereResourceOptions,
59
- } from './dashboard.js';
55
+ export { type FougereDashboardContextValue } from './FougereDashboardContextValue.js';
56
+ export { type FougereDashboardExtension } from './FougereDashboardExtension.js';
57
+ export { type FougereDashboardMetrics } from './FougereDashboardMetrics.js';
58
+ export { type FougereDashboardResource } from './FougereDashboardResource.js';
59
+ export { type FougereDashboardWidget } from './FougereDashboardWidget.js';
60
+ export { type FougereDashboardZone } from './FougereDashboardZone.js';
61
+ export { type FougereResourceOptions } from './FougereResourceOptions.js';
62
+ export { FOUGERE_DASHBOARD_WIDGETS, FougereContentIcon, FougereDashboard, FougereUsersIcon, applyDashboardExtensions, useFougereDashboard } from './dashboard.js';
60
63
 
61
64
  const FIELDS = {
62
65
  text: TextField, number: NumberField, boolean: BooleanField, date: DateField,
@@ -143,41 +146,6 @@ function defaultInputFor(field: FormField, t: Translate): ReactElement {
143
146
  );
144
147
  }
145
148
 
146
- export interface ReactAdminFieldContext {
147
- resource: AdminResource;
148
- column: TableColumn;
149
- /** The maintained Fougere renderer. Call it to wrap rather than replace it. */
150
- defaultRender(): ReactElement;
151
- }
152
-
153
- export interface ReactAdminInputContext {
154
- resource: AdminResource;
155
- field: FormField;
156
- defaultRender(): ReactElement;
157
- }
158
-
159
- export type ReactAdminFieldRenderer = (context: ReactAdminFieldContext) => ReactElement;
160
- export type ReactAdminInputRenderer = (context: ReactAdminInputContext) => ReactElement;
161
-
162
- export interface ReactAdminRenderers {
163
- /** Exact `resource.field` keys. Unmentioned and future fields keep the default renderer. */
164
- fields?: Record<string, ReactAdminFieldRenderer>;
165
- inputs?: Record<string, ReactAdminInputRenderer>;
166
- }
167
-
168
- export interface ReactAdminResourceComponents {
169
- list?: ComponentType;
170
- show?: ComponentType;
171
- edit?: ComponentType;
172
- create?: ComponentType;
173
- icon?: ComponentType;
174
- }
175
-
176
- export interface ResourceRenderOptions {
177
- renderers?: ReactAdminRenderers;
178
- components?: ReactAdminResourceComponents;
179
- }
180
-
181
149
  function fieldFor(resource: AdminResource, column: TableColumn, t: Translate, renderers?: ReactAdminRenderers): ReactElement {
182
150
  const defaultRender = () => defaultFieldFor(column, t);
183
151
  const renderer = renderers?.fields?.[`${resource.name}.${column.name}`];
@@ -202,7 +170,7 @@ function inputFor(resource: AdminResource, field: FormField, t: Translate, rende
202
170
  * an article from the back-office.
203
171
  *
204
172
  * Three things are derived and none is declared per entity: WHICH ops (everything the
205
- * door serves beyond the five verbs), WHETHER it asks for input (`op.input` — then the
173
+ * facade serves beyond the five verbs), WHETHER it asks for input (`op.input` — then the
206
174
  * dialog's form is `formFieldsOf` over the reconstructed schema, the same projection an
207
175
  * ordinary form uses), and WHETHER it confirms (`op.confirm`, from an extension).
208
176
  */
@@ -286,7 +254,7 @@ function OperationButton({
286
254
  );
287
255
  }
288
256
 
289
- /** Row-level actions: the verbs the door serves, then everything else it serves. */
257
+ /** Row-level actions: the verbs the facade serves, then everything else it serves. */
290
258
  function RowActions({ resource }: { resource: AdminResource }): ReactElement {
291
259
  const actions = useMemo(() => actionsOf(resource.operations), [resource]);
292
260
  return (
@@ -304,9 +272,9 @@ const listFor = (r: AdminResource, renderers?: ReactAdminRenderers) => function
304
272
  const t = useTranslate();
305
273
  return (
306
274
  <List>
307
- {/* `can.delete` had no reader, so a door serving no `delete` still showed the
275
+ {/* `can.delete` had no reader, so a facade serving no `delete` still showed the
308
276
  selection checkboxes and the bulk Delete button — every one of them a 404. And
309
- a door serving `update` but not `findById` had an inert row. */}
277
+ a facade serving `update` but not `findById` had an inert row. */}
310
278
  <Datagrid
311
279
  rowClick={r.can.show ? 'show' : r.can.edit ? 'edit' : false}
312
280
  bulkActionButtons={r.can.delete ? undefined : false}
@@ -353,7 +321,7 @@ const createFor = (r: AdminResource, renderers?: ReactAdminRenderers) => functio
353
321
  return <Create><SimpleForm>{r.fields.map((field) => inputFor(r, field, t, renderers))}</SimpleForm></Create>;
354
322
  };
355
323
 
356
- /** One door, as the four pages the card says it serves. */
324
+ /** One facade, as the four pages the card says it serves. */
357
325
  export function resourceFor(r: AdminResource, options: ResourceRenderOptions = {}): ReactElement {
358
326
  const { renderers, components = {} } = options;
359
327
  const resourceOptions: FougereResourceOptions = {
@@ -403,17 +371,6 @@ export function resourceFor(r: AdminResource, options: ResourceRenderOptions = {
403
371
  */
404
372
  type BaseAdminProps = ComponentProps<typeof Admin>;
405
373
 
406
- export type FougereAdminProps = Omit<BaseAdminProps, 'children' | 'dataProvider'> & {
407
- endpoint?: string;
408
- fetcher?: Fetcher;
409
- extensions?: readonly AdminExtension[];
410
- renderers?: ReactAdminRenderers;
411
- /** Add, move, resize, replace or hide widgets without snapshotting the dashboard. */
412
- dashboardExtensions?: readonly FougereDashboardExtension[];
413
- /** Explicit page-level escape hatches, scoped to one resource and one view. */
414
- resourceComponents?: Record<string, ReactAdminResourceComponents>;
415
- };
416
-
417
374
  const EMPTY_EXTENSIONS: readonly AdminExtension[] = [];
418
375
 
419
376
  /**
@@ -498,7 +455,7 @@ export function FougereAdmin({
498
455
  components: resourceComponents?.[resource.name],
499
456
  })),
500
457
  /*
501
- * The one page that renders the APP rather than a door. It is not a resource —
458
+ * The one page that renders the APP rather than a facade. It is not a resource —
502
459
  * there is no row behind it — so it rides a route, and its data comes from
503
460
  * `rpc.topology` rather than from the card.
504
461
  */
package/src/theme.tsx CHANGED
@@ -501,7 +501,7 @@ const TopologyIcon = (props: SvgIconProps) => (
501
501
  );
502
502
 
503
503
  /**
504
- * The derived menu, plus the one entry that is not a door.
504
+ * The derived menu, plus the one entry that is not a facade.
505
505
  *
506
506
  * `Menu.ResourceItems` keeps the resources the card produced — the menu stays derived, and
507
507
  * this adds beside it rather than replacing it. The topology entry shows even when nothing
@@ -18,7 +18,9 @@ import { Box, Card, CardContent, Chip, Skeleton, Typography, type Theme } from '
18
18
  import { useEffect, useMemo, useState, type ReactElement } from 'react';
19
19
  import { Title, useTranslate } from 'react-admin';
20
20
  import { CALL_ENDPOINT, fetcher as browserFetcher, type Fetcher } from '@fougere/app/client';
21
- import { fetchTopology, figureOf, isOpaque, layoutOf, nodesOf, type Edge, type TopologyNode, type TopologyReport } from './topology.js';
21
+ import { type Edge, type TopologyReport } from '@fougere/core';
22
+ import { fetchTopology, figureOf, isOpaque, layoutOf, nodesOf } from './Drawing.js';
23
+ import { type TopologyNode } from './TopologyNode.js';
22
24
 
23
25
  /** What the page is: the report, the refusal that means "not observed", or a real failure. */
24
26
  type State =
@@ -197,7 +199,7 @@ function Graph({ nodes, selected, onSelect }: {
197
199
  <Typography variant="caption" color="text.secondary" sx={{ fontSize: 10.5 }}>
198
200
  {isOpaque(node)
199
201
  ? label('topology.elsewhere', 'elsewhere')
200
- : `${node.entities} · ${node.doors}`}
202
+ : `${node.entities} · ${node.facades}`}
201
203
  </Typography>
202
204
  )}
203
205
  {tone !== 'grey' && (
@@ -250,7 +252,7 @@ function FrondCard({ node }: { node: TopologyNode }): ReactElement {
250
252
  : isOpaque(node)
251
253
  ? label('topology.opaque', 'Its shape is published by the process that owns it.')
252
254
  : `${label('topology.entities', `${node.entities} entities`, { smart_count: node.entities })}`
253
- + ` · ${label('topology.doors', `${node.doors} doors`, { smart_count: node.doors })}`}
255
+ + ` · ${label('topology.facades', `${node.facades} facades`, { smart_count: node.facades })}`}
254
256
  </Typography>
255
257
  {node.calls.map((edge) => <EdgeLine key={`out-${edge.to}`} edge={edge} direction="out" />)}
256
258
  {node.calledBy.map((edge) => <EdgeLine key={`in-${edge.from}`} edge={edge} direction="in" />)}
@@ -0,0 +1,5 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head><meta charset="utf-8" /><title>Admin</title></head>
4
+ <body><div id="root"></div><script type="module" src="/src/main.tsx"></script></body>
5
+ </html>
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "fougere-app",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "vite",
7
+ "build": "vite build"
8
+ },
9
+ "dependencies": {
10
+ "@fougere/admin": "latest",
11
+ "@fougere/app": "latest",
12
+ "react": "^19.0.0",
13
+ "react-admin": "^5.15.1",
14
+ "react-dom": "^19.0.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/react": "^19.0.0",
18
+ "@types/react-dom": "^19.0.0",
19
+ "@vitejs/plugin-react": "^5.0.0",
20
+ "vite": "^8.0.0"
21
+ }
22
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The panel derives itself from the app it is pointed at.
3
+ *
4
+ * It asks `rpc.discover` on mount and builds the collections, their fields and the five CRUD
5
+ * operations from the identity card that comes back. Nothing below names an entity, a column
6
+ * or a form: add a frond to the app and its collection appears here on the next reload.
7
+ */
8
+ import { StrictMode } from 'react';
9
+ import { createRoot } from 'react-dom/client';
10
+ import { FougereAdmin } from '@fougere/admin/react';
11
+
12
+ /**
13
+ * No `endpoint`, so it stays `/_fougere/call` — a relative address the dev proxy in
14
+ * `vite.config.ts` forwards to the app next door.
15
+ *
16
+ * The integrated shape is the same component with nothing changed at all: mount it on a route
17
+ * of the app that serves the frond, and same-origin does the rest. Standalone against another
18
+ * host is one prop — `endpoint="https://shop.internal/_fougere/call"` — and the CORS that
19
+ * comes with crossing an origin.
20
+ */
21
+ function App() {
22
+ return <FougereAdmin title="Admin" />;
23
+ }
24
+
25
+ createRoot(document.getElementById('root')!).render(
26
+ <StrictMode><App /></StrictMode>,
27
+ );
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "Bundler",
6
+ "jsx": "react-jsx",
7
+ "strict": true,
8
+ "noEmit": true,
9
+ "types": ["node", "react"]
10
+ },
11
+ "include": ["src"]
12
+ }
@@ -0,0 +1,16 @@
1
+ import { defineConfig } from 'vite';
2
+ import react from '@vitejs/plugin-react';
3
+
4
+ /**
5
+ * No `@fougere/vite` here: this app scans nothing and boots nothing. It is a reader of one
6
+ * endpoint, and the only thing it needs is a way to reach it without crossing an origin.
7
+ *
8
+ * Point the proxy at whichever app serves your frond. In production the two are usually
9
+ * behind one host, and this block goes away.
10
+ */
11
+ export default defineConfig({
12
+ plugins: [react()],
13
+ server: {
14
+ proxy: { '/_fougere': 'http://localhost:3000' },
15
+ },
16
+ });
@@ -1 +0,0 @@
1
- {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuC,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACzF,OAAO,EAAoB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,cAAc;IAC7B,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACtD;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,CAAC,SAAS,cAAc,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAEpF;AAsDD,+FAA+F;AAC/F,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,aAAa,EAAE,EACnC,UAAU,GAAE,SAAS,cAAc,EAAO,GACzC,aAAa,EAAE,CAqBjB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"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"}
package/dist/facets.d.ts DELETED
@@ -1,36 +0,0 @@
1
- /** A semantic notion a renderer can act on, DECLARED — never guessed. */
2
- export interface EditorialFacet {
3
- /** The field that carries the human-readable title. */
4
- title: string;
5
- /** The lifecycle vocabulary, grouped by meaning rather than by raw enum value. */
6
- state?: {
7
- field: string;
8
- draft?: readonly string[];
9
- published?: readonly string[];
10
- };
11
- createdAt?: string;
12
- updatedAt?: string;
13
- }
14
- export interface UsersFacet {
15
- name: string;
16
- email?: string;
17
- role?: string;
18
- state?: {
19
- field: string;
20
- active?: readonly string[];
21
- invited?: readonly string[];
22
- suspended?: readonly string[];
23
- };
24
- createdAt?: string;
25
- }
26
- /** Open registry of the semantic projections renderers understand. */
27
- export interface AdminFacetRegistry {
28
- editorial: EditorialFacet;
29
- users: UsersFacet;
30
- [facet: string]: unknown;
31
- }
32
- export type AdminFacets = Partial<AdminFacetRegistry>;
33
- export declare function defineAdminFacet<const Name extends string, const Value>(name: Name, value: Value): Record<Name, Value>;
34
- /** Arrays replace; semantic objects merge recursively so small project deltas stay small. */
35
- export declare function mergeAdminFacets(base: AdminFacets, patch: AdminFacets): AdminFacets;
36
- //# sourceMappingURL=facets.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"facets.d.ts","sourceRoot":"","sources":["../src/facets.ts"],"names":[],"mappings":"AACA,yEAAyE;AAEzE,MAAM,WAAW,cAAc;IAC7B,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,kFAAkF;IAClF,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC1B,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC5B,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,sEAAsE;AACtE,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEtD,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,KAAK,CAAC,KAAK,EACrE,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,GACX,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAErB;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,WAAW,CAQnF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"facets.js","sourceRoot":"","sources":["../src/facets.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAsC3C,MAAM,UAAU,gBAAgB,CAC9B,IAAU,EACV,KAAY;IAEZ,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAyB,CAAC;AAClD,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,gBAAgB,CAAC,IAAiB,EAAE,KAAkB;IACpE,MAAM,KAAK,GAAG,CAAC,IAAa,EAAE,KAAc,EAAW,EAAE;QACvD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACtD,MAAM,GAAG,GAA4B,EAAE,GAAG,IAAI,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;QACpF,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,CAAgB,CAAC;AAC3C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAc,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,iFAAiF;AACjF,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC5C,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,sDAAsD;AACtD,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,EAAE,WAAW,CAAC;IACpB,kEAAkE;IAClE,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,4EAA4E;IAC5E,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,+DAA+D;IAC/D,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B;;;OAGG;IACH,GAAG,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;CACxF;AAOD;;;GAGG;AACH,eAAO,MAAM,QAAQ,YAAI,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAEpF,iGAAiG;AACjG,wBAAgB,SAAS,CAAC,UAAU,EAAE,SAAS,cAAc,EAAE,GAAG,cAAc,EAAE,CAEjF;AAED,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,UAAU,EAAE,SAAS,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CASxG;AAED,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,EAAE,CA4B/D;AAED,kFAAkF;AAClF,wBAAgB,MAAM,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAE9E;AAED,yCAAyC;AACzC,wBAAsB,SAAS,CAC7B,QAAQ,SAAgB,EACxB,OAAO,GAAE,OAAwB,GAChC,OAAO,CAAC,YAAY,CAAC,CAOvB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}