domma-js 0.55.0 → 0.57.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.
Files changed (116) hide show
  1. package/assets/types/generated/public/assets/flags/africa.d.ts +6 -0
  2. package/assets/types/generated/public/assets/flags/americas.d.ts +6 -0
  3. package/assets/types/generated/public/assets/flags/asia.d.ts +6 -0
  4. package/assets/types/generated/public/assets/flags/europe.d.ts +9 -0
  5. package/assets/types/generated/public/assets/flags/index.d.ts +11 -0
  6. package/assets/types/generated/public/assets/flags/oceania.d.ts +2 -0
  7. package/assets/types/generated/public/assets/icons/buildings.d.ts +6 -0
  8. package/assets/types/generated/public/assets/icons/code.d.ts +2 -0
  9. package/assets/types/generated/public/assets/icons/commerce.d.ts +7 -0
  10. package/assets/types/generated/public/assets/icons/communication.d.ts +7 -0
  11. package/assets/types/generated/public/assets/icons/devices.d.ts +6 -0
  12. package/assets/types/generated/public/assets/icons/emojis.d.ts +6 -0
  13. package/assets/types/generated/public/assets/icons/files.d.ts +7 -0
  14. package/assets/types/generated/public/assets/icons/finance.d.ts +6 -0
  15. package/assets/types/generated/public/assets/icons/forms.d.ts +5 -0
  16. package/assets/types/generated/public/assets/icons/health.d.ts +6 -0
  17. package/assets/types/generated/public/assets/icons/index.d.ts +24 -0
  18. package/assets/types/generated/public/assets/icons/media.d.ts +7 -0
  19. package/assets/types/generated/public/assets/icons/navigation.d.ts +7 -0
  20. package/assets/types/generated/public/assets/icons/seasonal.d.ts +6 -0
  21. package/assets/types/generated/public/assets/icons/social.d.ts +7 -0
  22. package/assets/types/generated/public/assets/icons/sport.d.ts +6 -0
  23. package/assets/types/generated/public/assets/icons/status.d.ts +7 -0
  24. package/assets/types/generated/public/assets/icons/transport.d.ts +7 -0
  25. package/assets/types/generated/public/assets/icons/ui.d.ts +7 -0
  26. package/assets/types/generated/public/assets/icons/weather.d.ts +6 -0
  27. package/assets/types/generated/src/auth.d.ts +424 -0
  28. package/assets/types/generated/src/avatar.d.ts +270 -0
  29. package/assets/types/generated/src/binding-source.d.ts +58 -0
  30. package/assets/types/generated/src/butterfly-drawing.d.ts +2 -0
  31. package/assets/types/generated/src/component-factory.d.ts +150 -0
  32. package/assets/types/generated/src/component.d.ts +162 -0
  33. package/assets/types/generated/src/components/back-to-top.d.ts +150 -0
  34. package/assets/types/generated/src/components/badge.d.ts +208 -0
  35. package/assets/types/generated/src/components/card.d.ts +189 -0
  36. package/assets/types/generated/src/components/command-palette.d.ts +352 -0
  37. package/assets/types/generated/src/components/dropzone.d.ts +342 -0
  38. package/assets/types/generated/src/components/focus-trap.d.ts +238 -0
  39. package/assets/types/generated/src/components/loader.d.ts +133 -0
  40. package/assets/types/generated/src/components/modal.d.ts +341 -0
  41. package/assets/types/generated/src/components/range-slider.d.ts +267 -0
  42. package/assets/types/generated/src/components/shared.d.ts +91 -0
  43. package/assets/types/generated/src/components/split-pane.d.ts +239 -0
  44. package/assets/types/generated/src/components/toast.d.ts +284 -0
  45. package/assets/types/generated/src/components/tooltip.d.ts +200 -0
  46. package/assets/types/generated/src/components/virtual-list.d.ts +340 -0
  47. package/assets/types/generated/src/config.d.ts +193 -0
  48. package/assets/types/generated/src/context-cursor.d.ts +69 -0
  49. package/assets/types/generated/src/context-menu.d.ts +596 -0
  50. package/assets/types/generated/src/dates.d.ts +367 -0
  51. package/assets/types/generated/src/dom.d.ts +1221 -0
  52. package/assets/types/generated/src/effects.d.ts +1281 -0
  53. package/assets/types/generated/src/elements.d.ts +4996 -0
  54. package/assets/types/generated/src/escape.d.ts +5 -0
  55. package/assets/types/generated/src/flags-bundle.d.ts +4 -0
  56. package/assets/types/generated/src/flags.d.ts +338 -0
  57. package/assets/types/generated/src/forms.d.ts +1060 -0
  58. package/assets/types/generated/src/globals.d.ts +45 -0
  59. package/assets/types/generated/src/http.d.ts +131 -0
  60. package/assets/types/generated/src/i18n.d.ts +261 -0
  61. package/assets/types/generated/src/icons.d.ts +213 -0
  62. package/assets/types/generated/src/index.d.ts +249 -0
  63. package/assets/types/generated/src/input-group.d.ts +135 -0
  64. package/assets/types/generated/src/models.d.ts +968 -0
  65. package/assets/types/generated/src/popover.d.ts +412 -0
  66. package/assets/types/generated/src/router.d.ts +344 -0
  67. package/assets/types/generated/src/safe-url.d.ts +10 -0
  68. package/assets/types/generated/src/sanitize.d.ts +97 -0
  69. package/assets/types/generated/src/schema-builder.d.ts +420 -0
  70. package/assets/types/generated/src/skeleton.d.ts +135 -0
  71. package/assets/types/generated/src/smooth-caret.d.ts +61 -0
  72. package/assets/types/generated/src/sortable.d.ts +369 -0
  73. package/assets/types/generated/src/storage.d.ts +93 -0
  74. package/assets/types/generated/src/tables.d.ts +901 -0
  75. package/assets/types/generated/src/theme.d.ts +277 -0
  76. package/assets/types/generated/src/ticker-tape-drawing.d.ts +2 -0
  77. package/assets/types/generated/src/treeview.d.ts +504 -0
  78. package/assets/types/generated/src/utils.d.ts +1667 -0
  79. package/assets/types/generated/src/web-components/base/domma-element.d.ts +134 -0
  80. package/assets/types/generated/src/web-components/index.d.ts +14 -0
  81. package/assets/types/generated/vendor/domma-reactive.d.ts +587 -0
  82. package/assets/types/index.d.ts +104 -216
  83. package/package.json +5 -2
  84. package/public/dist/bundles/domma-complete.css +1084 -14
  85. package/public/dist/bundles/domma-data-focused.css +1084 -14
  86. package/public/dist/bundles/domma-essentials.css +1084 -14
  87. package/public/dist/bundles/domma-full.css +1084 -14
  88. package/public/dist/bundles/domma-minimal.css +8 -8
  89. package/public/dist/domma-flags.esm.js +3 -3
  90. package/public/dist/domma-flags.esm.js.map +1 -1
  91. package/public/dist/domma-flags.min.js +3 -3
  92. package/public/dist/domma-flags.min.js.map +1 -1
  93. package/public/dist/domma-syntax.min.js +3 -3
  94. package/public/dist/domma.css +3 -3
  95. package/public/dist/domma.esm.js +5 -5
  96. package/public/dist/domma.esm.js.map +1 -1
  97. package/public/dist/domma.min.js +5 -5
  98. package/public/dist/domma.min.js.map +1 -1
  99. package/public/dist/elements.css +1073 -3
  100. package/public/dist/grid.css +3 -3
  101. package/public/dist/syntax.css +3 -3
  102. package/public/dist/themes/domma-themes.css +3 -3
  103. package/templates/kickstart/frontend/types/domma.d.ts +2 -1
  104. package/assets/types/config.d.ts +0 -136
  105. package/assets/types/dates.d.ts +0 -209
  106. package/assets/types/dom.d.ts +0 -448
  107. package/assets/types/elements.d.ts +0 -682
  108. package/assets/types/flags.d.ts +0 -130
  109. package/assets/types/http.d.ts +0 -97
  110. package/assets/types/icons.d.ts +0 -147
  111. package/assets/types/models.d.ts +0 -260
  112. package/assets/types/smooth-caret.d.ts +0 -12
  113. package/assets/types/storage.d.ts +0 -93
  114. package/assets/types/tables.d.ts +0 -327
  115. package/assets/types/theme.d.ts +0 -137
  116. package/assets/types/utils.d.ts +0 -675
@@ -1,9 +1,9 @@
1
1
  /*!
2
- * Domma Elements CSS v0.55.0
2
+ * Domma Elements CSS v0.57.0
3
3
  * Dynamic Object Manipulation & Modeling API
4
4
  * (c) 2026 Darryl Waterhouse & DCBW-IT
5
- * Built: 2026-10-24T15:07:57.510Z
6
- * Commit: 253e259
5
+ * Built: 2026-10-24T20:04:51.175Z
6
+ * Commit: 8ca8224
7
7
  */
8
8
 
9
9
  /**
@@ -3986,6 +3986,12 @@ code {
3986
3986
  z-index: 10000;
3987
3987
  }
3988
3988
 
3989
+ /* A slideover takes focus itself on open (its focus trap), so the first Tab reaches its
3990
+ first control; the panel is not a tab stop and needs no ring of its own. */
3991
+ .dm-slideover[tabindex="-1"]:focus {
3992
+ outline: none;
3993
+ }
3994
+
3989
3995
  .dm-dialog-overlay {
3990
3996
  position: fixed;
3991
3997
  top: 0;
@@ -9938,3 +9944,1067 @@ a.avatar-tone-7:hover {
9938
9944
  a.avatar-more-person:hover .avatar-more-name {
9939
9945
  text-decoration: underline;
9940
9946
  }
9947
+
9948
+ /* ===== Command Palette ===== */
9949
+ /*
9950
+ * E.commandPalette(options) - src/components/command-palette.js
9951
+ *
9952
+ * The overlay covers the viewport: a backdrop and a panel near the top, the way the
9953
+ * modal looks (--dm-modal-* tokens), so it sits with the site's dialogs in every theme.
9954
+ * Above modals and slideovers, which it is often opened over; below popovers (10045)
9955
+ * and the context menu (10050).
9956
+ */
9957
+ .dm-command-palette {
9958
+ position: fixed;
9959
+ inset: 0;
9960
+ z-index: 10040;
9961
+ display: flex;
9962
+ justify-content: center;
9963
+ align-items: flex-start;
9964
+ padding: 12vh 1rem 1rem;
9965
+ box-sizing: border-box;
9966
+ --dm-command-palette-duration: 150ms;
9967
+ }
9968
+
9969
+ .dm-command-palette[hidden] {
9970
+ display: none;
9971
+ }
9972
+
9973
+ .dm-command-palette *,
9974
+ .dm-command-palette *::before,
9975
+ .dm-command-palette *::after {
9976
+ box-sizing: border-box;
9977
+ }
9978
+
9979
+ .dm-command-palette-backdrop {
9980
+ position: fixed;
9981
+ inset: 0;
9982
+ background: var(--dm-modal-backdrop);
9983
+ opacity: 0;
9984
+ transition: opacity var(--dm-command-palette-duration) ease;
9985
+ }
9986
+
9987
+ .dm-command-palette-panel {
9988
+ position: relative;
9989
+ display: flex;
9990
+ flex-direction: column;
9991
+ width: min(40rem, 100%);
9992
+ max-height: min(32rem, 76vh);
9993
+ background: var(--dm-modal-bg);
9994
+ color: var(--dm-text);
9995
+ border: 1px solid var(--dm-modal-border);
9996
+ border-radius: var(--dm-radius-lg);
9997
+ box-shadow: var(--dm-modal-shadow);
9998
+ overflow: hidden;
9999
+ opacity: 0;
10000
+ transform: scale(0.97) translateY(-6px);
10001
+ transition:
10002
+ opacity var(--dm-command-palette-duration) ease,
10003
+ transform var(--dm-command-palette-duration) cubic-bezier(0.16, 1, 0.3, 1);
10004
+ }
10005
+
10006
+ .dm-command-palette.is-open .dm-command-palette-backdrop { opacity: 1; }
10007
+ .dm-command-palette.is-open .dm-command-palette-panel { opacity: 1; transform: none; }
10008
+
10009
+ @media (prefers-reduced-motion: reduce) {
10010
+ .dm-command-palette-backdrop,
10011
+ .dm-command-palette-panel {
10012
+ transition: none;
10013
+ }
10014
+ }
10015
+
10016
+ /* Where you are in nested pages, with a way back up. */
10017
+ .dm-command-palette-crumbs {
10018
+ display: flex;
10019
+ align-items: center;
10020
+ gap: 0.5rem;
10021
+ padding: 0.625rem 0.875rem 0;
10022
+ font-size: 0.8125rem;
10023
+ color: var(--dm-text-muted);
10024
+ }
10025
+
10026
+ .dm-command-palette-crumbs[hidden] { display: none; }
10027
+
10028
+ .dm-command-palette-back {
10029
+ display: inline-flex;
10030
+ align-items: center;
10031
+ justify-content: center;
10032
+ width: 1.75rem;
10033
+ height: 1.75rem;
10034
+ padding: 0;
10035
+ border: 1px solid var(--dm-border);
10036
+ border-radius: var(--dm-radius-sm);
10037
+ background: transparent;
10038
+ color: var(--dm-text);
10039
+ cursor: pointer;
10040
+ }
10041
+
10042
+ .dm-command-palette-back:hover { background: var(--dm-hover-bg); }
10043
+
10044
+ .dm-command-palette-back:focus-visible {
10045
+ outline: 2px solid var(--dm-border-focus);
10046
+ outline-offset: 1px;
10047
+ }
10048
+
10049
+ .dm-command-palette-trail {
10050
+ display: flex;
10051
+ flex-wrap: wrap;
10052
+ gap: 0.25rem;
10053
+ margin: 0;
10054
+ padding: 0;
10055
+ list-style: none;
10056
+ }
10057
+
10058
+ .dm-command-palette-trail li + li::before {
10059
+ content: "/";
10060
+ margin-right: 0.25rem;
10061
+ opacity: 0.6;
10062
+ }
10063
+
10064
+ .dm-command-palette-trail [aria-current] { color: var(--dm-text); font-weight: 500; }
10065
+
10066
+ .dm-command-palette-search {
10067
+ display: flex;
10068
+ align-items: center;
10069
+ gap: 0.625rem;
10070
+ padding: 0.75rem 0.875rem;
10071
+ border-bottom: 1px solid var(--dm-border);
10072
+ }
10073
+
10074
+ .dm-command-palette-search-icon {
10075
+ display: inline-flex;
10076
+ color: var(--dm-text-muted);
10077
+ }
10078
+
10079
+ .dm-command-palette-input {
10080
+ flex: 1;
10081
+ min-width: 0;
10082
+ padding: 0.25rem 0;
10083
+ border: 0;
10084
+ background: transparent;
10085
+ color: var(--dm-text);
10086
+ font: inherit;
10087
+ font-size: 1rem;
10088
+ outline: none;
10089
+ }
10090
+
10091
+ .dm-command-palette-input::placeholder { color: var(--dm-input-placeholder); opacity: 1; }
10092
+
10093
+ /* The box is the focus; the panel shows it rather than a ring round a borderless input. */
10094
+ .dm-command-palette-search:focus-within {
10095
+ border-bottom-color: var(--dm-border-focus);
10096
+ }
10097
+
10098
+ .dm-command-palette-spinner {
10099
+ width: 1rem;
10100
+ height: 1rem;
10101
+ border: 2px solid var(--dm-border);
10102
+ border-top-color: var(--dm-primary);
10103
+ border-radius: 50%;
10104
+ animation: dm-command-palette-spin 0.7s linear infinite;
10105
+ }
10106
+
10107
+ .dm-command-palette-spinner[hidden] { display: none; }
10108
+
10109
+ @keyframes dm-command-palette-spin {
10110
+ to { transform: rotate(360deg); }
10111
+ }
10112
+
10113
+ @media (prefers-reduced-motion: reduce) {
10114
+ .dm-command-palette-spinner { animation-duration: 2.4s; }
10115
+ }
10116
+
10117
+ .dm-command-palette-list {
10118
+ flex: 1 1 auto;
10119
+ min-height: 0;
10120
+ overflow-y: auto;
10121
+ overscroll-behavior: contain;
10122
+ padding: 0.375rem;
10123
+ }
10124
+
10125
+ .dm-command-palette-list[hidden] { display: none; }
10126
+
10127
+ .dm-command-palette-group + .dm-command-palette-group,
10128
+ .dm-command-palette-group + .dm-command-palette-item,
10129
+ .dm-command-palette-item + .dm-command-palette-group {
10130
+ margin-top: 0.375rem;
10131
+ }
10132
+
10133
+ .dm-command-palette-group-heading {
10134
+ padding: 0.375rem 0.625rem 0.25rem;
10135
+ font-size: 0.75rem;
10136
+ font-weight: 600;
10137
+ letter-spacing: 0.02em;
10138
+ color: var(--dm-text-muted);
10139
+ }
10140
+
10141
+ .dm-command-palette-item {
10142
+ display: flex;
10143
+ align-items: center;
10144
+ gap: 0.625rem;
10145
+ min-height: 2.5rem;
10146
+ padding: 0.375rem 0.625rem;
10147
+ border-radius: var(--dm-radius-md);
10148
+ color: var(--dm-text);
10149
+ cursor: pointer;
10150
+ user-select: none;
10151
+ }
10152
+
10153
+ .dm-command-palette-item.is-active {
10154
+ background: var(--dm-selected-bg);
10155
+ }
10156
+
10157
+ /* Forced colours drop backgrounds: the active row keeps an outline instead. */
10158
+ @media (forced-colors: active) {
10159
+ .dm-command-palette-item.is-active { outline: 2px solid Highlight; }
10160
+ }
10161
+
10162
+ .dm-command-palette-item[aria-disabled="true"] {
10163
+ cursor: default;
10164
+ opacity: var(--dm-disabled-opacity);
10165
+ }
10166
+
10167
+ .dm-command-palette-icon {
10168
+ flex: 0 0 1rem;
10169
+ display: inline-flex;
10170
+ justify-content: center;
10171
+ color: var(--dm-text-muted);
10172
+ }
10173
+
10174
+ .dm-command-palette-item.is-active .dm-command-palette-icon { color: var(--dm-text); }
10175
+
10176
+ .dm-command-palette-text {
10177
+ flex: 1;
10178
+ min-width: 0;
10179
+ display: flex;
10180
+ flex-direction: column;
10181
+ line-height: 1.3;
10182
+ }
10183
+
10184
+ .dm-command-palette-title,
10185
+ .dm-command-palette-subtitle {
10186
+ overflow: hidden;
10187
+ text-overflow: ellipsis;
10188
+ white-space: nowrap;
10189
+ }
10190
+
10191
+ .dm-command-palette-subtitle {
10192
+ font-size: 0.8125rem;
10193
+ color: var(--dm-text-muted);
10194
+ }
10195
+
10196
+ .dm-command-palette-match {
10197
+ color: var(--dm-primary);
10198
+ font-weight: 600;
10199
+ }
10200
+
10201
+ .dm-command-palette-shortcut,
10202
+ .dm-command-palette-hint {
10203
+ display: inline-flex;
10204
+ align-items: center;
10205
+ gap: 0.25rem;
10206
+ }
10207
+
10208
+ .dm-command-palette kbd {
10209
+ display: inline-flex;
10210
+ align-items: center;
10211
+ justify-content: center;
10212
+ min-width: 1.375rem;
10213
+ height: 1.375rem;
10214
+ padding: 0 0.3rem;
10215
+ border: 1px solid var(--dm-border);
10216
+ border-bottom-width: 2px;
10217
+ border-radius: var(--dm-radius-sm);
10218
+ background: var(--dm-background-alt);
10219
+ color: var(--dm-text-secondary);
10220
+ font-family: inherit;
10221
+ font-size: 0.6875rem;
10222
+ line-height: 1;
10223
+ }
10224
+
10225
+ .dm-command-palette-more {
10226
+ display: inline-flex;
10227
+ color: var(--dm-text-muted);
10228
+ }
10229
+
10230
+ .dm-command-palette-status {
10231
+ padding: 1.5rem 1rem;
10232
+ text-align: center;
10233
+ font-size: 0.875rem;
10234
+ color: var(--dm-text-muted);
10235
+ }
10236
+
10237
+ .dm-command-palette-status[hidden] { display: none; }
10238
+ .dm-command-palette-status[data-state="error"] { color: var(--dm-danger); }
10239
+
10240
+ .dm-command-palette-footer {
10241
+ display: flex;
10242
+ flex-wrap: wrap;
10243
+ gap: 0.5rem 1rem;
10244
+ padding: 0.5rem 0.875rem;
10245
+ border-top: 1px solid var(--dm-border);
10246
+ background: var(--dm-background-alt);
10247
+ color: var(--dm-text-secondary);
10248
+ font-size: 0.75rem;
10249
+ }
10250
+
10251
+ /* Phones: the whole width, from the top. */
10252
+ @media (max-width: 640px) {
10253
+ .dm-command-palette {
10254
+ padding: 0;
10255
+ }
10256
+
10257
+ .dm-command-palette-panel {
10258
+ width: 100%;
10259
+ max-height: 85vh;
10260
+ border-width: 0 0 1px;
10261
+ border-radius: 0 0 var(--dm-radius-lg) var(--dm-radius-lg);
10262
+ }
10263
+
10264
+ .dm-command-palette-footer { display: none; }
10265
+ }
10266
+
10267
+ /* ===== Split Pane ===== */
10268
+ /* E.splitPane(container): flexbox panes with a fixed flex-basis each, gutters between. */
10269
+ .dm-split {
10270
+ display: flex;
10271
+ min-width: 0;
10272
+ min-height: 0;
10273
+ }
10274
+
10275
+ .dm-split-horizontal {
10276
+ flex-direction: row;
10277
+ }
10278
+
10279
+ .dm-split-vertical {
10280
+ flex-direction: column;
10281
+ }
10282
+
10283
+ .dm-split > .dm-split-pane {
10284
+ min-width: 0;
10285
+ min-height: 0;
10286
+ overflow: auto;
10287
+ }
10288
+
10289
+ .dm-split-collapsed {
10290
+ overflow: hidden;
10291
+ }
10292
+
10293
+ .dm-split > .dm-split-gutter {
10294
+ position: relative;
10295
+ display: flex;
10296
+ align-items: center;
10297
+ justify-content: center;
10298
+ background: var(--dm-border);
10299
+ touch-action: none;
10300
+ user-select: none;
10301
+ transition: background-color var(--dm-transition-fast);
10302
+ }
10303
+
10304
+ /* A thin grip line drawn inside the gutter. */
10305
+ .dm-split > .dm-split-gutter::before {
10306
+ content: "";
10307
+ border-radius: var(--dm-radius-full);
10308
+ background: var(--dm-text-muted);
10309
+ opacity: 0.6;
10310
+ }
10311
+
10312
+ .dm-split-horizontal > .dm-split-gutter::before {
10313
+ width: 2px;
10314
+ height: 1.5rem;
10315
+ }
10316
+
10317
+ .dm-split-vertical > .dm-split-gutter::before {
10318
+ width: 1.5rem;
10319
+ height: 2px;
10320
+ }
10321
+
10322
+ .dm-split > .dm-split-gutter:hover,
10323
+ .dm-split > .dm-split-gutter.is-dragging {
10324
+ background: var(--dm-primary);
10325
+ }
10326
+
10327
+ .dm-split > .dm-split-gutter:hover::before,
10328
+ .dm-split > .dm-split-gutter.is-dragging::before {
10329
+ background: var(--dm-primary-text);
10330
+ }
10331
+
10332
+ .dm-split > .dm-split-gutter:focus-visible {
10333
+ outline: 2px solid var(--dm-primary);
10334
+ outline-offset: 1px;
10335
+ z-index: 1;
10336
+ }
10337
+
10338
+ .dm-split-disabled > .dm-split-gutter,
10339
+ .dm-split-disabled > .dm-split-gutter:hover {
10340
+ background: var(--dm-border);
10341
+ cursor: default;
10342
+ }
10343
+
10344
+ /* While dragging, the panes (and any iframe in them) take no pointer events, so the
10345
+ gutter's captured pointer keeps every move, and text does not get selected. */
10346
+ .dm-split-dragging > .dm-split-pane {
10347
+ pointer-events: none;
10348
+ user-select: none;
10349
+ }
10350
+
10351
+ .dm-split-horizontal.dm-split-dragging {
10352
+ cursor: col-resize;
10353
+ }
10354
+
10355
+ .dm-split-vertical.dm-split-dragging {
10356
+ cursor: row-resize;
10357
+ }
10358
+
10359
+ .dm-split-toggle {
10360
+ position: absolute;
10361
+ z-index: 1;
10362
+ display: inline-flex;
10363
+ align-items: center;
10364
+ justify-content: center;
10365
+ width: 1.25rem;
10366
+ height: 1.25rem;
10367
+ padding: 0;
10368
+ border: 1px solid var(--dm-border);
10369
+ border-radius: var(--dm-radius-full);
10370
+ background: var(--dm-surface);
10371
+ color: var(--dm-text);
10372
+ cursor: pointer;
10373
+ font: inherit;
10374
+ line-height: 1;
10375
+ }
10376
+
10377
+ .dm-split-horizontal > .dm-split-gutter > .dm-split-toggle {
10378
+ top: 0.5rem;
10379
+ }
10380
+
10381
+ .dm-split-vertical > .dm-split-gutter > .dm-split-toggle {
10382
+ left: 0.5rem;
10383
+ }
10384
+
10385
+ .dm-split-toggle::before {
10386
+ content: "";
10387
+ width: 0;
10388
+ height: 0;
10389
+ border: 4px solid transparent;
10390
+ }
10391
+
10392
+ .dm-split-horizontal > .dm-split-gutter > .dm-split-toggle::before {
10393
+ border-right-color: currentColor;
10394
+ margin-right: 4px;
10395
+ }
10396
+
10397
+ .dm-split-vertical > .dm-split-gutter > .dm-split-toggle::before {
10398
+ border-bottom-color: currentColor;
10399
+ margin-bottom: 4px;
10400
+ }
10401
+
10402
+ .dm-split-toggle:hover {
10403
+ background: var(--dm-hover-bg);
10404
+ }
10405
+
10406
+ @media (prefers-reduced-motion: reduce) {
10407
+ .dm-split > .dm-split-gutter {
10408
+ transition: none;
10409
+ }
10410
+ }
10411
+
10412
+ /* ===== Virtual List ===== */
10413
+ /* E.virtualList(container): the container scrolls; a spacer gives it its height and the
10414
+ rendered rows are placed by transform. The container needs a height from your CSS. */
10415
+ .dm-vlist {
10416
+ position: relative;
10417
+ overflow: auto;
10418
+ overflow-anchor: none;
10419
+ contain: content;
10420
+ background: var(--dm-surface);
10421
+ color: var(--dm-text);
10422
+ }
10423
+
10424
+ .dm-vlist-spacer {
10425
+ width: 1px;
10426
+ pointer-events: none;
10427
+ }
10428
+
10429
+ .dm-vlist-items {
10430
+ position: absolute;
10431
+ top: 0;
10432
+ left: 0;
10433
+ right: 0;
10434
+ height: 0;
10435
+ outline: none;
10436
+ }
10437
+
10438
+ .dm-vlist-row {
10439
+ position: absolute;
10440
+ top: 0;
10441
+ left: 0;
10442
+ right: 0;
10443
+ box-sizing: border-box;
10444
+ will-change: transform;
10445
+ }
10446
+
10447
+ .dm-vlist-fixed .dm-vlist-row {
10448
+ overflow: hidden;
10449
+ }
10450
+
10451
+ .dm-vlist-row:focus-visible {
10452
+ outline: 2px solid var(--dm-primary);
10453
+ outline-offset: -2px;
10454
+ }
10455
+
10456
+ .dm-vlist-status {
10457
+ position: absolute;
10458
+ top: 0;
10459
+ left: 0;
10460
+ right: 0;
10461
+ display: flex;
10462
+ align-items: center;
10463
+ justify-content: center;
10464
+ gap: var(--dm-space-2);
10465
+ padding: var(--dm-space-3);
10466
+ color: var(--dm-text-muted);
10467
+ box-sizing: border-box;
10468
+ }
10469
+
10470
+ .dm-vlist-status[hidden] {
10471
+ display: none;
10472
+ }
10473
+
10474
+ .dm-vlist-loading,
10475
+ .dm-vlist-error {
10476
+ display: inline-flex;
10477
+ align-items: center;
10478
+ gap: var(--dm-space-2);
10479
+ }
10480
+
10481
+ /* Plain text colour: --dm-danger is not readable on --dm-surface in every theme. */
10482
+ .dm-vlist-error {
10483
+ color: var(--dm-text);
10484
+ }
10485
+
10486
+ .dm-vlist-spinner {
10487
+ width: 1rem;
10488
+ height: 1rem;
10489
+ border: 2px solid var(--dm-border);
10490
+ border-top-color: var(--dm-primary);
10491
+ border-radius: var(--dm-radius-full);
10492
+ animation: dm-loader-spin 0.8s linear infinite;
10493
+ }
10494
+
10495
+ @media (prefers-reduced-motion: reduce) {
10496
+ .dm-vlist-spinner {
10497
+ animation-duration: 2.4s;
10498
+ }
10499
+ }
10500
+
10501
+ /* ===== Dropzone ===== */
10502
+ /*
10503
+ * E.dropzone(target, options) - src/components/dropzone.js
10504
+ *
10505
+ * The caller's element is the area (.dm-dropzone, role="button"); the file list
10506
+ * (.dm-dropzone-files) is drawn after it, because a button cannot hold buttons.
10507
+ * Theme tokens only, so every theme and its dark variant colour it.
10508
+ */
10509
+ .dm-dropzone {
10510
+ display: flex;
10511
+ flex-direction: column;
10512
+ align-items: center;
10513
+ justify-content: center;
10514
+ gap: var(--dm-space-2);
10515
+ min-height: 8rem;
10516
+ padding: var(--dm-space-6) var(--dm-space-4);
10517
+ border: 2px dashed var(--dm-border);
10518
+ border-radius: var(--dm-radius-md);
10519
+ background: var(--dm-surface);
10520
+ color: var(--dm-text);
10521
+ text-align: center;
10522
+ cursor: pointer;
10523
+ transition: border-color var(--dm-transition-fast), background-color var(--dm-transition-fast);
10524
+ }
10525
+
10526
+ .dm-dropzone:hover {
10527
+ border-color: var(--dm-primary);
10528
+ }
10529
+
10530
+ .dm-dropzone:focus-visible {
10531
+ outline: 2px solid var(--dm-border-focus);
10532
+ outline-offset: 2px;
10533
+ border-color: var(--dm-primary);
10534
+ }
10535
+
10536
+ .dm-dropzone.is-dragover {
10537
+ border-color: var(--dm-primary);
10538
+ border-style: solid;
10539
+ background: color-mix(in srgb, var(--dm-primary) 10%, var(--dm-surface));
10540
+ }
10541
+
10542
+ .dm-dropzone.is-invalid {
10543
+ border-color: var(--dm-danger);
10544
+ }
10545
+
10546
+ .dm-dropzone.is-disabled {
10547
+ opacity: var(--dm-disabled-opacity, 0.6);
10548
+ cursor: not-allowed;
10549
+ }
10550
+
10551
+ .dm-dropzone.is-disabled:hover {
10552
+ border-color: var(--dm-border);
10553
+ }
10554
+
10555
+ .dm-dropzone-prompt {
10556
+ display: flex;
10557
+ flex-direction: column;
10558
+ align-items: center;
10559
+ gap: var(--dm-space-1);
10560
+ pointer-events: none;
10561
+ }
10562
+
10563
+ .dm-dropzone-icon {
10564
+ color: var(--dm-text-secondary);
10565
+ }
10566
+
10567
+ .dm-dropzone:hover .dm-dropzone-icon,
10568
+ .dm-dropzone.is-dragover .dm-dropzone-icon {
10569
+ color: var(--dm-text);
10570
+ }
10571
+
10572
+ .dm-dropzone-text {
10573
+ font-weight: 500;
10574
+ }
10575
+
10576
+ .dm-dropzone-hint {
10577
+ color: var(--dm-text-muted);
10578
+ font-size: var(--dm-font-size-sm);
10579
+ }
10580
+
10581
+ .dm-dropzone-files {
10582
+ display: flex;
10583
+ flex-direction: column;
10584
+ gap: var(--dm-space-2);
10585
+ margin: var(--dm-space-3) 0;
10586
+ padding: 0;
10587
+ list-style: none;
10588
+ }
10589
+
10590
+ .dm-dropzone-files[hidden] {
10591
+ display: none;
10592
+ }
10593
+
10594
+ .dm-dropzone-file {
10595
+ display: grid;
10596
+ grid-template-columns: 2.75rem minmax(0, 1fr) auto auto;
10597
+ grid-template-areas: "thumb meta retry remove" "thumb bar bar bar";
10598
+ align-items: center;
10599
+ column-gap: var(--dm-space-3);
10600
+ row-gap: var(--dm-space-1);
10601
+ padding: var(--dm-space-2) var(--dm-space-3);
10602
+ border: 1px solid var(--dm-border);
10603
+ border-radius: var(--dm-radius-md);
10604
+ background: var(--dm-surface);
10605
+ color: var(--dm-text);
10606
+ }
10607
+
10608
+ .dm-dropzone-file[data-status="error"] {
10609
+ border-color: var(--dm-danger);
10610
+ }
10611
+
10612
+ .dm-dropzone-thumb {
10613
+ grid-area: thumb;
10614
+ display: flex;
10615
+ align-items: center;
10616
+ justify-content: center;
10617
+ width: 2.75rem;
10618
+ height: 2.75rem;
10619
+ overflow: hidden;
10620
+ border-radius: var(--dm-radius-sm);
10621
+ background: color-mix(in srgb, var(--dm-text) 8%, var(--dm-surface));
10622
+ color: var(--dm-text-secondary);
10623
+ font-size: var(--dm-font-size-xs);
10624
+ font-weight: 600;
10625
+ }
10626
+
10627
+ .dm-dropzone-thumb img {
10628
+ display: block;
10629
+ width: 100%;
10630
+ height: 100%;
10631
+ object-fit: cover;
10632
+ }
10633
+
10634
+ .dm-dropzone-meta {
10635
+ grid-area: meta;
10636
+ display: flex;
10637
+ flex-wrap: wrap;
10638
+ align-items: baseline;
10639
+ column-gap: var(--dm-space-2);
10640
+ min-width: 0;
10641
+ }
10642
+
10643
+ .dm-dropzone-name {
10644
+ flex: 1 1 auto;
10645
+ min-width: 0;
10646
+ overflow: hidden;
10647
+ text-overflow: ellipsis;
10648
+ white-space: nowrap;
10649
+ }
10650
+
10651
+ .dm-dropzone-size,
10652
+ .dm-dropzone-status {
10653
+ color: var(--dm-text-muted);
10654
+ font-size: var(--dm-font-size-sm);
10655
+ }
10656
+
10657
+ /* State colours stay on borders and bars (--dm-danger / --dm-success as text on a
10658
+ surface fail AA in several themes); the words carry the state */
10659
+ .dm-dropzone-file[data-status="error"] .dm-dropzone-status {
10660
+ color: var(--dm-text);
10661
+ font-weight: 600;
10662
+ }
10663
+
10664
+ .dm-dropzone-progress {
10665
+ grid-area: bar;
10666
+ display: block;
10667
+ height: 0.375rem;
10668
+ overflow: hidden;
10669
+ border-radius: var(--dm-radius-full);
10670
+ background: color-mix(in srgb, var(--dm-text) 10%, var(--dm-surface));
10671
+ }
10672
+
10673
+ .dm-dropzone-progress[hidden] {
10674
+ display: none;
10675
+ }
10676
+
10677
+ .dm-dropzone-progress-bar {
10678
+ display: block;
10679
+ width: 0;
10680
+ height: 100%;
10681
+ border-radius: inherit;
10682
+ background: var(--dm-primary);
10683
+ }
10684
+
10685
+ .dm-dropzone-file[data-status="done"] .dm-dropzone-progress-bar {
10686
+ background: var(--dm-success);
10687
+ }
10688
+
10689
+ .dm-dropzone-retry {
10690
+ grid-area: retry;
10691
+ }
10692
+
10693
+ .dm-dropzone-retry[hidden] {
10694
+ display: none;
10695
+ }
10696
+
10697
+ .dm-dropzone-remove {
10698
+ grid-area: remove;
10699
+ display: inline-flex;
10700
+ align-items: center;
10701
+ justify-content: center;
10702
+ width: 2rem;
10703
+ height: 2rem;
10704
+ padding: 0;
10705
+ border: 0;
10706
+ border-radius: var(--dm-radius-full);
10707
+ background: transparent;
10708
+ color: var(--dm-text-muted);
10709
+ font-size: 1.25rem;
10710
+ line-height: 1;
10711
+ cursor: pointer;
10712
+ }
10713
+
10714
+ .dm-dropzone-remove:hover:not(:disabled) {
10715
+ background: var(--dm-hover-bg);
10716
+ color: var(--dm-text);
10717
+ }
10718
+
10719
+ .dm-dropzone-remove:focus-visible {
10720
+ outline: 2px solid var(--dm-border-focus);
10721
+ outline-offset: 1px;
10722
+ }
10723
+
10724
+ @media (prefers-reduced-motion: no-preference) {
10725
+ .dm-dropzone-progress-bar {
10726
+ transition: width var(--dm-transition-fast);
10727
+ }
10728
+ }
10729
+
10730
+ @media (prefers-reduced-motion: reduce) {
10731
+ .dm-dropzone {
10732
+ transition: none;
10733
+ }
10734
+ }
10735
+
10736
+ /* ===== Range Slider ===== */
10737
+ /*
10738
+ * E.rangeSlider(target, options) / E.slider - src/components/range-slider.js
10739
+ *
10740
+ * The real <input type="range"> elements are hidden; this is the drawn slider in
10741
+ * front of them. The root is the hit area (2.75rem tall - a comfortable touch
10742
+ * target) with a thin track through its middle. Thumbs are positioned by JS
10743
+ * with left / right / bottom as a percentage and centred with a transform.
10744
+ */
10745
+ .dm-range-slider {
10746
+ position: relative;
10747
+ display: block;
10748
+ height: 2.75rem;
10749
+ margin: 0 0.625rem;
10750
+ color: var(--dm-text);
10751
+ cursor: pointer;
10752
+ user-select: none;
10753
+ -webkit-user-select: none;
10754
+ /* A horizontal slider still lets the page scroll vertically on touch */
10755
+ touch-action: pan-y;
10756
+ -webkit-tap-highlight-color: transparent;
10757
+ }
10758
+
10759
+ .dm-range-slider.has-tick-labels,
10760
+ .dm-range-slider.has-marks {
10761
+ margin-bottom: 1.5rem;
10762
+ }
10763
+
10764
+ /* A tooltip that is always shown needs room above the track */
10765
+ .dm-range-slider[data-tooltip="always"]:not([data-orientation="vertical"]) {
10766
+ margin-top: 1.75rem;
10767
+ }
10768
+
10769
+ .dm-range-slider[data-orientation="vertical"] {
10770
+ display: inline-block;
10771
+ width: 2.75rem;
10772
+ height: 12rem;
10773
+ margin: 0.625rem 0;
10774
+ touch-action: pan-x;
10775
+ vertical-align: top;
10776
+ }
10777
+
10778
+ .dm-range-slider[data-orientation="vertical"].has-tick-labels,
10779
+ .dm-range-slider[data-orientation="vertical"].has-marks {
10780
+ margin-bottom: 0.625rem;
10781
+ margin-right: 3rem;
10782
+ }
10783
+
10784
+ .dm-range-track {
10785
+ position: absolute;
10786
+ left: 0;
10787
+ right: 0;
10788
+ top: 50%;
10789
+ height: 0.375rem;
10790
+ transform: translateY(-50%);
10791
+ border-radius: var(--dm-radius-full);
10792
+ background: color-mix(in srgb, var(--dm-text) 16%, var(--dm-surface));
10793
+ }
10794
+
10795
+ .dm-range-slider[data-orientation="vertical"] .dm-range-track {
10796
+ left: 50%;
10797
+ right: auto;
10798
+ top: 0;
10799
+ bottom: 0;
10800
+ width: 0.375rem;
10801
+ height: auto;
10802
+ transform: translateX(-50%);
10803
+ }
10804
+
10805
+ .dm-range-fill {
10806
+ position: absolute;
10807
+ top: 0;
10808
+ bottom: 0;
10809
+ border-radius: inherit;
10810
+ background: var(--dm-primary);
10811
+ }
10812
+
10813
+ .dm-range-slider[data-orientation="vertical"] .dm-range-fill {
10814
+ left: 0;
10815
+ right: 0;
10816
+ top: auto;
10817
+ }
10818
+
10819
+ .dm-range-thumb {
10820
+ position: absolute;
10821
+ top: 50%;
10822
+ z-index: 2;
10823
+ width: 1.25rem;
10824
+ height: 1.25rem;
10825
+ border: 2px solid var(--dm-primary);
10826
+ border-radius: var(--dm-radius-full);
10827
+ background: var(--dm-surface);
10828
+ box-shadow: var(--dm-shadow-md);
10829
+ transform: translate(-50%, -50%);
10830
+ cursor: grab;
10831
+ touch-action: none;
10832
+ }
10833
+
10834
+ .dm-range-slider[dir="rtl"] .dm-range-thumb {
10835
+ transform: translate(50%, -50%);
10836
+ }
10837
+
10838
+ .dm-range-slider[data-orientation="vertical"] .dm-range-thumb {
10839
+ top: auto;
10840
+ left: 50%;
10841
+ transform: translate(-50%, 50%);
10842
+ }
10843
+
10844
+ .dm-range-thumb:hover {
10845
+ box-shadow: 0 0 0 0.375rem var(--dm-focus-ring);
10846
+ }
10847
+
10848
+ .dm-range-thumb:focus-visible {
10849
+ outline: 2px solid var(--dm-border-focus);
10850
+ outline-offset: 2px;
10851
+ box-shadow: 0 0 0 0.375rem var(--dm-focus-ring);
10852
+ }
10853
+
10854
+ /* The thumb being moved sits above the other when they meet */
10855
+ .dm-range-thumb.is-active,
10856
+ .dm-range-thumb:focus-visible {
10857
+ z-index: 3;
10858
+ }
10859
+
10860
+ .dm-range-slider.is-dragging,
10861
+ .dm-range-slider.is-dragging .dm-range-thumb {
10862
+ cursor: grabbing;
10863
+ }
10864
+
10865
+ .dm-range-tooltip {
10866
+ position: absolute;
10867
+ bottom: calc(100% + 0.5rem);
10868
+ left: 50%;
10869
+ padding: 0.125rem 0.5rem;
10870
+ border-radius: var(--dm-radius-sm);
10871
+ background: var(--dm-text);
10872
+ color: var(--dm-surface);
10873
+ font-size: var(--dm-font-size-xs);
10874
+ line-height: 1.5;
10875
+ white-space: nowrap;
10876
+ pointer-events: none;
10877
+ transform: translateX(-50%);
10878
+ opacity: 0;
10879
+ visibility: hidden;
10880
+ }
10881
+
10882
+ .dm-range-slider[data-orientation="vertical"] .dm-range-tooltip {
10883
+ bottom: auto;
10884
+ left: calc(100% + 0.5rem);
10885
+ top: 50%;
10886
+ transform: translateY(-50%);
10887
+ }
10888
+
10889
+ .dm-range-slider[data-tooltip="always"] .dm-range-tooltip,
10890
+ .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:hover .dm-range-tooltip,
10891
+ .dm-range-slider[data-tooltip="hover"] .dm-range-thumb:focus-visible .dm-range-tooltip,
10892
+ .dm-range-slider[data-tooltip="hover"] .dm-range-thumb.is-active .dm-range-tooltip {
10893
+ opacity: 1;
10894
+ visibility: visible;
10895
+ }
10896
+
10897
+ .dm-range-ticks,
10898
+ .dm-range-marks {
10899
+ position: absolute;
10900
+ inset: 0;
10901
+ pointer-events: none;
10902
+ }
10903
+
10904
+ .dm-range-tick,
10905
+ .dm-range-mark {
10906
+ position: absolute;
10907
+ top: calc(50% + 0.375rem);
10908
+ width: 1px;
10909
+ height: 0.375rem;
10910
+ background: var(--dm-border-dark);
10911
+ transform: translateX(-50%);
10912
+ }
10913
+
10914
+ .dm-range-slider[dir="rtl"] .dm-range-tick,
10915
+ .dm-range-slider[dir="rtl"] .dm-range-mark {
10916
+ transform: translateX(50%);
10917
+ }
10918
+
10919
+ .dm-range-tick.is-in-range {
10920
+ background: var(--dm-primary);
10921
+ }
10922
+
10923
+ .dm-range-slider[data-orientation="vertical"] .dm-range-tick,
10924
+ .dm-range-slider[data-orientation="vertical"] .dm-range-mark {
10925
+ top: auto;
10926
+ left: calc(50% + 0.375rem);
10927
+ width: 0.375rem;
10928
+ height: 1px;
10929
+ transform: translateY(50%);
10930
+ }
10931
+
10932
+ .dm-range-mark {
10933
+ width: 0.375rem;
10934
+ height: 0.375rem;
10935
+ top: 50%;
10936
+ border-radius: var(--dm-radius-full);
10937
+ background: var(--dm-surface);
10938
+ border: 1px solid var(--dm-border-dark);
10939
+ transform: translate(-50%, -50%);
10940
+ pointer-events: auto;
10941
+ z-index: 1;
10942
+ }
10943
+
10944
+ .dm-range-slider[dir="rtl"] .dm-range-mark {
10945
+ transform: translate(50%, -50%);
10946
+ }
10947
+
10948
+ .dm-range-slider[data-orientation="vertical"] .dm-range-mark {
10949
+ left: 50%;
10950
+ width: 0.375rem;
10951
+ height: 0.375rem;
10952
+ transform: translate(-50%, 50%);
10953
+ }
10954
+
10955
+ .dm-range-tick-label,
10956
+ .dm-range-mark-label {
10957
+ position: absolute;
10958
+ top: calc(100% + 0.25rem);
10959
+ left: 50%;
10960
+ color: var(--dm-text-muted);
10961
+ font-size: var(--dm-font-size-xs);
10962
+ line-height: 1.2;
10963
+ white-space: nowrap;
10964
+ transform: translateX(-50%);
10965
+ }
10966
+
10967
+ .dm-range-mark-label {
10968
+ top: calc(100% + 0.625rem);
10969
+ color: var(--dm-text-secondary);
10970
+ cursor: pointer;
10971
+ }
10972
+
10973
+ .dm-range-slider[data-orientation="vertical"] .dm-range-tick-label,
10974
+ .dm-range-slider[data-orientation="vertical"] .dm-range-mark-label {
10975
+ top: 50%;
10976
+ left: calc(100% + 0.5rem);
10977
+ transform: translateY(-50%);
10978
+ }
10979
+
10980
+ .dm-range-slider.is-disabled {
10981
+ opacity: var(--dm-disabled-opacity, 0.6);
10982
+ cursor: not-allowed;
10983
+ }
10984
+
10985
+ .dm-range-slider.is-disabled .dm-range-thumb {
10986
+ cursor: not-allowed;
10987
+ box-shadow: none;
10988
+ }
10989
+
10990
+ @media (prefers-reduced-motion: no-preference) {
10991
+ .dm-range-thumb {
10992
+ transition: box-shadow var(--dm-transition-fast);
10993
+ }
10994
+
10995
+ .dm-range-tooltip {
10996
+ transition: opacity var(--dm-transition-fast), visibility var(--dm-transition-fast);
10997
+ }
10998
+ }
10999
+
11000
+ @media (forced-colors: active) {
11001
+ .dm-range-fill,
11002
+ .dm-dropzone-progress-bar {
11003
+ background: Highlight;
11004
+ }
11005
+
11006
+ .dm-range-thumb {
11007
+ background: ButtonFace;
11008
+ border-color: ButtonText;
11009
+ }
11010
+ }