domma-js 0.41.0 → 0.44.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/README.md +596 -143
- package/bin/domma-cli.js +5 -5
- package/bin/postinstall.js +1 -1
- package/package.json +13 -7
- package/public/dist/bundles/domma-complete.css +499 -92
- package/public/dist/bundles/domma-data-focused.css +499 -92
- package/public/dist/bundles/domma-essentials.css +499 -92
- package/public/dist/bundles/domma-full.css +499 -92
- package/public/dist/bundles/domma-minimal.css +8 -8
- 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 +3 -3
- package/public/dist/domma.esm.js +5 -5
- package/public/dist/domma.min.js +5 -5
- package/public/dist/elements.css +434 -27
- package/public/dist/grid.css +3 -3
- package/public/dist/syntax.css +3 -3
- package/public/dist/themes/domma-themes.css +57 -57
- package/templates/kickstart-spa/README.md +1 -1
- package/public/dist/bundles/domma-grayve.css +0 -16852
- package/public/dist/themes/grayve.css +0 -213
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* Domma Complete CSS Bundle v0.
|
|
2
|
+
* Domma Complete CSS Bundle v0.44.0
|
|
3
3
|
* Dynamic Object Manipulation & Modeling API
|
|
4
4
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
5
|
-
* Built: 2026-
|
|
5
|
+
* Built: 2026-09-22T03:19:19.495Z
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
/* ============================================
|
|
@@ -11,11 +11,11 @@
|
|
|
11
11
|
============================================ */
|
|
12
12
|
|
|
13
13
|
/*!
|
|
14
|
-
* Domma Core CSS v0.
|
|
14
|
+
* Domma Core CSS v0.44.0
|
|
15
15
|
* Dynamic Object Manipulation & Modeling API
|
|
16
16
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
17
|
-
* Built: 2026-
|
|
18
|
-
* Commit:
|
|
17
|
+
* Built: 2026-09-22T03:19:19.324Z
|
|
18
|
+
* Commit: a452582
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
21
|
/**
|
|
@@ -4838,11 +4838,11 @@ body.dm-cloaked.dm-ready {
|
|
|
4838
4838
|
============================================ */
|
|
4839
4839
|
|
|
4840
4840
|
/*!
|
|
4841
|
-
* Domma Grid CSS v0.
|
|
4841
|
+
* Domma Grid CSS v0.44.0
|
|
4842
4842
|
* Dynamic Object Manipulation & Modeling API
|
|
4843
4843
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
4844
|
-
* Built: 2026-
|
|
4845
|
-
* Commit:
|
|
4844
|
+
* Built: 2026-09-22T03:19:19.327Z
|
|
4845
|
+
* Commit: a452582
|
|
4846
4846
|
*/
|
|
4847
4847
|
|
|
4848
4848
|
/**
|
|
@@ -5463,11 +5463,11 @@ body.dm-cloaked.dm-ready {
|
|
|
5463
5463
|
============================================ */
|
|
5464
5464
|
|
|
5465
5465
|
/*!
|
|
5466
|
-
* Domma Elements CSS v0.
|
|
5466
|
+
* Domma Elements CSS v0.44.0
|
|
5467
5467
|
* Dynamic Object Manipulation & Modeling API
|
|
5468
5468
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
5469
|
-
* Built: 2026-
|
|
5470
|
-
* Commit:
|
|
5469
|
+
* Built: 2026-09-22T03:19:19.332Z
|
|
5470
|
+
* Commit: a452582
|
|
5471
5471
|
*/
|
|
5472
5472
|
|
|
5473
5473
|
/**
|
|
@@ -10800,7 +10800,9 @@ code {
|
|
|
10800
10800
|
z-index: 1000;
|
|
10801
10801
|
min-width: 10rem;
|
|
10802
10802
|
padding: 0.5rem 0;
|
|
10803
|
-
margin:
|
|
10803
|
+
/* No margin: the menu is placed by JS from `offset`, and a margin here would
|
|
10804
|
+
silently add to it, so the box would not sit where it was measured to. */
|
|
10805
|
+
margin: 0;
|
|
10804
10806
|
background-color: var(--dm-surface);
|
|
10805
10807
|
border: 1px solid var(--dm-border);
|
|
10806
10808
|
border-radius: var(--dm-radius-md);
|
|
@@ -10818,30 +10820,13 @@ code {
|
|
|
10818
10820
|
}
|
|
10819
10821
|
|
|
10820
10822
|
/*
|
|
10821
|
-
*
|
|
10822
|
-
*
|
|
10823
|
-
*
|
|
10824
|
-
*
|
|
10825
|
-
*
|
|
10826
|
-
*
|
|
10823
|
+
* The trigger→menu gap is bridged in JS, not CSS. A transparent pseudo-element
|
|
10824
|
+
* strip used to sit above and below the menu to keep the hover path continuous,
|
|
10825
|
+
* but it only ever covered a fixed 12px directly in line with the menu box: any
|
|
10826
|
+
* `offset` larger than that, or an approach taken at an angle, fell outside it,
|
|
10827
|
+
* and while open it also blocked the page underneath. Dropdown._pointerInSafeZone()
|
|
10828
|
+
* does the same job geometrically - see src/elements.js.
|
|
10827
10829
|
*/
|
|
10828
|
-
.domma-dropdown-menu-hover::before,
|
|
10829
|
-
.domma-dropdown-menu-hover::after {
|
|
10830
|
-
content: '';
|
|
10831
|
-
position: absolute;
|
|
10832
|
-
left: 0;
|
|
10833
|
-
right: 0;
|
|
10834
|
-
height: 0.75rem;
|
|
10835
|
-
/* transparent - a hover surface only, never painted */
|
|
10836
|
-
}
|
|
10837
|
-
|
|
10838
|
-
.domma-dropdown-menu-hover::before {
|
|
10839
|
-
bottom: 100%; /* bridges the gap when the menu opens below the trigger */
|
|
10840
|
-
}
|
|
10841
|
-
|
|
10842
|
-
.domma-dropdown-menu-hover::after {
|
|
10843
|
-
top: 100%; /* bridges the gap when the menu opens above the trigger */
|
|
10844
|
-
}
|
|
10845
10830
|
|
|
10846
10831
|
.domma-dropdown-item {
|
|
10847
10832
|
display: block;
|
|
@@ -13573,6 +13558,428 @@ code {
|
|
|
13573
13558
|
}
|
|
13574
13559
|
}
|
|
13575
13560
|
|
|
13561
|
+
/* ============================================
|
|
13562
|
+
Context Menu
|
|
13563
|
+
Bound to a container, delegated to its children. Nested menus shadow their
|
|
13564
|
+
parent for the region they cover; see src/context-menu.js for resolution.
|
|
13565
|
+
============================================ */
|
|
13566
|
+
|
|
13567
|
+
/*
|
|
13568
|
+
* Every themeable value is a custom property with the theme token as its
|
|
13569
|
+
* fallback, so an unstyled menu follows the active theme and only the options
|
|
13570
|
+
* actually passed override it. Nothing here generates per-instance rules.
|
|
13571
|
+
*/
|
|
13572
|
+
.dm-context-menu {
|
|
13573
|
+
position: fixed;
|
|
13574
|
+
z-index: 10050;
|
|
13575
|
+
display: flex;
|
|
13576
|
+
flex-direction: column;
|
|
13577
|
+
gap: 1px;
|
|
13578
|
+
padding: 4px;
|
|
13579
|
+
overflow-y: auto;
|
|
13580
|
+
background: var(--dm-ctx-surface, var(--dm-surface));
|
|
13581
|
+
color: var(--dm-text);
|
|
13582
|
+
border: 1px solid var(--dm-ctx-accent, var(--dm-border));
|
|
13583
|
+
border-radius: var(--dm-ctx-radius, var(--dm-radius-md));
|
|
13584
|
+
box-shadow: var(--dm-ctx-shadow, 0 8px 24px rgba(0, 0, 0, 0.18));
|
|
13585
|
+
font-size: 0.875rem;
|
|
13586
|
+
transform-origin: top left;
|
|
13587
|
+
outline: none;
|
|
13588
|
+
transition:
|
|
13589
|
+
opacity var(--dm-ctx-duration, 120ms) var(--dm-ctx-easing, ease),
|
|
13590
|
+
transform var(--dm-ctx-duration, 120ms) var(--dm-ctx-easing, ease);
|
|
13591
|
+
}
|
|
13592
|
+
|
|
13593
|
+
/*
|
|
13594
|
+
* A translucent panel needs its own layer: mixing the surface with transparent
|
|
13595
|
+
* keeps the text fully opaque, which `opacity` on the element would not - that
|
|
13596
|
+
* would fade the labels along with the background and fail contrast outright.
|
|
13597
|
+
*/
|
|
13598
|
+
.dm-context-menu[style*="--dm-ctx-opacity"] {
|
|
13599
|
+
background: color-mix(
|
|
13600
|
+
in srgb,
|
|
13601
|
+
var(--dm-ctx-surface, var(--dm-surface)) calc(var(--dm-ctx-opacity) * 100%),
|
|
13602
|
+
transparent
|
|
13603
|
+
);
|
|
13604
|
+
backdrop-filter: blur(10px);
|
|
13605
|
+
}
|
|
13606
|
+
|
|
13607
|
+
/* An accent tints the leading edge as well as the border. */
|
|
13608
|
+
.dm-context-menu[style*="--dm-ctx-accent"] {
|
|
13609
|
+
border-left-width: 3px;
|
|
13610
|
+
}
|
|
13611
|
+
|
|
13612
|
+
/* ---- transitions ---- */
|
|
13613
|
+
|
|
13614
|
+
.dm-context-menu[data-transition] {
|
|
13615
|
+
opacity: 0;
|
|
13616
|
+
}
|
|
13617
|
+
|
|
13618
|
+
.dm-context-menu[data-transition="scale"] { transform: scale(0.97); }
|
|
13619
|
+
.dm-context-menu[data-transition="fade"] { transform: none; }
|
|
13620
|
+
.dm-context-menu[data-transition="slide"] { transform: translateY(-6px); }
|
|
13621
|
+
.dm-context-menu[data-transition="none"] { transform: none; transition: none; }
|
|
13622
|
+
|
|
13623
|
+
.dm-context-menu.is-open {
|
|
13624
|
+
opacity: 1;
|
|
13625
|
+
transform: none;
|
|
13626
|
+
}
|
|
13627
|
+
|
|
13628
|
+
/* ---- density ---- */
|
|
13629
|
+
|
|
13630
|
+
.dm-context-menu[data-density="compact"] {
|
|
13631
|
+
font-size: 0.8125rem;
|
|
13632
|
+
padding: 2px;
|
|
13633
|
+
}
|
|
13634
|
+
|
|
13635
|
+
.dm-context-menu[data-density="compact"] .dm-context-menu-item {
|
|
13636
|
+
padding: 0.25rem 0.45rem;
|
|
13637
|
+
}
|
|
13638
|
+
|
|
13639
|
+
.dm-context-menu-item {
|
|
13640
|
+
display: flex;
|
|
13641
|
+
align-items: center;
|
|
13642
|
+
gap: 0.5rem;
|
|
13643
|
+
width: 100%;
|
|
13644
|
+
padding: 0.4rem 0.6rem;
|
|
13645
|
+
background: none;
|
|
13646
|
+
border: 0;
|
|
13647
|
+
border-radius: var(--dm-radius-sm);
|
|
13648
|
+
color: inherit;
|
|
13649
|
+
font: inherit;
|
|
13650
|
+
text-align: left;
|
|
13651
|
+
cursor: pointer;
|
|
13652
|
+
transition: background var(--dm-transition-fast);
|
|
13653
|
+
}
|
|
13654
|
+
|
|
13655
|
+
.dm-context-menu-item:hover:not(.is-disabled),
|
|
13656
|
+
.dm-context-menu-item:focus-visible {
|
|
13657
|
+
background: var(--dm-background-alt);
|
|
13658
|
+
outline: none;
|
|
13659
|
+
}
|
|
13660
|
+
|
|
13661
|
+
/*
|
|
13662
|
+
* The accent tints the hover wash rather than the label. A named colour cannot
|
|
13663
|
+
* be guaranteed readable against whatever surface the menu is on - the same
|
|
13664
|
+
* trap that made --dm-danger 1.02:1 on admin-smooth-steel - so the text keeps
|
|
13665
|
+
* the one pairing every theme guarantees and the accent carries the meaning.
|
|
13666
|
+
*/
|
|
13667
|
+
.dm-context-menu[style*="--dm-ctx-accent"] .dm-context-menu-item:hover:not(.is-disabled),
|
|
13668
|
+
.dm-context-menu[style*="--dm-ctx-accent"] .dm-context-menu-item:focus-visible {
|
|
13669
|
+
background: color-mix(in srgb, var(--dm-ctx-accent) 16%, transparent);
|
|
13670
|
+
}
|
|
13671
|
+
|
|
13672
|
+
.dm-context-menu-item:focus-visible {
|
|
13673
|
+
box-shadow: inset 0 0 0 2px var(--dm-border-focus);
|
|
13674
|
+
}
|
|
13675
|
+
|
|
13676
|
+
.dm-context-menu-item.is-disabled {
|
|
13677
|
+
opacity: 0.45;
|
|
13678
|
+
cursor: not-allowed;
|
|
13679
|
+
}
|
|
13680
|
+
|
|
13681
|
+
/*
|
|
13682
|
+
* Destructive items carry their warning in a tinted wash rather than in red
|
|
13683
|
+
* text. A saturated red cannot be read on a mid-tone surface - on
|
|
13684
|
+
* admin-smooth-steel, --dm-danger against --dm-surface lands at 1.02:1 - and
|
|
13685
|
+
* no single red works across a light surface, a dark one and the mid-tone
|
|
13686
|
+
* themes in between. The wash is mixed FROM the surface, so it adapts, and the
|
|
13687
|
+
* label keeps the one colour every theme guarantees is readable on it.
|
|
13688
|
+
*/
|
|
13689
|
+
.dm-context-menu-item.is-danger {
|
|
13690
|
+
background: color-mix(in srgb, var(--dm-danger) 10%, transparent);
|
|
13691
|
+
}
|
|
13692
|
+
|
|
13693
|
+
.dm-context-menu-item.is-danger:hover:not(.is-disabled) {
|
|
13694
|
+
background: color-mix(in srgb, var(--dm-danger) 22%, transparent);
|
|
13695
|
+
}
|
|
13696
|
+
|
|
13697
|
+
.dm-context-menu-icon {
|
|
13698
|
+
display: inline-flex;
|
|
13699
|
+
align-items: center;
|
|
13700
|
+
justify-content: center;
|
|
13701
|
+
flex: 0 0 16px;
|
|
13702
|
+
width: 16px;
|
|
13703
|
+
height: 16px;
|
|
13704
|
+
}
|
|
13705
|
+
|
|
13706
|
+
.dm-context-menu-label {
|
|
13707
|
+
flex: 1 1 auto;
|
|
13708
|
+
white-space: nowrap;
|
|
13709
|
+
overflow: hidden;
|
|
13710
|
+
text-overflow: ellipsis;
|
|
13711
|
+
}
|
|
13712
|
+
|
|
13713
|
+
.dm-context-menu-shortcut {
|
|
13714
|
+
flex: 0 0 auto;
|
|
13715
|
+
padding-left: 1rem;
|
|
13716
|
+
font-size: 0.78em;
|
|
13717
|
+
font-variant-numeric: tabular-nums;
|
|
13718
|
+
opacity: 0.8;
|
|
13719
|
+
}
|
|
13720
|
+
|
|
13721
|
+
.dm-context-menu-chevron {
|
|
13722
|
+
display: inline-flex;
|
|
13723
|
+
flex: 0 0 auto;
|
|
13724
|
+
margin-left: auto;
|
|
13725
|
+
padding-left: 0.4rem;
|
|
13726
|
+
opacity: 0.7;
|
|
13727
|
+
}
|
|
13728
|
+
|
|
13729
|
+
.dm-context-menu-item.has-submenu .dm-context-menu-label {
|
|
13730
|
+
flex: 0 1 auto;
|
|
13731
|
+
}
|
|
13732
|
+
|
|
13733
|
+
.dm-context-menu-item.is-checked .dm-context-menu-icon::after {
|
|
13734
|
+
content: "";
|
|
13735
|
+
width: 8px;
|
|
13736
|
+
height: 8px;
|
|
13737
|
+
border-radius: 50%;
|
|
13738
|
+
background: var(--dm-ctx-accent, var(--dm-primary));
|
|
13739
|
+
}
|
|
13740
|
+
|
|
13741
|
+
.dm-context-menu-divider {
|
|
13742
|
+
height: 1px;
|
|
13743
|
+
margin: 4px 2px;
|
|
13744
|
+
background: var(--dm-border);
|
|
13745
|
+
}
|
|
13746
|
+
|
|
13747
|
+
.dm-context-menu-header {
|
|
13748
|
+
padding: 0.35rem 0.6rem 0.2rem;
|
|
13749
|
+
font-size: 0.72rem;
|
|
13750
|
+
font-weight: 600;
|
|
13751
|
+
letter-spacing: 0.04em;
|
|
13752
|
+
text-transform: uppercase;
|
|
13753
|
+
}
|
|
13754
|
+
|
|
13755
|
+
/* The affordance that tells people a menu is there at all. */
|
|
13756
|
+
.dm-context-menu-host {
|
|
13757
|
+
cursor: context-menu;
|
|
13758
|
+
}
|
|
13759
|
+
|
|
13760
|
+
@media (prefers-reduced-motion: reduce) {
|
|
13761
|
+
.dm-context-menu,
|
|
13762
|
+
.dm-context-menu[data-transition] {
|
|
13763
|
+
transition: none !important;
|
|
13764
|
+
transform: none !important;
|
|
13765
|
+
}
|
|
13766
|
+
}
|
|
13767
|
+
|
|
13768
|
+
/* ============================================
|
|
13769
|
+
DatePicker
|
|
13770
|
+
--------------------------------------------
|
|
13771
|
+
Every colour is a --dm-* token that the theme layer defines, so the calendar
|
|
13772
|
+
takes whatever theme the host is wearing - including one applied to a region
|
|
13773
|
+
by a theme override, since the tokens are inherited rather than hard-coded.
|
|
13774
|
+
Nothing here invents a token: an undefined var() resolves to nothing and
|
|
13775
|
+
paints a blank panel.
|
|
13776
|
+
============================================ */
|
|
13777
|
+
|
|
13778
|
+
.dm-datepicker {
|
|
13779
|
+
position: absolute;
|
|
13780
|
+
z-index: 1080;
|
|
13781
|
+
width: max-content;
|
|
13782
|
+
padding: 0.5rem;
|
|
13783
|
+
|
|
13784
|
+
font-family: var(--dm-font-sans);
|
|
13785
|
+
font-size: var(--dm-font-size-sm);
|
|
13786
|
+
color: var(--dm-text);
|
|
13787
|
+
|
|
13788
|
+
background: var(--dm-surface-raised, var(--dm-surface));
|
|
13789
|
+
border: 1px solid var(--dm-border);
|
|
13790
|
+
border-radius: var(--dm-radius-lg);
|
|
13791
|
+
box-shadow: var(--dm-shadow-lg);
|
|
13792
|
+
}
|
|
13793
|
+
|
|
13794
|
+
.dm-datepicker--inline {
|
|
13795
|
+
position: static;
|
|
13796
|
+
box-shadow: none;
|
|
13797
|
+
margin-top: 0.35rem;
|
|
13798
|
+
}
|
|
13799
|
+
|
|
13800
|
+
/* Header: month and year pickers between two chevrons. */
|
|
13801
|
+
|
|
13802
|
+
.dm-datepicker-head {
|
|
13803
|
+
display: flex;
|
|
13804
|
+
align-items: center;
|
|
13805
|
+
gap: 0.35rem;
|
|
13806
|
+
margin-bottom: 0.4rem;
|
|
13807
|
+
}
|
|
13808
|
+
|
|
13809
|
+
.dm-datepicker-pickers {
|
|
13810
|
+
display: flex;
|
|
13811
|
+
gap: 0.3rem;
|
|
13812
|
+
flex: 1 1 auto;
|
|
13813
|
+
justify-content: center;
|
|
13814
|
+
}
|
|
13815
|
+
|
|
13816
|
+
/*
|
|
13817
|
+
* Five rules below are recorded in scripts/validate-contrast-pairs.baseline.json
|
|
13818
|
+
* rather than fixed, and the reason is the theme system, not this component.
|
|
13819
|
+
*
|
|
13820
|
+
* The three `--dm-text-disabled` rules (.is-outside, .is-disabled and the
|
|
13821
|
+
* disabled action) sit below 3:1 on `--dm-surface-raised` in ALL 33 themes -
|
|
13822
|
+
* 1.37 at worst. That is the disabled ramp behaving as designed, and WCAG AA
|
|
13823
|
+
* 1.4.3 exempts inactive controls from the contrast minimum. Lifting it to 4.5
|
|
13824
|
+
* here would make disabled dates LIGHTER than the muted weekday header, which
|
|
13825
|
+
* inverts the hierarchy.
|
|
13826
|
+
*
|
|
13827
|
+
* The two `--dm-text-muted` rules (.dm-datepicker-nav, .dm-datepicker-week)
|
|
13828
|
+
* fail on `--dm-surface-raised` in 23 of the 33 themes, worst 3.11. No token
|
|
13829
|
+
* below `--dm-text` clears AA on a raised surface everywhere, so this is not
|
|
13830
|
+
* fixable by picking a different variable - the muted ramp itself would have to
|
|
13831
|
+
* be redesigned across every theme. Using `--dm-text` instead would pass, and
|
|
13832
|
+
* cost the weekday header and adjacent-month days the de-emphasis that makes a
|
|
13833
|
+
* calendar readable at a glance.
|
|
13834
|
+
*
|
|
13835
|
+
* If the muted ramp is ever revisited, `npm run validate:contrast
|
|
13836
|
+
* --update-baseline` should drop these two.
|
|
13837
|
+
*/
|
|
13838
|
+
.dm-datepicker-nav {
|
|
13839
|
+
display: inline-flex;
|
|
13840
|
+
align-items: center;
|
|
13841
|
+
justify-content: center;
|
|
13842
|
+
width: 28px;
|
|
13843
|
+
height: 28px;
|
|
13844
|
+
padding: 0;
|
|
13845
|
+
flex: 0 0 auto;
|
|
13846
|
+
|
|
13847
|
+
color: var(--dm-text-muted);
|
|
13848
|
+
background: transparent;
|
|
13849
|
+
border: 1px solid transparent;
|
|
13850
|
+
border-radius: var(--dm-radius-md);
|
|
13851
|
+
cursor: pointer;
|
|
13852
|
+
transition: background var(--dm-transition-fast), color var(--dm-transition-fast);
|
|
13853
|
+
}
|
|
13854
|
+
|
|
13855
|
+
.dm-datepicker-nav:hover {
|
|
13856
|
+
color: var(--dm-text);
|
|
13857
|
+
background: var(--dm-hover-bg);
|
|
13858
|
+
}
|
|
13859
|
+
|
|
13860
|
+
.dm-datepicker-select {
|
|
13861
|
+
padding: 0.2rem 0.35rem;
|
|
13862
|
+
font: inherit;
|
|
13863
|
+
color: var(--dm-input-text, var(--dm-text));
|
|
13864
|
+
background: var(--dm-input-bg, var(--dm-surface));
|
|
13865
|
+
border: 1px solid var(--dm-input-border, var(--dm-border));
|
|
13866
|
+
border-radius: var(--dm-radius-md);
|
|
13867
|
+
cursor: pointer;
|
|
13868
|
+
}
|
|
13869
|
+
|
|
13870
|
+
.dm-datepicker-select:focus-visible {
|
|
13871
|
+
outline: none;
|
|
13872
|
+
border-color: var(--dm-input-focus-border, var(--dm-primary));
|
|
13873
|
+
box-shadow: var(--dm-focus-ring);
|
|
13874
|
+
}
|
|
13875
|
+
|
|
13876
|
+
/* The grid. Seven equal columns, so the weekday row and the days line up
|
|
13877
|
+
whatever the digits are - a table would do the same but cannot carry the
|
|
13878
|
+
roles this needs. */
|
|
13879
|
+
|
|
13880
|
+
.dm-datepicker-row {
|
|
13881
|
+
display: grid;
|
|
13882
|
+
grid-template-columns: repeat(7, 2rem);
|
|
13883
|
+
gap: 2px;
|
|
13884
|
+
}
|
|
13885
|
+
|
|
13886
|
+
.dm-datepicker[data-week-numbers] .dm-datepicker-row {
|
|
13887
|
+
grid-template-columns: 1.6rem repeat(7, 2rem);
|
|
13888
|
+
}
|
|
13889
|
+
|
|
13890
|
+
.dm-datepicker-weekdays { margin-bottom: 2px; }
|
|
13891
|
+
|
|
13892
|
+
.dm-datepicker-weekday,
|
|
13893
|
+
.dm-datepicker-week {
|
|
13894
|
+
display: flex;
|
|
13895
|
+
align-items: center;
|
|
13896
|
+
justify-content: center;
|
|
13897
|
+
height: 1.6rem;
|
|
13898
|
+
font-size: var(--dm-font-size-xs);
|
|
13899
|
+
font-weight: var(--dm-font-weight-semibold);
|
|
13900
|
+
color: var(--dm-text-muted);
|
|
13901
|
+
}
|
|
13902
|
+
|
|
13903
|
+
.dm-datepicker-week { font-weight: 400; }
|
|
13904
|
+
|
|
13905
|
+
.dm-datepicker-day {
|
|
13906
|
+
display: flex;
|
|
13907
|
+
align-items: center;
|
|
13908
|
+
justify-content: center;
|
|
13909
|
+
height: 2rem;
|
|
13910
|
+
padding: 0;
|
|
13911
|
+
|
|
13912
|
+
font: inherit;
|
|
13913
|
+
font-variant-numeric: tabular-nums;
|
|
13914
|
+
color: var(--dm-text);
|
|
13915
|
+
background: transparent;
|
|
13916
|
+
border: 1px solid transparent;
|
|
13917
|
+
border-radius: var(--dm-radius-md);
|
|
13918
|
+
cursor: pointer;
|
|
13919
|
+
transition: background var(--dm-transition-fast), color var(--dm-transition-fast);
|
|
13920
|
+
}
|
|
13921
|
+
|
|
13922
|
+
.dm-datepicker-day:hover:not(.is-disabled) { background: var(--dm-hover-bg); }
|
|
13923
|
+
|
|
13924
|
+
.dm-datepicker-day:focus-visible {
|
|
13925
|
+
outline: none;
|
|
13926
|
+
box-shadow: var(--dm-focus-ring);
|
|
13927
|
+
}
|
|
13928
|
+
|
|
13929
|
+
/* The days either side of the month are shown rather than blanked: a calendar
|
|
13930
|
+
with holes in it is harder to read than one that runs on. */
|
|
13931
|
+
.dm-datepicker-day.is-outside { color: var(--dm-text-disabled); }
|
|
13932
|
+
|
|
13933
|
+
.dm-datepicker-day.is-today {
|
|
13934
|
+
border-color: var(--dm-primary);
|
|
13935
|
+
font-weight: var(--dm-font-weight-semibold);
|
|
13936
|
+
}
|
|
13937
|
+
|
|
13938
|
+
.dm-datepicker-day.is-selected,
|
|
13939
|
+
.dm-datepicker-day.is-selected:hover {
|
|
13940
|
+
color: var(--dm-primary-text);
|
|
13941
|
+
background: var(--dm-primary);
|
|
13942
|
+
border-color: var(--dm-primary);
|
|
13943
|
+
}
|
|
13944
|
+
|
|
13945
|
+
.dm-datepicker-day.is-disabled {
|
|
13946
|
+
color: var(--dm-text-disabled);
|
|
13947
|
+
cursor: not-allowed;
|
|
13948
|
+
opacity: var(--dm-disabled-opacity);
|
|
13949
|
+
}
|
|
13950
|
+
|
|
13951
|
+
/* Footer actions. */
|
|
13952
|
+
|
|
13953
|
+
.dm-datepicker-foot {
|
|
13954
|
+
display: flex;
|
|
13955
|
+
gap: 0.35rem;
|
|
13956
|
+
justify-content: flex-end;
|
|
13957
|
+
margin-top: 0.45rem;
|
|
13958
|
+
padding-top: 0.45rem;
|
|
13959
|
+
border-top: 1px solid var(--dm-border);
|
|
13960
|
+
}
|
|
13961
|
+
|
|
13962
|
+
.dm-datepicker-action {
|
|
13963
|
+
padding: 0.2rem 0.6rem;
|
|
13964
|
+
font: inherit;
|
|
13965
|
+
font-size: var(--dm-font-size-xs);
|
|
13966
|
+
color: var(--dm-link);
|
|
13967
|
+
background: transparent;
|
|
13968
|
+
border: 0;
|
|
13969
|
+
border-radius: var(--dm-radius-md);
|
|
13970
|
+
cursor: pointer;
|
|
13971
|
+
}
|
|
13972
|
+
|
|
13973
|
+
.dm-datepicker-action:hover:not(:disabled) {
|
|
13974
|
+
color: var(--dm-link-hover);
|
|
13975
|
+
background: var(--dm-hover-bg);
|
|
13976
|
+
}
|
|
13977
|
+
|
|
13978
|
+
.dm-datepicker-action:disabled {
|
|
13979
|
+
color: var(--dm-text-disabled);
|
|
13980
|
+
cursor: not-allowed;
|
|
13981
|
+
}
|
|
13982
|
+
|
|
13576
13983
|
|
|
13577
13984
|
/* ============================================
|
|
13578
13985
|
THEME SYSTEM
|
|
@@ -13580,11 +13987,11 @@ code {
|
|
|
13580
13987
|
============================================ */
|
|
13581
13988
|
|
|
13582
13989
|
/*!
|
|
13583
|
-
* Domma Themes v0.
|
|
13990
|
+
* Domma Themes v0.44.0
|
|
13584
13991
|
* Dynamic Object Manipulation & Modeling API
|
|
13585
13992
|
* (c) 2026 Darryl Waterhouse & DCBW-IT
|
|
13586
|
-
* Built: 2026-
|
|
13587
|
-
* Commit:
|
|
13993
|
+
* Built: 2026-09-22T03:19:19.311Z
|
|
13994
|
+
* Commit: a452582
|
|
13588
13995
|
*/
|
|
13589
13996
|
|
|
13590
13997
|
/**
|
|
@@ -19732,40 +20139,40 @@ code {
|
|
|
19732
20139
|
.dm-theme-admin-smooth-steel {
|
|
19733
20140
|
color-scheme: dark;
|
|
19734
20141
|
|
|
19735
|
-
--dm-background: #
|
|
19736
|
-
--dm-background-alt: #
|
|
19737
|
-
--dm-surface: #
|
|
19738
|
-
--dm-surface-raised: #
|
|
19739
|
-
--dm-surface-overlay: #
|
|
20142
|
+
--dm-background: #353a43;
|
|
20143
|
+
--dm-background-alt: #2f343c;
|
|
20144
|
+
--dm-surface: #3c414a;
|
|
20145
|
+
--dm-surface-raised: #414750;
|
|
20146
|
+
--dm-surface-overlay: #414750;
|
|
19740
20147
|
--dm-text: #f7f9fb;
|
|
19741
20148
|
--dm-text-secondary: #d2d8e0;
|
|
19742
20149
|
--dm-text-muted: #b3bcc8;
|
|
19743
20150
|
--dm-text-disabled: #8a93a1;
|
|
19744
20151
|
--dm-text-inverse: #1f2733;
|
|
19745
|
-
--dm-border: #
|
|
19746
|
-
--dm-border-light: #
|
|
19747
|
-
--dm-border-dark: #
|
|
20152
|
+
--dm-border: #434852;
|
|
20153
|
+
--dm-border-light: #373d45;
|
|
20154
|
+
--dm-border-dark: #494f59;
|
|
19748
20155
|
--dm-hover-bg: rgba(255, 255, 255, 0.07);
|
|
19749
20156
|
--dm-active-bg: rgba(255, 255, 255, 0.10);
|
|
19750
20157
|
--dm-disabled-opacity: 0.4;
|
|
19751
|
-
--dm-sidebar-bg: #
|
|
20158
|
+
--dm-sidebar-bg: #292e36;
|
|
19752
20159
|
--dm-sidebar-text: #d2d8e0;
|
|
19753
|
-
--dm-sidebar-border: #
|
|
19754
|
-
--dm-navbar-bg: #
|
|
20160
|
+
--dm-sidebar-border: #232830;
|
|
20161
|
+
--dm-navbar-bg: #2f343c;
|
|
19755
20162
|
--dm-navbar-text: #f7f9fb;
|
|
19756
|
-
--dm-navbar-border: #
|
|
19757
|
-
--dm-table-header-bg: #
|
|
20163
|
+
--dm-navbar-border: #373d45;
|
|
20164
|
+
--dm-table-header-bg: #32373f;
|
|
19758
20165
|
--dm-table-stripe-bg: rgba(255, 255, 255, 0.03);
|
|
19759
20166
|
--dm-table-hover-bg: rgba(255, 255, 255, 0.07);
|
|
19760
20167
|
--dm-modal-backdrop: rgba(0, 0, 0, 0.6);
|
|
19761
20168
|
--dm-tooltip-bg: #1f2733;
|
|
19762
20169
|
--dm-tooltip-text: #ffffff;
|
|
19763
|
-
--dm-scrollbar-track: #
|
|
19764
|
-
--dm-scrollbar-thumb: #
|
|
19765
|
-
--dm-scrollbar-thumb-hover: #
|
|
19766
|
-
--dm-code-bg: #
|
|
20170
|
+
--dm-scrollbar-track: #2f343c;
|
|
20171
|
+
--dm-scrollbar-thumb: #494f59;
|
|
20172
|
+
--dm-scrollbar-thumb-hover: #5a616c;
|
|
20173
|
+
--dm-code-bg: #292e36;
|
|
19767
20174
|
--dm-code-text: #ffd9a8;
|
|
19768
|
-
--dm-progress-bg: #
|
|
20175
|
+
--dm-progress-bg: #32373f;
|
|
19769
20176
|
|
|
19770
20177
|
--dm-primary: #3b76bc;
|
|
19771
20178
|
--dm-primary-hover: #356bab;
|
|
@@ -19870,40 +20277,40 @@ code {
|
|
|
19870
20277
|
.dm-theme-admin-smooth-indigo {
|
|
19871
20278
|
color-scheme: dark;
|
|
19872
20279
|
|
|
19873
|
-
--dm-background: #
|
|
19874
|
-
--dm-background-alt: #
|
|
19875
|
-
--dm-surface: #
|
|
19876
|
-
--dm-surface-raised: #
|
|
19877
|
-
--dm-surface-overlay: #
|
|
20280
|
+
--dm-background: #353a43;
|
|
20281
|
+
--dm-background-alt: #2f343c;
|
|
20282
|
+
--dm-surface: #3c414a;
|
|
20283
|
+
--dm-surface-raised: #414750;
|
|
20284
|
+
--dm-surface-overlay: #414750;
|
|
19878
20285
|
--dm-text: #f7f9fb;
|
|
19879
20286
|
--dm-text-secondary: #d2d8e0;
|
|
19880
20287
|
--dm-text-muted: #b3bcc8;
|
|
19881
20288
|
--dm-text-disabled: #8a93a1;
|
|
19882
20289
|
--dm-text-inverse: #1f2733;
|
|
19883
|
-
--dm-border: #
|
|
19884
|
-
--dm-border-light: #
|
|
19885
|
-
--dm-border-dark: #
|
|
20290
|
+
--dm-border: #434852;
|
|
20291
|
+
--dm-border-light: #373d45;
|
|
20292
|
+
--dm-border-dark: #494f59;
|
|
19886
20293
|
--dm-hover-bg: rgba(255, 255, 255, 0.07);
|
|
19887
20294
|
--dm-active-bg: rgba(255, 255, 255, 0.10);
|
|
19888
20295
|
--dm-disabled-opacity: 0.4;
|
|
19889
|
-
--dm-sidebar-bg: #
|
|
20296
|
+
--dm-sidebar-bg: #292e36;
|
|
19890
20297
|
--dm-sidebar-text: #d2d8e0;
|
|
19891
|
-
--dm-sidebar-border: #
|
|
19892
|
-
--dm-navbar-bg: #
|
|
20298
|
+
--dm-sidebar-border: #232830;
|
|
20299
|
+
--dm-navbar-bg: #2f343c;
|
|
19893
20300
|
--dm-navbar-text: #f7f9fb;
|
|
19894
|
-
--dm-navbar-border: #
|
|
19895
|
-
--dm-table-header-bg: #
|
|
20301
|
+
--dm-navbar-border: #373d45;
|
|
20302
|
+
--dm-table-header-bg: #32373f;
|
|
19896
20303
|
--dm-table-stripe-bg: rgba(255, 255, 255, 0.03);
|
|
19897
20304
|
--dm-table-hover-bg: rgba(255, 255, 255, 0.07);
|
|
19898
20305
|
--dm-modal-backdrop: rgba(0, 0, 0, 0.6);
|
|
19899
20306
|
--dm-tooltip-bg: #1f2733;
|
|
19900
20307
|
--dm-tooltip-text: #ffffff;
|
|
19901
|
-
--dm-scrollbar-track: #
|
|
19902
|
-
--dm-scrollbar-thumb: #
|
|
19903
|
-
--dm-scrollbar-thumb-hover: #
|
|
19904
|
-
--dm-code-bg: #
|
|
20308
|
+
--dm-scrollbar-track: #2f343c;
|
|
20309
|
+
--dm-scrollbar-thumb: #494f59;
|
|
20310
|
+
--dm-scrollbar-thumb-hover: #5a616c;
|
|
20311
|
+
--dm-code-bg: #292e36;
|
|
19905
20312
|
--dm-code-text: #ffd9a8;
|
|
19906
|
-
--dm-progress-bg: #
|
|
20313
|
+
--dm-progress-bg: #32373f;
|
|
19907
20314
|
|
|
19908
20315
|
--dm-primary: #5b63a8;
|
|
19909
20316
|
--dm-primary-hover: #4f5694;
|
|
@@ -20008,40 +20415,40 @@ code {
|
|
|
20008
20415
|
.dm-theme-admin-smooth-teal {
|
|
20009
20416
|
color-scheme: dark;
|
|
20010
20417
|
|
|
20011
|
-
--dm-background: #
|
|
20012
|
-
--dm-background-alt: #
|
|
20013
|
-
--dm-surface: #
|
|
20014
|
-
--dm-surface-raised: #
|
|
20015
|
-
--dm-surface-overlay: #
|
|
20418
|
+
--dm-background: #353a43;
|
|
20419
|
+
--dm-background-alt: #2f343c;
|
|
20420
|
+
--dm-surface: #3c414a;
|
|
20421
|
+
--dm-surface-raised: #414750;
|
|
20422
|
+
--dm-surface-overlay: #414750;
|
|
20016
20423
|
--dm-text: #f7f9fb;
|
|
20017
20424
|
--dm-text-secondary: #d2d8e0;
|
|
20018
20425
|
--dm-text-muted: #b3bcc8;
|
|
20019
20426
|
--dm-text-disabled: #8a93a1;
|
|
20020
20427
|
--dm-text-inverse: #1f2733;
|
|
20021
|
-
--dm-border: #
|
|
20022
|
-
--dm-border-light: #
|
|
20023
|
-
--dm-border-dark: #
|
|
20428
|
+
--dm-border: #434852;
|
|
20429
|
+
--dm-border-light: #373d45;
|
|
20430
|
+
--dm-border-dark: #494f59;
|
|
20024
20431
|
--dm-hover-bg: rgba(255, 255, 255, 0.07);
|
|
20025
20432
|
--dm-active-bg: rgba(255, 255, 255, 0.10);
|
|
20026
20433
|
--dm-disabled-opacity: 0.4;
|
|
20027
|
-
--dm-sidebar-bg: #
|
|
20434
|
+
--dm-sidebar-bg: #292e36;
|
|
20028
20435
|
--dm-sidebar-text: #d2d8e0;
|
|
20029
|
-
--dm-sidebar-border: #
|
|
20030
|
-
--dm-navbar-bg: #
|
|
20436
|
+
--dm-sidebar-border: #232830;
|
|
20437
|
+
--dm-navbar-bg: #2f343c;
|
|
20031
20438
|
--dm-navbar-text: #f7f9fb;
|
|
20032
|
-
--dm-navbar-border: #
|
|
20033
|
-
--dm-table-header-bg: #
|
|
20439
|
+
--dm-navbar-border: #373d45;
|
|
20440
|
+
--dm-table-header-bg: #32373f;
|
|
20034
20441
|
--dm-table-stripe-bg: rgba(255, 255, 255, 0.03);
|
|
20035
20442
|
--dm-table-hover-bg: rgba(255, 255, 255, 0.07);
|
|
20036
20443
|
--dm-modal-backdrop: rgba(0, 0, 0, 0.6);
|
|
20037
20444
|
--dm-tooltip-bg: #1f2733;
|
|
20038
20445
|
--dm-tooltip-text: #ffffff;
|
|
20039
|
-
--dm-scrollbar-track: #
|
|
20040
|
-
--dm-scrollbar-thumb: #
|
|
20041
|
-
--dm-scrollbar-thumb-hover: #
|
|
20042
|
-
--dm-code-bg: #
|
|
20446
|
+
--dm-scrollbar-track: #2f343c;
|
|
20447
|
+
--dm-scrollbar-thumb: #494f59;
|
|
20448
|
+
--dm-scrollbar-thumb-hover: #5a616c;
|
|
20449
|
+
--dm-code-bg: #292e36;
|
|
20043
20450
|
--dm-code-text: #ffd9a8;
|
|
20044
|
-
--dm-progress-bg: #
|
|
20451
|
+
--dm-progress-bg: #32373f;
|
|
20045
20452
|
|
|
20046
20453
|
--dm-primary: #2a8178;
|
|
20047
20454
|
--dm-primary-hover: #287d75;
|