domma-js 0.30.1 → 0.32.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "domma-js",
3
- "version": "0.30.1",
3
+ "version": "0.32.0",
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",
@@ -79,6 +79,7 @@
79
79
  "@rollup/plugin-terser": "^0.4.4",
80
80
  "@vitest/coverage-v8": "^4.0.16",
81
81
  "cypress": "^15.8.1",
82
+ "domma-reactive": "0.1.0",
82
83
  "dompurify": "^3.4.13",
83
84
  "dotenv": "^17.2.3",
84
85
  "jsdom": "^24.1.0",
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Complete CSS Bundle v0.30.1
2
+ * Domma Complete CSS Bundle v0.32.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T15:36:25.117Z
5
+ * Built: 2026-08-04T20:44:03.495Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.30.1
14
+ * Domma Core CSS v0.32.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-08-04T15:36:24.895Z
18
- * Commit: 05ddf4e
17
+ * Built: 2026-08-04T20:44:03.276Z
18
+ * Commit: f1bc17e
19
19
  */
20
20
 
21
21
  /**
@@ -4829,11 +4829,11 @@ body.dm-cloaked.dm-ready {
4829
4829
  ============================================ */
4830
4830
 
4831
4831
  /*!
4832
- * Domma Grid CSS v0.30.1
4832
+ * Domma Grid CSS v0.32.0
4833
4833
  * Dynamic Object Manipulation & Modeling API
4834
4834
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4835
- * Built: 2026-08-04T15:36:24.900Z
4836
- * Commit: 05ddf4e
4835
+ * Built: 2026-08-04T20:44:03.281Z
4836
+ * Commit: f1bc17e
4837
4837
  */
4838
4838
 
4839
4839
  /**
@@ -5454,11 +5454,11 @@ body.dm-cloaked.dm-ready {
5454
5454
  ============================================ */
5455
5455
 
5456
5456
  /*!
5457
- * Domma Elements CSS v0.30.1
5457
+ * Domma Elements CSS v0.32.0
5458
5458
  * Dynamic Object Manipulation & Modeling API
5459
5459
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5460
- * Built: 2026-08-04T15:36:24.905Z
5461
- * Commit: 05ddf4e
5460
+ * Built: 2026-08-04T20:44:03.287Z
5461
+ * Commit: f1bc17e
5462
5462
  */
5463
5463
 
5464
5464
  /**
@@ -5493,6 +5493,10 @@ body.dm-cloaked.dm-ready {
5493
5493
  cursor: pointer;
5494
5494
  transition: all var(--dm-transition-fast);
5495
5495
  text-decoration: none;
5496
+ /* Base colour so a variant whose own colour declaration fails to resolve
5497
+ inherits a readable value rather than whatever surrounds it. Without
5498
+ this, an outline button could render white-on-white. */
5499
+ color: var(--dm-text);
5496
5500
  }
5497
5501
 
5498
5502
  .btn:focus {
@@ -5570,9 +5574,17 @@ body.dm-cloaked.dm-ready {
5570
5574
  }
5571
5575
 
5572
5576
  .btn-outline {
5573
- background-color: transparent;
5577
+ /* Explicit surface and colour rather than `transparent` plus a color-mix()
5578
+ blend. Transparent meant the contrast depended on whatever sat behind
5579
+ the button, and the blend leaned 55% toward --dm-text, so in some themes
5580
+ the label landed on top of its own background. Both vars below are
5581
+ redefined by all 32 theme blocks, so this tracks the theme and is
5582
+ always legible. */
5583
+ background-color: var(--dm-surface);
5574
5584
  border-color: var(--dm-primary);
5575
- color: var(--dm-link, color-mix(in oklab, var(--dm-primary, #0070d6), var(--dm-text, #1a1a1a) 55%));
5585
+ /* Body text colour: dark on light themes, light on dark ones. Guaranteed
5586
+ readable because it is the same colour as the surrounding prose. */
5587
+ color: var(--dm-text);
5576
5588
  }
5577
5589
 
5578
5590
  .btn-outline:hover:not(:disabled) {
@@ -6085,6 +6097,15 @@ body.dm-cloaked.dm-ready {
6085
6097
  }
6086
6098
 
6087
6099
 
6100
+ /* Wrapper that lets a wide table scroll horizontally instead of forcing the
6101
+ page to. Used in 14 places across the showcase and previously undefined, so
6102
+ those tables simply overflowed on narrow screens. */
6103
+ .table-responsive {
6104
+ width: 100%;
6105
+ overflow-x: auto;
6106
+ -webkit-overflow-scrolling: touch;
6107
+ }
6108
+
6088
6109
  .table {
6089
6110
  width: 100%;
6090
6111
  border-collapse: collapse;
@@ -13439,11 +13460,11 @@ code {
13439
13460
  ============================================ */
13440
13461
 
13441
13462
  /*!
13442
- * Domma Themes v0.30.1
13463
+ * Domma Themes v0.32.0
13443
13464
  * Dynamic Object Manipulation & Modeling API
13444
13465
  * (c) 2026 Darryl Waterhouse & DCBW-IT
13445
- * Built: 2026-08-04T15:36:24.877Z
13446
- * Commit: 05ddf4e
13466
+ * Built: 2026-08-04T20:44:03.259Z
13467
+ * Commit: f1bc17e
13447
13468
  */
13448
13469
 
13449
13470
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Data-Focused CSS Bundle v0.30.1
2
+ * Domma Data-Focused CSS Bundle v0.32.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T15:36:25.111Z
5
+ * Built: 2026-08-04T20:44:03.488Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.30.1
14
+ * Domma Core CSS v0.32.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-08-04T15:36:24.895Z
18
- * Commit: 05ddf4e
17
+ * Built: 2026-08-04T20:44:03.276Z
18
+ * Commit: f1bc17e
19
19
  */
20
20
 
21
21
  /**
@@ -4829,11 +4829,11 @@ body.dm-cloaked.dm-ready {
4829
4829
  ============================================ */
4830
4830
 
4831
4831
  /*!
4832
- * Domma Grid CSS v0.30.1
4832
+ * Domma Grid CSS v0.32.0
4833
4833
  * Dynamic Object Manipulation & Modeling API
4834
4834
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4835
- * Built: 2026-08-04T15:36:24.900Z
4836
- * Commit: 05ddf4e
4835
+ * Built: 2026-08-04T20:44:03.281Z
4836
+ * Commit: f1bc17e
4837
4837
  */
4838
4838
 
4839
4839
  /**
@@ -5454,11 +5454,11 @@ body.dm-cloaked.dm-ready {
5454
5454
  ============================================ */
5455
5455
 
5456
5456
  /*!
5457
- * Domma Elements CSS v0.30.1
5457
+ * Domma Elements CSS v0.32.0
5458
5458
  * Dynamic Object Manipulation & Modeling API
5459
5459
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5460
- * Built: 2026-08-04T15:36:24.905Z
5461
- * Commit: 05ddf4e
5460
+ * Built: 2026-08-04T20:44:03.287Z
5461
+ * Commit: f1bc17e
5462
5462
  */
5463
5463
 
5464
5464
  /**
@@ -5493,6 +5493,10 @@ body.dm-cloaked.dm-ready {
5493
5493
  cursor: pointer;
5494
5494
  transition: all var(--dm-transition-fast);
5495
5495
  text-decoration: none;
5496
+ /* Base colour so a variant whose own colour declaration fails to resolve
5497
+ inherits a readable value rather than whatever surrounds it. Without
5498
+ this, an outline button could render white-on-white. */
5499
+ color: var(--dm-text);
5496
5500
  }
5497
5501
 
5498
5502
  .btn:focus {
@@ -5570,9 +5574,17 @@ body.dm-cloaked.dm-ready {
5570
5574
  }
5571
5575
 
5572
5576
  .btn-outline {
5573
- background-color: transparent;
5577
+ /* Explicit surface and colour rather than `transparent` plus a color-mix()
5578
+ blend. Transparent meant the contrast depended on whatever sat behind
5579
+ the button, and the blend leaned 55% toward --dm-text, so in some themes
5580
+ the label landed on top of its own background. Both vars below are
5581
+ redefined by all 32 theme blocks, so this tracks the theme and is
5582
+ always legible. */
5583
+ background-color: var(--dm-surface);
5574
5584
  border-color: var(--dm-primary);
5575
- color: var(--dm-link, color-mix(in oklab, var(--dm-primary, #0070d6), var(--dm-text, #1a1a1a) 55%));
5585
+ /* Body text colour: dark on light themes, light on dark ones. Guaranteed
5586
+ readable because it is the same colour as the surrounding prose. */
5587
+ color: var(--dm-text);
5576
5588
  }
5577
5589
 
5578
5590
  .btn-outline:hover:not(:disabled) {
@@ -6085,6 +6097,15 @@ body.dm-cloaked.dm-ready {
6085
6097
  }
6086
6098
 
6087
6099
 
6100
+ /* Wrapper that lets a wide table scroll horizontally instead of forcing the
6101
+ page to. Used in 14 places across the showcase and previously undefined, so
6102
+ those tables simply overflowed on narrow screens. */
6103
+ .table-responsive {
6104
+ width: 100%;
6105
+ overflow-x: auto;
6106
+ -webkit-overflow-scrolling: touch;
6107
+ }
6108
+
6088
6109
  .table {
6089
6110
  width: 100%;
6090
6111
  border-collapse: collapse;
@@ -13439,11 +13460,11 @@ code {
13439
13460
  ============================================ */
13440
13461
 
13441
13462
  /*!
13442
- * Domma Themes v0.30.1
13463
+ * Domma Themes v0.32.0
13443
13464
  * Dynamic Object Manipulation & Modeling API
13444
13465
  * (c) 2026 Darryl Waterhouse & DCBW-IT
13445
- * Built: 2026-08-04T15:36:24.877Z
13446
- * Commit: 05ddf4e
13466
+ * Built: 2026-08-04T20:44:03.259Z
13467
+ * Commit: f1bc17e
13447
13468
  */
13448
13469
 
13449
13470
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Essentials CSS Bundle v0.30.1
2
+ * Domma Essentials CSS Bundle v0.32.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T15:36:25.097Z
5
+ * Built: 2026-08-04T20:44:03.476Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.30.1
14
+ * Domma Core CSS v0.32.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-08-04T15:36:24.895Z
18
- * Commit: 05ddf4e
17
+ * Built: 2026-08-04T20:44:03.276Z
18
+ * Commit: f1bc17e
19
19
  */
20
20
 
21
21
  /**
@@ -4829,11 +4829,11 @@ body.dm-cloaked.dm-ready {
4829
4829
  ============================================ */
4830
4830
 
4831
4831
  /*!
4832
- * Domma Grid CSS v0.30.1
4832
+ * Domma Grid CSS v0.32.0
4833
4833
  * Dynamic Object Manipulation & Modeling API
4834
4834
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4835
- * Built: 2026-08-04T15:36:24.900Z
4836
- * Commit: 05ddf4e
4835
+ * Built: 2026-08-04T20:44:03.281Z
4836
+ * Commit: f1bc17e
4837
4837
  */
4838
4838
 
4839
4839
  /**
@@ -5454,11 +5454,11 @@ body.dm-cloaked.dm-ready {
5454
5454
  ============================================ */
5455
5455
 
5456
5456
  /*!
5457
- * Domma Elements CSS v0.30.1
5457
+ * Domma Elements CSS v0.32.0
5458
5458
  * Dynamic Object Manipulation & Modeling API
5459
5459
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5460
- * Built: 2026-08-04T15:36:24.905Z
5461
- * Commit: 05ddf4e
5460
+ * Built: 2026-08-04T20:44:03.287Z
5461
+ * Commit: f1bc17e
5462
5462
  */
5463
5463
 
5464
5464
  /**
@@ -5493,6 +5493,10 @@ body.dm-cloaked.dm-ready {
5493
5493
  cursor: pointer;
5494
5494
  transition: all var(--dm-transition-fast);
5495
5495
  text-decoration: none;
5496
+ /* Base colour so a variant whose own colour declaration fails to resolve
5497
+ inherits a readable value rather than whatever surrounds it. Without
5498
+ this, an outline button could render white-on-white. */
5499
+ color: var(--dm-text);
5496
5500
  }
5497
5501
 
5498
5502
  .btn:focus {
@@ -5570,9 +5574,17 @@ body.dm-cloaked.dm-ready {
5570
5574
  }
5571
5575
 
5572
5576
  .btn-outline {
5573
- background-color: transparent;
5577
+ /* Explicit surface and colour rather than `transparent` plus a color-mix()
5578
+ blend. Transparent meant the contrast depended on whatever sat behind
5579
+ the button, and the blend leaned 55% toward --dm-text, so in some themes
5580
+ the label landed on top of its own background. Both vars below are
5581
+ redefined by all 32 theme blocks, so this tracks the theme and is
5582
+ always legible. */
5583
+ background-color: var(--dm-surface);
5574
5584
  border-color: var(--dm-primary);
5575
- color: var(--dm-link, color-mix(in oklab, var(--dm-primary, #0070d6), var(--dm-text, #1a1a1a) 55%));
5585
+ /* Body text colour: dark on light themes, light on dark ones. Guaranteed
5586
+ readable because it is the same colour as the surrounding prose. */
5587
+ color: var(--dm-text);
5576
5588
  }
5577
5589
 
5578
5590
  .btn-outline:hover:not(:disabled) {
@@ -6085,6 +6097,15 @@ body.dm-cloaked.dm-ready {
6085
6097
  }
6086
6098
 
6087
6099
 
6100
+ /* Wrapper that lets a wide table scroll horizontally instead of forcing the
6101
+ page to. Used in 14 places across the showcase and previously undefined, so
6102
+ those tables simply overflowed on narrow screens. */
6103
+ .table-responsive {
6104
+ width: 100%;
6105
+ overflow-x: auto;
6106
+ -webkit-overflow-scrolling: touch;
6107
+ }
6108
+
6088
6109
  .table {
6089
6110
  width: 100%;
6090
6111
  border-collapse: collapse;
@@ -13439,11 +13460,11 @@ code {
13439
13460
  ============================================ */
13440
13461
 
13441
13462
  /*!
13442
- * Domma Themes v0.30.1
13463
+ * Domma Themes v0.32.0
13443
13464
  * Dynamic Object Manipulation & Modeling API
13444
13465
  * (c) 2026 Darryl Waterhouse & DCBW-IT
13445
- * Built: 2026-08-04T15:36:24.877Z
13446
- * Commit: 05ddf4e
13466
+ * Built: 2026-08-04T20:44:03.259Z
13467
+ * Commit: f1bc17e
13447
13468
  */
13448
13469
 
13449
13470
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Full CSS Bundle v0.30.1
2
+ * Domma Full CSS Bundle v0.32.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T15:36:25.105Z
5
+ * Built: 2026-08-04T20:44:03.483Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.30.1
14
+ * Domma Core CSS v0.32.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-08-04T15:36:24.895Z
18
- * Commit: 05ddf4e
17
+ * Built: 2026-08-04T20:44:03.276Z
18
+ * Commit: f1bc17e
19
19
  */
20
20
 
21
21
  /**
@@ -4829,11 +4829,11 @@ body.dm-cloaked.dm-ready {
4829
4829
  ============================================ */
4830
4830
 
4831
4831
  /*!
4832
- * Domma Grid CSS v0.30.1
4832
+ * Domma Grid CSS v0.32.0
4833
4833
  * Dynamic Object Manipulation & Modeling API
4834
4834
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4835
- * Built: 2026-08-04T15:36:24.900Z
4836
- * Commit: 05ddf4e
4835
+ * Built: 2026-08-04T20:44:03.281Z
4836
+ * Commit: f1bc17e
4837
4837
  */
4838
4838
 
4839
4839
  /**
@@ -5454,11 +5454,11 @@ body.dm-cloaked.dm-ready {
5454
5454
  ============================================ */
5455
5455
 
5456
5456
  /*!
5457
- * Domma Elements CSS v0.30.1
5457
+ * Domma Elements CSS v0.32.0
5458
5458
  * Dynamic Object Manipulation & Modeling API
5459
5459
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5460
- * Built: 2026-08-04T15:36:24.905Z
5461
- * Commit: 05ddf4e
5460
+ * Built: 2026-08-04T20:44:03.287Z
5461
+ * Commit: f1bc17e
5462
5462
  */
5463
5463
 
5464
5464
  /**
@@ -5493,6 +5493,10 @@ body.dm-cloaked.dm-ready {
5493
5493
  cursor: pointer;
5494
5494
  transition: all var(--dm-transition-fast);
5495
5495
  text-decoration: none;
5496
+ /* Base colour so a variant whose own colour declaration fails to resolve
5497
+ inherits a readable value rather than whatever surrounds it. Without
5498
+ this, an outline button could render white-on-white. */
5499
+ color: var(--dm-text);
5496
5500
  }
5497
5501
 
5498
5502
  .btn:focus {
@@ -5570,9 +5574,17 @@ body.dm-cloaked.dm-ready {
5570
5574
  }
5571
5575
 
5572
5576
  .btn-outline {
5573
- background-color: transparent;
5577
+ /* Explicit surface and colour rather than `transparent` plus a color-mix()
5578
+ blend. Transparent meant the contrast depended on whatever sat behind
5579
+ the button, and the blend leaned 55% toward --dm-text, so in some themes
5580
+ the label landed on top of its own background. Both vars below are
5581
+ redefined by all 32 theme blocks, so this tracks the theme and is
5582
+ always legible. */
5583
+ background-color: var(--dm-surface);
5574
5584
  border-color: var(--dm-primary);
5575
- color: var(--dm-link, color-mix(in oklab, var(--dm-primary, #0070d6), var(--dm-text, #1a1a1a) 55%));
5585
+ /* Body text colour: dark on light themes, light on dark ones. Guaranteed
5586
+ readable because it is the same colour as the surrounding prose. */
5587
+ color: var(--dm-text);
5576
5588
  }
5577
5589
 
5578
5590
  .btn-outline:hover:not(:disabled) {
@@ -6085,6 +6097,15 @@ body.dm-cloaked.dm-ready {
6085
6097
  }
6086
6098
 
6087
6099
 
6100
+ /* Wrapper that lets a wide table scroll horizontally instead of forcing the
6101
+ page to. Used in 14 places across the showcase and previously undefined, so
6102
+ those tables simply overflowed on narrow screens. */
6103
+ .table-responsive {
6104
+ width: 100%;
6105
+ overflow-x: auto;
6106
+ -webkit-overflow-scrolling: touch;
6107
+ }
6108
+
6088
6109
  .table {
6089
6110
  width: 100%;
6090
6111
  border-collapse: collapse;
@@ -13439,11 +13460,11 @@ code {
13439
13460
  ============================================ */
13440
13461
 
13441
13462
  /*!
13442
- * Domma Themes v0.30.1
13463
+ * Domma Themes v0.32.0
13443
13464
  * Dynamic Object Manipulation & Modeling API
13444
13465
  * (c) 2026 Darryl Waterhouse & DCBW-IT
13445
- * Built: 2026-08-04T15:36:24.877Z
13446
- * Commit: 05ddf4e
13466
+ * Built: 2026-08-04T20:44:03.259Z
13467
+ * Commit: f1bc17e
13447
13468
  */
13448
13469
 
13449
13470
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Minimal CSS Bundle v0.30.1
2
+ * Domma Minimal CSS Bundle v0.32.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T15:36:25.095Z
5
+ * Built: 2026-08-04T20:44:03.474Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.30.1
14
+ * Domma Core CSS v0.32.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-08-04T15:36:24.895Z
18
- * Commit: 05ddf4e
17
+ * Built: 2026-08-04T20:44:03.276Z
18
+ * Commit: f1bc17e
19
19
  */
20
20
 
21
21
  /**
@@ -4829,11 +4829,11 @@ body.dm-cloaked.dm-ready {
4829
4829
  ============================================ */
4830
4830
 
4831
4831
  /*!
4832
- * Domma Grid CSS v0.30.1
4832
+ * Domma Grid CSS v0.32.0
4833
4833
  * Dynamic Object Manipulation & Modeling API
4834
4834
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4835
- * Built: 2026-08-04T15:36:24.900Z
4836
- * Commit: 05ddf4e
4835
+ * Built: 2026-08-04T20:44:03.281Z
4836
+ * Commit: f1bc17e
4837
4837
  */
4838
4838
 
4839
4839
  /**
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Flags v0.30.1
2
+ * Domma Flags v0.32.0
3
3
  * Nation flags as inline SVG (opt-in module)
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T15:36:12.223Z
6
- * Commit: 05ddf4e
5
+ * Built: 2026-08-04T20:43:50.435Z
6
+ * Commit: f1bc17e
7
7
  *
8
8
  * Requires: domma.min.js
9
9
  */
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Flags v0.30.1
2
+ * Domma Flags v0.32.0
3
3
  * Nation flags as inline SVG (opt-in module)
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T15:36:12.223Z
6
- * Commit: 05ddf4e
5
+ * Built: 2026-08-04T20:43:50.435Z
6
+ * Commit: f1bc17e
7
7
  *
8
8
  * Requires: domma.min.js
9
9
  */
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Syntax Highlighter v0.30.1
2
+ * Domma Syntax Highlighter v0.32.0
3
3
  * Lightweight code syntax highlighting for JavaScript, HTML, and CSS
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T15:36:12.220Z
6
- * Commit: 05ddf4e
5
+ * Built: 2026-08-04T20:43:50.432Z
6
+ * Commit: f1bc17e
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.30.1
2
+ * Domma Core CSS v0.32.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-08-04T15:36:24.895Z
6
- * Commit: 05ddf4e
5
+ * Built: 2026-08-04T20:44:03.276Z
6
+ * Commit: f1bc17e
7
7
  */
8
8
 
9
9
  /**