@threadlabs/looma 0.39.1 → 0.39.2

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.
@@ -23,6 +23,7 @@ import {
23
23
  vPropValidity,
24
24
  vuePropInputs,
25
25
  } from './props'
26
+ import UiDisclosure from './UiDisclosure.vue'
26
27
  import UiIcon from './UiIcon.vue'
27
28
  import UiNumberInput from './UiNumberInput.vue'
28
29
 
@@ -262,46 +263,45 @@ useComponentHost(() => import('../components/ui-light-editor/ui-light-editor.js'
262
263
  class="ui-icon"
263
264
  name="lightbulb"
264
265
  /></span>
265
- </button></span></span>{{ ' ' }}<span
266
- class="coordinates"
267
- data-hn-ui-light-editor
268
- ><UiNumberInput
269
- class="ui-number-input"
270
- data-coordinate="x"
271
- :min="0"
272
- :max="100"
273
- :step="1"
274
- unit="%"
275
- label="Light horizontal position"
276
- :value="horizontal"
277
- :size="checkedProps.size"
278
- :disabled="checkedProps.disabled"
279
- v-bind="{
280
- [BINDING_INPUTS_PROP]: {
281
- size: () => ({ value: checkedProps.size, status: inputStatus('size', true) }),
282
- disabled: () => ({ value: checkedProps.disabled, status: inputStatus('disabled', true) }),
283
- },
284
- }"
285
- />{{ ' ' }}<UiNumberInput
286
- class="ui-number-input"
287
- data-coordinate="y"
288
- :min="0"
289
- :max="100"
290
- :step="1"
291
- unit="%"
292
- label="Light vertical position"
293
- :value="vertical"
294
- :size="checkedProps.size"
295
- :disabled="checkedProps.disabled"
296
- v-bind="{
297
- [BINDING_INPUTS_PROP]: {
298
- size: () => ({ value: checkedProps.size, status: inputStatus('size', true) }),
299
- disabled: () => ({ value: checkedProps.disabled, status: inputStatus('disabled', true) }),
300
- },
301
- }"
302
- /></span>{{ ' ' }}<span class="hint" data-hn-ui-light-editor
303
- >Drag the light, tap the background, use arrow keys, or enter its position. Escape cancels a
304
- drag. Top centre is 50%, 0%.</span></span>
266
+ </button></span></span>{{ ' ' }}<span class="hint" data-hn-ui-light-editor
267
+ >Drag or tap to move the light. Arrow keys adjust; Escape cancels.</span>{{ ' ' }}<UiDisclosure
268
+ class="ui-disclosure"
269
+ summary="Exact position"
270
+ ><span class="coordinates" data-slotted="ui-light-editor" data-hn-ui-light-editor><UiNumberInput
271
+ class="ui-number-input"
272
+ data-coordinate="x"
273
+ :min="0"
274
+ :max="100"
275
+ :step="1"
276
+ unit="%"
277
+ label="Light horizontal position"
278
+ :value="horizontal"
279
+ :size="checkedProps.size"
280
+ :disabled="checkedProps.disabled"
281
+ v-bind="{
282
+ [BINDING_INPUTS_PROP]: {
283
+ size: () => ({ value: checkedProps.size, status: inputStatus('size', true) }),
284
+ disabled: () => ({ value: checkedProps.disabled, status: inputStatus('disabled', true) }),
285
+ },
286
+ }"
287
+ />{{ ' ' }}<UiNumberInput
288
+ class="ui-number-input"
289
+ data-coordinate="y"
290
+ :min="0"
291
+ :max="100"
292
+ :step="1"
293
+ unit="%"
294
+ label="Light vertical position"
295
+ :value="vertical"
296
+ :size="checkedProps.size"
297
+ :disabled="checkedProps.disabled"
298
+ v-bind="{
299
+ [BINDING_INPUTS_PROP]: {
300
+ size: () => ({ value: checkedProps.size, status: inputStatus('size', true) }),
301
+ disabled: () => ({ value: checkedProps.disabled, status: inputStatus('disabled', true) }),
302
+ },
303
+ }"
304
+ /></span></UiDisclosure></span>
305
305
  </template>
306
306
 
307
307
  <style scoped>
@@ -418,4 +418,120 @@ useComponentHost(() => import('../components/ui-light-editor/ui-light-editor.js'
418
418
  }
419
419
  }
420
420
  }
421
+ @scope ([data-slotted~="ui-light-editor"]:not([data-hn])) to ([data-hn], [data-slotted]) {
422
+ :global(:where(.ui-light-editor):where(:scope, :not([data-hn], [data-slotted]:not([data-slotted~="ui-light-editor"]))):where([data-hn-ui-light-editor])) {
423
+ display: grid !important;
424
+ gap: var(--ui-space-3) !important;
425
+ min-inline-size: 0;
426
+ padding: 0 !important;
427
+ margin: 0 !important;
428
+ }
429
+ :global(.stage:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
430
+ box-sizing: border-box !important;
431
+ display: block !important;
432
+ block-size: 13rem;
433
+ padding: calc(var(--ui-control-min-block-size) / 2) !important;
434
+ border: var(--ui-border-width) solid var(--ui-control-border);
435
+ border-radius: var(--ui-field-radius, var(--ui-radius-md));
436
+ background: var(--ui-neutral-surface, var(--ui-surface));
437
+ }
438
+ :global(.plane:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
439
+ position: relative;
440
+ display: block !important;
441
+ inline-size: 100%;
442
+ block-size: 100%;
443
+ }
444
+ :global(svg:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
445
+ inline-size: 100%;
446
+ block-size: 100%;
447
+ overflow: visible;
448
+ }
449
+ :global(path:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
450
+ fill: none;
451
+ stroke: var(--ui-border);
452
+ stroke-width: 1;
453
+ vector-effect: non-scaling-stroke;
454
+ }
455
+ :global(.specimen:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
456
+ position: absolute;
457
+ inset: 0;
458
+ display: grid !important;
459
+ place-items: center !important;
460
+ }
461
+ :global(.source:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
462
+ position: absolute;
463
+ left: 50%;
464
+ top: 0;
465
+ translate: -50% -50%;
466
+ display: grid !important;
467
+ place-items: center !important;
468
+ inline-size: max(2rem, var(--ui-control-min-block-size));
469
+ block-size: max(2rem, var(--ui-control-min-block-size));
470
+ padding: 0 !important;
471
+ margin: 0 !important;
472
+ border: 0;
473
+ border-radius: 50%;
474
+ background: transparent;
475
+ cursor: grab;
476
+ touch-action: none;
477
+ }
478
+ :global(.source-glyph:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
479
+ position: relative;
480
+ z-index: 1;
481
+ display: inline-flex !important;
482
+ color: var(--ui-accent);
483
+ font-size: var(--ui-font-size-lg);
484
+ }
485
+ :global(.source:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-light-editor"]))):where(:scope, :scope
486
+ *):where([data-hn-ui-light-editor])::after) {
487
+ content: "";
488
+ position: absolute;
489
+ inline-size: 2rem;
490
+ block-size: 2rem;
491
+ border: var(--ui-border-width) solid var(--ui-accent);
492
+ border-radius: 50%;
493
+ background: var(--ui-surface-raised);
494
+ box-shadow:
495
+ 0 0 0 var(--ui-space-2) color-mix(in srgb, var(--ui-accent) 12%, transparent),
496
+ var(--ui-shadow-sm);
497
+ }
498
+ :global(.source:active:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
499
+ cursor: grabbing;
500
+ }
501
+ :global(.source:focus-visible:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
502
+ outline: var(--ui-focus-width) solid var(--ui-focus-ring);
503
+ outline-offset: var(--ui-space-1);
504
+ }
505
+ :global(.source:disabled:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
506
+ cursor: not-allowed;
507
+ }
508
+ :global(.source:disabled:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-light-editor"]))):where(:scope, :scope
509
+ *):where([data-hn-ui-light-editor])::after) {
510
+ background: var(--ui-disabled-surface);
511
+ border-color: var(--ui-disabled-border);
512
+ box-shadow: none;
513
+ }
514
+ :global(.coordinates:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
515
+ display: grid !important;
516
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
517
+ gap: var(--ui-space-2) !important;
518
+ }
519
+ :global(.hint:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
520
+ font-size: var(--ui-font-size-sm);
521
+ color: var(--ui-text-secondary);
522
+ }
523
+ @media (forced-colors: active) {
524
+ :global(.source-glyph:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
525
+ color: CanvasText;
526
+ }
527
+ :global(.source:where(:not([data-hn], [data-slotted]:not([data-slotted~="ui-light-editor"]))):where(:scope, :scope
528
+ *):where([data-hn-ui-light-editor])::after) {
529
+ background: Canvas;
530
+ border-color: CanvasText;
531
+ }
532
+ :global(.source:focus-visible:where(:scope, :scope *):where([data-hn-ui-light-editor])) {
533
+ outline-color: Highlight;
534
+ }
535
+ }
536
+ }
421
537
  </style>
@@ -113,10 +113,14 @@ var _hoisted_10 = {
113
113
  "data-hn-ui-button": ""
114
114
  };
115
115
  var _hoisted_11 = {
116
+ class: "label",
117
+ "data-hn-ui-button": ""
118
+ };
119
+ var _hoisted_12 = {
116
120
  class: "badge",
117
121
  "data-hn-ui-button": ""
118
122
  };
119
- var _hoisted_12 = [
123
+ var _hoisted_13 = [
120
124
  "data-appearance",
121
125
  "data-tone",
122
126
  "type",
@@ -141,12 +145,16 @@ var _hoisted_12 = [
141
145
  "data-ui-button-prop-variant",
142
146
  "data-ui-button-state"
143
147
  ];
144
- var _hoisted_13 = {
148
+ var _hoisted_14 = {
145
149
  key: 0,
146
150
  class: "spinner-wrap",
147
151
  "data-hn-ui-button": ""
148
152
  };
149
- var _hoisted_14 = {
153
+ var _hoisted_15 = {
154
+ class: "label",
155
+ "data-hn-ui-button": ""
156
+ };
157
+ var _hoisted_16 = {
150
158
  class: "badge",
151
159
  "data-hn-ui-button": ""
152
160
  };
@@ -843,9 +851,9 @@ var UiButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
843
851
  size: "sm"
844
852
  })])) : createCommentVNode("v-if", true),
845
853
  _cache[4] || (_cache[4] = createTextVNode(toDisplayString(" "), -1)),
846
- renderSlot(_ctx.$slots, "default", {}, void 0, true),
854
+ createElementVNode("span", _hoisted_11, [renderSlot(_ctx.$slots, "default", {}, void 0, true)]),
847
855
  _cache[5] || (_cache[5] = createTextVNode(toDisplayString(" "), -1)),
848
- createElementVNode("span", _hoisted_11, [renderSlot(_ctx.$slots, "badge", {}, void 0, true)])
856
+ createElementVNode("span", _hoisted_12, [renderSlot(_ctx.$slots, "badge", {}, void 0, true)])
849
857
  ], 16, _hoisted_9)), [[unref(vPropValidity), {
850
858
  contract: propValidityContract,
851
859
  values: { ...props }
@@ -880,20 +888,20 @@ var UiButton_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PUR
880
888
  "data-ui-button-state": hostState.value || void 0,
881
889
  ref: "@html-next/root"
882
890
  }), [
883
- checkedProps.value.loading || checkedProps.value.pending ? (openBlock(), createElementBlock("span", _hoisted_13, [createVNode(UiSpinner_default, {
891
+ checkedProps.value.loading || checkedProps.value.pending ? (openBlock(), createElementBlock("span", _hoisted_14, [createVNode(UiSpinner_default, {
884
892
  class: "ui-spinner",
885
893
  size: "sm"
886
894
  })])) : createCommentVNode("v-if", true),
887
895
  _cache[6] || (_cache[6] = createTextVNode(toDisplayString(" "), -1)),
888
- renderSlot(_ctx.$slots, "default", {}, void 0, true),
896
+ createElementVNode("span", _hoisted_15, [renderSlot(_ctx.$slots, "default", {}, void 0, true)]),
889
897
  _cache[7] || (_cache[7] = createTextVNode(toDisplayString(" "), -1)),
890
- createElementVNode("span", _hoisted_14, [renderSlot(_ctx.$slots, "badge", {}, void 0, true)])
891
- ], 16, _hoisted_12)), [[unref(vPropValidity), {
898
+ createElementVNode("span", _hoisted_16, [renderSlot(_ctx.$slots, "badge", {}, void 0, true)])
899
+ ], 16, _hoisted_13)), [[unref(vPropValidity), {
892
900
  contract: propValidityContract,
893
901
  values: { ...props }
894
902
  }]]);
895
903
  };
896
904
  }
897
- }), [["__scopeId", "data-v-1eb598b9"]]);
905
+ }), [["__scopeId", "data-v-290745d7"]]);
898
906
  //#endregion
899
907
  export { UiButton_default as t };
@@ -356,6 +356,6 @@ var UiCheckbox_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__P
356
356
  }]]);
357
357
  };
358
358
  }
359
- }), [["__scopeId", "data-v-d551a32f"]]);
359
+ }), [["__scopeId", "data-v-570a9f0b"]]);
360
360
  //#endregion
361
361
  export { UiCheckbox_default as t };
@@ -2,7 +2,8 @@ import { C as useReflectedProp, S as useComponentHost, _ as nativeAttrs, a as ch
2
2
  import { d as propValidityState, f as requireInputStatus, h as vuePropInputs, i as checkPropInput, m as vPropValidity, r as acceptsControllerWrite, t as BINDING_INPUTS_PROP } from "./props.js";
3
3
  import { t as UiIcon_default } from "./UiIcon.js";
4
4
  import { t as UiNumberInput_default } from "./UiNumberInput.js";
5
- import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, mergeProps, openBlock, provide, ref, renderSlot, toDisplayString, unref, useTemplateRef, watchSyncEffect, withDirectives } from "vue";
5
+ import { t as UiDisclosure_default } from "./UiDisclosure.js";
6
+ import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, getCurrentInstance, mergeProps, openBlock, provide, ref, renderSlot, toDisplayString, unref, useTemplateRef, watchSyncEffect, withCtx, withDirectives } from "vue";
6
7
  //#region .build/vue/UiLightEditor.vue?vue&type=script&setup=true&lang.ts
7
8
  var _hoisted_1 = [
8
9
  "data-ui-light-editor-prop-disabled",
@@ -23,6 +24,7 @@ var _hoisted_5 = {
23
24
  };
24
25
  var _hoisted_6 = {
25
26
  class: "coordinates",
27
+ "data-slotted": "ui-light-editor",
26
28
  "data-hn-ui-light-editor": ""
27
29
  };
28
30
  //#endregion
@@ -288,70 +290,76 @@ var UiLightEditor_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @
288
290
  })])], 8, _hoisted_4)
289
291
  ], 512)], 8, _hoisted_2),
290
292
  _cache[4] || (_cache[4] = createTextVNode(toDisplayString(" "), -1)),
291
- createElementVNode("span", _hoisted_6, [
292
- createVNode(UiNumberInput_default, mergeProps({
293
- class: "ui-number-input",
294
- "data-coordinate": "x",
295
- min: 0,
296
- max: 100,
297
- step: 1,
298
- unit: "%",
299
- label: "Light horizontal position",
300
- value: horizontal.value,
301
- size: checkedProps.value.size,
302
- disabled: checkedProps.value.disabled
303
- }, { [unref(BINDING_INPUTS_PROP)]: {
304
- size: () => ({
305
- value: checkedProps.value.size,
306
- status: inputStatus("size", true)
307
- }),
308
- disabled: () => ({
309
- value: checkedProps.value.disabled,
310
- status: inputStatus("disabled", true)
311
- })
312
- } }), null, 16, [
313
- "value",
314
- "size",
315
- "disabled"
316
- ]),
317
- _cache[3] || (_cache[3] = createTextVNode(toDisplayString(" "), -1)),
318
- createVNode(UiNumberInput_default, mergeProps({
319
- class: "ui-number-input",
320
- "data-coordinate": "y",
321
- min: 0,
322
- max: 100,
323
- step: 1,
324
- unit: "%",
325
- label: "Light vertical position",
326
- value: vertical.value,
327
- size: checkedProps.value.size,
328
- disabled: checkedProps.value.disabled
329
- }, { [unref(BINDING_INPUTS_PROP)]: {
330
- size: () => ({
331
- value: checkedProps.value.size,
332
- status: inputStatus("size", true)
333
- }),
334
- disabled: () => ({
335
- value: checkedProps.value.disabled,
336
- status: inputStatus("disabled", true)
337
- })
338
- } }), null, 16, [
339
- "value",
340
- "size",
341
- "disabled"
342
- ])
343
- ]),
344
- _cache[5] || (_cache[5] = createTextVNode(toDisplayString(" "), -1)),
345
- _cache[6] || (_cache[6] = createElementVNode("span", {
293
+ _cache[5] || (_cache[5] = createElementVNode("span", {
346
294
  class: "hint",
347
295
  "data-hn-ui-light-editor": ""
348
- }, "Drag the light, tap the background, use arrow keys, or enter its position. Escape cancels a drag. Top centre is 50%, 0%.", -1))
296
+ }, "Drag or tap to move the light. Arrow keys adjust; Escape cancels.", -1)),
297
+ _cache[6] || (_cache[6] = createTextVNode(toDisplayString(" "), -1)),
298
+ createVNode(UiDisclosure_default, {
299
+ class: "ui-disclosure",
300
+ summary: "Exact position"
301
+ }, {
302
+ default: withCtx(() => [createElementVNode("span", _hoisted_6, [
303
+ createVNode(UiNumberInput_default, mergeProps({
304
+ class: "ui-number-input",
305
+ "data-coordinate": "x",
306
+ min: 0,
307
+ max: 100,
308
+ step: 1,
309
+ unit: "%",
310
+ label: "Light horizontal position",
311
+ value: horizontal.value,
312
+ size: checkedProps.value.size,
313
+ disabled: checkedProps.value.disabled
314
+ }, { [unref(BINDING_INPUTS_PROP)]: {
315
+ size: () => ({
316
+ value: checkedProps.value.size,
317
+ status: inputStatus("size", true)
318
+ }),
319
+ disabled: () => ({
320
+ value: checkedProps.value.disabled,
321
+ status: inputStatus("disabled", true)
322
+ })
323
+ } }), null, 16, [
324
+ "value",
325
+ "size",
326
+ "disabled"
327
+ ]),
328
+ _cache[3] || (_cache[3] = createTextVNode(toDisplayString(" "), -1)),
329
+ createVNode(UiNumberInput_default, mergeProps({
330
+ class: "ui-number-input",
331
+ "data-coordinate": "y",
332
+ min: 0,
333
+ max: 100,
334
+ step: 1,
335
+ unit: "%",
336
+ label: "Light vertical position",
337
+ value: vertical.value,
338
+ size: checkedProps.value.size,
339
+ disabled: checkedProps.value.disabled
340
+ }, { [unref(BINDING_INPUTS_PROP)]: {
341
+ size: () => ({
342
+ value: checkedProps.value.size,
343
+ status: inputStatus("size", true)
344
+ }),
345
+ disabled: () => ({
346
+ value: checkedProps.value.disabled,
347
+ status: inputStatus("disabled", true)
348
+ })
349
+ } }), null, 16, [
350
+ "value",
351
+ "size",
352
+ "disabled"
353
+ ])
354
+ ])]),
355
+ _: 1
356
+ })
349
357
  ], 16, _hoisted_1)), [[unref(vPropValidity), {
350
358
  contract: propValidityContract,
351
359
  values: { ...props }
352
360
  }]]);
353
361
  };
354
362
  }
355
- }), [["__scopeId", "data-v-dc22fbcf"]]);
363
+ }), [["__scopeId", "data-v-7f354401"]]);
356
364
  //#endregion
357
365
  export { UiLightEditor_default as t };