domma-js 0.51.14 → 0.52.1

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.
@@ -507,8 +507,12 @@ export interface CarouselOptions {
507
507
  pauseOnHover?: boolean;
508
508
  /** Loop back to start */
509
509
  loop?: boolean;
510
- /** Animation type: 'slide' or 'fade' */
511
- animation?: 'slide' | 'fade';
510
+ /** Animation type */
511
+ animation?: 'slide' | 'fade' | 'crossfade';
512
+ /** Use the shortest scaled image height, or the midpoint of shortest and tallest */
513
+ heightMode?: 'crop' | 'average';
514
+ /** Optional fixed viewport height in pixels */
515
+ height?: number;
512
516
  /** Animation duration in ms */
513
517
  animationDuration?: number;
514
518
  /** Show navigation arrows */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "domma-js",
3
- "version": "0.51.14",
3
+ "version": "0.52.1",
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",
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Complete CSS Bundle v0.51.14
2
+ * Domma Complete CSS Bundle v0.52.1
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-13T15:52:32.514Z
5
+ * Built: 2026-10-14T09:02:12.781Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.51.14
14
+ * Domma Core CSS v0.52.1
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-13T15:52:32.340Z
18
- * Commit: 9c8f7d3
17
+ * Built: 2026-10-14T09:02:12.626Z
18
+ * Commit: 21e952d
19
19
  */
20
20
 
21
21
  /**
@@ -4960,11 +4960,11 @@ body.dm-cloaked.dm-ready {
4960
4960
  ============================================ */
4961
4961
 
4962
4962
  /*!
4963
- * Domma Grid CSS v0.51.14
4963
+ * Domma Grid CSS v0.52.1
4964
4964
  * Dynamic Object Manipulation & Modeling API
4965
4965
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4966
- * Built: 2026-10-13T15:52:32.344Z
4967
- * Commit: 9c8f7d3
4966
+ * Built: 2026-10-14T09:02:12.629Z
4967
+ * Commit: 21e952d
4968
4968
  */
4969
4969
 
4970
4970
  /**
@@ -5585,11 +5585,11 @@ body.dm-cloaked.dm-ready {
5585
5585
  ============================================ */
5586
5586
 
5587
5587
  /*!
5588
- * Domma Elements CSS v0.51.14
5588
+ * Domma Elements CSS v0.52.1
5589
5589
  * Dynamic Object Manipulation & Modeling API
5590
5590
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5591
- * Built: 2026-10-13T15:52:32.349Z
5592
- * Commit: 9c8f7d3
5591
+ * Built: 2026-10-14T09:02:12.634Z
5592
+ * Commit: 21e952d
5593
5593
  */
5594
5594
 
5595
5595
  /**
@@ -9217,6 +9217,23 @@ code {
9217
9217
  display: block;
9218
9218
  }
9219
9219
 
9220
+ /* One viewport for every slide, including fade/crossfade. Images fill it
9221
+ from the top, so different aspect ratios never leave gaps below a photo. */
9222
+ .carousel-sized .carousel-track,
9223
+ .carousel-sized .carousel-slide {
9224
+ height: var(--dm-carousel-height);
9225
+ }
9226
+
9227
+ .carousel-sized .carousel-slide {
9228
+ overflow: hidden;
9229
+ }
9230
+
9231
+ .carousel-sized .carousel-slide > img {
9232
+ height: 100%;
9233
+ object-fit: cover;
9234
+ object-position: center top;
9235
+ }
9236
+
9220
9237
  /* Slide content sits IN FLOW by default, so a text-only slide has height.
9221
9238
  It used to be unconditionally absolute - a caption overlay for a background
9222
9239
  image - which meant a slide with no <img> had nothing in flow at all: the
@@ -15133,11 +15150,11 @@ a.avatar-more-person:hover .avatar-more-name {
15133
15150
  ============================================ */
15134
15151
 
15135
15152
  /*!
15136
- * Domma Themes v0.51.14
15153
+ * Domma Themes v0.52.1
15137
15154
  * Dynamic Object Manipulation & Modeling API
15138
15155
  * (c) 2026 Darryl Waterhouse & DCBW-IT
15139
- * Built: 2026-10-13T15:52:32.327Z
15140
- * Commit: 9c8f7d3
15156
+ * Built: 2026-10-14T09:02:12.614Z
15157
+ * Commit: 21e952d
15141
15158
  */
15142
15159
 
15143
15160
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Data-Focused CSS Bundle v0.51.14
2
+ * Domma Data-Focused CSS Bundle v0.52.1
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-13T15:52:32.509Z
5
+ * Built: 2026-10-14T09:02:12.777Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.51.14
14
+ * Domma Core CSS v0.52.1
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-13T15:52:32.340Z
18
- * Commit: 9c8f7d3
17
+ * Built: 2026-10-14T09:02:12.626Z
18
+ * Commit: 21e952d
19
19
  */
20
20
 
21
21
  /**
@@ -4960,11 +4960,11 @@ body.dm-cloaked.dm-ready {
4960
4960
  ============================================ */
4961
4961
 
4962
4962
  /*!
4963
- * Domma Grid CSS v0.51.14
4963
+ * Domma Grid CSS v0.52.1
4964
4964
  * Dynamic Object Manipulation & Modeling API
4965
4965
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4966
- * Built: 2026-10-13T15:52:32.344Z
4967
- * Commit: 9c8f7d3
4966
+ * Built: 2026-10-14T09:02:12.629Z
4967
+ * Commit: 21e952d
4968
4968
  */
4969
4969
 
4970
4970
  /**
@@ -5585,11 +5585,11 @@ body.dm-cloaked.dm-ready {
5585
5585
  ============================================ */
5586
5586
 
5587
5587
  /*!
5588
- * Domma Elements CSS v0.51.14
5588
+ * Domma Elements CSS v0.52.1
5589
5589
  * Dynamic Object Manipulation & Modeling API
5590
5590
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5591
- * Built: 2026-10-13T15:52:32.349Z
5592
- * Commit: 9c8f7d3
5591
+ * Built: 2026-10-14T09:02:12.634Z
5592
+ * Commit: 21e952d
5593
5593
  */
5594
5594
 
5595
5595
  /**
@@ -9217,6 +9217,23 @@ code {
9217
9217
  display: block;
9218
9218
  }
9219
9219
 
9220
+ /* One viewport for every slide, including fade/crossfade. Images fill it
9221
+ from the top, so different aspect ratios never leave gaps below a photo. */
9222
+ .carousel-sized .carousel-track,
9223
+ .carousel-sized .carousel-slide {
9224
+ height: var(--dm-carousel-height);
9225
+ }
9226
+
9227
+ .carousel-sized .carousel-slide {
9228
+ overflow: hidden;
9229
+ }
9230
+
9231
+ .carousel-sized .carousel-slide > img {
9232
+ height: 100%;
9233
+ object-fit: cover;
9234
+ object-position: center top;
9235
+ }
9236
+
9220
9237
  /* Slide content sits IN FLOW by default, so a text-only slide has height.
9221
9238
  It used to be unconditionally absolute - a caption overlay for a background
9222
9239
  image - which meant a slide with no <img> had nothing in flow at all: the
@@ -15133,11 +15150,11 @@ a.avatar-more-person:hover .avatar-more-name {
15133
15150
  ============================================ */
15134
15151
 
15135
15152
  /*!
15136
- * Domma Themes v0.51.14
15153
+ * Domma Themes v0.52.1
15137
15154
  * Dynamic Object Manipulation & Modeling API
15138
15155
  * (c) 2026 Darryl Waterhouse & DCBW-IT
15139
- * Built: 2026-10-13T15:52:32.327Z
15140
- * Commit: 9c8f7d3
15156
+ * Built: 2026-10-14T09:02:12.614Z
15157
+ * Commit: 21e952d
15141
15158
  */
15142
15159
 
15143
15160
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Essentials CSS Bundle v0.51.14
2
+ * Domma Essentials CSS Bundle v0.52.1
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-13T15:52:32.500Z
5
+ * Built: 2026-10-14T09:02:12.767Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.51.14
14
+ * Domma Core CSS v0.52.1
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-13T15:52:32.340Z
18
- * Commit: 9c8f7d3
17
+ * Built: 2026-10-14T09:02:12.626Z
18
+ * Commit: 21e952d
19
19
  */
20
20
 
21
21
  /**
@@ -4960,11 +4960,11 @@ body.dm-cloaked.dm-ready {
4960
4960
  ============================================ */
4961
4961
 
4962
4962
  /*!
4963
- * Domma Grid CSS v0.51.14
4963
+ * Domma Grid CSS v0.52.1
4964
4964
  * Dynamic Object Manipulation & Modeling API
4965
4965
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4966
- * Built: 2026-10-13T15:52:32.344Z
4967
- * Commit: 9c8f7d3
4966
+ * Built: 2026-10-14T09:02:12.629Z
4967
+ * Commit: 21e952d
4968
4968
  */
4969
4969
 
4970
4970
  /**
@@ -5585,11 +5585,11 @@ body.dm-cloaked.dm-ready {
5585
5585
  ============================================ */
5586
5586
 
5587
5587
  /*!
5588
- * Domma Elements CSS v0.51.14
5588
+ * Domma Elements CSS v0.52.1
5589
5589
  * Dynamic Object Manipulation & Modeling API
5590
5590
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5591
- * Built: 2026-10-13T15:52:32.349Z
5592
- * Commit: 9c8f7d3
5591
+ * Built: 2026-10-14T09:02:12.634Z
5592
+ * Commit: 21e952d
5593
5593
  */
5594
5594
 
5595
5595
  /**
@@ -9217,6 +9217,23 @@ code {
9217
9217
  display: block;
9218
9218
  }
9219
9219
 
9220
+ /* One viewport for every slide, including fade/crossfade. Images fill it
9221
+ from the top, so different aspect ratios never leave gaps below a photo. */
9222
+ .carousel-sized .carousel-track,
9223
+ .carousel-sized .carousel-slide {
9224
+ height: var(--dm-carousel-height);
9225
+ }
9226
+
9227
+ .carousel-sized .carousel-slide {
9228
+ overflow: hidden;
9229
+ }
9230
+
9231
+ .carousel-sized .carousel-slide > img {
9232
+ height: 100%;
9233
+ object-fit: cover;
9234
+ object-position: center top;
9235
+ }
9236
+
9220
9237
  /* Slide content sits IN FLOW by default, so a text-only slide has height.
9221
9238
  It used to be unconditionally absolute - a caption overlay for a background
9222
9239
  image - which meant a slide with no <img> had nothing in flow at all: the
@@ -15133,11 +15150,11 @@ a.avatar-more-person:hover .avatar-more-name {
15133
15150
  ============================================ */
15134
15151
 
15135
15152
  /*!
15136
- * Domma Themes v0.51.14
15153
+ * Domma Themes v0.52.1
15137
15154
  * Dynamic Object Manipulation & Modeling API
15138
15155
  * (c) 2026 Darryl Waterhouse & DCBW-IT
15139
- * Built: 2026-10-13T15:52:32.327Z
15140
- * Commit: 9c8f7d3
15156
+ * Built: 2026-10-14T09:02:12.614Z
15157
+ * Commit: 21e952d
15141
15158
  */
15142
15159
 
15143
15160
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Full CSS Bundle v0.51.14
2
+ * Domma Full CSS Bundle v0.52.1
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-13T15:52:32.506Z
5
+ * Built: 2026-10-14T09:02:12.772Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.51.14
14
+ * Domma Core CSS v0.52.1
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-13T15:52:32.340Z
18
- * Commit: 9c8f7d3
17
+ * Built: 2026-10-14T09:02:12.626Z
18
+ * Commit: 21e952d
19
19
  */
20
20
 
21
21
  /**
@@ -4960,11 +4960,11 @@ body.dm-cloaked.dm-ready {
4960
4960
  ============================================ */
4961
4961
 
4962
4962
  /*!
4963
- * Domma Grid CSS v0.51.14
4963
+ * Domma Grid CSS v0.52.1
4964
4964
  * Dynamic Object Manipulation & Modeling API
4965
4965
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4966
- * Built: 2026-10-13T15:52:32.344Z
4967
- * Commit: 9c8f7d3
4966
+ * Built: 2026-10-14T09:02:12.629Z
4967
+ * Commit: 21e952d
4968
4968
  */
4969
4969
 
4970
4970
  /**
@@ -5585,11 +5585,11 @@ body.dm-cloaked.dm-ready {
5585
5585
  ============================================ */
5586
5586
 
5587
5587
  /*!
5588
- * Domma Elements CSS v0.51.14
5588
+ * Domma Elements CSS v0.52.1
5589
5589
  * Dynamic Object Manipulation & Modeling API
5590
5590
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5591
- * Built: 2026-10-13T15:52:32.349Z
5592
- * Commit: 9c8f7d3
5591
+ * Built: 2026-10-14T09:02:12.634Z
5592
+ * Commit: 21e952d
5593
5593
  */
5594
5594
 
5595
5595
  /**
@@ -9217,6 +9217,23 @@ code {
9217
9217
  display: block;
9218
9218
  }
9219
9219
 
9220
+ /* One viewport for every slide, including fade/crossfade. Images fill it
9221
+ from the top, so different aspect ratios never leave gaps below a photo. */
9222
+ .carousel-sized .carousel-track,
9223
+ .carousel-sized .carousel-slide {
9224
+ height: var(--dm-carousel-height);
9225
+ }
9226
+
9227
+ .carousel-sized .carousel-slide {
9228
+ overflow: hidden;
9229
+ }
9230
+
9231
+ .carousel-sized .carousel-slide > img {
9232
+ height: 100%;
9233
+ object-fit: cover;
9234
+ object-position: center top;
9235
+ }
9236
+
9220
9237
  /* Slide content sits IN FLOW by default, so a text-only slide has height.
9221
9238
  It used to be unconditionally absolute - a caption overlay for a background
9222
9239
  image - which meant a slide with no <img> had nothing in flow at all: the
@@ -15133,11 +15150,11 @@ a.avatar-more-person:hover .avatar-more-name {
15133
15150
  ============================================ */
15134
15151
 
15135
15152
  /*!
15136
- * Domma Themes v0.51.14
15153
+ * Domma Themes v0.52.1
15137
15154
  * Dynamic Object Manipulation & Modeling API
15138
15155
  * (c) 2026 Darryl Waterhouse & DCBW-IT
15139
- * Built: 2026-10-13T15:52:32.327Z
15140
- * Commit: 9c8f7d3
15156
+ * Built: 2026-10-14T09:02:12.614Z
15157
+ * Commit: 21e952d
15141
15158
  */
15142
15159
 
15143
15160
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Minimal CSS Bundle v0.51.14
2
+ * Domma Minimal CSS Bundle v0.52.1
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-13T15:52:32.499Z
5
+ * Built: 2026-10-14T09:02:12.765Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.51.14
14
+ * Domma Core CSS v0.52.1
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-10-13T15:52:32.340Z
18
- * Commit: 9c8f7d3
17
+ * Built: 2026-10-14T09:02:12.626Z
18
+ * Commit: 21e952d
19
19
  */
20
20
 
21
21
  /**
@@ -4960,11 +4960,11 @@ body.dm-cloaked.dm-ready {
4960
4960
  ============================================ */
4961
4961
 
4962
4962
  /*!
4963
- * Domma Grid CSS v0.51.14
4963
+ * Domma Grid CSS v0.52.1
4964
4964
  * Dynamic Object Manipulation & Modeling API
4965
4965
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4966
- * Built: 2026-10-13T15:52:32.344Z
4967
- * Commit: 9c8f7d3
4966
+ * Built: 2026-10-14T09:02:12.629Z
4967
+ * Commit: 21e952d
4968
4968
  */
4969
4969
 
4970
4970
  /**
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Flags v0.51.14
2
+ * Domma Flags v0.52.1
3
3
  * Nation flags as inline SVG (opt-in module)
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-13T15:52:16.594Z
6
- * Commit: 9c8f7d3
5
+ * Built: 2026-10-14T09:01:58.719Z
6
+ * Commit: 21e952d
7
7
  *
8
8
  * Requires: domma.min.js
9
9
  */
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Flags v0.51.14
2
+ * Domma Flags v0.52.1
3
3
  * Nation flags as inline SVG (opt-in module)
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-13T15:52:16.594Z
6
- * Commit: 9c8f7d3
5
+ * Built: 2026-10-14T09:01:58.719Z
6
+ * Commit: 21e952d
7
7
  *
8
8
  * Requires: domma.min.js
9
9
  */
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Syntax Highlighter v0.51.14
2
+ * Domma Syntax Highlighter v0.52.1
3
3
  * Lightweight code syntax highlighting for JavaScript, HTML, and CSS
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-13T15:52:16.590Z
6
- * Commit: 9c8f7d3
5
+ * Built: 2026-10-14T09:01:58.716Z
6
+ * Commit: 21e952d
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})});
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Core CSS v0.51.14
2
+ * Domma Core CSS v0.52.1
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-13T15:52:32.340Z
6
- * Commit: 9c8f7d3
5
+ * Built: 2026-10-14T09:02:12.626Z
6
+ * Commit: 21e952d
7
7
  */
8
8
 
9
9
  /**