@stephen-netu/design-system 0.1.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 (204) hide show
  1. package/README.md +66 -0
  2. package/package.json +130 -0
  3. package/src/b0-app-shell/clarification-overlay/ClarificationOverlay.svelte +221 -0
  4. package/src/b0-app-shell/clarification-overlay/index.ts +1 -0
  5. package/src/b0-app-shell/command-bar/CommandBar.svelte +565 -0
  6. package/src/b0-app-shell/index.ts +14 -0
  7. package/src/base.css +152 -0
  8. package/src/d0-data-viz/BarChart.svelte +236 -0
  9. package/src/d0-data-viz/CheckpointBar.svelte +574 -0
  10. package/src/d0-data-viz/CheckpointPill.svelte +297 -0
  11. package/src/d0-data-viz/MetricCard.svelte +159 -0
  12. package/src/d0-data-viz/SparkLine.svelte +66 -0
  13. package/src/d0-data-viz/StorageMap.svelte +182 -0
  14. package/src/d0-data-viz/Timeline.svelte +188 -0
  15. package/src/d0-data-viz/checkpoint-types.ts +162 -0
  16. package/src/d0-data-viz/d0-tokens.css +32 -0
  17. package/src/d0-data-viz/index.ts +58 -0
  18. package/src/d0-data-viz/storage-map-types.ts +142 -0
  19. package/src/d0-data-viz/theme-integration.ts +134 -0
  20. package/src/d0-data-viz/types.ts +53 -0
  21. package/src/demos/BspSizingInfographic.svelte +386 -0
  22. package/src/demos/BspZoneDemo.svelte +255 -0
  23. package/src/demos/ControlRoomDemo.svelte +570 -0
  24. package/src/demos/NodepadBlocksShowcase.svelte +189 -0
  25. package/src/demos/index.ts +7 -0
  26. package/src/editor/CodeEditor.svelte +188 -0
  27. package/src/editor/FindReplaceDialog.svelte +516 -0
  28. package/src/editor/MarkdownEditor.svelte +660 -0
  29. package/src/editor/index.ts +2 -0
  30. package/src/entity-graph-view/WorldView.svelte +171 -0
  31. package/src/entity-graph-view/index.ts +6 -0
  32. package/src/entity-graph-view/types.ts +364 -0
  33. package/src/epistemic/index.ts +2 -0
  34. package/src/epistemic/types.ts +134 -0
  35. package/src/epistemic/utils.ts +32 -0
  36. package/src/f0-forms/checkbox/Checkbox.svelte +158 -0
  37. package/src/f0-forms/field/FormField.svelte +91 -0
  38. package/src/f0-forms/index.ts +11 -0
  39. package/src/f0-forms/radio/RadioGroup.svelte +192 -0
  40. package/src/f0-forms/search/SearchBar.svelte +99 -0
  41. package/src/f0-forms/select/Select.svelte +198 -0
  42. package/src/f0-forms/textarea/TextArea.svelte +170 -0
  43. package/src/f0-forms/toggle/FormToggle.svelte +147 -0
  44. package/src/f0-forms/validation/validate.ts +47 -0
  45. package/src/fabric/ai/ChatPanel.svelte +648 -0
  46. package/src/fabric/ai/index.ts +11 -0
  47. package/src/fabric/data/index.ts +21 -0
  48. package/src/fabric/feedback/StatusBar.svelte +274 -0
  49. package/src/fabric/feedback/ToastContainer.svelte +122 -0
  50. package/src/fabric/feedback/index.ts +14 -0
  51. package/src/fabric/index.ts +37 -0
  52. package/src/fabric/input/CommandBar.svelte +79 -0
  53. package/src/fabric/input/KeyboardShortcuts.svelte +388 -0
  54. package/src/fabric/input/index.ts +12 -0
  55. package/src/fabric/layout/GlassBox.svelte +193 -0
  56. package/src/fabric/layout/KanbanBoard.svelte +158 -0
  57. package/src/fabric/layout/KanbanCard.svelte +226 -0
  58. package/src/fabric/layout/KanbanColumn.svelte +278 -0
  59. package/src/fabric/layout/index.ts +17 -0
  60. package/src/fabric/navigation/ActivityRail.svelte +271 -0
  61. package/src/fabric/navigation/index.ts +11 -0
  62. package/src/g0-geo/SovereignMap.svelte +149 -0
  63. package/src/g0-geo/index.ts +2 -0
  64. package/src/index.ts +68 -0
  65. package/src/l0-layout/block-writer/BlockConnectionLines.svelte +98 -0
  66. package/src/l0-layout/block-writer/BlockContent.svelte +213 -0
  67. package/src/l0-layout/block-writer/BlockHeader.svelte +230 -0
  68. package/src/l0-layout/block-writer/BlockItem.svelte +177 -0
  69. package/src/l0-layout/block-writer/BlockWriter.svelte +219 -0
  70. package/src/l0-layout/block-writer/block-writer-types.ts +63 -0
  71. package/src/l0-layout/block-writer/index.ts +24 -0
  72. package/src/l0-layout/block-writer/markdown.ts +110 -0
  73. package/src/l0-layout/chat-view/ChatViewLayout.svelte +61 -0
  74. package/src/l0-layout/epistemic/AllayDetailPanel.svelte +113 -0
  75. package/src/l0-layout/epistemic/AssayDetailPanel.svelte +164 -0
  76. package/src/l0-layout/epistemic/AvenueTrace.svelte +253 -0
  77. package/src/l0-layout/epistemic/KnowledgeDetailPanel.svelte +204 -0
  78. package/src/l0-layout/epistemic/ParadigmLens.svelte +170 -0
  79. package/src/l0-layout/epistemic/ProvenanceChain.svelte +164 -0
  80. package/src/l0-layout/epistemic/TrustView.svelte +195 -0
  81. package/src/l0-layout/epistemic/index.ts +7 -0
  82. package/src/l0-layout/grove/AccordCard.svelte +156 -0
  83. package/src/l0-layout/grove/GroveCard.svelte +197 -0
  84. package/src/l0-layout/grove/MemberBadge.svelte +96 -0
  85. package/src/l0-layout/grove/MemberList.svelte +59 -0
  86. package/src/l0-layout/grove/grove-types.ts +29 -0
  87. package/src/l0-layout/grove/index.ts +14 -0
  88. package/src/l0-layout/index.ts +45 -0
  89. package/src/l0-layout/kanban/KanbanBoard.svelte +71 -0
  90. package/src/l0-layout/kanban/KanbanCard.svelte +276 -0
  91. package/src/l0-layout/kanban/KanbanColumn.svelte +198 -0
  92. package/src/l0-layout/kanban/KanbanViewLayout.svelte +61 -0
  93. package/src/l0-layout/workspace/WorkspaceLayout.svelte +93 -0
  94. package/src/n0-node-graph/GraphEditor.svelte +342 -0
  95. package/src/n0-node-graph/GraphHistory.svelte +122 -0
  96. package/src/n0-node-graph/Node.svelte +269 -0
  97. package/src/n0-node-graph/NodeCanvas.svelte +187 -0
  98. package/src/n0-node-graph/NodeEdge.svelte +152 -0
  99. package/src/n0-node-graph/NodePalette.svelte +318 -0
  100. package/src/n0-node-graph/NodePort.svelte +128 -0
  101. package/src/n0-node-graph/index.ts +33 -0
  102. package/src/n0-node-graph/n0-tokens.css +29 -0
  103. package/src/n0-node-graph/node-port-types.ts +19 -0
  104. package/src/n0-node-graph/types.ts +96 -0
  105. package/src/n0-node-graph/validate.test.ts +722 -0
  106. package/src/n0-node-graph/validate.ts +371 -0
  107. package/src/n1-flow-canvas/FlowCanvas.svelte +202 -0
  108. package/src/n1-flow-canvas/graph-state.svelte.ts +95 -0
  109. package/src/n1-flow-canvas/index.ts +21 -0
  110. package/src/n1-flow-canvas/layout.ts +118 -0
  111. package/src/n1-flow-canvas/layout.worker.ts +128 -0
  112. package/src/n1-flow-canvas/types.ts +102 -0
  113. package/src/n1-flow-canvas/utils.ts +146 -0
  114. package/src/n2-manifold-disk/ManifoldDisk.svelte +314 -0
  115. package/src/n2-manifold-disk/index.ts +6 -0
  116. package/src/n2-manifold-disk/poincare.ts +184 -0
  117. package/src/n3-force-graph/ForceGraph.svelte +180 -0
  118. package/src/n3-force-graph/GraphTooltip.svelte +99 -0
  119. package/src/n3-force-graph/animated-edge.ts +107 -0
  120. package/src/n3-force-graph/health-node.ts +128 -0
  121. package/src/n3-force-graph/index.ts +31 -0
  122. package/src/n3-force-graph/types.ts +94 -0
  123. package/src/n4-adaptive-manifold/AdaptiveManifold.svelte +1165 -0
  124. package/src/n4-adaptive-manifold/DetailCard.svelte +212 -0
  125. package/src/n4-adaptive-manifold/SuggestionIndicator.svelte +91 -0
  126. package/src/n4-adaptive-manifold/classifier.ts +139 -0
  127. package/src/n4-adaptive-manifold/index.ts +45 -0
  128. package/src/n4-adaptive-manifold/n4-tokens.css +155 -0
  129. package/src/n4-adaptive-manifold/orchestrator.ts +301 -0
  130. package/src/n4-adaptive-manifold/phase-theme.ts +92 -0
  131. package/src/n4-adaptive-manifold/pinnacle-events.ts +135 -0
  132. package/src/n4-adaptive-manifold/providers/gravitational-provider.ts +191 -0
  133. package/src/n4-adaptive-manifold/providers/manifold-provider.ts +276 -0
  134. package/src/n4-adaptive-manifold/transition.ts +90 -0
  135. package/src/n4-adaptive-manifold/types.ts +313 -0
  136. package/src/p0-primitives/index.ts +6 -0
  137. package/src/p0-primitives/tokens/control-room.css +309 -0
  138. package/src/p0-primitives/tokens/index.ts +6 -0
  139. package/src/p0-primitives/tokens/tokens.css +140 -0
  140. package/src/p0-primitives/tokens/tokens.json +132 -0
  141. package/src/p0-primitives/types/index.ts +123 -0
  142. package/src/p0-primitives/types/plugin-types.ts +74 -0
  143. package/src/p0-primitives/utils/index.ts +39 -0
  144. package/src/platform/hud-protocol.ts +20 -0
  145. package/src/platform/index.ts +3 -0
  146. package/src/s0-state/create-store.ts +84 -0
  147. package/src/s0-state/derived.ts +41 -0
  148. package/src/s0-state/index.ts +6 -0
  149. package/src/showcase/Showcase.svelte +401 -0
  150. package/src/spatial/BspTilingCanvas.svelte +232 -0
  151. package/src/spatial/ForceCanvas.svelte +289 -0
  152. package/src/spatial/LodRenderer.svelte +334 -0
  153. package/src/spatial/SnapZoomCamera.svelte +185 -0
  154. package/src/spatial/ZoneTiler.svelte +311 -0
  155. package/src/spatial/camera-types.ts +45 -0
  156. package/src/spatial/content-proportional-bsp.ts +253 -0
  157. package/src/spatial/force-canvas-types.ts +102 -0
  158. package/src/spatial/index.ts +15 -0
  159. package/src/spatial/lod-types.ts +70 -0
  160. package/src/spatial/zone-tiler-types.ts +177 -0
  161. package/src/stores/vaultStore.svelte +14 -0
  162. package/src/t0-transport/connection.ts +34 -0
  163. package/src/t0-transport/error.ts +37 -0
  164. package/src/t0-transport/events.ts +50 -0
  165. package/src/t0-transport/index.ts +6 -0
  166. package/src/t0-transport/invoke.ts +30 -0
  167. package/src/tauri/index.ts +13 -0
  168. package/src/u0-primitives/allay-gauge/AllayGauge.svelte +90 -0
  169. package/src/u0-primitives/allay-gauge/index.ts +1 -0
  170. package/src/u0-primitives/animated-icon/AnimatedIcon.svelte +273 -0
  171. package/src/u0-primitives/animated-icon/README.md +53 -0
  172. package/src/u0-primitives/animated-icon/index.ts +31 -0
  173. package/src/u0-primitives/assay-badge/AssayBadge.svelte +121 -0
  174. package/src/u0-primitives/assay-badge/AssaySignalBar.svelte +83 -0
  175. package/src/u0-primitives/assay-badge/index.ts +2 -0
  176. package/src/u0-primitives/avatar/Avatar.svelte +177 -0
  177. package/src/u0-primitives/badge/Badge.svelte +149 -0
  178. package/src/u0-primitives/button/Button.svelte +304 -0
  179. package/src/u0-primitives/card/Card.svelte +182 -0
  180. package/src/u0-primitives/dropdown/Dropdown.svelte +305 -0
  181. package/src/u0-primitives/expert-badge/ExpertBadge.svelte +89 -0
  182. package/src/u0-primitives/expert-badge/index.ts +1 -0
  183. package/src/u0-primitives/index.ts +35 -0
  184. package/src/u0-primitives/input/Input.svelte +237 -0
  185. package/src/u0-primitives/modal/Modal.svelte +331 -0
  186. package/src/u0-primitives/modal/index.ts +1 -0
  187. package/src/u0-primitives/spinner/Spinner.svelte +129 -0
  188. package/src/u0-primitives/tabs/Tabs.svelte +225 -0
  189. package/src/u0-primitives/tabs/tabs-types.ts +11 -0
  190. package/src/u0-primitives/toggle/Toggle.svelte +161 -0
  191. package/src/u0-primitives/tooltip/Tooltip.svelte +234 -0
  192. package/src/v0-diagrams/DiagramPanel.svelte +68 -0
  193. package/src/v0-diagrams/MarkmapDiagram.svelte +56 -0
  194. package/src/v0-diagrams/MermaidDiagram.svelte +53 -0
  195. package/src/v0-diagrams/index.ts +4 -0
  196. package/src/v0-diagrams/types.ts +28 -0
  197. package/src/v0-diagrams/v0-tokens.css +6 -0
  198. package/src/vite-env.d.ts +7 -0
  199. package/src/x0-enchanted-blocks/ENCHANTED_BLOCKS_SPEC.md +457 -0
  200. package/src/x0-enchanted-blocks/components/EnchantedBlock.svelte +485 -0
  201. package/src/x0-enchanted-blocks/components/NodepadBlock.svelte +262 -0
  202. package/src/x0-enchanted-blocks/core/block-layout.ts +211 -0
  203. package/src/x0-enchanted-blocks/core/block-types.ts +227 -0
  204. package/src/x0-enchanted-blocks/index.ts +46 -0
@@ -0,0 +1,197 @@
1
+ <script lang="ts">
2
+ import type { GovernanceMode } from './grove-types';
3
+ import Card from '../../u0-primitives/card/Card.svelte';
4
+ import Badge from '../../u0-primitives/badge/Badge.svelte';
5
+
6
+ interface Props {
7
+ groveId: string;
8
+ governance: GovernanceMode;
9
+ memberCount: number;
10
+ coordinatorName?: string;
11
+ isJoined: boolean;
12
+ epoch: number;
13
+ class?: string;
14
+ onjoin?: () => void;
15
+ onleave?: () => void;
16
+ }
17
+
18
+ let {
19
+ groveId,
20
+ governance,
21
+ memberCount,
22
+ coordinatorName,
23
+ isJoined,
24
+ epoch,
25
+ class: className = '',
26
+ onjoin,
27
+ onleave
28
+ }: Props = $props();
29
+
30
+ let governanceLabel = $derived(
31
+ governance === 'leader' ? 'Leader'
32
+ : governance === 'peer' ? 'Peer'
33
+ : 'Role-Based'
34
+ );
35
+
36
+ let governanceColor = $derived<'accent' | 'info' | 'warning'>(
37
+ governance === 'leader' ? 'accent'
38
+ : governance === 'peer' ? 'info'
39
+ : 'warning'
40
+ );
41
+
42
+ function handleAction() {
43
+ if (isJoined) {
44
+ onleave?.();
45
+ } else {
46
+ onjoin?.();
47
+ }
48
+ }
49
+ </script>
50
+
51
+ <Card variant="elevated" class="ds-grove-card {className}">
52
+ <div class="ds-grove-card-inner">
53
+ <div class="ds-grove-header">
54
+ <h3 class="ds-grove-name" title={groveId}>{groveId}</h3>
55
+ <Badge variant="status" color={governanceColor} size="sm">
56
+ {governanceLabel}
57
+ </Badge>
58
+ </div>
59
+
60
+ <div class="ds-grove-meta">
61
+ <span class="ds-grove-stat">
62
+ <span class="ds-grove-stat-value">{memberCount}</span>
63
+ <span class="ds-grove-stat-label">{memberCount === 1 ? 'member' : 'members'}</span>
64
+ </span>
65
+
66
+ <span class="ds-grove-stat">
67
+ <span class="ds-grove-stat-value">e{epoch}</span>
68
+ <span class="ds-grove-stat-label">epoch</span>
69
+ </span>
70
+ </div>
71
+
72
+ {#if coordinatorName}
73
+ <div class="ds-grove-coordinator">
74
+ <span class="ds-grove-coordinator-label">Coordinator:</span>
75
+ <span class="ds-grove-coordinator-name">{coordinatorName}</span>
76
+ </div>
77
+ {/if}
78
+
79
+ <div class="ds-grove-footer">
80
+ <button
81
+ class="ds-grove-action"
82
+ class:is-joined={isJoined}
83
+ onclick={handleAction}
84
+ aria-label={isJoined ? 'Leave grove' : 'Join grove'}
85
+ >
86
+ {isJoined ? 'Leave' : 'Join'}
87
+ </button>
88
+ </div>
89
+ </div>
90
+ </Card>
91
+
92
+ <style>
93
+ .ds-grove-card-inner {
94
+ display: flex;
95
+ flex-direction: column;
96
+ gap: var(--space-3);
97
+ padding: var(--space-4);
98
+ font-family: var(--font-sans);
99
+ }
100
+
101
+ .ds-grove-header {
102
+ display: flex;
103
+ align-items: center;
104
+ justify-content: space-between;
105
+ gap: var(--space-3);
106
+ }
107
+
108
+ .ds-grove-name {
109
+ margin: 0;
110
+ font-size: var(--text-sm);
111
+ font-weight: 600;
112
+ color: var(--color-text-primary);
113
+ overflow: hidden;
114
+ text-overflow: ellipsis;
115
+ white-space: nowrap;
116
+ min-width: 0;
117
+ }
118
+
119
+ .ds-grove-meta {
120
+ display: flex;
121
+ gap: var(--space-4);
122
+ }
123
+
124
+ .ds-grove-stat {
125
+ display: flex;
126
+ align-items: baseline;
127
+ gap: var(--space-1);
128
+ }
129
+
130
+ .ds-grove-stat-value {
131
+ font-size: var(--text-sm);
132
+ font-weight: 600;
133
+ color: var(--color-text-primary);
134
+ font-family: var(--font-mono);
135
+ }
136
+
137
+ .ds-grove-stat-label {
138
+ font-size: var(--text-xs);
139
+ color: var(--color-text-muted);
140
+ }
141
+
142
+ .ds-grove-coordinator {
143
+ font-size: var(--text-xs);
144
+ color: var(--color-text-secondary);
145
+ display: flex;
146
+ align-items: center;
147
+ gap: var(--space-2);
148
+ }
149
+
150
+ .ds-grove-coordinator-label {
151
+ color: var(--color-text-muted);
152
+ }
153
+
154
+ .ds-grove-coordinator-name {
155
+ color: var(--color-accent);
156
+ font-weight: 500;
157
+ }
158
+
159
+ .ds-grove-footer {
160
+ display: flex;
161
+ justify-content: flex-end;
162
+ padding-top: var(--space-2);
163
+ border-top: 1px solid var(--border-subtle);
164
+ }
165
+
166
+ .ds-grove-action {
167
+ display: inline-flex;
168
+ align-items: center;
169
+ justify-content: center;
170
+ padding: var(--space-1) var(--space-4);
171
+ font-size: var(--text-xs);
172
+ font-weight: 600;
173
+ font-family: var(--font-sans);
174
+ border-radius: var(--radius-sm);
175
+ border: 1px solid var(--color-accent);
176
+ background: transparent;
177
+ color: var(--color-accent);
178
+ cursor: pointer;
179
+ transition: all var(--transition-fast);
180
+ }
181
+
182
+ .ds-grove-action:hover {
183
+ background: var(--color-accent);
184
+ color: #111;
185
+ }
186
+
187
+ .ds-grove-action.is-joined {
188
+ border-color: var(--border-default);
189
+ color: var(--color-text-secondary);
190
+ }
191
+
192
+ .ds-grove-action.is-joined:hover {
193
+ border-color: var(--color-error);
194
+ color: var(--color-error);
195
+ background: color-mix(in srgb, var(--color-error) 10%, transparent);
196
+ }
197
+ </style>
@@ -0,0 +1,96 @@
1
+ <script lang="ts">
2
+ import type { TrustState } from './grove-types';
3
+
4
+ interface Props {
5
+ name: string;
6
+ trustState: TrustState;
7
+ isCoordinator?: boolean;
8
+ size?: 'sm' | 'md';
9
+ class?: string;
10
+ }
11
+
12
+ let {
13
+ name,
14
+ trustState,
15
+ isCoordinator = false,
16
+ size = 'md',
17
+ class: className = ''
18
+ }: Props = $props();
19
+
20
+ let dotColor = $derived(
21
+ trustState === 'provisional' ? 'warning'
22
+ : trustState === 'trusted' ? 'success'
23
+ : trustState === 'vouched' ? 'accent'
24
+ : 'error'
25
+ );
26
+ </script>
27
+
28
+ <div
29
+ class="ds-member-badge size-{size} {className}"
30
+ title="{name} ({trustState}){isCoordinator ? ' — coordinator' : ''}"
31
+ role="status"
32
+ >
33
+ <span class="ds-member-dot dot-{dotColor}"></span>
34
+ {#if isCoordinator}
35
+ <span class="ds-member-coordinator" aria-label="Coordinator">&#9733;</span>
36
+ {/if}
37
+ <span class="ds-member-name">{name}</span>
38
+ </div>
39
+
40
+ <style>
41
+ .ds-member-badge {
42
+ display: inline-flex;
43
+ align-items: center;
44
+ gap: var(--space-2);
45
+ font-family: var(--font-sans);
46
+ color: var(--color-text-primary);
47
+ white-space: nowrap;
48
+ }
49
+
50
+ /* Sizes */
51
+ .size-sm {
52
+ font-size: var(--text-xs);
53
+ gap: var(--space-1);
54
+ }
55
+
56
+ .size-md {
57
+ font-size: var(--text-sm);
58
+ }
59
+
60
+ /* Trust state dot */
61
+ .ds-member-dot {
62
+ display: inline-block;
63
+ width: 0.5rem;
64
+ height: 0.5rem;
65
+ border-radius: var(--radius-full);
66
+ flex-shrink: 0;
67
+ }
68
+
69
+ .size-sm .ds-member-dot {
70
+ width: 0.375rem;
71
+ height: 0.375rem;
72
+ }
73
+
74
+ .dot-warning { background: var(--color-warning); }
75
+ .dot-success { background: var(--color-success); }
76
+ .dot-accent { background: var(--color-accent); }
77
+ .dot-error { background: var(--color-error); }
78
+
79
+ /* Coordinator indicator */
80
+ .ds-member-coordinator {
81
+ font-size: 0.6rem;
82
+ color: var(--color-accent);
83
+ line-height: 1;
84
+ flex-shrink: 0;
85
+ }
86
+
87
+ .size-sm .ds-member-coordinator {
88
+ font-size: 0.5rem;
89
+ }
90
+
91
+ /* Name */
92
+ .ds-member-name {
93
+ overflow: hidden;
94
+ text-overflow: ellipsis;
95
+ }
96
+ </style>
@@ -0,0 +1,59 @@
1
+ <script lang="ts">
2
+ import type { MemberInfo } from './grove-types';
3
+ import MemberBadge from './MemberBadge.svelte';
4
+
5
+ interface Props {
6
+ members: MemberInfo[];
7
+ maxVisible?: number;
8
+ class?: string;
9
+ }
10
+
11
+ let {
12
+ members,
13
+ maxVisible = 5,
14
+ class: className = ''
15
+ }: Props = $props();
16
+
17
+ let visibleMembers = $derived(members.slice(0, maxVisible));
18
+ let overflowCount = $derived(Math.max(0, members.length - maxVisible));
19
+ </script>
20
+
21
+ <div class="ds-member-list {className}" role="list" aria-label="Grove members">
22
+ {#each visibleMembers as member (member.realmId)}
23
+ <div class="ds-member-list-item" role="listitem">
24
+ <MemberBadge
25
+ name={member.name}
26
+ trustState={member.trustState}
27
+ isCoordinator={member.isCoordinator}
28
+ size="sm"
29
+ />
30
+ </div>
31
+ {/each}
32
+
33
+ {#if overflowCount > 0}
34
+ <span class="ds-member-overflow" title="{overflowCount} more members">
35
+ +{overflowCount} more
36
+ </span>
37
+ {/if}
38
+ </div>
39
+
40
+ <style>
41
+ .ds-member-list {
42
+ display: flex;
43
+ flex-direction: column;
44
+ gap: var(--space-2);
45
+ font-family: var(--font-sans);
46
+ }
47
+
48
+ .ds-member-list-item {
49
+ display: flex;
50
+ align-items: center;
51
+ }
52
+
53
+ .ds-member-overflow {
54
+ font-size: var(--text-xs);
55
+ color: var(--color-text-muted);
56
+ padding-left: calc(0.375rem + var(--space-1));
57
+ cursor: default;
58
+ }
59
+ </style>
@@ -0,0 +1,29 @@
1
+ // Grove & Accord domain types for the LEAP design system
2
+
3
+ export type TrustState = 'provisional' | 'trusted' | 'vouched' | 'banned';
4
+
5
+ export type GovernanceMode = 'leader' | 'peer' | 'role_based';
6
+
7
+ export interface MemberInfo {
8
+ realmId: string;
9
+ name: string;
10
+ trustState: TrustState;
11
+ isCoordinator: boolean;
12
+ }
13
+
14
+ export interface GroveInfo {
15
+ groveId: string;
16
+ governance: GovernanceMode;
17
+ memberCount: number;
18
+ coordinatorName?: string;
19
+ isJoined: boolean;
20
+ epoch: number;
21
+ }
22
+
23
+ export interface AccordInfo {
24
+ accordId: string;
25
+ domains: string[];
26
+ participantCount: number;
27
+ expiresAt: number;
28
+ groveId?: string;
29
+ }
@@ -0,0 +1,14 @@
1
+ // Grove & Accord — Collaboration UI components
2
+
3
+ export { default as MemberBadge } from './MemberBadge.svelte';
4
+ export { default as MemberList } from './MemberList.svelte';
5
+ export { default as GroveCard } from './GroveCard.svelte';
6
+ export { default as AccordCard } from './AccordCard.svelte';
7
+
8
+ export type {
9
+ TrustState,
10
+ GovernanceMode,
11
+ MemberInfo,
12
+ GroveInfo,
13
+ AccordInfo,
14
+ } from './grove-types';
@@ -0,0 +1,45 @@
1
+ // L0 Layout — Layout composition templates
2
+
3
+ export { default as WorkspaceLayout } from './workspace/WorkspaceLayout.svelte';
4
+ export { default as ChatViewLayout } from './chat-view/ChatViewLayout.svelte';
5
+ export { default as KanbanViewLayout } from './kanban/KanbanViewLayout.svelte';
6
+ export { default as KanbanBoard } from './kanban/KanbanBoard.svelte';
7
+ export { default as KanbanColumn } from './kanban/KanbanColumn.svelte';
8
+ export { default as KanbanCard } from './kanban/KanbanCard.svelte';
9
+
10
+ // Grove & Accord
11
+ export { default as MemberBadge } from './grove/MemberBadge.svelte';
12
+ export { default as MemberList } from './grove/MemberList.svelte';
13
+ export { default as GroveCard } from './grove/GroveCard.svelte';
14
+ export { default as AccordCard } from './grove/AccordCard.svelte';
15
+ export type {
16
+ TrustState,
17
+ GovernanceMode,
18
+ MemberInfo,
19
+ GroveInfo,
20
+ AccordInfo,
21
+ } from './grove/grove-types';
22
+
23
+ // Epistemic organisms
24
+ export * from './epistemic/index.js';
25
+
26
+ // Block Writer — visual block-based writing layout (controlled component)
27
+ export {
28
+ BlockWriter,
29
+ BlockItem,
30
+ BlockHeader,
31
+ BlockContent,
32
+ BlockConnectionLines,
33
+ PHASE_CONFIG,
34
+ renderMarkdown,
35
+ renderInlineMarkdown,
36
+ } from './block-writer/index.js';
37
+
38
+ export type {
39
+ WritingBlock,
40
+ BlockConnection,
41
+ BlockWriterSchema,
42
+ BlockWriterConfig,
43
+ WritingPhase,
44
+ BlockOrigin,
45
+ } from './block-writer/index.js';
@@ -0,0 +1,71 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+
4
+ interface Props {
5
+ class?: string;
6
+ children?: Snippet; // The KanbanColumns go here
7
+ }
8
+
9
+ let {
10
+ class: className = '',
11
+ children
12
+ }: Props = $props();
13
+ </script>
14
+
15
+ <div class="ds-kanban-board {className}">
16
+ <!-- Drag-scrollable container -->
17
+ <div class="ds-kanban-board-scroll">
18
+ <div class="ds-kanban-board-track">
19
+ {#if children}
20
+ {@render children()}
21
+ {/if}
22
+ </div>
23
+ </div>
24
+ </div>
25
+
26
+ <style>
27
+ .ds-kanban-board {
28
+ display: flex;
29
+ flex-direction: column;
30
+ width: 100%;
31
+ height: 100%;
32
+ background: var(--color-bg-canvas); /* Dark desk look */
33
+ /* subtle dot grid for the board background */
34
+ background-image: radial-gradient(var(--grid-dot) 1px, transparent 1px);
35
+ background-size: 20px 20px;
36
+ }
37
+
38
+ .ds-kanban-board-scroll {
39
+ flex: 1;
40
+ overflow-x: auto;
41
+ overflow-y: hidden;
42
+ /* Smooth scrolling on touch pads */
43
+ scroll-behavior: smooth;
44
+ -webkit-overflow-scrolling: touch;
45
+ }
46
+
47
+ .ds-kanban-board-track {
48
+ display: flex;
49
+ height: 100%;
50
+ padding: var(--space-6);
51
+ gap: var(--space-6);
52
+ /* Ensure track expands to fit content, but at least fills the screen */
53
+ min-width: min-content;
54
+ }
55
+
56
+ /* Custom horizontal scrollbar */
57
+ .ds-kanban-board-scroll::-webkit-scrollbar {
58
+ height: 12px;
59
+ }
60
+ .ds-kanban-board-scroll::-webkit-scrollbar-thumb {
61
+ background: rgba(184, 115, 51, 0.2); /* Brass tinted scrollbar */
62
+ border-radius: var(--radius-full);
63
+ border: 3px solid var(--color-bg-canvas);
64
+ }
65
+ .ds-kanban-board-scroll::-webkit-scrollbar-thumb:hover {
66
+ background: rgba(184, 115, 51, 0.4);
67
+ }
68
+ .ds-kanban-board-scroll::-webkit-scrollbar-track {
69
+ background: transparent;
70
+ }
71
+ </style>