@nocobase/app-plugin-foundation 0.0.0-stage → 0.1.0-beta.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 (220) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +86 -2
  3. package/dist/cli/index.d.ts +4 -0
  4. package/dist/cli/index.d.ts.map +1 -0
  5. package/dist/cli/index.js +16 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/cli/module-manifest.d.ts +9 -0
  8. package/dist/cli/module-manifest.d.ts.map +1 -0
  9. package/dist/cli/module-manifest.js +12 -0
  10. package/dist/cli/module-manifest.js.map +1 -0
  11. package/dist/client/api.d.ts +17 -0
  12. package/dist/client/api.d.ts.map +1 -0
  13. package/dist/client/api.js +51 -0
  14. package/dist/client/api.js.map +1 -0
  15. package/dist/client/business-modules.d.ts +5 -0
  16. package/dist/client/business-modules.d.ts.map +1 -0
  17. package/dist/client/business-modules.js +81 -0
  18. package/dist/client/business-modules.js.map +1 -0
  19. package/dist/client/components/capability-icons.d.ts +4 -0
  20. package/dist/client/components/capability-icons.d.ts.map +1 -0
  21. package/dist/client/components/capability-icons.js +17 -0
  22. package/dist/client/components/capability-icons.js.map +1 -0
  23. package/dist/client/components/format.d.ts +7 -0
  24. package/dist/client/components/format.d.ts.map +1 -0
  25. package/dist/client/components/format.js +42 -0
  26. package/dist/client/components/format.js.map +1 -0
  27. package/dist/client/components/foundation-page.d.ts +15 -0
  28. package/dist/client/components/foundation-page.d.ts.map +1 -0
  29. package/dist/client/components/foundation-page.js +207 -0
  30. package/dist/client/components/foundation-page.js.map +1 -0
  31. package/dist/client/components/foundation-translation.d.ts +12 -0
  32. package/dist/client/components/foundation-translation.d.ts.map +1 -0
  33. package/dist/client/components/foundation-translation.js +19 -0
  34. package/dist/client/components/foundation-translation.js.map +1 -0
  35. package/dist/client/components/module-matrix.d.ts +9 -0
  36. package/dist/client/components/module-matrix.d.ts.map +1 -0
  37. package/dist/client/components/module-matrix.js +56 -0
  38. package/dist/client/components/module-matrix.js.map +1 -0
  39. package/dist/client/components/ui/button.d.ts +8 -0
  40. package/dist/client/components/ui/button.d.ts.map +1 -0
  41. package/dist/client/components/ui/button.js +35 -0
  42. package/dist/client/components/ui/button.js.map +1 -0
  43. package/dist/client/components/ui/collapsible.d.ts +7 -0
  44. package/dist/client/components/ui/collapsible.d.ts.map +1 -0
  45. package/dist/client/components/ui/collapsible.js +13 -0
  46. package/dist/client/components/ui/collapsible.js.map +1 -0
  47. package/dist/client/components/ui/table.d.ts +11 -0
  48. package/dist/client/components/ui/table.d.ts.map +1 -0
  49. package/dist/client/components/ui/table.js +28 -0
  50. package/dist/client/components/ui/table.js.map +1 -0
  51. package/dist/client/index.d.ts +6 -0
  52. package/dist/client/index.d.ts.map +1 -0
  53. package/dist/client/index.js +7 -0
  54. package/dist/client/index.js.map +1 -0
  55. package/dist/client/locales/de-DE.d.ts +4 -0
  56. package/dist/client/locales/de-DE.d.ts.map +1 -0
  57. package/dist/client/locales/de-DE.js +315 -0
  58. package/dist/client/locales/de-DE.js.map +1 -0
  59. package/dist/client/locales/en-US.d.ts +317 -0
  60. package/dist/client/locales/en-US.d.ts.map +1 -0
  61. package/dist/client/locales/en-US.js +315 -0
  62. package/dist/client/locales/en-US.js.map +1 -0
  63. package/dist/client/locales/es-ES.d.ts +4 -0
  64. package/dist/client/locales/es-ES.d.ts.map +1 -0
  65. package/dist/client/locales/es-ES.js +316 -0
  66. package/dist/client/locales/es-ES.js.map +1 -0
  67. package/dist/client/locales/fr-FR.d.ts +4 -0
  68. package/dist/client/locales/fr-FR.d.ts.map +1 -0
  69. package/dist/client/locales/fr-FR.js +316 -0
  70. package/dist/client/locales/fr-FR.js.map +1 -0
  71. package/dist/client/locales/id-ID.d.ts +4 -0
  72. package/dist/client/locales/id-ID.d.ts.map +1 -0
  73. package/dist/client/locales/id-ID.js +315 -0
  74. package/dist/client/locales/id-ID.js.map +1 -0
  75. package/dist/client/locales/index.d.ts +4 -0
  76. package/dist/client/locales/index.d.ts.map +1 -0
  77. package/dist/client/locales/index.js +14 -0
  78. package/dist/client/locales/index.js.map +1 -0
  79. package/dist/client/locales/ja-JP.d.ts +4 -0
  80. package/dist/client/locales/ja-JP.d.ts.map +1 -0
  81. package/dist/client/locales/ja-JP.js +315 -0
  82. package/dist/client/locales/ja-JP.js.map +1 -0
  83. package/dist/client/locales/pt-BR.d.ts +4 -0
  84. package/dist/client/locales/pt-BR.d.ts.map +1 -0
  85. package/dist/client/locales/pt-BR.js +316 -0
  86. package/dist/client/locales/pt-BR.js.map +1 -0
  87. package/dist/client/locales/vi-VN.d.ts +4 -0
  88. package/dist/client/locales/vi-VN.d.ts.map +1 -0
  89. package/dist/client/locales/vi-VN.js +315 -0
  90. package/dist/client/locales/vi-VN.js.map +1 -0
  91. package/dist/client/locales/zh-CN.d.ts +4 -0
  92. package/dist/client/locales/zh-CN.d.ts.map +1 -0
  93. package/dist/client/locales/zh-CN.js +315 -0
  94. package/dist/client/locales/zh-CN.js.map +1 -0
  95. package/dist/client/locales/zh-TW.d.ts +4 -0
  96. package/dist/client/locales/zh-TW.d.ts.map +1 -0
  97. package/dist/client/locales/zh-TW.js +315 -0
  98. package/dist/client/locales/zh-TW.js.map +1 -0
  99. package/dist/client/navigation.d.ts +8 -0
  100. package/dist/client/navigation.d.ts.map +1 -0
  101. package/dist/client/navigation.js +21 -0
  102. package/dist/client/navigation.js.map +1 -0
  103. package/dist/client/plugin.d.ts +11 -0
  104. package/dist/client/plugin.d.ts.map +1 -0
  105. package/dist/client/plugin.js +10 -0
  106. package/dist/client/plugin.js.map +1 -0
  107. package/dist/client/provider-inventory.d.ts +6 -0
  108. package/dist/client/provider-inventory.d.ts.map +1 -0
  109. package/dist/client/provider-inventory.js +49 -0
  110. package/dist/client/provider-inventory.js.map +1 -0
  111. package/dist/client/routes.d.ts +18 -0
  112. package/dist/client/routes.d.ts.map +1 -0
  113. package/dist/client/routes.js +41 -0
  114. package/dist/client/routes.js.map +1 -0
  115. package/dist/package.d.ts +2 -0
  116. package/dist/package.d.ts.map +1 -0
  117. package/dist/package.js +2 -0
  118. package/dist/package.js.map +1 -0
  119. package/dist/server/capabilities/data.d.ts +7 -0
  120. package/dist/server/capabilities/data.d.ts.map +1 -0
  121. package/dist/server/capabilities/data.js +108 -0
  122. package/dist/server/capabilities/data.js.map +1 -0
  123. package/dist/server/capabilities/index.d.ts +5 -0
  124. package/dist/server/capabilities/index.d.ts.map +1 -0
  125. package/dist/server/capabilities/index.js +24 -0
  126. package/dist/server/capabilities/index.js.map +1 -0
  127. package/dist/server/capabilities/intelligence.d.ts +4 -0
  128. package/dist/server/capabilities/intelligence.d.ts.map +1 -0
  129. package/dist/server/capabilities/intelligence.js +97 -0
  130. package/dist/server/capabilities/intelligence.js.map +1 -0
  131. package/dist/server/capabilities/messaging.d.ts +4 -0
  132. package/dist/server/capabilities/messaging.d.ts.map +1 -0
  133. package/dist/server/capabilities/messaging.js +108 -0
  134. package/dist/server/capabilities/messaging.js.map +1 -0
  135. package/dist/server/capabilities/people.d.ts +4 -0
  136. package/dist/server/capabilities/people.d.ts.map +1 -0
  137. package/dist/server/capabilities/people.js +151 -0
  138. package/dist/server/capabilities/people.js.map +1 -0
  139. package/dist/server/capabilities/platform.d.ts +10 -0
  140. package/dist/server/capabilities/platform.d.ts.map +1 -0
  141. package/dist/server/capabilities/platform.js +143 -0
  142. package/dist/server/capabilities/platform.js.map +1 -0
  143. package/dist/server/capabilities/processes.d.ts +3 -0
  144. package/dist/server/capabilities/processes.d.ts.map +1 -0
  145. package/dist/server/capabilities/processes.js +86 -0
  146. package/dist/server/capabilities/processes.js.map +1 -0
  147. package/dist/server/capabilities/types.d.ts +38 -0
  148. package/dist/server/capabilities/types.d.ts.map +1 -0
  149. package/dist/server/capabilities/types.js +23 -0
  150. package/dist/server/capabilities/types.js.map +1 -0
  151. package/dist/server/catalog.d.ts +3 -0
  152. package/dist/server/catalog.d.ts.map +1 -0
  153. package/dist/server/catalog.js +44 -0
  154. package/dist/server/catalog.js.map +1 -0
  155. package/dist/server/index.d.ts +6 -0
  156. package/dist/server/index.d.ts.map +1 -0
  157. package/dist/server/index.js +5 -0
  158. package/dist/server/index.js.map +1 -0
  159. package/dist/server/inventory.d.ts +48 -0
  160. package/dist/server/inventory.d.ts.map +1 -0
  161. package/dist/server/inventory.js +158 -0
  162. package/dist/server/inventory.js.map +1 -0
  163. package/dist/server/module-manifest.d.ts +10 -0
  164. package/dist/server/module-manifest.d.ts.map +1 -0
  165. package/dist/server/module-manifest.js +65 -0
  166. package/dist/server/module-manifest.js.map +1 -0
  167. package/dist/server/module-sources.d.ts +5 -0
  168. package/dist/server/module-sources.d.ts.map +1 -0
  169. package/dist/server/module-sources.js +535 -0
  170. package/dist/server/module-sources.js.map +1 -0
  171. package/dist/server/packages.d.ts +18 -0
  172. package/dist/server/packages.d.ts.map +1 -0
  173. package/dist/server/packages.js +62 -0
  174. package/dist/server/packages.js.map +1 -0
  175. package/dist/server/plugin.d.ts +4 -0
  176. package/dist/server/plugin.d.ts.map +1 -0
  177. package/dist/server/plugin.js +12 -0
  178. package/dist/server/plugin.js.map +1 -0
  179. package/dist/server/provider-inventory.d.ts +13 -0
  180. package/dist/server/provider-inventory.d.ts.map +1 -0
  181. package/dist/server/provider-inventory.js +180 -0
  182. package/dist/server/provider-inventory.js.map +1 -0
  183. package/dist/server/providers/foundation.d.ts +7 -0
  184. package/dist/server/providers/foundation.d.ts.map +1 -0
  185. package/dist/server/providers/foundation.js +24 -0
  186. package/dist/server/providers/foundation.js.map +1 -0
  187. package/dist/server/providers/index.d.ts +4 -0
  188. package/dist/server/providers/index.d.ts.map +1 -0
  189. package/dist/server/providers/index.js +6 -0
  190. package/dist/server/providers/index.js.map +1 -0
  191. package/dist/server/routes/index.d.ts +6 -0
  192. package/dist/server/routes/index.d.ts.map +1 -0
  193. package/dist/server/routes/index.js +54 -0
  194. package/dist/server/routes/index.js.map +1 -0
  195. package/dist/server/routes/schemas.d.ts +7 -0
  196. package/dist/server/routes/schemas.d.ts.map +1 -0
  197. package/dist/server/routes/schemas.js +138 -0
  198. package/dist/server/routes/schemas.js.map +1 -0
  199. package/dist/server/services/foundation.d.ts +37 -0
  200. package/dist/server/services/foundation.d.ts.map +1 -0
  201. package/dist/server/services/foundation.js +175 -0
  202. package/dist/server/services/foundation.js.map +1 -0
  203. package/dist/server/source-evidence.d.ts +19 -0
  204. package/dist/server/source-evidence.d.ts.map +1 -0
  205. package/dist/server/source-evidence.js +169 -0
  206. package/dist/server/source-evidence.js.map +1 -0
  207. package/dist/server/tokens.d.ts +12 -0
  208. package/dist/server/tokens.d.ts.map +1 -0
  209. package/dist/server/tokens.js +3 -0
  210. package/dist/server/tokens.js.map +1 -0
  211. package/dist/shared/available-capabilities.d.ts +6 -0
  212. package/dist/shared/available-capabilities.d.ts.map +1 -0
  213. package/dist/shared/available-capabilities.js +66 -0
  214. package/dist/shared/available-capabilities.js.map +1 -0
  215. package/dist/shared/foundation.d.ts +142 -0
  216. package/dist/shared/foundation.d.ts.map +1 -0
  217. package/dist/shared/foundation.js +39 -0
  218. package/dist/shared/foundation.js.map +1 -0
  219. package/package.json +106 -3
  220. package/skills/nocobase-app-plugin-foundation/SKILL.md +68 -0
@@ -0,0 +1,207 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useClientApplication } from '@nocobase/app-client';
3
+ import { cn } from 'cn';
4
+ import { Layers, Package, Plug, RefreshCw, TriangleAlert } from 'lucide-react';
5
+ import { useCallback, useEffect, useMemo, useState, } from 'react';
6
+ import { FOUNDATION_HIGHLIGHTS, } from '../../shared/foundation.js';
7
+ import { withAvailableCapabilities } from '../../shared/available-capabilities.js';
8
+ import { businessModules } from '../business-modules.js';
9
+ import { Button } from './ui/button.js';
10
+ import { ModuleMatrix } from './module-matrix.js';
11
+ import { useFoundationTranslation } from './foundation-translation.js';
12
+ import { useFoundationOverview } from '../api.js';
13
+ import { clientProviderNames, withClientProviders, } from '../provider-inventory.js';
14
+ import { CAPABILITY_ICONS } from './capability-icons.js';
15
+ import { formatFactParams, formatMetricValue, formatTime } from './format.js';
16
+ /** How long each capability takes to light up. */
17
+ const LIGHT_STEP_MS = 140;
18
+ function prefersReducedMotion() {
19
+ return (typeof window !== 'undefined' &&
20
+ typeof window.matchMedia === 'function' &&
21
+ window.matchMedia('(prefers-reduced-motion: reduce)').matches);
22
+ }
23
+ /**
24
+ * Lights the active capabilities one after another when an overview arrives. With reduced motion everything is lit
25
+ * at once.
26
+ */
27
+ function useLighting(activeCount, runKey) {
28
+ const reduced = prefersReducedMotion();
29
+ const [state, setState] = useState({ runKey, step: 0 });
30
+ // A new result lights up from the start again: adjusting state while rendering, as React recommends over an effect.
31
+ if (state.runKey !== runKey)
32
+ setState({ runKey, step: 0 });
33
+ useEffect(() => {
34
+ if (reduced || activeCount === 0)
35
+ return undefined;
36
+ let step = 0;
37
+ const timer = setInterval(() => {
38
+ step += 1;
39
+ setState((current) => ({ ...current, step }));
40
+ if (step >= activeCount)
41
+ clearInterval(timer);
42
+ }, LIGHT_STEP_MS);
43
+ return () => clearInterval(timer);
44
+ }, [activeCount, runKey, reduced]);
45
+ return {
46
+ lit: reduced ? activeCount : Math.min(state.step, activeCount),
47
+ };
48
+ }
49
+ export function FoundationPage() {
50
+ const { t } = useFoundationTranslation();
51
+ const app = useClientApplication();
52
+ const { overview, error, loading, refresh } = useFoundationOverview();
53
+ return (_jsxs("div", { className: 'mx-auto flex w-full max-w-7xl flex-col gap-4 p-4 md:p-6', children: [_jsxs("header", { className: 'flex flex-col gap-1', children: [_jsx("h1", { className: 'font-heading text-2xl font-semibold', children: t('page.title') }), _jsx("p", { className: 'max-w-3xl text-sm text-muted-foreground', children: t('page.description') })] }), overview && error !== 'forbidden' ? (_jsxs(_Fragment, { children: [error === 'failed' ? (_jsx("p", { role: 'alert', className: 'rounded-lg border border-amber-500/30 bg-amber-500/5 px-4 py-3 text-sm text-foreground', children: t('page.refreshFailed') })) : null, _jsx(FoundationOverviewView, { overview: overview, clientProviders: clientProviderNames(app), registeredRoutes: app.runtime.routes, refreshing: loading, onRefresh: refresh })] })) : error ? (_jsxs("div", { role: 'alert', className: 'flex flex-col items-start gap-3 rounded-lg border bg-card p-6 text-sm', children: [_jsx("p", { children: t(error === 'forbidden' ? 'page.forbidden' : 'page.loadFailed') }), error === 'failed' ? (_jsx("button", { type: 'button', onClick: refresh, className: 'rounded-md border border-input px-3 py-1.5 hover:bg-hover', children: t('page.retry') })) : null] })) : (_jsx("p", { className: 'rounded-lg border bg-card p-6 text-sm text-muted-foreground', children: t('page.loading') }))] }));
54
+ }
55
+ /** The band, the key numbers and the selected capability's details, for a page that loads the overview itself. */
56
+ export function FoundationOverviewView({ overview: serverOverview, refreshing = false, onRefresh, clientProviders = [], registeredRoutes = [], }) {
57
+ const { t, locale, text } = useFoundationTranslation();
58
+ const overview = useMemo(() => {
59
+ const resolved = serverOverview.inventory
60
+ ? withAvailableCapabilities(serverOverview, withClientProviders(serverOverview.inventory, clientProviders))
61
+ : serverOverview;
62
+ return {
63
+ ...resolved,
64
+ capabilities: resolved.availableCapabilities ?? resolved.capabilities,
65
+ };
66
+ }, [serverOverview, clientProviders]);
67
+ const active = useMemo(() => overview.capabilities.filter((entry) => entry.status === 'active'), [overview]);
68
+ const { lit } = useLighting(active.length, overview.checkedAt);
69
+ const [selected, setSelected] = useState(() => active[0]?.key ?? overview.capabilities[0]?.key ?? 'dataModeling');
70
+ const counts = useMemo(() => countStatuses(overview), [overview]);
71
+ const modules = useMemo(() => businessModules(registeredRoutes, overview.inventory, overview.moduleSources, overview.capabilities.map((entry) => entry.key)), [registeredRoutes, overview]);
72
+ const [focusedModule, setFocusedModule] = useState(null);
73
+ const focused = modules.find((module) => module.id === focusedModule);
74
+ const focusKeys = focused
75
+ ? new Set(focused.links.map((link) => link.capability))
76
+ : undefined;
77
+ const selectedCapability = overview.capabilities.find((entry) => entry.key === selected) ??
78
+ overview.capabilities[0];
79
+ if (selectedCapability && selected !== selectedCapability.key)
80
+ setSelected(selectedCapability.key);
81
+ const select = useCallback((key) => {
82
+ setSelected(key);
83
+ document
84
+ .getElementById('foundation-capability-detail')
85
+ ?.scrollIntoView?.({ block: 'nearest', behavior: 'smooth' });
86
+ }, []);
87
+ return (_jsxs(_Fragment, { children: [_jsxs("section", { "aria-labelledby": 'foundation-band-title', className: 'overflow-hidden rounded-xl border bg-card text-card-foreground', children: [_jsxs("div", { className: 'flex flex-wrap items-end justify-between gap-4 p-4 md:p-5', children: [_jsxs("div", { className: 'flex min-w-0 flex-col gap-1', children: [_jsxs("h2", { id: 'foundation-band-title', className: 'flex items-center gap-2 font-heading text-base font-medium', children: [_jsx(Layers, { className: 'size-4 text-primary', "aria-hidden": true }), t('page.bandTitle')] }), _jsx("p", { className: 'text-sm text-muted-foreground', children: t('page.bandDescription') })] }), _jsxs("div", { className: 'flex items-end gap-3', children: [_jsxs("div", { className: 'text-right', children: [_jsx("p", { className: 'font-heading text-4xl font-semibold tabular-nums', "aria-live": 'polite', children: t('page.score', {
88
+ active: Math.min(lit, active.length),
89
+ total: overview.capabilities.length,
90
+ }) }), _jsx("p", { className: 'text-sm text-muted-foreground', children: t('page.scoreCaption') })] }), _jsx("div", { className: 'flex gap-2', children: onRefresh ? (_jsxs("button", { type: 'button', onClick: onRefresh, disabled: refreshing, className: 'inline-flex items-center gap-1.5 rounded-md border border-input bg-background px-2.5 py-1.5 text-sm hover:bg-hover disabled:opacity-60', children: [_jsx(RefreshCw, { className: cn('size-3.5', refreshing && 'motion-safe:animate-spin'), "aria-hidden": true }), t(refreshing ? 'page.refreshing' : 'page.refresh')] })) : null })] })] }), _jsx(CapabilityBand, { capabilities: overview.capabilities, active: active, lit: lit, selected: selected, onSelect: select, focusKeys: focusKeys }), modules.length ? (_jsxs("div", { "aria-label": t('matrix.modules'), className: 'flex flex-wrap items-center gap-2 border-t px-4 py-3 md:px-5', children: [_jsx("span", { className: 'mr-1 text-xs text-muted-foreground', children: t('matrix.modules') }), modules.map((module) => (_jsxs(Button, { variant: 'outline', size: 'xs', "aria-pressed": module.id === focusedModule, className: cn('h-7! rounded-full! border-border bg-card px-3 text-sm font-normal shadow-none', module.id === focusedModule &&
91
+ 'border-primary/40 bg-primary/10 text-primary'), onMouseEnter: () => setFocusedModule(module.id), onMouseLeave: () => setFocusedModule(null), onFocus: () => setFocusedModule(module.id), onBlur: () => setFocusedModule(null), onClick: () => setFocusedModule(module.id), children: [text(module.title), ' ', _jsx("span", { className: 'tabular-nums text-muted-foreground', children: module.links.length })] }, module.id)))] })) : null, _jsxs("div", { className: 'flex flex-wrap items-center justify-between gap-x-6 gap-y-2 border-t px-4 py-3 text-xs text-muted-foreground md:px-5', children: [_jsxs("ul", { className: 'flex flex-wrap gap-x-4 gap-y-1', children: [_jsx(LegendItem, { status: 'active', label: t('status.legendActive', { count: counts.active }) }), _jsx(LegendItem, { status: 'needsSetup', label: t('status.legendNeedsSetup', { count: counts.needsSetup }) }), _jsx(LegendItem, { status: 'unused', label: t('status.legendUnused', { count: counts.unused }) }), counts.undetermined > 0 ? (_jsxs("li", { className: 'flex items-center gap-1.5 text-foreground', children: [_jsx(TriangleAlert, { className: 'size-3.5 text-destructive', "aria-hidden": true }), t('page.undetermined', { count: counts.undetermined })] })) : null] }), _jsx("span", { children: t('page.updatedAt', {
92
+ time: formatTime(overview.checkedAt, locale),
93
+ }) })] })] }), _jsx(Highlights, { overview: overview, onSelect: select }), selectedCapability ? (_jsx(CapabilityDetail, { capability: selectedCapability, inventory: overview.inventory, modules: modules.filter((module) => module.links.some((link) => link.capability === selectedCapability.key)) })) : null, _jsx(ModuleMatrix, { modules: modules, capabilities: overview.capabilities, onSelect: setSelected, onFocusModule: setFocusedModule })] }));
94
+ }
95
+ function countStatuses(overview) {
96
+ const counts = { active: 0, needsSetup: 0, unused: 0, undetermined: 0 };
97
+ for (const entry of overview.capabilities)
98
+ counts[entry.status ?? 'undetermined'] += 1;
99
+ return counts;
100
+ }
101
+ function LegendItem({ status, label, }) {
102
+ return (_jsxs("li", { className: 'flex items-center gap-1.5', children: [_jsx("span", { "aria-hidden": true, className: cn('size-3 rounded-full border', status === 'active' && 'border-primary/40 bg-primary/15', status === 'needsSetup' && 'border-amber-500/50 bg-amber-500/15', status === 'unused' && 'border-border bg-background') }), label] }));
103
+ }
104
+ function CapabilityBand({ capabilities, active, lit, selected, onSelect, focusKeys, }) {
105
+ const { t, text } = useFoundationTranslation();
106
+ const lighting = lit < active.length ? active[lit - 1]?.key : undefined;
107
+ return (_jsx("ul", { className: 'grid grid-cols-3 border-t sm:grid-cols-5 lg:grid-cols-[repeat(auto-fit,minmax(88px,1fr))]', children: capabilities.map((capability) => {
108
+ const Icon = CAPABILITY_ICONS[capability.key] ?? Plug;
109
+ const order = active.findIndex((entry) => entry.key === capability.key);
110
+ const isLit = order !== -1 && order < lit;
111
+ const highlighted = capability.key === selected || capability.key === lighting;
112
+ const look = highlighted
113
+ ? 'lighting'
114
+ : capability.status === null
115
+ ? capability.reason === 'unrecognizedExtension'
116
+ ? 'off'
117
+ : 'undetermined'
118
+ : isLit
119
+ ? 'lit'
120
+ : capability.status === 'needsSetup'
121
+ ? 'needsSetup'
122
+ : 'off';
123
+ const name = capability.title
124
+ ? text(capability.title)
125
+ : t(`capabilities.${capability.key}.name`);
126
+ const status = t(capability.reason === 'unrecognizedExtension'
127
+ ? 'dynamic.pending'
128
+ : `status.${capability.status ?? 'undetermined'}`);
129
+ return (_jsx("li", { className: cn('-mb-px -mr-px border-b border-r transition-opacity', focusKeys && !focusKeys.has(capability.key) && 'opacity-25'), children: _jsxs("button", { type: 'button', onClick: () => onSelect(capability.key), "aria-pressed": capability.key === selected, "aria-label": `${name}: ${status}`, title: status, "data-status": capability.status ?? 'undetermined', className: cn('relative flex h-full min-h-20 w-full flex-col items-center justify-center gap-1.5 px-1 py-3 text-center text-xs transition-colors duration-300 motion-reduce:transition-none focus-visible:z-10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset sm:text-sm', look === 'lighting' && 'bg-primary text-primary-foreground', look === 'lit' &&
130
+ 'bg-primary/10 text-primary hover:bg-primary/15', look === 'needsSetup' &&
131
+ 'bg-amber-500/10 text-amber-700 hover:bg-amber-500/15 dark:text-amber-400', look === 'off' &&
132
+ 'bg-card text-muted-foreground hover:bg-hover', look === 'undetermined' &&
133
+ 'bg-card text-muted-foreground outline-1 -outline-offset-4 outline-dashed outline-destructive/40 hover:bg-hover', capability.key === selected &&
134
+ 'z-10 ring-2 ring-inset ring-primary'), children: [_jsx(Icon, { className: 'size-5', "aria-hidden": true }), _jsx("span", { className: 'max-w-full break-words leading-tight', children: name }), capability.status === null &&
135
+ capability.reason !== 'unrecognizedExtension' ? (_jsx(TriangleAlert, { className: 'absolute right-1.5 top-1.5 size-3.5 text-destructive', "aria-hidden": true })) : null] }) }, capability.key));
136
+ }) }));
137
+ }
138
+ function Highlights({ overview, onSelect, }) {
139
+ const { t, locale } = useFoundationTranslation();
140
+ return (_jsx("section", { "aria-label": t('page.highlightsLabel'), children: _jsx("ul", { className: 'grid grid-cols-2 gap-3 md:grid-cols-3 xl:grid-cols-6', children: FOUNDATION_HIGHLIGHTS.filter(({ capability }) => overview.capabilities.some((entry) => entry.key === capability)).map(({ capability: key, metric: metricKey }) => {
141
+ const capability = overview.capabilities.find((entry) => entry.key === key);
142
+ const metric = capability?.metrics.find((entry) => entry.key === metricKey);
143
+ const value = metric === undefined
144
+ ? undefined
145
+ : formatMetricValue(metric, locale);
146
+ return (_jsx("li", { children: _jsxs("button", { type: 'button', onClick: () => onSelect(key), className: 'flex h-full w-full flex-col items-start gap-1 rounded-xl border bg-card p-4 text-left hover:bg-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', children: [_jsx("span", { className: cn('font-heading text-2xl font-semibold tabular-nums', value === undefined &&
147
+ 'text-base font-normal text-muted-foreground'), title: metric && !metric.complete && metric.value !== null
148
+ ? t('page.lowerBound')
149
+ : undefined, children: value === undefined
150
+ ? capability?.status === 'unused' ||
151
+ capability?.status === 'needsSetup'
152
+ ? t(`status.${capability.status}`)
153
+ : t('page.unavailable')
154
+ : metric && !metric.complete
155
+ ? `≥ ${value}`
156
+ : value }), _jsx("span", { className: 'text-sm text-muted-foreground', children: t(`metrics.${metricKey}`) }), _jsx("span", { className: 'text-sm text-primary', children: t(`capabilities.${key}.name`) })] }) }, `${key}.${metricKey}`));
157
+ }) }) }));
158
+ }
159
+ function StatusBadge({ status, pending = false, }) {
160
+ const { t } = useFoundationTranslation();
161
+ return (_jsx("span", { className: cn('rounded-md border px-1.5 py-0.5 text-xs font-medium', status === 'active' && 'border-primary/30 bg-primary/10 text-primary', status === 'needsSetup' &&
162
+ 'border-amber-500/40 bg-amber-500/10 text-amber-700 dark:text-amber-400', status === 'unused' && 'text-muted-foreground', status === null &&
163
+ (pending
164
+ ? 'border-border text-muted-foreground'
165
+ : 'border-destructive/40 text-destructive')), children: t(pending ? 'dynamic.pending' : `status.${status ?? 'undetermined'}`) }));
166
+ }
167
+ function CapabilityDetail({ capability, modules, inventory, }) {
168
+ const { t, word, text, locale } = useFoundationTranslation();
169
+ const Icon = CAPABILITY_ICONS[capability.key] ?? Plug;
170
+ const base = `capabilities.${capability.key}`;
171
+ const relatedPackages = new Map(capability.packages.map((entry) => [entry.name, entry]));
172
+ for (const entry of inventory?.entries ?? []) {
173
+ if (entry.categories.includes(capability.key) ||
174
+ capability.key === `extension:${entry.name}`) {
175
+ const existing = relatedPackages.get(entry.name);
176
+ relatedPackages.set(entry.name, {
177
+ name: entry.name,
178
+ version: existing?.version ?? entry.version,
179
+ });
180
+ }
181
+ }
182
+ const packages = [...relatedPackages.values()];
183
+ const pending = capability.reason === 'unrecognizedExtension';
184
+ const inUse = capability.status === 'active';
185
+ const unreadable = capability.issues
186
+ .filter((issue) => issue.code === 'SOURCE_UNREADABLE' && issue.source)
187
+ .map((issue) => issue.source);
188
+ return (_jsxs("section", { id: 'foundation-capability-detail', "aria-labelledby": 'foundation-capability-title', className: 'flex flex-col gap-5 rounded-xl border bg-card p-4 text-card-foreground md:p-5', children: [_jsxs("header", { className: 'flex flex-col gap-1', children: [_jsxs("h2", { id: 'foundation-capability-title', className: 'flex flex-wrap items-center gap-2 font-heading text-lg font-semibold', children: [_jsx(Icon, { className: 'size-5 text-primary', "aria-hidden": true }), capability.title ? text(capability.title) : t(`${base}.name`), ' ', _jsx(StatusBadge, { status: capability.status, pending: pending })] }), !pending || capability.description ? (_jsx("p", { className: 'text-sm text-muted-foreground', children: pending ? capability.description : t(`${base}.tagline`) })) : null] }), pending ? (_jsx("p", { className: 'text-sm text-muted-foreground', children: t('dynamic.pendingDescription') })) : null, capability.completeness !== 'complete' ? (_jsxs("div", { role: 'note', className: 'flex gap-2 rounded-lg border border-destructive/30 bg-destructive/5 p-3 text-sm', children: [_jsx(TriangleAlert, { className: 'mt-0.5 size-4 shrink-0 text-destructive', "aria-hidden": true }), _jsxs("div", { className: 'flex flex-col gap-1', children: [_jsx("p", { children: t(capability.completeness === 'failed'
189
+ ? 'detail.failed'
190
+ : 'detail.partial') }), capability.issues.some((issue) => issue.code === 'COLLECTOR_TIMEOUT') ? (_jsx("p", { className: 'text-muted-foreground', children: t('detail.timeout') })) : null, unreadable.length > 0 ? (_jsx("p", { className: 'text-muted-foreground', children: t('detail.unreadable', {
191
+ sources: new Intl.ListFormat(locale, {
192
+ style: 'short',
193
+ }).format(unreadable),
194
+ }) })) : null] })] })) : null, _jsxs("div", { className: 'grid gap-5 lg:grid-cols-[minmax(0,3fr)_minmax(0,2fr)]', children: [_jsxs("div", { className: 'flex flex-col gap-4', children: [capability.facts.length > 0 || inUse || modules.length > 0 ? (_jsxs("div", { className: 'flex flex-col gap-2', children: [_jsx("h3", { className: 'text-sm text-muted-foreground', children: t('detail.inThisApp') }), modules.length > 0 ? (_jsx("ul", { "aria-label": t('detail.businessModules'), className: 'flex flex-wrap gap-1.5', children: modules.map((module) => (_jsx("li", { className: 'rounded-full border border-primary/15 bg-primary/5 px-2.5 py-1 text-xs text-primary', children: text(module.title) }, module.id))) })) : null, capability.facts.length > 0 ? (_jsx("ul", { className: 'flex list-disc flex-col gap-1.5 pl-5 text-sm marker:text-primary', children: capability.facts.map((fact) => (_jsx("li", { children: word(`facts.${fact.code}`, formatFactParams(fact.params, locale, text)) }, fact.code))) })) : (_jsx("p", { className: 'text-sm text-muted-foreground', children: t('detail.noFacts') }))] })) : null, !inUse && !pending && capability.reason ? (_jsxs("div", { className: 'flex flex-col gap-2', children: [_jsx("h3", { className: 'text-sm text-muted-foreground', children: t('detail.whyNot') }), _jsx("p", { className: 'text-sm', children: word(`reasons.${capability.reason}`) })] })) : null, capability.parts.length > 0 ? (_jsxs("div", { className: 'flex flex-col gap-2', children: [_jsx("h3", { className: 'text-sm text-muted-foreground', children: t('detail.parts') }), _jsx("ul", { className: 'flex flex-col gap-1.5 text-sm', children: capability.parts.map((part) => (_jsxs("li", { className: 'flex flex-wrap items-center gap-2', children: [_jsx("span", { children: word(`parts.${part.key}`) }), _jsx(StatusBadge, { status: part.status }), part.reason && part.status !== 'active' ? (_jsx("span", { className: 'text-muted-foreground', children: word(`reasons.${part.reason}`) })) : null] }, part.key))) })] })) : null, !pending ? (_jsxs("div", { className: 'rounded-lg border border-dashed p-3', children: [_jsx("h3", { className: 'text-sm text-muted-foreground', children: t(inUse ? 'detail.withoutFoundation' : 'detail.onceInUse') }), _jsx("p", { className: 'mt-1 text-sm', children: t(inUse ? `${base}.without` : `${base}.onceInUse`) })] })) : null] }), _jsxs("div", { className: 'flex flex-col gap-4', children: [capability.metrics.length > 0 ? (_jsxs("div", { className: 'flex flex-col gap-2', children: [_jsx("h3", { className: 'text-sm text-muted-foreground', children: t('detail.liveData') }), _jsx("ul", { className: 'grid grid-cols-2 gap-2', children: capability.metrics.map((metric) => {
195
+ const value = formatMetricValue(metric, locale);
196
+ return (_jsxs("li", { className: 'rounded-lg bg-muted p-3', children: [_jsx("p", { className: cn('font-heading text-xl font-semibold tabular-nums', value === undefined &&
197
+ 'text-sm font-normal text-muted-foreground'), title: !metric.complete && value !== undefined
198
+ ? t('page.lowerBound')
199
+ : undefined, children: value === undefined
200
+ ? t('page.unavailable')
201
+ : metric.complete
202
+ ? value
203
+ : `≥ ${value}` }), _jsx("p", { className: 'text-xs text-muted-foreground', children: word(`metrics.${metric.key}`) })] }, metric.key));
204
+ }) })] })) : null, _jsxs("div", { className: 'flex flex-col gap-2', children: [_jsx("h3", { className: 'text-sm text-muted-foreground', children: t('detail.packages') }), packages.length > 0 ? (_jsx("ul", { className: 'flex flex-col gap-1 font-mono text-xs', children: packages.map((entry) => (_jsxs("li", { className: 'flex items-center justify-between gap-3', children: [_jsxs("span", { className: 'flex min-w-0 items-center gap-1.5', children: [_jsx(Package, { className: 'size-3.5 shrink-0 text-muted-foreground', "aria-hidden": true }), _jsx("span", { className: 'truncate', children: entry.name })] }), _jsx("span", { className: 'shrink-0 text-muted-foreground', children: entry.version ?? t('page.unavailable') })] }, entry.name))) })) : (_jsx("p", { className: 'text-sm text-muted-foreground', children: t('detail.noPackages') }))] })] })] })] }));
205
+ }
206
+ export default FoundationPage;
207
+ //# sourceMappingURL=foundation-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foundation-page.js","sourceRoot":"","sources":["../../../client/components/foundation-page.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type FoundationText } from '../../shared/foundation.js';
2
+ type Translate = (key: string, options?: Record<string, unknown>) => string;
3
+ export declare function useFoundationTranslation(): {
4
+ readonly t: Translate;
5
+ readonly locale: string;
6
+ /** Words a code the server sent, or shows the code itself when this client does not know it yet. */
7
+ readonly word: (key: string, options?: Record<string, unknown>) => string;
8
+ /** A name the application stored, translated when it is a key the page has loaded. */
9
+ readonly text: (value: FoundationText) => string;
10
+ };
11
+ export {};
12
+ //# sourceMappingURL=foundation-translation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foundation-translation.d.ts","sourceRoot":"","sources":["../../../client/components/foundation-translation.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAEpC,KAAK,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;AAE5E,wBAAgB,wBAAwB,IAAI;IAC1C,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oGAAoG;IACpG,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;IAC1E,sFAAsF;IACtF,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,MAAM,CAAC;CAClD,CAiBA"}
@@ -0,0 +1,19 @@
1
+ import { useTranslation } from '@nocobase/i18n/client';
2
+ import { FOUNDATION_I18N_NAMESPACE, } from '../../shared/foundation.js';
3
+ export function useFoundationTranslation() {
4
+ const { t, i18n } = useTranslation(FOUNDATION_I18N_NAMESPACE);
5
+ const translate = t;
6
+ return {
7
+ t: translate,
8
+ locale: i18n.language,
9
+ word: (key, options) => i18n.exists(key, { ns: FOUNDATION_I18N_NAMESPACE })
10
+ ? translate(key, options)
11
+ : (key.split('.').pop() ?? key),
12
+ text: (value) => typeof value === 'string'
13
+ ? value
14
+ : i18n.exists(value.key, { ns: value.ns })
15
+ ? translate(value.key, { ns: value.ns })
16
+ : (value.key.split('.').pop() ?? value.key),
17
+ };
18
+ }
19
+ //# sourceMappingURL=foundation-translation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"foundation-translation.js","sourceRoot":"","sources":["../../../client/components/foundation-translation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,yBAAyB,GAE1B,MAAM,4BAA4B,CAAC;AAIpC,MAAM,UAAU,wBAAwB;IAQtC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,cAAc,CAAC,yBAAyB,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,CAAyB,CAAC;IAC5C,OAAO;QACL,CAAC,EAAE,SAAS;QACZ,MAAM,EAAE,IAAI,CAAC,QAAQ;QACrB,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CACrB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,yBAAyB,EAAE,CAAC;YACjD,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC;YACzB,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;QACnC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CACd,OAAO,KAAK,KAAK,QAAQ;YACvB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBACxC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBACxC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,GAAG,CAAC;KAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type ReactElement } from 'react';
2
+ import type { FoundationBusinessModule, FoundationCapability } from '../../shared/foundation.js';
3
+ export declare function ModuleMatrix({ modules, capabilities, onSelect, onFocusModule, }: {
4
+ readonly modules: readonly FoundationBusinessModule[];
5
+ readonly capabilities: readonly FoundationCapability[];
6
+ readonly onSelect: (key: string) => void;
7
+ readonly onFocusModule: (id: string | null) => void;
8
+ }): ReactElement;
9
+ //# sourceMappingURL=module-matrix.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-matrix.d.ts","sourceRoot":"","sources":["../../../client/components/module-matrix.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EACrB,MAAM,4BAA4B,CAAC;AAapC,wBAAgB,YAAY,CAAC,EAC3B,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,aAAa,GACd,EAAE;IACD,QAAQ,CAAC,OAAO,EAAE,SAAS,wBAAwB,EAAE,CAAC;IACtD,QAAQ,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvD,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACrD,GAAG,YAAY,CA+Of"}
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Check, Plug } from 'lucide-react';
3
+ import { cn } from 'cn';
4
+ import { useState } from 'react';
5
+ import { CAPABILITY_ICONS } from './capability-icons.js';
6
+ import { useFoundationTranslation } from './foundation-translation.js';
7
+ import { Button } from './ui/button.js';
8
+ import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell, } from './ui/table.js';
9
+ export function ModuleMatrix({ modules, capabilities, onSelect, onFocusModule, }) {
10
+ const { t, text } = useFoundationTranslation();
11
+ const [selection, setSelection] = useState(null);
12
+ const module = modules.find((item) => item.id === selection?.module);
13
+ const selected = capabilities.find((item) => item.key === selection?.capability);
14
+ const link = module?.links.find((item) => item.capability === selected?.key);
15
+ const name = (capability) => capability.title
16
+ ? text(capability.title)
17
+ : t(`capabilities.${capability.key}.name`);
18
+ const choose = (item, capability) => {
19
+ setSelection({ module: item.id, capability: capability.key });
20
+ onSelect(capability.key);
21
+ };
22
+ const cell = (item, capability) => {
23
+ const connected = item.links.some((edge) => edge.capability === capability.key);
24
+ return connected ? (_jsx(Button, { variant: 'ghost', size: 'icon-sm', "aria-label": t('matrix.inspect', {
25
+ module: text(item.title),
26
+ capability: name(capability),
27
+ }), "aria-pressed": selection?.module === item.id &&
28
+ selection.capability === capability.key, className: 'size-6! rounded-full! border-0 bg-primary/10 p-0 text-primary shadow-none hover:bg-primary/15 aria-pressed:bg-primary aria-pressed:text-primary-foreground', onClick: () => choose(item, capability), children: _jsx(Check, { className: 'size-3.5', "aria-hidden": true }) })) : (_jsx("span", { "aria-label": t('matrix.unknown'), className: 'text-muted-foreground/30', children: "\u00B7" }));
29
+ };
30
+ return (_jsxs("section", { "aria-labelledby": 'foundation-matrix-title', className: 'flex min-w-0 flex-col gap-3 rounded-xl border bg-card p-4 text-card-foreground md:p-5', children: [_jsxs("header", { className: 'flex flex-col gap-1', children: [_jsx("h2", { id: 'foundation-matrix-title', className: 'font-heading text-base font-semibold', children: t('matrix.title') }), _jsx("p", { className: 'text-sm text-muted-foreground', children: t('matrix.description') })] }), !modules.length ? (_jsx("p", { className: 'text-sm text-muted-foreground', children: t('matrix.empty') })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: 'hidden min-w-0 md:block', children: _jsxs(Table, { "aria-label": t('matrix.title'), className: 'table-fixed', style: { minWidth: 192 + capabilities.length * 36 }, children: [_jsxs("colgroup", { children: [_jsx("col", { className: 'w-44 lg:w-48' }), capabilities.map((capability) => (_jsx("col", {}, capability.key)))] }), _jsx(TableHeader, { className: 'bg-transparent!', children: _jsxs(TableRow, { className: 'hover:bg-transparent!', children: [_jsx(TableHead, { className: 'h-8! px-0! text-xs font-normal! text-muted-foreground!', children: t('matrix.modules') }), capabilities.map((capability) => {
31
+ const Icon = CAPABILITY_ICONS[capability.key] ?? Plug;
32
+ return (_jsx(TableHead, { className: 'h-8! px-1! text-center', children: _jsxs("span", { title: name(capability), className: cn('inline-flex p-1', capability.status === 'active'
33
+ ? 'text-primary'
34
+ : 'text-muted-foreground/50'), children: [_jsx(Icon, { className: 'size-4', "aria-hidden": true }), _jsx("span", { className: 'sr-only', children: name(capability) })] }) }, capability.key));
35
+ })] }) }), _jsx(TableBody, { children: modules.map((item) => (_jsxs(TableRow, { className: 'h-16 hover:bg-transparent!', onMouseEnter: () => onFocusModule(item.id), onMouseLeave: () => onFocusModule(null), onFocus: () => onFocusModule(item.id), onBlur: () => onFocusModule(null), children: [_jsxs(TableHead, { scope: 'row', className: 'h-auto! px-0! py-2 text-foreground! font-normal!', children: [_jsx("span", { title: text(item.title), className: 'block truncate text-sm font-semibold', children: text(item.title) }), _jsx("span", { className: 'mt-0.5 block text-xs font-normal text-muted-foreground', children: t('matrix.summary', {
36
+ count: item.links.length,
37
+ pages: item.pageCount,
38
+ }) })] }), capabilities.map((capability) => (_jsx(TableCell, { className: 'px-1! py-2 text-center', children: cell(item, capability) }, capability.key)))] }, item.id))) })] }) }), _jsx("ul", { className: 'flex flex-col gap-3 md:hidden', children: modules.map((item) => (_jsxs("li", { className: 'min-w-0 rounded-lg border border-border/70 p-3', children: [_jsx("h3", { className: 'text-sm font-medium', children: text(item.title) }), _jsx("p", { className: 'mt-1 text-xs text-muted-foreground', children: t('matrix.summary', {
39
+ count: item.links.length,
40
+ pages: item.pageCount,
41
+ }) }), _jsx("div", { className: 'mt-3 flex flex-wrap gap-2', children: item.links.map((edge) => {
42
+ const capability = capabilities.find((value) => value.key === edge.capability);
43
+ if (!capability)
44
+ return null;
45
+ const Icon = CAPABILITY_ICONS[capability.key] ?? Plug;
46
+ return (_jsxs(Button, { variant: 'outline', size: 'xs', className: 'max-w-full rounded-full! border-primary/15 bg-primary/5 whitespace-normal text-primary shadow-none', "aria-label": t('matrix.inspect', {
47
+ module: text(item.title),
48
+ capability: name(capability),
49
+ }), onClick: () => choose(item, capability), children: [_jsx(Icon, { className: 'size-3', "aria-hidden": true }), name(capability)] }, edge.capability));
50
+ }) })] }, item.id))) }), module && selected && link ? (_jsxs("div", { role: 'status', className: 'flex min-w-0 flex-col gap-3 rounded-lg border border-dashed bg-background/50 p-4 text-sm', children: [_jsxs("h3", { className: 'font-medium', children: [text(module.title), " \u00B7 ", name(selected)] }), _jsx("p", { className: 'text-muted-foreground', children: link.evidence
51
+ .map((evidence) => t(`matrix.evidence.${evidence}`))
52
+ .join(' · ') }), link.providers.length ? (_jsx("p", { className: 'break-words font-mono text-xs text-muted-foreground', children: link.providers.join(' · ') })) : null, selected.reason !== 'unrecognizedExtension' ? (_jsxs("div", { className: 'flex flex-col gap-1 border-t pt-3', children: [_jsx("h4", { className: 'font-medium', children: t('detail.withoutFoundation') }), _jsx("p", { className: 'leading-relaxed', children: t(`capabilities.${selected.key}.without`) })] })) : (_jsx("p", { children: t('dynamic.pendingDescription') }))] })) : null, _jsxs("p", { className: 'pt-1 text-xs leading-relaxed text-muted-foreground/80', children: [t('matrix.legend'), modules.some((item) => !item.complete)
53
+ ? ` ${t('matrix.partial')}`
54
+ : ''] })] }))] }));
55
+ }
56
+ //# sourceMappingURL=module-matrix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-matrix.js","sourceRoot":"","sources":["../../../client/components/module-matrix.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAqB,MAAM,OAAO,CAAC;AAKpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,MAAM,UAAU,YAAY,CAAC,EAC3B,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,aAAa,GAMd;IACC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAC/C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAGhC,IAAI,CAAC,CAAC;IAChB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,MAAM,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAChC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,UAAU,CAC7C,CAAC;IACF,MAAM,IAAI,GAAG,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,CAAC,UAAgC,EAAU,EAAE,CACxD,UAAU,CAAC,KAAK;QACd,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC,CAAC,gBAAgB,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,CACb,IAA8B,EAC9B,UAAgC,EAC1B,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CACX,IAA8B,EAC9B,UAAgC,EAClB,EAAE;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAC/B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,CAC7C,CAAC;QACF,OAAO,SAAS,CAAC,CAAC,CAAC,CACjB,KAAC,MAAM,IACL,OAAO,EAAC,OAAO,EACf,IAAI,EAAC,SAAS,gBACF,CAAC,CAAC,gBAAgB,EAAE;gBAC9B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;aAC7B,CAAC,kBAEA,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC,EAAE;gBAC7B,SAAS,CAAC,UAAU,KAAK,UAAU,CAAC,GAAG,EAEzC,SAAS,EAAC,4JAA4J,EACtK,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,YAEvC,KAAC,KAAK,IAAC,SAAS,EAAC,UAAU,wBAAe,GACnC,CACV,CAAC,CAAC,CAAC,CACF,6BACc,CAAC,CAAC,gBAAgB,CAAC,EAC/B,SAAS,EAAC,0BAA0B,uBAG/B,CACR,CAAC;IACJ,CAAC,CAAC;IACF,OAAO,CACL,sCACkB,yBAAyB,EACzC,SAAS,EAAC,uFAAuF,aAEjG,kBAAQ,SAAS,EAAC,qBAAqB,aACrC,aACE,EAAE,EAAC,yBAAyB,EAC5B,SAAS,EAAC,sCAAsC,YAE/C,CAAC,CAAC,cAAc,CAAC,GACf,EACL,YAAG,SAAS,EAAC,+BAA+B,YACzC,CAAC,CAAC,oBAAoB,CAAC,GACtB,IACG,EACR,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CACjB,YAAG,SAAS,EAAC,+BAA+B,YAAE,CAAC,CAAC,cAAc,CAAC,GAAK,CACrE,CAAC,CAAC,CAAC,CACF,8BACE,cAAK,SAAS,EAAC,yBAAyB,YACtC,MAAC,KAAK,kBACQ,CAAC,CAAC,cAAc,CAAC,EAC7B,SAAS,EAAC,aAAa,EACvB,KAAK,EAAE,EAAE,QAAQ,EAAE,GAAG,GAAG,YAAY,CAAC,MAAM,GAAG,EAAE,EAAE,aAEnD,+BACE,cAAK,SAAS,EAAC,cAAc,GAAG,EAC/B,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAChC,gBAAU,UAAU,CAAC,GAAG,CAAI,CAC7B,CAAC,IACO,EACX,KAAC,WAAW,IAAC,SAAS,EAAC,iBAAiB,YACtC,MAAC,QAAQ,IAAC,SAAS,EAAC,uBAAuB,aACzC,KAAC,SAAS,IAAC,SAAS,EAAC,wDAAwD,YAC1E,CAAC,CAAC,gBAAgB,CAAC,GACV,EACX,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gDAC/B,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;gDACtD,OAAO,CACL,KAAC,SAAS,IAER,SAAS,EAAC,wBAAwB,YAElC,gBACE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,EACvB,SAAS,EAAE,EAAE,CACX,iBAAiB,EACjB,UAAU,CAAC,MAAM,KAAK,QAAQ;4DAC5B,CAAC,CAAC,cAAc;4DAChB,CAAC,CAAC,0BAA0B,CAC/B,aAED,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,wBAAe,EACvC,eAAM,SAAS,EAAC,SAAS,YAAE,IAAI,CAAC,UAAU,CAAC,GAAQ,IAC9C,IAdF,UAAU,CAAC,GAAG,CAeT,CACb,CAAC;4CACJ,CAAC,CAAC,IACO,GACC,EACd,KAAC,SAAS,cACP,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACrB,MAAC,QAAQ,IAEP,SAAS,EAAC,4BAA4B,EACtC,YAAY,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EAC1C,YAAY,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,EACrC,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,aAEjC,MAAC,SAAS,IACR,KAAK,EAAC,KAAK,EACX,SAAS,EAAC,kDAAkD,aAE5D,eACE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EACvB,SAAS,EAAC,sCAAsC,YAE/C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GACZ,EACP,eAAM,SAAS,EAAC,wDAAwD,YACrE,CAAC,CAAC,gBAAgB,EAAE;4DACnB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;4DACxB,KAAK,EAAE,IAAI,CAAC,SAAS;yDACtB,CAAC,GACG,IACG,EACX,YAAY,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAChC,KAAC,SAAS,IAER,SAAS,EAAC,wBAAwB,YAEjC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAHlB,UAAU,CAAC,GAAG,CAIT,CACb,CAAC,KA/BG,IAAI,CAAC,EAAE,CAgCH,CACZ,CAAC,GACQ,IACN,GACJ,EACN,aAAI,SAAS,EAAC,+BAA+B,YAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACrB,cAEE,SAAS,EAAC,gDAAgD,aAE1D,aAAI,SAAS,EAAC,qBAAqB,YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAM,EAC3D,YAAG,SAAS,EAAC,oCAAoC,YAC9C,CAAC,CAAC,gBAAgB,EAAE;wCACnB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;wCACxB,KAAK,EAAE,IAAI,CAAC,SAAS;qCACtB,CAAC,GACA,EACJ,cAAK,SAAS,EAAC,2BAA2B,YACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;wCACvB,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAClC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CACzC,CAAC;wCACF,IAAI,CAAC,UAAU;4CAAE,OAAO,IAAI,CAAC;wCAC7B,MAAM,IAAI,GAAG,gBAAgB,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;wCACtD,OAAO,CACL,MAAC,MAAM,IAEL,OAAO,EAAC,SAAS,EACjB,IAAI,EAAC,IAAI,EACT,SAAS,EAAC,oGAAoG,gBAClG,CAAC,CAAC,gBAAgB,EAAE;gDAC9B,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;gDACxB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC;6CAC7B,CAAC,EACF,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,aAEvC,KAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,wBAAe,EACtC,IAAI,CAAC,UAAU,CAAC,KAXZ,IAAI,CAAC,UAAU,CAYb,CACV,CAAC;oCACJ,CAAC,CAAC,GACE,KAlCD,IAAI,CAAC,EAAE,CAmCT,CACN,CAAC,GACC,EACJ,MAAM,IAAI,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,CAC5B,eACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0FAA0F,aAEpG,cAAI,SAAS,EAAC,aAAa,aACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,cAAK,IAAI,CAAC,QAAQ,CAAC,IACnC,EACL,YAAG,SAAS,EAAC,uBAAuB,YACjC,IAAI,CAAC,QAAQ;qCACX,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;qCACnD,IAAI,CAAC,KAAK,CAAC,GACZ,EACH,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CACvB,YAAG,SAAS,EAAC,qDAAqD,YAC/D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GACzB,CACL,CAAC,CAAC,CAAC,IAAI,EACP,QAAQ,CAAC,MAAM,KAAK,uBAAuB,CAAC,CAAC,CAAC,CAC7C,eAAK,SAAS,EAAC,mCAAmC,aAChD,aAAI,SAAS,EAAC,aAAa,YACxB,CAAC,CAAC,0BAA0B,CAAC,GAC3B,EACL,YAAG,SAAS,EAAC,iBAAiB,YAC3B,CAAC,CAAC,gBAAgB,QAAQ,CAAC,GAAG,UAAU,CAAC,GACxC,IACA,CACP,CAAC,CAAC,CAAC,CACF,sBAAI,CAAC,CAAC,4BAA4B,CAAC,GAAK,CACzC,IACG,CACP,CAAC,CAAC,CAAC,IAAI,EACR,aAAG,SAAS,EAAC,uDAAuD,aACjE,CAAC,CAAC,eAAe,CAAC,EAClB,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;gCACrC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,EAAE;gCAC3B,CAAC,CAAC,EAAE,IACJ,IACH,CACJ,IACO,CACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Button as ButtonPrimitive } from '@base-ui/react/button';
2
+ import type { ReactElement } from 'react';
3
+ export type ButtonProps = ButtonPrimitive.Props & {
4
+ readonly size?: 'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg';
5
+ readonly variant?: 'default' | 'outline' | 'secondary' | 'ghost' | 'destructive' | 'link';
6
+ };
7
+ export declare function Button({ className, variant, size, ...props }: ButtonProps): ReactElement;
8
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../../client/components/ui/button.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAI1C,MAAM,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,GAAG;IAChD,QAAQ,CAAC,IAAI,CAAC,EACZ,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC9E,QAAQ,CAAC,OAAO,CAAC,EACf,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,CAAC;CAC1E,CAAC;AAuCF,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,WAAW,GAAG,YAAY,CAQ5B"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // shadcn base-nova source adapted for declaration-emitting ESM builds.
3
+ import { Button as ButtonPrimitive } from '@base-ui/react/button';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from 'cn';
6
+ const buttonVariants = cva("group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
7
+ variants: {
8
+ variant: {
9
+ default: 'bg-primary text-primary-foreground hover:bg-primary/80',
10
+ outline: 'border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50',
11
+ secondary: 'bg-secondary text-secondary-foreground hover:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)] aria-expanded:bg-secondary aria-expanded:text-secondary-foreground',
12
+ ghost: 'hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50',
13
+ destructive: 'bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40',
14
+ link: 'text-primary underline-offset-4 hover:underline',
15
+ },
16
+ size: {
17
+ default: 'h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',
18
+ xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
19
+ sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
20
+ lg: 'h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',
21
+ icon: 'size-8',
22
+ 'icon-xs': "size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
23
+ 'icon-sm': 'size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg',
24
+ 'icon-lg': 'size-9',
25
+ },
26
+ },
27
+ defaultVariants: {
28
+ variant: 'default',
29
+ size: 'default',
30
+ },
31
+ });
32
+ export function Button({ className, variant = 'default', size = 'default', ...props }) {
33
+ return (_jsx(ButtonPrimitive, { "data-slot": 'button', className: cn(buttonVariants({ variant, size, className })), ...props }));
34
+ }
35
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.js","sourceRoot":"","sources":["../../../../client/components/ui/button.tsx"],"names":[],"mappings":";AAAA,uEAAuE;AACvE,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAG/C,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC;AASxB,MAAM,cAAc,GAAG,GAAG,CACxB,4lBAA4lB,EAC5lB;IACE,QAAQ,EAAE;QACR,OAAO,EAAE;YACP,OAAO,EAAE,wDAAwD;YACjE,OAAO,EACL,iLAAiL;YACnL,SAAS,EACP,gLAAgL;YAClL,KAAK,EACH,kHAAkH;YACpH,WAAW,EACT,6NAA6N;YAC/N,IAAI,EAAE,iDAAiD;SACxD;QACD,IAAI,EAAE;YACJ,OAAO,EACL,sFAAsF;YACxF,EAAE,EAAE,+MAA+M;YACnN,EAAE,EAAE,yNAAyN;YAC7N,EAAE,EAAE,sFAAsF;YAC1F,IAAI,EAAE,QAAQ;YACd,SAAS,EACP,yHAAyH;YAC3H,SAAS,EACP,oFAAoF;YACtF,SAAS,EAAE,QAAQ;SACpB;KACF;IACD,eAAe,EAAE;QACf,OAAO,EAAE,SAAS;QAClB,IAAI,EAAE,SAAS;KAChB;CACF,CACF,CAAC;AAEF,MAAM,UAAU,MAAM,CAAC,EACrB,SAAS,EACT,OAAO,GAAG,SAAS,EACnB,IAAI,GAAG,SAAS,EAChB,GAAG,KAAK,EACI;IACZ,OAAO,CACL,KAAC,eAAe,iBACJ,QAAQ,EAClB,SAAS,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,KACvD,KAAK,GACT,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Collapsible as CollapsiblePrimitive } from '@base-ui/react/collapsible';
2
+ import type { ReactElement } from 'react';
3
+ declare function Collapsible({ ...props }: CollapsiblePrimitive.Root.Props): ReactElement;
4
+ declare function CollapsibleTrigger({ ...props }: CollapsiblePrimitive.Trigger.Props): ReactElement;
5
+ declare function CollapsibleContent({ ...props }: CollapsiblePrimitive.Panel.Props): ReactElement;
6
+ export { Collapsible, CollapsibleTrigger, CollapsibleContent };
7
+ //# sourceMappingURL=collapsible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../../client/components/ui/collapsible.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE1C,iBAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,CAEhD;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,OAAO,CAAC,KAAK,GAAG,YAAY,CAInD;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,oBAAoB,CAAC,KAAK,CAAC,KAAK,GAAG,YAAY,CAIjD;AAED,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Collapsible as CollapsiblePrimitive } from '@base-ui/react/collapsible';
3
+ function Collapsible({ ...props }) {
4
+ return _jsx(CollapsiblePrimitive.Root, { "data-slot": 'collapsible', ...props });
5
+ }
6
+ function CollapsibleTrigger({ ...props }) {
7
+ return (_jsx(CollapsiblePrimitive.Trigger, { "data-slot": 'collapsible-trigger', ...props }));
8
+ }
9
+ function CollapsibleContent({ ...props }) {
10
+ return (_jsx(CollapsiblePrimitive.Panel, { "data-slot": 'collapsible-content', ...props }));
11
+ }
12
+ export { Collapsible, CollapsibleTrigger, CollapsibleContent };
13
+ //# sourceMappingURL=collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collapsible.js","sourceRoot":"","sources":["../../../../client/components/ui/collapsible.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,IAAI,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAGjF,SAAS,WAAW,CAAC,EACnB,GAAG,KAAK,EACwB;IAChC,OAAO,KAAC,oBAAoB,CAAC,IAAI,iBAAW,aAAa,KAAK,KAAK,GAAI,CAAC;AAC1E,CAAC;AAED,SAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EAC2B;IACnC,OAAO,CACL,KAAC,oBAAoB,CAAC,OAAO,iBAAW,qBAAqB,KAAK,KAAK,GAAI,CAC5E,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACyB;IACjC,OAAO,CACL,KAAC,oBAAoB,CAAC,KAAK,iBAAW,qBAAqB,KAAK,KAAK,GAAI,CAC1E,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import * as React from 'react';
2
+ declare function Table({ className, ...props }: React.ComponentProps<'table'>): React.ReactElement;
3
+ declare function TableHeader({ className, ...props }: React.ComponentProps<'thead'>): React.ReactElement;
4
+ declare function TableBody({ className, ...props }: React.ComponentProps<'tbody'>): React.ReactElement;
5
+ declare function TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>): React.ReactElement;
6
+ declare function TableRow({ className, ...props }: React.ComponentProps<'tr'>): React.ReactElement;
7
+ declare function TableHead({ className, ...props }: React.ComponentProps<'th'>): React.ReactElement;
8
+ declare function TableCell({ className, ...props }: React.ComponentProps<'td'>): React.ReactElement;
9
+ declare function TableCaption({ className, ...props }: React.ComponentProps<'caption'>): React.ReactElement;
10
+ export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, };
11
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../client/components/ui/table.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,YAAY,CAapD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,YAAY,CAQpD;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,YAAY,CAQpD;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,YAAY,CAWpD;AAED,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAWjD;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAWjD;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,CAWjD;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,YAAY,CAQtD;AAED,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cn } from 'cn';
3
+ function Table({ className, ...props }) {
4
+ return (_jsx("div", { "data-slot": 'table-container', className: 'relative w-full overflow-x-auto', children: _jsx("table", { "data-slot": 'table', className: cn('w-full caption-bottom text-sm', className), ...props }) }));
5
+ }
6
+ function TableHeader({ className, ...props }) {
7
+ return (_jsx("thead", { "data-slot": 'table-header', className: cn('[&_tr]:border-b', className), ...props }));
8
+ }
9
+ function TableBody({ className, ...props }) {
10
+ return (_jsx("tbody", { "data-slot": 'table-body', className: cn('[&_tr:last-child]:border-0', className), ...props }));
11
+ }
12
+ function TableFooter({ className, ...props }) {
13
+ return (_jsx("tfoot", { "data-slot": 'table-footer', className: cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className), ...props }));
14
+ }
15
+ function TableRow({ className, ...props }) {
16
+ return (_jsx("tr", { "data-slot": 'table-row', className: cn('border-b transition-colors hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-[state=selected]:bg-muted', className), ...props }));
17
+ }
18
+ function TableHead({ className, ...props }) {
19
+ return (_jsx("th", { "data-slot": 'table-head', className: cn('h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0', className), ...props }));
20
+ }
21
+ function TableCell({ className, ...props }) {
22
+ return (_jsx("td", { "data-slot": 'table-cell', className: cn('p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0', className), ...props }));
23
+ }
24
+ function TableCaption({ className, ...props }) {
25
+ return (_jsx("caption", { "data-slot": 'table-caption', className: cn('mt-4 text-sm text-muted-foreground', className), ...props }));
26
+ }
27
+ export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, };
28
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../../client/components/ui/table.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC;AAExB,SAAS,KAAK,CAAC,EACb,SAAS,EACT,GAAG,KAAK,EACsB;IAC9B,OAAO,CACL,2BACY,iBAAiB,EAC3B,SAAS,EAAC,iCAAiC,YAE3C,6BACY,OAAO,EACjB,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,KACrD,KAAK,GACT,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACsB;IAC9B,OAAO,CACL,6BACY,cAAc,EACxB,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,SAAS,CAAC,KACvC,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EACjB,SAAS,EACT,GAAG,KAAK,EACsB;IAC9B,OAAO,CACL,6BACY,YAAY,EACtB,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAClD,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EACnB,SAAS,EACT,GAAG,KAAK,EACsB;IAC9B,OAAO,CACL,6BACY,cAAc,EACxB,SAAS,EAAE,EAAE,CACX,yDAAyD,EACzD,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAChB,SAAS,EACT,GAAG,KAAK,EACmB;IAC3B,OAAO,CACL,0BACY,WAAW,EACrB,SAAS,EAAE,EAAE,CACX,2GAA2G,EAC3G,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EACjB,SAAS,EACT,GAAG,KAAK,EACmB;IAC3B,OAAO,CACL,0BACY,YAAY,EACtB,SAAS,EAAE,EAAE,CACX,8GAA8G,EAC9G,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EACjB,SAAS,EACT,GAAG,KAAK,EACmB;IAC3B,OAAO,CACL,0BACY,YAAY,EACtB,SAAS,EAAE,EAAE,CACX,kEAAkE,EAClE,SAAS,CACV,KACG,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACwB;IAChC,OAAO,CACL,+BACY,eAAe,EACzB,SAAS,EAAE,EAAE,CAAC,oCAAoC,EAAE,SAAS,CAAC,KAC1D,KAAK,GACT,CACH,CAAC;AACJ,CAAC;AAED,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { default, type FoundationClientOptions } from './plugin.js';
2
+ export { groupFoundationNavigation, type FoundationNavigationNode, } from './navigation.js';
3
+ export { createFoundationRoutes, foundationDefinition, type FoundationRouteOptions, } from './routes.js';
4
+ export { fetchFoundationOverview, useFoundationOverview, type FoundationLoadError, type FoundationOverviewState, } from './api.js';
5
+ export type * from '../shared/foundation.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EACL,yBAAyB,EACzB,KAAK,wBAAwB,GAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,sBAAsB,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,UAAU,CAAC;AAClB,mBAAmB,yBAAyB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // The plugin's public client surface. The default export is the registration factory an application lists in
2
+ // its client/plugins.ts.
3
+ export { default } from './plugin.js';
4
+ export { groupFoundationNavigation, } from './navigation.js';
5
+ export { createFoundationRoutes, foundationDefinition, } from './routes.js';
6
+ export { fetchFoundationOverview, useFoundationOverview, } from './api.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../client/index.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,yBAAyB;AACzB,OAAO,EAAE,OAAO,EAAgC,MAAM,aAAa,CAAC;AACpE,OAAO,EACL,yBAAyB,GAE1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GAErB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GAGtB,MAAM,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { FoundationResource } from './en-US.js';
2
+ declare const deDE: FoundationResource;
3
+ export default deDE;
4
+ //# sourceMappingURL=de-DE.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"de-DE.d.ts","sourceRoot":"","sources":["../../../client/locales/de-DE.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,QAAA,MAAM,IAAI,EAAE,kBA8WX,CAAC;AAEF,eAAe,IAAI,CAAC"}