@ixfx/components 0.6.0 → 0.6.1

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.
@@ -1,5 +1,5 @@
1
1
  import { t as LabelledInputBase } from "./labelled-input-base-Dp_9KP0G.js";
2
- import { i as MarkerStyle, l as ValueMode } from "./radial-input-DXMN55Nz.js";
2
+ import { i as MarkerStyle, l as ValueMode } from "./radial-input-BhZeyyP-.js";
3
3
  import { CSSResultGroup, nothing } from "lit";
4
4
  //#region src/labelled-radial-input/labelled-radial-input.d.ts
5
5
  declare class LabelledRadialInput extends LabelledInputBase {
@@ -1,4 +1,4 @@
1
- import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DGrNzWuE.js";
1
+ import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DgMTRYlh.js";
2
2
  import { LitElement, PropertyValues, html } from "lit";
3
3
  //#region src/polar-pad/polar-pad.d.ts
4
4
  declare const PolarPad_base: (new (...args: any[]) => WheelNudgeConsumerType<LitElement>) & typeof LitElement;
@@ -1,4 +1,4 @@
1
- import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DGrNzWuE.js";
1
+ import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DgMTRYlh.js";
2
2
  import { LitElement, PropertyValues } from "lit";
3
3
  //#region src/radial-input/types.d.ts
4
4
  /**
@@ -68,4 +68,4 @@ declare global {
68
68
  }
69
69
  //#endregion
70
70
  export { RadialInputChangeDetail as a, RadialInputInputEvent as c, MarkerStyle as i, ValueMode as l, LaneData as n, RadialInputChangeEvent as o, LaneType as r, RadialInputInputDetail as s, RadialInputElement as t };
71
- //# sourceMappingURL=radial-input-DXMN55Nz.d.ts.map
71
+ //# sourceMappingURL=radial-input-BhZeyyP-.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"radial-input-DXMN55Nz.d.ts","names":[],"sources":["../src/radial-input/types.ts","../src/radial-input/radial-input.ts"],"mappings":";;;;;;KAIY;KACA;KACA;UAEK;EACf;EACA;EACA,MAAM;EACN;EACA;;UAGe;EACf;EACA;;UAGe;EACf;EACA;EACA;;KAGU,wBAAwB,YAAY;KACpC,yBAAyB,YAAY;;;;cCepC,2BAA2B;;MAMlC;MAIA,OAAO;EAMX;EAGA;EAGA;EAGA;EAGA;EAIA,WAAW;EAIX;EAGA,aAAa;EAGb;EAIA;;EA+BA,QACE,aACA;IACE;IACA,OAAO;IACP;IACA;;EAcJ,aAAa,aAAa;EAQ1B,WAAW;EAKX,YAAY,oBAAoB;EAIhC,QAAQ,cAAc;EA+Mb,iBAAiB,WAAW,gBAAgB,OAAO;YA4PzC,WAAW,SAAS;EAa9B;YAgDU,QAAQ,SAAS;EA4B3B;EAQA;SAYO,sBAAM;;QAwHhB;YACI;IACR,qBAAqB"}
1
+ {"version":3,"file":"radial-input-BhZeyyP-.d.ts","names":[],"sources":["../src/radial-input/types.ts","../src/radial-input/radial-input.ts"],"mappings":";;;;;;KAIY;KACA;KACA;UAEK;EACf;EACA;EACA,MAAM;EACN;EACA;;UAGe;EACf;EACA;;UAGe;EACf;EACA;EACA;;KAGU,wBAAwB,YAAY;KACpC,yBAAyB,YAAY;;;;cCepC,2BAA2B;;MAMlC;MAIA,OAAO;EAMX;EAGA;EAGA;EAGA;EAGA;EAIA,WAAW;EAIX;EAGA,aAAa;EAGb;EAIA;;EA+BA,QACE,aACA;IACE;IACA,OAAO;IACP;IACA;;EAcJ,aAAa,aAAa;EAQ1B,WAAW;EAKX,YAAY,oBAAoB;EAIhC,QAAQ,cAAc;EA+Mb,iBAAiB,WAAW,gBAAgB,OAAO;YA4PzC,WAAW,SAAS;EAa9B;YAgDU,QAAQ,SAAS;EA4B3B;EAQA;SAYO,sBAAM;;QAwHhB;YACI;IACR,qBAAqB"}
@@ -1,2 +1,2 @@
1
- import { t as RadialInputElement } from "./radial-input-DXMN55Nz.js";
1
+ import { t as RadialInputElement } from "./radial-input-BhZeyyP-.js";
2
2
  export { RadialInputElement };
@@ -1,4 +1,4 @@
1
- import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DGrNzWuE.js";
1
+ import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DgMTRYlh.js";
2
2
  import { n as TooltipElement, r as TooltipOrientations } from "./tooltip-BlvBUQxx.js";
3
3
  import { CSSResultGroup, LitElement } from "lit";
4
4
  //#region src/range-input/range-input.d.ts
package/dist/range.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DGrNzWuE.js";
1
+ import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DgMTRYlh.js";
2
2
  import { r as TooltipOrientations } from "./tooltip-BlvBUQxx.js";
3
3
  import { LitElement } from "lit";
4
4
  //#region src/range/range.d.ts
@@ -1,4 +1,4 @@
1
- import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DGrNzWuE.js";
1
+ import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DgMTRYlh.js";
2
2
  import { LitElement } from "lit";
3
3
  //#region src/select-horiz/select-horiz.d.ts
4
4
  type SelectHorizChangeDetail = {
@@ -1,4 +1,4 @@
1
- import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DGrNzWuE.js";
1
+ import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DgMTRYlh.js";
2
2
  import { LitElement, PropertyValues } from "lit";
3
3
  //#region src/slider-input/types.d.ts
4
4
  /**
@@ -157,4 +157,4 @@ interface SliderInputElement {
157
157
  }
158
158
  //#endregion
159
159
  export { SliderValueMode as _, SliderInputChangeDetail as a, SliderInputInputDetail as c, SliderLaneType as d, SliderMarkerStyle as f, SliderValueDrag as g, SliderValueCFollow as h, SliderHandleKey as i, SliderInputInputEvent as l, SliderSingleStyle as m, SliderChangedField as n, SliderInputChangeEvent as o, SliderOrientation as p, SliderCrossover as r, SliderInputElementEventMap as s, SliderInputElement as t, SliderLaneData as u };
160
- //# sourceMappingURL=slider-input-XppH3vcy.d.ts.map
160
+ //# sourceMappingURL=slider-input-TidGhvXt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"slider-input-XppH3vcy.d.ts","names":[],"sources":["../src/slider-input/types.ts","../src/slider-input/slider-input.ts"],"mappings":";;;;;;KAIY;KACA;KACA;KACA;KACA;KACA;;;;;;;KAOA;KACA;KACA;;;;;;;UAQK;EACf;EACA,MAAM;;;;;EAKN;;EAEA;;EAEA;;EAEA;;EAEA;;;;;;KAOU;;;;;;;;UASK;WACN;WACA;;WAEA;;WAEA;WACA;WACA;;WAEA;WACA;;WAEA,UAAU;;UAGJ;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,UAAU;;KAGT,wBAAwB,YAAY;KACpC,yBAAyB,YAAY;UAEhC;EACf,OAAO;EACP,QAAQ;;;;;cCdG,2BAA2B;;EAGtC;EAGA;;;;;;EAQA;EAGA;EAGA;EAGA;EAGA;EAGA,WAAW;EAGX,aAAa;EAGb,aAAa;EAGb,aAAa;;;;;;EAQb,cAAc;EAGd,WAAW;EAGX,WAAW;;;;;;;EASX,cAAc;EAGd;EAGA;;EAoFS;EAmET,QACE,aACA;IACE;IACA;IACA;IACA,OAAO;IACP;IACA;;EAgBJ,aAAa,aAAa;EAQ1B,aAAa,aAAa,kBAAkB;EAW5C,WAAW;EAKX,YAAY,oBAAoB;EAIhC,QAAQ,cAAc;EA8zBb,iBAAiB,WAAW,gBAAgB,OAAO;YAgWzC,WAAW,SAAS;EAsE9B;YAwJU,QAAQ,SAAS;EAkB3B;SAYO,sBAAM;;QA+IhB;YACI;IACR,qBAAqB;;;UAKR;EACf,oBAAoB,gBAAgB,4BAClC,MAAM,GACN,WAAW,MAAM,oBAAoB,OAAO,2BAA2B,aACvE,oBAAoB,sCAEpB,cACA,UAAU,oCACV,oBAAoB"}
1
+ {"version":3,"file":"slider-input-TidGhvXt.d.ts","names":[],"sources":["../src/slider-input/types.ts","../src/slider-input/slider-input.ts"],"mappings":";;;;;;KAIY;KACA;KACA;KACA;KACA;KACA;;;;;;;KAOA;KACA;KACA;;;;;;;UAQK;EACf;EACA,MAAM;;;;;EAKN;;EAEA;;EAEA;;EAEA;;EAEA;;;;;;KAOU;;;;;;;;UASK;WACN;WACA;;WAEA;;WAEA;WACA;WACA;;WAEA;WACA;;WAEA,UAAU;;UAGJ;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,UAAU;;KAGT,wBAAwB,YAAY;KACpC,yBAAyB,YAAY;UAEhC;EACf,OAAO;EACP,QAAQ;;;;;cCdG,2BAA2B;;EAGtC;EAGA;;;;;;EAQA;EAGA;EAGA;EAGA;EAGA;EAGA,WAAW;EAGX,aAAa;EAGb,aAAa;EAGb,aAAa;;;;;;EAQb,cAAc;EAGd,WAAW;EAGX,WAAW;;;;;;;EASX,cAAc;EAGd;EAGA;;EAoFS;EAmET,QACE,aACA;IACE;IACA;IACA;IACA,OAAO;IACP;IACA;;EAgBJ,aAAa,aAAa;EAQ1B,aAAa,aAAa,kBAAkB;EAW5C,WAAW;EAKX,YAAY,oBAAoB;EAIhC,QAAQ,cAAc;EA8zBb,iBAAiB,WAAW,gBAAgB,OAAO;YAgWzC,WAAW,SAAS;EAsE9B;YAwJU,QAAQ,SAAS;EAkB3B;SAYO,sBAAM;;QA+IhB;YACI;IACR,qBAAqB;;;UAKR;EACf,oBAAoB,gBAAgB,4BAClC,MAAM,GACN,WAAW,MAAM,oBAAoB,OAAO,2BAA2B,aACvE,oBAAoB,sCAEpB,cACA,UAAU,oCACV,oBAAoB"}
@@ -1,2 +1,2 @@
1
- import { t as SliderInputElement } from "./slider-input-XppH3vcy.js";
1
+ import { t as SliderInputElement } from "./slider-input-TidGhvXt.js";
2
2
  export { SliderInputElement };
package/dist/swipe.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DGrNzWuE.js";
1
+ import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DgMTRYlh.js";
2
2
  import { CSSResultGroup, LitElement, html } from "lit";
3
3
  //#region src/swipe/swipe.d.ts
4
4
  type SwipeInputDetail = {
@@ -1 +1 @@
1
- {"version":3,"file":"wheel-nudge-BlSCe_hD.js","names":[],"sources":["../src/mixins/wheel-nudge.ts"],"sourcesContent":["import type { LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\n\ntype Constructor<T = object> = new (...args: any[]) => T;\n\n/**\n * Direction of a wheel tick. `+1` for `deltaY < 0` (wheel up/away), `-1` for\n * `deltaY > 0` (wheel down/toward).\n */\nexport type WheelDirection = 1 | -1;\n\n/**\n * Abstract surface a consumer of {@link WheelNudgeMixin} must implement.\n *\n * `_applyWheelDelta` is called once per handled wheel tick. The consumer is\n * expected to reuse its existing arrow-key step math (typically a shared\n * `_stepByDelta(direction, effectiveStep)` private method) and call it here.\n *\n * `_shouldHandleWheel` may be overridden to restrict when the wheel acts\n * (e.g. editable-number rejects while the user is typing).\n */\nexport interface WheelNudgeConsumer {\n _applyWheelDelta: (direction: WheelDirection, event: WheelEvent) => void;\n _shouldHandleWheel: () => boolean;\n}\n\n/**\n * Internal: the surface a {@link WheelNudgeMixin}-decorated class exposes to\n * TypeScript — its own members plus the consumer contract.\n */\nexport type WheelNudgeConsumerType<TBase> = TBase & WheelNudgeConsumer;\ntype WheelNudgeMixinBase<T> = T extends Constructor<infer U> ? U : never;\ntype WheelNudgeMixinResult<T extends Constructor<LitElement>>\n = Constructor<WheelNudgeConsumerType<WheelNudgeMixinBase<T>>> & T;\n\n/**\n * Mixin that adds mousewheel support with an optional `lighttouch` hover mode.\n *\n * Activation rule:\n * - If the host's `disabled` property is truthy → ignore.\n * - Otherwise, handle if EITHER:\n * • `lighttouch` is true AND the pointer is currently over the host, OR\n * • the host (or anything in its shadow tree) currently has focus.\n *\n * Direction convention: `deltaY < 0` (wheel up/away) → +1 step; `deltaY > 0` → -1 step.\n *\n * Consumers must implement `_applyWheelDelta(direction, event)` (see\n * {@link WheelNudgeConsumer}). The mixin calls `event.preventDefault()` only when\n * the activation rule accepts the event, so page scroll is suppressed during\n * interaction without blocking wheel events over empty space.\n *\n * Usage:\n *\n * ```ts\n * class MyInput extends WheelNudgeMixin(LitElement) {\n * protected _applyWheelDelta(direction, event) {\n * const step = resolveAxisStep(this.range, this.stops, this.step, event.shiftKey);\n * this._stepByDelta(direction, step);\n * }\n * }\n * ```\n */\nexport function WheelNudgeMixin<T extends Constructor<LitElement>>(superClass: T): WheelNudgeMixinResult<T> {\n class WheelNudgeMixinClass extends superClass {\n /**\n * When true, the wheel adjusts the value simply when the pointer is hovering\n * over the host (no focus required). When false (default), the host must\n * have focus for the wheel to act.\n */\n @property({ type: Boolean, reflect: true })\n lighttouch = false;\n\n /**\n * Imperative hover flag — not Lit-reactive (avoids update churn for what\n * is purely an interaction-time predicate).\n */\n _isHovering = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener(`pointerenter`, this._onPointerEnter);\n this.addEventListener(`pointerleave`, this._onPointerLeave);\n this.addEventListener(`wheel`, this._onWheel, { passive: false });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(`pointerenter`, this._onPointerEnter);\n this.removeEventListener(`pointerleave`, this._onPointerLeave);\n this.removeEventListener(`wheel`, this._onWheel);\n this._isHovering = false;\n }\n\n _onPointerEnter = (): void => {\n this._isHovering = true;\n };\n\n _onPointerLeave = (): void => {\n this._isHovering = false;\n };\n\n /**\n * Override to restrict when wheel is handled (e.g. editable-number rejects\n * while the user is typing). Default: respect `disabled`, then apply the\n * focus-or-lighttouch rule described on the mixin.\n */\n _shouldHandleWheel(): boolean {\n const anyThis = this as unknown as { disabled?: boolean };\n if (anyThis.disabled)\n return false;\n if (this.lighttouch && this._isHovering)\n return true;\n if (this.matches?.(`:focus, :focus-within`))\n return true;\n const root = this.renderRoot;\n if (root && (root as ShadowRoot).activeElement !== null)\n return true;\n return false;\n }\n\n _onWheel = (event: WheelEvent): void => {\n if (!this._shouldHandleWheel())\n return;\n event.preventDefault();\n // Some browsers (notably when the user holds Shift) send `deltaY=0`\n // and route the scroll into `deltaX` instead. Use whichever axis\n // actually moved so the direction sign matches the user's intent.\n const delta = event.deltaY !== 0 ? event.deltaY : event.deltaX;\n const direction: WheelDirection = delta < 0 ? 1 : -1;\n (this as unknown as WheelNudgeConsumer)._applyWheelDelta(direction, event);\n };\n }\n return WheelNudgeMixinClass as unknown as WheelNudgeMixinResult<T>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DA,SAAgB,gBAAmD,YAAyC;CAC1G,MAAM,6BAA6B,WAAW;;;GAO/B,KAAA,aAAA;GAMC,KAAA,cAAA;GAiBgB,KAAA,wBAAA;IAC5B,KAAK,cAAc;GACrB;GAE8B,KAAA,wBAAA;IAC5B,KAAK,cAAc;GACrB;GAqBY,KAAA,YAAA,UAA4B;IACtC,IAAI,CAAC,KAAK,mBAAmB,GAC3B;IACF,MAAM,eAAe;IAKrB,MAAM,aADQ,MAAM,WAAW,IAAI,MAAM,SAAS,MAAM,UACd,IAAI,IAAI;IAClD,KAAwC,iBAAiB,WAAW,KAAK;GAC3E;;EApDA,oBAAmC;GACjC,MAAM,kBAAkB;GACxB,KAAK,iBAAiB,gBAAgB,KAAK,eAAe;GAC1D,KAAK,iBAAiB,gBAAgB,KAAK,eAAe;GAC1D,KAAK,iBAAiB,SAAS,KAAK,UAAU,EAAE,SAAS,MAAM,CAAC;EAClE;EAEA,uBAAsC;GACpC,MAAM,qBAAqB;GAC3B,KAAK,oBAAoB,gBAAgB,KAAK,eAAe;GAC7D,KAAK,oBAAoB,gBAAgB,KAAK,eAAe;GAC7D,KAAK,oBAAoB,SAAS,KAAK,QAAQ;GAC/C,KAAK,cAAc;EACrB;;;;;;EAeA,qBAA8B;GAE5B,IAAI,KAAQ,UACV,OAAO;GACT,IAAI,KAAK,cAAc,KAAK,aAC1B,OAAO;GACT,IAAI,KAAK,UAAU,uBAAuB,GACxC,OAAO;GACT,MAAM,OAAO,KAAK;GAClB,IAAI,QAAS,KAAoB,kBAAkB,MACjD,OAAO;GACT,OAAO;EACT;CAaF;CA9DG,WAAA,CAAA,SAAS;EAAE,MAAM;EAAS,SAAS;CAAK,CAAC,CAAA,GAAA,qBAAA,WAAA,cAAA,KAAA,CAAA;CA+D5C,OAAO;AACT"}
1
+ {"version":3,"file":"wheel-nudge-BlSCe_hD.js","names":[],"sources":["../src/mixins/wheel-nudge.ts"],"sourcesContent":["import type { LitElement } from 'lit';\nimport { property } from 'lit/decorators.js';\n\ntype Constructor<T = object> = new (...args: any[]) => T;\n\n/**\n * Direction of a wheel tick. `+1` for `deltaY < 0` (wheel up/away), `-1` for\n * `deltaY > 0` (wheel down/toward).\n */\nexport type WheelDirection = 1 | -1;\n\n/**\n * Abstract surface a consumer of {@link WheelNudgeMixin} must implement.\n *\n * `_applyWheelDelta` is called once per handled wheel tick. The consumer is\n * expected to reuse its existing arrow-key step math (typically a shared\n * `_stepByDelta(direction, effectiveStep)` private method) and call it here.\n *\n * `_shouldHandleWheel` may be overridden to restrict when the wheel acts\n * (e.g. editable-number rejects while the user is typing).\n */\nexport interface WheelNudgeConsumer {\n _applyWheelDelta(direction: WheelDirection, event: WheelEvent): void;\n _shouldHandleWheel(): boolean;\n}\n\n/**\n * Internal: the surface a {@link WheelNudgeMixin}-decorated class exposes to\n * TypeScript — its own members plus the consumer contract.\n */\nexport type WheelNudgeConsumerType<TBase> = TBase & WheelNudgeConsumer;\ntype WheelNudgeMixinBase<T> = T extends Constructor<infer U> ? U : never;\ntype WheelNudgeMixinResult<T extends Constructor<LitElement>>\n = Constructor<WheelNudgeConsumerType<WheelNudgeMixinBase<T>>> & T;\n\n/**\n * Mixin that adds mousewheel support with an optional `lighttouch` hover mode.\n *\n * Activation rule:\n * - If the host's `disabled` property is truthy → ignore.\n * - Otherwise, handle if EITHER:\n * • `lighttouch` is true AND the pointer is currently over the host, OR\n * • the host (or anything in its shadow tree) currently has focus.\n *\n * Direction convention: `deltaY < 0` (wheel up/away) → +1 step; `deltaY > 0` → -1 step.\n *\n * Consumers must implement `_applyWheelDelta(direction, event)` (see\n * {@link WheelNudgeConsumer}). The mixin calls `event.preventDefault()` only when\n * the activation rule accepts the event, so page scroll is suppressed during\n * interaction without blocking wheel events over empty space.\n *\n * Usage:\n *\n * ```ts\n * class MyInput extends WheelNudgeMixin(LitElement) {\n * protected _applyWheelDelta(direction, event) {\n * const step = resolveAxisStep(this.range, this.stops, this.step, event.shiftKey);\n * this._stepByDelta(direction, step);\n * }\n * }\n * ```\n */\nexport function WheelNudgeMixin<T extends Constructor<LitElement>>(superClass: T): WheelNudgeMixinResult<T> {\n class WheelNudgeMixinClass extends superClass {\n /**\n * When true, the wheel adjusts the value simply when the pointer is hovering\n * over the host (no focus required). When false (default), the host must\n * have focus for the wheel to act.\n */\n @property({ type: Boolean, reflect: true })\n lighttouch = false;\n\n /**\n * Imperative hover flag — not Lit-reactive (avoids update churn for what\n * is purely an interaction-time predicate).\n */\n _isHovering = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener(`pointerenter`, this._onPointerEnter);\n this.addEventListener(`pointerleave`, this._onPointerLeave);\n this.addEventListener(`wheel`, this._onWheel, { passive: false });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.removeEventListener(`pointerenter`, this._onPointerEnter);\n this.removeEventListener(`pointerleave`, this._onPointerLeave);\n this.removeEventListener(`wheel`, this._onWheel);\n this._isHovering = false;\n }\n\n _onPointerEnter = (): void => {\n this._isHovering = true;\n };\n\n _onPointerLeave = (): void => {\n this._isHovering = false;\n };\n\n /**\n * Override to restrict when wheel is handled (e.g. editable-number rejects\n * while the user is typing). Default: respect `disabled`, then apply the\n * focus-or-lighttouch rule described on the mixin.\n */\n _shouldHandleWheel(): boolean {\n const anyThis = this as unknown as { disabled?: boolean };\n if (anyThis.disabled)\n return false;\n if (this.lighttouch && this._isHovering)\n return true;\n if (this.matches?.(`:focus, :focus-within`))\n return true;\n const root = this.renderRoot;\n if (root && (root as ShadowRoot).activeElement !== null)\n return true;\n return false;\n }\n\n _onWheel = (event: WheelEvent): void => {\n if (!this._shouldHandleWheel())\n return;\n event.preventDefault();\n // Some browsers (notably when the user holds Shift) send `deltaY=0`\n // and route the scroll into `deltaX` instead. Use whichever axis\n // actually moved so the direction sign matches the user's intent.\n const delta = event.deltaY !== 0 ? event.deltaY : event.deltaX;\n const direction: WheelDirection = delta < 0 ? 1 : -1;\n (this as unknown as WheelNudgeConsumer)._applyWheelDelta(direction, event);\n };\n }\n return WheelNudgeMixinClass as unknown as WheelNudgeMixinResult<T>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DA,SAAgB,gBAAmD,YAAyC;CAC1G,MAAM,6BAA6B,WAAW;;;GAO/B,KAAA,aAAA;GAMC,KAAA,cAAA;GAiBgB,KAAA,wBAAA;IAC5B,KAAK,cAAc;GACrB;GAE8B,KAAA,wBAAA;IAC5B,KAAK,cAAc;GACrB;GAqBY,KAAA,YAAA,UAA4B;IACtC,IAAI,CAAC,KAAK,mBAAmB,GAC3B;IACF,MAAM,eAAe;IAKrB,MAAM,aADQ,MAAM,WAAW,IAAI,MAAM,SAAS,MAAM,UACd,IAAI,IAAI;IAClD,KAAwC,iBAAiB,WAAW,KAAK;GAC3E;;EApDA,oBAAmC;GACjC,MAAM,kBAAkB;GACxB,KAAK,iBAAiB,gBAAgB,KAAK,eAAe;GAC1D,KAAK,iBAAiB,gBAAgB,KAAK,eAAe;GAC1D,KAAK,iBAAiB,SAAS,KAAK,UAAU,EAAE,SAAS,MAAM,CAAC;EAClE;EAEA,uBAAsC;GACpC,MAAM,qBAAqB;GAC3B,KAAK,oBAAoB,gBAAgB,KAAK,eAAe;GAC7D,KAAK,oBAAoB,gBAAgB,KAAK,eAAe;GAC7D,KAAK,oBAAoB,SAAS,KAAK,QAAQ;GAC/C,KAAK,cAAc;EACrB;;;;;;EAeA,qBAA8B;GAE5B,IAAI,KAAQ,UACV,OAAO;GACT,IAAI,KAAK,cAAc,KAAK,aAC1B,OAAO;GACT,IAAI,KAAK,UAAU,uBAAuB,GACxC,OAAO;GACT,MAAM,OAAO,KAAK;GAClB,IAAI,QAAS,KAAoB,kBAAkB,MACjD,OAAO;GACT,OAAO;EACT;CAaF;CA9DG,WAAA,CAAA,SAAS;EAAE,MAAM;EAAS,SAAS;CAAK,CAAC,CAAA,GAAA,qBAAA,WAAA,cAAA,KAAA,CAAA;CA+D5C,OAAO;AACT"}
@@ -16,8 +16,8 @@ type WheelDirection = 1 | -1;
16
16
  * (e.g. editable-number rejects while the user is typing).
17
17
  */
18
18
  interface WheelNudgeConsumer {
19
- _applyWheelDelta: (direction: WheelDirection, event: WheelEvent) => void;
20
- _shouldHandleWheel: () => boolean;
19
+ _applyWheelDelta(direction: WheelDirection, event: WheelEvent): void;
20
+ _shouldHandleWheel(): boolean;
21
21
  }
22
22
  /**
23
23
  * Internal: the surface a {@link WheelNudgeMixin}-decorated class exposes to
@@ -26,4 +26,4 @@ interface WheelNudgeConsumer {
26
26
  type WheelNudgeConsumerType<TBase> = TBase & WheelNudgeConsumer;
27
27
  //#endregion
28
28
  export { WheelNudgeConsumerType as n, WheelDirection as t };
29
- //# sourceMappingURL=wheel-nudge-DGrNzWuE.d.ts.map
29
+ //# sourceMappingURL=wheel-nudge-DgMTRYlh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wheel-nudge-DgMTRYlh.d.ts","names":[],"sources":["../src/mixins/wheel-nudge.ts"],"mappings":";;;;;;KASY;;;;;;;;;;;UAYK;EACf,iBAAiB,WAAW,gBAAgB,OAAO;EACnD;;;;;;KAOU,uBAAuB,SAAS,QAAQ"}
package/dist/xy-pad.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DGrNzWuE.js";
1
+ import { n as WheelNudgeConsumerType, t as WheelDirection } from "./wheel-nudge-DgMTRYlh.js";
2
2
  import { LitElement, PropertyValues, html } from "lit";
3
3
  //#region src/xy-pad/xy-pad.d.ts
4
4
  declare const XyPad_base: (new (...args: any[]) => WheelNudgeConsumerType<LitElement>) & typeof LitElement;
@@ -39,6 +39,7 @@ This directory contains documentation for each component and some architectural
39
39
  - [swipe](./swipe.md)
40
40
  - [tabs](./tabs.md)
41
41
  - [timeline](./timeline.md)
42
+ - [toolbar](./toolbar.md)
42
43
  - [transitory-label](./transitory-label.md)
43
44
  - [tree](./tree.md)
44
45
  - [util](./util.md)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ixfx/components",
3
- "version": "0.6.0",
4
- "generated": "2026-08-29T11:13:25.291Z",
3
+ "version": "0.6.1",
4
+ "generated": "2026-08-29T21:26:06.851Z",
5
5
  "components": [
6
6
  {
7
7
  "name": "ac-text",
@@ -178,6 +178,11 @@
178
178
  "summary": "A canvas-based timeline component with tracks, events, zoom/pan, and vertical track resizing. Suitable for visualizing time-series data, event logs, or scheduling.",
179
179
  "path": "docs-user/timeline.md"
180
180
  },
181
+ {
182
+ "name": "toolbar",
183
+ "summary": "Two components for building toolbars:",
184
+ "path": "docs-user/toolbar.md"
185
+ },
181
186
  {
182
187
  "name": "transitory-label",
183
188
  "summary": "An inline text label that animates between values instead of changing instantly. Displays as `inline-block` and inherits text styling from its parent.",
@@ -46,6 +46,7 @@ import '@ixfx/components/data-grid';
46
46
  - [swipe](docs-user/swipe.md): A touch-friendly swipe/nudge component. User taps and drags to generate a value in range [-1, 1]. Value is emitted only on pointer release.
47
47
  - [tabs](docs-user/tabs.md): A complete tabbed interface system using several coordinated components:
48
48
  - [timeline](docs-user/timeline.md): A canvas-based timeline component with tracks, events, zoom/pan, and vertical track resizing. Suitable for visualizing time-series data, event logs, or scheduling.
49
+ - [toolbar](docs-user/toolbar.md): Two components for building toolbars:
49
50
  - [transitory-label](docs-user/transitory-label.md): An inline text label that animates between values instead of changing instantly. Displays as `inline-block` and inherits text styling from its parent.
50
51
  - [tree](docs-user/tree.md): Three components share a common `TreeComponent` interface: **`ixfx-tree-list`**, **`ixfx-miller-list`**, and **`ixfx-crumb-navigation`**. This document describes the shared API, plus component-specifi
51
52
  - [util](docs-user/util.md): A tooltip component that renders a value with optional icon and formatted number display. Uses native render root (no shadow DOM).
@@ -0,0 +1,135 @@
1
+ # Toolbar components
2
+
3
+ Two components for building toolbars:
4
+
5
+ - **`ixfx-toolbar`** — a responsive toolbar container with overflow handling
6
+ - **`ixfx-toolbar-group`** — a labelled grouping container for toolbar items
7
+
8
+ ---
9
+
10
+ ## `ixfx-toolbar`
11
+
12
+ A responsive toolbar container that handles overflow by moving items to a popover. Supports horizontal and vertical orientations.
13
+
14
+ ```html
15
+ <ixfx-toolbar>
16
+ <ixfx-toolbar-group label="Clipboard">
17
+ <ixfx-button icon="copy">Copy</ixfx-button>
18
+ <ixfx-button icon="paste">Paste</ixfx-button>
19
+ </ixfx-toolbar-group>
20
+ <ixfx-toolbar-group label="Font">
21
+ <ixfx-button>B</ixfx-button>
22
+ <ixfx-button>I</ixfx-button>
23
+ </ixfx-toolbar-group>
24
+ </ixfx-toolbar>
25
+ ```
26
+
27
+ ### Properties / attributes
28
+
29
+ | Attribute / Property | Type | Default | Description |
30
+ |---------------------|---------------------------------------------------|----------------|------------------------------------------------------|
31
+ | `orientation` | `'horizontal'` \| `'vertical-left'` \| `'vertical-right'` | `'horizontal'` | Layout direction. `vertical-left` flips text upward. |
32
+ | `layout` | `'one-line'` \| `'wrap'` | `'one-line'` | Whether items wrap or overflow |
33
+ | `vertical-writing` | `'auto'` \| `'up'` \| `'down'` \| `'none'` | `'auto'` | Writing mode for vertical orientations |
34
+ | `show-group-labels` | boolean | `false` | Show labels as rows above group content |
35
+ | `invisible-groups` | boolean | `false` | Hide group borders and backgrounds |
36
+
37
+ ### Slots
38
+
39
+ | Slot | Description |
40
+ |-------------|------------------------------------------|
41
+ | default | Toolbar items (buttons, groups, etc.) |
42
+ | `overflow` | Items in the overflow popover |
43
+
44
+ ### CSS custom properties
45
+
46
+ | Property | Default | Description |
47
+ |----------|---------|--------------------------------------|
48
+ | `--toolbar-gap` | `var(--space-s)` | Gap between toolbar items |
49
+ | `--toolbar-bg` | `var(--surface-2)` | Toolbar background |
50
+ | `--toolbar-padding` | `var(--space-s)` | Toolbar padding |
51
+ | `--toolbar-border` | `var(--border-subtle)` | Toolbar border |
52
+
53
+ ### Writing mode
54
+
55
+ For vertical toolbars, `vertical-writing` controls how text is displayed:
56
+
57
+ - `'auto'` — `vertical-right` uses `vertical-lr`, `vertical-left` uses `vertical-rl`
58
+ - `'up'` — Forces `vertical-rl` (text runs upward)
59
+ - `'down'` — Forces `vertical-lr` (text runs downward)
60
+ - `'none'` — Forces `horizontal-tb` (no vertical writing)
61
+
62
+ ### Overflow handling
63
+
64
+ When `layout="one-line"` and items exceed available space, excess items are moved to an overflow popover. The popover is positioned using CSS Anchor Positioning relative to the overflow button.
65
+
66
+ ```html
67
+ <ixfx-toolbar layout="one-line">
68
+ <!-- Items that don't fit will be moved to overflow -->
69
+ <ixfx-button>Item 1</ixfx-button>
70
+ <ixfx-button>Item 2</ixfx-button>
71
+ <!-- ... -->
72
+ </ixfx-toolbar>
73
+ ```
74
+
75
+ ---
76
+
77
+ ## `ixfx-toolbar-group`
78
+
79
+ A grouping container for toolbar items. Groups can have a label and support grow behavior.
80
+
81
+ ```html
82
+ <ixfx-toolbar-group label="Font">
83
+ <ixfx-button>B</ixfx-button>
84
+ <ixfx-button>I</ixfx-button>
85
+ </ixfx-toolbar-group>
86
+
87
+ <ixfx-toolbar-group grow>
88
+ <!-- This group takes up remaining space -->
89
+ </ixfx-toolbar-group>
90
+ ```
91
+
92
+ ### Properties / attributes
93
+
94
+ | Attribute / Property | Type | Default | Description |
95
+ |---------------------|---------|---------|------------------------------------------|
96
+ | `label` | string | `''` | Label text displayed above content |
97
+ | `grow` | boolean | `false` | Group grows to fill remaining space |
98
+
99
+ ### CSS custom properties
100
+
101
+ | Property | Default | Description |
102
+ |-----------------------------------|-------------|----------------------------------------------|
103
+ | `--toolbar-group-justify-content` | `flex-start` | Horizontal alignment of group contents |
104
+ | `--toolbar-group-align-items` | `center` | Vertical alignment of group contents |
105
+
106
+ ```html
107
+ <!-- Right-align items within a group -->
108
+ <ixfx-toolbar-group style="--toolbar-group-justify-content: flex-end;">
109
+ <ixfx-button>Action</ixfx-button>
110
+ </ixfx-toolbar-group>
111
+ ```
112
+
113
+ ---
114
+
115
+ ## Demos
116
+
117
+ See `demo/toolbar.html` for complete examples including:
118
+
119
+ - Word-style horizontal toolbar with font selection, formatting buttons, and paragraph controls
120
+ - Chrome-style toolbar with a growable search input
121
+ - Vertical toolbars with different writing modes
122
+ - Footer toolbar with far-right justified group
123
+ - Toolbar with group labels displayed as rows
124
+
125
+ ---
126
+
127
+ ## TypeScript types
128
+
129
+ ```ts
130
+ import type {
131
+ ToolbarOrientation, // 'horizontal' | 'vertical-left' | 'vertical-right'
132
+ ToolbarLayout, // 'one-line' | 'wrap'
133
+ ToolbarVerticalWriting // 'auto' | 'up' | 'down' | 'none'
134
+ } from 'ixfxfun-components';
135
+ ```
package/llms.txt CHANGED
@@ -46,6 +46,7 @@ import '@ixfx/components/data-grid';
46
46
  - [swipe](docs-user/swipe.md): A touch-friendly swipe/nudge component. User taps and drags to generate a value in range [-1, 1]. Value is emitted only on pointer release.
47
47
  - [tabs](docs-user/tabs.md): A complete tabbed interface system using several coordinated components:
48
48
  - [timeline](docs-user/timeline.md): A canvas-based timeline component with tracks, events, zoom/pan, and vertical track resizing. Suitable for visualizing time-series data, event logs, or scheduling.
49
+ - [toolbar](docs-user/toolbar.md): Two components for building toolbars:
49
50
  - [transitory-label](docs-user/transitory-label.md): An inline text label that animates between values instead of changing instantly. Displays as `inline-block` and inherits text styling from its parent.
50
51
  - [tree](docs-user/tree.md): Three components share a common `TreeComponent` interface: **`ixfx-tree-list`**, **`ixfx-miller-list`**, and **`ixfx-crumb-navigation`**. This document describes the shared API, plus component-specifi
51
52
  - [util](docs-user/util.md): A tooltip component that renders a value with optional icon and formatted number display. Uses native render root (no shadow DOM).
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ixfx/components",
3
3
  "type": "module",
4
- "version": "0.6.0",
4
+ "version": "0.6.1",
5
5
  "packageManager": "pnpm@10.0.0",
6
6
  "description": "Web components for ixfx — Lit-based UI toolkit",
7
7
  "author": "Clint Heyer",
@@ -1 +0,0 @@
1
- {"version":3,"file":"wheel-nudge-DGrNzWuE.d.ts","names":[],"sources":["../src/mixins/wheel-nudge.ts"],"mappings":";;;;;;KASY;;;;;;;;;;;UAYK;EACf,mBAAmB,WAAW,gBAAgB,OAAO;EACrD;;;;;;KAOU,uBAAuB,SAAS,QAAQ"}