luxen-ui 0.1.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.
Files changed (201) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -0
  3. package/dist/css/elements/avatar.css +20 -0
  4. package/dist/css/elements/badge.css +159 -0
  5. package/dist/css/elements/button.css +171 -0
  6. package/dist/css/elements/close-button/circle.css +66 -0
  7. package/dist/css/elements/close-button/ring.css +71 -0
  8. package/dist/css/elements/close-button/square.css +70 -0
  9. package/dist/css/elements/disclosure.css +137 -0
  10. package/dist/css/elements/divider.css +75 -0
  11. package/dist/css/elements/input-otp.css +164 -0
  12. package/dist/css/elements/input-stepper/default.css +245 -0
  13. package/dist/css/elements/input-stepper/rounded.css +238 -0
  14. package/dist/css/elements/kbd.css +21 -0
  15. package/dist/css/elements/progress.css +114 -0
  16. package/dist/css/elements/select.css +71 -0
  17. package/dist/css/elements/skeleton.css +89 -0
  18. package/dist/css/elements/tabs/enclosed.css +148 -0
  19. package/dist/css/elements/tabs/line.css +138 -0
  20. package/dist/css/elements/toast.css +260 -0
  21. package/dist/css/index.css +885 -0
  22. package/dist/custom-elements.json +14424 -0
  23. package/dist/define.d.ts +9 -0
  24. package/dist/define.d.ts.map +1 -0
  25. package/dist/define.js +16 -0
  26. package/dist/elements/avatar/avatar.css +128 -0
  27. package/dist/elements/avatar/avatar.d.ts +21 -0
  28. package/dist/elements/avatar/avatar.d.ts.map +1 -0
  29. package/dist/elements/avatar/avatar.js +106 -0
  30. package/dist/elements/avatar/index.d.ts +8 -0
  31. package/dist/elements/avatar/index.d.ts.map +1 -0
  32. package/dist/elements/avatar/index.js +4 -0
  33. package/dist/elements/badge/badge.d.ts +17 -0
  34. package/dist/elements/badge/badge.d.ts.map +1 -0
  35. package/dist/elements/badge/badge.js +34 -0
  36. package/dist/elements/badge/index.d.ts +8 -0
  37. package/dist/elements/badge/index.d.ts.map +1 -0
  38. package/dist/elements/badge/index.js +4 -0
  39. package/dist/elements/carousel/carousel.css +205 -0
  40. package/dist/elements/carousel/carousel.d.ts +148 -0
  41. package/dist/elements/carousel/carousel.d.ts.map +1 -0
  42. package/dist/elements/carousel/carousel.js +473 -0
  43. package/dist/elements/carousel/index.d.ts +8 -0
  44. package/dist/elements/carousel/index.d.ts.map +1 -0
  45. package/dist/elements/carousel/index.js +4 -0
  46. package/dist/elements/carousel-item/carousel-item.css +11 -0
  47. package/dist/elements/carousel-item/carousel-item.d.ts +13 -0
  48. package/dist/elements/carousel-item/carousel-item.d.ts.map +1 -0
  49. package/dist/elements/carousel-item/carousel-item.js +20 -0
  50. package/dist/elements/carousel-item/index.d.ts +8 -0
  51. package/dist/elements/carousel-item/index.d.ts.map +1 -0
  52. package/dist/elements/carousel-item/index.js +4 -0
  53. package/dist/elements/dialog/dialog.css +92 -0
  54. package/dist/elements/dialog/dialog.d.ts +56 -0
  55. package/dist/elements/dialog/dialog.d.ts.map +1 -0
  56. package/dist/elements/dialog/dialog.js +204 -0
  57. package/dist/elements/dialog/dialog.styles.d.ts +8 -0
  58. package/dist/elements/dialog/dialog.styles.d.ts.map +1 -0
  59. package/dist/elements/dialog/dialog.styles.js +8 -0
  60. package/dist/elements/dialog/index.d.ts +8 -0
  61. package/dist/elements/dialog/index.d.ts.map +1 -0
  62. package/dist/elements/dialog/index.js +4 -0
  63. package/dist/elements/divider/divider.d.ts +23 -0
  64. package/dist/elements/divider/divider.d.ts.map +1 -0
  65. package/dist/elements/divider/divider.js +49 -0
  66. package/dist/elements/divider/index.d.ts +8 -0
  67. package/dist/elements/divider/index.d.ts.map +1 -0
  68. package/dist/elements/divider/index.js +4 -0
  69. package/dist/elements/drawer/drawer.css +66 -0
  70. package/dist/elements/drawer/drawer.d.ts +34 -0
  71. package/dist/elements/drawer/drawer.d.ts.map +1 -0
  72. package/dist/elements/drawer/drawer.js +46 -0
  73. package/dist/elements/drawer/index.d.ts +8 -0
  74. package/dist/elements/drawer/index.d.ts.map +1 -0
  75. package/dist/elements/drawer/index.js +4 -0
  76. package/dist/elements/dropdown/dropdown.css +31 -0
  77. package/dist/elements/dropdown/dropdown.d.ts +64 -0
  78. package/dist/elements/dropdown/dropdown.d.ts.map +1 -0
  79. package/dist/elements/dropdown/dropdown.js +322 -0
  80. package/dist/elements/dropdown/index.d.ts +8 -0
  81. package/dist/elements/dropdown/index.d.ts.map +1 -0
  82. package/dist/elements/dropdown/index.js +4 -0
  83. package/dist/elements/dropdown-item/dropdown-item.css +51 -0
  84. package/dist/elements/dropdown-item/dropdown-item.d.ts +25 -0
  85. package/dist/elements/dropdown-item/dropdown-item.d.ts.map +1 -0
  86. package/dist/elements/dropdown-item/dropdown-item.js +110 -0
  87. package/dist/elements/dropdown-item/index.d.ts +8 -0
  88. package/dist/elements/dropdown-item/index.d.ts.map +1 -0
  89. package/dist/elements/dropdown-item/index.js +4 -0
  90. package/dist/elements/icon/icon.css +10 -0
  91. package/dist/elements/icon/icon.d.ts +19 -0
  92. package/dist/elements/icon/icon.d.ts.map +1 -0
  93. package/dist/elements/icon/icon.js +53 -0
  94. package/dist/elements/icon/index.d.ts +8 -0
  95. package/dist/elements/icon/index.d.ts.map +1 -0
  96. package/dist/elements/icon/index.js +4 -0
  97. package/dist/elements/input-otp/index.d.ts +8 -0
  98. package/dist/elements/input-otp/index.d.ts.map +1 -0
  99. package/dist/elements/input-otp/index.js +4 -0
  100. package/dist/elements/input-otp/input-otp.d.ts +31 -0
  101. package/dist/elements/input-otp/input-otp.d.ts.map +1 -0
  102. package/dist/elements/input-otp/input-otp.js +139 -0
  103. package/dist/elements/input-stepper/index.d.ts +8 -0
  104. package/dist/elements/input-stepper/index.d.ts.map +1 -0
  105. package/dist/elements/input-stepper/index.js +4 -0
  106. package/dist/elements/input-stepper/input-stepper.d.ts +63 -0
  107. package/dist/elements/input-stepper/input-stepper.d.ts.map +1 -0
  108. package/dist/elements/input-stepper/input-stepper.js +249 -0
  109. package/dist/elements/popover/index.d.ts +8 -0
  110. package/dist/elements/popover/index.d.ts.map +1 -0
  111. package/dist/elements/popover/index.js +4 -0
  112. package/dist/elements/popover/popover.css +61 -0
  113. package/dist/elements/popover/popover.d.ts +62 -0
  114. package/dist/elements/popover/popover.d.ts.map +1 -0
  115. package/dist/elements/popover/popover.js +244 -0
  116. package/dist/elements/rating/index.d.ts +8 -0
  117. package/dist/elements/rating/index.d.ts.map +1 -0
  118. package/dist/elements/rating/index.js +4 -0
  119. package/dist/elements/rating/rating.css +102 -0
  120. package/dist/elements/rating/rating.d.ts +38 -0
  121. package/dist/elements/rating/rating.d.ts.map +1 -0
  122. package/dist/elements/rating/rating.js +193 -0
  123. package/dist/elements/skeleton/index.d.ts +8 -0
  124. package/dist/elements/skeleton/index.d.ts.map +1 -0
  125. package/dist/elements/skeleton/index.js +4 -0
  126. package/dist/elements/skeleton/skeleton.d.ts +12 -0
  127. package/dist/elements/skeleton/skeleton.d.ts.map +1 -0
  128. package/dist/elements/skeleton/skeleton.js +13 -0
  129. package/dist/elements/spinner/index.d.ts +8 -0
  130. package/dist/elements/spinner/index.d.ts.map +1 -0
  131. package/dist/elements/spinner/index.js +4 -0
  132. package/dist/elements/spinner/spinner.css +28 -0
  133. package/dist/elements/spinner/spinner.d.ts +16 -0
  134. package/dist/elements/spinner/spinner.d.ts.map +1 -0
  135. package/dist/elements/spinner/spinner.js +37 -0
  136. package/dist/elements/tabs/index.d.ts +8 -0
  137. package/dist/elements/tabs/index.d.ts.map +1 -0
  138. package/dist/elements/tabs/index.js +4 -0
  139. package/dist/elements/tabs/tabs.d.ts +48 -0
  140. package/dist/elements/tabs/tabs.d.ts.map +1 -0
  141. package/dist/elements/tabs/tabs.js +210 -0
  142. package/dist/elements/toast/index.d.ts +9 -0
  143. package/dist/elements/toast/index.d.ts.map +1 -0
  144. package/dist/elements/toast/index.js +5 -0
  145. package/dist/elements/toast/toast.d.ts +72 -0
  146. package/dist/elements/toast/toast.d.ts.map +1 -0
  147. package/dist/elements/toast/toast.js +375 -0
  148. package/dist/elements/tooltip/index.d.ts +8 -0
  149. package/dist/elements/tooltip/index.d.ts.map +1 -0
  150. package/dist/elements/tooltip/index.js +4 -0
  151. package/dist/elements/tooltip/tooltip.css +37 -0
  152. package/dist/elements/tooltip/tooltip.d.ts +59 -0
  153. package/dist/elements/tooltip/tooltip.d.ts.map +1 -0
  154. package/dist/elements/tooltip/tooltip.js +231 -0
  155. package/dist/elements/tree/index.d.ts +8 -0
  156. package/dist/elements/tree/index.d.ts.map +1 -0
  157. package/dist/elements/tree/index.js +4 -0
  158. package/dist/elements/tree/tree.css +26 -0
  159. package/dist/elements/tree/tree.d.ts +76 -0
  160. package/dist/elements/tree/tree.d.ts.map +1 -0
  161. package/dist/elements/tree/tree.js +432 -0
  162. package/dist/elements/tree-item/index.d.ts +8 -0
  163. package/dist/elements/tree-item/index.d.ts.map +1 -0
  164. package/dist/elements/tree-item/index.js +4 -0
  165. package/dist/elements/tree-item/tree-item.css +172 -0
  166. package/dist/elements/tree-item/tree-item.d.ts +74 -0
  167. package/dist/elements/tree-item/tree-item.d.ts.map +1 -0
  168. package/dist/elements/tree-item/tree-item.js +301 -0
  169. package/dist/index.d.ts +6 -0
  170. package/dist/index.d.ts.map +1 -0
  171. package/dist/index.js +4 -0
  172. package/dist/registry.d.ts +22 -0
  173. package/dist/registry.d.ts.map +1 -0
  174. package/dist/registry.js +33 -0
  175. package/dist/shared/controllers/popover.d.ts +44 -0
  176. package/dist/shared/controllers/popover.d.ts.map +1 -0
  177. package/dist/shared/controllers/popover.js +359 -0
  178. package/dist/shared/luxen-element.d.ts +20 -0
  179. package/dist/shared/luxen-element.d.ts.map +1 -0
  180. package/dist/shared/luxen-element.js +23 -0
  181. package/dist/shared/luxen-form-associated-element.d.ts +49 -0
  182. package/dist/shared/luxen-form-associated-element.d.ts.map +1 -0
  183. package/dist/shared/luxen-form-associated-element.js +123 -0
  184. package/dist/shared/styles/host.css +13 -0
  185. package/dist/shared/styles/host.styles.d.ts +9 -0
  186. package/dist/shared/styles/host.styles.d.ts.map +1 -0
  187. package/dist/shared/styles/host.styles.js +9 -0
  188. package/dist/skills/luxen-ui/SKILL.md +82 -0
  189. package/dist/skills/luxen-ui/references/avatar.md +259 -0
  190. package/dist/skills/luxen-ui/references/badge.md +289 -0
  191. package/dist/skills/luxen-ui/references/button.md +309 -0
  192. package/dist/skills/luxen-ui/references/close-button.md +104 -0
  193. package/dist/skills/luxen-ui/references/dialog.md +435 -0
  194. package/dist/skills/luxen-ui/references/drawer.md +400 -0
  195. package/dist/skills/luxen-ui/references/progress.md +133 -0
  196. package/dist/skills/luxen-ui/references/select.md +100 -0
  197. package/dist/skills/luxen-ui/references/toast.md +396 -0
  198. package/dist/skills/luxen-ui/references/tree.md +359 -0
  199. package/package.json +116 -0
  200. package/postcss-plugin-prefix.js +63 -0
  201. package/vite-plugin.ts +29 -0
@@ -0,0 +1,8 @@
1
+ import { LuxenTooltip } from './tooltip';
2
+ export * from './tooltip';
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'l-tooltip': LuxenTooltip;
6
+ }
7
+ }
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/html/elements/tooltip/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,cAAc,WAAW,CAAC;AAG1B,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,YAAY,CAAC;KAC3B;CACF"}
@@ -0,0 +1,4 @@
1
+ import { define } from '../../define';
2
+ import { LuxenTooltip } from './tooltip';
3
+ export * from './tooltip';
4
+ define('tooltip', LuxenTooltip);
@@ -0,0 +1,37 @@
1
+ :host {
2
+ --background: var(--l-color-bg-fill-brand, light-dark(#1f2937, #f9fafb));
3
+ --color: light-dark(#fff, #111827);
4
+ --radius: 4px;
5
+ --max-width: 180px;
6
+ --arrow-size: 6px;
7
+ --show-duration: 150ms;
8
+ --hide-duration: 150ms;
9
+
10
+ display: contents;
11
+ }
12
+
13
+ [popover] {
14
+ inset: unset;
15
+ overflow: visible;
16
+ box-sizing: border-box;
17
+ width: max-content;
18
+ max-width: var(--max-width);
19
+ padding: 4px 8px;
20
+ border: 0;
21
+ border-radius: var(--radius);
22
+ background: var(--background);
23
+ color: var(--color);
24
+ font-size: 0.8125rem;
25
+ line-height: 1.4;
26
+ filter: drop-shadow(0 1px 2px rgb(0 0 0 / 16%));
27
+ pointer-events: none;
28
+ }
29
+
30
+ i {
31
+ position: absolute;
32
+ display: block;
33
+ width: var(--arrow-size);
34
+ height: var(--arrow-size);
35
+ background: var(--background);
36
+ transform: rotate(45deg);
37
+ }
@@ -0,0 +1,59 @@
1
+ import { type PropertyValues } from 'lit';
2
+ import { LuxenElement } from '../../shared/luxen-element';
3
+ import type { Placement } from '@floating-ui/dom';
4
+ /**
5
+ * @summary A tooltip that displays contextual text on hover or focus.
6
+ * @customElement l-tooltip
7
+ *
8
+ * @slot - Tooltip content (text or rich HTML).
9
+ *
10
+ * @csspart body - The tooltip popover container.
11
+ * @csspart arrow - The directional arrow element.
12
+ *
13
+ * @cssproperty --background - Background color. Default: dark in light mode, light in dark mode.
14
+ * @cssproperty --color - Text color.
15
+ * @cssproperty --radius - Border radius. Default `4px`.
16
+ * @cssproperty --max-width - Maximum width. Default `180px`.
17
+ * @cssproperty --arrow-size - Arrow size. Default `6px`.
18
+ * @cssproperty --show-duration - Show animation duration. Default `150ms`.
19
+ * @cssproperty --hide-duration - Hide animation duration. Default `150ms`.
20
+ */
21
+ export declare class LuxenTooltip extends LuxenElement {
22
+ static styles: import("lit").CSSResult[];
23
+ private _tooltipId;
24
+ private _floating;
25
+ /** The HTML id of the element triggering the tooltip. */
26
+ accessor for: string;
27
+ /** The preferred placement of the tooltip. */
28
+ accessor placement: Placement;
29
+ /** The distance in pixels from the target element. */
30
+ accessor distance: number;
31
+ /** Whether or not the tooltip is visible. */
32
+ accessor open: boolean;
33
+ /** Hide the directional arrow. */
34
+ accessor withoutArrow: boolean;
35
+ /** Space-separated list of trigger modes: `hover`, `focus`, `click`, `manual`. */
36
+ accessor trigger: string;
37
+ private _hasTrigger;
38
+ private get _trigger();
39
+ private get _popover();
40
+ private get _arrowEl();
41
+ private _getDuration;
42
+ connectedCallback(): void;
43
+ disconnectedCallback(): void;
44
+ updated(changed: PropertyValues<this>): void;
45
+ show(): void;
46
+ hide(): void;
47
+ toggle(): void;
48
+ private _handleOpenChange;
49
+ private _onPointerEnter;
50
+ private _onPointerLeave;
51
+ private _onFocusIn;
52
+ private _onFocusOut;
53
+ private _onClick;
54
+ private _onKeyDown;
55
+ private _addTriggerListeners;
56
+ private _removeTriggerListeners;
57
+ render(): import("lit").TemplateResult<1>;
58
+ }
59
+ //# sourceMappingURL=tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../src/html/elements/tooltip/tooltip.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAQlD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAgB,MAAM,4BAAwB;IAE9C,OAAO,CAAC,UAAU,CAAuB;IAEzC,OAAO,CAAC,SAAS,CAId;IAEH,yDAAyD;IAEzD,QAAQ,CAAC,GAAG,SAAM;IAElB,8CAA8C;IAE9C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAS;IAEtC,sDAAsD;IAEtD,QAAQ,CAAC,QAAQ,SAAK;IAEtB,6CAA6C;IAE7C,QAAQ,CAAC,IAAI,UAAS;IAEtB,kCAAkC;IAElC,QAAQ,CAAC,YAAY,UAAS;IAE9B,kFAAkF;IAElF,QAAQ,CAAC,OAAO,SAAiB;IAEjC,OAAO,CAAC,WAAW;IAInB,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,CAAC,YAAY;IAKX,iBAAiB;IAKjB,oBAAoB;IAKpB,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAU9C,IAAI;IAIJ,IAAI;IAIJ,MAAM;YAIQ,iBAAiB;IAwB/B,OAAO,CAAC,eAAe,CAIrB;IAEF,OAAO,CAAC,eAAe,CAGrB;IAEF,OAAO,CAAC,UAAU,CAEhB;IACF,OAAO,CAAC,WAAW,CAEjB;IACF,OAAO,CAAC,QAAQ,CAEd;IAEF,OAAO,CAAC,UAAU,CAKhB;IAEF,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,uBAAuB;IAOtB,MAAM;CAoBhB"}
@@ -0,0 +1,231 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
+ };
12
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
13
+ if (kind === "m") throw new TypeError("Private method is not writable");
14
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
15
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
16
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
17
+ };
18
+ var _LuxenTooltip_for_accessor_storage, _LuxenTooltip_placement_accessor_storage, _LuxenTooltip_distance_accessor_storage, _LuxenTooltip_open_accessor_storage, _LuxenTooltip_withoutArrow_accessor_storage, _LuxenTooltip_trigger_accessor_storage;
19
+ import { html, nothing, unsafeCSS } from 'lit';
20
+ import { LuxenElement } from '../../shared/luxen-element';
21
+ import { property } from 'lit/decorators.js';
22
+ import { PopoverController } from '../../shared/controllers/popover';
23
+ import { uniqueId } from '../../registry';
24
+ import hostStyles from '../../shared/styles/host.styles';
25
+ import rawStyles from './tooltip.css?inline';
26
+ const styles = unsafeCSS(rawStyles);
27
+ /**
28
+ * @summary A tooltip that displays contextual text on hover or focus.
29
+ * @customElement l-tooltip
30
+ *
31
+ * @slot - Tooltip content (text or rich HTML).
32
+ *
33
+ * @csspart body - The tooltip popover container.
34
+ * @csspart arrow - The directional arrow element.
35
+ *
36
+ * @cssproperty --background - Background color. Default: dark in light mode, light in dark mode.
37
+ * @cssproperty --color - Text color.
38
+ * @cssproperty --radius - Border radius. Default `4px`.
39
+ * @cssproperty --max-width - Maximum width. Default `180px`.
40
+ * @cssproperty --arrow-size - Arrow size. Default `6px`.
41
+ * @cssproperty --show-duration - Show animation duration. Default `150ms`.
42
+ * @cssproperty --hide-duration - Hide animation duration. Default `150ms`.
43
+ */
44
+ export class LuxenTooltip extends LuxenElement {
45
+ constructor() {
46
+ super(...arguments);
47
+ this._tooltipId = uniqueId('tooltip');
48
+ this._floating = new PopoverController(this, {
49
+ getTriggerElement: () => this._trigger,
50
+ getFloatingElement: () => this._popover,
51
+ getArrowElement: () => this._arrowEl,
52
+ });
53
+ _LuxenTooltip_for_accessor_storage.set(this, '');
54
+ _LuxenTooltip_placement_accessor_storage.set(this, 'top');
55
+ _LuxenTooltip_distance_accessor_storage.set(this, 8);
56
+ _LuxenTooltip_open_accessor_storage.set(this, false);
57
+ _LuxenTooltip_withoutArrow_accessor_storage.set(this, false);
58
+ _LuxenTooltip_trigger_accessor_storage.set(this, 'hover focus');
59
+ // --- Trigger event handlers ---
60
+ this._onPointerEnter = () => {
61
+ if (!this._hasTrigger('hover'))
62
+ return;
63
+ this._floating.cleanupSafePolygon();
64
+ this.show();
65
+ };
66
+ this._onPointerLeave = (e) => {
67
+ if (!this._hasTrigger('hover') || !this.open)
68
+ return;
69
+ this._floating.handlePointerLeave(e, () => this.hide());
70
+ };
71
+ this._onFocusIn = () => {
72
+ if (this._hasTrigger('focus'))
73
+ this.show();
74
+ };
75
+ this._onFocusOut = () => {
76
+ if (this._hasTrigger('focus'))
77
+ this.hide();
78
+ };
79
+ this._onClick = () => {
80
+ if (this._hasTrigger('click'))
81
+ this.toggle();
82
+ };
83
+ this._onKeyDown = (e) => {
84
+ if (this.open && e.key === 'Escape') {
85
+ e.stopPropagation();
86
+ this.hide();
87
+ }
88
+ };
89
+ }
90
+ /** The HTML id of the element triggering the tooltip. */
91
+ get for() { return __classPrivateFieldGet(this, _LuxenTooltip_for_accessor_storage, "f"); }
92
+ set for(value) { __classPrivateFieldSet(this, _LuxenTooltip_for_accessor_storage, value, "f"); }
93
+ /** The preferred placement of the tooltip. */
94
+ get placement() { return __classPrivateFieldGet(this, _LuxenTooltip_placement_accessor_storage, "f"); }
95
+ set placement(value) { __classPrivateFieldSet(this, _LuxenTooltip_placement_accessor_storage, value, "f"); }
96
+ /** The distance in pixels from the target element. */
97
+ get distance() { return __classPrivateFieldGet(this, _LuxenTooltip_distance_accessor_storage, "f"); }
98
+ set distance(value) { __classPrivateFieldSet(this, _LuxenTooltip_distance_accessor_storage, value, "f"); }
99
+ /** Whether or not the tooltip is visible. */
100
+ get open() { return __classPrivateFieldGet(this, _LuxenTooltip_open_accessor_storage, "f"); }
101
+ set open(value) { __classPrivateFieldSet(this, _LuxenTooltip_open_accessor_storage, value, "f"); }
102
+ /** Hide the directional arrow. */
103
+ get withoutArrow() { return __classPrivateFieldGet(this, _LuxenTooltip_withoutArrow_accessor_storage, "f"); }
104
+ set withoutArrow(value) { __classPrivateFieldSet(this, _LuxenTooltip_withoutArrow_accessor_storage, value, "f"); }
105
+ /** Space-separated list of trigger modes: `hover`, `focus`, `click`, `manual`. */
106
+ get trigger() { return __classPrivateFieldGet(this, _LuxenTooltip_trigger_accessor_storage, "f"); }
107
+ set trigger(value) { __classPrivateFieldSet(this, _LuxenTooltip_trigger_accessor_storage, value, "f"); }
108
+ _hasTrigger(type) {
109
+ return this.trigger.split(' ').includes(type);
110
+ }
111
+ get _trigger() {
112
+ return this.for ? this.getRootNode().getElementById(this.for) : null;
113
+ }
114
+ get _popover() {
115
+ return this.shadowRoot.querySelector('[popover]');
116
+ }
117
+ get _arrowEl() {
118
+ return this.withoutArrow ? null : this.shadowRoot.querySelector('i');
119
+ }
120
+ _getDuration(prop) {
121
+ const parsed = parseFloat(getComputedStyle(this).getPropertyValue(prop));
122
+ return Number.isNaN(parsed) ? 150 : parsed;
123
+ }
124
+ connectedCallback() {
125
+ super.connectedCallback();
126
+ requestAnimationFrame(() => this._addTriggerListeners());
127
+ }
128
+ disconnectedCallback() {
129
+ super.disconnectedCallback();
130
+ this._removeTriggerListeners();
131
+ }
132
+ updated(changed) {
133
+ if (changed.has('open')) {
134
+ this._handleOpenChange();
135
+ }
136
+ if (changed.has('for')) {
137
+ this._removeTriggerListeners(changed.get('for'));
138
+ this._addTriggerListeners();
139
+ }
140
+ }
141
+ show() {
142
+ if (!this.open)
143
+ this.open = true;
144
+ }
145
+ hide() {
146
+ if (this.open)
147
+ this.open = false;
148
+ }
149
+ toggle() {
150
+ this.open = !this.open;
151
+ }
152
+ async _handleOpenChange() {
153
+ const popover = this._popover;
154
+ if (!popover)
155
+ return;
156
+ const posOpts = { placement: this.placement, distance: this.distance };
157
+ if (this.open) {
158
+ popover.showPopover();
159
+ await this._floating.updatePosition(posOpts);
160
+ if (!this.open)
161
+ return;
162
+ await this._floating.animateShow(popover, this._getDuration('--show-duration'));
163
+ this._floating.startPositioning(posOpts);
164
+ this._trigger?.setAttribute('aria-describedby', this._tooltipId);
165
+ }
166
+ else {
167
+ this._floating.stopPositioning();
168
+ this._floating.cleanupSafePolygon();
169
+ this._trigger?.removeAttribute('aria-describedby');
170
+ await this._floating.animateHide(popover, this._getDuration('--hide-duration'));
171
+ if (popover.matches(':popover-open'))
172
+ popover.hidePopover();
173
+ }
174
+ }
175
+ _addTriggerListeners() {
176
+ this._floating.addTriggerListeners({
177
+ onPointerEnter: this._onPointerEnter,
178
+ onPointerLeave: this._onPointerLeave,
179
+ onFocusIn: this._onFocusIn,
180
+ onFocusOut: this._onFocusOut,
181
+ onClick: this._onClick,
182
+ onKeyDown: this._onKeyDown,
183
+ });
184
+ }
185
+ _removeTriggerListeners(forId) {
186
+ const trigger = forId
187
+ ? this.getRootNode().getElementById(forId)
188
+ : undefined;
189
+ this._floating.removeTriggerListeners(trigger);
190
+ }
191
+ render() {
192
+ return html `
193
+ <div
194
+ id=${this._tooltipId}
195
+ popover="manual"
196
+ role="tooltip"
197
+ part="body"
198
+ >
199
+ ${this.withoutArrow
200
+ ? nothing
201
+ : html `
202
+ <i
203
+ part="arrow"
204
+ role="presentation"
205
+ ></i>
206
+ `}
207
+ <slot></slot>
208
+ </div>
209
+ `;
210
+ }
211
+ }
212
+ _LuxenTooltip_for_accessor_storage = new WeakMap(), _LuxenTooltip_placement_accessor_storage = new WeakMap(), _LuxenTooltip_distance_accessor_storage = new WeakMap(), _LuxenTooltip_open_accessor_storage = new WeakMap(), _LuxenTooltip_withoutArrow_accessor_storage = new WeakMap(), _LuxenTooltip_trigger_accessor_storage = new WeakMap();
213
+ LuxenTooltip.styles = [hostStyles, styles];
214
+ __decorate([
215
+ property()
216
+ ], LuxenTooltip.prototype, "for", null);
217
+ __decorate([
218
+ property()
219
+ ], LuxenTooltip.prototype, "placement", null);
220
+ __decorate([
221
+ property({ type: Number })
222
+ ], LuxenTooltip.prototype, "distance", null);
223
+ __decorate([
224
+ property({ type: Boolean, reflect: true })
225
+ ], LuxenTooltip.prototype, "open", null);
226
+ __decorate([
227
+ property({ type: Boolean, reflect: true, attribute: 'without-arrow' })
228
+ ], LuxenTooltip.prototype, "withoutArrow", null);
229
+ __decorate([
230
+ property()
231
+ ], LuxenTooltip.prototype, "trigger", null);
@@ -0,0 +1,8 @@
1
+ import { LuxenTree } from './tree';
2
+ export * from './tree';
3
+ declare global {
4
+ interface HTMLElementTagNameMap {
5
+ 'l-tree': LuxenTree;
6
+ }
7
+ }
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/html/elements/tree/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,cAAc,QAAQ,CAAC;AAGvB,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,QAAQ,EAAE,SAAS,CAAC;KACrB;CACF"}
@@ -0,0 +1,4 @@
1
+ import { define } from '../../define';
2
+ import { LuxenTree } from './tree';
3
+ export * from './tree';
4
+ define('tree', LuxenTree);
@@ -0,0 +1,26 @@
1
+ :host {
2
+ --indent-size: 1rem;
3
+ --indent-guide-width: 1px;
4
+ --indent-guide-style: solid;
5
+ --indent-guide-color: var(--l-color-border-interactive, light-dark(#d1d5db, #3a4048));
6
+ --row-height: 1.75rem;
7
+ --row-padding-inline: 0.25rem;
8
+ --chevron-size: 1.125rem;
9
+ --item-gap: 0.375rem;
10
+
11
+ display: block;
12
+ color: var(--l-color-text-primary, CanvasText);
13
+ font-family: inherit;
14
+ line-height: 1.5;
15
+ }
16
+
17
+ .tree {
18
+ display: block;
19
+ outline: none;
20
+ }
21
+
22
+ .tree:focus-visible {
23
+ outline: 2px solid var(--l-focus-ring, Highlight);
24
+ outline-offset: 2px;
25
+ border-radius: 0.375rem;
26
+ }
@@ -0,0 +1,76 @@
1
+ import { type PropertyValues } from 'lit';
2
+ import { LuxenElement } from '../../shared/luxen-element';
3
+ import type { LuxenTreeItem } from '../tree-item/tree-item';
4
+ export type TreeSelection = 'single' | 'multiple' | 'leaf' | 'none';
5
+ /**
6
+ * A hierarchical tree view composed of `<l-tree-item>` children.
7
+ *
8
+ * @slot - One or more `l-tree-item` elements.
9
+ *
10
+ * @csspart base - The root tree container.
11
+ *
12
+ * @cssproperty --indent-size - Horizontal indent per depth level. Default `1rem`.
13
+ * @cssproperty --indent-guide-width - Thickness of the vertical guide line between a parent and its children. Default `1px`. Set to `0` to hide guides.
14
+ * @cssproperty --indent-guide-style - Line style of the guide (`solid`, `dashed`, `dotted`, `double`…). Default `solid`.
15
+ * @cssproperty --indent-guide-color - Color of the guide line.
16
+ * @cssproperty --row-height - Minimum row height. Default `1.75rem`.
17
+ * @cssproperty --row-padding-inline - Inner inline padding of the row; also drives the content slot left indent and the indent guide column. Default `0.25rem`.
18
+ * @cssproperty --chevron-size - Size of the expand/collapse chevron box. Default `1.125rem`.
19
+ * @cssproperty --item-gap - Horizontal gap between chevron, prefix, label and suffix on the row; also drives the content slot left indent. Default `0.375rem`.
20
+ *
21
+ * @event selection-change - Fired when the selected items change. Detail: `{ selection: LuxenTreeItem[] }`.
22
+ */
23
+ export declare class LuxenTree extends LuxenElement {
24
+ static styles: import("lit").CSSResult[];
25
+ private _mutationObserver?;
26
+ private _lastFocusedItem;
27
+ /**
28
+ * Selection behaviour:
29
+ * - `single` (default): at most one item selected via `aria-selected`.
30
+ * - `multiple`: any number of items selected. Checkboxes are rendered.
31
+ * - `leaf`: only leaf items can be selected (single). Branches just toggle.
32
+ * - `none`: purely navigable, no selection state.
33
+ */
34
+ accessor selection: TreeSelection;
35
+ /**
36
+ * When set with `selection="multiple"`, parent and children selection are decoupled:
37
+ * toggling a parent does NOT toggle its descendants and vice versa.
38
+ * Without it, selection cascades both ways and branches may become indeterminate.
39
+ */
40
+ accessor independent: boolean;
41
+ connectedCallback(): void;
42
+ disconnectedCallback(): void;
43
+ updated(changed: PropertyValues<this>): void;
44
+ /** Returns all items in document (flat) order, including nested ones. */
45
+ getAllItems({ includeDisabled }?: {
46
+ includeDisabled?: boolean | undefined;
47
+ }): LuxenTreeItem[];
48
+ /** Returns currently selected items. */
49
+ getSelection(): LuxenTreeItem[];
50
+ /** Expands every item that has children. */
51
+ expandAll(): void;
52
+ /** Collapses every item. */
53
+ collapseAll(): void;
54
+ private _syncAll;
55
+ private _syncSubtree;
56
+ private _canShowCheckboxOn;
57
+ private _rootItems;
58
+ private _ensureTabStop;
59
+ /** Items currently visible (parent chain all expanded). */
60
+ private _visibleItems;
61
+ private _onItemToggle;
62
+ private _handleRowActivate;
63
+ private _setSingleSelection;
64
+ private _selectItem;
65
+ private _setSubtreeSelection;
66
+ /** Propagate child state UP to parents (indeterminate / auto-checked). */
67
+ private _updateBranchStates;
68
+ private _emitSelectionChange;
69
+ private _onClick;
70
+ private _itemFromEvent;
71
+ private _focusItem;
72
+ private _onFocusIn;
73
+ private _onKeyDown;
74
+ render(): import("lit").TemplateResult<1>;
75
+ }
76
+ //# sourceMappingURL=tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/html/elements/tree/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAM5D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,SAAU,SAAQ,YAAY;IACzC,OAAgB,MAAM,4BAAwB;IAE9C,OAAO,CAAC,iBAAiB,CAAC,CAAmB;IAC7C,OAAO,CAAC,gBAAgB,CAA8B;IAEtD;;;;;;OAMG;IAEH,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAY;IAE7C;;;;OAIG;IAEH,QAAQ,CAAC,WAAW,UAAS;IAEpB,iBAAiB;IAUjB,oBAAoB;IAMpB,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC;IAQ9C,yEAAyE;IACzE,WAAW,CAAC,EAAE,eAAsB,EAAE;;KAAK,GAAG,aAAa,EAAE;IAO7D,wCAAwC;IACxC,YAAY,IAAI,aAAa,EAAE;IAI/B,4CAA4C;IAC5C,SAAS;IAMT,4BAA4B;IAC5B,WAAW;IAQX,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,cAAc;IAUtB,2DAA2D;IAC3D,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,aAAa,CAGnB;IAEF,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,oBAAoB;IAS5B,0EAA0E;IAC1E,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,QAAQ,CAqDd;IAEF,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,UAAU,CAMhB;IAEF,OAAO,CAAC,UAAU,CAyEhB;IAEO,MAAM;CAehB"}