@molecule/app-bonds-default-react 1.0.0 → 1.0.2

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 (35) hide show
  1. package/README.md +371 -0
  2. package/dist/index.d.ts +15 -1
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +15 -1
  5. package/dist/optional/charts-chartjs.d.ts +15 -0
  6. package/dist/optional/charts-chartjs.d.ts.map +1 -0
  7. package/dist/optional/charts-chartjs.js +20 -0
  8. package/dist/optional/code-editor-monaco.d.ts +12 -0
  9. package/dist/optional/code-editor-monaco.d.ts.map +1 -0
  10. package/dist/optional/code-editor-monaco.js +17 -0
  11. package/dist/optional/command-palette-cmdk.d.ts +12 -0
  12. package/dist/optional/command-palette-cmdk.d.ts.map +1 -0
  13. package/dist/optional/command-palette-cmdk.js +17 -0
  14. package/dist/optional/drag-drop-dndkit.d.ts +12 -0
  15. package/dist/optional/drag-drop-dndkit.d.ts.map +1 -0
  16. package/dist/optional/drag-drop-dndkit.js +17 -0
  17. package/dist/optional/keyboard-shortcuts-hotkeys.d.ts +12 -0
  18. package/dist/optional/keyboard-shortcuts-hotkeys.d.ts.map +1 -0
  19. package/dist/optional/keyboard-shortcuts-hotkeys.js +17 -0
  20. package/dist/optional/maps-leaflet.d.ts +19 -0
  21. package/dist/optional/maps-leaflet.d.ts.map +1 -0
  22. package/dist/optional/maps-leaflet.js +24 -0
  23. package/dist/optional/realtime-socketio.d.ts +24 -0
  24. package/dist/optional/realtime-socketio.d.ts.map +1 -0
  25. package/dist/optional/realtime-socketio.js +29 -0
  26. package/dist/optional/video-hls.d.ts +12 -0
  27. package/dist/optional/video-hls.d.ts.map +1 -0
  28. package/dist/optional/video-hls.js +17 -0
  29. package/dist/optional/virtual-scroll-tanstack.d.ts +12 -0
  30. package/dist/optional/virtual-scroll-tanstack.d.ts.map +1 -0
  31. package/dist/optional/virtual-scroll-tanstack.js +17 -0
  32. package/dist/setup.d.ts +0 -26
  33. package/dist/setup.d.ts.map +1 -1
  34. package/dist/setup.js +0 -80
  35. package/package.json +83 -61
package/README.md ADDED
@@ -0,0 +1,371 @@
1
+ <!--
2
+ AUTO-GENERATED — DO NOT EDIT THIS FILE.
3
+ Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
4
+ Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
5
+ To change this document, edit the module-level JSDoc in src/index.ts.
6
+ Generated: 2026-08-06T06:01:29.248Z
7
+ -->
8
+
9
+ # @molecule/app-bonds-default-react
10
+
11
+ > **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
12
+ > It is written to be read by coding agents as much as by people, and is generated from this
13
+ > package's source — edit `src/index.ts` JSDoc, not this file.
14
+
15
+ `@molecule/app-bonds-default-react` — default app-side bond wirings for the
16
+ React fleet stack, replacing the byte-identical per-app files:
17
+
18
+ - `bootstrapApp({ App, authClient, setupProviders, registerPWA? })` — the
19
+ whole scaffolded `src/main.tsx`: awaits `setupProviders()` BEFORE the
20
+ first render, kicks off `authClient.initialize()` (best-effort), mounts
21
+ `<App />` in StrictMode on `#root`, then registers the PWA.
22
+ - `setupAllDefaultBonds()` — wires the SEVEN universal bonds in one call:
23
+ fonts-arimo, routing-react-router, storage-localstorage, styling-tailwind
24
+ (registers the tailwind-merge class merger), theme-css-variables
25
+ (light + dark via `getDefaultThemeProvider()`), ui-tailwind ClassMap,
26
+ icons-molecule. Each also exists as an individual `setupApp*()` for apps
27
+ that wire a la carte (per-app `app/src/bonds/<name>.ts` files stay 1-line
28
+ re-exports of these).
29
+ - **Optional provider wirings live behind subpaths**, one module per pair:
30
+ `@molecule/app-bonds-default-react/optional/<pair>.js` — `realtime-socketio`,
31
+ `keyboard-shortcuts-hotkeys`, `command-palette-cmdk`, `code-editor-monaco`,
32
+ `virtual-scroll-tanstack`, `drag-drop-dndkit`, `charts-chartjs`,
33
+ `maps-leaflet`, `video-hls`. Import ONLY the ones the app installs.
34
+ - Auth/http factories — `createDefaultAuthClient(authConfig)` returns
35
+ `{ authClient, setupAuthDefault }`; the `...WithHttpSync` /
36
+ `...WithFetchClient` variants also keep the bonded http client's bearer
37
+ token in sync with auth events.
38
+
39
+ ## Quick Start
40
+
41
+ ```tsx
42
+ // src/main.tsx
43
+ import {
44
+ bootstrapApp,
45
+ createDefaultAuthClientWithHttpSync,
46
+ setupAllDefaultBonds,
47
+ } from '@molecule/app-bonds-default-react'
48
+ // Optional providers come from their own subpath — see @remarks.
49
+ import { setupAppCodeEditorMonaco } from '@molecule/app-bonds-default-react/optional/code-editor-monaco.js'
50
+
51
+ import { App } from './App.js'
52
+ import { authConfig } from './config.js'
53
+
54
+ const { authClient, setupAuthDefault } = createDefaultAuthClientWithHttpSync(authConfig)
55
+
56
+ bootstrapApp({
57
+ App,
58
+ authClient,
59
+ // Async so optional async bonds are AWAITED before the first render.
60
+ setupProviders: async () => {
61
+ setupAllDefaultBonds()
62
+ setupAuthDefault()
63
+ await setupAppCodeEditorMonaco() // only if the app uses the code editor
64
+ },
65
+ })
66
+ ```
67
+
68
+ ## Type
69
+
70
+ `feature`
71
+
72
+ ## Installation
73
+
74
+ ```bash
75
+ npm install @molecule/app-bonds-default-react @molecule/app-auth @molecule/app-charts @molecule/app-charts-chartjs @molecule/app-code-editor @molecule/app-code-editor-monaco @molecule/app-command-palette @molecule/app-command-palette-cmdk @molecule/app-drag-drop @molecule/app-drag-drop-dndkit @molecule/app-fonts @molecule/app-fonts-arimo @molecule/app-http @molecule/app-icons @molecule/app-icons-molecule @molecule/app-keyboard-shortcuts @molecule/app-keyboard-shortcuts-hotkeys @molecule/app-maps @molecule/app-maps-leaflet @molecule/app-realtime @molecule/app-realtime-socketio @molecule/app-routing @molecule/app-routing-react-router @molecule/app-storage @molecule/app-storage-localstorage @molecule/app-styling-tailwind @molecule/app-theme @molecule/app-theme-css-variables @molecule/app-ui @molecule/app-ui-tailwind @molecule/app-video @molecule/app-video-hls @molecule/app-virtual-scroll @molecule/app-virtual-scroll-tanstack react react-dom
76
+ npm install -D @types/react @types/react-dom
77
+ ```
78
+
79
+ ## API
80
+
81
+ ### Functions
82
+
83
+ #### `bootstrapApp(opts)`
84
+
85
+ Boot the React app: wire bonds, kick off auth initialization, mount
86
+ `<App />` inside `<StrictMode>` to `#root`, and (optionally) register
87
+ the PWA service worker.
88
+
89
+ Replaces the 20-line per-app `src/main.tsx` that 97 fleet apps shipped
90
+ byte-identically.
91
+
92
+ ```typescript
93
+ function bootstrapApp(opts: {
94
+ App: ComponentType
95
+ authClient: { initialize: () => Promise<void> }
96
+ setupProviders: () => void | Promise<void>
97
+ registerPWA?: () => void
98
+ }): void
99
+ ```
100
+
101
+ #### `createDefaultAuthClient(authConfig)`
102
+
103
+ Builds the default JWT auth client + wires it into `@molecule/app-auth`.
104
+
105
+ Replaces the 16-line per-app `bonds/auth-default.ts` that 93 fleet
106
+ apps shipped byte-identically. Apps pass their own `authConfig`
107
+ (which lives in `src/config.ts`).
108
+
109
+ ```typescript
110
+ function createDefaultAuthClient(authConfig: AuthClientConfig): {
111
+ authClient: AuthClient<TUser>
112
+ setupAuthDefault: () => void
113
+ }
114
+ ```
115
+
116
+ #### `createDefaultAuthClientWithFetchClient(authConfig, fetchClientOptions)`
117
+
118
+ Most aggressive variant — bonds a fetch-based HTTP client with the
119
+ given `baseURL` (so molecule pkg `useGet('/path')` calls hit
120
+ `${baseURL}/path` instead of the SPA's catch-all route), AND keeps
121
+ its bearer token in sync with auth events.
122
+
123
+ Used by apps where molecule packages render pricing / billing /
124
+ other authed JSON-fetching screens that need both behaviors.
125
+
126
+ ```typescript
127
+ function createDefaultAuthClientWithFetchClient(
128
+ authConfig: AuthClientConfig,
129
+ fetchClientOptions: { baseURL: string; withCredentials?: boolean },
130
+ ): { authClient: AuthClient<TUser>; setupAuthDefault: () => void }
131
+ ```
132
+
133
+ #### `createDefaultAuthClientWithHttpSync(authConfig)`
134
+
135
+ Variant of `createDefaultAuthClient` that also keeps the bonded
136
+ `@molecule/app-http` client's bearer token in sync with auth events
137
+ (login / register / refresh / logout). Required by apps whose http
138
+ client must carry the JWT on every request — without this wiring,
139
+ authed endpoints return 401 after page reloads or token refresh.
140
+
141
+ Hydrates the HTTP client's token from the persisted auth state
142
+ on setup, then listens for auth events to keep them aligned.
143
+
144
+ ```typescript
145
+ function createDefaultAuthClientWithHttpSync(authConfig: AuthClientConfig): {
146
+ authClient: AuthClient<TUser>
147
+ setupAuthDefault: () => void
148
+ }
149
+ ```
150
+
151
+ #### `createDefaultHttpClient(baseURL)`
152
+
153
+ Builds the default fetch-based HTTP client + wires it into
154
+ `@molecule/app-http`. Replaces the per-app `bonds/http-default.ts`
155
+ shipped by ~52 fleet apps.
156
+
157
+ ```typescript
158
+ function createDefaultHttpClient(baseURL: string): {
159
+ httpClient: HttpClient
160
+ setupHttpDefault: () => void
161
+ }
162
+ ```
163
+
164
+ #### `createDefaultHttpClientWithAuthBearer(opts)`
165
+
166
+ Variant of `createDefaultHttpClient` that adds a request interceptor
167
+ injecting the JWT bearer token from the auth client AND (optionally)
168
+ stripping a leading `/api/` from request URLs.
169
+
170
+ Replaces ~20 per-app `bonds/http-default.ts` files that hand-roll
171
+ this same wiring. Pass `stripApiPrefix: true` when the app uses
172
+ `baseURL: '/api'` to handle pages that pass `/api/`-prefixed paths
173
+ (would otherwise resolve to `/api/api/...` and 404).
174
+
175
+ ```typescript
176
+ function createDefaultHttpClientWithAuthBearer(opts: {
177
+ baseURL: string
178
+ withCredentials?: boolean
179
+ stripApiPrefix?: boolean
180
+ getToken: () => string | null | undefined
181
+ }): { httpClient: HttpClient; setupHttpDefault: () => void }
182
+ ```
183
+
184
+ #### `getDefaultThemeProvider()`
185
+
186
+ Returns (and lazily constructs) the shared default CSS-variables theme provider.
187
+
188
+ ```typescript
189
+ function getDefaultThemeProvider(): ThemeProvider
190
+ ```
191
+
192
+ #### `setupAllDefaultBonds()`
193
+
194
+ Wires all 7 universal app-side bonds in one call — fonts, routing,
195
+ storage, styling, theme, UI ClassMap, icons (in that order). Auth
196
+
197
+ - i18n stay per-app because they need app-specific config.
198
+
199
+ Replaces 9 individual setupX() calls in per-app `bonds/index.ts`.
200
+
201
+ ```typescript
202
+ function setupAllDefaultBonds(): void
203
+ ```
204
+
205
+ #### `setupAppFontsArimo()`
206
+
207
+ Wires `@molecule/app-fonts-arimo` to `@molecule/app-fonts`.
208
+
209
+ ```typescript
210
+ function setupAppFontsArimo(): void
211
+ ```
212
+
213
+ #### `setupAppIconsMolecule()`
214
+
215
+ Wires `@molecule/app-icons-molecule` to `@molecule/app-icons`.
216
+
217
+ ```typescript
218
+ function setupAppIconsMolecule(): void
219
+ ```
220
+
221
+ #### `setupAppRoutingReactRouter()`
222
+
223
+ Wires `@molecule/app-routing-react-router` to `@molecule/app-routing`.
224
+
225
+ ```typescript
226
+ function setupAppRoutingReactRouter(): void
227
+ ```
228
+
229
+ #### `setupAppStorageLocalstorage()`
230
+
231
+ Wires `@molecule/app-storage-localstorage` to `@molecule/app-storage`.
232
+
233
+ ```typescript
234
+ function setupAppStorageLocalstorage(): void
235
+ ```
236
+
237
+ #### `setupAppStylingTailwind()`
238
+
239
+ Wires `@molecule/app-styling-tailwind`: registers `tailwind-merge` as the
240
+ class merger for `@molecule/app-styling`'s `cn()`, so conflicting Tailwind
241
+ utilities resolve (last wins). Tailwind itself is configured via env vars +
242
+ the Vite plugin; this is the one runtime hook the framework-agnostic styling
243
+ core needs so it carries no Tailwind dependency of its own.
244
+
245
+ ```typescript
246
+ function setupAppStylingTailwind(): void
247
+ ```
248
+
249
+ #### `setupAppThemeCssVariables()`
250
+
251
+ Wires the default light + dark CSS-variables theme provider to `@molecule/app-theme`.
252
+
253
+ ```typescript
254
+ function setupAppThemeCssVariables(): void
255
+ ```
256
+
257
+ #### `setupAppUiTailwind()`
258
+
259
+ Wires `@molecule/app-ui-tailwind` `classMap` to `@molecule/app-ui`.
260
+
261
+ ```typescript
262
+ function setupAppUiTailwind(): void
263
+ ```
264
+
265
+ ## Injection Notes
266
+
267
+ ### Requirements
268
+
269
+ Peer dependencies:
270
+
271
+ - `@molecule/app-auth` ^1.0.1
272
+ - `@molecule/app-charts` ^1.0.1
273
+ - `@molecule/app-charts-chartjs` ^1.0.1
274
+ - `@molecule/app-code-editor` ^1.0.1
275
+ - `@molecule/app-code-editor-monaco` ^1.0.1
276
+ - `@molecule/app-command-palette` ^1.0.1
277
+ - `@molecule/app-command-palette-cmdk` ^1.0.1
278
+ - `@molecule/app-drag-drop` ^1.0.1
279
+ - `@molecule/app-drag-drop-dndkit` ^1.0.1
280
+ - `@molecule/app-fonts` ^1.0.1
281
+ - `@molecule/app-fonts-arimo` ^1.0.1
282
+ - `@molecule/app-http` ^1.0.1
283
+ - `@molecule/app-icons` ^1.0.1
284
+ - `@molecule/app-icons-molecule` ^1.0.1
285
+ - `@molecule/app-keyboard-shortcuts` ^1.0.1
286
+ - `@molecule/app-keyboard-shortcuts-hotkeys` ^1.0.1
287
+ - `@molecule/app-maps` ^1.0.1
288
+ - `@molecule/app-maps-leaflet` ^1.0.1
289
+ - `@molecule/app-realtime` ^1.0.1
290
+ - `@molecule/app-realtime-socketio` ^1.0.1
291
+ - `@molecule/app-routing` ^1.0.1
292
+ - `@molecule/app-routing-react-router` ^1.0.1
293
+ - `@molecule/app-storage` ^1.0.1
294
+ - `@molecule/app-storage-localstorage` ^1.0.1
295
+ - `@molecule/app-styling-tailwind` ^1.0.1
296
+ - `@molecule/app-theme` ^1.0.1
297
+ - `@molecule/app-theme-css-variables` ^1.0.1
298
+ - `@molecule/app-ui` ^1.0.1
299
+ - `@molecule/app-ui-tailwind` ^1.0.1
300
+ - `@molecule/app-video` ^1.0.1
301
+ - `@molecule/app-video-hls` ^1.0.1
302
+ - `@molecule/app-virtual-scroll` ^1.0.1
303
+ - `@molecule/app-virtual-scroll-tanstack` ^1.0.1
304
+ - `react` ^18.0.0 || ^19.0.0
305
+ - `react-dom` ^18.0.0 || ^19.0.0
306
+
307
+ ### Runtime Dependencies
308
+
309
+ - `@molecule/app-auth`
310
+ - `@molecule/app-charts`
311
+ - `@molecule/app-charts-chartjs`
312
+ - `@molecule/app-code-editor`
313
+ - `@molecule/app-code-editor-monaco`
314
+ - `@molecule/app-command-palette`
315
+ - `@molecule/app-command-palette-cmdk`
316
+ - `@molecule/app-drag-drop`
317
+ - `@molecule/app-drag-drop-dndkit`
318
+ - `@molecule/app-fonts`
319
+ - `@molecule/app-fonts-arimo`
320
+ - `@molecule/app-http`
321
+ - `@molecule/app-icons`
322
+ - `@molecule/app-icons-molecule`
323
+ - `@molecule/app-keyboard-shortcuts`
324
+ - `@molecule/app-keyboard-shortcuts-hotkeys`
325
+ - `@molecule/app-maps`
326
+ - `@molecule/app-maps-leaflet`
327
+ - `@molecule/app-realtime`
328
+ - `@molecule/app-realtime-socketio`
329
+ - `@molecule/app-routing`
330
+ - `@molecule/app-routing-react-router`
331
+ - `@molecule/app-storage`
332
+ - `@molecule/app-storage-localstorage`
333
+ - `@molecule/app-styling-tailwind`
334
+ - `@molecule/app-theme`
335
+ - `@molecule/app-theme-css-variables`
336
+ - `@molecule/app-ui`
337
+ - `@molecule/app-ui-tailwind`
338
+ - `@molecule/app-video`
339
+ - `@molecule/app-video-hls`
340
+ - `@molecule/app-virtual-scroll`
341
+ - `@molecule/app-virtual-scroll-tanstack`
342
+ - `react`
343
+ - `react-dom`
344
+
345
+ - **Optional setups are NOT exported from the package root.** Import each from
346
+ its own subpath — `@molecule/app-bonds-default-react/optional/maps-leaflet.js`,
347
+ not `from '@molecule/app-bonds-default-react'`. A bundler must RESOLVE every
348
+ `import()` in a module it pulls into the graph, before tree-shaking can drop
349
+ anything, so while these lived in the barrel every app inherited all 18
350
+ optional providers and any app that had not installed all of them failed to
351
+ build with `Rolldown failed to resolve import "@molecule/app-maps"`. Only
352
+ import a subpath whose provider pair the app actually installs.
353
+ - `setupAllDefaultBonds()` does NOT wire the optional bonds. Those ship as
354
+ separate ASYNC setups — `setupAppRealtimeSocketio`,
355
+ `setupAppKeyboardShortcutsHotkeys`, `setupAppCommandPaletteCmdk`,
356
+ `setupAppCodeEditorMonaco`, `setupAppVirtualScrollTanstack`,
357
+ `setupAppDragDropDndkit`, `setupAppChartsChartjs`, `setupAppMapsLeaflet`,
358
+ `setupAppVideoHls` — and MUST be awaited inside `setupProviders`
359
+ (make it async). `bootstrapApp` awaits `setupProviders()` before mounting
360
+ so bonded providers exist by a component's first effect; a fire-and-forget
361
+ async setup races the mount and intermittently loses.
362
+ - Plain `createDefaultAuthClient` does NOT attach the JWT to the bonded
363
+ http client. If molecule packages call authed `/api` endpoints, use
364
+ `createDefaultAuthClientWithHttpSync` (or `...WithFetchClient` to also
365
+ bond a fetch client with a `baseURL`) — otherwise those endpoints return
366
+ 401 after a page reload or token refresh.
367
+ - `getDefaultThemeProvider()` constructs lazily because the CSS-variables
368
+ theme provider touches `localStorage` at construction — importing this
369
+ package is SSR/test-safe, but only CALL it in a DOM environment. Apps
370
+ with custom themes build their own provider and skip
371
+ `setupAppThemeCssVariables()`.
package/dist/index.d.ts CHANGED
@@ -13,6 +13,11 @@
13
13
  * icons-molecule. Each also exists as an individual `setupApp*()` for apps
14
14
  * that wire a la carte (per-app `app/src/bonds/<name>.ts` files stay 1-line
15
15
  * re-exports of these).
16
+ * - **Optional provider wirings live behind subpaths**, one module per pair:
17
+ * `@molecule/app-bonds-default-react/optional/<pair>.js` — `realtime-socketio`,
18
+ * `keyboard-shortcuts-hotkeys`, `command-palette-cmdk`, `code-editor-monaco`,
19
+ * `virtual-scroll-tanstack`, `drag-drop-dndkit`, `charts-chartjs`,
20
+ * `maps-leaflet`, `video-hls`. Import ONLY the ones the app installs.
16
21
  * - Auth/http factories — `createDefaultAuthClient(authConfig)` returns
17
22
  * `{ authClient, setupAuthDefault }`; the `...WithHttpSync` /
18
23
  * `...WithFetchClient` variants also keep the bonded http client's bearer
@@ -25,8 +30,9 @@
25
30
  * bootstrapApp,
26
31
  * createDefaultAuthClientWithHttpSync,
27
32
  * setupAllDefaultBonds,
28
- * setupAppCodeEditorMonaco,
29
33
  * } from '@molecule/app-bonds-default-react'
34
+ * // Optional providers come from their own subpath — see @remarks.
35
+ * import { setupAppCodeEditorMonaco } from '@molecule/app-bonds-default-react/optional/code-editor-monaco.js'
30
36
  *
31
37
  * import { App } from './App.js'
32
38
  * import { authConfig } from './config.js'
@@ -47,6 +53,14 @@
47
53
  * ```
48
54
  *
49
55
  * @remarks
56
+ * - **Optional setups are NOT exported from the package root.** Import each from
57
+ * its own subpath — `@molecule/app-bonds-default-react/optional/maps-leaflet.js`,
58
+ * not `from '@molecule/app-bonds-default-react'`. A bundler must RESOLVE every
59
+ * `import()` in a module it pulls into the graph, before tree-shaking can drop
60
+ * anything, so while these lived in the barrel every app inherited all 18
61
+ * optional providers and any app that had not installed all of them failed to
62
+ * build with `Rolldown failed to resolve import "@molecule/app-maps"`. Only
63
+ * import a subpath whose provider pair the app actually installs.
50
64
  * - `setupAllDefaultBonds()` does NOT wire the optional bonds. Those ship as
51
65
  * separate ASYNC setups — `setupAppRealtimeSocketio`,
52
66
  * `setupAppKeyboardShortcutsHotkeys`, `setupAppCommandPaletteCmdk`,
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsEG;AAEH,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AAEH,cAAc,WAAW,CAAA;AACzB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -13,6 +13,11 @@
13
13
  * icons-molecule. Each also exists as an individual `setupApp*()` for apps
14
14
  * that wire a la carte (per-app `app/src/bonds/<name>.ts` files stay 1-line
15
15
  * re-exports of these).
16
+ * - **Optional provider wirings live behind subpaths**, one module per pair:
17
+ * `@molecule/app-bonds-default-react/optional/<pair>.js` — `realtime-socketio`,
18
+ * `keyboard-shortcuts-hotkeys`, `command-palette-cmdk`, `code-editor-monaco`,
19
+ * `virtual-scroll-tanstack`, `drag-drop-dndkit`, `charts-chartjs`,
20
+ * `maps-leaflet`, `video-hls`. Import ONLY the ones the app installs.
16
21
  * - Auth/http factories — `createDefaultAuthClient(authConfig)` returns
17
22
  * `{ authClient, setupAuthDefault }`; the `...WithHttpSync` /
18
23
  * `...WithFetchClient` variants also keep the bonded http client's bearer
@@ -25,8 +30,9 @@
25
30
  * bootstrapApp,
26
31
  * createDefaultAuthClientWithHttpSync,
27
32
  * setupAllDefaultBonds,
28
- * setupAppCodeEditorMonaco,
29
33
  * } from '@molecule/app-bonds-default-react'
34
+ * // Optional providers come from their own subpath — see @remarks.
35
+ * import { setupAppCodeEditorMonaco } from '@molecule/app-bonds-default-react/optional/code-editor-monaco.js'
30
36
  *
31
37
  * import { App } from './App.js'
32
38
  * import { authConfig } from './config.js'
@@ -47,6 +53,14 @@
47
53
  * ```
48
54
  *
49
55
  * @remarks
56
+ * - **Optional setups are NOT exported from the package root.** Import each from
57
+ * its own subpath — `@molecule/app-bonds-default-react/optional/maps-leaflet.js`,
58
+ * not `from '@molecule/app-bonds-default-react'`. A bundler must RESOLVE every
59
+ * `import()` in a module it pulls into the graph, before tree-shaking can drop
60
+ * anything, so while these lived in the barrel every app inherited all 18
61
+ * optional providers and any app that had not installed all of them failed to
62
+ * build with `Rolldown failed to resolve import "@molecule/app-maps"`. Only
63
+ * import a subpath whose provider pair the app actually installs.
50
64
  * - `setupAllDefaultBonds()` does NOT wire the optional bonds. Those ship as
51
65
  * separate ASYNC setups — `setupAppRealtimeSocketio`,
52
66
  * `setupAppKeyboardShortcutsHotkeys`, `setupAppCommandPaletteCmdk`,
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-charts` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /**
11
+ * Wires `@molecule/app-charts-chartjs` (Chart.js) to `@molecule/app-charts` — real
12
+ * line/bar/pie/etc. charts instead of the core's placeholder panel.
13
+ */
14
+ export declare function setupAppChartsChartjs(): Promise<void>;
15
+ //# sourceMappingURL=charts-chartjs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charts-chartjs.d.ts","sourceRoot":"","sources":["../../src/optional/charts-chartjs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3D"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-charts` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /**
11
+ * Wires `@molecule/app-charts-chartjs` (Chart.js) to `@molecule/app-charts` — real
12
+ * line/bar/pie/etc. charts instead of the core's placeholder panel.
13
+ */
14
+ export async function setupAppChartsChartjs() {
15
+ const [{ setProvider: setCharts }, { provider }] = await Promise.all([
16
+ import('@molecule/app-charts'),
17
+ import('@molecule/app-charts-chartjs'),
18
+ ]);
19
+ setCharts(provider);
20
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-code-editor` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-code-editor-monaco` to `@molecule/app-code-editor`. */
11
+ export declare function setupAppCodeEditorMonaco(): Promise<void>;
12
+ //# sourceMappingURL=code-editor-monaco.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-editor-monaco.d.ts","sourceRoot":"","sources":["../../src/optional/code-editor-monaco.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,+EAA+E;AAC/E,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9D"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-code-editor` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-code-editor-monaco` to `@molecule/app-code-editor`. */
11
+ export async function setupAppCodeEditorMonaco() {
12
+ const [{ setProvider: setEditor }, { provider }] = await Promise.all([
13
+ import('@molecule/app-code-editor'),
14
+ import('@molecule/app-code-editor-monaco'),
15
+ ]);
16
+ setEditor(provider);
17
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-command-palette` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-command-palette-cmdk` to `@molecule/app-command-palette`. */
11
+ export declare function setupAppCommandPaletteCmdk(): Promise<void>;
12
+ //# sourceMappingURL=command-palette-cmdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-palette-cmdk.d.ts","sourceRoot":"","sources":["../../src/optional/command-palette-cmdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,qFAAqF;AACrF,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAMhE"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-command-palette` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-command-palette-cmdk` to `@molecule/app-command-palette`. */
11
+ export async function setupAppCommandPaletteCmdk() {
12
+ const [{ setProvider: setPalette }, { provider }] = await Promise.all([
13
+ import('@molecule/app-command-palette'),
14
+ import('@molecule/app-command-palette-cmdk'),
15
+ ]);
16
+ setPalette(provider);
17
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-drag-drop` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-drag-drop-dndkit` to `@molecule/app-drag-drop`. */
11
+ export declare function setupAppDragDropDndkit(): Promise<void>;
12
+ //# sourceMappingURL=drag-drop-dndkit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drag-drop-dndkit.d.ts","sourceRoot":"","sources":["../../src/optional/drag-drop-dndkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,2EAA2E;AAC3E,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM5D"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-drag-drop` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-drag-drop-dndkit` to `@molecule/app-drag-drop`. */
11
+ export async function setupAppDragDropDndkit() {
12
+ const [{ setProvider: setDnd }, { provider }] = await Promise.all([
13
+ import('@molecule/app-drag-drop'),
14
+ import('@molecule/app-drag-drop-dndkit'),
15
+ ]);
16
+ setDnd(provider);
17
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-keyboard-shortcuts` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-keyboard-shortcuts-hotkeys` to `@molecule/app-keyboard-shortcuts`. */
11
+ export declare function setupAppKeyboardShortcutsHotkeys(): Promise<void>;
12
+ //# sourceMappingURL=keyboard-shortcuts-hotkeys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard-shortcuts-hotkeys.d.ts","sourceRoot":"","sources":["../../src/optional/keyboard-shortcuts-hotkeys.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,8FAA8F;AAC9F,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,IAAI,CAAC,CAMtE"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-keyboard-shortcuts` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-keyboard-shortcuts-hotkeys` to `@molecule/app-keyboard-shortcuts`. */
11
+ export async function setupAppKeyboardShortcutsHotkeys() {
12
+ const [{ setProvider: setKbd }, { provider }] = await Promise.all([
13
+ import('@molecule/app-keyboard-shortcuts'),
14
+ import('@molecule/app-keyboard-shortcuts-hotkeys'),
15
+ ]);
16
+ setKbd(provider);
17
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-maps` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale. `@molecule/app-maps` is the import that first exposed the problem:
7
+ * it is the alphabetically-first unresolvable provider, so it is the one Rolldown
8
+ * named while the other 14 were equally broken.
9
+ *
10
+ * @module
11
+ */
12
+ /**
13
+ * Wires `@molecule/app-maps-leaflet` (Leaflet + OpenStreetMap, no API key) to
14
+ * `@molecule/app-maps` — a real slippy map instead of the core's grey placeholder.
15
+ * REQUIRES `import 'leaflet/dist/leaflet.css'` once in the app entry (the scaffolded
16
+ * `bonds/app-maps-leaflet.ts` does this); without it tiles + markers mis-position.
17
+ */
18
+ export declare function setupAppMapsLeaflet(): Promise<void>;
19
+ //# sourceMappingURL=maps-leaflet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maps-leaflet.d.ts","sourceRoot":"","sources":["../../src/optional/maps-leaflet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAMzD"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-maps` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale. `@molecule/app-maps` is the import that first exposed the problem:
7
+ * it is the alphabetically-first unresolvable provider, so it is the one Rolldown
8
+ * named while the other 14 were equally broken.
9
+ *
10
+ * @module
11
+ */
12
+ /**
13
+ * Wires `@molecule/app-maps-leaflet` (Leaflet + OpenStreetMap, no API key) to
14
+ * `@molecule/app-maps` — a real slippy map instead of the core's grey placeholder.
15
+ * REQUIRES `import 'leaflet/dist/leaflet.css'` once in the app entry (the scaffolded
16
+ * `bonds/app-maps-leaflet.ts` does this); without it tiles + markers mis-position.
17
+ */
18
+ export async function setupAppMapsLeaflet() {
19
+ const [{ setProvider: setMaps }, { provider }] = await Promise.all([
20
+ import('@molecule/app-maps'),
21
+ import('@molecule/app-maps-leaflet'),
22
+ ]);
23
+ setMaps(provider);
24
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-realtime` bond.
3
+ *
4
+ * Lives in its own module, reachable only via the
5
+ * `@molecule/app-bonds-default-react/optional/realtime-socketio.js` subpath, because
6
+ * a bundler must RESOLVE every `import()` in a module it pulls into the graph —
7
+ * before tree-shaking can drop anything. While these wirings sat in `setup.ts`
8
+ * (re-exported from the barrel), importing `bootstrapApp` dragged all 18 optional
9
+ * providers into the graph, and any app that had not installed all of them failed
10
+ * to build:
11
+ *
12
+ * ```
13
+ * [vite]: Rolldown failed to resolve import "@molecule/app-maps"
14
+ * from ".../app-bonds-default-react/dist/setup.js"
15
+ * ```
16
+ *
17
+ * One module per provider pair means an app pays for exactly the providers it
18
+ * imports — which is what made them optional in the first place.
19
+ *
20
+ * @module
21
+ */
22
+ /** Wires `@molecule/app-realtime-socketio` to `@molecule/app-realtime`. */
23
+ export declare function setupAppRealtimeSocketio(): Promise<void>;
24
+ //# sourceMappingURL=realtime-socketio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-socketio.d.ts","sourceRoot":"","sources":["../../src/optional/realtime-socketio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,2EAA2E;AAC3E,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9D"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-realtime` bond.
3
+ *
4
+ * Lives in its own module, reachable only via the
5
+ * `@molecule/app-bonds-default-react/optional/realtime-socketio.js` subpath, because
6
+ * a bundler must RESOLVE every `import()` in a module it pulls into the graph —
7
+ * before tree-shaking can drop anything. While these wirings sat in `setup.ts`
8
+ * (re-exported from the barrel), importing `bootstrapApp` dragged all 18 optional
9
+ * providers into the graph, and any app that had not installed all of them failed
10
+ * to build:
11
+ *
12
+ * ```
13
+ * [vite]: Rolldown failed to resolve import "@molecule/app-maps"
14
+ * from ".../app-bonds-default-react/dist/setup.js"
15
+ * ```
16
+ *
17
+ * One module per provider pair means an app pays for exactly the providers it
18
+ * imports — which is what made them optional in the first place.
19
+ *
20
+ * @module
21
+ */
22
+ /** Wires `@molecule/app-realtime-socketio` to `@molecule/app-realtime`. */
23
+ export async function setupAppRealtimeSocketio() {
24
+ const [{ setProvider: setRealtime }, { provider }] = await Promise.all([
25
+ import('@molecule/app-realtime'),
26
+ import('@molecule/app-realtime-socketio'),
27
+ ]);
28
+ setRealtime(provider);
29
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-video` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-video-hls` (hls.js — HLS streaming everywhere) to `@molecule/app-video`. */
11
+ export declare function setupAppVideoHls(): Promise<void>;
12
+ //# sourceMappingURL=video-hls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-hls.d.ts","sourceRoot":"","sources":["../../src/optional/video-hls.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,oGAAoG;AACpG,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAMtD"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-video` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-video-hls` (hls.js — HLS streaming everywhere) to `@molecule/app-video`. */
11
+ export async function setupAppVideoHls() {
12
+ const [{ setProvider: setVideo }, { provider }] = await Promise.all([
13
+ import('@molecule/app-video'),
14
+ import('@molecule/app-video-hls'),
15
+ ]);
16
+ setVideo(provider);
17
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-virtual-scroll` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-virtual-scroll-tanstack` to `@molecule/app-virtual-scroll`. */
11
+ export declare function setupAppVirtualScrollTanstack(): Promise<void>;
12
+ //# sourceMappingURL=virtual-scroll-tanstack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-scroll-tanstack.d.ts","sourceRoot":"","sources":["../../src/optional/virtual-scroll-tanstack.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uFAAuF;AACvF,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CAMnE"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Wiring for the optional `@molecule/app-virtual-scroll` bond.
3
+ *
4
+ * Its own module + subpath export so a bundler only resolves these providers when
5
+ * an app actually imports them — see `./realtime-socketio.js` for the full
6
+ * rationale.
7
+ *
8
+ * @module
9
+ */
10
+ /** Wires `@molecule/app-virtual-scroll-tanstack` to `@molecule/app-virtual-scroll`. */
11
+ export async function setupAppVirtualScrollTanstack() {
12
+ const [{ setProvider: setScroll }, { provider }] = await Promise.all([
13
+ import('@molecule/app-virtual-scroll'),
14
+ import('@molecule/app-virtual-scroll-tanstack'),
15
+ ]);
16
+ setScroll(provider);
17
+ }
package/dist/setup.d.ts CHANGED
@@ -35,32 +35,6 @@ export declare function setupAppStylingTailwind(): void;
35
35
  export declare function setupAppThemeCssVariables(): void;
36
36
  /** Wires `@molecule/app-ui-tailwind` `classMap` to `@molecule/app-ui`. */
37
37
  export declare function setupAppUiTailwind(): void;
38
- /** Wires `@molecule/app-realtime-socketio` to `@molecule/app-realtime`. */
39
- export declare function setupAppRealtimeSocketio(): Promise<void>;
40
- /** Wires `@molecule/app-keyboard-shortcuts-hotkeys` to `@molecule/app-keyboard-shortcuts`. */
41
- export declare function setupAppKeyboardShortcutsHotkeys(): Promise<void>;
42
- /** Wires `@molecule/app-command-palette-cmdk` to `@molecule/app-command-palette`. */
43
- export declare function setupAppCommandPaletteCmdk(): Promise<void>;
44
- /** Wires `@molecule/app-code-editor-monaco` to `@molecule/app-code-editor`. */
45
- export declare function setupAppCodeEditorMonaco(): Promise<void>;
46
- /** Wires `@molecule/app-virtual-scroll-tanstack` to `@molecule/app-virtual-scroll`. */
47
- export declare function setupAppVirtualScrollTanstack(): Promise<void>;
48
- /** Wires `@molecule/app-drag-drop-dndkit` to `@molecule/app-drag-drop`. */
49
- export declare function setupAppDragDropDndkit(): Promise<void>;
50
- /**
51
- * Wires `@molecule/app-charts-chartjs` (Chart.js) to `@molecule/app-charts` — real
52
- * line/bar/pie/etc. charts instead of the core's placeholder panel.
53
- */
54
- export declare function setupAppChartsChartjs(): Promise<void>;
55
- /**
56
- * Wires `@molecule/app-maps-leaflet` (Leaflet + OpenStreetMap, no API key) to
57
- * `@molecule/app-maps` — a real slippy map instead of the core's grey placeholder.
58
- * REQUIRES `import 'leaflet/dist/leaflet.css'` once in the app entry (the scaffolded
59
- * `bonds/app-maps-leaflet.ts` does this); without it tiles + markers mis-position.
60
- */
61
- export declare function setupAppMapsLeaflet(): Promise<void>;
62
- /** Wires `@molecule/app-video-hls` (hls.js — HLS streaming everywhere) to `@molecule/app-video`. */
63
- export declare function setupAppVideoHls(): Promise<void>;
64
38
  /**
65
39
  * Wires all 7 universal app-side bonds in one call — fonts, routing,
66
40
  * storage, styling, theme, UI ClassMap, icons (in that order). Auth
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,OAAO,EACL,+BAA+B,EAGhC,MAAM,mCAAmC,CAAA;AAe1C,uFAAuF;AACvF,wBAAgB,uBAAuB,IAAI,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAS5F;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,6EAA6E;AAC7E,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED,6EAA6E;AAC7E,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,2EAA2E;AAC3E,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9D;AAED,8FAA8F;AAC9F,wBAAsB,gCAAgC,IAAI,OAAO,CAAC,IAAI,CAAC,CAMtE;AAED,qFAAqF;AACrF,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC,CAMhE;AAED,+EAA+E;AAC/E,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM9D;AAED,uFAAuF;AACvF,wBAAsB,6BAA6B,IAAI,OAAO,CAAC,IAAI,CAAC,CAMnE;AAED,2EAA2E;AAC3E,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM5D;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3D;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAMzD;AAED,oGAAoG;AACpG,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAMtD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAQ3C"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,OAAO,EACL,+BAA+B,EAGhC,MAAM,mCAAmC,CAAA;AAe1C,uFAAuF;AACvF,wBAAgB,uBAAuB,IAAI,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAS5F;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED,6EAA6E;AAC7E,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED,6EAA6E;AAC7E,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED,0EAA0E;AAC1E,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAQ3C"}
package/dist/setup.js CHANGED
@@ -81,86 +81,6 @@ export function setupAppThemeCssVariables() {
81
81
  export function setupAppUiTailwind() {
82
82
  setClassMap(classMap);
83
83
  }
84
- /** Wires `@molecule/app-realtime-socketio` to `@molecule/app-realtime`. */
85
- export async function setupAppRealtimeSocketio() {
86
- const [{ setProvider: setRealtime }, { provider }] = await Promise.all([
87
- import('@molecule/app-realtime'),
88
- import('@molecule/app-realtime-socketio'),
89
- ]);
90
- setRealtime(provider);
91
- }
92
- /** Wires `@molecule/app-keyboard-shortcuts-hotkeys` to `@molecule/app-keyboard-shortcuts`. */
93
- export async function setupAppKeyboardShortcutsHotkeys() {
94
- const [{ setProvider: setKbd }, { provider }] = await Promise.all([
95
- import('@molecule/app-keyboard-shortcuts'),
96
- import('@molecule/app-keyboard-shortcuts-hotkeys'),
97
- ]);
98
- setKbd(provider);
99
- }
100
- /** Wires `@molecule/app-command-palette-cmdk` to `@molecule/app-command-palette`. */
101
- export async function setupAppCommandPaletteCmdk() {
102
- const [{ setProvider: setPalette }, { provider }] = await Promise.all([
103
- import('@molecule/app-command-palette'),
104
- import('@molecule/app-command-palette-cmdk'),
105
- ]);
106
- setPalette(provider);
107
- }
108
- /** Wires `@molecule/app-code-editor-monaco` to `@molecule/app-code-editor`. */
109
- export async function setupAppCodeEditorMonaco() {
110
- const [{ setProvider: setEditor }, { provider }] = await Promise.all([
111
- import('@molecule/app-code-editor'),
112
- import('@molecule/app-code-editor-monaco'),
113
- ]);
114
- setEditor(provider);
115
- }
116
- /** Wires `@molecule/app-virtual-scroll-tanstack` to `@molecule/app-virtual-scroll`. */
117
- export async function setupAppVirtualScrollTanstack() {
118
- const [{ setProvider: setScroll }, { provider }] = await Promise.all([
119
- import('@molecule/app-virtual-scroll'),
120
- import('@molecule/app-virtual-scroll-tanstack'),
121
- ]);
122
- setScroll(provider);
123
- }
124
- /** Wires `@molecule/app-drag-drop-dndkit` to `@molecule/app-drag-drop`. */
125
- export async function setupAppDragDropDndkit() {
126
- const [{ setProvider: setDnd }, { provider }] = await Promise.all([
127
- import('@molecule/app-drag-drop'),
128
- import('@molecule/app-drag-drop-dndkit'),
129
- ]);
130
- setDnd(provider);
131
- }
132
- /**
133
- * Wires `@molecule/app-charts-chartjs` (Chart.js) to `@molecule/app-charts` — real
134
- * line/bar/pie/etc. charts instead of the core's placeholder panel.
135
- */
136
- export async function setupAppChartsChartjs() {
137
- const [{ setProvider: setCharts }, { provider }] = await Promise.all([
138
- import('@molecule/app-charts'),
139
- import('@molecule/app-charts-chartjs'),
140
- ]);
141
- setCharts(provider);
142
- }
143
- /**
144
- * Wires `@molecule/app-maps-leaflet` (Leaflet + OpenStreetMap, no API key) to
145
- * `@molecule/app-maps` — a real slippy map instead of the core's grey placeholder.
146
- * REQUIRES `import 'leaflet/dist/leaflet.css'` once in the app entry (the scaffolded
147
- * `bonds/app-maps-leaflet.ts` does this); without it tiles + markers mis-position.
148
- */
149
- export async function setupAppMapsLeaflet() {
150
- const [{ setProvider: setMaps }, { provider }] = await Promise.all([
151
- import('@molecule/app-maps'),
152
- import('@molecule/app-maps-leaflet'),
153
- ]);
154
- setMaps(provider);
155
- }
156
- /** Wires `@molecule/app-video-hls` (hls.js — HLS streaming everywhere) to `@molecule/app-video`. */
157
- export async function setupAppVideoHls() {
158
- const [{ setProvider: setVideo }, { provider }] = await Promise.all([
159
- import('@molecule/app-video'),
160
- import('@molecule/app-video-hls'),
161
- ]);
162
- setVideo(provider);
163
- }
164
84
  /**
165
85
  * Wires all 7 universal app-side bonds in one call — fonts, routing,
166
86
  * storage, styling, theme, UI ClassMap, icons (in that order). Auth
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molecule/app-bonds-default-react",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Default app-side bond wirings for React+Tailwind+react-router+localStorage+Arimo font+molecule icons. 5 setup functions consolidating 665 byte-identical per-app bond wiring files across the fleet.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -14,10 +14,15 @@
14
14
  ".": {
15
15
  "types": "./dist/index.d.ts",
16
16
  "import": "./dist/index.js"
17
+ },
18
+ "./optional/*.js": {
19
+ "types": "./dist/optional/*.d.ts",
20
+ "import": "./dist/optional/*.js"
17
21
  }
18
22
  },
19
23
  "files": [
20
- "dist"
24
+ "dist",
25
+ "README.md"
21
26
  ],
22
27
  "keywords": [
23
28
  "molecule",
@@ -26,36 +31,41 @@
26
31
  "react"
27
32
  ],
28
33
  "license": "Apache-2.0",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/molecule-dev/molecule.git",
37
+ "directory": "packages/app/infrastructure/bonds-default-react"
38
+ },
29
39
  "devDependencies": {
30
- "@molecule/app-auth": "1.0.0",
31
- "@molecule/app-charts-chartjs": "1.0.0",
32
- "@molecule/app-code-editor": "1.0.0",
33
- "@molecule/app-code-editor-monaco": "1.0.0",
34
- "@molecule/app-command-palette": "1.0.0",
35
- "@molecule/app-command-palette-cmdk": "1.0.0",
36
- "@molecule/app-drag-drop": "1.0.0",
37
- "@molecule/app-drag-drop-dndkit": "1.0.0",
38
- "@molecule/app-fonts": "1.0.0",
39
- "@molecule/app-fonts-arimo": "1.0.0",
40
- "@molecule/app-http": "1.0.0",
41
- "@molecule/app-icons": "1.0.0",
42
- "@molecule/app-icons-molecule": "1.0.0",
43
- "@molecule/app-keyboard-shortcuts": "1.0.0",
44
- "@molecule/app-keyboard-shortcuts-hotkeys": "1.0.0",
45
- "@molecule/app-maps-leaflet": "1.0.0",
46
- "@molecule/app-realtime": "1.0.0",
47
- "@molecule/app-realtime-socketio": "1.0.0",
48
- "@molecule/app-routing": "1.0.0",
49
- "@molecule/app-routing-react-router": "1.0.0",
50
- "@molecule/app-storage": "1.0.0",
51
- "@molecule/app-storage-localstorage": "1.0.0",
52
- "@molecule/app-theme": "1.0.0",
53
- "@molecule/app-theme-css-variables": "1.0.0",
54
- "@molecule/app-ui": "1.0.0",
55
- "@molecule/app-ui-tailwind": "1.0.0",
56
- "@molecule/app-video-hls": "1.0.0",
57
- "@molecule/app-virtual-scroll": "1.0.0",
58
- "@molecule/app-virtual-scroll-tanstack": "1.0.0",
40
+ "@molecule/app-auth": "1.0.1",
41
+ "@molecule/app-charts-chartjs": "1.0.1",
42
+ "@molecule/app-code-editor": "1.0.1",
43
+ "@molecule/app-code-editor-monaco": "1.0.1",
44
+ "@molecule/app-command-palette": "1.0.1",
45
+ "@molecule/app-command-palette-cmdk": "1.0.1",
46
+ "@molecule/app-drag-drop": "1.0.1",
47
+ "@molecule/app-drag-drop-dndkit": "1.0.1",
48
+ "@molecule/app-fonts": "1.0.1",
49
+ "@molecule/app-fonts-arimo": "1.0.1",
50
+ "@molecule/app-http": "1.0.1",
51
+ "@molecule/app-icons": "1.0.1",
52
+ "@molecule/app-icons-molecule": "1.0.1",
53
+ "@molecule/app-keyboard-shortcuts": "1.0.1",
54
+ "@molecule/app-keyboard-shortcuts-hotkeys": "1.0.1",
55
+ "@molecule/app-maps-leaflet": "1.0.1",
56
+ "@molecule/app-realtime": "1.0.1",
57
+ "@molecule/app-realtime-socketio": "1.0.1",
58
+ "@molecule/app-routing": "1.0.1",
59
+ "@molecule/app-routing-react-router": "1.0.1",
60
+ "@molecule/app-storage": "1.0.1",
61
+ "@molecule/app-storage-localstorage": "1.0.1",
62
+ "@molecule/app-theme": "1.0.1",
63
+ "@molecule/app-theme-css-variables": "1.0.1",
64
+ "@molecule/app-ui": "1.0.1",
65
+ "@molecule/app-ui-tailwind": "1.0.1",
66
+ "@molecule/app-video-hls": "1.0.1",
67
+ "@molecule/app-virtual-scroll": "1.0.1",
68
+ "@molecule/app-virtual-scroll-tanstack": "1.0.1",
59
69
  "@types/node": "26.1.2",
60
70
  "@types/react": "19.2.17",
61
71
  "@types/react-dom": "19.2.3",
@@ -66,40 +76,46 @@
66
76
  "vitest": "4.1.10"
67
77
  },
68
78
  "peerDependencies": {
69
- "@molecule/app-auth": "^1.0.0",
70
- "@molecule/app-charts-chartjs": "1.0.0",
71
- "@molecule/app-code-editor": "^1.0.0",
72
- "@molecule/app-code-editor-monaco": "^1.0.0",
73
- "@molecule/app-command-palette": "^1.0.0",
74
- "@molecule/app-command-palette-cmdk": "^1.0.0",
75
- "@molecule/app-drag-drop": "^1.0.0",
76
- "@molecule/app-drag-drop-dndkit": "^1.0.0",
77
- "@molecule/app-fonts": "^1.0.0",
78
- "@molecule/app-fonts-arimo": "^1.0.0",
79
- "@molecule/app-http": "^1.0.0",
80
- "@molecule/app-icons": "^1.0.0",
81
- "@molecule/app-icons-molecule": "^1.0.0",
82
- "@molecule/app-keyboard-shortcuts": "^1.0.0",
83
- "@molecule/app-keyboard-shortcuts-hotkeys": "^1.0.0",
84
- "@molecule/app-maps-leaflet": "1.0.0",
85
- "@molecule/app-realtime": "^1.0.0",
86
- "@molecule/app-realtime-socketio": "^1.0.0",
87
- "@molecule/app-routing": "^1.0.0",
88
- "@molecule/app-routing-react-router": "^1.0.0",
89
- "@molecule/app-storage": "^1.0.0",
90
- "@molecule/app-storage-localstorage": "^1.0.0",
91
- "@molecule/app-styling-tailwind": "^1.0.0",
92
- "@molecule/app-theme": "^1.0.0",
93
- "@molecule/app-theme-css-variables": "^1.0.0",
94
- "@molecule/app-ui": "^1.0.0",
95
- "@molecule/app-ui-tailwind": "^1.0.0",
96
- "@molecule/app-video-hls": "1.0.0",
97
- "@molecule/app-virtual-scroll": "^1.0.0",
98
- "@molecule/app-virtual-scroll-tanstack": "^1.0.0",
79
+ "@molecule/app-auth": "^1.0.1",
80
+ "@molecule/app-charts": "^1.0.1",
81
+ "@molecule/app-charts-chartjs": "^1.0.1",
82
+ "@molecule/app-code-editor": "^1.0.1",
83
+ "@molecule/app-code-editor-monaco": "^1.0.1",
84
+ "@molecule/app-command-palette": "^1.0.1",
85
+ "@molecule/app-command-palette-cmdk": "^1.0.1",
86
+ "@molecule/app-drag-drop": "^1.0.1",
87
+ "@molecule/app-drag-drop-dndkit": "^1.0.1",
88
+ "@molecule/app-fonts": "^1.0.1",
89
+ "@molecule/app-fonts-arimo": "^1.0.1",
90
+ "@molecule/app-http": "^1.0.1",
91
+ "@molecule/app-icons": "^1.0.1",
92
+ "@molecule/app-icons-molecule": "^1.0.1",
93
+ "@molecule/app-keyboard-shortcuts": "^1.0.1",
94
+ "@molecule/app-keyboard-shortcuts-hotkeys": "^1.0.1",
95
+ "@molecule/app-maps": "^1.0.1",
96
+ "@molecule/app-maps-leaflet": "^1.0.1",
97
+ "@molecule/app-realtime": "^1.0.1",
98
+ "@molecule/app-realtime-socketio": "^1.0.1",
99
+ "@molecule/app-routing": "^1.0.1",
100
+ "@molecule/app-routing-react-router": "^1.0.1",
101
+ "@molecule/app-storage": "^1.0.1",
102
+ "@molecule/app-storage-localstorage": "^1.0.1",
103
+ "@molecule/app-styling-tailwind": "^1.0.1",
104
+ "@molecule/app-theme": "^1.0.1",
105
+ "@molecule/app-theme-css-variables": "^1.0.1",
106
+ "@molecule/app-ui": "^1.0.1",
107
+ "@molecule/app-ui-tailwind": "^1.0.1",
108
+ "@molecule/app-video": "^1.0.1",
109
+ "@molecule/app-video-hls": "^1.0.1",
110
+ "@molecule/app-virtual-scroll": "^1.0.1",
111
+ "@molecule/app-virtual-scroll-tanstack": "^1.0.1",
99
112
  "react": "^18.0.0 || ^19.0.0",
100
113
  "react-dom": "^18.0.0 || ^19.0.0"
101
114
  },
102
115
  "peerDependenciesMeta": {
116
+ "@molecule/app-charts": {
117
+ "optional": true
118
+ },
103
119
  "@molecule/app-charts-chartjs": {
104
120
  "optional": true
105
121
  },
@@ -127,6 +143,9 @@
127
143
  "@molecule/app-keyboard-shortcuts-hotkeys": {
128
144
  "optional": true
129
145
  },
146
+ "@molecule/app-maps": {
147
+ "optional": true
148
+ },
130
149
  "@molecule/app-maps-leaflet": {
131
150
  "optional": true
132
151
  },
@@ -136,6 +155,9 @@
136
155
  "@molecule/app-realtime-socketio": {
137
156
  "optional": true
138
157
  },
158
+ "@molecule/app-video": {
159
+ "optional": true
160
+ },
139
161
  "@molecule/app-video-hls": {
140
162
  "optional": true
141
163
  },