@threadlabs/looma 0.2.20 → 0.3.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 (51) hide show
  1. package/dist/{chunk-A5MSXQ7Y.js → chunk-3NVMCHGR.js} +2225 -1255
  2. package/dist/chunk-XDNZIKNI.js +2721 -0
  3. package/dist/declarative-generated.cjs +93 -79
  4. package/dist/declarative-generated.d.cts +7 -1
  5. package/dist/declarative-generated.d.ts +7 -1
  6. package/dist/declarative-generated.js +91 -78
  7. package/dist/declarative.cjs +1499 -1702
  8. package/dist/declarative.d.cts +77 -3
  9. package/dist/declarative.d.ts +77 -3
  10. package/dist/declarative.js +5 -3
  11. package/dist/index.cjs +3732 -3025
  12. package/dist/index.d.cts +211 -35
  13. package/dist/index.d.ts +211 -35
  14. package/dist/index.js +6 -61
  15. package/dist/loader.cjs +3725 -2962
  16. package/dist/loader.js +2 -2
  17. package/editor/{chunk-VAXI7Q6T.js → chunk-U36XNFJN.js} +105 -77
  18. package/editor/extensions/index.d.ts +272 -27
  19. package/editor/index.d.ts +1 -1
  20. package/editor/index.js +1 -1
  21. package/editor/{table-overlay-DoiLie4h.d.ts → table-overlay-DZFGHQDt.d.ts} +48 -6
  22. package/editor/ui.d.ts +15 -11
  23. package/editor/ui.js +1 -1
  24. package/layout/index.cjs +197 -340
  25. package/layout/index.d.cts +11 -0
  26. package/layout/index.d.ts +11 -0
  27. package/layout/index.js +197 -340
  28. package/layout.css +31 -134
  29. package/package.json +24 -11
  30. package/react/index.d.ts +1276 -0
  31. package/react/index.js +1526 -0
  32. package/styles.css +5 -10
  33. package/svelte/index.d.ts +204 -0
  34. package/svelte/index.js +1881 -0
  35. package/theme-dark.css +81 -2
  36. package/theme-high-contrast.css +14 -0
  37. package/theme-light.css +30 -1
  38. package/tokens.css +45 -1
  39. package/vue/chunk-UZMTYDP6.js +4355 -0
  40. package/vue/editor/index.d.ts +78 -8
  41. package/vue/editor/index.js +54 -49
  42. package/vue/index.d.ts +67 -78
  43. package/vue/index.js +3 -9
  44. package/dist/chunk-ECJQ4YGC.js +0 -2925
  45. package/dist/valibot.cjs +0 -31
  46. package/dist/valibot.d.cts +0 -10
  47. package/dist/valibot.d.ts +0 -10
  48. package/dist/valibot.js +0 -9
  49. package/dist/validation-bxcou-l-.d.cts +0 -58
  50. package/dist/validation-bxcou-l-.d.ts +0 -58
  51. package/vue/chunk-P7BZ2KJZ.js +0 -3559
package/theme-dark.css CHANGED
@@ -7,15 +7,40 @@
7
7
  --ui-surface-muted: #242424;
8
8
  --ui-surface-subtle: #2e2e2e;
9
9
  --ui-surface-elevated: #2a2a2a;
10
+ --ui-control-inset: inset 0 1px 2px rgb(0 0 0 / 0.35);
11
+ --ui-raised: 0 1px 2px rgb(0 0 0 / 0.4), inset 0 1px 0 rgb(255 255 255 / 0.06);
12
+ --ui-raised-highlight: linear-gradient(rgb(255 255 255 / 0.04), rgb(255 255 255 / 0));
13
+ --ui-control-focus-halo: color-mix(in srgb, var(--ui-accent-solid) 30%, transparent);
14
+ --ui-select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23a0a09c' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
15
+
16
+ --ui-shadow-xs: 0 1px 2px rgb(0 0 0 / 0.4);
17
+ --ui-shadow-sm: 0 1px 3px rgb(0 0 0 / 0.45), 0 1px 2px rgb(0 0 0 / 0.3);
18
+ --ui-shadow-md: 0 4px 12px rgb(0 0 0 / 0.5), 0 2px 4px rgb(0 0 0 / 0.3);
19
+ --ui-shadow-lg: 0 10px 28px rgb(0 0 0 / 0.55), 0 4px 10px rgb(0 0 0 / 0.35);
20
+ --ui-shadow-xl: 0 18px 48px rgb(0 0 0 / 0.6), 0 8px 18px rgb(0 0 0 / 0.4);
10
21
 
11
22
  --ui-text-primary: #f0f0ec;
12
23
  --ui-text-secondary: #a0a09c;
13
24
  --ui-text-muted: #6a6a66;
14
- --ui-text-on-accent: #ffffff;
25
+ --ui-text-on-accent: #1a1a1a;
15
26
 
16
27
  --ui-border-subtle: #2b2b28;
17
28
  --ui-border-default: #333330;
18
29
  --ui-border-strong: #4a4a46;
30
+ --ui-focus-ring: #a99bf5;
31
+
32
+ /* Form controls need a visible 3:1 boundary and 4.5:1 placeholder text;
33
+ general dividers intentionally remain quieter. */
34
+ --ui-control-surface: #202020;
35
+ --ui-control-surface-disabled: #242424;
36
+ --ui-control-border: #6f6f69;
37
+ --ui-control-border-hover: #92928c;
38
+ --ui-control-placeholder: #a0a09c;
39
+
40
+ --ui-accent-solid: #a99bf5;
41
+ --ui-accent-hover: #b9adff;
42
+ --ui-accent-active: #c8beff;
43
+ --ui-accent-soft: #282342;
19
44
 
20
45
  --ui-danger-solid: #ef6f86;
21
46
  --ui-danger-hover: #f58a9d;
@@ -26,6 +51,21 @@
26
51
  --ui-warning-soft: #2d2410;
27
52
  --ui-info-solid: #4d9fff;
28
53
  --ui-info-soft: #1a2a3d;
54
+ --ui-accent-strong-surface: #5148c8;
55
+ --ui-accent-on-strong: #ffffff;
56
+ --ui-accent-subtle-text: #b8b3ff;
57
+ --ui-danger-strong-surface: #a61b3c;
58
+ --ui-danger-on-strong: #ffffff;
59
+ --ui-danger-subtle-text: #ff9aae;
60
+ --ui-success-strong-surface: #006b2d;
61
+ --ui-success-on-strong: #ffffff;
62
+ --ui-success-subtle-text: #62dc89;
63
+ --ui-warning-strong-surface: #d69a0a;
64
+ --ui-warning-on-strong: #1f1500;
65
+ --ui-warning-subtle-text: #ffc45c;
66
+ --ui-info-strong-surface: #075cad;
67
+ --ui-info-on-strong: #ffffff;
68
+ --ui-info-subtle-text: #7eb8ff;
29
69
  }
30
70
  }
31
71
 
@@ -36,15 +76,39 @@
36
76
  --ui-surface-muted: #242424;
37
77
  --ui-surface-subtle: #2e2e2e;
38
78
  --ui-surface-elevated: #2a2a2a;
79
+ --ui-control-inset: inset 0 1px 2px rgb(0 0 0 / 0.35);
80
+ --ui-raised: 0 1px 2px rgb(0 0 0 / 0.4), inset 0 1px 0 rgb(255 255 255 / 0.06);
81
+ --ui-raised-highlight: linear-gradient(rgb(255 255 255 / 0.04), rgb(255 255 255 / 0));
82
+ --ui-control-focus-halo: color-mix(in srgb, var(--ui-accent-solid) 30%, transparent);
83
+ --ui-select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23a0a09c' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
84
+
85
+ --ui-shadow-xs: 0 1px 2px rgb(0 0 0 / 0.4);
86
+ --ui-shadow-sm: 0 1px 3px rgb(0 0 0 / 0.45), 0 1px 2px rgb(0 0 0 / 0.3);
87
+ --ui-shadow-md: 0 4px 12px rgb(0 0 0 / 0.5), 0 2px 4px rgb(0 0 0 / 0.3);
88
+ --ui-shadow-lg: 0 10px 28px rgb(0 0 0 / 0.55), 0 4px 10px rgb(0 0 0 / 0.35);
89
+ --ui-shadow-xl: 0 18px 48px rgb(0 0 0 / 0.6), 0 8px 18px rgb(0 0 0 / 0.4);
39
90
 
40
91
  --ui-text-primary: #f0f0ec;
41
92
  --ui-text-secondary: #a0a09c;
42
93
  --ui-text-muted: #6a6a66;
43
- --ui-text-on-accent: #ffffff;
94
+ --ui-text-on-accent: #1a1a1a;
44
95
 
45
96
  --ui-border-subtle: #2b2b28;
46
97
  --ui-border-default: #333330;
47
98
  --ui-border-strong: #4a4a46;
99
+ --ui-focus-ring: #a99bf5;
100
+
101
+ /* Keep explicit dark mode identical to the system-dark palette. */
102
+ --ui-control-surface: #202020;
103
+ --ui-control-surface-disabled: #242424;
104
+ --ui-control-border: #6f6f69;
105
+ --ui-control-border-hover: #92928c;
106
+ --ui-control-placeholder: #a0a09c;
107
+
108
+ --ui-accent-solid: #a99bf5;
109
+ --ui-accent-hover: #b9adff;
110
+ --ui-accent-active: #c8beff;
111
+ --ui-accent-soft: #282342;
48
112
 
49
113
  --ui-danger-solid: #ef6f86;
50
114
  --ui-danger-hover: #f58a9d;
@@ -55,5 +119,20 @@
55
119
  --ui-warning-soft: #2d2410;
56
120
  --ui-info-solid: #4d9fff;
57
121
  --ui-info-soft: #1a2a3d;
122
+ --ui-accent-strong-surface: #5148c8;
123
+ --ui-accent-on-strong: #ffffff;
124
+ --ui-accent-subtle-text: #b8b3ff;
125
+ --ui-danger-strong-surface: #a61b3c;
126
+ --ui-danger-on-strong: #ffffff;
127
+ --ui-danger-subtle-text: #ff9aae;
128
+ --ui-success-strong-surface: #006b2d;
129
+ --ui-success-on-strong: #ffffff;
130
+ --ui-success-subtle-text: #62dc89;
131
+ --ui-warning-strong-surface: #d69a0a;
132
+ --ui-warning-on-strong: #1f1500;
133
+ --ui-warning-subtle-text: #ffc45c;
134
+ --ui-info-strong-surface: #075cad;
135
+ --ui-info-on-strong: #ffffff;
136
+ --ui-info-subtle-text: #7eb8ff;
58
137
  }
59
138
  }
@@ -13,6 +13,13 @@
13
13
  --ui-border-default: #000000;
14
14
  --ui-border-strong: #000000;
15
15
  --ui-focus-ring: #0000ff;
16
+ --ui-accent-solid: #0000cc;
17
+ --ui-accent-hover: #000080;
18
+ --ui-accent-active: #000066;
19
+ --ui-accent-soft: #e6e6ff;
20
+ --ui-danger-solid: #8b0000;
21
+ --ui-danger-hover: #5c0000;
22
+ --ui-danger-soft: #fff0f0;
16
23
  }
17
24
  }
18
25
 
@@ -29,5 +36,12 @@
29
36
  --ui-border-default: #000000;
30
37
  --ui-border-strong: #000000;
31
38
  --ui-focus-ring: #0000ff;
39
+ --ui-accent-solid: #0000cc;
40
+ --ui-accent-hover: #000080;
41
+ --ui-accent-active: #000066;
42
+ --ui-accent-soft: #e6e6ff;
43
+ --ui-danger-solid: #8b0000;
44
+ --ui-danger-hover: #5c0000;
45
+ --ui-danger-soft: #fff0f0;
32
46
  }
33
47
  }
package/theme-light.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer base {
2
- :root,
2
+ :root:not([data-theme]),
3
3
  [data-theme="light"] {
4
4
  color-scheme: light;
5
5
  --ui-surface-canvas: #ffffff;
@@ -16,6 +16,20 @@
16
16
  --ui-border-subtle: #ecece8;
17
17
  --ui-border-default: #e4e4e0;
18
18
  --ui-border-strong: #c8c8c4;
19
+ --ui-focus-ring: #5b55d6;
20
+
21
+ /* Form controls need a visible 3:1 boundary and 4.5:1 placeholder text;
22
+ general dividers intentionally remain quieter. */
23
+ --ui-control-surface: #ffffff;
24
+ --ui-control-surface-disabled: #f0f0ec;
25
+ --ui-control-border: #858580;
26
+ --ui-control-border-hover: #5c5c58;
27
+ --ui-control-placeholder: #62625e;
28
+
29
+ --ui-accent-solid: #5b55d6;
30
+ --ui-accent-hover: #4b45bd;
31
+ --ui-accent-active: #3e399e;
32
+ --ui-accent-soft: #efeffc;
19
33
 
20
34
  --ui-danger-solid: #b4233f;
21
35
  --ui-danger-hover: #941d35;
@@ -26,5 +40,20 @@
26
40
  --ui-warning-soft: #fdf7e6;
27
41
  --ui-info-solid: #0066cc;
28
42
  --ui-info-soft: #e8f0fb;
43
+ --ui-accent-strong-surface: #5b55d6;
44
+ --ui-accent-on-strong: #ffffff;
45
+ --ui-accent-subtle-text: #3e399e;
46
+ --ui-danger-strong-surface: #b4233f;
47
+ --ui-danger-on-strong: #ffffff;
48
+ --ui-danger-subtle-text: #941d35;
49
+ --ui-success-strong-surface: #007a33;
50
+ --ui-success-on-strong: #ffffff;
51
+ --ui-success-subtle-text: #006629;
52
+ --ui-warning-strong-surface: #b45309;
53
+ --ui-warning-on-strong: #ffffff;
54
+ --ui-warning-subtle-text: #704800;
55
+ --ui-info-strong-surface: #0066cc;
56
+ --ui-info-on-strong: #ffffff;
57
+ --ui-info-subtle-text: #0058b0;
29
58
  }
30
59
  }
package/tokens.css CHANGED
@@ -81,11 +81,18 @@
81
81
  --ui-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.12), 0 4px 8px rgba(0, 0, 0, 0.06);
82
82
  --ui-shadow-xl: 0 16px 40px rgba(0, 0, 0, 0.14), 0 8px 16px rgba(0, 0, 0, 0.08);
83
83
  --ui-shadow-dialog: var(--ui-shadow-xl);
84
+
85
+ /* Semantic elevation: every floating surface uses one of these so overlays read consistently. */
86
+ --ui-elevation-tooltip: var(--ui-shadow-md);
87
+ --ui-elevation-overlay: var(--ui-shadow-lg);
88
+ --ui-elevation-dialog: var(--ui-shadow-xl);
84
89
  --ui-overlay-backdrop: rgba(0, 0, 0, 0.4);
85
90
 
86
91
  --ui-motion-fast: 120ms;
87
92
  --ui-motion-base: 180ms;
88
93
  --ui-motion-ease: cubic-bezier(0.2, 0, 0.2, 1);
94
+ /* Fast start, gentle settle: for reveals that should feel immediate (expanding panels). */
95
+ --ui-motion-ease-out: cubic-bezier(0.2, 0.8, 0.2, 1);
89
96
 
90
97
  /* Anticipatory interaction: guide → near → direct → active. */
91
98
  --ui-affordance-guide-size: 0.25rem;
@@ -127,6 +134,42 @@
127
134
  --ui-info-solid: #0066cc;
128
135
  --ui-info-soft: #e8f0fb;
129
136
 
137
+ /* Intent colors split readable foreground use from filled-surface use. */
138
+ --ui-accent-strong-surface: #5b55d6;
139
+ --ui-accent-on-strong: #ffffff;
140
+ --ui-accent-subtle-text: #3e399e;
141
+ --ui-danger-strong-surface: #b4233f;
142
+ --ui-danger-on-strong: #ffffff;
143
+ --ui-danger-subtle-text: #941d35;
144
+ --ui-success-strong-surface: #007a33;
145
+ --ui-success-on-strong: #ffffff;
146
+ --ui-success-subtle-text: #006629;
147
+ /* Deeper amber so the solid warning badge carries white text like the other tones (5:1). */
148
+ --ui-warning-strong-surface: #b45309;
149
+ --ui-warning-on-strong: #ffffff;
150
+ --ui-warning-subtle-text: #704800;
151
+ --ui-info-strong-surface: #0066cc;
152
+ --ui-info-on-strong: #ffffff;
153
+ --ui-info-subtle-text: #0058b0;
154
+
155
+ /* Depth and focus. Fields read as a shallow well; buttons as gently raised. Focus is a soft halo
156
+ that transitions in (no hard outline ring). */
157
+ --ui-control-inset: inset 0 1px 2px rgb(0 0 0 / 0.07), inset 0 1px 0 rgb(0 0 0 / 0.02);
158
+ --ui-control-focus-halo-shadow: 0 0 0 3px var(--ui-control-focus-halo, color-mix(in srgb, var(--ui-focus-ring) 24%, transparent));
159
+ --ui-raised: 0 1px 2px rgb(0 0 0 / 0.07), 0 1px 1px rgb(0 0 0 / 0.04);
160
+ --ui-raised-highlight: linear-gradient(rgb(255 255 255 / 0.5), rgb(255 255 255 / 0));
161
+ --ui-focus-halo: 0 0 0 3px color-mix(in srgb, var(--ui-focus-ring) 40%, transparent);
162
+
163
+ /* Icon sizes, used by icon buttons and field affordances. */
164
+ --ui-icon-size-sm: 1rem;
165
+ --ui-icon-size-md: 1.25rem;
166
+ --ui-icon-size-lg: 1.5rem;
167
+
168
+ /* One height scale for every form control and button size. */
169
+ --ui-control-size-sm: 2rem;
170
+ --ui-control-size-md: 2.5rem;
171
+ --ui-control-size-lg: 3rem;
172
+ /* Touch-target floor applied under coarse pointers. */
130
173
  --ui-control-min-block-size: 2.75rem;
131
174
 
132
175
  /* Compatibility aliases used by the editor's public styling surface.
@@ -165,7 +208,8 @@
165
208
  --ui-control-border: var(--ui-border-default);
166
209
  --ui-control-border-hover: var(--ui-border-strong);
167
210
  --ui-control-focus: var(--ui-focus-ring);
168
- --ui-control-focus-halo: var(--ui-accent-soft);
211
+ /* Derived from the ring, not the near-white accent tint, so the halo shows on any surface. */
212
+ --ui-control-focus-halo: color-mix(in srgb, var(--ui-focus-ring) 24%, transparent);
169
213
  }
170
214
 
171
215
  @supports (color: oklch(0.5 0.1 240)) {