@threadlabs/looma 0.12.6 → 0.12.7

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 (42) hide show
  1. package/components/ui-checkbox/ui-checkbox.html +1 -1
  2. package/components/ui-combobox/ui-combobox.html +2 -2
  3. package/components/ui-disclosure/ui-disclosure.html +1 -1
  4. package/components/ui-editable/ui-editable.html +1 -1
  5. package/components/ui-input/ui-input.html +1 -1
  6. package/components/ui-radio/ui-radio.html +1 -1
  7. package/components/ui-select/ui-select.html +1 -1
  8. package/components/ui-switch/ui-switch.html +1 -1
  9. package/components/ui-textarea/ui-textarea.html +1 -1
  10. package/dist/index.js +1 -1
  11. package/package.json +1 -1
  12. package/styles/ui-checkbox.css +1 -1
  13. package/styles/ui-combobox.css +2 -2
  14. package/styles/ui-disclosure.css +1 -1
  15. package/styles/ui-editable.css +1 -1
  16. package/styles/ui-input.css +1 -1
  17. package/styles/ui-radio.css +1 -1
  18. package/styles/ui-select.css +1 -1
  19. package/styles/ui-switch.css +1 -1
  20. package/styles/ui-textarea.css +1 -1
  21. package/theme-dark.css +1 -1
  22. package/theme-light.css +1 -1
  23. package/tokens.css +8 -6
  24. package/vue/UiCheckbox.vue +1 -1
  25. package/vue/UiCombobox.vue +2 -2
  26. package/vue/UiDisclosure.vue +1 -1
  27. package/vue/UiEditable.vue +1 -1
  28. package/vue/UiInput.vue +1 -1
  29. package/vue/UiRadio.vue +1 -1
  30. package/vue/UiSelect.vue +1 -1
  31. package/vue/UiSwitch.vue +1 -1
  32. package/vue/UiTextarea.vue +1 -1
  33. package/vue/chunks/UiCheckbox.js +1 -1
  34. package/vue/chunks/UiCombobox.js +1 -1
  35. package/vue/chunks/UiDisclosure.js +1 -1
  36. package/vue/chunks/UiEditable.js +1 -1
  37. package/vue/chunks/UiInput.js +1 -1
  38. package/vue/chunks/UiRadio.js +1 -1
  39. package/vue/chunks/UiSelect.js +1 -1
  40. package/vue/chunks/UiSwitch.js +1 -1
  41. package/vue/chunks/UiTextarea.js +1 -1
  42. package/vue/components.css +159 -159
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threadlabs/looma",
3
- "version": "0.12.6",
3
+ "version": "0.12.7",
4
4
  "type": "module",
5
5
  "description": "Looma components as HTML, Vue, and plain DOM, with design tokens.",
6
6
  "license": "MIT",
@@ -98,7 +98,7 @@
98
98
  }
99
99
 
100
100
  :scope[data-ui-checkbox-state~="disabled"] {
101
- color: var(--ui-text-muted);
101
+ color: var(--ui-disabled-text);
102
102
  cursor: not-allowed;
103
103
  }
104
104
  :scope[data-ui-checkbox-state~="disabled"] input {
@@ -129,7 +129,7 @@
129
129
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
130
130
  }
131
131
  input:disabled, button:disabled {
132
- color: var(--ui-text-muted);
132
+ color: var(--ui-disabled-text);
133
133
  cursor: not-allowed;
134
134
  }
135
135
  .field:has(input:disabled) {
@@ -167,7 +167,7 @@
167
167
  outline-offset: -1px;
168
168
  }
169
169
  .option[aria-disabled="true"] {
170
- color: var(--ui-text-muted);
170
+ color: var(--ui-disabled-text);
171
171
  cursor: not-allowed;
172
172
  }
173
173
  .primary {
@@ -51,7 +51,7 @@
51
51
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
52
52
  }
53
53
  .trigger:disabled {
54
- color: var(--ui-text-muted);
54
+ color: var(--ui-disabled-text);
55
55
  cursor: not-allowed;
56
56
  }
57
57
 
@@ -120,7 +120,7 @@
120
120
  }
121
121
 
122
122
  :scope[data-ui-editable-state~="disabled"] .preview {
123
- color: var(--ui-text-muted);
123
+ color: var(--ui-disabled-text);
124
124
  cursor: not-allowed;
125
125
  }
126
126
 
@@ -59,7 +59,7 @@
59
59
 
60
60
  :scope:disabled {
61
61
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
62
- color: var(--ui-text-muted);
62
+ color: var(--ui-disabled-text);
63
63
  box-shadow: none;
64
64
  cursor: not-allowed;
65
65
  }
@@ -47,7 +47,7 @@
47
47
  }
48
48
 
49
49
  :scope[data-ui-radio-state~="disabled"] {
50
- color: var(--ui-text-muted);
50
+ color: var(--ui-disabled-text);
51
51
  cursor: not-allowed;
52
52
  }
53
53
  :scope[data-ui-radio-state~="disabled"] input {
@@ -60,7 +60,7 @@
60
60
 
61
61
  :scope:disabled {
62
62
  background-color: var(--ui-control-surface-disabled, var(--ui-surface-muted));
63
- color: var(--ui-text-muted);
63
+ color: var(--ui-disabled-text);
64
64
  box-shadow: none;
65
65
  cursor: not-allowed;
66
66
  }
@@ -78,7 +78,7 @@
78
78
  }
79
79
 
80
80
  :scope[data-ui-switch-state~="disabled"] {
81
- color: var(--ui-text-muted);
81
+ color: var(--ui-disabled-text);
82
82
  cursor: not-allowed;
83
83
  }
84
84
  :scope[data-ui-switch-state~="disabled"] input {
@@ -58,7 +58,7 @@
58
58
 
59
59
  :scope:disabled {
60
60
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
61
- color: var(--ui-text-muted);
61
+ color: var(--ui-disabled-text);
62
62
  box-shadow: none;
63
63
  cursor: not-allowed;
64
64
  }
package/theme-dark.css CHANGED
@@ -1,6 +1,6 @@
1
1
  @layer base {
2
2
  @media (prefers-color-scheme: dark) {
3
- :root:not([data-theme]) {
3
+ :root:not([data-theme], [data-contrast="high"]) {
4
4
  color-scheme: dark;
5
5
  /* The same eleven seeds the light theme sets. Every neutral, tint, hover, and disabled
6
6
  colour is mixed from these, and the mixes read the scheme from them: toward this ink
package/theme-light.css CHANGED
@@ -1,5 +1,5 @@
1
1
  @layer base {
2
- :root:not([data-theme]),
2
+ :root:not([data-theme], [data-contrast="high"]),
3
3
  [data-theme="light"] {
4
4
  color-scheme: light;
5
5
  /* The seeds, and only the seeds. Neutrals, hovers, tints, and disabled colours are mixed from
package/tokens.css CHANGED
@@ -122,10 +122,11 @@
122
122
  --ui-motion-ease-out: cubic-bezier(0.2, 0.8, 0.2, 1);
123
123
 
124
124
  /* Neutrals: the ink mixed into the page. One ramp, so a theme that changes either end moves
125
- every step with it. */
125
+ every step with it. Muted is the lightest text that still reads at 4.5:1 (WCAG AA) on the
126
+ sunken surface as well as the page, and secondary sits halfway between it and the ink. */
126
127
  --ui-surface-muted: color-mix(in oklab, var(--ui-surface-sunken) 50%, var(--ui-surface));
127
- --ui-text-secondary: color-mix(in oklab, var(--ui-text) 72%, var(--ui-surface));
128
- --ui-text-muted: color-mix(in oklab, var(--ui-text) 45%, var(--ui-surface));
128
+ --ui-text-secondary: color-mix(in oklab, var(--ui-text) 80%, var(--ui-surface));
129
+ --ui-text-muted: color-mix(in oklab, var(--ui-text) 62%, var(--ui-surface));
129
130
  --ui-border: color-mix(in oklab, var(--ui-text) 12%, var(--ui-surface));
130
131
  --ui-border-strong: color-mix(in oklab, var(--ui-text) 25%, var(--ui-surface));
131
132
  --ui-control-border: color-mix(in oklab, var(--ui-text) 48%, var(--ui-surface));
@@ -137,10 +138,11 @@
137
138
  --ui-accent-subtle: color-mix(in oklab, var(--ui-accent) 12%, var(--ui-surface));
138
139
  --ui-danger-hover: color-mix(in oklab, var(--ui-danger) 86%, var(--ui-text));
139
140
 
140
- /* Disabled is one decision, not a per-component one: the sunken surface and the muted ink, at
141
- full opacity, so a disabled control reads as unavailable rather than as a faded variant. */
141
+ /* Disabled is one decision, not a per-component one: the sunken surface and a pale ink, at
142
+ full opacity, so a disabled control reads as unavailable rather than as a faded variant.
143
+ Lighter than muted text, which must stay readable; disabled text is exempt from contrast. */
142
144
  --ui-disabled-surface: var(--ui-surface-sunken);
143
- --ui-disabled-text: var(--ui-text-muted);
145
+ --ui-disabled-text: color-mix(in oklab, var(--ui-text) 45%, var(--ui-surface));
144
146
  /* A disabled button keeps its own look, washed out: less colour, less contrast, toward the page.
145
147
  A filter rather than a second palette, so every variant and tone fades the same way. */
146
148
  --ui-disabled-filter: saturate(0.2) contrast(0.75) brightness(1.25);
@@ -193,7 +193,7 @@ input:focus-visible {
193
193
  }
194
194
 
195
195
  [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] {
196
- color: var(--ui-text-muted);
196
+ color: var(--ui-disabled-text);
197
197
  cursor: not-allowed;
198
198
  }
199
199
  [data-component~="ui-checkbox"][data-ui-checkbox-state~="disabled"] input {
@@ -795,7 +795,7 @@ button:focus-visible {
795
795
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
796
796
  }
797
797
  input:disabled, button:disabled {
798
- color: var(--ui-text-muted);
798
+ color: var(--ui-disabled-text);
799
799
  cursor: not-allowed;
800
800
  }
801
801
  .field:has(input:disabled) {
@@ -833,7 +833,7 @@ input:disabled, button:disabled {
833
833
  outline-offset: -1px;
834
834
  }
835
835
  .option[aria-disabled="true"] {
836
- color: var(--ui-text-muted);
836
+ color: var(--ui-disabled-text);
837
837
  cursor: not-allowed;
838
838
  }
839
839
  .primary {
@@ -155,7 +155,7 @@ useComponentHost(controllerModule.default, {
155
155
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ui-focus-ring) 45%, transparent);
156
156
  }
157
157
  .trigger:disabled {
158
- color: var(--ui-text-muted);
158
+ color: var(--ui-disabled-text);
159
159
  cursor: not-allowed;
160
160
  }
161
161
 
@@ -264,7 +264,7 @@ useComponentHost(controllerModule.default, {
264
264
  }
265
265
 
266
266
  [data-component~="ui-editable"][data-ui-editable-state~="disabled"] .preview {
267
- color: var(--ui-text-muted);
267
+ color: var(--ui-disabled-text);
268
268
  cursor: not-allowed;
269
269
  }
270
270
 
package/vue/UiInput.vue CHANGED
@@ -122,7 +122,7 @@ useComponentHost(controllerModule.default, {
122
122
 
123
123
  [data-component~="ui-input"]:disabled {
124
124
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
125
- color: var(--ui-text-muted);
125
+ color: var(--ui-disabled-text);
126
126
  box-shadow: none;
127
127
  cursor: not-allowed;
128
128
  }
package/vue/UiRadio.vue CHANGED
@@ -139,7 +139,7 @@ input:focus-visible {
139
139
  }
140
140
 
141
141
  [data-component~="ui-radio"][data-ui-radio-state~="disabled"] {
142
- color: var(--ui-text-muted);
142
+ color: var(--ui-disabled-text);
143
143
  cursor: not-allowed;
144
144
  }
145
145
  [data-component~="ui-radio"][data-ui-radio-state~="disabled"] input {
package/vue/UiSelect.vue CHANGED
@@ -118,7 +118,7 @@ useComponentHost(controllerModule.default, {
118
118
 
119
119
  [data-component~="ui-select"]:disabled {
120
120
  background-color: var(--ui-control-surface-disabled, var(--ui-surface-muted));
121
- color: var(--ui-text-muted);
121
+ color: var(--ui-disabled-text);
122
122
  box-shadow: none;
123
123
  cursor: not-allowed;
124
124
  }
package/vue/UiSwitch.vue CHANGED
@@ -173,7 +173,7 @@ input:focus-visible {
173
173
  }
174
174
 
175
175
  [data-component~="ui-switch"][data-ui-switch-state~="disabled"] {
176
- color: var(--ui-text-muted);
176
+ color: var(--ui-disabled-text);
177
177
  cursor: not-allowed;
178
178
  }
179
179
  [data-component~="ui-switch"][data-ui-switch-state~="disabled"] input {
@@ -120,7 +120,7 @@ useComponentHost(controllerModule.default, {
120
120
 
121
121
  [data-component~="ui-textarea"]:disabled {
122
122
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
123
- color: var(--ui-text-muted);
123
+ color: var(--ui-disabled-text);
124
124
  box-shadow: none;
125
125
  cursor: not-allowed;
126
126
  }
@@ -94,6 +94,6 @@ var UiCheckbox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
94
94
  }, null, 40, _hoisted_2), createElementVNode("span", _hoisted_3, [createElementVNode("span", _hoisted_4, [renderSlot(_ctx.$slots, "default", {}, void 0, true)]), createElementVNode("span", _hoisted_5, [renderSlot(_ctx.$slots, "description", {}, void 0, true)], 512)])], 16, _hoisted_1);
95
95
  };
96
96
  }
97
- }), [["__scopeId", "data-v-4d65c3b0"]]);
97
+ }), [["__scopeId", "data-v-cc7306ec"]]);
98
98
  //#endregion
99
99
  export { UiCheckbox_default as t };
@@ -479,6 +479,6 @@ var UiCombobox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
479
479
  ], 16, _hoisted_1);
480
480
  };
481
481
  }
482
- }), [["__scopeId", "data-v-0bd7ecc4"]]);
482
+ }), [["__scopeId", "data-v-b3cdd263"]]);
483
483
  //#endregion
484
484
  export { UiCombobox_default as t };
@@ -86,6 +86,6 @@ var UiDisclosure_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
86
86
  }, [createElementVNode("div", _hoisted_4, [renderSlot(_ctx.$slots, "default", {}, void 0, true)])], 8, _hoisted_3)], 16, _hoisted_1);
87
87
  };
88
88
  }
89
- }), [["__scopeId", "data-v-54a22a7e"]]);
89
+ }), [["__scopeId", "data-v-af289043"]]);
90
90
  //#endregion
91
91
  export { UiDisclosure_default as t };
@@ -120,6 +120,6 @@ var UiEditable_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
120
120
  }, "Cancel", -1)])])) : createCommentVNode("v-if", true)], 16, _hoisted_1);
121
121
  };
122
122
  }
123
- }), [["__scopeId", "data-v-8fe1c571"]]);
123
+ }), [["__scopeId", "data-v-3b785d66"]]);
124
124
  //#endregion
125
125
  export { UiEditable_default as t };
@@ -61,6 +61,6 @@ var UiInput_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
61
61
  }), null, 16, _hoisted_1)), [[vModelDynamic, model.value]]);
62
62
  };
63
63
  }
64
- }), [["__scopeId", "data-v-e7c851a2"]]);
64
+ }), [["__scopeId", "data-v-08811f22"]]);
65
65
  //#endregion
66
66
  export { UiInput_default as t };
@@ -88,6 +88,6 @@ var UiRadio_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PURE
88
88
  }, null, 40, _hoisted_2), createElementVNode("span", _hoisted_3, [createElementVNode("span", _hoisted_4, [renderSlot(_ctx.$slots, "default", {}, void 0, true)]), createElementVNode("span", _hoisted_5, [renderSlot(_ctx.$slots, "description", {}, void 0, true)], 512)])], 16, _hoisted_1);
89
89
  };
90
90
  }
91
- }), [["__scopeId", "data-v-f9c61d50"]]);
91
+ }), [["__scopeId", "data-v-c4f88d99"]]);
92
92
  //#endregion
93
93
  export { UiRadio_default as t };
@@ -55,6 +55,6 @@ var UiSelect_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
55
55
  }), [renderSlot(_ctx.$slots, "default", {}, void 0, true)], 16, _hoisted_1)), [[vModelSelect, model.value]]);
56
56
  };
57
57
  }
58
- }), [["__scopeId", "data-v-f9be4ab9"]]);
58
+ }), [["__scopeId", "data-v-e15c964d"]]);
59
59
  //#endregion
60
60
  export { UiSelect_default as t };
@@ -89,6 +89,6 @@ var UiSwitch_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
89
89
  }, null, 40, _hoisted_2), createElementVNode("span", _hoisted_3, [createElementVNode("span", _hoisted_4, [renderSlot(_ctx.$slots, "default", {}, void 0, true)]), createElementVNode("span", _hoisted_5, [renderSlot(_ctx.$slots, "description", {}, void 0, true)], 512)])], 16, _hoisted_1);
90
90
  };
91
91
  }
92
- }), [["__scopeId", "data-v-85cb3260"]]);
92
+ }), [["__scopeId", "data-v-afb9ea1d"]]);
93
93
  //#endregion
94
94
  export { UiSwitch_default as t };
@@ -64,6 +64,6 @@ var UiTextarea_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
64
64
  }), null, 16, _hoisted_1)), [[vModelText, model.value]]);
65
65
  };
66
66
  }
67
- }), [["__scopeId", "data-v-0352d397"]]);
67
+ }), [["__scopeId", "data-v-860b69d7"]]);
68
68
  //#endregion
69
69
  export { UiTextarea_default as t };