domma-js 0.58.0 → 0.58.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.
@@ -198,6 +198,9 @@ export class CommandPalette extends Component {
198
198
  /** Every command reachable without a request: the top level and array children. */
199
199
  _findById(id: any, list?: any[], depth?: number): any;
200
200
  _remember(command: any): void;
201
+ _saved(): any;
202
+ /** A remembered command that is not in the list: asked of resolveRecent, else the saved link. */
203
+ _restore(id: any): any;
201
204
  /** Group and order what is shown now. */
202
205
  _compute(): {
203
206
  name: any;
@@ -297,6 +300,10 @@ export type CommandPaletteOptions = {
297
300
  recentKey?: string | null;
298
301
  recentLimit?: number;
299
302
  recentLabel?: string;
303
+ /**
304
+ * Finds a remembered command that is not in `commands` (one an async `children` or `source` gave) after a reload. Without it, such a command comes back only if it was a plain link (`href`, no `action`)
305
+ */
306
+ resolveRecent?: ((id: string) => PaletteCommand | null) | null;
300
307
  /**
301
308
  * Heading for source results without their own group
302
309
  */
@@ -3,15 +3,24 @@
3
3
  * page. A layer is the nearest of:
4
4
  * - an element carrying `data-focus-trap-allow` (an opt-in for anything else);
5
5
  * - an element with `position: fixed` (toasts, popovers, context menus, palettes,
6
- * another overlay that did not trap focus);
6
+ * another overlay that did not trap focus) - unless it was already on the page and
7
+ * stacks below the trap (`floor`): a fixed header under a modal is page, not a layer;
7
8
  * - a direct child of <body> that is absolutely positioned (portalled pickers and
8
9
  * dropdowns), or that was put there after `since` was taken - something opened
9
10
  * while the trap was on top.
10
11
  * @param {Element} target
11
12
  * @param {Set<Element>} [since] - the children <body> had when the trap activated
13
+ * @param {number} [floor] - the trap's own stacking level (see `stackLevel()`); 0 = none
12
14
  * @returns {Element|null}
13
15
  */
14
- export function layerOf(target: Element, since?: Set<Element>): Element | null;
16
+ export function layerOf(target: Element, since?: Set<Element>, floor?: number): Element | null;
17
+ /**
18
+ * The highest z-index on an element or its ancestors - roughly the stacking layer it
19
+ * is drawn in. 0 when nothing on the way sets one.
20
+ * @param {Element} el
21
+ * @returns {number}
22
+ */
23
+ export function stackLevel(el: Element): number;
15
24
  /**
16
25
  * The tabbable elements in some containers, in Tab order: positive tabindex first (in
17
26
  * ascending order), then the rest in document order. Of a radio group only the checked
@@ -53,6 +62,7 @@ export class FocusTrap extends Component {
53
62
  constructor(containers: FocusTarget | Element | Array<FocusTarget | Element>, options?: FocusTrapOptions);
54
63
  _containers: HTMLElement[];
55
64
  _bodyAtStart: Set<Element>;
65
+ _floor: number;
56
66
  _pendingTab: {
57
67
  shift: any;
58
68
  fromInside: boolean;
@@ -91,6 +91,7 @@ export class RangeSlider extends Component {
91
91
  max: string;
92
92
  step: string;
93
93
  disabled: string;
94
+ value: string;
94
95
  };
95
96
  _syncInputAttrs(): void;
96
97
  /**
@@ -102,6 +103,12 @@ export class RangeSlider extends Component {
102
103
  /** Push the current values into the real inputs. */
103
104
  _writeInputs(): void;
104
105
  _writing: boolean;
106
+ /**
107
+ * A form reset returns each input to its value attribute. Inputs this component made,
108
+ * and a caller's input without one, would reset to the midpoint - give them the
109
+ * starting value.
110
+ */
111
+ _setDefaults(): void;
105
112
  /** Read the inputs back after something outside changed them. */
106
113
  _fromInputs(): void;
107
114
  _bindInputs(): void;
package/bin/domma-cli.js CHANGED
@@ -168,6 +168,13 @@ async function handleInit() {
168
168
  // Copy all templates with variable substitution
169
169
  copyTemplatesRecursive(templatesDir, process.cwd(), vars);
170
170
 
171
+ // The TypeScript declarations, generated from the source at build time (MPA only, as before)
172
+ const typesSrc = join(__dirname, '..', 'assets', 'types');
173
+ const typesDest = join(process.cwd(), 'frontend', 'types');
174
+ if (projectMode !== 'spa' && existsSync(typesSrc) && !existsSync(typesDest)) {
175
+ cpSync(typesSrc, typesDest, {recursive: true});
176
+ }
177
+
171
178
  // Copy Domma dist files to frontend/dist/domma
172
179
  const frontendDistDir = join(process.cwd(), 'frontend', 'dist', 'domma');
173
180
  console.log(`\n Copying Domma distribution files...\n`);
@@ -763,8 +770,8 @@ This will copy AI assistance files to your project:
763
770
  console.log(' ⊘ blueprints/ already exists');
764
771
  }
765
772
 
766
- // Copy types/ directory
767
- const typesDir = join(templatesDir, 'frontend', 'types');
773
+ // Copy types/ directory - the declarations generated from the source
774
+ const typesDir = join(__dirname, '..', 'assets', 'types');
768
775
  const destTypesDir = join(projectRoot, 'types');
769
776
  if (existsSync(typesDir) && !existsSync(destTypesDir)) {
770
777
  cpSync(typesDir, destTypesDir, { recursive: true });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "domma-js",
3
- "version": "0.58.0",
3
+ "version": "0.58.2",
4
4
  "description": "Dynamic Object Manipulation & Modeling API - A complete front-end toolkit.",
5
5
  "main": "public/dist/domma.min.js",
6
6
  "module": "public/dist/domma.esm.js",
@@ -69,7 +69,7 @@
69
69
  "serve:3096": "node bin/domma-cli.js serve --port 3096",
70
70
  "dev": "NODE_ENV=development npm run generate:bundles && rollup -c && node scripts/build-info.js && npm run build:metadata && npm run copy:themes && npm run copy:celebrate && npm run generate:themes && npm run build:css && npm run build:miniapps && live-server public --port=3001 --open=/index.html",
71
71
  "dev:watch": "NODE_ENV=development npm run generate:bundles && rollup -c && node scripts/build-info.js && npm run build:metadata && npm run copy:themes && npm run copy:celebrate && npm run generate:themes && npm run build:css && npm run build:miniapps && npm run watch:miniapps",
72
- "build": "npm run generate:bundles && rollup -c && node scripts/build-info.js && npm run build:metadata && npm run copy:themes && npm run copy:celebrate && npm run generate:themes && npm run build:css && npm run build:css-bundles && npm run build:archives && npm run build:kickstart-files && npm run build:miniapps && npm run build:types",
72
+ "build": "npm run generate:bundles && rollup -c && node scripts/build-info.js && npm run build:metadata && npm run copy:themes && npm run copy:celebrate && npm run generate:themes && npm run build:css && npm run build:css-bundles && npm run build:archives && npm run build:types && npm run build:kickstart-files && npm run build:miniapps",
73
73
  "build:js": "rollup -c",
74
74
  "build:types": "node scripts/build-types.mjs",
75
75
  "check:types": "node scripts/check-types.mjs",
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Complete CSS Bundle v0.58.0
2
+ * Domma Complete CSS Bundle v0.58.2
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T22:17:45.122Z
5
+ * Built: 2026-10-25T15:30:41.153Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.58.0
14
+ * Domma Core CSS v0.58.2
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-24T22:17:44.996Z
18
- * Commit: 6edd082
17
+ * Built: 2026-10-25T15:30:41.009Z
18
+ * Commit: e547926
19
19
  */
20
20
 
21
21
  /**
@@ -4971,11 +4971,11 @@ body.dm-cloaked.dm-ready {
4971
4971
  ============================================ */
4972
4972
 
4973
4973
  /*!
4974
- * Domma Grid CSS v0.58.0
4974
+ * Domma Grid CSS v0.58.2
4975
4975
  * Dynamic Object Manipulation & Modeling API
4976
4976
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4977
- * Built: 2026-10-24T22:17:44.999Z
4978
- * Commit: 6edd082
4977
+ * Built: 2026-10-25T15:30:41.013Z
4978
+ * Commit: e547926
4979
4979
  */
4980
4980
 
4981
4981
  /**
@@ -5596,11 +5596,11 @@ body.dm-cloaked.dm-ready {
5596
5596
  ============================================ */
5597
5597
 
5598
5598
  /*!
5599
- * Domma Elements CSS v0.58.0
5599
+ * Domma Elements CSS v0.58.2
5600
5600
  * Dynamic Object Manipulation & Modeling API
5601
5601
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5602
- * Built: 2026-10-24T22:17:45.003Z
5603
- * Commit: 6edd082
5602
+ * Built: 2026-10-25T15:30:41.017Z
5603
+ * Commit: e547926
5604
5604
  */
5605
5605
 
5606
5606
  /**
@@ -16359,7 +16359,7 @@ a.avatar-more-person:hover .avatar-more-name {
16359
16359
  }
16360
16360
 
16361
16361
  /* A tooltip that is always shown needs room above the track */
16362
- .dm-range-slider[data-tooltip="always"]:not([data-orientation="vertical"]) {
16362
+ .dm-range-slider[data-tooltip-mode="always"]:not([data-orientation="vertical"]) {
16363
16363
  margin-top: 1.75rem;
16364
16364
  }
16365
16365
 
@@ -16483,10 +16483,10 @@ a.avatar-more-person:hover .avatar-more-name {
16483
16483
  transform: translateY(-50%);
16484
16484
  }
16485
16485
 
16486
- .dm-range-slider[data-tooltip="always"] .dm-range-tooltip,
16487
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:hover .dm-range-tooltip,
16488
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:focus-visible .dm-range-tooltip,
16489
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb.is-active .dm-range-tooltip {
16486
+ .dm-range-slider[data-tooltip-mode="always"] .dm-range-tooltip,
16487
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb:hover .dm-range-tooltip,
16488
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb:focus-visible .dm-range-tooltip,
16489
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb.is-active .dm-range-tooltip {
16490
16490
  opacity: 1;
16491
16491
  visibility: visible;
16492
16492
  }
@@ -16613,11 +16613,11 @@ a.avatar-more-person:hover .avatar-more-name {
16613
16613
  ============================================ */
16614
16614
 
16615
16615
  /*!
16616
- * Domma Themes v0.58.0
16616
+ * Domma Themes v0.58.2
16617
16617
  * Dynamic Object Manipulation & Modeling API
16618
16618
  * (c) 2026 Darryl Waterhouse & DCBW-IT
16619
- * Built: 2026-10-24T22:17:44.986Z
16620
- * Commit: 6edd082
16619
+ * Built: 2026-10-25T15:30:40.998Z
16620
+ * Commit: e547926
16621
16621
  */
16622
16622
 
16623
16623
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Data-Focused CSS Bundle v0.58.0
2
+ * Domma Data-Focused CSS Bundle v0.58.2
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T22:17:45.120Z
5
+ * Built: 2026-10-25T15:30:41.150Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.58.0
14
+ * Domma Core CSS v0.58.2
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-24T22:17:44.996Z
18
- * Commit: 6edd082
17
+ * Built: 2026-10-25T15:30:41.009Z
18
+ * Commit: e547926
19
19
  */
20
20
 
21
21
  /**
@@ -4971,11 +4971,11 @@ body.dm-cloaked.dm-ready {
4971
4971
  ============================================ */
4972
4972
 
4973
4973
  /*!
4974
- * Domma Grid CSS v0.58.0
4974
+ * Domma Grid CSS v0.58.2
4975
4975
  * Dynamic Object Manipulation & Modeling API
4976
4976
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4977
- * Built: 2026-10-24T22:17:44.999Z
4978
- * Commit: 6edd082
4977
+ * Built: 2026-10-25T15:30:41.013Z
4978
+ * Commit: e547926
4979
4979
  */
4980
4980
 
4981
4981
  /**
@@ -5596,11 +5596,11 @@ body.dm-cloaked.dm-ready {
5596
5596
  ============================================ */
5597
5597
 
5598
5598
  /*!
5599
- * Domma Elements CSS v0.58.0
5599
+ * Domma Elements CSS v0.58.2
5600
5600
  * Dynamic Object Manipulation & Modeling API
5601
5601
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5602
- * Built: 2026-10-24T22:17:45.003Z
5603
- * Commit: 6edd082
5602
+ * Built: 2026-10-25T15:30:41.017Z
5603
+ * Commit: e547926
5604
5604
  */
5605
5605
 
5606
5606
  /**
@@ -16359,7 +16359,7 @@ a.avatar-more-person:hover .avatar-more-name {
16359
16359
  }
16360
16360
 
16361
16361
  /* A tooltip that is always shown needs room above the track */
16362
- .dm-range-slider[data-tooltip="always"]:not([data-orientation="vertical"]) {
16362
+ .dm-range-slider[data-tooltip-mode="always"]:not([data-orientation="vertical"]) {
16363
16363
  margin-top: 1.75rem;
16364
16364
  }
16365
16365
 
@@ -16483,10 +16483,10 @@ a.avatar-more-person:hover .avatar-more-name {
16483
16483
  transform: translateY(-50%);
16484
16484
  }
16485
16485
 
16486
- .dm-range-slider[data-tooltip="always"] .dm-range-tooltip,
16487
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:hover .dm-range-tooltip,
16488
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:focus-visible .dm-range-tooltip,
16489
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb.is-active .dm-range-tooltip {
16486
+ .dm-range-slider[data-tooltip-mode="always"] .dm-range-tooltip,
16487
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb:hover .dm-range-tooltip,
16488
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb:focus-visible .dm-range-tooltip,
16489
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb.is-active .dm-range-tooltip {
16490
16490
  opacity: 1;
16491
16491
  visibility: visible;
16492
16492
  }
@@ -16613,11 +16613,11 @@ a.avatar-more-person:hover .avatar-more-name {
16613
16613
  ============================================ */
16614
16614
 
16615
16615
  /*!
16616
- * Domma Themes v0.58.0
16616
+ * Domma Themes v0.58.2
16617
16617
  * Dynamic Object Manipulation & Modeling API
16618
16618
  * (c) 2026 Darryl Waterhouse & DCBW-IT
16619
- * Built: 2026-10-24T22:17:44.986Z
16620
- * Commit: 6edd082
16619
+ * Built: 2026-10-25T15:30:40.998Z
16620
+ * Commit: e547926
16621
16621
  */
16622
16622
 
16623
16623
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Essentials CSS Bundle v0.58.0
2
+ * Domma Essentials CSS Bundle v0.58.2
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T22:17:45.113Z
5
+ * Built: 2026-10-25T15:30:41.142Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.58.0
14
+ * Domma Core CSS v0.58.2
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-24T22:17:44.996Z
18
- * Commit: 6edd082
17
+ * Built: 2026-10-25T15:30:41.009Z
18
+ * Commit: e547926
19
19
  */
20
20
 
21
21
  /**
@@ -4971,11 +4971,11 @@ body.dm-cloaked.dm-ready {
4971
4971
  ============================================ */
4972
4972
 
4973
4973
  /*!
4974
- * Domma Grid CSS v0.58.0
4974
+ * Domma Grid CSS v0.58.2
4975
4975
  * Dynamic Object Manipulation & Modeling API
4976
4976
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4977
- * Built: 2026-10-24T22:17:44.999Z
4978
- * Commit: 6edd082
4977
+ * Built: 2026-10-25T15:30:41.013Z
4978
+ * Commit: e547926
4979
4979
  */
4980
4980
 
4981
4981
  /**
@@ -5596,11 +5596,11 @@ body.dm-cloaked.dm-ready {
5596
5596
  ============================================ */
5597
5597
 
5598
5598
  /*!
5599
- * Domma Elements CSS v0.58.0
5599
+ * Domma Elements CSS v0.58.2
5600
5600
  * Dynamic Object Manipulation & Modeling API
5601
5601
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5602
- * Built: 2026-10-24T22:17:45.003Z
5603
- * Commit: 6edd082
5602
+ * Built: 2026-10-25T15:30:41.017Z
5603
+ * Commit: e547926
5604
5604
  */
5605
5605
 
5606
5606
  /**
@@ -16359,7 +16359,7 @@ a.avatar-more-person:hover .avatar-more-name {
16359
16359
  }
16360
16360
 
16361
16361
  /* A tooltip that is always shown needs room above the track */
16362
- .dm-range-slider[data-tooltip="always"]:not([data-orientation="vertical"]) {
16362
+ .dm-range-slider[data-tooltip-mode="always"]:not([data-orientation="vertical"]) {
16363
16363
  margin-top: 1.75rem;
16364
16364
  }
16365
16365
 
@@ -16483,10 +16483,10 @@ a.avatar-more-person:hover .avatar-more-name {
16483
16483
  transform: translateY(-50%);
16484
16484
  }
16485
16485
 
16486
- .dm-range-slider[data-tooltip="always"] .dm-range-tooltip,
16487
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:hover .dm-range-tooltip,
16488
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:focus-visible .dm-range-tooltip,
16489
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb.is-active .dm-range-tooltip {
16486
+ .dm-range-slider[data-tooltip-mode="always"] .dm-range-tooltip,
16487
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb:hover .dm-range-tooltip,
16488
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb:focus-visible .dm-range-tooltip,
16489
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb.is-active .dm-range-tooltip {
16490
16490
  opacity: 1;
16491
16491
  visibility: visible;
16492
16492
  }
@@ -16613,11 +16613,11 @@ a.avatar-more-person:hover .avatar-more-name {
16613
16613
  ============================================ */
16614
16614
 
16615
16615
  /*!
16616
- * Domma Themes v0.58.0
16616
+ * Domma Themes v0.58.2
16617
16617
  * Dynamic Object Manipulation & Modeling API
16618
16618
  * (c) 2026 Darryl Waterhouse & DCBW-IT
16619
- * Built: 2026-10-24T22:17:44.986Z
16620
- * Commit: 6edd082
16619
+ * Built: 2026-10-25T15:30:40.998Z
16620
+ * Commit: e547926
16621
16621
  */
16622
16622
 
16623
16623
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Full CSS Bundle v0.58.0
2
+ * Domma Full CSS Bundle v0.58.2
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T22:17:45.117Z
5
+ * Built: 2026-10-25T15:30:41.146Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.58.0
14
+ * Domma Core CSS v0.58.2
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-24T22:17:44.996Z
18
- * Commit: 6edd082
17
+ * Built: 2026-10-25T15:30:41.009Z
18
+ * Commit: e547926
19
19
  */
20
20
 
21
21
  /**
@@ -4971,11 +4971,11 @@ body.dm-cloaked.dm-ready {
4971
4971
  ============================================ */
4972
4972
 
4973
4973
  /*!
4974
- * Domma Grid CSS v0.58.0
4974
+ * Domma Grid CSS v0.58.2
4975
4975
  * Dynamic Object Manipulation & Modeling API
4976
4976
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4977
- * Built: 2026-10-24T22:17:44.999Z
4978
- * Commit: 6edd082
4977
+ * Built: 2026-10-25T15:30:41.013Z
4978
+ * Commit: e547926
4979
4979
  */
4980
4980
 
4981
4981
  /**
@@ -5596,11 +5596,11 @@ body.dm-cloaked.dm-ready {
5596
5596
  ============================================ */
5597
5597
 
5598
5598
  /*!
5599
- * Domma Elements CSS v0.58.0
5599
+ * Domma Elements CSS v0.58.2
5600
5600
  * Dynamic Object Manipulation & Modeling API
5601
5601
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5602
- * Built: 2026-10-24T22:17:45.003Z
5603
- * Commit: 6edd082
5602
+ * Built: 2026-10-25T15:30:41.017Z
5603
+ * Commit: e547926
5604
5604
  */
5605
5605
 
5606
5606
  /**
@@ -16359,7 +16359,7 @@ a.avatar-more-person:hover .avatar-more-name {
16359
16359
  }
16360
16360
 
16361
16361
  /* A tooltip that is always shown needs room above the track */
16362
- .dm-range-slider[data-tooltip="always"]:not([data-orientation="vertical"]) {
16362
+ .dm-range-slider[data-tooltip-mode="always"]:not([data-orientation="vertical"]) {
16363
16363
  margin-top: 1.75rem;
16364
16364
  }
16365
16365
 
@@ -16483,10 +16483,10 @@ a.avatar-more-person:hover .avatar-more-name {
16483
16483
  transform: translateY(-50%);
16484
16484
  }
16485
16485
 
16486
- .dm-range-slider[data-tooltip="always"] .dm-range-tooltip,
16487
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:hover .dm-range-tooltip,
16488
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:focus-visible .dm-range-tooltip,
16489
- .dm-range-slider[data-tooltip="hover"] .dm-range-thumb.is-active .dm-range-tooltip {
16486
+ .dm-range-slider[data-tooltip-mode="always"] .dm-range-tooltip,
16487
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb:hover .dm-range-tooltip,
16488
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb:focus-visible .dm-range-tooltip,
16489
+ .dm-range-slider[data-tooltip-mode="hover"] .dm-range-thumb.is-active .dm-range-tooltip {
16490
16490
  opacity: 1;
16491
16491
  visibility: visible;
16492
16492
  }
@@ -16613,11 +16613,11 @@ a.avatar-more-person:hover .avatar-more-name {
16613
16613
  ============================================ */
16614
16614
 
16615
16615
  /*!
16616
- * Domma Themes v0.58.0
16616
+ * Domma Themes v0.58.2
16617
16617
  * Dynamic Object Manipulation & Modeling API
16618
16618
  * (c) 2026 Darryl Waterhouse & DCBW-IT
16619
- * Built: 2026-10-24T22:17:44.986Z
16620
- * Commit: 6edd082
16619
+ * Built: 2026-10-25T15:30:40.998Z
16620
+ * Commit: e547926
16621
16621
  */
16622
16622
 
16623
16623
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Minimal CSS Bundle v0.58.0
2
+ * Domma Minimal CSS Bundle v0.58.2
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T22:17:45.112Z
5
+ * Built: 2026-10-25T15:30:41.141Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.58.0
14
+ * Domma Core CSS v0.58.2
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-24T22:17:44.996Z
18
- * Commit: 6edd082
17
+ * Built: 2026-10-25T15:30:41.009Z
18
+ * Commit: e547926
19
19
  */
20
20
 
21
21
  /**
@@ -4971,11 +4971,11 @@ body.dm-cloaked.dm-ready {
4971
4971
  ============================================ */
4972
4972
 
4973
4973
  /*!
4974
- * Domma Grid CSS v0.58.0
4974
+ * Domma Grid CSS v0.58.2
4975
4975
  * Dynamic Object Manipulation & Modeling API
4976
4976
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4977
- * Built: 2026-10-24T22:17:44.999Z
4978
- * Commit: 6edd082
4977
+ * Built: 2026-10-25T15:30:41.013Z
4978
+ * Commit: e547926
4979
4979
  */
4980
4980
 
4981
4981
  /**
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Flags v0.58.0
2
+ * Domma Flags v0.58.2
3
3
  * Nation flags as inline SVG (opt-in module)
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T22:17:31.236Z
6
- * Commit: 6edd082
5
+ * Built: 2026-10-25T15:30:25.854Z
6
+ * Commit: e547926
7
7
  *
8
8
  * Requires: domma.min.js
9
9
  */
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Flags v0.58.0
2
+ * Domma Flags v0.58.2
3
3
  * Nation flags as inline SVG (opt-in module)
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T22:17:31.236Z
6
- * Commit: 6edd082
5
+ * Built: 2026-10-25T15:30:25.854Z
6
+ * Commit: e547926
7
7
  *
8
8
  * Requires: domma.min.js
9
9
  */
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Syntax Highlighter v0.58.0
2
+ * Domma Syntax Highlighter v0.58.2
3
3
  * Lightweight code syntax highlighting for JavaScript, HTML, and CSS
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T22:17:31.233Z
6
- * Commit: 6edd082
5
+ * Built: 2026-10-25T15:30:25.851Z
6
+ * Commit: e547926
7
7
  */
8
8
  !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).DommaSyntax={})}(this,function(t){"use strict";const e={javascript:[{type:"comment",pattern:/\/\*[\s\S]*?\*\//g},{type:"comment",pattern:/\/\/.*/g},{type:"template-string",pattern:/`(?:\\.|[^`\\])*`/g},{type:"string",pattern:/"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'/g},{type:"keyword",pattern:/\b(const|let|var|function|return|if|else|for|while|do|break|continue|switch|case|default|try|catch|finally|throw|async|await|class|extends|static|new|this|super|import|export|from|as|default|yield|typeof|instanceof|in|of|delete|void)\b/g},{type:"boolean",pattern:/\b(true|false|null|undefined|NaN|Infinity)\b/g},{type:"number",pattern:/\b\d+\.?\d*([eE][+-]?\d+)?\b/g},{type:"function",pattern:/\b([a-zA-Z_$][\w$]*)\s*(?=\()/g},{type:"class-name",pattern:/\b[A-Z][\w$]*\b/g},{type:"operator",pattern:/[+\-*/%=<>!&|^~?:]+|===|!==|==|!=|<=|>=|&&|\|\||<<|>>|>>>/g},{type:"punctuation",pattern:/[{}[\]();,.]/g}],html:[{type:"comment",pattern:/<!--[\s\S]*?-->/g},{type:"doctype",pattern:/<!DOCTYPE[^>]*>/gi},{type:"tag-open",pattern:/<\/?[a-zA-Z][\w-]*/g},{type:"tag-close",pattern:/\/?>/g},{type:"attr-name",pattern:/\s+[a-zA-Z:@][\w:.-]*(?=\s*=)/g},{type:"attr-value",pattern:/=\s*"[^"]*"|=\s*'[^']*'/g},{type:"entity",pattern:/&[#\w]+;/g}],css:[{type:"comment",pattern:/\/\*[\s\S]*?\*\//g},{type:"at-rule",pattern:/@[\w-]+/g},{type:"selector",pattern:/[.#]?[a-zA-Z][\w-]*(?=\s*[{,])/g},{type:"property",pattern:/\b[\w-]+(?=\s*:)/g},{type:"string",pattern:/"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'/g},{type:"function",pattern:/\b[\w-]+(?=\()/g},{type:"important",pattern:/!important\b/g},{type:"number",pattern:/\b\d+\.?\d*(px|em|rem|%|vh|vw|pt|cm|mm|in|pc|ex|ch|vmin|vmax|fr)?\b/g},{type:"color",pattern:/#[\da-fA-F]{3,8}\b/g},{type:"punctuation",pattern:/[{}:;,()]/g}]};function n(t){const e={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};return t.replace(/[&<>"']/g,t=>e[t])}class a{constructor(){this.config={autoDetect:!0,preserveOriginal:!0,selector:".code-block",showLanguageBadge:!1,languagePrefix:"language-"}}highlight(t,a=null){const r="string"==typeof t?document.querySelector(t):t;if(!r||r.hasAttribute("data-syntax-highlighted"))return!1;if(!a&&this.config.autoDetect){const t=Array.from(r.classList).find(t=>t.startsWith(this.config.languagePrefix));t&&(a=t.substring(this.config.languagePrefix.length))}if(!a||!e[a])return!1;const o=r.textContent||"";this.config.preserveOriginal&&r.setAttribute("data-original-code",o);const i=function(t,a){const r=e[a];if(!r)return n(t);const o=[];for(const{type:e,pattern:n}of r){if("html"===a&&"entity"===e)continue;let r;for(n.lastIndex=0;null!==(r=n.exec(t));)o.push({start:r.index,end:r.index+r[0].length,text:r[0],type:e})}o.sort((t,e)=>t.start-e.start);const i=[];let s=0;for(const t of o)t.start>=s&&(i.push(t),s=t.end);let c="",p=0;for(const e of i)e.start>p&&(c+=n(t.substring(p,e.start))),c+=`<span class="syntax-${e.type}">${n(e.text)}</span>`,p=e.end;return p<t.length&&(c+=n(t.substring(p))),c}(o,a);return r.innerHTML=i,r.setAttribute("data-syntax-highlighted","true"),r.setAttribute("data-language",a),this.config.showLanguageBadge&&this.addLanguageBadge(r,a),!0}scan(t={}){const e=t.selector||this.config.selector,n=document.querySelectorAll(e);let a=0;return n.forEach(e=>{this.highlight(e,t.language||null)&&(this.addCopyButton(e),a++)}),a}register(t,n){t&&Array.isArray(n)?e[t]=n:console.error("SyntaxHighlighter: Invalid language registration")}configure(t){return t?(Object.assign(this.config,t),this.config):{...this.config}}addLanguageBadge(t,e){if(t.querySelector(".syntax-language-badge"))return;const n=document.createElement("div");n.className="syntax-language-badge",n.textContent=e.toUpperCase(),t.style.position="relative",t.insertBefore(n,t.firstChild)}getLanguages(){return Object.keys(e)}isLanguageSupported(t){return t in e}addCopyButton(t){if(t.parentElement&&t.parentElement.classList.contains("code-block-wrapper"))return;const e=document.createElement("div");e.className="code-block-wrapper";const n=document.createElement("button");n.className="code-block-copy",n.setAttribute("aria-label","Copy code to clipboard"),n.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>',n.addEventListener("click",async()=>{const e=t.getAttribute("data-original-code")||t.textContent;try{if(navigator.clipboard&&navigator.clipboard.writeText)await navigator.clipboard.writeText(e);else{const t=document.createElement("textarea");t.value=e,t.style.position="fixed",t.style.opacity="0",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}n.classList.add("copied"),n.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg>',setTimeout(()=>{n.classList.remove("copied"),n.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"></rect><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"></path></svg>'},2e3)}catch(t){console.error("Failed to copy code:",t)}}),t.parentNode.insertBefore(e,t),e.appendChild(t),e.appendChild(n)}}const r=new a;"undefined"!=typeof document&&("loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{r.scan()}):setTimeout(()=>r.scan(),0)),"undefined"!=typeof window&&(window.Domma&&(window.Domma.syntax=r),window.DommaSyntax=r),t.LANGUAGES=e,t.SyntaxHighlighter=a,t.default=r,t.syntax=r,Object.defineProperty(t,"__esModule",{value:!0})});
9
9
  //# sourceMappingURL=domma-syntax.min.js.map
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Core CSS v0.58.0
2
+ * Domma Core CSS v0.58.2
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T22:17:44.996Z
6
- * Commit: 6edd082
5
+ * Built: 2026-10-25T15:30:41.009Z
6
+ * Commit: e547926
7
7
  */
8
8
 
9
9
  /**