@design.estate/dees-catalog 9.7.0 → 10.0.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 (73) hide show
  1. package/dist_bundle/bundle.js +4164 -3800
  2. package/dist_bundle/bundle.js.map +1 -1
  3. package/dist_bundle/third-party-notices.md +783 -10
  4. package/dist_ts_web/00_commitinfo_data.js +2 -2
  5. package/dist_ts_web/elements/00actionerror.d.ts +32 -0
  6. package/dist_ts_web/elements/00actionerror.js +45 -0
  7. package/dist_ts_web/elements/00group-appui/dees-appui/dees-appui.js +6 -1
  8. package/dist_ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.d.ts +16 -0
  9. package/dist_ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.js +40 -3
  10. package/dist_ts_web/elements/00group-dataview/dees-table/dees-table.d.ts +7 -0
  11. package/dist_ts_web/elements/00group-dataview/dees-table/dees-table.js +17 -17
  12. package/dist_ts_web/elements/00group-feedback/dees-hint/dees-hint.d.ts +14 -3
  13. package/dist_ts_web/elements/00group-feedback/dees-hint/dees-hint.demo.js +23 -4
  14. package/dist_ts_web/elements/00group-feedback/dees-hint/dees-hint.js +77 -5
  15. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.js +14 -4
  16. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.d.ts +4 -0
  17. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +52 -1
  18. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.d.ts +4 -1
  19. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +93 -20
  20. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/renderers.js +7 -21
  21. package/dist_ts_web/elements/00group-harness/harness.helpers.d.ts +20 -0
  22. package/dist_ts_web/elements/00group-harness/harness.helpers.js +58 -1
  23. package/dist_ts_web/elements/00group-harness/interfaces.d.ts +6 -0
  24. package/dist_ts_web/elements/00group-harness/toolregistry.d.ts +8 -0
  25. package/dist_ts_web/elements/00group-harness/toolregistry.js +10 -2
  26. package/dist_ts_web/elements/00group-input/dees-input-text/dees-input-text.d.ts +23 -3
  27. package/dist_ts_web/elements/00group-input/dees-input-text/dees-input-text.js +71 -11
  28. package/dist_ts_web/elements/00group-input/index.d.ts +0 -1
  29. package/dist_ts_web/elements/00group-input/index.js +1 -2
  30. package/dist_ts_web/elements/00group-overlay/dees-modal/dees-modal.d.ts +7 -0
  31. package/dist_ts_web/elements/00group-overlay/dees-modal/dees-modal.js +13 -3
  32. package/dist_ts_web/elements/index.d.ts +1 -2
  33. package/dist_ts_web/elements/index.js +2 -4
  34. package/package.json +4 -4
  35. package/readme.md +73 -6
  36. package/scripts/check-third-party-notices.mjs +261 -0
  37. package/third-party-notices.md +783 -10
  38. package/ts_web/00_commitinfo_data.ts +1 -1
  39. package/ts_web/elements/00actionerror.ts +66 -0
  40. package/ts_web/elements/00group-appui/dees-appui/dees-appui.ts +4 -0
  41. package/ts_web/elements/00group-appui/dees-appui-tabs/dees-appui-tabs.ts +38 -2
  42. package/ts_web/elements/00group-dataview/dees-table/dees-table.ts +18 -16
  43. package/ts_web/elements/00group-feedback/dees-hint/dees-hint.demo.ts +22 -3
  44. package/ts_web/elements/00group-feedback/dees-hint/dees-hint.ts +71 -3
  45. package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.ts +12 -3
  46. package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +50 -0
  47. package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +95 -23
  48. package/ts_web/elements/00group-harness/dees-harness-tool-card/renderers.ts +7 -20
  49. package/ts_web/elements/00group-harness/harness.helpers.ts +63 -0
  50. package/ts_web/elements/00group-harness/interfaces.ts +6 -0
  51. package/ts_web/elements/00group-harness/toolregistry.ts +22 -1
  52. package/ts_web/elements/00group-input/dees-input-text/dees-input-text.ts +73 -13
  53. package/ts_web/elements/00group-input/index.ts +0 -1
  54. package/ts_web/elements/00group-overlay/dees-modal/dees-modal.ts +13 -2
  55. package/ts_web/elements/index.ts +1 -4
  56. package/dist_ts_web/elements/00group-input/dees-input-searchselect/dees-input-searchselect.d.ts +0 -1
  57. package/dist_ts_web/elements/00group-input/dees-input-searchselect/dees-input-searchselect.js +0 -2
  58. package/dist_ts_web/elements/00group-input/dees-input-searchselect/index.d.ts +0 -1
  59. package/dist_ts_web/elements/00group-input/dees-input-searchselect/index.js +0 -2
  60. package/dist_ts_web/elements/dees-search/dees-search.d.ts +0 -1
  61. package/dist_ts_web/elements/dees-search/dees-search.js +0 -2
  62. package/dist_ts_web/elements/dees-search/index.d.ts +0 -1
  63. package/dist_ts_web/elements/dees-search/index.js +0 -2
  64. package/dist_ts_web/elements/dees-tooltip/dees-tooltip.d.ts +0 -1
  65. package/dist_ts_web/elements/dees-tooltip/dees-tooltip.js +0 -2
  66. package/dist_ts_web/elements/dees-tooltip/index.d.ts +0 -1
  67. package/dist_ts_web/elements/dees-tooltip/index.js +0 -2
  68. package/ts_web/elements/00group-input/dees-input-searchselect/dees-input-searchselect.ts +0 -0
  69. package/ts_web/elements/00group-input/dees-input-searchselect/index.ts +0 -1
  70. package/ts_web/elements/dees-search/dees-search.ts +0 -0
  71. package/ts_web/elements/dees-search/index.ts +0 -1
  72. package/ts_web/elements/dees-tooltip/dees-tooltip.ts +0 -1
  73. package/ts_web/elements/dees-tooltip/index.ts +0 -1
@@ -34,6 +34,7 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
34
34
  };
35
35
  import * as plugins from '../../00plugins.js';
36
36
  import { zIndexRegistry } from '../../00zindex.js';
37
+ import { runAction } from '../../00actionerror.js';
37
38
  import { demoFunc } from './dees-modal.demo.js';
38
39
  import { customElement, html, DeesElement, property, cssManager, css, state, } from '@design.estate/dees-element';
39
40
  import '../../00group-button/dees-button/dees-button.js';
@@ -152,7 +153,7 @@ let DeesModal = (() => {
152
153
  const confirm = async () => {
153
154
  if (modal.promptPending)
154
155
  return;
155
- const value = input.value.trim();
156
+ const value = String(input.value ?? '').trim();
156
157
  const error = value ? options.validate?.(value) : 'Enter a name.';
157
158
  if (error) {
158
159
  input.validationState = 'invalid';
@@ -424,7 +425,7 @@ let DeesModal = (() => {
424
425
  <dees-button class="modal-action" .text=${action.name}
425
426
  .disabled=${this.promptPending}
426
427
  .type=${index === this.menuOptions.length - 1 ? 'accent' : 'secondary'}
427
- @clicked=${() => action.action(this)}></dees-button>
428
+ @clicked=${() => this.runMenuAction(action)}></dees-button>
428
429
  `)}
429
430
  </div>
430
431
  ` : ''}
@@ -473,6 +474,15 @@ let DeesModal = (() => {
473
474
  if (this.onHelp)
474
475
  await this.onHelp();
475
476
  }
477
+ /**
478
+ * A menu action is awaited so a rejected callback surfaces as a visible
479
+ * failure instead of an unhandled rejection. The error is announced on the
480
+ * modal through the cancelable `dees-action-error` event and, unless a
481
+ * listener cancels it, shown as a notification inside this dialog.
482
+ */
483
+ async runMenuAction(actionArg) {
484
+ await runAction(this, { action: actionArg, source: 'modal-menu', ownerElement: this.dialog }, () => actionArg.action(this));
485
+ }
476
486
  static {
477
487
  __runInitializers(_classThis, _classExtraInitializers);
478
488
  }
@@ -480,4 +490,4 @@ let DeesModal = (() => {
480
490
  return DeesModal = _classThis;
481
491
  })();
482
492
  export { DeesModal };
483
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1tb2RhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW92ZXJsYXkvZGVlcy1tb2RhbC9kZWVzLW1vZGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUNMLGFBQWEsRUFDYixJQUFJLEVBQ0osV0FBVyxFQUNYLFFBQVEsRUFFUixVQUFVLEVBQ1YsR0FBRyxFQUNILEtBQUssR0FDTixNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8saURBQWlELENBQUM7QUFDekQsT0FBTywyREFBMkQsQ0FBQztBQUNuRSxPQUFPLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztJQVMxRSxTQUFTOzRCQURyQixhQUFhLENBQUMsWUFBWSxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQW5CLFNBQVEsV0FBVzs7OztzQ0E2R3ZDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzttQ0FHMUIsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO21DQUc5QixRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07aUJBQ2IsQ0FBQzttQ0FHRCxLQUFLLENBQUMsRUFBRSxDQUFDO3VDQUdULEtBQUssQ0FBQyxFQUFFLENBQUM7aUNBR1QsUUFB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
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1tb2RhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLW92ZXJsYXkvZGVlcy1tb2RhbC9kZWVzLW1vZGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFDTCxhQUFhLEVBQ2IsSUFBSSxFQUNKLFdBQVcsRUFDWCxRQUFRLEVBRVIsVUFBVSxFQUNWLEdBQUcsRUFDSCxLQUFLLEdBQ04sTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLGlEQUFpRCxDQUFDO0FBQ3pELE9BQU8sMkRBQTJELENBQUM7QUFDbkUsT0FBTyw4Q0FBOEMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7SUFTMUUsU0FBUzs0QkFEckIsYUFBYSxDQUFDLFlBQVksQ0FBQzs7OztzQkFDRyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3lCQUFuQixTQUFRLFdBQVc7Ozs7c0NBNkd2QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7bUNBRzFCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQzttQ0FHOUIsUUFBUSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO2lCQUNiLENBQUM7bUNBR0QsS0FBSyxDQUFDLEVBQUUsQ0FBQzt1Q0FHVCxLQUFLLENBQUMsRUFBRSxDQUFDO2lDQUdULFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztrQ0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO29DQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7b0NBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzsyQ0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDOzBDQUczQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7a0NBRzNCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQzs0Q0FHOUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDOzBDQUczQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7dUNBRzFCLEtBQUssRUFBRTt5Q0FHUCxLQUFLLEVBQUU7WUE5Q1IsbUxBQVMsVUFBVSw2QkFBVixVQUFVLCtGQUFNO1lBR3pCLDBLQUFTLE9BQU8sNkJBQVAsT0FBTyx5RkFBNkI7WUFLN0MsMEtBQVMsT0FBTyw2QkFBUCxPQUFPLHlGQUFNO1lBR3RCLDBLQUFTLE9BQU8sNkJBQVAsT0FBTyx5RkFBa0I7WUFHbEMsc0xBQVMsV0FBVyw2QkFBWCxXQUFXLGlHQUFzRDtZQUcxRSxvS0FBUyxLQUFLLDZCQUFMLEtBQUsscUZBQWtFO1lBR2hGLHVLQUFTLE1BQU0sNkJBQU4sTUFBTSx1RkFBcUI7WUFHcEMsNktBQVMsUUFBUSw2QkFBUixRQUFRLDJGQUFVO1lBRzNCLDZLQUFTLFFBQVEsNkJBQVIsUUFBUSwyRkFBVTtZQUczQixrTUFBUyxlQUFlLDZCQUFmLGVBQWUseUdBQWlCO1lBR3pDLCtMQUFTLGNBQWMsNkJBQWQsY0FBYyx1R0FBa0I7WUFHekMsdUtBQVMsTUFBTSw2QkFBTixNQUFNLHVGQUE4QjtZQUc3QyxxTUFBUyxnQkFBZ0IsNkJBQWhCLGdCQUFnQiwyR0FBa0I7WUFHM0MsK0xBQVMsY0FBYyw2QkFBZCxjQUFjLHVHQUFjO1lBR3JDLHNMQUFTLFdBQVcsNkJBQVgsV0FBVyxpR0FBZ0I7WUFFM0IsNExBQWlCLGFBQWEsNkJBQWIsYUFBYSxxR0FBUztZQTVKbEQsNktBaVhDOzs7O1FBaFhDLFNBQVM7UUFDRixNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUN2QixNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkMsMkZBQTJGO1FBQ3BGLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BTzFCO1lBQ0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNsQyxLQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDNUIsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLE9BQXdDLENBQUM7WUFDN0MsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQWdCLGFBQWEsQ0FBQyxFQUFFLEdBQUcsT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLElBQUksS0FBZ0IsQ0FBQztZQUNyQixNQUFNLE9BQU8sR0FBRyxLQUFLLElBQUksRUFBRTtnQkFDekIsSUFBSSxLQUFLLENBQUMsYUFBYTtvQkFBRSxPQUFPO2dCQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztnQkFDbEUsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDVixLQUFLLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztvQkFBQyxLQUFLLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztvQkFDaEUsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ3BCLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxLQUFLLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztnQkFDM0IsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLElBQUksQ0FBQztvQkFDSCxNQUFNLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakMsS0FBSyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7b0JBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDZixNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLEtBQUssQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO29CQUM1QixLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztvQkFDdkIsS0FBSyxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7b0JBQ2xDLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM5RSxNQUFNLEtBQUssQ0FBQyxjQUFjLENBQUM7b0JBQzNCLE1BQU0sS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1lBQ0YsS0FBSyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQW9CLEVBQUUsRUFBRTtnQkFDekQsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLE9BQU8sSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxNQUFNO29CQUFFLE9BQU87Z0JBQ3ZFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ2hELEtBQUssT0FBTyxFQUFFLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFDSCxLQUFLLEdBQUcsTUFBTSxTQUFTLENBQUMsYUFBYSxDQUFDO2dCQUNwQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUEsR0FBRyxLQUFLLEVBQUU7Z0JBQ2pFLFdBQVcsRUFBRTtvQkFDWCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxZQUFZLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7aUJBQzVEO2FBQ0YsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzRSxNQUFNLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDM0IsTUFBTSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBZ0JqQztZQUNDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDM0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUM5QixLQUFLLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDbkMsS0FBSyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUMvQyxLQUFLLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7WUFDbkMsS0FBSyxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ25DLEtBQUssQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztZQUMzQyxJQUFJLFVBQVUsQ0FBQyxLQUFLO2dCQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUNyRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssU0FBUztnQkFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdEUsSUFBSSxVQUFVLENBQUMsUUFBUTtnQkFBRSxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDOUQsSUFBSSxVQUFVLENBQUMsUUFBUTtnQkFBRSxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDOUQsSUFBSSxVQUFVLENBQUMsZUFBZSxLQUFLLFNBQVM7Z0JBQUUsS0FBSyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO1lBQ2pHLElBQUksVUFBVSxDQUFDLGNBQWMsS0FBSyxTQUFTO2dCQUFFLEtBQUssQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQztZQUM5RixJQUFJLFVBQVUsQ0FBQyxNQUFNO2dCQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUN4RCxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTO2dCQUFFLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7WUFDcEcsSUFBSSxVQUFVLENBQUMsY0FBYyxLQUFLLFNBQVM7Z0JBQUUsS0FBSyxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDO1lBQzlGLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbkIsTUFBTSxLQUFLLENBQUMsY0FBYyxDQUFDO1lBRTNCLHVEQUF1RDtZQUN2RCxLQUFLLENBQUMsV0FBVyxHQUFHLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuRCxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFbEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBS0QsaUZBQXNCLEVBQUUsRUFBQztRQUh6QixXQUFXO1FBR1gsSUFBUyxVQUFVLGdEQUFNO1FBQXpCLElBQVMsVUFBVSxzREFBTTtRQUd6Qiw2SUFBNkM7UUFBN0MsSUFBUyxPQUFPLDZDQUE2QjtRQUE3QyxJQUFTLE9BQU8sbURBQTZCO1FBSzdDLGlJQUFtQixFQUFFLEdBQUM7UUFBdEIsSUFBUyxPQUFPLDZDQUFNO1FBQXRCLElBQVMsT0FBTyxtREFBTTtRQUd0QiwwSUFBa0M7UUFBbEMsSUFBUyxPQUFPLDZDQUFrQjtRQUFsQyxJQUFTLE9BQU8sbURBQWtCO1FBR2xDLHlJQUF1RSxFQUFFLEdBQUM7UUFBMUUsSUFBUyxXQUFXLGlEQUFzRDtRQUExRSxJQUFTLFdBQVcsdURBQXNEO1FBRzFFLGlJQUF1RSxRQUFRLEdBQUM7UUFBaEYsSUFBUyxLQUFLLDJDQUFrRTtRQUFoRixJQUFTLEtBQUssaURBQWtFO1FBR2hGLHNJQUFvQztRQUFwQyxJQUFTLE1BQU0sNENBQXFCO1FBQXBDLElBQVMsTUFBTSxrREFBcUI7UUFHcEMsMklBQTJCO1FBQTNCLElBQVMsUUFBUSw4Q0FBVTtRQUEzQixJQUFTLFFBQVEsb0RBQVU7UUFHM0IsNklBQTJCO1FBQTNCLElBQVMsUUFBUSw4Q0FBVTtRQUEzQixJQUFTLFFBQVEsb0RBQVU7UUFHM0Isa0pBQW9DLElBQUksR0FBQztRQUF6QyxJQUFTLGVBQWUscURBQWlCO1FBQXpDLElBQVMsZUFBZSwyREFBaUI7UUFHekMsdUpBQW1DLEtBQUssR0FBQztRQUF6QyxJQUFTLGNBQWMsb0RBQWtCO1FBQXpDLElBQVMsY0FBYywwREFBa0I7UUFHekMsK0lBQTZDO1FBQTdDLElBQVMsTUFBTSw0Q0FBOEI7UUFBN0MsSUFBUyxNQUFNLGtEQUE4QjtRQUc3QyxrSkFBcUMsS0FBSyxHQUFDO1FBQTNDLElBQVMsZ0JBQWdCLHNEQUFrQjtRQUEzQyxJQUFTLGdCQUFnQiw0REFBa0I7UUFHM0Msd0pBQWtDLEVBQUUsR0FBQztRQUFyQyxJQUFTLGNBQWMsb0RBQWM7UUFBckMsSUFBUyxjQUFjLDBEQUFjO1FBR3JDLGdKQUErQixJQUFJLEdBQUM7UUFBcEMsSUFBUyxXQUFXLGlEQUFnQjtRQUFwQyxJQUFTLFdBQVcsdURBQWdCO1FBRTNCLGlKQUFpQyxLQUFLLEdBQUM7UUFBdkMsSUFBaUIsYUFBYSxtREFBUztRQUF2QyxJQUFpQixhQUFhLHlEQUFTO1FBRWhEO1lBQ0UsS0FBSyxFQUFFLENBQUM7UUFDVixDQUFDO1FBRU0sTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNyQixrQkFBa0I7WUFDbEIsVUFBVSxDQUFDLGFBQWE7WUFDeEIsR0FBRyxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBNkdGO1NBQ0YsQ0FBQztRQUVLLE1BQU07WUFDWCxNQUFNLFVBQVUsR0FBRyxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQy9FLE1BQU0sTUFBTSxHQUFHO2dCQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNsRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQzVELENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1osT0FBTyxJQUFJLENBQUE7O2tCQUVHLElBQUksQ0FBQyxZQUFZLFdBQVcsSUFBSSxDQUFDLGtCQUFrQjtnQ0FDckMsVUFBVSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUU7a0JBQ2pILE1BQU07WUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUEsMEJBQTBCLElBQUksQ0FBQyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRTs7NEdBRXdCLElBQUksQ0FBQyxPQUFPO2dCQUN4RyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUEseUJBQXlCLElBQUksQ0FBQyxVQUFVLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTs7Z0JBRXpFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQSxzRUFBc0UsSUFBSSxDQUFDLFVBQVUsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUEsMkJBQTJCLEVBQUUsV0FBVyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxFQUFFOzs7Z0RBR2xGLElBQUksQ0FBQyxjQUFjLE9BQU8sSUFBSSxDQUFDLE9BQU87WUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTs7Z0JBRTFCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFBOzBEQUNGLE1BQU0sQ0FBQyxJQUFJOzhCQUN2QyxJQUFJLENBQUMsYUFBYTswQkFDdEIsS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxXQUFXOzZCQUMzRCxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztlQUM5QyxDQUFDOztXQUVMLENBQUMsQ0FBQyxDQUFDLEVBQUU7OztLQUdYLENBQUM7UUFDSixDQUFDO1FBRU8sY0FBYyw2REFBaUI7UUFFaEMsWUFBWSxDQUFDLGlCQUF5RDtZQUMzRSxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDdEMsSUFBSSxJQUFJLENBQUMsV0FBVztnQkFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ2pELENBQUM7UUFFRCxJQUFZLE1BQU07WUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDMUQsQ0FBQztRQUVPLFlBQVksQ0FBQyxRQUFlO1lBQ2xDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxQixLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQW9CO1lBQ2xELElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNO2dCQUFFLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZFLENBQUM7UUFFTSxPQUFPO1lBQ1osSUFBSSxJQUFJLENBQUMsYUFBYTtnQkFBRSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZELENBQUM7UUFFTyxLQUFLLENBQUMsY0FBYztZQUMxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsQyxrRkFBa0Y7WUFDbEYsSUFBSSxJQUFJO2dCQUFFLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNoRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDO1FBRU0sS0FBSyxDQUFDLG9CQUFvQjtZQUMvQixJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3JCLGNBQWMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ25ELE1BQU0sS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDckMsQ0FBQztRQUVPLEtBQUssQ0FBQyxVQUFVO1lBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkMsQ0FBQztRQUVEOzs7OztXQUtHO1FBQ0ssS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUF1RDtZQUNqRixNQUFNLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUgsQ0FBQzs7WUFoWFUsdURBQVM7Ozs7O1NBQVQsU0FBUyJ9
@@ -1,3 +1,4 @@
1
+ export * from './00actionerror.js';
1
2
  export * from './00zindex.js';
2
3
  export * from './00theme.js';
3
4
  export * from './00group-appui/index.js';
@@ -15,5 +16,3 @@ export * from './00group-runtime/index.js';
15
16
  export * from './00group-simple/index.js';
16
17
  export * from './00group-utility/index.js';
17
18
  export * from './00group-workspace/index.js';
18
- export * from './dees-search/index.js';
19
- export * from './dees-tooltip/index.js';
@@ -1,3 +1,4 @@
1
+ export * from './00actionerror.js';
1
2
  export * from './00zindex.js';
2
3
  export * from './00theme.js';
3
4
  // Component Groups
@@ -16,7 +17,4 @@ export * from './00group-runtime/index.js';
16
17
  export * from './00group-simple/index.js';
17
18
  export * from './00group-utility/index.js';
18
19
  export * from './00group-workspace/index.js';
19
- // Standalone Components
20
- export * from './dees-search/index.js';
21
- export * from './dees-tooltip/index.js';
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxjQUFjLENBQUM7QUFFN0IsbUJBQW1CO0FBQ25CLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDhCQUE4QixDQUFDO0FBRTdDLHdCQUF3QjtBQUN4QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMseUJBQXlCLENBQUMifQ==
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGNBQWMsQ0FBQztBQUU3QixtQkFBbUI7QUFDbkIsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsOEJBQThCLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-catalog",
3
- "version": "9.7.0",
3
+ "version": "10.0.0",
4
4
  "private": false,
5
5
  "description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
6
6
  "main": "dist_ts_web/index.js",
@@ -45,12 +45,12 @@
45
45
  },
46
46
  "devDependencies": {
47
47
  "@design.estate/dees-wcctools": "^3.9.4",
48
- "@git.zone/tsbuild": "^4.4.2",
48
+ "@git.zone/tsbuild": "^4.4.3",
49
49
  "@git.zone/tsbundle": "^2.13.0",
50
- "@git.zone/tstest": "^6.0.0",
50
+ "@git.zone/tstest": "^6.1.0",
51
51
  "@git.zone/tswatch": "^3.3.5",
52
52
  "@push.rocks/projectinfo": "^5.1.0",
53
- "@types/node": "^26.4.1"
53
+ "@types/node": "^26.5.0"
54
54
  },
55
55
  "files": [
56
56
  "ts/**/*",
package/readme.md CHANGED
@@ -257,6 +257,28 @@ task guide and examples deliberately; the generated table does not replace them.
257
257
 
258
258
  ## Component API
259
259
 
260
+ ### Failed actions
261
+
262
+ Components that run an application callback — `dees-modal`'s `menuOptions[].action`
263
+ and `dees-table`'s `dataActions[].actionFunc` — await it. A rejected callback is
264
+ never dropped: the component dispatches the cancelable `dees-action-error` event
265
+ (bubbling and composed) and, unless a listener cancels it, shows the error through
266
+ `dees-toast`. Successful callbacks behave exactly as before and dispatch nothing.
267
+
268
+ ```typescript
269
+ element.addEventListener('dees-action-error', (event: CustomEvent<IActionErrorDetail>) => {
270
+ const { error, action, source } = event.detail;
271
+ // source: 'modal-menu' | 'table-header' | 'table-footer' | 'table-row'
272
+ // | 'table-rowmenu' | 'table-contextmenu' | 'table-doubleclick'
273
+ event.preventDefault(); // render your own error surface instead of the toast
274
+ reportToCrashService(error);
275
+ });
276
+ ```
277
+
278
+ `IActionErrorDetail`, `actionErrorEventName`, `actionErrorMessage`,
279
+ `reportActionError` and `runAction` are exported from the package root, so a
280
+ component outside the catalog can announce failures the same way.
281
+
260
282
  ### Core UI Components
261
283
 
262
284
  #### `DeesButton`
@@ -446,14 +468,21 @@ Consistent heading component with level and styling options.
446
468
  ```
447
469
 
448
470
  #### `DeesHint`
449
- Hint/tooltip component for providing contextual help.
471
+ An inline advisory note next to the thing it explains. Use `text` for a plain
472
+ sentence and the default slot for markup; both render when both are set. The
473
+ `type` chooses the icon and the accent color. A hint with neither text nor
474
+ slotted content renders nothing and reserves no space, so a conditional note
475
+ needs no wrapper element.
450
476
 
451
477
  ```typescript
452
478
  <dees-hint
453
- text="This field is required"
454
- type="info" // Options: info, warning, error, success
455
- position="top" // Options: top, bottom, left, right
479
+ text="Changing the URL breaks existing links."
480
+ type="info" // Options: info, success, warning, error (default: info)
456
481
  ></dees-hint>
482
+
483
+ <dees-hint type="warning">
484
+ Keys older than 90 days <strong>stop working</strong>.
485
+ </dees-hint>
457
486
  ```
458
487
 
459
488
  #### `DeesPanel`
@@ -567,6 +596,7 @@ Text input field with validation, info tooltips, description text, and context m
567
596
  <dees-input-text
568
597
  key="email" // Unique identifier for form data
569
598
  label="Email" // Input label
599
+ type="email" // Native input type: text (default), number, date, email, url, tel, password
570
600
  value="initial@value.com" // Initial value
571
601
  required // Makes the field required
572
602
  disabled // Disables the input
@@ -585,6 +615,15 @@ Text input field with validation, info tooltips, description text, and context m
585
615
  ></dees-input-text>
586
616
  ```
587
617
 
618
+ - `type` maps to the native input type and picks the matching keyboard hint; an
619
+ explicit `inputmode` on the element still wins. `value` is a string for every
620
+ type except `number`, where it is a `number`, or `null` while the field is
621
+ empty — so a form collects a number rather than a numeric string. A value bound
622
+ as the wrong shape is converted to the one the type promises.
623
+ - `type="password"` masks the value. `isPasswordBool` masks it as well and adds
624
+ the reveal button that `showPasswordBool` toggles.
625
+ - `validationFunction` always receives the value as text, whatever the type.
626
+
588
627
  > 💡 **All input components** share these common properties from `DeesInputBase`: `key`, `label`, `required`, `disabled`, `infoText`, `description`, `layoutMode`, `labelPosition`.
589
628
 
590
629
  #### `DeesInputTextarea`
@@ -1505,6 +1544,10 @@ appui.setBottomBarVisible(false);
1505
1544
  Content-panel navigation with native tab buttons, separate close controls and
1506
1545
  arrow/Home/End focus movement. Enter/Space select; Delete closes a closeable tab.
1507
1546
  `IMenuItem.key` remains the identity; optional `label` supplies display text.
1547
+ The selection follows that key, so a host that binds a literal `.tabs=${[...]}`
1548
+ keeps its open tab across rerenders: descriptors with the same key are adopted
1549
+ without re-running the tab's `action`. Only a key that is no longer present falls
1550
+ back to the first tab. Descriptors without a key fall back to their `label`.
1508
1551
  Use multitoggle for a view mode within the current panel.
1509
1552
  Both horizontal and vertical layouts use an inset selection surface.
1510
1553
  `showTabIndicator=false` hides that surface while retaining selected text and ARIA
@@ -1564,6 +1607,7 @@ html`<dees-table
1564
1607
  - Action `type` accepts `header`, `inRow`, `contextmenu`, `footer`, `doubleClick`, `preview`, and `keyCombination`. Use `actionRelevancyCheckFunc` for row-specific availability. Desktop rows show up to three relevant primary actions plus overflow; below 700px of table width, one Actions menu contains the row actions. Coarse pointers receive 44px targets independently of width. The opaque pinned column shows an edge shadow only while it covers scrolling columns.
1565
1608
  - `fixedHeight` uses internal scrolling with sticky headers and `--table-max-height`; the default uses a floating header while the page scrolls. `virtualized` limits rendered rows and retains spacer geometry.
1566
1609
  - Set a column's `editor` to `text`, `number`, `checkbox`, `dropdown`, `date`, or `tags`; `editable: true` defaults to text. Use `editorOptions`, `format`, `parse`, and `validate` for value handling. Double-click edits a cell; Enter/Tab commit and move, Escape cancels. `cellEdit` reports `{ row, key, oldValue, newValue }`; `cellEditError` reports validation failures.
1610
+ - Every `actionFunc` is awaited. A rejected action dispatches the cancelable `dees-action-error` event (see [Failed actions](#failed-actions)) instead of disappearing.
1567
1611
  - File drop onto rows and `highlightUpdates: 'flash'` remain available. Flashing respects reduced motion and stable row identity.
1568
1612
 
1569
1613
  #### `DeesDataviewCodebox`
@@ -2154,6 +2198,9 @@ runs before closing. Rejected operations leave the dialog open with their error,
2154
2198
  and repeated submission and dismissal are blocked while confirmation is pending.
2155
2199
  The modal emits `modal-close` when removed.
2156
2200
 
2201
+ Every `menuOptions` action is awaited. A rejected action keeps the dialog open and
2202
+ reports the failure through `dees-action-error` (see [Failed actions](#failed-actions)).
2203
+
2157
2204
  The modal gallery includes a working settings draft: values survive navigation,
2158
2205
  Save returns the draft, and Cancel discards it. The example lives in
2159
2206
  `ts_web/elements/00group-overlay/dees-modal/dees-modal.demo.ts`.
@@ -2593,7 +2640,7 @@ Scrollable streaming-safe log. Up to 40 canonical entries (`messages` + `permiss
2593
2640
 
2594
2641
  `refreshMessages(ids?)` reconciles in-place host mutations without replacing canonical objects. With IDs, it refreshes only matching message rows that are currently mounted; matching offscreen rows remain unmounted and use the mutated canonical objects when later mounted. With IDs omitted, it rebuilds structural transcript state and refreshes all mounted rows. `[]` is a no-op.
2595
2642
 
2596
- Producers with authoritative source chronology can set `IHarnessMessage.order` to `{ messageIndex, partIndex }`; explicitly ordered messages retain that relative order while timestamps continue to place legacy messages and ancillary cards. Consecutive tool calls use one generic responsive-grid pipeline at their chronological position, partitioned by descriptor layout: compact tools share rows with compact tools, subagents share rows only with subagents, and terminal plus file-write cards span a whole row. Consecutive same-layout runs are always capped at four cards per group row, even when their tool kinds differ. Columns respond to transcript content width rather than the viewport, and status changes never regroup cards. Untouched projected subtask cards collapse individually on completion with the normal disclosure animation; other cards retain their descriptor or user-selected disclosure state. Auto-follow responds to streamed growth but does not repeatedly repin while a disclosure shrinks. Permission requests, questions, and nested-stream limits behave as before. Props: `messages`, `permissions`/`permissionsBusy`, `questions`, `status`, `viewState`, `transcriptKey`, `hasEarlierMessages`, `loadingEarlier`, `autoFollow`, `hideScrollbar`, `fadeScrollEdges`, `showRoles`, `showTimestamps`, `allowSubtaskStreams`, `markdownWhileStreaming` (default `true`), `emptyTitle`/`emptyText` (+ `slot="empty"`). Native browser find and selection cover the mounted window; hosts that require complete-history search or copy should operate on their canonical `messages`, `permissions`, and `questions` models.
2643
+ Producers with authoritative source chronology can set `IHarnessMessage.order` to `{ messageIndex, partIndex }`; explicitly ordered messages retain that relative order while timestamps continue to place legacy messages and ancillary cards. Consecutive tool calls use one generic responsive-grid pipeline at their chronological position, partitioned by descriptor layout: compact tools share rows with compact tools, subagents share rows only with subagents, and terminal plus file-write cards span a whole row. Consecutive same-layout runs are always capped at four cards per group row, even when their tool kinds differ. Columns respond to the row's own width rather than the viewport, and status changes never regroup cards. Because a compact group sits inside the content measure, its column count is bounded by that measure — two columns at the 820px default; the wider three- and four-column steps apply when a host widens `--dees-harness-content-width`. Rows are held to a reading measure — `--dees-harness-content-width`, default `820px`, capped at the available width — while terminal and file-write rows keep the full pane, so prose stays readable and diffs and command output get the room they need. A subagent group takes the pane only from three cards upward; one or two stay on the measure. The docked composer keeps its full-bleed bar and insets its content to the same measure, so the prompt lines up with the messages above it. Set the custom property on the chat or the list to widen or disable the column; it is read when rows are measured, so change it at mount rather than while a virtualized transcript is scrolled. Untouched projected subtask cards collapse individually on completion with the normal disclosure animation; other cards retain their descriptor or user-selected disclosure state. Auto-follow responds to streamed growth but does not repeatedly repin while a disclosure shrinks. Permission requests, questions, and nested-stream limits behave as before. Props: `messages`, `permissions`/`permissionsBusy`, `questions`, `status`, `viewState`, `transcriptKey`, `hasEarlierMessages`, `loadingEarlier`, `autoFollow`, `hideScrollbar`, `fadeScrollEdges`, `showRoles`, `showTimestamps`, `allowSubtaskStreams`, `markdownWhileStreaming` (default `true`), `emptyTitle`/`emptyText` (+ `slot="empty"`). Native browser find and selection cover the mounted window; hosts that require complete-history search or copy should operate on their canonical `messages`, `permissions`, and `questions` models.
2597
2644
 
2598
2645
  #### `DeesHarnessMessage`
2599
2646
 
@@ -2607,7 +2654,7 @@ One message: role accent, markdown (assistant default, `message.markdown` overri
2607
2654
 
2608
2655
  #### `DeesHarnessToolCard`
2609
2656
 
2610
- Tool-call card: shared chrome (icon, label, subtitle, status pill, duration, MCP badges) with a per-kind body. Kind resolution goes through `DeesHarnessToolRegistry` (see below); bodies for the seeded kinds — terminal, file-read, file-write (renders a before/after diff via `dees-dataview-codebox` when the input carries previous content), file-delete, dir-list, browser (inline screenshots), http, json, search, subtask, project-task, todo, mcp, unknown — live in `renderers.ts`. File-write cards retain the user's inline/split choice while the same call updates. Numeric patch hunks preserve their source line numbers; patches and replacement snippets without coordinates hide gutters rather than presenting fabricated positions. Overflowing subtitles use a 40px right-edge fade and reveal the full line on hover plus once after a two-second initial delay. Expand/collapse always uses a smooth disclosure transition. Initially closed bodies mount lazily on first expansion, then retain the same DOM and become inert plus `aria-hidden` while closed. Long outputs truncate at 6,000 chars with a "Show all" expander. Terminal and error cards open by default. Terminal output uses a black inner log surface and follows the live tail after reaching the card-height cap. Scrolling upward detaches the tail; leaving the card returns to the bottom after five seconds, while re-entering cancels that pending return. Terminal calls may provide `exitCode` separately when `output` is one combined process stream; the renderer retains support for `{ stdout, stderr, exitCode }` output objects.
2657
+ Tool-call card: shared chrome (icon, label, subtitle, status pill, duration, MCP badges) with a per-kind body. Kind resolution goes through `DeesHarnessToolRegistry` (see below); bodies for the seeded kinds — terminal, file-read, file-write (renders a before/after diff via `dees-dataview-codebox` when the input carries previous content), file-delete, dir-list, browser (inline screenshots), http, json, search, subtask, project-task, todo, mcp, unknown — live in `renderers.ts`. File-write cards retain the user's inline/split choice while the same call updates. Numeric patch hunks preserve their source line numbers; patches and replacement snippets without coordinates hide gutters rather than presenting fabricated positions. A producer-supplied `IHarnessToolCall.title` leads the subtitle when present — a harness's own one-line description of the call, such as `Read SKILL.md` for a shell invocation — and the descriptor-derived line stays reachable as the hover tooltip; a blank title falls back to the derived line. Overflowing subtitles use a 40px right-edge fade and reveal the full line on hover plus once after a two-second initial delay. Expand/collapse always uses a smooth disclosure transition. Initially closed bodies mount lazily on first expansion, then retain the same DOM and become inert plus `aria-hidden` while closed. Long outputs truncate at 6,000 chars with a "Show all" expander. Terminal and error cards open by default, and a terminal card collapses itself again once its command can be proven to have succeeded, meaning an exit code of 0. A non-zero exit, an error, a stopped command, and a command that reports no exit code at all keep their output on screen — an absent exit code is not evidence of success, so a producer that reports a failed command as completed never has that failure hidden behind a summary. A collapsed terminal shows a one-line outcome (exit code, line count, and the last meaningful line) beneath the command. It is derived from the call's own output rather than from any producer-supplied description, so it is present for every producer. An explicit expand or collapse by the user always wins and is never overridden when the call settles. Descriptors opt in through `collapseWhenFinished` and supply the line through `summary`. Terminal output uses a black inner log surface and follows the live tail after reaching the card-height cap. Scrolling upward detaches the tail; leaving the card returns to the bottom after five seconds, while re-entering cancels that pending return. Terminal calls may provide `exitCode` separately when `output` is one combined process stream; the renderer retains support for `{ stdout, stderr, exitCode }` output objects. A subagent card is capped by `--dees-harness-active-subtask-height` (default `320px`) rather than fixed to it: a settled agent whose brief and result fit sizes to its own text, and only content past the cap hands the overflow to the panels, which scroll with a hidden scrollbar and a fade mask at the clipped edge. Both the Agent Brief and the Result carry that affordance, and the drill-in action stays pinned at the bottom of the card. A live child keeps the full window so its streaming transcript has a stable area to scroll in.
2611
2658
 
2612
2659
  After mutating a canonical tool call in place, call `refreshCall()`. It refreshes the mounted card, any mounted nested subtask transcript, and any open fullscreen card while retaining the same canonical call and nested-message object references; it does not clone or replace them.
2613
2660
 
@@ -2949,9 +2996,19 @@ and selecting a kit with `dees-input-multitoggle`. Its Review bag action places
2949
2996
  The library exports unified interfaces for consistent API patterns:
2950
2997
 
2951
2998
  ```typescript
2999
+ // Detail of the cancelable `dees-action-error` event (see Failed actions)
3000
+ interface IActionErrorDetail<TAction = unknown> {
3001
+ error: unknown; // whatever the action callback rejected with
3002
+ action: TAction; // the action descriptor whose callback rejected
3003
+ source: string; // where it ran, e.g. 'modal-menu' or 'table-row'
3004
+ }
3005
+
2952
3006
  // Base menu item interface (used by tabs, menus, etc.)
3007
+ // `key` is the stable identity: tab selection follows it across rerenders.
3008
+ // Give every tab a unique `key`: when it is absent the `label` is used, so two keyless tabs with the same label are the same tab.
2953
3009
  interface IMenuItem {
2954
3010
  key: string;
3011
+ label?: string; // display text; falls back to `key`
2955
3012
  iconName?: string;
2956
3013
  action: () => void;
2957
3014
  badge?: string | number;
@@ -3045,6 +3102,16 @@ module worker under the Apache License 2.0. The attribution and complete license
3045
3102
  provided in [third-party-notices.md](./third-party-notices.md) and copied into
3046
3103
  `dist_bundle/` for standalone bundle distributions.
3047
3104
 
3105
+ [third-party-notices.md](./third-party-notices.md) lists every library the package
3106
+ embeds in `dist_bundle/bundle.js` and every library it loads into the host page at
3107
+ runtime (ECharts, highlight.js, Lightweight Charts, Monaco, xterm). That list is
3108
+ generated from the built artifact and the installed packages — a dependency added,
3109
+ removed, or re-pinned without regenerating fails `pnpm test`:
3110
+
3111
+ ```sh
3112
+ node scripts/check-third-party-notices.mjs --write
3113
+ ```
3114
+
3048
3115
  ## License and Legal Information
3049
3116
 
3050
3117
  This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [license](./license) file.
@@ -0,0 +1,261 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Third-party notices for everything this package ships or loads.
4
+ *
5
+ * The embedded list is derived from dist_bundle itself: esbuild keeps a
6
+ * `// node_modules/...` comment per embedded module, so the set of embedded
7
+ * packages is read off the built artifact instead of a hand-kept list that
8
+ * silently rots when a dependency is added, removed, or made lazy. License
9
+ * metadata is read from the installed packages, never transcribed here.
10
+ *
11
+ * Usage:
12
+ * node scripts/check-third-party-notices.mjs # verify (also covered by tests)
13
+ * node scripts/check-third-party-notices.mjs --write # regenerate the managed section
14
+ */
15
+ import * as fs from 'node:fs';
16
+ import * as path from 'node:path';
17
+ import { fileURLToPath } from 'node:url';
18
+
19
+ export const projectRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
20
+ export const noticesPath = path.join(projectRoot, 'third-party-notices.md');
21
+ export const bundleDirectory = path.join(projectRoot, 'dist_bundle');
22
+ export const startMarker = '<!-- bundled-notices:start -->';
23
+ export const endMarker = '<!-- bundled-notices:end -->';
24
+
25
+ /**
26
+ * Libraries the catalog does not embed but pins and loads into the host page at
27
+ * runtime (the CDN modules behind DeesServiceLibLoader and dees-workspace-monaco).
28
+ * Nothing in the built artifact carries their code, so they are named here; their
29
+ * license metadata still comes from the installed package where one exists.
30
+ * Mirrors ts_web/services/versions.ts.
31
+ */
32
+ export const runtimeLoadedLibraries = [
33
+ { name: 'echarts' },
34
+ { name: 'highlight.js' },
35
+ { name: 'lightweight-charts' },
36
+ { name: 'monaco-editor' },
37
+ { name: 'xterm' },
38
+ { name: 'xterm-addon-fit' },
39
+ // Loaded by URL only; the catalog does not depend on it for types.
40
+ { name: 'xterm-addon-search', version: '0.13.0', license: 'MIT' },
41
+ ];
42
+
43
+ const listJsFiles = (directoryArg) => {
44
+ const files = [];
45
+ for (const entry of fs.readdirSync(directoryArg, { withFileTypes: true })) {
46
+ const entryPath = path.join(directoryArg, entry.name);
47
+ if (entry.isDirectory()) files.push(...listJsFiles(entryPath));
48
+ else if (entry.name.endsWith('.js')) files.push(entryPath);
49
+ }
50
+ return files;
51
+ };
52
+
53
+ /** The package directory a bundled module path belongs to. */
54
+ const packageDirectoryOf = (modulePathArg) => {
55
+ const marker = '/node_modules/';
56
+ const index = modulePathArg.lastIndexOf(marker);
57
+ if (index < 0) return null;
58
+ const rest = modulePathArg.slice(index + marker.length).split('/');
59
+ const name = rest[0].startsWith('@') ? `${rest[0]}/${rest[1]}` : rest[0];
60
+ if (!name || name.startsWith('.')) return null;
61
+ return modulePathArg.slice(0, index + marker.length) + name;
62
+ };
63
+
64
+ const readIfPresent = (directoryArg, matcherArg) => {
65
+ const entry = fs.readdirSync(directoryArg).find(matcherArg);
66
+ if (!entry) return null;
67
+ const text = fs.readFileSync(path.join(directoryArg, entry), 'utf8').replace(/\r\n/g, '\n').trim();
68
+ return text || null;
69
+ };
70
+
71
+ /** The license file that matches the elected license id, else the generic one. */
72
+ const readLicenseText = (packageDirectoryArg, licenseIdArg) => {
73
+ const entries = fs.readdirSync(packageDirectoryArg);
74
+ const exact = entries.find((entry) => entry.toLowerCase() === `license.${licenseIdArg.toLowerCase()}`);
75
+ const generic = entries.find((entry) => /^(licen[cs]e|copying)(\.(md|txt))?$/i.test(entry));
76
+ const chosen = exact ?? generic;
77
+ if (!chosen) return null;
78
+ const text = fs.readFileSync(path.join(packageDirectoryArg, chosen), 'utf8').replace(/\r\n/g, '\n').trim();
79
+ // A stub that only points at a sibling file is not the license text.
80
+ return text.length < 200 ? null : text;
81
+ };
82
+
83
+ /**
84
+ * A copyright notice, not prose that happens to contain the word: license bodies
85
+ * wrap sentences onto lines starting with a lowercase "copyright", and the Apache
86
+ * appendix carries a bracketed placeholder.
87
+ */
88
+ const isCopyrightLine = (lineArg) => /^\s*Copyright\b/.test(lineArg)
89
+ && !/\[yyyy\]|\[name of copyright owner\]/i.test(lineArg);
90
+
91
+ const copyrightLinesOf = (...textsArg) => [...new Set(
92
+ textsArg.filter(Boolean).flatMap((text) => text.split('\n'))
93
+ .filter(isCopyrightLine)
94
+ .map((line) => line.replace(/^\s*[-*#>]*\s*/, '').trim())
95
+ .filter((line) => line.length > 4)
96
+ )];
97
+
98
+ /** A dual license is consumed under its first option; that election is recorded. */
99
+ const electedLicense = (rawArg) => {
100
+ const raw = typeof rawArg === 'string' ? rawArg : rawArg?.type ?? 'UNKNOWN';
101
+ const options = raw.split(/\s+(?:or|OR)\s+|\//).map((option) => option.replace(/[()]/g, '').trim()).filter(Boolean);
102
+ return { elected: options[0] || 'UNKNOWN', raw, options };
103
+ };
104
+
105
+ const describePackage = (packageDirectoryArg, distributionArg) => {
106
+ const manifest = JSON.parse(fs.readFileSync(path.join(packageDirectoryArg, 'package.json'), 'utf8'));
107
+ const { elected, raw, options } = electedLicense(manifest.license ?? manifest.licenses?.[0]?.type);
108
+ const licenseText = readLicenseText(packageDirectoryArg, elected);
109
+ // Apache-2.0 section 4(d): a NOTICE file travels with the distribution.
110
+ const noticeText = readIfPresent(packageDirectoryArg, (entry) => /^notice(\.(md|txt))?$/i.test(entry));
111
+ return {
112
+ name: manifest.name,
113
+ version: manifest.version,
114
+ license: elected,
115
+ licenseRaw: raw,
116
+ dualLicensed: options.length > 1,
117
+ licenseText,
118
+ noticeText,
119
+ distribution: distributionArg,
120
+ copyrights: copyrightLinesOf(licenseText, noticeText),
121
+ };
122
+ };
123
+
124
+ const sortPackages = (entriesArg) => [...entriesArg].sort((a, b) =>
125
+ a.name.localeCompare(b.name, 'en') || a.version.localeCompare(b.version, 'en'));
126
+
127
+ /** Every npm package whose code is embedded in the built bundle. */
128
+ export const collectBundledPackages = () => {
129
+ if (!fs.existsSync(bundleDirectory)) {
130
+ throw new Error('dist_bundle is missing. Run pnpm build before checking third-party notices.');
131
+ }
132
+ const directories = new Set();
133
+ for (const file of listJsFiles(bundleDirectory)) {
134
+ const content = fs.readFileSync(file, 'utf8');
135
+ for (const match of content.matchAll(/^\/\/ (node_modules\/\S+)/gm)) {
136
+ const directory = packageDirectoryOf(match[1]);
137
+ if (directory) directories.add(directory);
138
+ }
139
+ }
140
+ const packages = new Map();
141
+ for (const directory of directories) {
142
+ const absolute = path.join(projectRoot, directory);
143
+ if (!fs.existsSync(path.join(absolute, 'package.json'))) {
144
+ throw new Error(`Bundled package without a manifest: ${directory}`);
145
+ }
146
+ const entry = describePackage(absolute, 'bundled');
147
+ packages.set(`${entry.name}@${entry.version}`, entry);
148
+ }
149
+ return sortPackages(packages.values());
150
+ };
151
+
152
+ /** The pinned libraries the catalog loads into the host page at runtime. */
153
+ export const collectRuntimePackages = () => runtimeLoadedLibraries.map((library) => {
154
+ const directory = path.join(projectRoot, 'node_modules', library.name);
155
+ if (fs.existsSync(path.join(directory, 'package.json'))) {
156
+ return describePackage(directory, 'runtime');
157
+ }
158
+ if (!library.version || !library.license) {
159
+ throw new Error(`Runtime library ${library.name} is not installed and declares no version or license`);
160
+ }
161
+ return {
162
+ name: library.name, version: library.version, license: library.license, licenseRaw: library.license,
163
+ dualLicensed: false, licenseText: null, noticeText: null, distribution: 'runtime', copyrights: [],
164
+ };
165
+ });
166
+
167
+ export const collectPackages = () => [...collectBundledPackages(), ...collectRuntimePackages()];
168
+
169
+ /**
170
+ * Identical license wording is printed once, with every copyright notice it
171
+ * covers. Two texts are the same terms when their operative part matches; the
172
+ * Apache appendix is instructions for applying the license, not a term, and
173
+ * packages ship it filled in, blank, or not at all. The longest text in a group
174
+ * is printed verbatim, so nothing is summarized away.
175
+ */
176
+ const groupByLicenseText = (packagesArg) => {
177
+ const groups = new Map();
178
+ for (const entry of packagesArg) {
179
+ const normalized = (entry.licenseText ?? '')
180
+ .split('\n').filter((line) => !isCopyrightLine(line)).join('\n')
181
+ .replace(/\s+/g, ' ').trim();
182
+ const terminator = normalized.indexOf('END OF TERMS AND CONDITIONS');
183
+ const key = `${entry.license} ${terminator < 0 ? normalized : normalized.slice(0, terminator)}`;
184
+ if (!groups.has(key)) groups.set(key, { license: entry.license, text: entry.licenseText, packages: [] });
185
+ const group = groups.get(key);
186
+ group.packages.push(entry);
187
+ if ((entry.licenseText?.length ?? 0) > (group.text?.length ?? 0)) group.text = entry.licenseText;
188
+ }
189
+ return [...groups.values()].sort((a, b) =>
190
+ a.license.localeCompare(b.license, 'en') || a.packages[0].name.localeCompare(b.packages[0].name, 'en'));
191
+ };
192
+
193
+ const listEntry = (entryArg) => `- ${entryArg.name} ${entryArg.version} — `
194
+ + (entryArg.dualLicensed ? `${entryArg.licenseRaw}, used here under ${entryArg.license}` : entryArg.license);
195
+
196
+ export const renderManagedSection = (packagesArg) => {
197
+ const bundled = packagesArg.filter((entry) => entry.distribution === 'bundled');
198
+ const runtime = packagesArg.filter((entry) => entry.distribution === 'runtime');
199
+ const lines = [startMarker, '', '## Third-party libraries', ''];
200
+ lines.push('This list is generated from the built artifact and the installed packages by');
201
+ lines.push('`scripts/check-third-party-notices.mjs`. License terms follow below, with identical');
202
+ lines.push('wording reproduced once and every copyright notice it covers listed with it.', '');
203
+ lines.push('### Embedded in the bundle', '');
204
+ lines.push('`dist_bundle/bundle.js` and its chunks contain the code of these packages.', '');
205
+ for (const entry of bundled) lines.push(listEntry(entry));
206
+ lines.push('', '### Loaded at runtime', '');
207
+ lines.push('These are not embedded. The catalog pins their versions and loads them into the host');
208
+ lines.push('page on demand, so their notices are reproduced here as well.', '');
209
+ for (const entry of runtime) lines.push(listEntry(entry));
210
+ lines.push('', '## License terms', '');
211
+ for (const group of groupByLicenseText(packagesArg)) {
212
+ const names = group.packages.map((entry) => `${entry.name} ${entry.version}`).join(', ');
213
+ const copyrights = [...new Set(group.packages.flatMap((entry) => entry.copyrights))].sort();
214
+ const notices = [...new Set(group.packages.filter((entry) => entry.noticeText).map((entry) => entry.noticeText))];
215
+ lines.push(`### ${group.license} — ${group.packages.length === 1 ? group.packages[0].name : `${group.packages.length} packages`}`, '');
216
+ lines.push(`Applies to: ${names}.`, '');
217
+ if (copyrights.length) {
218
+ lines.push('Copyright notices:', '');
219
+ for (const copyright of copyrights) lines.push(`- ${copyright}`);
220
+ lines.push('');
221
+ }
222
+ for (const notice of notices) lines.push('Attribution notice:', '', '```text', notice, '```', '');
223
+ if (group.text) {
224
+ // Verbatim, as published by the package: a license text is not ours to edit.
225
+ lines.push('```text', group.text, '```', '');
226
+ } else {
227
+ lines.push(`These packages publish no license file; they are distributed under ${group.license}.`, '');
228
+ }
229
+ }
230
+ lines.push(endMarker);
231
+ return lines.join('\n');
232
+ };
233
+
234
+ export const readNotices = () => fs.readFileSync(noticesPath, 'utf8');
235
+
236
+ export const renderNotices = (currentArg, packagesArg) => {
237
+ const first = currentArg.indexOf(startMarker);
238
+ const last = currentArg.indexOf(endMarker);
239
+ if (first < 0 || last < first) {
240
+ throw new Error('third-party-notices.md is missing the bundled-notices markers');
241
+ }
242
+ return currentArg.slice(0, first) + renderManagedSection(packagesArg) + currentArg.slice(last + endMarker.length);
243
+ };
244
+
245
+ const isCli = process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url);
246
+ if (isCli) {
247
+ const packages = collectPackages();
248
+ const current = readNotices();
249
+ const generated = renderNotices(current, packages);
250
+ const counts = `${packages.filter((entry) => entry.distribution === 'bundled').length} bundled`
251
+ + ` and ${packages.filter((entry) => entry.distribution === 'runtime').length} runtime libraries`;
252
+ if (process.argv.includes('--write')) {
253
+ fs.writeFileSync(noticesPath, generated);
254
+ console.log(`[third-party-notices] wrote ${counts}`);
255
+ } else if (current !== generated) {
256
+ console.error('[third-party-notices] FAIL — the notices are stale. Run node scripts/check-third-party-notices.mjs --write');
257
+ process.exitCode = 1;
258
+ } else {
259
+ console.log(`[third-party-notices] OK — ${counts} listed`);
260
+ }
261
+ }