@threadlabs/looma 0.31.2 → 0.31.3

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": "@threadlabs/looma",
3
- "version": "0.31.2",
3
+ "version": "0.31.3",
4
4
  "type": "module",
5
5
  "description": "Looma components as HTML, Vue, and plain DOM, with design tokens.",
6
6
  "license": "MIT",
@@ -64,6 +64,7 @@
64
64
  }
65
65
 
66
66
  :scope:where([data-component~="ui-editor-toolbar"])[data-ui-editor-toolbar-state~="floating"] {
67
+ box-sizing: border-box;
67
68
  position: relative;
68
69
  top: auto;
69
70
  width: max-content;
@@ -70,6 +70,15 @@
70
70
  box-shadow: var(--_ui-popover-shadow, var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg))));
71
71
  }
72
72
 
73
+ /* A toolbar or card can supply its own surface, including an unclipped shadow. */
74
+ :scope:where([data-component~="ui-popover"])[data-ui-popover-state~="bare"] .surface {
75
+ overflow: visible;
76
+ padding: 0;
77
+ border: 0;
78
+ background: transparent;
79
+ box-shadow: none;
80
+ }
81
+
73
82
  :scope:where([data-component~="ui-popover"]):not([data-ui-popover-state~="internalOpen"]) {
74
83
  display: none;
75
84
  }
@@ -125,6 +134,8 @@
125
134
  @scope ([data-component~="ui-popover"]) to ([data-component]) {
126
135
  /* This component's hooks style the element they are set on, and never a nested one. */
127
136
 
137
+ /* A toolbar or card can supply its own surface, including an unclipped shadow. */
138
+
128
139
  @starting-style {
129
140
  }
130
141
 
@@ -12,6 +12,7 @@ export interface UiPopoverElement extends HTMLSpanElement {
12
12
  removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
13
13
  }
14
14
  export interface UiPopoverProps {
15
+ bare?: boolean | null;
15
16
  for?: string | null;
16
17
  open?: boolean | null;
17
18
  placement?: "top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end" | null;
@@ -7,7 +7,7 @@ const T0 = ["",[],["div",["class","surface"],4]];
7
7
  const T1 = ["",[]];
8
8
  let P0, P1;
9
9
  const S = { n: ["internalOpen"], t: ["b"], f: import.meta.url, g: "ui-popover", d: { "open": [detailCheck(checkObject([["open", checkBoolean, false], ["reason", checkConstrained(checkFormat("keyword", keywordFormat), "keyword", {"values":["action","programmatic","light-dismiss","escape"]}), false], ["trigger", checkConstrained(checkFormat("keyword", keywordFormat), "keyword", {"values":["keyboard","pointer","programmatic"]}), false]], false)), true, true, false], "close": [detailCheck(checkObject([["open", checkBoolean, false], ["reason", checkConstrained(checkFormat("keyword", keywordFormat), "keyword", {"values":["action","programmatic","light-dismiss","escape"]}), false], ["trigger", checkConstrained(checkFormat("keyword", keywordFormat), "keyword", {"values":["keyboard","pointer","programmatic"]}), false]], false)), true, true, false] }, x: dispatchDeclared, a: (host, I) => C(host, I), b: generatedInputs, i: [false] };
10
- const D = { g: "ui-popover", props: { "for": { "required":false,"default":"", c: checkString, t: "string", j: 0, m: "s" }, "open": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "placement": { "required":false,"values":["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end"],"default":"bottom-start", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "size": { "required":false,"values":["content","sm","md","lg"],"default":"content", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] } } };
10
+ const D = { g: "ui-popover", props: { "bare": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "for": { "required":false,"default":"", c: checkString, t: "string", j: 0, m: "s" }, "open": { "required":false,"default":false, c: checkBoolean, t: "boolean", j: 0, m: "b" }, "placement": { "required":false,"values":["top","top-start","top-end","bottom","bottom-start","bottom-end","left","left-start","left-end","right","right-start","right-end"],"default":"bottom-start", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] }, "size": { "required":false,"values":["content","sm","md","lg"],"default":"content", c: checkFormat("keyword", keywordFormat), t: "keyword", j: 0, m: ["p",formatOf(keywordFormat)] } } };
11
11
  const C = (host) => activateModule(controller, host);
12
12
 
13
13
  export function createUiPopover(options = {}, html) {
@@ -19,7 +19,7 @@ export function createUiPopover(options = {}, html) {
19
19
  }
20
20
  element.setAttribute("data-component", "ui-popover");
21
21
  element.append((P0 ??= buildTemplate(T0)).cloneNode(true));
22
- const v = [false, null, null, null, null];
22
+ const v = [false, null, null, null, null, null];
23
23
  const B = acceptProps(element, D, S.n, v, componentProps, [], html);
24
24
  const m1 = (d) => {
25
25
  const n = (P1 ??= buildTemplate(T1)).cloneNode(true);
@@ -30,8 +30,8 @@ export function createUiPopover(options = {}, html) {
30
30
  const p1 = (r, c, d) => {
31
31
  };
32
32
  const p0 = (r, c, d) => {
33
- if (c & 17) {
34
- const x0 = hostState(["internalOpen","size"], [v[0], v[4]]);
33
+ if (c & 35) {
34
+ const x0 = hostState(["bare","internalOpen","size"], [v[1], v[0], v[5]]);
35
35
  const s0 = x0;
36
36
  if (s0 !== r.v0) writeAttribute(r.n, "data-ui-popover-state", (r.v0 = s0) === "" ? null : s0);
37
37
  }
@@ -48,4 +48,4 @@ export function createUiPopover(options = {}, html) {
48
48
  manageProps(I);
49
49
  return element;
50
50
  }
51
- defineComponent("ui-popover", createUiPopover, ["for","open","placement","size"]);
51
+ defineComponent("ui-popover", createUiPopover, ["bare","for","open","placement","size"]);
@@ -217,6 +217,7 @@ useComponentHost(() => import('../components/ui-editor-toolbar/ui-editor-toolbar
217
217
  }
218
218
 
219
219
  :global(:scope[data-ui-editor-toolbar-state~="floating"]:where([data-hn-ui-editor-toolbar])) {
220
+ box-sizing: border-box;
220
221
  position: relative;
221
222
  top: auto;
222
223
  width: max-content;
@@ -5,6 +5,9 @@ type __VLS_Slots = {} & {
5
5
  default?: (props: typeof __VLS_1) => any;
6
6
  };
7
7
  declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
8
+ bare: {
9
+ type: PropType<boolean | null>;
10
+ };
8
11
  for: {
9
12
  type: PropType<string | null>;
10
13
  };
@@ -33,6 +36,9 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
33
36
  }>) => any;
34
37
  "update:open": (value: boolean) => any;
35
38
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
39
+ bare: {
40
+ type: PropType<boolean | null>;
41
+ };
36
42
  for: {
37
43
  type: PropType<string | null>;
38
44
  };
package/vue/UiPopover.vue CHANGED
@@ -27,6 +27,14 @@ defineOptions({ inheritAttrs: false })
27
27
 
28
28
  const propValidityContract = {
29
29
  props: {
30
+ bare: {
31
+ type: { kind: 'terminal', name: 'boolean' },
32
+ required: false,
33
+ target: { attribute: 'bare' },
34
+ description:
35
+ 'Delegates the surface to its content, with no padding, border, background, shadow, or overflow clipping.',
36
+ default: false,
37
+ },
30
38
  for: {
31
39
  type: { kind: 'terminal', name: 'string' },
32
40
  required: false,
@@ -75,6 +83,7 @@ const propValidityContract = {
75
83
  },
76
84
  } as const
77
85
  const props = defineProps({
86
+ bare: { type: null as unknown as PropType<boolean | null> },
78
87
  for: { type: null as unknown as PropType<string | null> },
79
88
  open: { type: null as unknown as PropType<boolean | null> },
80
89
  placement: {
@@ -98,18 +107,22 @@ const props = defineProps({
98
107
  [BINDING_INPUTS_PROP]: { type: null as unknown as PropType<InputBindings> },
99
108
  })
100
109
  const acceptedProps: Record<string, unknown> = {
110
+ bare: false,
101
111
  for: '',
102
112
  open: false,
103
113
  placement: 'bottom-start',
104
114
  size: 'content',
105
115
  }
106
116
  const inputTracking = vuePropInputs(acceptedProps, {
117
+ bare: false,
107
118
  for: '',
108
119
  open: false,
109
120
  placement: 'bottom-start',
110
121
  size: 'content',
111
122
  }, (name, value, source, values) => {
112
123
  switch (name) {
124
+ case 'bare':
125
+ return checkPropInput(value, { kind: 'terminal', name: 'boolean' }, true, true)
113
126
  case 'for':
114
127
  return checkPropInput(value, { kind: 'terminal', name: 'string' }, true, true)
115
128
  case 'open':
@@ -128,6 +141,11 @@ const propInputs = inputTracking.inputs
128
141
  const checkedProps = computed(() => {
129
142
  void inputTracking.version.value
130
143
  return ({
144
+ bare: propInputs.value<boolean | null>(
145
+ 'bare',
146
+ props['bare'],
147
+ props[BINDING_INPUTS_PROP],
148
+ ) as boolean,
131
149
  for: propInputs.value<string | null>('for', props['for'], props[BINDING_INPUTS_PROP]) as string,
132
150
  open: propInputs.value<boolean | null>(
133
151
  'open',
@@ -209,6 +227,7 @@ checkHydratedRoot('span', 'ui-popover')
209
227
  /** The values the styles' :host() and :state() rules test. */
210
228
  const hostState = computed(() =>
211
229
  [
230
+ checkedProps.value.bare && 'bare',
212
231
  internalOpen.value && 'internalOpen',
213
232
  checkedProps.value.size && 'size',
214
233
  checkedProps.value.size != null && `size=${encodeURIComponent(checkedProps.value.size)}`,
@@ -260,7 +279,7 @@ useComponentHost(() => import('../components/ui-popover/ui-popover.js'), {
260
279
  ? (incoming[name] ?? incoming[kebab] ?? null)
261
280
  : null
262
281
  },
263
- propNames: ['for', 'open', 'placement', 'size'],
282
+ propNames: ['bare', 'for', 'open', 'placement', 'size'],
264
283
  propValidity: (name: string) =>
265
284
  propValidityState({ contract: propValidityContract, values: { ...props } }, name),
266
285
  state: { internalOpen },
@@ -274,6 +293,7 @@ useComponentHost(() => import('../components/ui-popover/ui-popover.js'), {
274
293
  data-hn
275
294
  data-hn-ui-popover
276
295
  v-prop-validity="{ contract: propValidityContract, values: { ...props } }"
296
+ :data-ui-popover-prop-bare="reflectedProp('bare', 'bare', checkedProps.bare, undefined, false)"
277
297
  :data-ui-popover-prop-for="reflectedProp('for', 'for', checkedProps.for, undefined, false)"
278
298
  :data-ui-popover-prop-open="reflectedProp('open', 'open', checkedProps.open, undefined, false)"
279
299
  :data-ui-popover-prop-placement="reflectedProp('placement', 'placement', checkedProps.placement, undefined, false)"
@@ -313,6 +333,9 @@ useComponentHost(() => import('../components/ui-popover/ui-popover.js'), {
313
333
  syntax: "*";
314
334
  inherits: false;
315
335
  }
336
+
337
+ /* A toolbar or card can supply its own surface, including an unclipped shadow. */
338
+
316
339
  @scope (.ui-popover) to ([data-hn]) {
317
340
  :global(:scope:where([data-hn-ui-popover])) {
318
341
  --_ui-popover-surface: var(--ui-popover-surface);
@@ -350,6 +373,13 @@ useComponentHost(() => import('../components/ui-popover/ui-popover.js'), {
350
373
  var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
351
374
  );
352
375
  }
376
+ :global(:scope[data-ui-popover-state~="bare"] .surface:where([data-hn-ui-popover])) {
377
+ overflow: visible;
378
+ padding: 0;
379
+ border: 0;
380
+ background: transparent;
381
+ box-shadow: none;
382
+ }
353
383
 
354
384
  :global(:scope:not([data-ui-popover-state~="internalOpen"]):where([data-hn-ui-popover])) {
355
385
  display: none;
@@ -98,6 +98,6 @@ var UiEditorToolbar_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
98
98
  }]]);
99
99
  };
100
100
  }
101
- }), [["__scopeId", "data-v-01110420"]]);
101
+ }), [["__scopeId", "data-v-a75db733"]]);
102
102
  //#endregion
103
103
  export { UiEditorToolbar_default as t };
@@ -3,6 +3,7 @@ import { f as vPropValidity, i as checkPropInput, l as propValidityState, p as v
3
3
  import { computed, createElementBlock, createElementVNode, defineComponent, getCurrentInstance, mergeProps, openBlock, provide, ref, renderSlot, unref, watchSyncEffect, withDirectives } from "vue";
4
4
  //#region .build/vue/UiPopover.vue?vue&type=script&setup=true&lang.ts
5
5
  var _hoisted_1 = [
6
+ "data-ui-popover-prop-bare",
6
7
  "data-ui-popover-prop-for",
7
8
  "data-ui-popover-prop-open",
8
9
  "data-ui-popover-prop-placement",
@@ -19,6 +20,7 @@ var UiPopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
19
20
  inheritAttrs: false,
20
21
  __name: "UiPopover",
21
22
  props: {
23
+ bare: { type: null },
22
24
  for: { type: null },
23
25
  open: { type: null },
24
26
  placement: { type: null },
@@ -32,6 +34,16 @@ var UiPopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
32
34
  ],
33
35
  setup(__props, { emit: __emit }) {
34
36
  const propValidityContract = { props: {
37
+ bare: {
38
+ type: {
39
+ kind: "terminal",
40
+ name: "boolean"
41
+ },
42
+ required: false,
43
+ target: { attribute: "bare" },
44
+ description: "Delegates the surface to its content, with no padding, border, background, shadow, or overflow clipping.",
45
+ default: false
46
+ },
35
47
  for: {
36
48
  type: {
37
49
  kind: "terminal",
@@ -95,17 +107,23 @@ var UiPopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
95
107
  } };
96
108
  const props = __props;
97
109
  const inputTracking = vuePropInputs({
110
+ bare: false,
98
111
  for: "",
99
112
  open: false,
100
113
  placement: "bottom-start",
101
114
  size: "content"
102
115
  }, {
116
+ bare: false,
103
117
  for: "",
104
118
  open: false,
105
119
  placement: "bottom-start",
106
120
  size: "content"
107
121
  }, (name, value, source, values) => {
108
122
  switch (name) {
123
+ case "bare": return checkPropInput(value, {
124
+ kind: "terminal",
125
+ name: "boolean"
126
+ }, true, true);
109
127
  case "for": return checkPropInput(value, {
110
128
  kind: "terminal",
111
129
  name: "string"
@@ -131,6 +149,7 @@ var UiPopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
131
149
  const checkedProps = computed(() => {
132
150
  inputTracking.version.value;
133
151
  return {
152
+ bare: propInputs.value("bare", props["bare"], props[BINDING_INPUTS_PROP]),
134
153
  for: propInputs.value("for", props["for"], props[BINDING_INPUTS_PROP]),
135
154
  open: propInputs.value("open", props["open"], props[BINDING_INPUTS_PROP]),
136
155
  placement: propInputs.value("placement", props["placement"], props[BINDING_INPUTS_PROP]),
@@ -150,6 +169,7 @@ var UiPopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
150
169
  checkHydratedRoot("span", "ui-popover");
151
170
  /** The values the styles' :host() and :state() rules test. */
152
171
  const hostState = computed(() => [
172
+ checkedProps.value.bare && "bare",
153
173
  internalOpen.value && "internalOpen",
154
174
  checkedProps.value.size && "size",
155
175
  checkedProps.value.size != null && `size=${encodeURIComponent(checkedProps.value.size)}`
@@ -188,6 +208,7 @@ var UiPopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
188
208
  return incoming !== null && incoming !== void 0 ? incoming[name] ?? incoming[kebab] ?? null : null;
189
209
  },
190
210
  propNames: [
211
+ "bare",
191
212
  "for",
192
213
  "open",
193
214
  "placement",
@@ -203,6 +224,7 @@ var UiPopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
203
224
  return withDirectives((openBlock(), createElementBlock("span", mergeProps({ class: "ui-popover" }, unref(nativeAttrs)(_ctx.$attrs), {
204
225
  "data-hn": "",
205
226
  "data-hn-ui-popover": "",
227
+ "data-ui-popover-prop-bare": unref(reflectedProp)("bare", "bare", checkedProps.value.bare, void 0, false),
206
228
  "data-ui-popover-prop-for": unref(reflectedProp)("for", "for", checkedProps.value.for, void 0, false),
207
229
  "data-ui-popover-prop-open": unref(reflectedProp)("open", "open", checkedProps.value.open, void 0, false),
208
230
  "data-ui-popover-prop-placement": unref(reflectedProp)("placement", "placement", checkedProps.value.placement, void 0, false),
@@ -216,6 +238,6 @@ var UiPopover_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @__PU
216
238
  }]]);
217
239
  };
218
240
  }
219
- }), [["__scopeId", "data-v-b924204e"]]);
241
+ }), [["__scopeId", "data-v-b4881cc1"]]);
220
242
  //#endregion
221
243
  export { UiPopover_default as t };
@@ -4843,6 +4843,7 @@ legend.sr-only:where([data-hn-ui-radio-group]) {
4843
4843
  margin: 0 var(--ui-editor-toolbar-divider-margin, 4px);
4844
4844
  }
4845
4845
  :scope[data-ui-editor-toolbar-state~="floating"]:where([data-hn-ui-editor-toolbar]) {
4846
+ box-sizing: border-box;
4846
4847
  position: relative;
4847
4848
  top: auto;
4848
4849
  width: max-content;
@@ -5389,6 +5390,8 @@ html[data-ui-input-modality="touch"] :scope:where([data-hn-ui-icon-button])::aft
5389
5390
  syntax: "*";
5390
5391
  inherits: false;
5391
5392
  }
5393
+
5394
+ /* A toolbar or card can supply its own surface, including an unclipped shadow. */
5392
5395
  @scope (.ui-popover) to ([data-hn]) {
5393
5396
  :scope:where([data-hn-ui-popover]) {
5394
5397
  --_ui-popover-surface: var(--ui-popover-surface);
@@ -5425,6 +5428,13 @@ html[data-ui-input-modality="touch"] :scope:where([data-hn-ui-icon-button])::aft
5425
5428
  var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg)))
5426
5429
  );
5427
5430
  }
5431
+ :scope[data-ui-popover-state~="bare"] .surface:where([data-hn-ui-popover]) {
5432
+ overflow: visible;
5433
+ padding: 0;
5434
+ border: 0;
5435
+ background: transparent;
5436
+ box-shadow: none;
5437
+ }
5428
5438
  :scope:not([data-ui-popover-state~="internalOpen"]):where([data-hn-ui-popover]) {
5429
5439
  display: none;
5430
5440
  }
@@ -10773,15 +10783,6 @@ html[data-ui-input-modality="touch"]
10773
10783
  background: transparent;
10774
10784
  }
10775
10785
 
10776
- /* The floating toolbar supplies the surface; the containing popover only
10777
- positions it beside the app-owned trigger. */
10778
- .looma-editor__formatting-popover {
10779
- --ui-popover-padding: 0;
10780
- --ui-popover-surface: transparent;
10781
- --ui-popover-border: transparent;
10782
- --ui-popover-shadow: none;
10783
- }
10784
-
10785
10786
  .looma-editor__chip-popover {
10786
10787
  inline-size: min(15rem, calc(100vw - 2rem));
10787
10788
  }
@@ -12877,6 +12878,15 @@ html[data-ui-input-modality="touch"]
12877
12878
  box-shadow: var(--_ui-popover-shadow, var(--ui-overlay-shadow, var(--ui-elevation-overlay, var(--ui-shadow-lg))));
12878
12879
  }
12879
12880
 
12881
+ /* A toolbar or card can supply its own surface, including an unclipped shadow. */
12882
+ :scope:where([data-component~="ui-popover"])[data-ui-popover-state~="bare"] .surface {
12883
+ overflow: visible;
12884
+ padding: 0;
12885
+ border: 0;
12886
+ background: transparent;
12887
+ box-shadow: none;
12888
+ }
12889
+
12880
12890
  :scope:where([data-component~="ui-popover"]):not([data-ui-popover-state~="internalOpen"]) {
12881
12891
  display: none;
12882
12892
  }
@@ -12932,6 +12942,8 @@ html[data-ui-input-modality="touch"]
12932
12942
  @scope ([data-component~="ui-popover"]) to ([data-component]) {
12933
12943
  /* This component's hooks style the element they are set on, and never a nested one. */
12934
12944
 
12945
+ /* A toolbar or card can supply its own surface, including an unclipped shadow. */
12946
+
12935
12947
  @starting-style {
12936
12948
  }
12937
12949
 
@@ -427,7 +427,8 @@ function createViewportSurface$1(surface, options = {}) {
427
427
  else Object.assign(surface.style, {
428
428
  padding: "0",
429
429
  border: "0",
430
- background: "transparent"
430
+ background: "transparent",
431
+ overflow: "visible"
431
432
  });
432
433
  }
433
434
  const hideSurface = () => {
@@ -4764,7 +4765,8 @@ function createViewportSurface(surface, options = {}) {
4764
4765
  else Object.assign(surface.style, {
4765
4766
  padding: "0",
4766
4767
  border: "0",
4767
- background: "transparent"
4768
+ background: "transparent",
4769
+ overflow: "visible"
4768
4770
  });
4769
4771
  }
4770
4772
  const hideSurface = () => {
@@ -8978,6 +8980,14 @@ var S$9 = {
8978
8980
  var D$9 = {
8979
8981
  g: "ui-popover",
8980
8982
  props: {
8983
+ "bare": {
8984
+ "required": false,
8985
+ "default": false,
8986
+ c: checkBoolean,
8987
+ t: "boolean",
8988
+ j: 0,
8989
+ m: "b"
8990
+ },
8981
8991
  "for": {
8982
8992
  "required": false,
8983
8993
  "default": "",
@@ -9047,6 +9057,7 @@ function createUiPopover(options = {}, html) {
9047
9057
  null,
9048
9058
  null,
9049
9059
  null,
9060
+ null,
9050
9061
  null
9051
9062
  ];
9052
9063
  const B = acceptProps(element, D$9, S$9.n, v, componentProps, [], html);
@@ -9054,8 +9065,16 @@ function createUiPopover(options = {}, html) {
9054
9065
  return { n: (P1$7 ??= buildTemplate(T1$7)).cloneNode(true) };
9055
9066
  };
9056
9067
  const p0 = (r, c, d) => {
9057
- if (c & 17) {
9058
- const s0 = hostState(["internalOpen", "size"], [v[0], v[4]]);
9068
+ if (c & 35) {
9069
+ const s0 = hostState([
9070
+ "bare",
9071
+ "internalOpen",
9072
+ "size"
9073
+ ], [
9074
+ v[1],
9075
+ v[0],
9076
+ v[5]
9077
+ ]);
9059
9078
  if (s0 !== r.v0) writeAttribute(r.n, "data-ui-popover-state", (r.v0 = s0) === "" ? null : s0);
9060
9079
  }
9061
9080
  if (r.f0 === void 0) {
@@ -9091,6 +9110,7 @@ function createUiPopover(options = {}, html) {
9091
9110
  return element;
9092
9111
  }
9093
9112
  defineComponent$1("ui-popover", createUiPopover, [
9113
+ "bare",
9094
9114
  "for",
9095
9115
  "open",
9096
9116
  "placement",
@@ -16064,6 +16084,7 @@ var LoomaEditor = defineComponent({
16064
16084
  }, [props.toolbarMode === "contextual" && floatingFormattingMode() && formattingActive() ? null : renderLinkContextCard(instance)])]) : null,
16065
16085
  instance && props.editable && !mobile.value && props.toolbarMode === "popover" && props.toolbarTriggerId ? h(Popover, {
16066
16086
  class: "looma-editor__formatting-popover",
16087
+ bare: true,
16067
16088
  role: "region",
16068
16089
  "aria-label": "Formatting tools",
16069
16090
  open: props.toolbarOpen,
@@ -16193,6 +16214,7 @@ var LoomaEditor = defineComponent({
16193
16214
  props.editable && props.compactToolbar && !mobile.value ? h(Popover, {
16194
16215
  class: "looma-editor__compact-formatting",
16195
16216
  for: formatAnchorId,
16217
+ bare: true,
16196
16218
  open: formatOpen.value,
16197
16219
  placement: "bottom-start",
16198
16220
  onOpen: () => {