bitwrench 2.0.32 → 2.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 (126) hide show
  1. package/README.md +210 -125
  2. package/dist/bitwrench-bccl.cjs.js +349 -188
  3. package/dist/bitwrench-bccl.cjs.min.js +2 -39
  4. package/dist/bitwrench-bccl.cjs.min.js.gz +0 -0
  5. package/dist/bitwrench-bccl.esm.js +349 -188
  6. package/dist/bitwrench-bccl.esm.min.js +2 -39
  7. package/dist/bitwrench-bccl.esm.min.js.gz +0 -0
  8. package/dist/bitwrench-bccl.umd.js +349 -188
  9. package/dist/bitwrench-bccl.umd.min.js +2 -39
  10. package/dist/bitwrench-bccl.umd.min.js.gz +0 -0
  11. package/dist/bitwrench-code-edit.cjs.js +17 -6
  12. package/dist/bitwrench-code-edit.cjs.min.js +2 -20
  13. package/dist/bitwrench-code-edit.es5.js +8 -3
  14. package/dist/bitwrench-code-edit.es5.min.js +2 -19
  15. package/dist/bitwrench-code-edit.esm.js +17 -6
  16. package/dist/bitwrench-code-edit.esm.min.js +2 -19
  17. package/dist/bitwrench-code-edit.umd.js +17 -6
  18. package/dist/bitwrench-code-edit.umd.min.js +2 -19
  19. package/dist/bitwrench-code-edit.umd.min.js.gz +0 -0
  20. package/dist/bitwrench-debug.js +1 -1
  21. package/dist/bitwrench-debug.min.js +1 -1
  22. package/dist/bitwrench-lean.cjs.js +2492 -1628
  23. package/dist/bitwrench-lean.cjs.min.js +2 -80
  24. package/dist/bitwrench-lean.cjs.min.js.gz +0 -0
  25. package/dist/bitwrench-lean.es5.js +2740 -1838
  26. package/dist/bitwrench-lean.es5.min.js +2 -49
  27. package/dist/bitwrench-lean.es5.min.js.gz +0 -0
  28. package/dist/bitwrench-lean.esm.js +2492 -1628
  29. package/dist/bitwrench-lean.esm.min.js +2 -80
  30. package/dist/bitwrench-lean.esm.min.js.gz +0 -0
  31. package/dist/bitwrench-lean.umd.js +2492 -1628
  32. package/dist/bitwrench-lean.umd.min.js +2 -80
  33. package/dist/bitwrench-lean.umd.min.js.gz +0 -0
  34. package/dist/bitwrench-util-color.cjs.js +251 -0
  35. package/dist/bitwrench-util-color.cjs.min.js +3 -0
  36. package/dist/bitwrench-util-color.es5.js +256 -0
  37. package/dist/bitwrench-util-color.es5.min.js +3 -0
  38. package/dist/bitwrench-util-color.esm.js +241 -0
  39. package/dist/bitwrench-util-color.esm.min.js +3 -0
  40. package/dist/bitwrench-util-color.umd.js +257 -0
  41. package/dist/bitwrench-util-color.umd.min.js +3 -0
  42. package/dist/bitwrench-util-css.cjs.js +2 -1
  43. package/dist/bitwrench-util-css.cjs.min.js +2 -21
  44. package/dist/bitwrench-util-css.es5.js +2 -1
  45. package/dist/bitwrench-util-css.es5.min.js +2 -20
  46. package/dist/bitwrench-util-css.esm.js +2 -1
  47. package/dist/bitwrench-util-css.esm.min.js +1 -19
  48. package/dist/bitwrench-util-css.umd.js +2 -1
  49. package/dist/bitwrench-util-css.umd.min.js +2 -20
  50. package/dist/bitwrench-util-css.umd.min.js.gz +0 -0
  51. package/dist/bitwrench.cjs.js +2826 -1801
  52. package/dist/bitwrench.cjs.min.js +2 -99
  53. package/dist/bitwrench.cjs.min.js.gz +0 -0
  54. package/dist/bitwrench.css +403 -479
  55. package/dist/bitwrench.d.ts +70 -73
  56. package/dist/bitwrench.es5.js +3106 -2020
  57. package/dist/bitwrench.es5.min.js +2 -67
  58. package/dist/bitwrench.es5.min.js.gz +0 -0
  59. package/dist/bitwrench.esm.js +2826 -1801
  60. package/dist/bitwrench.esm.min.js +2 -99
  61. package/dist/bitwrench.esm.min.js.gz +0 -0
  62. package/dist/bitwrench.min.css +1 -1
  63. package/dist/bitwrench.umd.js +2826 -1801
  64. package/dist/bitwrench.umd.min.js +2 -99
  65. package/dist/bitwrench.umd.min.js.gz +0 -0
  66. package/dist/builds.json +222 -134
  67. package/dist/bwserve.cjs.js +289 -282
  68. package/dist/bwserve.d.ts +157 -0
  69. package/dist/bwserve.esm.js +290 -283
  70. package/dist/sri.json +54 -46
  71. package/docs/README.md +6 -3
  72. package/docs/app-patterns.md +7 -6
  73. package/docs/bitwrench-for-wasm.md +53 -54
  74. package/docs/bitwrench-mcp.md +2 -2
  75. package/docs/bitwrench-northstar-principles.md +406 -0
  76. package/docs/bitwrench-taco-schema-discussion.md +2 -2
  77. package/docs/bitwrench_api.md +191 -106
  78. package/docs/bitwrench_typescript_usage.md +5 -5
  79. package/docs/bw-attach.md +29 -75
  80. package/docs/bwserve.md +200 -168
  81. package/docs/cli.md +36 -12
  82. package/docs/component-cheatsheet.md +2 -2
  83. package/docs/component-library.md +4 -4
  84. package/docs/component-lifecycle.md +234 -0
  85. package/docs/drift-lint.md +268 -0
  86. package/docs/framework-translation-table.md +4 -4
  87. package/docs/llm-bitwrench-guide.md +60 -50
  88. package/docs/routing.md +11 -13
  89. package/docs/state-management.md +110 -109
  90. package/docs/taco-format.md +13 -14
  91. package/docs/theming.md +13 -3
  92. package/docs/thinking-in-bitwrench.md +858 -983
  93. package/docs/tutorial-bwserve.md +37 -36
  94. package/docs/tutorial-embedded.md +10 -21
  95. package/docs/tutorial-website.md +2 -2
  96. package/package.json +38 -7
  97. package/readme.html +262 -160
  98. package/src/bitwrench-bccl-entry.js +2 -2
  99. package/src/bitwrench-bccl.js +346 -185
  100. package/src/bitwrench-code-edit.js +16 -5
  101. package/src/bitwrench-color-utils.js +117 -181
  102. package/src/bitwrench-file-ops.js +2 -2
  103. package/src/bitwrench-lean.js +4 -3
  104. package/src/bitwrench-router.js +5 -2
  105. package/src/bitwrench-styles.js +420 -504
  106. package/src/bitwrench-util-color.js +240 -0
  107. package/src/bitwrench-util-css.js +1 -0
  108. package/src/bitwrench-utils.js +4 -0
  109. package/src/bitwrench.d.ts +70 -73
  110. package/src/bitwrench.h +5 -0
  111. package/src/bitwrench.js +1939 -933
  112. package/src/bwserve/attach.js +0 -1
  113. package/src/bwserve/bwclient.js +172 -32
  114. package/src/bwserve/bwshell.js +0 -4
  115. package/src/bwserve/client.js +59 -220
  116. package/src/bwserve/index.js +59 -26
  117. package/src/bwserve.d.ts +157 -0
  118. package/src/bwserve.h +5 -0
  119. package/src/cli/attach.js +12 -75
  120. package/src/cli/convert.js +2 -2
  121. package/src/cli/serve.js +37 -35
  122. package/src/generate-css.js +1 -1
  123. package/src/mcp/knowledge.js +4 -4
  124. package/src/mcp/live.js +21 -13
  125. package/src/mcp/tools.js +0 -1
  126. package/src/version.js +3 -7
@@ -64,16 +64,20 @@ export interface TacoOptions {
64
64
  state?: Record<string, any>;
65
65
  /** Called after element created and in DOM */
66
66
  mounted?: (el: HTMLElement, state?: Record<string, any>) => void;
67
- /** Called on bw.cleanup() */
67
+ /** Called on bw.unmount() */
68
68
  unmount?: (el: HTMLElement, state?: Record<string, any>) => void;
69
- /** Called by bw.update(); stored on el._bw_render */
69
+ /** Called by bw.refresh(); stored on el._bw_render */
70
70
  render?: (el: HTMLElement, state?: Record<string, any>) => void;
71
- /** Methods attached to el.bw namespace */
71
+ /** Methods attached to el.bw namespace (e.g. handle.update dispatched by bw.update()) */
72
72
  handle?: Record<string, (el: HTMLElement, ...args: any[]) => any>;
73
73
  /** Slot selectors: auto-generates el.bw.setName()/getName() */
74
74
  slots?: Record<string, string>;
75
75
  /** Component type identifier (used internally by BCCL) */
76
76
  type?: string;
77
+ /** User tag for bw.message() addressing */
78
+ userTag?: string;
79
+ /** Declarative event handlers for bw.actions */
80
+ events?: Record<string, (data: any, el: HTMLElement) => void>;
77
81
  }
78
82
 
79
83
  /**
@@ -316,27 +320,51 @@ export interface Bitwrench {
316
320
  /** Generate complete HTML page string */
317
321
  htmlPage(opts: { title?: string; css?: string; content?: TacoContent; favicon?: string; [key: string]: any }): string;
318
322
  /** Create DOM element from TACO (browser only). SVG TACOs ({t:'svg',...}) use createElementNS. */
319
- createDOM(taco: Taco | TacoContent, options?: Record<string, any>): HTMLElement | SVGElement | DocumentFragment;
320
- /** Mount TACO into target, replacing contents */
321
- DOM(target: string | HTMLElement, taco: Taco | TacoContent, options?: Record<string, any>): void;
322
- /** Mount TACO and return root element (for el.bw access) */
323
- mount(target: string | HTMLElement, taco: Taco | TacoContent, options?: Record<string, any>): HTMLElement;
323
+ create(taco: Taco | TacoContent, options?: Record<string, any>): HTMLElement | SVGElement | DocumentFragment;
324
+ /** Mount TACO into target, replacing contents. Alias for bw.mount(). Returns the first created element. */
325
+ DOM(target: string | HTMLElement, taco: Taco | TacoContent, options?: Record<string, any>): HTMLElement | null;
326
+ /** Mount TACO into target, replacing contents. Returns the first created element. */
327
+ mount(target: string | HTMLElement, taco: Taco | TacoContent, options?: Record<string, any>): HTMLElement | null;
324
328
  /** Mark string as pre-escaped HTML */
325
329
  raw(str: string): BwRaw;
326
330
  /** Escape HTML special characters */
327
331
  escapeHTML(str: string): string;
328
332
 
329
333
  // -- Lifecycle & State ----------------------------------------------------
330
- /** Call el._bw_render to re-render element */
331
- update(target: string | HTMLElement): void;
334
+ /** Dispatch data to el.bw.update(data) if defined */
335
+ update(ref: string | HTMLElement, data?: any): void;
336
+ /** Re-render element by calling el._bw_render */
337
+ refresh(ref: string | HTMLElement): void;
338
+ /** Set a named slot value via el.bw.setName(value) */
339
+ updateSlot(ref: string | HTMLElement, name: string, value: any): boolean;
340
+ /** Unmount element: fire unmount hooks, clean subscriptions, remove from cache */
341
+ unmount(element: HTMLElement): void;
342
+ /** Fire mounted() hooks on an element subtree */
343
+ mountTree(element: HTMLElement): void;
344
+ /** Unmount all lifecycle-managed children of element */
345
+ unmountChildren(element: HTMLElement): void;
346
+ /** Wire TACO options onto an existing DOM element (for post-creation hydration) */
347
+ hydrate(element: HTMLElement, taco: Taco): void;
348
+ /** Mark element as detach-exempt (survives parent unmount) */
349
+ detach(element: HTMLElement): void;
350
+ /** Append TACO as child of target */
351
+ append(target: string | HTMLElement, content: Taco | TacoContent): HTMLElement;
352
+ /** Replace target's content with new TACO */
353
+ replace(target: string | HTMLElement, content: Taco | TacoContent): HTMLElement;
354
+ /** Remove element from DOM with unmount */
355
+ remove(target: string | HTMLElement): void;
332
356
  /** Quick-patch element content or attribute */
333
357
  patch(id: string | HTMLElement, content?: TacoContent, attr?: string): HTMLElement | null;
334
358
  /** RFC 6902 JSON Patch on plain objects. Mutates and returns obj. @see bw.patch */
335
359
  jsonPatch(obj: object, ops: Array<{ op: string; path: string; value?: any; from?: string }>): object;
336
360
  /** Batch patch multiple elements */
337
361
  patchAll(patches: Record<string, TacoContent> | Array<{ id: string; content?: TacoContent; attr?: string }>): Record<string, HTMLElement>;
338
- /** Clean up lifecycle hooks, subscriptions, cache */
339
- cleanup(element: HTMLElement): void;
362
+ /** Janitor: document-level cleanup for orphaned lifecycle elements */
363
+ janitor(options?: { verbose?: boolean }): void;
364
+ /** Reconcile children of parent with new TACO list */
365
+ syncChildren(parent: HTMLElement, items: Taco[], options?: { key?: string }): void;
366
+ /** Declared dataflow: recompute fn(inputs...) on any input publish, publish result to outTopic. Returns disposer. */
367
+ derive(inputs: string[], fn: (...values: any[]) => any, outTopic: string, opts?: { seed?: any[]; immediate?: boolean; el?: HTMLElement }): () => void;
340
368
 
341
369
  // -- DOM Selection --------------------------------------------------------
342
370
  /** Resolve target to first matching element. Optional apply: string (textContent), function, TACO (mount), or array. @see bw.$ */
@@ -345,8 +373,8 @@ export interface Bitwrench {
345
373
  $(selector: string | HTMLElement | HTMLElement[], apply?: string | number | boolean | Function | object | any[]): HTMLElement[];
346
374
  /** Dispatch DOM event */
347
375
  emit(target: string | HTMLElement, eventName: string, detail?: any): void;
348
- /** Add event listener */
349
- on(target: string | HTMLElement, eventName: string, handler: (e: Event) => void): void;
376
+ /** Add event listener; returns unsubscribe function */
377
+ on(target: string | HTMLElement, eventName: string, handler: (e: Event) => void): () => void;
350
378
 
351
379
  // -- Pub/Sub --------------------------------------------------------------
352
380
  /** Publish to topic. Fires exact-match and wildcard subscribers. */
@@ -355,6 +383,8 @@ export interface Bitwrench {
355
383
  sub(topic: string, handler: (detail: any, topic?: string) => void, el?: HTMLElement): () => void;
356
384
  /** Unsubscribe handler from topic */
357
385
  unsub(topic: string, handler: Function): number;
386
+ /** Subscribe to topic for a single delivery; auto-unsubscribes after first fire. Returns unsub(). */
387
+ once(topic: string, handler: (detail: any) => void, el?: HTMLElement): () => void;
358
388
 
359
389
  // -- UUID & Identity ------------------------------------------------------
360
390
  /** Generate unique ID */
@@ -364,13 +394,27 @@ export interface Bitwrench {
364
394
  /** Read UUID from TACO or DOM element */
365
395
  getUUID(tacoOrElement: Taco | HTMLElement): string | null;
366
396
 
367
- // -- Component Messages ---------------------------------------------------
397
+ // -- Component Messages & Wire Protocol -----------------------------------
368
398
  /** Call method on el.bw: el.bw[action](data) */
369
399
  message(target: string | HTMLElement, action: string, data?: any): any;
400
+ /** Extract form data from a form or container element */
401
+ formData(target: string | HTMLElement): Record<string, any>;
370
402
  /** Execute wire-protocol message object */
371
- apply(msg: Record<string, any>): any;
403
+ apply(msg: Record<string, any>): boolean;
372
404
  /** Inspect DOM element and subtree, returning plain-object tree with bitwrench metadata */
373
405
  inspect(target: string | HTMLElement, depth?: number): Record<string, any> | null;
406
+ /** Document-level delegated action dispatcher */
407
+ actions: { enable(): void; disable(): void; _ensureInstalled(): void; _reset(): void };
408
+ /** Remote connection (set by bwclient or bw.connect) */
409
+ remote: { send(msg: any): void; close?(): void } | null;
410
+ /** Register a named remote function for bw.apply({type:'call'}) */
411
+ registerRemote(name: string, fn: Function): void;
412
+ /** Connect to a bwserve instance via SSE */
413
+ connect(url: string, options?: Record<string, any>): { send(msg: any): void; close(): void };
414
+ /** Set theme mode ('primary' or 'alternate') on matching elements */
415
+ setThemeMode(mode: string, scope?: string | HTMLElement): { mode: string; count: number };
416
+ /** Load structural CSS only (no theming) */
417
+ loadStructural(): void;
374
418
 
375
419
  // -- Function Registry ----------------------------------------------------
376
420
  funcRegister(fn: Function, name?: string): string;
@@ -379,16 +423,16 @@ export interface Bitwrench {
379
423
  funcUnregister(name: string): void;
380
424
  funcGetRegistry(): Record<string, Function>;
381
425
 
382
- // -- Component Registry ---------------------------------------------------
383
- render(element: HTMLElement, position: string, taco: Taco): string;
384
- getComponent(id: string): Record<string, any> | null;
385
- getAllComponents(): Map<string, any>;
426
+ // -- Render (convenience factory over append/replace) --------------------
427
+ render(target: string | HTMLElement, position: 'append' | 'prepend' | 'replace' | 'before' | 'after', taco: Taco): { el: HTMLElement | null; ok: boolean; error: string | null };
386
428
 
387
429
  // -- CSS & Styles ---------------------------------------------------------
388
430
  /** Generate CSS string from JS object */
389
431
  css(rules: Record<string, any>, options?: { scopeSelector?: string; selector?: string }): string;
390
432
  /** Inject CSS into document */
391
433
  injectCSS(css: string, options?: { id?: string; append?: boolean; scope?: string }): HTMLElement;
434
+ /** Merge style objects (shallow Object.assign). Use to compose inline styles. */
435
+ s(...objs: Record<string, string | number>[]): Record<string, string | number>;
392
436
  /** Responsive media query helper */
393
437
  responsive(selector: string, breakpoints: Record<string, Record<string, any>>): string;
394
438
  /** Generate styles from config */
@@ -401,8 +445,6 @@ export interface Bitwrench {
401
445
  loadReset(): void;
402
446
  /** Toggle between primary/alternate theme palettes on all matching elements. @see bw.applyStyles */
403
447
  toggleThemeMode(scope?: string | HTMLElement): string;
404
- /** @deprecated Use bw.toggleThemeMode() instead. Alias kept for one release cycle. */
405
- toggleStyles(scope?: string | HTMLElement): string;
406
448
  /** Remove injected styles */
407
449
  clearStyles(scope?: string): void;
408
450
  /** Generate type scale from base + ratio */
@@ -485,55 +527,8 @@ export interface Bitwrench {
485
527
  makeDataTable(config?: TableConfig): Taco;
486
528
  makeBarChart(config?: ComponentConfig): Taco;
487
529
 
488
- // -- Corresponding create* (return DOM Element) ---------------------------
489
- createCard(config?: CardConfig | string): HTMLElement;
490
- createButton(config?: ButtonConfig | string): HTMLElement;
491
- createContainer(config?: ComponentConfig): HTMLElement;
492
- createRow(config?: ComponentConfig): HTMLElement;
493
- createCol(config?: ComponentConfig): HTMLElement;
494
- createStack(config?: ComponentConfig): HTMLElement;
495
- createSection(config?: ComponentConfig): HTMLElement;
496
- createNav(config?: NavConfig): HTMLElement;
497
- createNavbar(config?: ComponentConfig): HTMLElement;
498
- createBreadcrumb(config?: ComponentConfig): HTMLElement;
499
- createTabs(config?: TabsConfig): HTMLElement;
500
- createPagination(config?: ComponentConfig): HTMLElement;
501
- createAlert(config?: AlertConfig | string): HTMLElement;
502
- createBadge(config?: ComponentConfig | string): HTMLElement;
503
- createProgress(config?: ComponentConfig): HTMLElement;
504
- createSpinner(config?: ComponentConfig): HTMLElement;
505
- createToast(config?: ComponentConfig): HTMLElement;
506
- createTooltip(config?: ComponentConfig): HTMLElement;
507
- createPopover(config?: ComponentConfig): HTMLElement;
508
- createListGroup(config?: ComponentConfig): HTMLElement;
509
- createAccordion(config?: AccordionConfig): HTMLElement;
510
- createCarousel(config?: CarouselConfig): HTMLElement;
511
- createTimeline(config?: ComponentConfig): HTMLElement;
512
- createStepper(config?: ComponentConfig): HTMLElement;
513
- createChipInput(config?: ComponentConfig): HTMLElement;
514
- createModal(config?: ModalConfig): HTMLElement;
515
- createDropdown(config?: ComponentConfig): HTMLElement;
516
- createForm(config?: ComponentConfig): HTMLElement;
517
- createFormGroup(config?: ComponentConfig): HTMLElement;
518
- createInput(config?: InputConfig): HTMLElement;
519
- createTextarea(config?: ComponentConfig): HTMLElement;
520
- createSelect(config?: ComponentConfig): HTMLElement;
521
- createCheckbox(config?: ComponentConfig): HTMLElement;
522
- createRadio(config?: ComponentConfig): HTMLElement;
523
- createSwitch(config?: ComponentConfig): HTMLElement;
524
- createRange(config?: ComponentConfig): HTMLElement;
525
- createFileUpload(config?: ComponentConfig): HTMLElement;
526
- createSearchInput(config?: ComponentConfig): HTMLElement;
527
- createButtonGroup(config?: ComponentConfig): HTMLElement;
528
- createHero(config?: ComponentConfig): HTMLElement;
529
- createFeatureGrid(config?: ComponentConfig): HTMLElement;
530
- createCTA(config?: ComponentConfig): HTMLElement;
531
- createCodeDemo(config?: ComponentConfig): HTMLElement;
532
- createSkeleton(config?: ComponentConfig): HTMLElement;
533
- createAvatar(config?: ComponentConfig): HTMLElement;
534
- createStatCard(config?: ComponentConfig): HTMLElement;
535
- createMediaObject(config?: ComponentConfig): HTMLElement;
536
- createTable(config?: TableConfig): HTMLElement;
530
+ /** List available BCCL component types, or get factory for a type */
531
+ catalog(type?: string): Record<string, any>;
537
532
 
538
533
  // -- Array Utilities ------------------------------------------------------
539
534
  arrayUniq(arr: any[]): any[];
@@ -599,9 +594,11 @@ export interface Bitwrench {
599
594
  _unmountCallbacks: Map<string, Function>;
600
595
  _topics: Record<string, any[]>;
601
596
  _fnRegistry: Record<string, Function>;
602
- _componentRegistry: Map<string, any>;
603
597
  _clientFunctions: Record<string, Function>;
604
- _allowExec: boolean;
598
+ _clientRemotes: Record<string, Function>;
599
+ _wireListeners: Record<string, () => void>;
600
+ _mounted: Record<string, boolean>;
601
+ _detached: Record<string, boolean>;
605
602
  }
606
603
 
607
604
  /** The bw namespace (default export) */