domma-js 0.48.0 → 0.49.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.48.0",
3
+ "version": "0.49.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",
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Complete CSS Bundle v0.48.0
2
+ * Domma Complete CSS Bundle v0.49.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-09-27T22:11:07.262Z
5
+ * Built: 2026-09-27T22:28:46.105Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.48.0
14
+ * Domma Core CSS v0.49.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-09-27T22:11:07.093Z
18
- * Commit: cf6d8de
17
+ * Built: 2026-09-27T22:28:45.940Z
18
+ * Commit: 5bc521e
19
19
  */
20
20
 
21
21
  /**
@@ -4835,11 +4835,11 @@ body.dm-cloaked.dm-ready {
4835
4835
  ============================================ */
4836
4836
 
4837
4837
  /*!
4838
- * Domma Grid CSS v0.48.0
4838
+ * Domma Grid CSS v0.49.0
4839
4839
  * Dynamic Object Manipulation & Modeling API
4840
4840
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4841
- * Built: 2026-09-27T22:11:07.097Z
4842
- * Commit: cf6d8de
4841
+ * Built: 2026-09-27T22:28:45.944Z
4842
+ * Commit: 5bc521e
4843
4843
  */
4844
4844
 
4845
4845
  /**
@@ -5460,11 +5460,11 @@ body.dm-cloaked.dm-ready {
5460
5460
  ============================================ */
5461
5461
 
5462
5462
  /*!
5463
- * Domma Elements CSS v0.48.0
5463
+ * Domma Elements CSS v0.49.0
5464
5464
  * Dynamic Object Manipulation & Modeling API
5465
5465
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5466
- * Built: 2026-09-27T22:11:07.101Z
5467
- * Commit: cf6d8de
5466
+ * Built: 2026-09-27T22:28:45.949Z
5467
+ * Commit: 5bc521e
5468
5468
  */
5469
5469
 
5470
5470
  /**
@@ -14518,6 +14518,181 @@ td > .skeleton-text {
14518
14518
  }
14519
14519
  }
14520
14520
 
14521
+ /* ============================================
14522
+ POPOVER
14523
+ E.popover(trigger, options) - src/popover.js
14524
+ ============================================ */
14525
+
14526
+ /*
14527
+ * Portalled to <body> and positioned with `fixed`, so no ancestor's overflow
14528
+ * or stacking context can clip it. Above modals and slideovers (a popover is
14529
+ * usually opened from inside one), below the context menu (10050), which can
14530
+ * be opened from inside a popover.
14531
+ *
14532
+ * Width options arrive as custom properties, so a theme or page stylesheet
14533
+ * can still set them without fighting inline styles.
14534
+ */
14535
+ .dm-popover {
14536
+ position: fixed;
14537
+ top: 0;
14538
+ left: 0;
14539
+ z-index: 10045;
14540
+ box-sizing: border-box;
14541
+ display: flex;
14542
+ flex-direction: column;
14543
+ width: var(--dm-popover-width, auto);
14544
+ max-width: min(var(--dm-popover-max-width, 20rem), calc(100vw - 16px));
14545
+ max-height: calc(100vh - 16px);
14546
+ background: var(--dm-surface);
14547
+ color: var(--dm-text);
14548
+ border: 1px solid var(--dm-border);
14549
+ border-radius: var(--dm-radius-md);
14550
+ box-shadow: var(--dm-shadow-lg);
14551
+ font-size: 0.875rem;
14552
+ line-height: 1.5;
14553
+ text-align: left;
14554
+ white-space: normal;
14555
+ overflow-wrap: break-word;
14556
+ opacity: 0;
14557
+ transform: scale(0.96);
14558
+ transform-origin: top center;
14559
+ transition:
14560
+ opacity var(--dm-popover-duration, 150ms) ease,
14561
+ transform var(--dm-popover-duration, 150ms) cubic-bezier(0.16, 1, 0.3, 1);
14562
+ outline: none;
14563
+ }
14564
+
14565
+ .dm-popover[data-side="top"] { transform-origin: bottom center; }
14566
+ .dm-popover[data-side="bottom"] { transform-origin: top center; }
14567
+ .dm-popover[data-side="left"] { transform-origin: center right; }
14568
+ .dm-popover[data-side="right"] { transform-origin: center left; }
14569
+
14570
+ .dm-popover.is-open {
14571
+ opacity: 1;
14572
+ transform: none;
14573
+ }
14574
+
14575
+ .dm-popover[data-animation="off"] {
14576
+ transition: none;
14577
+ }
14578
+
14579
+ /* The trigger has scrolled out of view; the panel waits for it. */
14580
+ .dm-popover.is-detached {
14581
+ visibility: hidden;
14582
+ pointer-events: none;
14583
+ }
14584
+
14585
+ .dm-popover [hidden] {
14586
+ display: none;
14587
+ }
14588
+
14589
+ .dm-popover-header {
14590
+ padding: 0.625rem 0.875rem 0;
14591
+ }
14592
+
14593
+ .dm-popover-title {
14594
+ margin: 0;
14595
+ font-size: 0.9375rem;
14596
+ font-weight: 600;
14597
+ line-height: 1.35;
14598
+ color: var(--dm-text);
14599
+ }
14600
+
14601
+ /* The body scrolls when the content is taller than the viewport, so the
14602
+ panel itself keeps overflow visible and the arrow is not clipped. */
14603
+ .dm-popover-body {
14604
+ min-height: 0;
14605
+ padding: 0.625rem 0.875rem;
14606
+ overflow: auto;
14607
+ }
14608
+
14609
+ .dm-popover-body > :first-child { margin-top: 0; }
14610
+ .dm-popover-body > :last-child { margin-bottom: 0; }
14611
+
14612
+ .dm-popover.is-dismissible .dm-popover-header,
14613
+ .dm-popover.is-dismissible:not(.has-title) .dm-popover-body {
14614
+ padding-right: 2.25rem;
14615
+ }
14616
+
14617
+ .dm-popover-close {
14618
+ position: absolute;
14619
+ top: 0.375rem;
14620
+ right: 0.375rem;
14621
+ display: inline-flex;
14622
+ align-items: center;
14623
+ justify-content: center;
14624
+ width: 1.5rem;
14625
+ height: 1.5rem;
14626
+ padding: 0;
14627
+ border: 0;
14628
+ border-radius: var(--dm-radius-sm);
14629
+ background: transparent;
14630
+ color: var(--dm-text);
14631
+ cursor: pointer;
14632
+ }
14633
+
14634
+ .dm-popover-close:hover {
14635
+ background: var(--dm-hover-bg);
14636
+ color: var(--dm-text);
14637
+ }
14638
+
14639
+ .dm-popover-close:focus-visible {
14640
+ outline: 2px solid var(--dm-primary);
14641
+ outline-offset: 1px;
14642
+ }
14643
+
14644
+ /*
14645
+ * A square turned 45 degrees, bordered on the two edges that face out, so it
14646
+ * reads as a continuation of the panel's own border. JS sets its position
14647
+ * along the edge (left for top/bottom, top for left/right).
14648
+ */
14649
+ .dm-popover-arrow {
14650
+ position: absolute;
14651
+ width: 10px;
14652
+ height: 10px;
14653
+ margin: -5px 0 0 -5px;
14654
+ background: var(--dm-surface);
14655
+ border: 1px solid var(--dm-border);
14656
+ transform: rotate(45deg);
14657
+ pointer-events: none;
14658
+ }
14659
+
14660
+ .dm-popover[data-side="bottom"] .dm-popover-arrow {
14661
+ top: -1px;
14662
+ border-right: 0;
14663
+ border-bottom: 0;
14664
+ }
14665
+
14666
+ .dm-popover[data-side="top"] .dm-popover-arrow {
14667
+ top: calc(100% + 1px);
14668
+ border-left: 0;
14669
+ border-top: 0;
14670
+ }
14671
+
14672
+ .dm-popover[data-side="right"] .dm-popover-arrow {
14673
+ left: -1px;
14674
+ margin: -5px 0 0 -5px;
14675
+ border-top: 0;
14676
+ border-right: 0;
14677
+ }
14678
+
14679
+ .dm-popover[data-side="left"] .dm-popover-arrow {
14680
+ left: calc(100% + 1px);
14681
+ border-bottom: 0;
14682
+ border-left: 0;
14683
+ }
14684
+
14685
+ .dm-popover-trigger[role="button"] {
14686
+ cursor: pointer;
14687
+ }
14688
+
14689
+ @media (prefers-reduced-motion: reduce) {
14690
+ .dm-popover {
14691
+ transition: none;
14692
+ transform: none;
14693
+ }
14694
+ }
14695
+
14521
14696
 
14522
14697
  /* ============================================
14523
14698
  THEME SYSTEM
@@ -14525,11 +14700,11 @@ td > .skeleton-text {
14525
14700
  ============================================ */
14526
14701
 
14527
14702
  /*!
14528
- * Domma Themes v0.48.0
14703
+ * Domma Themes v0.49.0
14529
14704
  * Dynamic Object Manipulation & Modeling API
14530
14705
  * (c) 2026 Darryl Waterhouse & DCBW-IT
14531
- * Built: 2026-09-27T22:11:07.079Z
14532
- * Commit: cf6d8de
14706
+ * Built: 2026-09-27T22:28:45.927Z
14707
+ * Commit: 5bc521e
14533
14708
  */
14534
14709
 
14535
14710
  /**
@@ -1,8 +1,8 @@
1
1
  /*!
2
- * Domma Data-Focused CSS Bundle v0.48.0
2
+ * Domma Data-Focused CSS Bundle v0.49.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-09-27T22:11:07.257Z
5
+ * Built: 2026-09-27T22:28:46.101Z
6
6
  */
7
7
 
8
8
  /* ============================================
@@ -11,11 +11,11 @@
11
11
  ============================================ */
12
12
 
13
13
  /*!
14
- * Domma Core CSS v0.48.0
14
+ * Domma Core CSS v0.49.0
15
15
  * Dynamic Object Manipulation & Modeling API
16
16
  * (c) 2026 Darryl Waterhouse & DCBW-IT
17
- * Built: 2026-09-27T22:11:07.093Z
18
- * Commit: cf6d8de
17
+ * Built: 2026-09-27T22:28:45.940Z
18
+ * Commit: 5bc521e
19
19
  */
20
20
 
21
21
  /**
@@ -4835,11 +4835,11 @@ body.dm-cloaked.dm-ready {
4835
4835
  ============================================ */
4836
4836
 
4837
4837
  /*!
4838
- * Domma Grid CSS v0.48.0
4838
+ * Domma Grid CSS v0.49.0
4839
4839
  * Dynamic Object Manipulation & Modeling API
4840
4840
  * (c) 2026 Darryl Waterhouse & DCBW-IT
4841
- * Built: 2026-09-27T22:11:07.097Z
4842
- * Commit: cf6d8de
4841
+ * Built: 2026-09-27T22:28:45.944Z
4842
+ * Commit: 5bc521e
4843
4843
  */
4844
4844
 
4845
4845
  /**
@@ -5460,11 +5460,11 @@ body.dm-cloaked.dm-ready {
5460
5460
  ============================================ */
5461
5461
 
5462
5462
  /*!
5463
- * Domma Elements CSS v0.48.0
5463
+ * Domma Elements CSS v0.49.0
5464
5464
  * Dynamic Object Manipulation & Modeling API
5465
5465
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5466
- * Built: 2026-09-27T22:11:07.101Z
5467
- * Commit: cf6d8de
5466
+ * Built: 2026-09-27T22:28:45.949Z
5467
+ * Commit: 5bc521e
5468
5468
  */
5469
5469
 
5470
5470
  /**
@@ -14518,6 +14518,181 @@ td > .skeleton-text {
14518
14518
  }
14519
14519
  }
14520
14520
 
14521
+ /* ============================================
14522
+ POPOVER
14523
+ E.popover(trigger, options) - src/popover.js
14524
+ ============================================ */
14525
+
14526
+ /*
14527
+ * Portalled to <body> and positioned with `fixed`, so no ancestor's overflow
14528
+ * or stacking context can clip it. Above modals and slideovers (a popover is
14529
+ * usually opened from inside one), below the context menu (10050), which can
14530
+ * be opened from inside a popover.
14531
+ *
14532
+ * Width options arrive as custom properties, so a theme or page stylesheet
14533
+ * can still set them without fighting inline styles.
14534
+ */
14535
+ .dm-popover {
14536
+ position: fixed;
14537
+ top: 0;
14538
+ left: 0;
14539
+ z-index: 10045;
14540
+ box-sizing: border-box;
14541
+ display: flex;
14542
+ flex-direction: column;
14543
+ width: var(--dm-popover-width, auto);
14544
+ max-width: min(var(--dm-popover-max-width, 20rem), calc(100vw - 16px));
14545
+ max-height: calc(100vh - 16px);
14546
+ background: var(--dm-surface);
14547
+ color: var(--dm-text);
14548
+ border: 1px solid var(--dm-border);
14549
+ border-radius: var(--dm-radius-md);
14550
+ box-shadow: var(--dm-shadow-lg);
14551
+ font-size: 0.875rem;
14552
+ line-height: 1.5;
14553
+ text-align: left;
14554
+ white-space: normal;
14555
+ overflow-wrap: break-word;
14556
+ opacity: 0;
14557
+ transform: scale(0.96);
14558
+ transform-origin: top center;
14559
+ transition:
14560
+ opacity var(--dm-popover-duration, 150ms) ease,
14561
+ transform var(--dm-popover-duration, 150ms) cubic-bezier(0.16, 1, 0.3, 1);
14562
+ outline: none;
14563
+ }
14564
+
14565
+ .dm-popover[data-side="top"] { transform-origin: bottom center; }
14566
+ .dm-popover[data-side="bottom"] { transform-origin: top center; }
14567
+ .dm-popover[data-side="left"] { transform-origin: center right; }
14568
+ .dm-popover[data-side="right"] { transform-origin: center left; }
14569
+
14570
+ .dm-popover.is-open {
14571
+ opacity: 1;
14572
+ transform: none;
14573
+ }
14574
+
14575
+ .dm-popover[data-animation="off"] {
14576
+ transition: none;
14577
+ }
14578
+
14579
+ /* The trigger has scrolled out of view; the panel waits for it. */
14580
+ .dm-popover.is-detached {
14581
+ visibility: hidden;
14582
+ pointer-events: none;
14583
+ }
14584
+
14585
+ .dm-popover [hidden] {
14586
+ display: none;
14587
+ }
14588
+
14589
+ .dm-popover-header {
14590
+ padding: 0.625rem 0.875rem 0;
14591
+ }
14592
+
14593
+ .dm-popover-title {
14594
+ margin: 0;
14595
+ font-size: 0.9375rem;
14596
+ font-weight: 600;
14597
+ line-height: 1.35;
14598
+ color: var(--dm-text);
14599
+ }
14600
+
14601
+ /* The body scrolls when the content is taller than the viewport, so the
14602
+ panel itself keeps overflow visible and the arrow is not clipped. */
14603
+ .dm-popover-body {
14604
+ min-height: 0;
14605
+ padding: 0.625rem 0.875rem;
14606
+ overflow: auto;
14607
+ }
14608
+
14609
+ .dm-popover-body > :first-child { margin-top: 0; }
14610
+ .dm-popover-body > :last-child { margin-bottom: 0; }
14611
+
14612
+ .dm-popover.is-dismissible .dm-popover-header,
14613
+ .dm-popover.is-dismissible:not(.has-title) .dm-popover-body {
14614
+ padding-right: 2.25rem;
14615
+ }
14616
+
14617
+ .dm-popover-close {
14618
+ position: absolute;
14619
+ top: 0.375rem;
14620
+ right: 0.375rem;
14621
+ display: inline-flex;
14622
+ align-items: center;
14623
+ justify-content: center;
14624
+ width: 1.5rem;
14625
+ height: 1.5rem;
14626
+ padding: 0;
14627
+ border: 0;
14628
+ border-radius: var(--dm-radius-sm);
14629
+ background: transparent;
14630
+ color: var(--dm-text);
14631
+ cursor: pointer;
14632
+ }
14633
+
14634
+ .dm-popover-close:hover {
14635
+ background: var(--dm-hover-bg);
14636
+ color: var(--dm-text);
14637
+ }
14638
+
14639
+ .dm-popover-close:focus-visible {
14640
+ outline: 2px solid var(--dm-primary);
14641
+ outline-offset: 1px;
14642
+ }
14643
+
14644
+ /*
14645
+ * A square turned 45 degrees, bordered on the two edges that face out, so it
14646
+ * reads as a continuation of the panel's own border. JS sets its position
14647
+ * along the edge (left for top/bottom, top for left/right).
14648
+ */
14649
+ .dm-popover-arrow {
14650
+ position: absolute;
14651
+ width: 10px;
14652
+ height: 10px;
14653
+ margin: -5px 0 0 -5px;
14654
+ background: var(--dm-surface);
14655
+ border: 1px solid var(--dm-border);
14656
+ transform: rotate(45deg);
14657
+ pointer-events: none;
14658
+ }
14659
+
14660
+ .dm-popover[data-side="bottom"] .dm-popover-arrow {
14661
+ top: -1px;
14662
+ border-right: 0;
14663
+ border-bottom: 0;
14664
+ }
14665
+
14666
+ .dm-popover[data-side="top"] .dm-popover-arrow {
14667
+ top: calc(100% + 1px);
14668
+ border-left: 0;
14669
+ border-top: 0;
14670
+ }
14671
+
14672
+ .dm-popover[data-side="right"] .dm-popover-arrow {
14673
+ left: -1px;
14674
+ margin: -5px 0 0 -5px;
14675
+ border-top: 0;
14676
+ border-right: 0;
14677
+ }
14678
+
14679
+ .dm-popover[data-side="left"] .dm-popover-arrow {
14680
+ left: calc(100% + 1px);
14681
+ border-bottom: 0;
14682
+ border-left: 0;
14683
+ }
14684
+
14685
+ .dm-popover-trigger[role="button"] {
14686
+ cursor: pointer;
14687
+ }
14688
+
14689
+ @media (prefers-reduced-motion: reduce) {
14690
+ .dm-popover {
14691
+ transition: none;
14692
+ transform: none;
14693
+ }
14694
+ }
14695
+
14521
14696
 
14522
14697
  /* ============================================
14523
14698
  THEME SYSTEM
@@ -14525,11 +14700,11 @@ td > .skeleton-text {
14525
14700
  ============================================ */
14526
14701
 
14527
14702
  /*!
14528
- * Domma Themes v0.48.0
14703
+ * Domma Themes v0.49.0
14529
14704
  * Dynamic Object Manipulation & Modeling API
14530
14705
  * (c) 2026 Darryl Waterhouse & DCBW-IT
14531
- * Built: 2026-09-27T22:11:07.079Z
14532
- * Commit: cf6d8de
14706
+ * Built: 2026-09-27T22:28:45.927Z
14707
+ * Commit: 5bc521e
14533
14708
  */
14534
14709
 
14535
14710
  /**