@vielzeug/refine 3.1.0 → 3.2.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.
- package/dist/custom-elements.json +508 -508
- package/dist/inputs/switch/switch.css.cjs +1 -1
- package/dist/inputs/switch/switch.css.cjs.map +1 -1
- package/dist/inputs/switch/switch.css.js +1 -1
- package/dist/inputs/switch/switch.css.js.map +1 -1
- package/dist/inputs/switch/switch.d.ts.map +1 -1
- package/dist/layout/sidebar/sidebar.d.ts +1 -0
- package/dist/layout/sidebar/sidebar.d.ts.map +1 -1
- package/dist/overlay/menu/menu.css.cjs +1 -1
- package/dist/overlay/menu/menu.css.cjs.map +1 -1
- package/dist/overlay/menu/menu.css.js +1 -1
- package/dist/overlay/menu/menu.css.js.map +1 -1
- package/dist/overlay/shared/use-floating-trigger.cjs +1 -1
- package/dist/overlay/shared/use-floating-trigger.cjs.map +1 -1
- package/dist/overlay/shared/use-floating-trigger.d.ts +3 -3
- package/dist/overlay/shared/use-floating-trigger.d.ts.map +1 -1
- package/dist/overlay/shared/use-floating-trigger.js +16 -4
- package/dist/overlay/shared/use-floating-trigger.js.map +1 -1
- package/dist/refine.cjs +57 -24
- package/dist/refine.cjs.map +1 -1
- package/dist/refine.iife.js +57 -24
- package/dist/refine.iife.js.map +1 -1
- package/dist/refine.js +57 -24
- package/dist/refine.js.map +1 -1
- package/dist/sidebar.cjs +10 -2
- package/dist/sidebar.cjs.map +1 -1
- package/dist/sidebar.js +10 -1
- package/dist/sidebar.js.map +1 -1
- package/dist/switch.cjs +28 -3
- package/dist/switch.cjs.map +1 -1
- package/dist/switch.js +54 -30
- package/dist/switch.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=`@layer refine.base{:host{--_width:var(--switch-width,var(--size-10));--_height:var(--switch-height,var(--size-5));--_padding:var(--size-0-5);--_thumb-size:calc(var(--_height) - var(--_padding) * 2);--_track-bg:var(--switch-track-bg,var(--color-contrast-300));--_thumb-bg:var(--switch-thumb-bg,white);--_font-size:var(--switch-font-size,var(--text-sm));gap:var(--_gap,var(--size-2-5));min-height:var(--_touch-target);touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;display:inline-flex}.switch-wrapper{flex-shrink:0;display:flex}.switch-track{width:var(--_width);height:var(--_height);background:var(--_track-bg);border-radius:var(--rounded-full);transition:background var(--transition-normal), box-shadow var(--transition-normal);position:relative}.switch-thumb{top:var(--_padding);width:var(--_thumb-size);height:var(--_thumb-size);background:var(--_thumb-bg);border-radius:var(--rounded-full);box-shadow:var(--shadow-sm);transition:transform var(--transition-spring), box-shadow var(--transition-normal);will-change:transform;position:absolute}.switch-thumb:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:var(--_padding)}.switch-thumb:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:var(--_padding)}:host(:focus-visible) .switch-track{box-shadow:var(--_focus-shadow)}.label{font-size:var(--_font-size);color:var(--color-contrast)}}@layer refine.overrides{:host{--_active-bg:var(--switch-checked-bg,var(--_theme-base));--_focus-shadow:var(--_theme-shadow)}:host([checked]) .switch-track{background:var(--_active-bg)}:host([checked]) .switch-thumb{transform:translateX(calc(var(--_width) - var(--_height)))}:host(:dir(rtl)[checked]) .switch-thumb{transform:translateX(calc(-1 * (var(--_width) - var(--_height))))}:host(:hover:not([disabled],[checked])) .switch-track{background:var(--color-contrast-400)}:host(:hover:not([disabled])[checked]) .switch-track{filter:brightness(1.1)}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas))}.helper-text:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){padding-left:calc(var(--_width) + var(--size-2-5))}.helper-text:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:calc(var(--_width) + var(--size-2-5))}.helper-text[role=alert]{color:var(--color-error)}}`;exports.default=e;
|
|
1
|
+
var e=`@layer refine.base{:host{--_width:var(--switch-width,var(--size-10));--_height:var(--switch-height,var(--size-5));--_padding:var(--size-0-5);--_thumb-size:calc(var(--_height) - var(--_padding) * 2);--_track-bg:var(--switch-track-bg,var(--color-contrast-300));--_thumb-bg:var(--switch-thumb-bg,white);--_font-size:var(--switch-font-size,var(--text-sm));gap:var(--_gap,var(--size-2-5));min-height:var(--_touch-target);touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;flex-shrink:0;align-items:center;display:inline-flex}.switch-wrapper{flex-shrink:0;display:flex}.switch-track{width:var(--_width);height:var(--_height);background:var(--_track-bg);border-radius:var(--rounded-full);transition:background var(--transition-normal), box-shadow var(--transition-normal);position:relative}.switch-thumb{top:var(--_padding);width:var(--_thumb-size);height:var(--_thumb-size);background:var(--_thumb-bg);border-radius:var(--rounded-full);box-shadow:var(--shadow-sm);transition:transform var(--transition-spring), box-shadow var(--transition-normal);will-change:transform;position:absolute}.switch-thumb:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:var(--_padding)}.switch-thumb:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:var(--_padding)}:host(:focus-visible) .switch-track{box-shadow:var(--_focus-shadow)}.label{font-size:var(--_font-size);color:var(--color-contrast)}}@layer refine.overrides{:host{--_active-bg:var(--switch-checked-bg,var(--_theme-base));--_focus-shadow:var(--_theme-shadow)}:host([checked]) .switch-track{background:var(--_active-bg)}:host([checked]) .switch-thumb{transform:translateX(calc(var(--_width) - var(--_height)))}:host(:dir(rtl)[checked]) .switch-thumb{transform:translateX(calc(-1 * (var(--_width) - var(--_height))))}:host(:hover:not([disabled],[checked])) .switch-track{background:var(--color-contrast-400)}:host(:hover:not([disabled])[checked]) .switch-track{filter:brightness(1.1)}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas))}.helper-text:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){padding-left:calc(var(--_width) + var(--size-2-5))}.helper-text:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:calc(var(--_width) + var(--size-2-5))}.helper-text[role=alert]{color:var(--color-error)}}`;exports.default=e;
|
|
2
2
|
//# sourceMappingURL=switch.css.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.css.cjs","names":[],"sources":["../../../src/inputs/switch/switch.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_width: var(--switch-width, var(--size-10));\n --_height: var(--switch-height, var(--size-5));\n --_padding: var(--size-0-5);\n --_thumb-size: calc(var(--_height) - var(--_padding) * 2);\n --_track-bg: var(--switch-track-bg, var(--color-contrast-300));\n --_thumb-bg: var(--switch-thumb-bg, white);\n --_font-size: var(--switch-font-size, var(--text-sm));\n\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--_gap, var(--size-2-5));\n align-items: center;\n min-height: var(--_touch-target);\n touch-action: manipulation;\n cursor: pointer;\n user-select: none;\n }\n\n /* ========================================\n Track & Thumb\n ======================================== */\n\n .switch-wrapper {\n display: flex;\n flex-shrink: 0;\n }\n\n .switch-track {\n position: relative;\n width: var(--_width);\n height: var(--_height);\n background: var(--_track-bg);\n border-radius: var(--rounded-full);\n transition:\n background var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n .switch-thumb {\n position: absolute;\n inset-inline-start: var(--_padding);\n top: var(--_padding);\n width: var(--_thumb-size);\n height: var(--_thumb-size);\n background: var(--_thumb-bg);\n border-radius: var(--rounded-full);\n box-shadow: var(--shadow-sm);\n transition:\n transform var(--transition-spring),\n box-shadow var(--transition-normal);\n will-change: transform;\n }\n\n /* ========================================\n Focus State\n ======================================== */\n\n :host(:focus-visible) .switch-track {\n box-shadow: var(--_focus-shadow);\n }\n\n /* ========================================\n Label\n ======================================== */\n\n .label {\n font-size: var(--_font-size);\n color: var(--color-contrast);\n }\n}\n\n@layer refine.overrides {\n /* Map theme variables to switch-specific variables */\n :host {\n --_active-bg: var(--switch-checked-bg, var(--_theme-base));\n --_focus-shadow: var(--_theme-shadow);\n }\n\n /* ========================================\n Checked State\n ======================================== */\n\n :host([checked]) .switch-track {\n background: var(--_active-bg);\n }\n\n :host([checked]) .switch-thumb {\n transform: translateX(calc(var(--_width) - var(--_height)));\n }\n\n /* In RTL the thumb starts at the inline-end edge; slide left to reach inline-start */\n :host(:dir(rtl)[checked]) .switch-thumb {\n transform: translateX(calc(-1 * (var(--_width) - var(--_height))));\n }\n\n /* ========================================\n Hover & Active States\n ======================================== */\n\n :host(:hover:not([disabled], [checked])) .switch-track {\n background: var(--color-contrast-400);\n }\n\n :host(:hover:not([disabled])[checked]) .switch-track {\n filter: brightness(1.1);\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n padding-inline-start: calc(var(--_width) + var(--size-2-5));\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"switch.css.cjs","names":[],"sources":["../../../src/inputs/switch/switch.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_width: var(--switch-width, var(--size-10));\n --_height: var(--switch-height, var(--size-5));\n --_padding: var(--size-0-5);\n --_thumb-size: calc(var(--_height) - var(--_padding) * 2);\n --_track-bg: var(--switch-track-bg, var(--color-contrast-300));\n --_thumb-bg: var(--switch-thumb-bg, white);\n --_font-size: var(--switch-font-size, var(--text-sm));\n\n display: inline-flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n gap: var(--_gap, var(--size-2-5));\n align-items: center;\n min-height: var(--_touch-target);\n touch-action: manipulation;\n cursor: pointer;\n user-select: none;\n }\n\n /* ========================================\n Track & Thumb\n ======================================== */\n\n .switch-wrapper {\n display: flex;\n flex-shrink: 0;\n }\n\n .switch-track {\n position: relative;\n width: var(--_width);\n height: var(--_height);\n background: var(--_track-bg);\n border-radius: var(--rounded-full);\n transition:\n background var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n .switch-thumb {\n position: absolute;\n inset-inline-start: var(--_padding);\n top: var(--_padding);\n width: var(--_thumb-size);\n height: var(--_thumb-size);\n background: var(--_thumb-bg);\n border-radius: var(--rounded-full);\n box-shadow: var(--shadow-sm);\n transition:\n transform var(--transition-spring),\n box-shadow var(--transition-normal);\n will-change: transform;\n }\n\n /* ========================================\n Focus State\n ======================================== */\n\n :host(:focus-visible) .switch-track {\n box-shadow: var(--_focus-shadow);\n }\n\n /* ========================================\n Label\n ======================================== */\n\n .label {\n font-size: var(--_font-size);\n color: var(--color-contrast);\n }\n}\n\n@layer refine.overrides {\n /* Map theme variables to switch-specific variables */\n :host {\n --_active-bg: var(--switch-checked-bg, var(--_theme-base));\n --_focus-shadow: var(--_theme-shadow);\n }\n\n /* ========================================\n Checked State\n ======================================== */\n\n :host([checked]) .switch-track {\n background: var(--_active-bg);\n }\n\n :host([checked]) .switch-thumb {\n transform: translateX(calc(var(--_width) - var(--_height)));\n }\n\n /* In RTL the thumb starts at the inline-end edge; slide left to reach inline-start */\n :host(:dir(rtl)[checked]) .switch-thumb {\n transform: translateX(calc(-1 * (var(--_width) - var(--_height))));\n }\n\n /* ========================================\n Hover & Active States\n ======================================== */\n\n :host(:hover:not([disabled], [checked])) .switch-track {\n background: var(--color-contrast-400);\n }\n\n :host(:hover:not([disabled])[checked]) .switch-track {\n filter: brightness(1.1);\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n padding-inline-start: calc(var(--_width) + var(--size-2-5));\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n"],"mappings":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/inputs/switch/switch.css?inline
|
|
2
|
-
var e = "@layer refine.base{:host{--_width:var(--switch-width,var(--size-10));--_height:var(--switch-height,var(--size-5));--_padding:var(--size-0-5);--_thumb-size:calc(var(--_height) - var(--_padding) * 2);--_track-bg:var(--switch-track-bg,var(--color-contrast-300));--_thumb-bg:var(--switch-thumb-bg,white);--_font-size:var(--switch-font-size,var(--text-sm));gap:var(--_gap,var(--size-2-5));min-height:var(--_touch-target);touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;align-items:center;display:inline-flex}.switch-wrapper{flex-shrink:0;display:flex}.switch-track{width:var(--_width);height:var(--_height);background:var(--_track-bg);border-radius:var(--rounded-full);transition:background var(--transition-normal), box-shadow var(--transition-normal);position:relative}.switch-thumb{top:var(--_padding);width:var(--_thumb-size);height:var(--_thumb-size);background:var(--_thumb-bg);border-radius:var(--rounded-full);box-shadow:var(--shadow-sm);transition:transform var(--transition-spring), box-shadow var(--transition-normal);will-change:transform;position:absolute}.switch-thumb:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:var(--_padding)}.switch-thumb:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:var(--_padding)}:host(:focus-visible) .switch-track{box-shadow:var(--_focus-shadow)}.label{font-size:var(--_font-size);color:var(--color-contrast)}}@layer refine.overrides{:host{--_active-bg:var(--switch-checked-bg,var(--_theme-base));--_focus-shadow:var(--_theme-shadow)}:host([checked]) .switch-track{background:var(--_active-bg)}:host([checked]) .switch-thumb{transform:translateX(calc(var(--_width) - var(--_height)))}:host(:dir(rtl)[checked]) .switch-thumb{transform:translateX(calc(-1 * (var(--_width) - var(--_height))))}:host(:hover:not([disabled],[checked])) .switch-track{background:var(--color-contrast-400)}:host(:hover:not([disabled])[checked]) .switch-track{filter:brightness(1.1)}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas))}.helper-text:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){padding-left:calc(var(--_width) + var(--size-2-5))}.helper-text:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:calc(var(--_width) + var(--size-2-5))}.helper-text[role=alert]{color:var(--color-error)}}";
|
|
2
|
+
var e = "@layer refine.base{:host{--_width:var(--switch-width,var(--size-10));--_height:var(--switch-height,var(--size-5));--_padding:var(--size-0-5);--_thumb-size:calc(var(--_height) - var(--_padding) * 2);--_track-bg:var(--switch-track-bg,var(--color-contrast-300));--_thumb-bg:var(--switch-thumb-bg,white);--_font-size:var(--switch-font-size,var(--text-sm));gap:var(--_gap,var(--size-2-5));min-height:var(--_touch-target);touch-action:manipulation;cursor:pointer;-webkit-user-select:none;user-select:none;flex-wrap:wrap;flex-shrink:0;align-items:center;display:inline-flex}.switch-wrapper{flex-shrink:0;display:flex}.switch-track{width:var(--_width);height:var(--_height);background:var(--_track-bg);border-radius:var(--rounded-full);transition:background var(--transition-normal), box-shadow var(--transition-normal);position:relative}.switch-thumb{top:var(--_padding);width:var(--_thumb-size);height:var(--_thumb-size);background:var(--_thumb-bg);border-radius:var(--rounded-full);box-shadow:var(--shadow-sm);transition:transform var(--transition-spring), box-shadow var(--transition-normal);will-change:transform;position:absolute}.switch-thumb:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:var(--_padding)}.switch-thumb:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:var(--_padding)}:host(:focus-visible) .switch-track{box-shadow:var(--_focus-shadow)}.label{font-size:var(--_font-size);color:var(--color-contrast)}}@layer refine.overrides{:host{--_active-bg:var(--switch-checked-bg,var(--_theme-base));--_focus-shadow:var(--_theme-shadow)}:host([checked]) .switch-track{background:var(--_active-bg)}:host([checked]) .switch-thumb{transform:translateX(calc(var(--_width) - var(--_height)))}:host(:dir(rtl)[checked]) .switch-thumb{transform:translateX(calc(-1 * (var(--_width) - var(--_height))))}:host(:hover:not([disabled],[checked])) .switch-track{background:var(--color-contrast-400)}:host(:hover:not([disabled])[checked]) .switch-track{filter:brightness(1.1)}.helper-text[hidden]{display:none}.helper-text{width:100%;font-size:var(--text-xs);line-height:var(--leading-tight);color:color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas))}.helper-text:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){padding-left:calc(var(--_width) + var(--size-2-5))}.helper-text:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){padding-right:calc(var(--_width) + var(--size-2-5))}.helper-text[role=alert]{color:var(--color-error)}}";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { e as default };
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.css.js","names":[],"sources":["../../../src/inputs/switch/switch.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_width: var(--switch-width, var(--size-10));\n --_height: var(--switch-height, var(--size-5));\n --_padding: var(--size-0-5);\n --_thumb-size: calc(var(--_height) - var(--_padding) * 2);\n --_track-bg: var(--switch-track-bg, var(--color-contrast-300));\n --_thumb-bg: var(--switch-thumb-bg, white);\n --_font-size: var(--switch-font-size, var(--text-sm));\n\n display: inline-flex;\n flex-wrap: wrap;\n gap: var(--_gap, var(--size-2-5));\n align-items: center;\n min-height: var(--_touch-target);\n touch-action: manipulation;\n cursor: pointer;\n user-select: none;\n }\n\n /* ========================================\n Track & Thumb\n ======================================== */\n\n .switch-wrapper {\n display: flex;\n flex-shrink: 0;\n }\n\n .switch-track {\n position: relative;\n width: var(--_width);\n height: var(--_height);\n background: var(--_track-bg);\n border-radius: var(--rounded-full);\n transition:\n background var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n .switch-thumb {\n position: absolute;\n inset-inline-start: var(--_padding);\n top: var(--_padding);\n width: var(--_thumb-size);\n height: var(--_thumb-size);\n background: var(--_thumb-bg);\n border-radius: var(--rounded-full);\n box-shadow: var(--shadow-sm);\n transition:\n transform var(--transition-spring),\n box-shadow var(--transition-normal);\n will-change: transform;\n }\n\n /* ========================================\n Focus State\n ======================================== */\n\n :host(:focus-visible) .switch-track {\n box-shadow: var(--_focus-shadow);\n }\n\n /* ========================================\n Label\n ======================================== */\n\n .label {\n font-size: var(--_font-size);\n color: var(--color-contrast);\n }\n}\n\n@layer refine.overrides {\n /* Map theme variables to switch-specific variables */\n :host {\n --_active-bg: var(--switch-checked-bg, var(--_theme-base));\n --_focus-shadow: var(--_theme-shadow);\n }\n\n /* ========================================\n Checked State\n ======================================== */\n\n :host([checked]) .switch-track {\n background: var(--_active-bg);\n }\n\n :host([checked]) .switch-thumb {\n transform: translateX(calc(var(--_width) - var(--_height)));\n }\n\n /* In RTL the thumb starts at the inline-end edge; slide left to reach inline-start */\n :host(:dir(rtl)[checked]) .switch-thumb {\n transform: translateX(calc(-1 * (var(--_width) - var(--_height))));\n }\n\n /* ========================================\n Hover & Active States\n ======================================== */\n\n :host(:hover:not([disabled], [checked])) .switch-track {\n background: var(--color-contrast-400);\n }\n\n :host(:hover:not([disabled])[checked]) .switch-track {\n filter: brightness(1.1);\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n padding-inline-start: calc(var(--_width) + var(--size-2-5));\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"switch.css.js","names":[],"sources":["../../../src/inputs/switch/switch.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_width: var(--switch-width, var(--size-10));\n --_height: var(--switch-height, var(--size-5));\n --_padding: var(--size-0-5);\n --_thumb-size: calc(var(--_height) - var(--_padding) * 2);\n --_track-bg: var(--switch-track-bg, var(--color-contrast-300));\n --_thumb-bg: var(--switch-thumb-bg, white);\n --_font-size: var(--switch-font-size, var(--text-sm));\n\n display: inline-flex;\n flex-shrink: 0;\n flex-wrap: wrap;\n gap: var(--_gap, var(--size-2-5));\n align-items: center;\n min-height: var(--_touch-target);\n touch-action: manipulation;\n cursor: pointer;\n user-select: none;\n }\n\n /* ========================================\n Track & Thumb\n ======================================== */\n\n .switch-wrapper {\n display: flex;\n flex-shrink: 0;\n }\n\n .switch-track {\n position: relative;\n width: var(--_width);\n height: var(--_height);\n background: var(--_track-bg);\n border-radius: var(--rounded-full);\n transition:\n background var(--transition-normal),\n box-shadow var(--transition-normal);\n }\n\n .switch-thumb {\n position: absolute;\n inset-inline-start: var(--_padding);\n top: var(--_padding);\n width: var(--_thumb-size);\n height: var(--_thumb-size);\n background: var(--_thumb-bg);\n border-radius: var(--rounded-full);\n box-shadow: var(--shadow-sm);\n transition:\n transform var(--transition-spring),\n box-shadow var(--transition-normal);\n will-change: transform;\n }\n\n /* ========================================\n Focus State\n ======================================== */\n\n :host(:focus-visible) .switch-track {\n box-shadow: var(--_focus-shadow);\n }\n\n /* ========================================\n Label\n ======================================== */\n\n .label {\n font-size: var(--_font-size);\n color: var(--color-contrast);\n }\n}\n\n@layer refine.overrides {\n /* Map theme variables to switch-specific variables */\n :host {\n --_active-bg: var(--switch-checked-bg, var(--_theme-base));\n --_focus-shadow: var(--_theme-shadow);\n }\n\n /* ========================================\n Checked State\n ======================================== */\n\n :host([checked]) .switch-track {\n background: var(--_active-bg);\n }\n\n :host([checked]) .switch-thumb {\n transform: translateX(calc(var(--_width) - var(--_height)));\n }\n\n /* In RTL the thumb starts at the inline-end edge; slide left to reach inline-start */\n :host(:dir(rtl)[checked]) .switch-thumb {\n transform: translateX(calc(-1 * (var(--_width) - var(--_height))));\n }\n\n /* ========================================\n Hover & Active States\n ======================================== */\n\n :host(:hover:not([disabled], [checked])) .switch-track {\n background: var(--color-contrast-400);\n }\n\n :host(:hover:not([disabled])[checked]) .switch-track {\n filter: brightness(1.1);\n }\n\n /* ========================================\n Helper / Error Text\n ======================================== */\n\n .helper-text[hidden] {\n display: none;\n }\n\n .helper-text {\n width: 100%;\n padding-inline-start: calc(var(--_width) + var(--size-2-5));\n font-size: var(--text-xs);\n line-height: var(--leading-tight);\n color: color-mix(in oklch, var(--color-contrast-500) 80%, var(--color-canvas));\n }\n\n .helper-text[role='alert'] {\n color: var(--color-error);\n }\n}\n"],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/inputs/switch/switch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"switch.d.ts","sourceRoot":"","sources":["../../../src/inputs/switch/switch.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM7E,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,KAAK,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C,kBAAkB;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,UAAU,EAAG,YAAqB,CAAC"}
|
|
@@ -174,6 +174,7 @@ export type OreSidebarItemProps = {
|
|
|
174
174
|
disabled?: boolean;
|
|
175
175
|
/** Navigation href — renders an `<a>` when set, otherwise a `<button>` */
|
|
176
176
|
href?: string;
|
|
177
|
+
label?: string;
|
|
177
178
|
/**
|
|
178
179
|
* Relationship of the linked URL (`rel` attribute on the inner `<a>`).
|
|
179
180
|
* Only applies when `href` is set.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/layout/sidebar/sidebar.ts"],"names":[],"mappings":"AAcA,OAAO,EAA8B,KAAK,QAAQ,EAAiB,MAAM,kBAAkB,CAAC;AAG5F,OAAO,yBAAyB,CAAC;AASjC,KAAK,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC;AAC3C,KAAK,qBAAqB,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;AAC7D,KAAK,mBAAmB,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;AAC3D,KAAK,WAAW,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAqD1D,oGAAoG;AACpG,MAAM,MAAM,cAAc,GAAG;IAC3B,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC7B,UAAU,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC5B,OAAO,EAAE,QAAQ,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;CAC/C,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,WAAW,sDAAkD,CAAC;AAI3E,oCAAoC;AACpC,MAAM,MAAM,cAAc,GAAG,WAAW,GACtC,eAAe,GAAG;IAChB,2CAA2C;IAC3C,WAAW,IAAI,IAAI,CAAC;IACpB,0CAA0C;IAC1C,UAAU,IAAI,IAAI,CAAC;IACnB,wCAAwC;IACxC,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,6CAA6C;IAC7C,MAAM,IAAI,IAAI,CAAC;IACf,4CAA4C;IAC5C,YAAY,IAAI,IAAI,CAAC;CACtB,CAAC;AAEJ,mCAAmC;AAEnC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,kBAAkB,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,qBAAqB,CAAA;KAAE,CAAC;IAC1E,oBAAoB,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,mBAAmB,CAAA;KAAE,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,aAAa,EAAE;QAAE,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iCAAiC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8CAA8C;IAC9C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mFAAmF;IACnF,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,mDAAmD;IACnD,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,WAAW,EAAG,aAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/layout/sidebar/sidebar.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=`@layer refine.base{:host{--_menu-panel-bg:var(--menu-panel-bg,var(--color-canvas));--_menu-panel-border-color:var(--menu-panel-border-color,var(--color-divider));--_menu-panel-blur:var(--menu-panel-blur,var(--blur-md));--_menu-panel-shadow:var(--menu-panel-shadow,var(--shadow-xl));display:inline-block;position:relative}.menu-panel{z-index:calc(var(--z-popover) + 1);box-sizing:border-box;min-width:var(--menu-panel-min-width,10rem);max-height:var(--menu-panel-max-height,min(70vh, 32rem));padding:var(--_panel-padding,var(--size-1));pointer-events:none;background:var(--_menu-panel-bg);border:var(--border) solid var(--_menu-panel-border-color);border-radius:var(--menu-panel-radius,var(--rounded-lg));box-shadow:var(--_menu-panel-shadow);opacity:0;-webkit-backdrop-filter:blur(var(--_menu-panel-blur));backdrop-filter:blur(var(--_menu-panel-blur));transform:translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));transform-origin:0 0;transition:opacity .1s var(--ease-spring), transform .1s var(--ease-spring), display .1s allow-discrete, overlay .1s allow-discrete;margin:0;position:fixed;top:0;overflow-y:auto}.menu-panel:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:0}.menu-panel:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:0}.menu-panel[data-placement=top-start],.menu-panel[data-placement=top],.menu-panel[data-placement=top-end]{transform-origin:0 100%}.menu-panel[data-placement=bottom-end],.menu-panel[data-placement=right-start],.menu-panel[data-placement=right]{transform-origin:100% 0}.menu-panel[data-open]{pointer-events:auto;opacity:1;transition:opacity .15s var(--ease-spring), transform .15s var(--ease-spring), display .15s allow-discrete, overlay .15s allow-discrete;transform:translateY(0)scale(1)}@starting-style{.menu-panel[data-open]{opacity:0;transform:translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale))}}::slotted(ore-menu-item),::slotted(ore-menu-separator){display:block}}`;exports.default=e;
|
|
1
|
+
var e=`@layer refine.base{:host{--_menu-panel-bg:var(--menu-panel-bg,var(--color-canvas));--_menu-panel-color:var(--menu-panel-color,var(--color-contrast-900));--_menu-panel-border-color:var(--menu-panel-border-color,var(--color-divider));--_menu-panel-blur:var(--menu-panel-blur,var(--blur-md));--_menu-panel-shadow:var(--menu-panel-shadow,var(--shadow-xl));display:inline-block;position:relative}.menu-panel{z-index:calc(var(--z-popover) + 1);box-sizing:border-box;min-width:var(--menu-panel-min-width,10rem);max-height:var(--menu-panel-max-height,min(70vh, 32rem));padding:var(--_panel-padding,var(--size-1));color:var(--_menu-panel-color);pointer-events:none;background:var(--_menu-panel-bg);border:var(--border) solid var(--_menu-panel-border-color);border-radius:var(--menu-panel-radius,var(--rounded-lg));box-shadow:var(--_menu-panel-shadow);opacity:0;-webkit-backdrop-filter:blur(var(--_menu-panel-blur));backdrop-filter:blur(var(--_menu-panel-blur));transform:translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));transform-origin:0 0;transition:opacity .1s var(--ease-spring), transform .1s var(--ease-spring), display .1s allow-discrete, overlay .1s allow-discrete;margin:0;position:fixed;top:0;overflow-y:auto}.menu-panel:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:0}.menu-panel:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:0}.menu-panel[data-placement=top-start],.menu-panel[data-placement=top],.menu-panel[data-placement=top-end]{transform-origin:0 100%}.menu-panel[data-placement=bottom-end],.menu-panel[data-placement=right-start],.menu-panel[data-placement=right]{transform-origin:100% 0}.menu-panel[data-open]{pointer-events:auto;opacity:1;transition:opacity .15s var(--ease-spring), transform .15s var(--ease-spring), display .15s allow-discrete, overlay .15s allow-discrete;transform:translateY(0)scale(1)}@starting-style{.menu-panel[data-open]{opacity:0;transform:translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale))}}::slotted(ore-menu-item),::slotted(ore-menu-separator){display:block}}`;exports.default=e;
|
|
2
2
|
//# sourceMappingURL=menu.css.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.css.cjs","names":[],"sources":["../../../src/overlay/menu/menu.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_menu-panel-bg: var(--menu-panel-bg, var(--color-canvas));\n --_menu-panel-border-color: var(--menu-panel-border-color, var(--color-divider));\n --_menu-panel-blur: var(--menu-panel-blur, var(--blur-md));\n --_menu-panel-shadow: var(--menu-panel-shadow, var(--shadow-xl));\n\n position: relative;\n display: inline-block;\n }\n\n /* ========================================\n Menu Panel\n ======================================== */\n\n .menu-panel {\n position: fixed;\n inset-inline-start: 0;\n top: 0;\n z-index: calc(var(--z-popover) + 1);\n box-sizing: border-box;\n min-width: var(--menu-panel-min-width, 10rem);\n max-height: var(--menu-panel-max-height, min(70vh, 32rem));\n padding: var(--_panel-padding, var(--size-1));\n margin: 0;\n overflow-y: auto;\n pointer-events: none;\n background: var(--_menu-panel-bg);\n border: var(--border) solid var(--_menu-panel-border-color);\n border-radius: var(--menu-panel-radius, var(--rounded-lg));\n box-shadow: var(--_menu-panel-shadow);\n opacity: 0;\n backdrop-filter: blur(var(--_menu-panel-blur));\n transform: translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));\n transform-origin: top left;\n transition:\n opacity 100ms var(--ease-spring),\n transform 100ms var(--ease-spring),\n display 100ms allow-discrete,\n overlay 100ms allow-discrete;\n }\n\n .menu-panel[data-placement='top-start'],\n .menu-panel[data-placement='top'],\n .menu-panel[data-placement='top-end'] {\n transform-origin: bottom left;\n }\n\n .menu-panel[data-placement='bottom-end'],\n .menu-panel[data-placement='right-start'],\n .menu-panel[data-placement='right'] {\n transform-origin: top right;\n }\n\n .menu-panel[data-open] {\n pointer-events: auto;\n opacity: 1;\n transform: translateY(0) scale(1);\n transition:\n opacity 150ms var(--ease-spring),\n transform 150ms var(--ease-spring),\n display 150ms allow-discrete,\n overlay 150ms allow-discrete;\n\n @starting-style {\n opacity: 0;\n transform: translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));\n }\n }\n\n /* ========================================\n Menu Items (slotted ore-menu-item)\n ======================================== */\n\n ::slotted(ore-menu-item) {\n display: block;\n }\n\n ::slotted(ore-menu-separator) {\n display: block;\n }\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"menu.css.cjs","names":[],"sources":["../../../src/overlay/menu/menu.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_menu-panel-bg: var(--menu-panel-bg, var(--color-canvas));\n --_menu-panel-color: var(--menu-panel-color, var(--color-contrast-900));\n --_menu-panel-border-color: var(--menu-panel-border-color, var(--color-divider));\n --_menu-panel-blur: var(--menu-panel-blur, var(--blur-md));\n --_menu-panel-shadow: var(--menu-panel-shadow, var(--shadow-xl));\n\n position: relative;\n display: inline-block;\n }\n\n /* ========================================\n Menu Panel\n ======================================== */\n\n .menu-panel {\n position: fixed;\n inset-inline-start: 0;\n top: 0;\n z-index: calc(var(--z-popover) + 1);\n box-sizing: border-box;\n min-width: var(--menu-panel-min-width, 10rem);\n max-height: var(--menu-panel-max-height, min(70vh, 32rem));\n padding: var(--_panel-padding, var(--size-1));\n margin: 0;\n overflow-y: auto;\n color: var(--_menu-panel-color);\n pointer-events: none;\n background: var(--_menu-panel-bg);\n border: var(--border) solid var(--_menu-panel-border-color);\n border-radius: var(--menu-panel-radius, var(--rounded-lg));\n box-shadow: var(--_menu-panel-shadow);\n opacity: 0;\n backdrop-filter: blur(var(--_menu-panel-blur));\n transform: translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));\n transform-origin: top left;\n transition:\n opacity 100ms var(--ease-spring),\n transform 100ms var(--ease-spring),\n display 100ms allow-discrete,\n overlay 100ms allow-discrete;\n }\n\n .menu-panel[data-placement='top-start'],\n .menu-panel[data-placement='top'],\n .menu-panel[data-placement='top-end'] {\n transform-origin: bottom left;\n }\n\n .menu-panel[data-placement='bottom-end'],\n .menu-panel[data-placement='right-start'],\n .menu-panel[data-placement='right'] {\n transform-origin: top right;\n }\n\n .menu-panel[data-open] {\n pointer-events: auto;\n opacity: 1;\n transform: translateY(0) scale(1);\n transition:\n opacity 150ms var(--ease-spring),\n transform 150ms var(--ease-spring),\n display 150ms allow-discrete,\n overlay 150ms allow-discrete;\n\n @starting-style {\n opacity: 0;\n transform: translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));\n }\n }\n\n /* ========================================\n Menu Items (slotted ore-menu-item)\n ======================================== */\n\n ::slotted(ore-menu-item) {\n display: block;\n }\n\n ::slotted(ore-menu-separator) {\n display: block;\n }\n}\n"],"mappings":""}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/overlay/menu/menu.css?inline
|
|
2
|
-
var e = "@layer refine.base{:host{--_menu-panel-bg:var(--menu-panel-bg,var(--color-canvas));--_menu-panel-border-color:var(--menu-panel-border-color,var(--color-divider));--_menu-panel-blur:var(--menu-panel-blur,var(--blur-md));--_menu-panel-shadow:var(--menu-panel-shadow,var(--shadow-xl));display:inline-block;position:relative}.menu-panel{z-index:calc(var(--z-popover) + 1);box-sizing:border-box;min-width:var(--menu-panel-min-width,10rem);max-height:var(--menu-panel-max-height,min(70vh, 32rem));padding:var(--_panel-padding,var(--size-1));pointer-events:none;background:var(--_menu-panel-bg);border:var(--border) solid var(--_menu-panel-border-color);border-radius:var(--menu-panel-radius,var(--rounded-lg));box-shadow:var(--_menu-panel-shadow);opacity:0;-webkit-backdrop-filter:blur(var(--_menu-panel-blur));backdrop-filter:blur(var(--_menu-panel-blur));transform:translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));transform-origin:0 0;transition:opacity .1s var(--ease-spring), transform .1s var(--ease-spring), display .1s allow-discrete, overlay .1s allow-discrete;margin:0;position:fixed;top:0;overflow-y:auto}.menu-panel:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:0}.menu-panel:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:0}.menu-panel[data-placement=top-start],.menu-panel[data-placement=top],.menu-panel[data-placement=top-end]{transform-origin:0 100%}.menu-panel[data-placement=bottom-end],.menu-panel[data-placement=right-start],.menu-panel[data-placement=right]{transform-origin:100% 0}.menu-panel[data-open]{pointer-events:auto;opacity:1;transition:opacity .15s var(--ease-spring), transform .15s var(--ease-spring), display .15s allow-discrete, overlay .15s allow-discrete;transform:translateY(0)scale(1)}@starting-style{.menu-panel[data-open]{opacity:0;transform:translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale))}}::slotted(ore-menu-item),::slotted(ore-menu-separator){display:block}}";
|
|
2
|
+
var e = "@layer refine.base{:host{--_menu-panel-bg:var(--menu-panel-bg,var(--color-canvas));--_menu-panel-color:var(--menu-panel-color,var(--color-contrast-900));--_menu-panel-border-color:var(--menu-panel-border-color,var(--color-divider));--_menu-panel-blur:var(--menu-panel-blur,var(--blur-md));--_menu-panel-shadow:var(--menu-panel-shadow,var(--shadow-xl));display:inline-block;position:relative}.menu-panel{z-index:calc(var(--z-popover) + 1);box-sizing:border-box;min-width:var(--menu-panel-min-width,10rem);max-height:var(--menu-panel-max-height,min(70vh, 32rem));padding:var(--_panel-padding,var(--size-1));color:var(--_menu-panel-color);pointer-events:none;background:var(--_menu-panel-bg);border:var(--border) solid var(--_menu-panel-border-color);border-radius:var(--menu-panel-radius,var(--rounded-lg));box-shadow:var(--_menu-panel-shadow);opacity:0;-webkit-backdrop-filter:blur(var(--_menu-panel-blur));backdrop-filter:blur(var(--_menu-panel-blur));transform:translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));transform-origin:0 0;transition:opacity .1s var(--ease-spring), transform .1s var(--ease-spring), display .1s allow-discrete, overlay .1s allow-discrete;margin:0;position:fixed;top:0;overflow-y:auto}.menu-panel:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))){left:0}.menu-panel:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)){right:0}.menu-panel[data-placement=top-start],.menu-panel[data-placement=top],.menu-panel[data-placement=top-end]{transform-origin:0 100%}.menu-panel[data-placement=bottom-end],.menu-panel[data-placement=right-start],.menu-panel[data-placement=right]{transform-origin:100% 0}.menu-panel[data-open]{pointer-events:auto;opacity:1;transition:opacity .15s var(--ease-spring), transform .15s var(--ease-spring), display .15s allow-discrete, overlay .15s allow-discrete;transform:translateY(0)scale(1)}@starting-style{.menu-panel[data-open]{opacity:0;transform:translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale))}}::slotted(ore-menu-item),::slotted(ore-menu-separator){display:block}}";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { e as default };
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.css.js","names":[],"sources":["../../../src/overlay/menu/menu.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_menu-panel-bg: var(--menu-panel-bg, var(--color-canvas));\n --_menu-panel-border-color: var(--menu-panel-border-color, var(--color-divider));\n --_menu-panel-blur: var(--menu-panel-blur, var(--blur-md));\n --_menu-panel-shadow: var(--menu-panel-shadow, var(--shadow-xl));\n\n position: relative;\n display: inline-block;\n }\n\n /* ========================================\n Menu Panel\n ======================================== */\n\n .menu-panel {\n position: fixed;\n inset-inline-start: 0;\n top: 0;\n z-index: calc(var(--z-popover) + 1);\n box-sizing: border-box;\n min-width: var(--menu-panel-min-width, 10rem);\n max-height: var(--menu-panel-max-height, min(70vh, 32rem));\n padding: var(--_panel-padding, var(--size-1));\n margin: 0;\n overflow-y: auto;\n pointer-events: none;\n background: var(--_menu-panel-bg);\n border: var(--border) solid var(--_menu-panel-border-color);\n border-radius: var(--menu-panel-radius, var(--rounded-lg));\n box-shadow: var(--_menu-panel-shadow);\n opacity: 0;\n backdrop-filter: blur(var(--_menu-panel-blur));\n transform: translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));\n transform-origin: top left;\n transition:\n opacity 100ms var(--ease-spring),\n transform 100ms var(--ease-spring),\n display 100ms allow-discrete,\n overlay 100ms allow-discrete;\n }\n\n .menu-panel[data-placement='top-start'],\n .menu-panel[data-placement='top'],\n .menu-panel[data-placement='top-end'] {\n transform-origin: bottom left;\n }\n\n .menu-panel[data-placement='bottom-end'],\n .menu-panel[data-placement='right-start'],\n .menu-panel[data-placement='right'] {\n transform-origin: top right;\n }\n\n .menu-panel[data-open] {\n pointer-events: auto;\n opacity: 1;\n transform: translateY(0) scale(1);\n transition:\n opacity 150ms var(--ease-spring),\n transform 150ms var(--ease-spring),\n display 150ms allow-discrete,\n overlay 150ms allow-discrete;\n\n @starting-style {\n opacity: 0;\n transform: translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));\n }\n }\n\n /* ========================================\n Menu Items (slotted ore-menu-item)\n ======================================== */\n\n ::slotted(ore-menu-item) {\n display: block;\n }\n\n ::slotted(ore-menu-separator) {\n display: block;\n }\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"menu.css.js","names":[],"sources":["../../../src/overlay/menu/menu.css?inline"],"sourcesContent":["@layer refine.base {\n :host {\n --_menu-panel-bg: var(--menu-panel-bg, var(--color-canvas));\n --_menu-panel-color: var(--menu-panel-color, var(--color-contrast-900));\n --_menu-panel-border-color: var(--menu-panel-border-color, var(--color-divider));\n --_menu-panel-blur: var(--menu-panel-blur, var(--blur-md));\n --_menu-panel-shadow: var(--menu-panel-shadow, var(--shadow-xl));\n\n position: relative;\n display: inline-block;\n }\n\n /* ========================================\n Menu Panel\n ======================================== */\n\n .menu-panel {\n position: fixed;\n inset-inline-start: 0;\n top: 0;\n z-index: calc(var(--z-popover) + 1);\n box-sizing: border-box;\n min-width: var(--menu-panel-min-width, 10rem);\n max-height: var(--menu-panel-max-height, min(70vh, 32rem));\n padding: var(--_panel-padding, var(--size-1));\n margin: 0;\n overflow-y: auto;\n color: var(--_menu-panel-color);\n pointer-events: none;\n background: var(--_menu-panel-bg);\n border: var(--border) solid var(--_menu-panel-border-color);\n border-radius: var(--menu-panel-radius, var(--rounded-lg));\n box-shadow: var(--_menu-panel-shadow);\n opacity: 0;\n backdrop-filter: blur(var(--_menu-panel-blur));\n transform: translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));\n transform-origin: top left;\n transition:\n opacity 100ms var(--ease-spring),\n transform 100ms var(--ease-spring),\n display 100ms allow-discrete,\n overlay 100ms allow-discrete;\n }\n\n .menu-panel[data-placement='top-start'],\n .menu-panel[data-placement='top'],\n .menu-panel[data-placement='top-end'] {\n transform-origin: bottom left;\n }\n\n .menu-panel[data-placement='bottom-end'],\n .menu-panel[data-placement='right-start'],\n .menu-panel[data-placement='right'] {\n transform-origin: top right;\n }\n\n .menu-panel[data-open] {\n pointer-events: auto;\n opacity: 1;\n transform: translateY(0) scale(1);\n transition:\n opacity 150ms var(--ease-spring),\n transform 150ms var(--ease-spring),\n display 150ms allow-discrete,\n overlay 150ms allow-discrete;\n\n @starting-style {\n opacity: 0;\n transform: translateY(var(--overlay-enter-translate-y)) scale(var(--overlay-enter-scale));\n }\n }\n\n /* ========================================\n Menu Items (slotted ore-menu-item)\n ======================================== */\n\n ::slotted(ore-menu-item) {\n display: block;\n }\n\n ::slotted(ore-menu-separator) {\n display: block;\n }\n}\n"],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../../core/ore.cjs"),t=require("../../core/overlay.cjs");let n=require("@vielzeug/ripple"),r=require("@vielzeug/orbit");var i=i=>{let{bindTriggerAria:a,defaultOpen:o,disabled:s,getPanel:c,onClose:l,onOpen:u,onPlacementChange:d,openProp:f,placement:p,slot:m,slotElements:h,triggers:g}=i,_=()=>typeof m==`function`?m():m,v=()=>{let e=i.offset;return e==null?8:(typeof e==`object`?e.value:e)??8},y=e.lifecycleSignal(i.onCleanup),b=(0,n.signal)(!1),x=()=>f.value!==void 0,S=null,C=null;function w(){let e=c(),t=S??_()?.assignedElements({flatten:!0})[0];if(!e||!t)return;let n=e.style.transition,i=e.style.transform;e.style.transition=`none`,e.style.transform=`none`;let a=(0,r.computePosition)(t,e,{middleware:[(0,r.offset)(v()),(0,r.flip)(),(0,r.shift)({padding:8})],placement:p.value});e.style.left=`${a.x}px`,e.style.top=`${a.y}px`,e.style.transition=n,e.style.transform=i,e.dataset.placement=a.placement,d?.(a.placement)}function T(){b.value=!0;let e=c();if(e&&(e.dataset.open=``,`showPopover`in e))try{e.matches(`:popover-open`)||e.showPopover()}catch{}w()}function E(){b.value=!1;let e=c();if(e&&(delete e.dataset.open,`hidePopover`in e))try{e.matches(`:popover-open`)&&e.hidePopover()}catch{}}function D(e=`programmatic`){
|
|
1
|
+
const e=require("../../core/ore.cjs"),t=require("../../core/overlay.cjs");let n=require("@vielzeug/ripple"),r=require("@vielzeug/orbit");var i=i=>{let{bindTriggerAria:a,defaultOpen:o,disabled:s,getPanel:c,onClose:l,onOpen:u,onPlacementChange:d,openProp:f,placement:p,slot:m,slotElements:h,triggers:g}=i,_=()=>typeof m==`function`?m():m,v=()=>{let e=i.offset;return e==null?8:(typeof e==`object`?e.value:e)??8},y=e.lifecycleSignal(i.onCleanup),b=(0,n.signal)(!1),x=()=>f.value!==void 0,S=null,C=null;function w(){let e=c(),t=S??_()?.assignedElements({flatten:!0})[0];if(!e||!t)return;let n=e.style.transition,i=e.style.transform;e.style.transition=`none`,e.style.transform=`none`;let a=(0,r.computePosition)(t,e,{middleware:[(0,r.offset)(v()),(0,r.flip)(),(0,r.shift)({padding:8})],placement:p.value});e.style.left=`${a.x}px`,e.style.top=`${a.y}px`,e.style.transition=n,e.style.transform=i,e.dataset.placement=a.placement,d?.(a.placement)}function T(){b.value=!0;let e=c();if(e&&(e.dataset.open=``,`showPopover`in e))try{e.matches(`:popover-open`)||e.showPopover()}catch{}w()}function E(){b.value=!1;let e=c();if(e&&(delete e.dataset.open,`hidePopover`in e))try{e.matches(`:popover-open`)&&e.hidePopover()}catch{}}function D(e=`programmatic`){if(!(s.value||b.value)){if(x()){u?.(e);return}T(),u?.(e)}}function O(e=`trigger`){if(b.value){if(x()){l?.(e);return}E(),l?.(e)}}function k(){b.value?O():D(`click`)}function A(e){e.key===`Escape`&&O(`escape`)}function j(e){let t=e.relatedTarget,n=c();t&&n?.contains(t)||t&&S?.contains(t)||O(`trigger`)}let M=()=>{C?.(),C=null;let e=_()?.assignedElements({flatten:!0})[0];if(!e){S=null;return}S=e;let t=a(e),n=[],r=(e,t,r,i)=>{e.addEventListener(t,r,i),n.push(()=>e.removeEventListener(t,r,i))},i=g.value;if(i.includes(`click`)&&r(e,`click`,k),i.includes(`hover`)){r(e,`pointerenter`,()=>D(`hover`)),r(e,`pointerleave`,()=>O(`trigger`));let t=c();t&&(r(t,`pointerenter`,()=>D(`hover`)),r(t,`pointerleave`,()=>O(`trigger`)))}if(i.includes(`focus`)){r(e,`focusin`,()=>D(`focus`)),r(e,`focusout`,j);let t=c();t&&r(t,`focusout`,j)}r(document,`keydown`,A),C=()=>{t();for(let e of n)e();S=null}},N=t.createOutsidePointerDismissal({getTargets:()=>[S,c(),i.getHost?.()],isActive:()=>b.value&&g.value.includes(`click`),onDismiss:()=>O(`outsideClick`),signal:y});return{close:O,mount:()=>{let e=!1,t=_(),r=()=>{queueMicrotask(()=>{y.aborted||M()})};return t?.addEventListener(`slotchange`,r),r(),(0,n.watch)(h,M,{immediate:!0}),(0,n.watch)(f,t=>{if(t==null){e&&b.value&&(E(),l?.(`programmatic`)),e=!0;return}e=!0,t?T():b.value&&E()},{immediate:!0}),f.value===void 0&&o.value&&(T(),u?.(`programmatic`)),(0,n.watch)(s,e=>{e&&O(`programmatic`)}),()=>{t?.removeEventListener(`slotchange`,r),C?.(),C=null;let e=c();if(e&&(delete e.dataset.open,`hidePopover`in e))try{e.matches(`:popover-open`)&&e.hidePopover()}catch{}N()}},open:D,toggle:k,updatePosition:w,visible:b}};exports.useFloatingTrigger=i;
|
|
2
2
|
//# sourceMappingURL=use-floating-trigger.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-floating-trigger.cjs","names":[],"sources":["../../../src/overlay/shared/use-floating-trigger.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/orbit';\n\nimport { computePosition, flip, offset, shift } from '@vielzeug/orbit';\nimport { type Readable, type Signal, signal, watch } from '@vielzeug/ripple';\n\nimport {\n createOutsidePointerDismissal,\n type DialogCloseReason,\n lifecycleSignal,\n type OverlayOpenReason,\n} from '../../core';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type FloatingTriggerType = 'click' | 'focus' | 'hover';\n\nexport type AriaBindFn = (triggerEl: HTMLElement) => () => void;\n\nexport type FloatingTriggerOptions = {\n /** ARIA binding factory: called with the trigger element, returns a cleanup. */\n bindTriggerAria: AriaBindFn;\n /** Initial uncontrolled visibility. Ignored when `openProp` is defined. */\n defaultOpen: Readable<boolean | undefined>;\n /** If true, disable all trigger interactions and close if open. */\n disabled: Readable<boolean>;\n /** Returns the host element (e.g. ore-popover) so slotted content clicks aren't treated as outside clicks. */\n getHost?: () => Element | null;\n /** Returns the panel element, if mounted. */\n getPanel: () => HTMLElement | null;\n /** Gap from reference to floating panel in px. Default: 8. Accepts a signal for runtime reactivity. */\n offset?: Readable<number | undefined> | number;\n /** Cleanup registrar from the component setup ctx. Automatically called on disconnect. */\n onCleanup: (fn: () => void) => void;\n /** Called when the popover closes. */\n onClose?: (reason: DialogCloseReason) => void;\n /** Called when the popover opens. */\n onOpen?: (reason: OverlayOpenReason) => void;\n /** Callback when resolved placement changes (useful for CSS attribute). */\n onPlacementChange?: (placement: Placement) => void;\n /** Controlled open prop. When defined, disables uncontrolled logic. */\n openProp: Readable<boolean | undefined>;\n /** Preferred placement. Default: 'bottom'. */\n placement: Readable<Placement>;\n /** Slot element or a factory to lazily find it. Resolved each time bindEvents runs. */\n slot: HTMLSlotElement | null | (() => HTMLSlotElement | null);\n /** Slot elements signal — used to rebind when slotted elements change. */\n slotElements: Readable<Element[]>;\n /** Which triggers are active. Set to empty array or omit if handling events manually. */\n triggers: Readable<FloatingTriggerType[]>;\n};\n\nexport type FloatingTriggerHandle = {\n /** Closes the panel. No-op if controlled. */\n close: (reason?: DialogCloseReason) => void;\n /**\n * Call inside `onMounted`. Sets up slot + trigger event watchers\n * and returns a cleanup function to pass back to the framework.\n */\n mount: () => () => void;\n /** Opens the panel. No-op if controlled. */\n open: (reason?: OverlayOpenReason) => void;\n /** Toggles the panel. No-op if controlled. */\n toggle: () => void;\n /** Manually trigger a position recalculation. */\n updatePosition: () => void;\n /** Whether the panel is currently visible. */\n visible: Signal<boolean>;\n};\n\n// ── Implementation ─────────────────────────────────────────────────────────────\n\n/**\n * Shared logic for floating-panel triggers (tooltip, popover).\n *\n * Handles:\n * - Slot-based trigger element detection and rebinding\n * - Event binding per trigger type (hover / focus / click)\n * - Floating-element positioning via `@vielzeug/orbit`\n * - Controlled mode via `openProp` watcher\n * - Keyboard escape dismissal\n *\n * ARIA binding is intentionally delegated to the caller via `bindTriggerAria`\n * so that tooltip (`describedby`) and popover (`expanded`/`controls`/…) can diverge.\n */\nexport const useFloatingTrigger = (options: FloatingTriggerOptions): FloatingTriggerHandle => {\n const {\n bindTriggerAria,\n defaultOpen,\n disabled,\n getPanel,\n onClose,\n onOpen,\n onPlacementChange,\n openProp,\n placement,\n slot,\n slotElements,\n triggers,\n } = options;\n\n const resolveSlot = (): HTMLSlotElement | null => (typeof slot === 'function' ? slot() : slot);\n const getOffset = (): number => {\n const o = options.offset;\n\n if (o == null) return 8;\n\n const val = typeof o === 'object' ? (o as Readable<number | undefined>).value : o;\n\n return val ?? 8;\n };\n const abortSignal = lifecycleSignal(options.onCleanup);\n const visible = signal(false);\n const isControlled = () => openProp.value !== undefined;\n let currentTrigger: HTMLElement | null = null;\n let triggerBinding: (() => void) | null = null;\n\n function updatePosition(): void {\n const panel = getPanel();\n const trigger =\n currentTrigger ?? (resolveSlot()?.assignedElements({ flatten: true })[0] as HTMLElement | undefined);\n\n if (!panel || !trigger) return;\n\n const previousTransition = panel.style.transition;\n const previousTransform = panel.style.transform;\n\n panel.style.transition = 'none';\n panel.style.transform = 'none';\n\n const result = computePosition(trigger, panel, {\n middleware: [offset(getOffset()), flip(), shift({ padding: 8 })],\n placement: placement.value,\n });\n\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n panel.style.transition = previousTransition;\n panel.style.transform = previousTransform;\n panel.dataset.placement = result.placement;\n\n onPlacementChange?.(result.placement as Placement);\n }\n\n function showFloat(): void {\n visible.value = true;\n\n const panel = getPanel();\n\n if (panel) {\n panel.dataset.open = '';\n\n if ('showPopover' in panel) {\n try {\n if (!panel.matches(':popover-open')) panel.showPopover();\n } catch {\n // Popover API restricted (e.g. sandboxed iframe); data-open CSS fallback handles visibility.\n }\n }\n }\n\n updatePosition();\n }\n\n function hideFloat(): void {\n visible.value = false;\n\n const panel = getPanel();\n\n if (panel) {\n delete panel.dataset.open;\n\n if ('hidePopover' in panel) {\n try {\n if (panel.matches(':popover-open')) panel.hidePopover();\n } catch {\n // Popover API restricted; data-open removal handles visibility.\n }\n }\n }\n }\n\n function open(reason: OverlayOpenReason = 'programmatic'): void {\n if (isControlled() || disabled.value || visible.value) return;\n\n showFloat();\n onOpen?.(reason);\n }\n\n function close(reason: DialogCloseReason = 'trigger'): void {\n if (isControlled() || !visible.value) return;\n\n hideFloat();\n onClose?.(reason);\n }\n\n function toggle(): void {\n if (isControlled()) return;\n\n if (visible.value) close();\n else open('click');\n }\n\n function handleKeydown(e: KeyboardEvent): void {\n if (e.key === 'Escape') close('escape');\n }\n\n function handleFocusOut(e: FocusEvent): void {\n const next = e.relatedTarget as Element | null;\n const panel = getPanel();\n\n if (next && panel?.contains(next)) return;\n\n if (next && currentTrigger?.contains(next)) return;\n\n close('trigger');\n }\n\n const bindEvents = (): void => {\n triggerBinding?.();\n triggerBinding = null;\n\n const triggerEl = resolveSlot()?.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n\n if (!triggerEl) {\n currentTrigger = null;\n\n return;\n }\n\n currentTrigger = triggerEl;\n\n const removeAria = bindTriggerAria(triggerEl);\n const cleanups: Array<() => void> = [];\n\n const add = (\n target: EventTarget,\n event: string,\n listener: EventListener,\n eventOptions?: AddEventListenerOptions,\n ): void => {\n target.addEventListener(event, listener, eventOptions);\n cleanups.push(() => target.removeEventListener(event, listener, eventOptions));\n };\n\n const t = triggers.value;\n\n if (t.includes('click')) {\n add(triggerEl, 'click', toggle as EventListener);\n }\n\n if (t.includes('hover')) {\n add(triggerEl, 'pointerenter', () => open('hover'));\n add(triggerEl, 'pointerleave', () => close('trigger'));\n\n const panelEl = getPanel();\n\n if (panelEl) {\n add(panelEl, 'pointerenter', () => open('hover'));\n add(panelEl, 'pointerleave', () => close('trigger'));\n }\n }\n\n if (t.includes('focus')) {\n add(triggerEl, 'focusin', () => open('focus'));\n add(triggerEl, 'focusout', handleFocusOut as EventListener);\n\n const panelEl = getPanel();\n\n if (panelEl) add(panelEl, 'focusout', handleFocusOut as EventListener);\n }\n\n add(document, 'keydown', handleKeydown as EventListener);\n\n triggerBinding = () => {\n removeAria();\n\n for (const cleanup of cleanups) cleanup();\n\n currentTrigger = null;\n };\n };\n\n const stopOutsidePointerDismissal = createOutsidePointerDismissal({\n getTargets: () => [currentTrigger, getPanel(), options.getHost?.()],\n isActive: () => visible.value && triggers.value.includes('click'),\n onDismiss: () => close('outsideClick'),\n signal: abortSignal,\n });\n\n const mount = (): (() => void) => {\n let initializedOpenProp = false;\n const triggerSlot = resolveSlot();\n const rebind = (): void => {\n queueMicrotask(() => {\n if (!abortSignal.aborted) bindEvents();\n });\n };\n\n triggerSlot?.addEventListener('slotchange', rebind);\n rebind();\n watch(slotElements, bindEvents, { immediate: true });\n\n watch(\n openProp,\n (openVal) => {\n if (openVal === undefined || openVal === null) {\n if (initializedOpenProp && visible.value) {\n hideFloat();\n onClose?.('programmatic');\n }\n\n initializedOpenProp = true;\n\n return;\n }\n\n initializedOpenProp = true;\n\n if (openVal) {\n showFloat();\n onOpen?.('programmatic');\n } else if (visible.value) {\n hideFloat();\n onClose?.('programmatic');\n }\n },\n { immediate: true },\n );\n\n if (openProp.value === undefined && defaultOpen.value) {\n showFloat();\n onOpen?.('programmatic');\n }\n\n watch(disabled, (isNowDisabled) => {\n if (isNowDisabled) close('programmatic');\n });\n\n return () => {\n triggerSlot?.removeEventListener('slotchange', rebind);\n triggerBinding?.();\n triggerBinding = null;\n\n const panel = getPanel();\n\n if (panel) {\n delete panel.dataset.open;\n\n if ('hidePopover' in panel) {\n try {\n if (panel.matches(':popover-open')) panel.hidePopover();\n } catch {\n // Popover API restricted; data-open removal handles visibility.\n }\n }\n }\n\n stopOutsidePointerDismissal();\n };\n };\n\n return { close, mount, open, toggle, updatePosition, visible };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-floating-trigger.cjs","names":[],"sources":["../../../src/overlay/shared/use-floating-trigger.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/orbit';\n\nimport { computePosition, flip, offset, shift } from '@vielzeug/orbit';\nimport { type Readable, type Signal, signal, watch } from '@vielzeug/ripple';\n\nimport {\n createOutsidePointerDismissal,\n type DialogCloseReason,\n lifecycleSignal,\n type OverlayOpenReason,\n} from '../../core';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type FloatingTriggerType = 'click' | 'focus' | 'hover';\n\nexport type AriaBindFn = (triggerEl: HTMLElement) => () => void;\n\nexport type FloatingTriggerOptions = {\n /** ARIA binding factory: called with the trigger element, returns a cleanup. */\n bindTriggerAria: AriaBindFn;\n /** Initial uncontrolled visibility. Ignored when `openProp` is defined. */\n defaultOpen: Readable<boolean | undefined>;\n /** If true, disable all trigger interactions and close if open. */\n disabled: Readable<boolean>;\n /** Returns the host element (e.g. ore-popover) so slotted content clicks aren't treated as outside clicks. */\n getHost?: () => Element | null;\n /** Returns the panel element, if mounted. */\n getPanel: () => HTMLElement | null;\n /** Gap from reference to floating panel in px. Default: 8. Accepts a signal for runtime reactivity. */\n offset?: Readable<number | undefined> | number;\n /** Cleanup registrar from the component setup ctx. Automatically called on disconnect. */\n onCleanup: (fn: () => void) => void;\n /** Called when the popover closes. */\n onClose?: (reason: DialogCloseReason) => void;\n /** Called when the popover opens. */\n onOpen?: (reason: OverlayOpenReason) => void;\n /** Callback when resolved placement changes (useful for CSS attribute). */\n onPlacementChange?: (placement: Placement) => void;\n /** Controlled open prop. When defined, disables uncontrolled logic. */\n openProp: Readable<boolean | undefined>;\n /** Preferred placement. Default: 'bottom'. */\n placement: Readable<Placement>;\n /** Slot element or a factory to lazily find it. Resolved each time bindEvents runs. */\n slot: HTMLSlotElement | null | (() => HTMLSlotElement | null);\n /** Slot elements signal — used to rebind when slotted elements change. */\n slotElements: Readable<Element[]>;\n /** Which triggers are active. Set to empty array or omit if handling events manually. */\n triggers: Readable<FloatingTriggerType[]>;\n};\n\nexport type FloatingTriggerHandle = {\n /** Closes the panel or requests that a controlled consumer close it. */\n close: (reason?: DialogCloseReason) => void;\n /**\n * Call inside `onMounted`. Sets up slot + trigger event watchers\n * and returns a cleanup function to pass back to the framework.\n */\n mount: () => () => void;\n /** Opens the panel or requests that a controlled consumer open it. */\n open: (reason?: OverlayOpenReason) => void;\n /** Toggles the panel or requests the matching controlled-state change. */\n toggle: () => void;\n /** Manually trigger a position recalculation. */\n updatePosition: () => void;\n /** Whether the panel is currently visible. */\n visible: Signal<boolean>;\n};\n\n// ── Implementation ─────────────────────────────────────────────────────────────\n\n/**\n * Shared logic for floating-panel triggers (tooltip, popover).\n *\n * Handles:\n * - Slot-based trigger element detection and rebinding\n * - Event binding per trigger type (hover / focus / click)\n * - Floating-element positioning via `@vielzeug/orbit`\n * - Controlled mode via `openProp` watcher\n * - Keyboard escape dismissal\n *\n * ARIA binding is intentionally delegated to the caller via `bindTriggerAria`\n * so that tooltip (`describedby`) and popover (`expanded`/`controls`/…) can diverge.\n */\nexport const useFloatingTrigger = (options: FloatingTriggerOptions): FloatingTriggerHandle => {\n const {\n bindTriggerAria,\n defaultOpen,\n disabled,\n getPanel,\n onClose,\n onOpen,\n onPlacementChange,\n openProp,\n placement,\n slot,\n slotElements,\n triggers,\n } = options;\n\n const resolveSlot = (): HTMLSlotElement | null => (typeof slot === 'function' ? slot() : slot);\n const getOffset = (): number => {\n const o = options.offset;\n\n if (o == null) return 8;\n\n const val = typeof o === 'object' ? (o as Readable<number | undefined>).value : o;\n\n return val ?? 8;\n };\n const abortSignal = lifecycleSignal(options.onCleanup);\n const visible = signal(false);\n const isControlled = () => openProp.value !== undefined;\n let currentTrigger: HTMLElement | null = null;\n let triggerBinding: (() => void) | null = null;\n\n function updatePosition(): void {\n const panel = getPanel();\n const trigger =\n currentTrigger ?? (resolveSlot()?.assignedElements({ flatten: true })[0] as HTMLElement | undefined);\n\n if (!panel || !trigger) return;\n\n const previousTransition = panel.style.transition;\n const previousTransform = panel.style.transform;\n\n panel.style.transition = 'none';\n panel.style.transform = 'none';\n\n const result = computePosition(trigger, panel, {\n middleware: [offset(getOffset()), flip(), shift({ padding: 8 })],\n placement: placement.value,\n });\n\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n panel.style.transition = previousTransition;\n panel.style.transform = previousTransform;\n panel.dataset.placement = result.placement;\n\n onPlacementChange?.(result.placement as Placement);\n }\n\n function showFloat(): void {\n visible.value = true;\n\n const panel = getPanel();\n\n if (panel) {\n panel.dataset.open = '';\n\n if ('showPopover' in panel) {\n try {\n if (!panel.matches(':popover-open')) panel.showPopover();\n } catch {\n // Popover API restricted (e.g. sandboxed iframe); data-open CSS fallback handles visibility.\n }\n }\n }\n\n updatePosition();\n }\n\n function hideFloat(): void {\n visible.value = false;\n\n const panel = getPanel();\n\n if (panel) {\n delete panel.dataset.open;\n\n if ('hidePopover' in panel) {\n try {\n if (panel.matches(':popover-open')) panel.hidePopover();\n } catch {\n // Popover API restricted; data-open removal handles visibility.\n }\n }\n }\n }\n\n function open(reason: OverlayOpenReason = 'programmatic'): void {\n if (disabled.value || visible.value) return;\n if (isControlled()) {\n onOpen?.(reason);\n return;\n }\n\n showFloat();\n onOpen?.(reason);\n }\n\n function close(reason: DialogCloseReason = 'trigger'): void {\n if (!visible.value) return;\n if (isControlled()) {\n onClose?.(reason);\n return;\n }\n\n hideFloat();\n onClose?.(reason);\n }\n\n function toggle(): void {\n if (visible.value) close();\n else open('click');\n }\n\n function handleKeydown(e: KeyboardEvent): void {\n if (e.key === 'Escape') close('escape');\n }\n\n function handleFocusOut(e: FocusEvent): void {\n const next = e.relatedTarget as Element | null;\n const panel = getPanel();\n\n if (next && panel?.contains(next)) return;\n\n if (next && currentTrigger?.contains(next)) return;\n\n close('trigger');\n }\n\n const bindEvents = (): void => {\n triggerBinding?.();\n triggerBinding = null;\n\n const triggerEl = resolveSlot()?.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n\n if (!triggerEl) {\n currentTrigger = null;\n\n return;\n }\n\n currentTrigger = triggerEl;\n\n const removeAria = bindTriggerAria(triggerEl);\n const cleanups: Array<() => void> = [];\n\n const add = (\n target: EventTarget,\n event: string,\n listener: EventListener,\n eventOptions?: AddEventListenerOptions,\n ): void => {\n target.addEventListener(event, listener, eventOptions);\n cleanups.push(() => target.removeEventListener(event, listener, eventOptions));\n };\n\n const t = triggers.value;\n\n if (t.includes('click')) {\n add(triggerEl, 'click', toggle as EventListener);\n }\n\n if (t.includes('hover')) {\n add(triggerEl, 'pointerenter', () => open('hover'));\n add(triggerEl, 'pointerleave', () => close('trigger'));\n\n const panelEl = getPanel();\n\n if (panelEl) {\n add(panelEl, 'pointerenter', () => open('hover'));\n add(panelEl, 'pointerleave', () => close('trigger'));\n }\n }\n\n if (t.includes('focus')) {\n add(triggerEl, 'focusin', () => open('focus'));\n add(triggerEl, 'focusout', handleFocusOut as EventListener);\n\n const panelEl = getPanel();\n\n if (panelEl) add(panelEl, 'focusout', handleFocusOut as EventListener);\n }\n\n add(document, 'keydown', handleKeydown as EventListener);\n\n triggerBinding = () => {\n removeAria();\n\n for (const cleanup of cleanups) cleanup();\n\n currentTrigger = null;\n };\n };\n\n const stopOutsidePointerDismissal = createOutsidePointerDismissal({\n getTargets: () => [currentTrigger, getPanel(), options.getHost?.()],\n isActive: () => visible.value && triggers.value.includes('click'),\n onDismiss: () => close('outsideClick'),\n signal: abortSignal,\n });\n\n const mount = (): (() => void) => {\n let initializedOpenProp = false;\n const triggerSlot = resolveSlot();\n const rebind = (): void => {\n queueMicrotask(() => {\n if (!abortSignal.aborted) bindEvents();\n });\n };\n\n triggerSlot?.addEventListener('slotchange', rebind);\n rebind();\n watch(slotElements, bindEvents, { immediate: true });\n\n watch(\n openProp,\n (openVal) => {\n if (openVal === undefined || openVal === null) {\n if (initializedOpenProp && visible.value) {\n hideFloat();\n onClose?.('programmatic');\n }\n\n initializedOpenProp = true;\n\n return;\n }\n\n initializedOpenProp = true;\n\n if (openVal) showFloat();\n else if (visible.value) hideFloat();\n },\n { immediate: true },\n );\n\n if (openProp.value === undefined && defaultOpen.value) {\n showFloat();\n onOpen?.('programmatic');\n }\n\n watch(disabled, (isNowDisabled) => {\n if (isNowDisabled) close('programmatic');\n });\n\n return () => {\n triggerSlot?.removeEventListener('slotchange', rebind);\n triggerBinding?.();\n triggerBinding = null;\n\n const panel = getPanel();\n\n if (panel) {\n delete panel.dataset.open;\n\n if ('hidePopover' in panel) {\n try {\n if (panel.matches(':popover-open')) panel.hidePopover();\n } catch {\n // Popover API restricted; data-open removal handles visibility.\n }\n }\n }\n\n stopOutsidePointerDismissal();\n };\n };\n\n return { close, mount, open, toggle, updatePosition, visible };\n};\n"],"mappings":"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"}
|
|
@@ -36,16 +36,16 @@ export type FloatingTriggerOptions = {
|
|
|
36
36
|
triggers: Readable<FloatingTriggerType[]>;
|
|
37
37
|
};
|
|
38
38
|
export type FloatingTriggerHandle = {
|
|
39
|
-
/** Closes the panel
|
|
39
|
+
/** Closes the panel or requests that a controlled consumer close it. */
|
|
40
40
|
close: (reason?: DialogCloseReason) => void;
|
|
41
41
|
/**
|
|
42
42
|
* Call inside `onMounted`. Sets up slot + trigger event watchers
|
|
43
43
|
* and returns a cleanup function to pass back to the framework.
|
|
44
44
|
*/
|
|
45
45
|
mount: () => () => void;
|
|
46
|
-
/** Opens the panel
|
|
46
|
+
/** Opens the panel or requests that a controlled consumer open it. */
|
|
47
47
|
open: (reason?: OverlayOpenReason) => void;
|
|
48
|
-
/** Toggles the panel
|
|
48
|
+
/** Toggles the panel or requests the matching controlled-state change. */
|
|
49
49
|
toggle: () => void;
|
|
50
50
|
/** Manually trigger a position recalculation. */
|
|
51
51
|
updatePosition: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-floating-trigger.d.ts","sourceRoot":"","sources":["../../../src/overlay/shared/use-floating-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAiB,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAIpB,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,WAAW,KAAK,MAAM,IAAI,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG;IACnC,gFAAgF;IAChF,eAAe,EAAE,UAAU,CAAC;IAC5B,2EAA2E;IAC3E,WAAW,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAC3C,mEAAmE;IACnE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,8GAA8G;IAC9G,OAAO,CAAC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;IAC/B,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACnC,uGAAuG;IACvG,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC;IAC/C,0FAA0F;IAC1F,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACpC,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,qCAAqC;IACrC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACnD,uEAAuE;IACvE,QAAQ,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACxC,8CAA8C;IAC9C,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/B,uFAAuF;IACvF,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC;IAC9D,0EAA0E;IAC1E,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAClC,yFAAyF;IACzF,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,
|
|
1
|
+
{"version":3,"file":"use-floating-trigger.d.ts","sourceRoot":"","sources":["../../../src/overlay/shared/use-floating-trigger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,MAAM,EAAiB,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAIpB,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,WAAW,KAAK,MAAM,IAAI,CAAC;AAEhE,MAAM,MAAM,sBAAsB,GAAG;IACnC,gFAAgF;IAChF,eAAe,EAAE,UAAU,CAAC;IAC5B,2EAA2E;IAC3E,WAAW,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IAC3C,mEAAmE;IACnE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5B,8GAA8G;IAC9G,OAAO,CAAC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;IAC/B,6CAA6C;IAC7C,QAAQ,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACnC,uGAAuG;IACvG,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC;IAC/C,0FAA0F;IAC1F,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACpC,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC9C,qCAAqC;IACrC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC7C,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACnD,uEAAuE;IACvE,QAAQ,EAAE,QAAQ,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACxC,8CAA8C;IAC9C,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC/B,uFAAuF;IACvF,IAAI,EAAE,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC;IAC9D,0EAA0E;IAC1E,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAClC,yFAAyF;IACzF,QAAQ,EAAE,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,wEAAwE;IACxE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5C;;;OAGG;IACH,KAAK,EAAE,MAAM,MAAM,IAAI,CAAC;IACxB,sEAAsE;IACtE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC3C,0EAA0E;IAC1E,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,iDAAiD;IACjD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC;AAIF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,GAAI,SAAS,sBAAsB,KAAG,qBAuRpE,CAAC"}
|
|
@@ -39,13 +39,25 @@ var c = (c) => {
|
|
|
39
39
|
} catch {}
|
|
40
40
|
}
|
|
41
41
|
function j(e = "programmatic") {
|
|
42
|
-
|
|
42
|
+
if (!(d.value || w.value)) {
|
|
43
|
+
if (T()) {
|
|
44
|
+
m?.(e);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
k(), m?.(e);
|
|
48
|
+
}
|
|
43
49
|
}
|
|
44
50
|
function M(e = "trigger") {
|
|
45
|
-
|
|
51
|
+
if (w.value) {
|
|
52
|
+
if (T()) {
|
|
53
|
+
p?.(e);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
A(), p?.(e);
|
|
57
|
+
}
|
|
46
58
|
}
|
|
47
59
|
function N() {
|
|
48
|
-
|
|
60
|
+
w.value ? M() : j("click");
|
|
49
61
|
}
|
|
50
62
|
function P(e) {
|
|
51
63
|
e.key === "Escape" && M("escape");
|
|
@@ -103,7 +115,7 @@ var c = (c) => {
|
|
|
103
115
|
e && w.value && (A(), p?.("programmatic")), e = !0;
|
|
104
116
|
return;
|
|
105
117
|
}
|
|
106
|
-
e = !0, t ?
|
|
118
|
+
e = !0, t ? k() : w.value && A();
|
|
107
119
|
}, { immediate: !0 }), g.value === void 0 && u.value && (k(), m?.("programmatic")), r(d, (e) => {
|
|
108
120
|
e && M("programmatic");
|
|
109
121
|
}), () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-floating-trigger.js","names":[],"sources":["../../../src/overlay/shared/use-floating-trigger.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/orbit';\n\nimport { computePosition, flip, offset, shift } from '@vielzeug/orbit';\nimport { type Readable, type Signal, signal, watch } from '@vielzeug/ripple';\n\nimport {\n createOutsidePointerDismissal,\n type DialogCloseReason,\n lifecycleSignal,\n type OverlayOpenReason,\n} from '../../core';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type FloatingTriggerType = 'click' | 'focus' | 'hover';\n\nexport type AriaBindFn = (triggerEl: HTMLElement) => () => void;\n\nexport type FloatingTriggerOptions = {\n /** ARIA binding factory: called with the trigger element, returns a cleanup. */\n bindTriggerAria: AriaBindFn;\n /** Initial uncontrolled visibility. Ignored when `openProp` is defined. */\n defaultOpen: Readable<boolean | undefined>;\n /** If true, disable all trigger interactions and close if open. */\n disabled: Readable<boolean>;\n /** Returns the host element (e.g. ore-popover) so slotted content clicks aren't treated as outside clicks. */\n getHost?: () => Element | null;\n /** Returns the panel element, if mounted. */\n getPanel: () => HTMLElement | null;\n /** Gap from reference to floating panel in px. Default: 8. Accepts a signal for runtime reactivity. */\n offset?: Readable<number | undefined> | number;\n /** Cleanup registrar from the component setup ctx. Automatically called on disconnect. */\n onCleanup: (fn: () => void) => void;\n /** Called when the popover closes. */\n onClose?: (reason: DialogCloseReason) => void;\n /** Called when the popover opens. */\n onOpen?: (reason: OverlayOpenReason) => void;\n /** Callback when resolved placement changes (useful for CSS attribute). */\n onPlacementChange?: (placement: Placement) => void;\n /** Controlled open prop. When defined, disables uncontrolled logic. */\n openProp: Readable<boolean | undefined>;\n /** Preferred placement. Default: 'bottom'. */\n placement: Readable<Placement>;\n /** Slot element or a factory to lazily find it. Resolved each time bindEvents runs. */\n slot: HTMLSlotElement | null | (() => HTMLSlotElement | null);\n /** Slot elements signal — used to rebind when slotted elements change. */\n slotElements: Readable<Element[]>;\n /** Which triggers are active. Set to empty array or omit if handling events manually. */\n triggers: Readable<FloatingTriggerType[]>;\n};\n\nexport type FloatingTriggerHandle = {\n /** Closes the panel. No-op if controlled. */\n close: (reason?: DialogCloseReason) => void;\n /**\n * Call inside `onMounted`. Sets up slot + trigger event watchers\n * and returns a cleanup function to pass back to the framework.\n */\n mount: () => () => void;\n /** Opens the panel. No-op if controlled. */\n open: (reason?: OverlayOpenReason) => void;\n /** Toggles the panel. No-op if controlled. */\n toggle: () => void;\n /** Manually trigger a position recalculation. */\n updatePosition: () => void;\n /** Whether the panel is currently visible. */\n visible: Signal<boolean>;\n};\n\n// ── Implementation ─────────────────────────────────────────────────────────────\n\n/**\n * Shared logic for floating-panel triggers (tooltip, popover).\n *\n * Handles:\n * - Slot-based trigger element detection and rebinding\n * - Event binding per trigger type (hover / focus / click)\n * - Floating-element positioning via `@vielzeug/orbit`\n * - Controlled mode via `openProp` watcher\n * - Keyboard escape dismissal\n *\n * ARIA binding is intentionally delegated to the caller via `bindTriggerAria`\n * so that tooltip (`describedby`) and popover (`expanded`/`controls`/…) can diverge.\n */\nexport const useFloatingTrigger = (options: FloatingTriggerOptions): FloatingTriggerHandle => {\n const {\n bindTriggerAria,\n defaultOpen,\n disabled,\n getPanel,\n onClose,\n onOpen,\n onPlacementChange,\n openProp,\n placement,\n slot,\n slotElements,\n triggers,\n } = options;\n\n const resolveSlot = (): HTMLSlotElement | null => (typeof slot === 'function' ? slot() : slot);\n const getOffset = (): number => {\n const o = options.offset;\n\n if (o == null) return 8;\n\n const val = typeof o === 'object' ? (o as Readable<number | undefined>).value : o;\n\n return val ?? 8;\n };\n const abortSignal = lifecycleSignal(options.onCleanup);\n const visible = signal(false);\n const isControlled = () => openProp.value !== undefined;\n let currentTrigger: HTMLElement | null = null;\n let triggerBinding: (() => void) | null = null;\n\n function updatePosition(): void {\n const panel = getPanel();\n const trigger =\n currentTrigger ?? (resolveSlot()?.assignedElements({ flatten: true })[0] as HTMLElement | undefined);\n\n if (!panel || !trigger) return;\n\n const previousTransition = panel.style.transition;\n const previousTransform = panel.style.transform;\n\n panel.style.transition = 'none';\n panel.style.transform = 'none';\n\n const result = computePosition(trigger, panel, {\n middleware: [offset(getOffset()), flip(), shift({ padding: 8 })],\n placement: placement.value,\n });\n\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n panel.style.transition = previousTransition;\n panel.style.transform = previousTransform;\n panel.dataset.placement = result.placement;\n\n onPlacementChange?.(result.placement as Placement);\n }\n\n function showFloat(): void {\n visible.value = true;\n\n const panel = getPanel();\n\n if (panel) {\n panel.dataset.open = '';\n\n if ('showPopover' in panel) {\n try {\n if (!panel.matches(':popover-open')) panel.showPopover();\n } catch {\n // Popover API restricted (e.g. sandboxed iframe); data-open CSS fallback handles visibility.\n }\n }\n }\n\n updatePosition();\n }\n\n function hideFloat(): void {\n visible.value = false;\n\n const panel = getPanel();\n\n if (panel) {\n delete panel.dataset.open;\n\n if ('hidePopover' in panel) {\n try {\n if (panel.matches(':popover-open')) panel.hidePopover();\n } catch {\n // Popover API restricted; data-open removal handles visibility.\n }\n }\n }\n }\n\n function open(reason: OverlayOpenReason = 'programmatic'): void {\n if (isControlled() || disabled.value || visible.value) return;\n\n showFloat();\n onOpen?.(reason);\n }\n\n function close(reason: DialogCloseReason = 'trigger'): void {\n if (isControlled() || !visible.value) return;\n\n hideFloat();\n onClose?.(reason);\n }\n\n function toggle(): void {\n if (isControlled()) return;\n\n if (visible.value) close();\n else open('click');\n }\n\n function handleKeydown(e: KeyboardEvent): void {\n if (e.key === 'Escape') close('escape');\n }\n\n function handleFocusOut(e: FocusEvent): void {\n const next = e.relatedTarget as Element | null;\n const panel = getPanel();\n\n if (next && panel?.contains(next)) return;\n\n if (next && currentTrigger?.contains(next)) return;\n\n close('trigger');\n }\n\n const bindEvents = (): void => {\n triggerBinding?.();\n triggerBinding = null;\n\n const triggerEl = resolveSlot()?.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n\n if (!triggerEl) {\n currentTrigger = null;\n\n return;\n }\n\n currentTrigger = triggerEl;\n\n const removeAria = bindTriggerAria(triggerEl);\n const cleanups: Array<() => void> = [];\n\n const add = (\n target: EventTarget,\n event: string,\n listener: EventListener,\n eventOptions?: AddEventListenerOptions,\n ): void => {\n target.addEventListener(event, listener, eventOptions);\n cleanups.push(() => target.removeEventListener(event, listener, eventOptions));\n };\n\n const t = triggers.value;\n\n if (t.includes('click')) {\n add(triggerEl, 'click', toggle as EventListener);\n }\n\n if (t.includes('hover')) {\n add(triggerEl, 'pointerenter', () => open('hover'));\n add(triggerEl, 'pointerleave', () => close('trigger'));\n\n const panelEl = getPanel();\n\n if (panelEl) {\n add(panelEl, 'pointerenter', () => open('hover'));\n add(panelEl, 'pointerleave', () => close('trigger'));\n }\n }\n\n if (t.includes('focus')) {\n add(triggerEl, 'focusin', () => open('focus'));\n add(triggerEl, 'focusout', handleFocusOut as EventListener);\n\n const panelEl = getPanel();\n\n if (panelEl) add(panelEl, 'focusout', handleFocusOut as EventListener);\n }\n\n add(document, 'keydown', handleKeydown as EventListener);\n\n triggerBinding = () => {\n removeAria();\n\n for (const cleanup of cleanups) cleanup();\n\n currentTrigger = null;\n };\n };\n\n const stopOutsidePointerDismissal = createOutsidePointerDismissal({\n getTargets: () => [currentTrigger, getPanel(), options.getHost?.()],\n isActive: () => visible.value && triggers.value.includes('click'),\n onDismiss: () => close('outsideClick'),\n signal: abortSignal,\n });\n\n const mount = (): (() => void) => {\n let initializedOpenProp = false;\n const triggerSlot = resolveSlot();\n const rebind = (): void => {\n queueMicrotask(() => {\n if (!abortSignal.aborted) bindEvents();\n });\n };\n\n triggerSlot?.addEventListener('slotchange', rebind);\n rebind();\n watch(slotElements, bindEvents, { immediate: true });\n\n watch(\n openProp,\n (openVal) => {\n if (openVal === undefined || openVal === null) {\n if (initializedOpenProp && visible.value) {\n hideFloat();\n onClose?.('programmatic');\n }\n\n initializedOpenProp = true;\n\n return;\n }\n\n initializedOpenProp = true;\n\n if (openVal) {\n showFloat();\n onOpen?.('programmatic');\n } else if (visible.value) {\n hideFloat();\n onClose?.('programmatic');\n }\n },\n { immediate: true },\n );\n\n if (openProp.value === undefined && defaultOpen.value) {\n showFloat();\n onOpen?.('programmatic');\n }\n\n watch(disabled, (isNowDisabled) => {\n if (isNowDisabled) close('programmatic');\n });\n\n return () => {\n triggerSlot?.removeEventListener('slotchange', rebind);\n triggerBinding?.();\n triggerBinding = null;\n\n const panel = getPanel();\n\n if (panel) {\n delete panel.dataset.open;\n\n if ('hidePopover' in panel) {\n try {\n if (panel.matches(':popover-open')) panel.hidePopover();\n } catch {\n // Popover API restricted; data-open removal handles visibility.\n }\n }\n }\n\n stopOutsidePointerDismissal();\n };\n };\n\n return { close, mount, open, toggle, updatePosition, visible };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-floating-trigger.js","names":[],"sources":["../../../src/overlay/shared/use-floating-trigger.ts"],"sourcesContent":["import type { Placement } from '@vielzeug/orbit';\n\nimport { computePosition, flip, offset, shift } from '@vielzeug/orbit';\nimport { type Readable, type Signal, signal, watch } from '@vielzeug/ripple';\n\nimport {\n createOutsidePointerDismissal,\n type DialogCloseReason,\n lifecycleSignal,\n type OverlayOpenReason,\n} from '../../core';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport type FloatingTriggerType = 'click' | 'focus' | 'hover';\n\nexport type AriaBindFn = (triggerEl: HTMLElement) => () => void;\n\nexport type FloatingTriggerOptions = {\n /** ARIA binding factory: called with the trigger element, returns a cleanup. */\n bindTriggerAria: AriaBindFn;\n /** Initial uncontrolled visibility. Ignored when `openProp` is defined. */\n defaultOpen: Readable<boolean | undefined>;\n /** If true, disable all trigger interactions and close if open. */\n disabled: Readable<boolean>;\n /** Returns the host element (e.g. ore-popover) so slotted content clicks aren't treated as outside clicks. */\n getHost?: () => Element | null;\n /** Returns the panel element, if mounted. */\n getPanel: () => HTMLElement | null;\n /** Gap from reference to floating panel in px. Default: 8. Accepts a signal for runtime reactivity. */\n offset?: Readable<number | undefined> | number;\n /** Cleanup registrar from the component setup ctx. Automatically called on disconnect. */\n onCleanup: (fn: () => void) => void;\n /** Called when the popover closes. */\n onClose?: (reason: DialogCloseReason) => void;\n /** Called when the popover opens. */\n onOpen?: (reason: OverlayOpenReason) => void;\n /** Callback when resolved placement changes (useful for CSS attribute). */\n onPlacementChange?: (placement: Placement) => void;\n /** Controlled open prop. When defined, disables uncontrolled logic. */\n openProp: Readable<boolean | undefined>;\n /** Preferred placement. Default: 'bottom'. */\n placement: Readable<Placement>;\n /** Slot element or a factory to lazily find it. Resolved each time bindEvents runs. */\n slot: HTMLSlotElement | null | (() => HTMLSlotElement | null);\n /** Slot elements signal — used to rebind when slotted elements change. */\n slotElements: Readable<Element[]>;\n /** Which triggers are active. Set to empty array or omit if handling events manually. */\n triggers: Readable<FloatingTriggerType[]>;\n};\n\nexport type FloatingTriggerHandle = {\n /** Closes the panel or requests that a controlled consumer close it. */\n close: (reason?: DialogCloseReason) => void;\n /**\n * Call inside `onMounted`. Sets up slot + trigger event watchers\n * and returns a cleanup function to pass back to the framework.\n */\n mount: () => () => void;\n /** Opens the panel or requests that a controlled consumer open it. */\n open: (reason?: OverlayOpenReason) => void;\n /** Toggles the panel or requests the matching controlled-state change. */\n toggle: () => void;\n /** Manually trigger a position recalculation. */\n updatePosition: () => void;\n /** Whether the panel is currently visible. */\n visible: Signal<boolean>;\n};\n\n// ── Implementation ─────────────────────────────────────────────────────────────\n\n/**\n * Shared logic for floating-panel triggers (tooltip, popover).\n *\n * Handles:\n * - Slot-based trigger element detection and rebinding\n * - Event binding per trigger type (hover / focus / click)\n * - Floating-element positioning via `@vielzeug/orbit`\n * - Controlled mode via `openProp` watcher\n * - Keyboard escape dismissal\n *\n * ARIA binding is intentionally delegated to the caller via `bindTriggerAria`\n * so that tooltip (`describedby`) and popover (`expanded`/`controls`/…) can diverge.\n */\nexport const useFloatingTrigger = (options: FloatingTriggerOptions): FloatingTriggerHandle => {\n const {\n bindTriggerAria,\n defaultOpen,\n disabled,\n getPanel,\n onClose,\n onOpen,\n onPlacementChange,\n openProp,\n placement,\n slot,\n slotElements,\n triggers,\n } = options;\n\n const resolveSlot = (): HTMLSlotElement | null => (typeof slot === 'function' ? slot() : slot);\n const getOffset = (): number => {\n const o = options.offset;\n\n if (o == null) return 8;\n\n const val = typeof o === 'object' ? (o as Readable<number | undefined>).value : o;\n\n return val ?? 8;\n };\n const abortSignal = lifecycleSignal(options.onCleanup);\n const visible = signal(false);\n const isControlled = () => openProp.value !== undefined;\n let currentTrigger: HTMLElement | null = null;\n let triggerBinding: (() => void) | null = null;\n\n function updatePosition(): void {\n const panel = getPanel();\n const trigger =\n currentTrigger ?? (resolveSlot()?.assignedElements({ flatten: true })[0] as HTMLElement | undefined);\n\n if (!panel || !trigger) return;\n\n const previousTransition = panel.style.transition;\n const previousTransform = panel.style.transform;\n\n panel.style.transition = 'none';\n panel.style.transform = 'none';\n\n const result = computePosition(trigger, panel, {\n middleware: [offset(getOffset()), flip(), shift({ padding: 8 })],\n placement: placement.value,\n });\n\n panel.style.left = `${result.x}px`;\n panel.style.top = `${result.y}px`;\n panel.style.transition = previousTransition;\n panel.style.transform = previousTransform;\n panel.dataset.placement = result.placement;\n\n onPlacementChange?.(result.placement as Placement);\n }\n\n function showFloat(): void {\n visible.value = true;\n\n const panel = getPanel();\n\n if (panel) {\n panel.dataset.open = '';\n\n if ('showPopover' in panel) {\n try {\n if (!panel.matches(':popover-open')) panel.showPopover();\n } catch {\n // Popover API restricted (e.g. sandboxed iframe); data-open CSS fallback handles visibility.\n }\n }\n }\n\n updatePosition();\n }\n\n function hideFloat(): void {\n visible.value = false;\n\n const panel = getPanel();\n\n if (panel) {\n delete panel.dataset.open;\n\n if ('hidePopover' in panel) {\n try {\n if (panel.matches(':popover-open')) panel.hidePopover();\n } catch {\n // Popover API restricted; data-open removal handles visibility.\n }\n }\n }\n }\n\n function open(reason: OverlayOpenReason = 'programmatic'): void {\n if (disabled.value || visible.value) return;\n if (isControlled()) {\n onOpen?.(reason);\n return;\n }\n\n showFloat();\n onOpen?.(reason);\n }\n\n function close(reason: DialogCloseReason = 'trigger'): void {\n if (!visible.value) return;\n if (isControlled()) {\n onClose?.(reason);\n return;\n }\n\n hideFloat();\n onClose?.(reason);\n }\n\n function toggle(): void {\n if (visible.value) close();\n else open('click');\n }\n\n function handleKeydown(e: KeyboardEvent): void {\n if (e.key === 'Escape') close('escape');\n }\n\n function handleFocusOut(e: FocusEvent): void {\n const next = e.relatedTarget as Element | null;\n const panel = getPanel();\n\n if (next && panel?.contains(next)) return;\n\n if (next && currentTrigger?.contains(next)) return;\n\n close('trigger');\n }\n\n const bindEvents = (): void => {\n triggerBinding?.();\n triggerBinding = null;\n\n const triggerEl = resolveSlot()?.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n\n if (!triggerEl) {\n currentTrigger = null;\n\n return;\n }\n\n currentTrigger = triggerEl;\n\n const removeAria = bindTriggerAria(triggerEl);\n const cleanups: Array<() => void> = [];\n\n const add = (\n target: EventTarget,\n event: string,\n listener: EventListener,\n eventOptions?: AddEventListenerOptions,\n ): void => {\n target.addEventListener(event, listener, eventOptions);\n cleanups.push(() => target.removeEventListener(event, listener, eventOptions));\n };\n\n const t = triggers.value;\n\n if (t.includes('click')) {\n add(triggerEl, 'click', toggle as EventListener);\n }\n\n if (t.includes('hover')) {\n add(triggerEl, 'pointerenter', () => open('hover'));\n add(triggerEl, 'pointerleave', () => close('trigger'));\n\n const panelEl = getPanel();\n\n if (panelEl) {\n add(panelEl, 'pointerenter', () => open('hover'));\n add(panelEl, 'pointerleave', () => close('trigger'));\n }\n }\n\n if (t.includes('focus')) {\n add(triggerEl, 'focusin', () => open('focus'));\n add(triggerEl, 'focusout', handleFocusOut as EventListener);\n\n const panelEl = getPanel();\n\n if (panelEl) add(panelEl, 'focusout', handleFocusOut as EventListener);\n }\n\n add(document, 'keydown', handleKeydown as EventListener);\n\n triggerBinding = () => {\n removeAria();\n\n for (const cleanup of cleanups) cleanup();\n\n currentTrigger = null;\n };\n };\n\n const stopOutsidePointerDismissal = createOutsidePointerDismissal({\n getTargets: () => [currentTrigger, getPanel(), options.getHost?.()],\n isActive: () => visible.value && triggers.value.includes('click'),\n onDismiss: () => close('outsideClick'),\n signal: abortSignal,\n });\n\n const mount = (): (() => void) => {\n let initializedOpenProp = false;\n const triggerSlot = resolveSlot();\n const rebind = (): void => {\n queueMicrotask(() => {\n if (!abortSignal.aborted) bindEvents();\n });\n };\n\n triggerSlot?.addEventListener('slotchange', rebind);\n rebind();\n watch(slotElements, bindEvents, { immediate: true });\n\n watch(\n openProp,\n (openVal) => {\n if (openVal === undefined || openVal === null) {\n if (initializedOpenProp && visible.value) {\n hideFloat();\n onClose?.('programmatic');\n }\n\n initializedOpenProp = true;\n\n return;\n }\n\n initializedOpenProp = true;\n\n if (openVal) showFloat();\n else if (visible.value) hideFloat();\n },\n { immediate: true },\n );\n\n if (openProp.value === undefined && defaultOpen.value) {\n showFloat();\n onOpen?.('programmatic');\n }\n\n watch(disabled, (isNowDisabled) => {\n if (isNowDisabled) close('programmatic');\n });\n\n return () => {\n triggerSlot?.removeEventListener('slotchange', rebind);\n triggerBinding?.();\n triggerBinding = null;\n\n const panel = getPanel();\n\n if (panel) {\n delete panel.dataset.open;\n\n if ('hidePopover' in panel) {\n try {\n if (panel.matches(':popover-open')) panel.hidePopover();\n } catch {\n // Popover API restricted; data-open removal handles visibility.\n }\n }\n }\n\n stopOutsidePointerDismissal();\n };\n };\n\n return { close, mount, open, toggle, updatePosition, visible };\n};\n"],"mappings":"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"}
|