domma-js 0.39.2 → 0.41.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/LICENSE +12 -671
- package/assets/types/config.d.ts +1 -1
- package/assets/types/flags.d.ts +1 -1
- package/assets/types/index.d.ts +1 -1
- package/assets/types/models.d.ts +1 -1
- package/package.json +2 -2
- package/public/dist/bundles/domma-complete.css +147 -137
- package/public/dist/bundles/domma-data-focused.css +147 -137
- package/public/dist/bundles/domma-essentials.css +147 -137
- package/public/dist/bundles/domma-full.css +147 -137
- package/public/dist/bundles/domma-minimal.css +12 -12
- package/public/dist/domma-flags.esm.js +3 -3
- package/public/dist/domma-flags.min.js +3 -3
- package/public/dist/domma-syntax.min.js +3 -3
- package/public/dist/domma.css +6 -6
- package/public/dist/domma.esm.js +4 -4
- package/public/dist/domma.min.js +4 -4
- package/public/dist/elements.css +109 -99
- package/public/dist/grid.css +4 -4
- package/public/dist/syntax.css +3 -3
- package/public/dist/themes/domma-themes.css +26 -26
- package/templates/kickstart-spa/.claude/memory/MEMORY.md +5 -5
- package/templates/kickstart-spa/CLAUDE.md +1 -1
- package/templates/kickstart-spa/README.md +1 -1
package/public/dist/elements.css
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Domma Elements CSS v0.
|
|
2
|
+
* Domma Elements CSS v0.41.0
|
|
3
3
|
* Dynamic Object Manipulation & Modeling API
|
|
4
4
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
5
|
-
* Built: 2026-08-
|
|
6
|
-
* Commit:
|
|
5
|
+
* Built: 2026-08-22T13:41:49.303Z
|
|
6
|
+
* Commit: 5d8b7e1
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -265,8 +265,13 @@
|
|
|
265
265
|
border-color: var(--dm-primary);
|
|
266
266
|
}
|
|
267
267
|
|
|
268
|
+
/* No --dm-primary-text here. That token is the foreground for text drawn ON a
|
|
269
|
+
primary fill, which is what the header and footer above do. The body has no
|
|
270
|
+
fill - it sits on the card's own surface - so borrowing the fill foreground
|
|
271
|
+
put near-black text (#1a1a1a in the dark themes) on a dark surface, at 1.19
|
|
272
|
+
contrast. Inheriting --dm-text from the card is the correct behaviour. */
|
|
268
273
|
.card-primary .card-body {
|
|
269
|
-
color: var(--dm-
|
|
274
|
+
color: var(--dm-text);
|
|
270
275
|
}
|
|
271
276
|
|
|
272
277
|
.card-primary .card-footer {
|
|
@@ -1291,7 +1296,7 @@ textarea:not([class])::placeholder {
|
|
|
1291
1296
|
NUMBER BADGE
|
|
1292
1297
|
============================================ */
|
|
1293
1298
|
|
|
1294
|
-
/* Standalone number badge
|
|
1299
|
+
/* Standalone number badge - circular for single digits, pill for multi-digit */
|
|
1295
1300
|
.badge-number {
|
|
1296
1301
|
display: inline-flex;
|
|
1297
1302
|
align-items: center;
|
|
@@ -1308,7 +1313,7 @@ textarea:not([class])::placeholder {
|
|
|
1308
1313
|
color: var(--dm-danger-text, var(--dm-white));
|
|
1309
1314
|
}
|
|
1310
1315
|
|
|
1311
|
-
/* Dot indicator
|
|
1316
|
+
/* Dot indicator - small coloured presence circle */
|
|
1312
1317
|
.badge-dot {
|
|
1313
1318
|
display: inline-block;
|
|
1314
1319
|
width: 0.5rem;
|
|
@@ -1323,7 +1328,7 @@ textarea:not([class])::placeholder {
|
|
|
1323
1328
|
display: inline-flex;
|
|
1324
1329
|
}
|
|
1325
1330
|
|
|
1326
|
-
/* Counter badge
|
|
1331
|
+
/* Counter badge - overlapping corner with border ring (classic app-notification style) */
|
|
1327
1332
|
.badge-counter {
|
|
1328
1333
|
position: absolute;
|
|
1329
1334
|
top: -6px;
|
|
@@ -1345,7 +1350,7 @@ textarea:not([class])::placeholder {
|
|
|
1345
1350
|
color: var(--dm-danger-text, var(--dm-white));
|
|
1346
1351
|
}
|
|
1347
1352
|
|
|
1348
|
-
/* Dot variant of counter
|
|
1353
|
+
/* Dot variant of counter - smaller, no text */
|
|
1349
1354
|
.badge-counter.badge-dot {
|
|
1350
1355
|
top: -2px;
|
|
1351
1356
|
right: -2px;
|
|
@@ -1399,7 +1404,7 @@ textarea:not([class])::placeholder {
|
|
|
1399
1404
|
LIST GROUP
|
|
1400
1405
|
============================================ */
|
|
1401
1406
|
|
|
1402
|
-
/* Container
|
|
1407
|
+
/* Container - vertical flex column with rounded corners and clipped overflow */
|
|
1403
1408
|
.list-group {
|
|
1404
1409
|
display: flex;
|
|
1405
1410
|
flex-direction: column;
|
|
@@ -1409,7 +1414,7 @@ textarea:not([class])::placeholder {
|
|
|
1409
1414
|
background-color: var(--dm-surface);
|
|
1410
1415
|
}
|
|
1411
1416
|
|
|
1412
|
-
/* Each item
|
|
1417
|
+
/* Each item - flex row, vertically centred, with a bottom separator */
|
|
1413
1418
|
.list-group-item {
|
|
1414
1419
|
display: flex;
|
|
1415
1420
|
align-items: center;
|
|
@@ -1427,7 +1432,7 @@ textarea:not([class])::placeholder {
|
|
|
1427
1432
|
border-bottom: none;
|
|
1428
1433
|
}
|
|
1429
1434
|
|
|
1430
|
-
/* Flush modifier
|
|
1435
|
+
/* Flush modifier - strip outer border and radius for embedding inside cards */
|
|
1431
1436
|
.list-group-flush {
|
|
1432
1437
|
border: none;
|
|
1433
1438
|
border-radius: 0;
|
|
@@ -1449,7 +1454,7 @@ textarea:not([class])::placeholder {
|
|
|
1449
1454
|
font-size: var(--dm-font-size-base);
|
|
1450
1455
|
}
|
|
1451
1456
|
|
|
1452
|
-
/* Actionable items
|
|
1457
|
+
/* Actionable items - pointer cursor and hover highlight */
|
|
1453
1458
|
.list-group-item-action {
|
|
1454
1459
|
cursor: pointer;
|
|
1455
1460
|
user-select: none;
|
|
@@ -1473,7 +1478,7 @@ textarea:not([class])::placeholder {
|
|
|
1473
1478
|
justify-content: center;
|
|
1474
1479
|
}
|
|
1475
1480
|
|
|
1476
|
-
/* Central text wrapper
|
|
1481
|
+
/* Central text wrapper - grows to fill available space */
|
|
1477
1482
|
.list-group-item-content {
|
|
1478
1483
|
flex-grow: 1;
|
|
1479
1484
|
min-width: 0;
|
|
@@ -1501,7 +1506,7 @@ textarea:not([class])::placeholder {
|
|
|
1501
1506
|
text-overflow: ellipsis;
|
|
1502
1507
|
}
|
|
1503
1508
|
|
|
1504
|
-
/* Right-side trailing area
|
|
1509
|
+
/* Right-side trailing area - badges, timestamps, actions */
|
|
1505
1510
|
.list-group-item-trailing {
|
|
1506
1511
|
flex-shrink: 0;
|
|
1507
1512
|
margin-left: auto;
|
|
@@ -1511,7 +1516,7 @@ textarea:not([class])::placeholder {
|
|
|
1511
1516
|
gap: var(--dm-space-2);
|
|
1512
1517
|
}
|
|
1513
1518
|
|
|
1514
|
-
/* Active/selected state
|
|
1519
|
+
/* Active/selected state - accent background takes precedence over colour variants */
|
|
1515
1520
|
.list-group-item.active {
|
|
1516
1521
|
background-color: var(--dm-primary);
|
|
1517
1522
|
color: var(--dm-primary-text, var(--dm-white));
|
|
@@ -1523,7 +1528,7 @@ textarea:not([class])::placeholder {
|
|
|
1523
1528
|
color: rgba(255, 255, 255, 0.75);
|
|
1524
1529
|
}
|
|
1525
1530
|
|
|
1526
|
-
/* Disabled state
|
|
1531
|
+
/* Disabled state - dimmed and non-interactive */
|
|
1527
1532
|
.list-group-item.disabled {
|
|
1528
1533
|
opacity: 0.7;
|
|
1529
1534
|
cursor: not-allowed;
|
|
@@ -1603,7 +1608,7 @@ textarea:not([class])::placeholder {
|
|
|
1603
1608
|
border-top-color: var(--dm-border);
|
|
1604
1609
|
}
|
|
1605
1610
|
|
|
1606
|
-
/* Numbered list
|
|
1611
|
+
/* Numbered list - CSS counter prepended to each item */
|
|
1607
1612
|
.list-group-numbered {
|
|
1608
1613
|
list-style-type: none;
|
|
1609
1614
|
counter-reset: list-group-counter;
|
|
@@ -1619,7 +1624,7 @@ textarea:not([class])::placeholder {
|
|
|
1619
1624
|
color: var(--dm-text-muted);
|
|
1620
1625
|
}
|
|
1621
1626
|
|
|
1622
|
-
/* Horizontal layout
|
|
1627
|
+
/* Horizontal layout - items arranged in a row */
|
|
1623
1628
|
.list-group-horizontal {
|
|
1624
1629
|
flex-direction: row;
|
|
1625
1630
|
}
|
|
@@ -2181,10 +2186,25 @@ code {
|
|
|
2181
2186
|
border-radius: 0;
|
|
2182
2187
|
}
|
|
2183
2188
|
|
|
2189
|
+
/* The active link used to take --dm-primary as its text colour. --dm-primary is
|
|
2190
|
+
a mid-tone in several theme families, so on the navbar surface it measured as
|
|
2191
|
+
low as 1.72 (lemon-light). Primary stays as the accent - the tinted pill and
|
|
2192
|
+
the underline - but the text itself uses the one token guaranteed to read on
|
|
2193
|
+
this surface. */
|
|
2194
|
+
/* The active link used to take --dm-primary as its text colour. --dm-primary is
|
|
2195
|
+
a mid-tone in several theme families, so on the navbar surface it measured as
|
|
2196
|
+
low as 1.72 (lemon-light).
|
|
2197
|
+
|
|
2198
|
+
The affordance is now the primary underline plus the weight, and the text
|
|
2199
|
+
uses the one token guaranteed to read on this surface. Deliberately no pill
|
|
2200
|
+
background: a tint of --dm-primary shifts the bar toward the text colour in
|
|
2201
|
+
the themes where primary is light, which cost ~2 points of contrast on the
|
|
2202
|
+
already-tightest combination (dark theme + .navbar-light). Underline only
|
|
2203
|
+
means the active state can never read worse than the brand beside it. */
|
|
2184
2204
|
.navbar-link.active {
|
|
2185
|
-
color: var(--dm-
|
|
2205
|
+
color: var(--dm-navbar-text);
|
|
2186
2206
|
font-weight: 500;
|
|
2187
|
-
|
|
2207
|
+
box-shadow: inset 0 -2px 0 0 var(--dm-primary);
|
|
2188
2208
|
}
|
|
2189
2209
|
|
|
2190
2210
|
.nav-version {
|
|
@@ -2192,78 +2212,77 @@ code {
|
|
|
2192
2212
|
color: var(--dm-text-secondary, #eee);
|
|
2193
2213
|
}
|
|
2194
2214
|
|
|
2195
|
-
/*
|
|
2196
|
-
|
|
2197
|
-
.navbar-light {
|
|
2198
|
-
background-color: var(--dm-surface);
|
|
2199
|
-
border-bottom-color: var(--dm-border);
|
|
2200
|
-
}
|
|
2215
|
+
/* ---------------------------------------------------------------------------
|
|
2216
|
+
Navbar variants
|
|
2201
2217
|
|
|
2202
|
-
|
|
2203
|
-
.navbar-
|
|
2204
|
-
|
|
2205
|
-
|
|
2218
|
+
These predate the theme system and used to be written as absolute colours:
|
|
2219
|
+
.navbar-dark painted the bar with --dm-background and its text with
|
|
2220
|
+
--dm-text-inverse. Those two tokens resolve to the SAME value in every dark
|
|
2221
|
+
theme (both are the theme's darkest slate), so the brand rendered at 1.00
|
|
2222
|
+
contrast - invisible, on every dark theme, in every consumer. .navbar-light
|
|
2223
|
+
failed the mirror way in light themes: a white bar with white text, and an
|
|
2224
|
+
active link at 2.56.
|
|
2206
2225
|
|
|
2207
|
-
|
|
2208
|
-
|
|
2209
|
-
|
|
2226
|
+
Every theme already ships the pair meant for this job - --dm-navbar-bg (the
|
|
2227
|
+
theme's navbar surface) and --dm-navbar-text (text guaranteed to read on it).
|
|
2228
|
+
So the variants are now tint modifiers on that surface rather than absolute
|
|
2229
|
+
colours: "dark" sits a shade below the theme's navbar, "light" a shade above.
|
|
2230
|
+
The two stay visually distinct, both follow the theme, and neither can
|
|
2231
|
+
collide with its own foreground.
|
|
2210
2232
|
|
|
2211
|
-
.
|
|
2212
|
-
|
|
2213
|
-
background-color: #1e293b !important;
|
|
2214
|
-
border-radius: var(--dm-radius-md);
|
|
2215
|
-
}
|
|
2233
|
+
Measured worst case across 21 themes x both variants: 5.78 (was 1.00).
|
|
2234
|
+
--------------------------------------------------------------------------- */
|
|
2216
2235
|
|
|
2217
|
-
/*
|
|
2218
|
-
[data-mode="light"] .navbar-link:hover {
|
|
2219
|
-
color: #ffffff !important;
|
|
2220
|
-
background-color: #1e293b !important;
|
|
2221
|
-
border-radius: var(--dm-radius-md);
|
|
2222
|
-
}
|
|
2223
|
-
|
|
2224
|
-
.navbar-light .navbar-toggle {
|
|
2225
|
-
color: var(--dm-text);
|
|
2226
|
-
}
|
|
2236
|
+
/* Light navbar variant */
|
|
2227
2237
|
|
|
2228
|
-
.navbar-light
|
|
2229
|
-
background: var(--dm-
|
|
2230
|
-
color: var(--dm-
|
|
2238
|
+
.navbar-light {
|
|
2239
|
+
background-color: color-mix(in srgb, #fff 18%, var(--dm-navbar-bg));
|
|
2240
|
+
border-bottom-color: var(--dm-border);
|
|
2231
2241
|
}
|
|
2232
2242
|
|
|
2233
2243
|
/* Dark navbar variant */
|
|
2234
2244
|
|
|
2235
2245
|
.navbar-dark {
|
|
2236
|
-
background-color: var(--dm-
|
|
2246
|
+
background-color: color-mix(in srgb, #000 18%, var(--dm-navbar-bg));
|
|
2237
2247
|
border-bottom-color: var(--dm-border-dark);
|
|
2238
2248
|
}
|
|
2239
2249
|
|
|
2250
|
+
.navbar-light .navbar-brand,
|
|
2251
|
+
.navbar-light .navbar-brand-text,
|
|
2252
|
+
.navbar-light .navbar-toggle,
|
|
2240
2253
|
.navbar-dark .navbar-brand,
|
|
2241
|
-
.navbar-dark .navbar-brand-text
|
|
2242
|
-
color: var(--dm-text-inverse, var(--dm-white));
|
|
2243
|
-
}
|
|
2244
|
-
|
|
2254
|
+
.navbar-dark .navbar-brand-text,
|
|
2245
2255
|
.navbar-dark .navbar-toggle {
|
|
2246
|
-
color: var(--dm-text
|
|
2247
|
-
}
|
|
2248
|
-
|
|
2249
|
-
.navbar-dark .navbar-toggle:hover {
|
|
2250
|
-
background: var(--dm-surface);
|
|
2251
|
-
color: var(--dm-text-inverse, var(--dm-white));
|
|
2256
|
+
color: var(--dm-navbar-text);
|
|
2252
2257
|
}
|
|
2253
2258
|
|
|
2259
|
+
/* Slightly muted against the brand, but never below AA. 85% is the floor that
|
|
2260
|
+
clears 4.5 in every theme - 72% dropped grayve/wedding/christmas to 3.8-4.0. */
|
|
2261
|
+
.navbar-light .navbar-link,
|
|
2254
2262
|
.navbar-dark .navbar-link {
|
|
2255
|
-
color: var(--dm-
|
|
2263
|
+
color: color-mix(in srgb, var(--dm-navbar-text) 85%, var(--dm-navbar-bg));
|
|
2256
2264
|
}
|
|
2257
2265
|
|
|
2266
|
+
.navbar-light .navbar-link:hover,
|
|
2258
2267
|
.navbar-dark .navbar-link:hover {
|
|
2259
|
-
|
|
2260
|
-
color:
|
|
2261
|
-
border-radius: var(--dm-radius-
|
|
2268
|
+
color: var(--dm-navbar-text);
|
|
2269
|
+
background-color: color-mix(in srgb, var(--dm-navbar-text) 12%, transparent);
|
|
2270
|
+
border-radius: var(--dm-radius-md);
|
|
2262
2271
|
}
|
|
2263
2272
|
|
|
2264
|
-
.navbar-
|
|
2265
|
-
|
|
2266
|
-
|
|
2273
|
+
.navbar-light .navbar-toggle:hover,
|
|
2274
|
+
.navbar-dark .navbar-toggle:hover {
|
|
2275
|
+
background: color-mix(in srgb, var(--dm-navbar-text) 12%, transparent);
|
|
2276
|
+
color: var(--dm-navbar-text);
|
|
2277
|
+
}
|
|
2278
|
+
|
|
2279
|
+
/* Legacy forced hover for light mode. Kept as-is for the plain/transparent
|
|
2280
|
+
navbar, but excluded from the two variants above - it carries !important and
|
|
2281
|
+
would otherwise override their theme-derived hover. */
|
|
2282
|
+
[data-mode="light"] .navbar:not(.navbar-light):not(.navbar-dark) .navbar-link:hover {
|
|
2283
|
+
color: #ffffff !important;
|
|
2284
|
+
background-color: #1e293b !important;
|
|
2285
|
+
border-radius: var(--dm-radius-md);
|
|
2267
2286
|
}
|
|
2268
2287
|
|
|
2269
2288
|
/* Dark navbar collapse border color (mobile) */
|
|
@@ -2542,23 +2561,19 @@ code {
|
|
|
2542
2561
|
list-style: none;
|
|
2543
2562
|
}
|
|
2544
2563
|
|
|
2545
|
-
/* Dark navbar dropdown styles
|
|
2546
|
-
.navbar-dark .navbar-dropdown-menu {
|
|
2547
|
-
background: var(--dm-surface);
|
|
2548
|
-
border-color: var(--dm-border-dark, var(--dm-border));
|
|
2549
|
-
}
|
|
2550
|
-
|
|
2551
|
-
.navbar-dark .navbar-dropdown-item {
|
|
2552
|
-
color: var(--dm-gray-400, #adb5bd);
|
|
2553
|
-
}
|
|
2564
|
+
/* Dark navbar dropdown styles
|
|
2554
2565
|
|
|
2555
|
-
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2566
|
+
The dropdown panel is painted from --dm-surface whatever the bar variant, so
|
|
2567
|
+
the base rules above already render it correctly in both modes. The overrides
|
|
2568
|
+
that used to live here only re-stated that same background while replacing
|
|
2569
|
+
the text with a fixed grey and the hover with --dm-text-inverse over 30%
|
|
2570
|
+
white - which measured 2.56 and 1.00 respectively in every light theme, and
|
|
2571
|
+
3.25 on hover in the dark ones. The divider was being painted --dm-surface,
|
|
2572
|
+
i.e. the panel's own colour, so it was invisible.
|
|
2559
2573
|
|
|
2560
|
-
|
|
2561
|
-
|
|
2574
|
+
Only the border tint is worth keeping. */
|
|
2575
|
+
.navbar-dark .navbar-dropdown-menu {
|
|
2576
|
+
border-color: var(--dm-border-dark, var(--dm-border));
|
|
2562
2577
|
}
|
|
2563
2578
|
|
|
2564
2579
|
/* ============================================
|
|
@@ -2598,14 +2613,9 @@ code {
|
|
|
2598
2613
|
border-radius: var(--dm-radius-md);
|
|
2599
2614
|
}
|
|
2600
2615
|
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
.navbar-dark .navbar-submenu-toggle:hover {
|
|
2606
|
-
background: rgba(255, 255, 255, 0.3);
|
|
2607
|
-
color: var(--dm-text-inverse, var(--dm-white));
|
|
2608
|
-
}
|
|
2616
|
+
/* Same as the dropdown items above - the submenu toggle sits on the panel, not
|
|
2617
|
+
on the bar, so the base --dm-text / --dm-hover-bg pairing is the correct one
|
|
2618
|
+
and the fixed grey plus --dm-text-inverse overrides have been removed. */
|
|
2609
2619
|
|
|
2610
2620
|
/* Submenu caret points to the side to signal a fly-out */
|
|
2611
2621
|
.navbar-submenu-toggle .navbar-caret {
|
|
@@ -4940,7 +4950,7 @@ code {
|
|
|
4940
4950
|
}
|
|
4941
4951
|
|
|
4942
4952
|
/* Status text utilities use color-mix with --dm-text so they auto-adapt to
|
|
4943
|
-
light/dark modes
|
|
4953
|
+
light/dark modes - keeping brand identity while staying ≥4.5:1 readable. */
|
|
4944
4954
|
.text-success {
|
|
4945
4955
|
color: color-mix(in oklab, var(--dm-success), var(--dm-text) 30%) !important;
|
|
4946
4956
|
}
|
|
@@ -5346,7 +5356,7 @@ code {
|
|
|
5346
5356
|
/*
|
|
5347
5357
|
* Hover bridge: the menu is rendered as a document.body sibling positioned with a
|
|
5348
5358
|
* small offset/margin gap from its trigger. On a hover-triggered dropdown that gap
|
|
5349
|
-
* is a dead-zone
|
|
5359
|
+
* is a dead-zone - the pointer leaves the trigger before reaching the menu, firing
|
|
5350
5360
|
* the close. These transparent pseudo-elements extend the menu's hoverable area
|
|
5351
5361
|
* above and below it, so the trigger→menu path is one continuous hover surface.
|
|
5352
5362
|
* Only present on hover dropdowns, so click dropdowns are unaffected.
|
|
@@ -5358,7 +5368,7 @@ code {
|
|
|
5358
5368
|
left: 0;
|
|
5359
5369
|
right: 0;
|
|
5360
5370
|
height: 0.75rem;
|
|
5361
|
-
/* transparent
|
|
5371
|
+
/* transparent - a hover surface only, never painted */
|
|
5362
5372
|
}
|
|
5363
5373
|
|
|
5364
5374
|
.domma-dropdown-menu-hover::before {
|
|
@@ -7569,7 +7579,7 @@ code {
|
|
|
7569
7579
|
}
|
|
7570
7580
|
|
|
7571
7581
|
/* ============================================================
|
|
7572
|
-
* Chooser
|
|
7582
|
+
* Chooser - visual option-picker (card/chip × single/multi)
|
|
7573
7583
|
* ============================================================ */
|
|
7574
7584
|
.domma-chooser {
|
|
7575
7585
|
--picker-radius: var(--dm-radius);
|
|
@@ -7789,7 +7799,7 @@ code {
|
|
|
7789
7799
|
}
|
|
7790
7800
|
|
|
7791
7801
|
/* ============================================================
|
|
7792
|
-
* Chooser
|
|
7802
|
+
* Chooser - accent colour, accent style, glow, shadow extensions
|
|
7793
7803
|
* ============================================================ */
|
|
7794
7804
|
|
|
7795
7805
|
/* Default the accent variables on every chooser */
|
|
@@ -7820,7 +7830,7 @@ code {
|
|
|
7820
7830
|
0 0 18px color-mix(in srgb, var(--picker-glow-colour) 60%, transparent);
|
|
7821
7831
|
}
|
|
7822
7832
|
|
|
7823
|
-
/* Shadow weights
|
|
7833
|
+
/* Shadow weights - applied to all options */
|
|
7824
7834
|
.domma-chooser[data-shadow="sm"] .picker-option {
|
|
7825
7835
|
box-shadow: 0 1px 2px var(--picker-shadow-colour, rgba(0, 0, 0, 0.08));
|
|
7826
7836
|
}
|
|
@@ -7908,7 +7918,7 @@ code {
|
|
|
7908
7918
|
}
|
|
7909
7919
|
|
|
7910
7920
|
/* ============================================================
|
|
7911
|
-
* Page-roller chooser slideover
|
|
7921
|
+
* Page-roller chooser slideover - structured editor styling
|
|
7912
7922
|
* ============================================================ */
|
|
7913
7923
|
.qr-chooser-slideover-body {
|
|
7914
7924
|
padding: 1.25rem;
|
package/public/dist/grid.css
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Domma Grid CSS v0.
|
|
2
|
+
* Domma Grid CSS v0.41.0
|
|
3
3
|
* Dynamic Object Manipulation & Modeling API
|
|
4
4
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
5
|
-
* Built: 2026-08-
|
|
6
|
-
* Commit:
|
|
5
|
+
* Built: 2026-08-22T13:41:49.299Z
|
|
6
|
+
* Commit: 5d8b7e1
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -337,7 +337,7 @@
|
|
|
337
337
|
gap: var(--dm-space-6, 2rem);
|
|
338
338
|
}
|
|
339
339
|
|
|
340
|
-
/* Bootstrap 5-style g-* aliases (row gutters
|
|
340
|
+
/* Bootstrap 5-style g-* aliases (row gutters - both axes) */
|
|
341
341
|
.row.g-0 { gap: 0; }
|
|
342
342
|
.row.g-1 { gap: var(--dm-space-1, 0.25rem); }
|
|
343
343
|
.row.g-2 { gap: var(--dm-space-2, 0.5rem); }
|
package/public/dist/syntax.css
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Domma Syntax Highlighting CSS v0.
|
|
2
|
+
* Domma Syntax Highlighting CSS v0.41.0
|
|
3
3
|
* Dynamic Object Manipulation & Modeling API
|
|
4
4
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
5
|
-
* Built: 2026-08-
|
|
6
|
-
* Commit:
|
|
5
|
+
* Built: 2026-08-22T13:41:49.308Z
|
|
6
|
+
* Commit: 5d8b7e1
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Domma Themes v0.
|
|
2
|
+
* Domma Themes v0.41.0
|
|
3
3
|
* Dynamic Object Manipulation & Modeling API
|
|
4
4
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
5
|
-
* Built: 2026-08-
|
|
6
|
-
* Commit:
|
|
5
|
+
* Built: 2026-08-22T13:41:49.280Z
|
|
6
|
+
* Commit: 5d8b7e1
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -3223,7 +3223,7 @@
|
|
|
3223
3223
|
--dm-info-hover-text: #1a1a1a;
|
|
3224
3224
|
}
|
|
3225
3225
|
/**
|
|
3226
|
-
* Domma Christmas Light Theme
|
|
3226
|
+
* Domma Christmas Light Theme - "Frosty Morning"
|
|
3227
3227
|
* Ice-blue tinted backgrounds evoking frost on windows, deep pine-green text
|
|
3228
3228
|
* Classic Christmas Red primary, rich Holly Green secondary
|
|
3229
3229
|
*/
|
|
@@ -3467,10 +3467,10 @@
|
|
|
3467
3467
|
}
|
|
3468
3468
|
|
|
3469
3469
|
/* ============================================================
|
|
3470
|
-
DECORATIVE CSS
|
|
3470
|
+
DECORATIVE CSS - "Frosty Morning" festive embellishments
|
|
3471
3471
|
============================================================ */
|
|
3472
3472
|
|
|
3473
|
-
/* Snow-dust background
|
|
3473
|
+
/* Snow-dust background - subtle radial dots on the page root */
|
|
3474
3474
|
.dm-theme-christmas-light {
|
|
3475
3475
|
background-image:
|
|
3476
3476
|
radial-gradient(circle, rgba(168, 213, 229, 0.35) 1px, transparent 1px),
|
|
@@ -3486,7 +3486,7 @@
|
|
|
3486
3486
|
border-image-slice: 1;
|
|
3487
3487
|
}
|
|
3488
3488
|
|
|
3489
|
-
/* Candy-stripe progress bars (default + plain variant only
|
|
3489
|
+
/* Candy-stripe progress bars (default + plain variant only - variants keep their semantic colour) */
|
|
3490
3490
|
.dm-theme-christmas-light .dm-progression-progress-bar,
|
|
3491
3491
|
.dm-theme-christmas-light .progress > .progress-bar:not([class*="progress-bar-"]) {
|
|
3492
3492
|
background-image: repeating-linear-gradient(
|
|
@@ -3500,7 +3500,7 @@
|
|
|
3500
3500
|
color: #ffffff;
|
|
3501
3501
|
}
|
|
3502
3502
|
|
|
3503
|
-
/* Festive syntax highlighting
|
|
3503
|
+
/* Festive syntax highlighting - green keywords, red strings, gold functions */
|
|
3504
3504
|
.dm-theme-christmas-light .code-block .syntax-keyword {
|
|
3505
3505
|
color: #2D6B3F;
|
|
3506
3506
|
font-weight: 600;
|
|
@@ -3516,7 +3516,7 @@
|
|
|
3516
3516
|
}
|
|
3517
3517
|
|
|
3518
3518
|
/**
|
|
3519
|
-
* Domma Christmas Dark Theme
|
|
3519
|
+
* Domma Christmas Dark Theme - "Christmas Eve"
|
|
3520
3520
|
* Deep forest green backgrounds, pure moonlit-white text, green/red undertones in interaction
|
|
3521
3521
|
* Bright Holly Green primary, Christmas Red secondary; firelight-ember shadows
|
|
3522
3522
|
*/
|
|
@@ -3535,7 +3535,7 @@
|
|
|
3535
3535
|
--dm-surface-raised: #243A2C;
|
|
3536
3536
|
--dm-surface-overlay: #243A2C;
|
|
3537
3537
|
|
|
3538
|
-
/* Text - Pure snow white; no green tint
|
|
3538
|
+
/* Text - Pure snow white; no green tint - moonlight on fresh snow */
|
|
3539
3539
|
--dm-text: #FFFFFF;
|
|
3540
3540
|
--dm-text-secondary: #D0D0D0;
|
|
3541
3541
|
--dm-text-muted: #a8a8a8;
|
|
@@ -3760,10 +3760,10 @@
|
|
|
3760
3760
|
}
|
|
3761
3761
|
|
|
3762
3762
|
/* ============================================================
|
|
3763
|
-
DECORATIVE CSS
|
|
3763
|
+
DECORATIVE CSS - "Christmas Eve" festive embellishments
|
|
3764
3764
|
============================================================ */
|
|
3765
3765
|
|
|
3766
|
-
/* Snow-dust background
|
|
3766
|
+
/* Snow-dust background - three festive dot layers: white snow, green pine, red Christmas lights */
|
|
3767
3767
|
.dm-theme-christmas-dark {
|
|
3768
3768
|
background-image:
|
|
3769
3769
|
radial-gradient(circle, rgba(255, 255, 255, 0.13) 1px, transparent 1px),
|
|
@@ -3780,7 +3780,7 @@
|
|
|
3780
3780
|
border-image-slice: 1;
|
|
3781
3781
|
}
|
|
3782
3782
|
|
|
3783
|
-
/* Candy-stripe progress bars (default + plain variant only
|
|
3783
|
+
/* Candy-stripe progress bars (default + plain variant only - variants keep their semantic colour) */
|
|
3784
3784
|
.dm-theme-christmas-dark .dm-progression-progress-bar,
|
|
3785
3785
|
.dm-theme-christmas-dark .progress > .progress-bar:not([class*="progress-bar-"]) {
|
|
3786
3786
|
background-image: repeating-linear-gradient(
|
|
@@ -3794,7 +3794,7 @@
|
|
|
3794
3794
|
color: #1a1a1a;
|
|
3795
3795
|
}
|
|
3796
3796
|
|
|
3797
|
-
/* Festive syntax highlighting
|
|
3797
|
+
/* Festive syntax highlighting - brighter versions for dark backgrounds */
|
|
3798
3798
|
.dm-theme-christmas-dark .code-block .syntax-keyword {
|
|
3799
3799
|
color: #5CB875;
|
|
3800
3800
|
font-weight: 600;
|
|
@@ -4725,7 +4725,7 @@
|
|
|
4725
4725
|
|
|
4726
4726
|
/**
|
|
4727
4727
|
* Domma Grayve Light Theme
|
|
4728
|
-
* Slate/cyan monochrome palette
|
|
4728
|
+
* Slate/cyan monochrome palette - complementary light variant
|
|
4729
4729
|
* Light mode variant
|
|
4730
4730
|
*/
|
|
4731
4731
|
|
|
@@ -4959,7 +4959,7 @@
|
|
|
4959
4959
|
|
|
4960
4960
|
/* Syntax highlighting tokens for grayve-light */
|
|
4961
4961
|
.dm-theme-grayve-light .code-block .syntax-keyword {
|
|
4962
|
-
color: #5a2dcc; /* Deep Purple
|
|
4962
|
+
color: #5a2dcc; /* Deep Purple - darkened for ≥4.5:1 on #f5f5f5 */
|
|
4963
4963
|
font-weight: 500;
|
|
4964
4964
|
}
|
|
4965
4965
|
|
|
@@ -4969,12 +4969,12 @@
|
|
|
4969
4969
|
}
|
|
4970
4970
|
|
|
4971
4971
|
.dm-theme-grayve-light .code-block .syntax-function {
|
|
4972
|
-
color: #006873; /* Cyan
|
|
4972
|
+
color: #006873; /* Cyan - darkened for ≥4.5:1 on #f5f5f5 */
|
|
4973
4973
|
}
|
|
4974
4974
|
|
|
4975
4975
|
/**
|
|
4976
4976
|
* Domma Grayve Dark Theme
|
|
4977
|
-
* Slate/cyan monochrome palette
|
|
4977
|
+
* Slate/cyan monochrome palette - adapted from Bootswatch Slate
|
|
4978
4978
|
* Dark mode variant
|
|
4979
4979
|
*/
|
|
4980
4980
|
|
|
@@ -5684,7 +5684,7 @@
|
|
|
5684
5684
|
|
|
5685
5685
|
/**
|
|
5686
5686
|
* Domma Wedding Light Theme
|
|
5687
|
-
* Classic antique gold palette
|
|
5687
|
+
* Classic antique gold palette - warm, muted, timeless
|
|
5688
5688
|
* Day variant - cream/ivory backgrounds with antique gold highlights
|
|
5689
5689
|
*/
|
|
5690
5690
|
|
|
@@ -5915,7 +5915,7 @@
|
|
|
5915
5915
|
|
|
5916
5916
|
/**
|
|
5917
5917
|
* Domma Wedding Dark Theme
|
|
5918
|
-
* Classic antique gold palette
|
|
5918
|
+
* Classic antique gold palette - warm, muted, timeless
|
|
5919
5919
|
* Evening variant - deep midnight navy with antique gold highlights
|
|
5920
5920
|
*/
|
|
5921
5921
|
|
|
@@ -6145,7 +6145,7 @@
|
|
|
6145
6145
|
|
|
6146
6146
|
/**
|
|
6147
6147
|
* Domma Admin Smooth · Steel Blue
|
|
6148
|
-
* GENERATED by scripts/generate-admin-themes.js
|
|
6148
|
+
* GENERATED by scripts/generate-admin-themes.js - do not edit by hand.
|
|
6149
6149
|
*/
|
|
6150
6150
|
|
|
6151
6151
|
.dm-theme-admin-smooth-steel {
|
|
@@ -6283,7 +6283,7 @@
|
|
|
6283
6283
|
|
|
6284
6284
|
/**
|
|
6285
6285
|
* Domma Admin Smooth · Indigo
|
|
6286
|
-
* GENERATED by scripts/generate-admin-themes.js
|
|
6286
|
+
* GENERATED by scripts/generate-admin-themes.js - do not edit by hand.
|
|
6287
6287
|
*/
|
|
6288
6288
|
|
|
6289
6289
|
.dm-theme-admin-smooth-indigo {
|
|
@@ -6421,7 +6421,7 @@
|
|
|
6421
6421
|
|
|
6422
6422
|
/**
|
|
6423
6423
|
* Domma Admin Smooth · Teal
|
|
6424
|
-
* GENERATED by scripts/generate-admin-themes.js
|
|
6424
|
+
* GENERATED by scripts/generate-admin-themes.js - do not edit by hand.
|
|
6425
6425
|
*/
|
|
6426
6426
|
|
|
6427
6427
|
.dm-theme-admin-smooth-teal {
|
|
@@ -6559,7 +6559,7 @@
|
|
|
6559
6559
|
|
|
6560
6560
|
/**
|
|
6561
6561
|
* Domma Admin Sharp · Steel Blue
|
|
6562
|
-
* GENERATED by scripts/generate-admin-themes.js
|
|
6562
|
+
* GENERATED by scripts/generate-admin-themes.js - do not edit by hand.
|
|
6563
6563
|
*/
|
|
6564
6564
|
|
|
6565
6565
|
.dm-theme-admin-sharp-steel {
|
|
@@ -6697,7 +6697,7 @@
|
|
|
6697
6697
|
|
|
6698
6698
|
/**
|
|
6699
6699
|
* Domma Admin Sharp · Indigo
|
|
6700
|
-
* GENERATED by scripts/generate-admin-themes.js
|
|
6700
|
+
* GENERATED by scripts/generate-admin-themes.js - do not edit by hand.
|
|
6701
6701
|
*/
|
|
6702
6702
|
|
|
6703
6703
|
.dm-theme-admin-sharp-indigo {
|
|
@@ -6835,7 +6835,7 @@
|
|
|
6835
6835
|
|
|
6836
6836
|
/**
|
|
6837
6837
|
* Domma Admin Sharp · Teal
|
|
6838
|
-
* GENERATED by scripts/generate-admin-themes.js
|
|
6838
|
+
* GENERATED by scripts/generate-admin-themes.js - do not edit by hand.
|
|
6839
6839
|
*/
|
|
6840
6840
|
|
|
6841
6841
|
.dm-theme-admin-sharp-teal {
|
|
@@ -21,11 +21,11 @@ Quick reference for Domma conventions - enforces best practices across sessions.
|
|
|
21
21
|
8. **Confirm**: `await E.confirm('Sure?')` - NOT `window.confirm()`
|
|
22
22
|
9. **Icons**: `<span data-icon="name">` + `I.scan()` - NOT manual SVG
|
|
23
23
|
10. **Tables**: `T.create(selector, {data})` - NOT manual `<table>` HTML
|
|
24
|
-
11. **Modals**: `E.modal(selector, options)`
|
|
25
|
-
12. **Templates**: `templateUrl: 'path.html'`
|
|
26
|
-
13. **Tabs**: `E.tabs()`, `E.accordion()`
|
|
27
|
-
14. **Init**: Call `I.scan()` after DOM ready
|
|
28
|
-
15. **Events**: `.on()`, `.off()`, `.one()`
|
|
24
|
+
11. **Modals**: `E.modal(selector, options)` - NOT custom modal code
|
|
25
|
+
12. **Templates**: `templateUrl: 'path.html'` - NOT large inline strings
|
|
26
|
+
13. **Tabs**: `E.tabs()`, `E.accordion()` - NOT custom switching code
|
|
27
|
+
14. **Init**: Call `I.scan()` after DOM ready - Domma starts itself when the bundle loads; there is no `Domma.init()`
|
|
28
|
+
15. **Events**: `.on()`, `.off()`, `.one()` - NOT `.addEventListener()`
|
|
29
29
|
|
|
30
30
|
## Aliases Quick Reference
|
|
31
31
|
|
|
@@ -77,7 +77,7 @@ Always load CSS in this order:
|
|
|
77
77
|
<script src="dist/domma.min.js"></script>
|
|
78
78
|
<script src="https://cdn.jsdelivr.net/npm/dompurify@3/dist/purify.min.js"></script> <!-- For dynamic content -->
|
|
79
79
|
<script>
|
|
80
|
-
// Domma starts itself the moment the bundle loads
|
|
80
|
+
// Domma starts itself the moment the bundle loads - it registers its web
|
|
81
81
|
// components, manages the anti-FOUC cloak and defines the aliases. The only
|
|
82
82
|
// startup call a page needs is the icon scan, and it must run BEFORE the app
|
|
83
83
|
// scripts so `data-icon` elements in the initial markup are resolved.
|