aeico-components 0.1.6 → 0.1.7
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/README.md +0 -0
- package/dist/chunks/action-button.cjs +2 -2
- package/dist/chunks/action-button.js +2 -2
- package/dist/chunks/alert.cjs +22 -28
- package/dist/chunks/alert.cjs.map +1 -1
- package/dist/chunks/alert.js +22 -28
- package/dist/chunks/alert.js.map +1 -1
- package/dist/chunks/badge.cjs +1 -1
- package/dist/chunks/badge.js +1 -1
- package/dist/chunks/breadcrumb-item.cjs +7 -7
- package/dist/chunks/breadcrumb-item.js +7 -7
- package/dist/chunks/button.cjs +39 -50
- package/dist/chunks/button.cjs.map +1 -1
- package/dist/chunks/button.js +39 -50
- package/dist/chunks/button.js.map +1 -1
- package/dist/chunks/card.cjs +1 -1
- package/dist/chunks/card.js +1 -1
- package/dist/chunks/checkbox.cjs +1 -1
- package/dist/chunks/checkbox.js +1 -1
- package/dist/chunks/color.cjs +1 -1
- package/dist/chunks/color.js +1 -1
- package/dist/chunks/copy-button.cjs +7 -4
- package/dist/chunks/copy-button.cjs.map +1 -1
- package/dist/chunks/copy-button.js +7 -4
- package/dist/chunks/copy-button.js.map +1 -1
- package/dist/chunks/detail-group.cjs +65 -0
- package/dist/chunks/detail-group.cjs.map +1 -0
- package/dist/chunks/detail-group.js +66 -0
- package/dist/chunks/detail-group.js.map +1 -0
- package/dist/chunks/detail.cjs +1 -1
- package/dist/chunks/detail.js +1 -1
- package/dist/chunks/dialog.cjs +1 -1
- package/dist/chunks/dialog.js +1 -1
- package/dist/chunks/divider.cjs +1 -1
- package/dist/chunks/divider.js +1 -1
- package/dist/chunks/drawer.cjs +1 -1
- package/dist/chunks/drawer.js +1 -1
- package/dist/chunks/dropdown-button.cjs +8 -9
- package/dist/chunks/dropdown-button.cjs.map +1 -1
- package/dist/chunks/dropdown-button.js +11 -12
- package/dist/chunks/dropdown-button.js.map +1 -1
- package/dist/chunks/icon.cjs +27 -11
- package/dist/chunks/icon.cjs.map +1 -1
- package/dist/chunks/icon.js +27 -11
- package/dist/chunks/icon.js.map +1 -1
- package/dist/chunks/menu.cjs +1 -1
- package/dist/chunks/menu.js +1 -1
- package/dist/chunks/navbar.cjs +1 -1
- package/dist/chunks/navbar.js +1 -1
- package/dist/chunks/number-input.cjs +110 -0
- package/dist/chunks/number-input.cjs.map +1 -0
- package/dist/chunks/number-input.js +111 -0
- package/dist/chunks/number-input.js.map +1 -0
- package/dist/chunks/pagination.cjs +31 -31
- package/dist/chunks/pagination.js +31 -31
- package/dist/chunks/progress-bar.cjs +1 -1
- package/dist/chunks/progress-bar.js +1 -1
- package/dist/chunks/radio.cjs +1 -1
- package/dist/chunks/radio.js +1 -1
- package/dist/chunks/select.cjs +1 -1
- package/dist/chunks/select.js +1 -1
- package/dist/chunks/size.cjs +1 -1
- package/dist/chunks/size.js +1 -1
- package/dist/chunks/slider.cjs +26 -29
- package/dist/chunks/slider.cjs.map +1 -1
- package/dist/chunks/slider.js +26 -29
- package/dist/chunks/slider.js.map +1 -1
- package/dist/chunks/spinner.cjs +1 -1
- package/dist/chunks/spinner.js +1 -1
- package/dist/chunks/switch.cjs +1 -1
- package/dist/chunks/switch.js +1 -1
- package/dist/chunks/tab-panel.cjs +12 -3
- package/dist/chunks/tab-panel.cjs.map +1 -1
- package/dist/chunks/tab-panel.js +12 -3
- package/dist/chunks/tab-panel.js.map +1 -1
- package/dist/chunks/tag.cjs +1 -1
- package/dist/chunks/tag.js +1 -1
- package/dist/chunks/text-input.cjs +1 -1
- package/dist/chunks/text-input.js +1 -1
- package/dist/chunks/textarea.cjs +1 -1
- package/dist/chunks/textarea.js +1 -1
- package/dist/chunks/tooltip.cjs +4 -5
- package/dist/chunks/tooltip.cjs.map +1 -1
- package/dist/chunks/tooltip.js +4 -5
- package/dist/chunks/tooltip.js.map +1 -1
- package/dist/chunks/tree.cjs +1 -1
- package/dist/chunks/tree.js +1 -1
- package/dist/chunks/variables.cjs +271 -247
- package/dist/chunks/variables.cjs.map +1 -1
- package/dist/chunks/variables.js +271 -247
- package/dist/chunks/variables.js.map +1 -1
- package/dist/detail-group.cjs +6 -0
- package/dist/detail-group.cjs.map +1 -0
- package/dist/detail-group.js +6 -0
- package/dist/detail-group.js.map +1 -0
- package/dist/dropdown.js +4 -4
- package/dist/index.cjs +4 -166
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +10 -172
- package/dist/index.js.map +1 -1
- package/dist/number-input.cjs +6 -0
- package/dist/number-input.cjs.map +1 -0
- package/dist/number-input.js +6 -0
- package/dist/number-input.js.map +1 -0
- package/dist/select.cjs +1 -1
- package/dist/select.js +1 -1
- package/dist/types/card/defines.d.ts +1 -1
- package/dist/types/detail/defines.d.ts +1 -1
- package/dist/types/icon/defines.d.ts +5 -1
- package/dist/types/icon/index.d.ts +1 -1
- package/dist/types/tabs/defines.d.ts +1 -0
- package/dist/types/tabs/tabs.d.ts +3 -0
- package/package.json +1 -1
- package/src/card/defines.ts +1 -1
- package/src/copy-button/copy-button.ts +9 -5
- package/src/detail/defines.ts +1 -1
- package/src/icon/defines.ts +6 -1
- package/src/icon/icon.ts +28 -10
- package/src/icon/index.ts +1 -1
- package/src/icon/registry.ts +2 -2
- package/src/styles/color.css +91 -91
- package/src/styles/components/action-button.css +12 -12
- package/src/styles/components/alert.css +22 -28
- package/src/styles/components/badge.css +13 -20
- package/src/styles/components/breadcrumb-item.css +7 -7
- package/src/styles/components/button.css +39 -50
- package/src/styles/components/card.css +45 -30
- package/src/styles/components/checkbox.css +6 -11
- package/src/styles/components/copy-button.css +22 -33
- package/src/styles/components/detail.css +51 -39
- package/src/styles/components/dialog.css +11 -11
- package/src/styles/components/divider.css +3 -3
- package/src/styles/components/drawer.css +14 -23
- package/src/styles/components/dropdown-item.css +7 -8
- package/src/styles/components/dropdown.css +3 -4
- package/src/styles/components/field-label.css +12 -12
- package/src/styles/components/icon-button.css +25 -36
- package/src/styles/components/icon.css +1 -1
- package/src/styles/components/menu-item.css +7 -8
- package/src/styles/components/navbar.css +16 -16
- package/src/styles/components/number-input.css +27 -36
- package/src/styles/components/pagination.css +31 -31
- package/src/styles/components/progress-bar.css +2 -3
- package/src/styles/components/radio-group.css +69 -83
- package/src/styles/components/select-option.css +5 -5
- package/src/styles/components/select.css +21 -33
- package/src/styles/components/slider.css +26 -29
- package/src/styles/components/spinner.css +7 -9
- package/src/styles/components/switch.css +5 -17
- package/src/styles/components/tab.css +4 -5
- package/src/styles/components/tabs.css +48 -1
- package/src/styles/components/tag.css +14 -21
- package/src/styles/components/text-input.css +13 -22
- package/src/styles/components/textarea.css +12 -21
- package/src/styles/components/tooltip.css +4 -5
- package/src/styles/components/tree-item.css +12 -12
- package/src/styles/radius.css +10 -0
- package/src/styles/size.css +7 -7
- package/src/styles/variables.css +271 -247
- package/src/tabs/defines.ts +1 -0
- package/src/tabs/tabs.ts +12 -0
|
@@ -6,7 +6,7 @@ const actionButton = require("./action-button.cjs");
|
|
|
6
6
|
const aeico = require("aeico");
|
|
7
7
|
const variables = require("./variables.cjs");
|
|
8
8
|
const size = require("./size.cjs");
|
|
9
|
-
const style = ":host {\n display: block;\n flex: 1;\n min-width: 0;\n font-size: var(--size-base);\n --input-field-gap: 4px;\n --input-font-size: 1em;\n --input-padding: 0.333em 0.583em;\n --input-border-width: 1px;\n --input-
|
|
9
|
+
const style = ":host {\n display: block;\n flex: 1;\n min-width: 0;\n font-size: var(--ae-size-base);\n --input-field-gap: 4px;\n --input-font-size: 1em;\n --input-padding: 0.333em 0.583em;\n --input-border-width: 1px;\n --input-transition: border-color 0.12s, background 0.12s;\n}\n\n.input-container {\n display: flex;\n align-items: center;\n gap: var(--input-field-gap);\n width: 100%;\n}\n\ninput {\n flex: 1;\n min-width: 0;\n font-size: var(--input-font-size);\n padding: var(--input-padding);\n border: var(--input-border-width) solid var(--ae-border-subtle);\n border-radius: var(--ae-border-radius, var(--ae-radius-xs));\n background: var(--ae-surface-base);\n color: var(--ae-color-text-muted);\n transition: var(--input-transition);\n}\n\ninput::placeholder {\n color: var(--ae-color-text-disabled);\n}\n\ninput:focus {\n outline: none;\n border-color: var(--ae-border-focus);\n background: var(--ae-surface-raised);\n}\n\ninput:hover:not(:focus) {\n border-color: var(--ae-border-default);\n background: var(--ae-surface-raised);\n}\n\ninput:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n:host([error]) input {\n border-color: var(--field-error-color, var(--ae-red));\n}\n\n:host([error]) input:hover:not(:focus),\n:host([error]) input:focus {\n border-color: var(--field-error-color, var(--ae-red));\n}\n\n.input-container:has(.action-controls) input {\n border-radius: var(--ae-border-radius, var(--ae-radius-xs)) 0 0 var(--ae-border-radius, var(--ae-radius-xs));\n}\n";
|
|
10
10
|
class TextInput extends actionButton.AeicoField {
|
|
11
11
|
constructor() {
|
|
12
12
|
super(...arguments);
|
|
@@ -5,7 +5,7 @@ import { A as AeicoField, f as fieldLabelCSS, a as actionButtonCSS } from "./act
|
|
|
5
5
|
import { html } from "aeico";
|
|
6
6
|
import { v as variables } from "./variables.js";
|
|
7
7
|
import { s as sizeCSS } from "./size.js";
|
|
8
|
-
const style = ":host {\n display: block;\n flex: 1;\n min-width: 0;\n font-size: var(--size-base);\n --input-field-gap: 4px;\n --input-font-size: 1em;\n --input-padding: 0.333em 0.583em;\n --input-border-width: 1px;\n --input-
|
|
8
|
+
const style = ":host {\n display: block;\n flex: 1;\n min-width: 0;\n font-size: var(--ae-size-base);\n --input-field-gap: 4px;\n --input-font-size: 1em;\n --input-padding: 0.333em 0.583em;\n --input-border-width: 1px;\n --input-transition: border-color 0.12s, background 0.12s;\n}\n\n.input-container {\n display: flex;\n align-items: center;\n gap: var(--input-field-gap);\n width: 100%;\n}\n\ninput {\n flex: 1;\n min-width: 0;\n font-size: var(--input-font-size);\n padding: var(--input-padding);\n border: var(--input-border-width) solid var(--ae-border-subtle);\n border-radius: var(--ae-border-radius, var(--ae-radius-xs));\n background: var(--ae-surface-base);\n color: var(--ae-color-text-muted);\n transition: var(--input-transition);\n}\n\ninput::placeholder {\n color: var(--ae-color-text-disabled);\n}\n\ninput:focus {\n outline: none;\n border-color: var(--ae-border-focus);\n background: var(--ae-surface-raised);\n}\n\ninput:hover:not(:focus) {\n border-color: var(--ae-border-default);\n background: var(--ae-surface-raised);\n}\n\ninput:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n:host([error]) input {\n border-color: var(--field-error-color, var(--ae-red));\n}\n\n:host([error]) input:hover:not(:focus),\n:host([error]) input:focus {\n border-color: var(--field-error-color, var(--ae-red));\n}\n\n.input-container:has(.action-controls) input {\n border-radius: var(--ae-border-radius, var(--ae-radius-xs)) 0 0 var(--ae-border-radius, var(--ae-radius-xs));\n}\n";
|
|
9
9
|
class TextInput extends AeicoField {
|
|
10
10
|
constructor() {
|
|
11
11
|
super(...arguments);
|
package/dist/chunks/textarea.cjs
CHANGED
|
@@ -3,7 +3,7 @@ const actionButton = require("./action-button.cjs");
|
|
|
3
3
|
const aeico = require("aeico");
|
|
4
4
|
const variables = require("./variables.cjs");
|
|
5
5
|
const size = require("./size.cjs");
|
|
6
|
-
const style = ":host {\n display: block;\n flex: 1;\n min-width: 0;\n font-size: var(--size-base);\n\n --textarea-font-size: 1em;\n --textarea-padding: 0.333em 0.583em;\n --textarea-border-width: 1px;\n --textarea-
|
|
6
|
+
const style = ":host {\n display: block;\n flex: 1;\n min-width: 0;\n font-size: var(--ae-size-base);\n\n --textarea-font-size: 1em;\n --textarea-padding: 0.333em 0.583em;\n --textarea-border-width: 1px;\n --textarea-transition: border-color 0.12s, background 0.12s;\n}\n\n.textarea-container {\n display: flex;\n align-items: flex-start;\n gap: 4px;\n width: 100%;\n}\n\ntextarea {\n flex: 1;\n min-width: 0;\n width: 100%;\n box-sizing: border-box;\n font-size: var(--textarea-font-size);\n font-family: inherit;\n line-height: 1.5;\n padding: var(--textarea-padding);\n border: var(--textarea-border-width) solid var(--ae-border-subtle);\n border-radius: var(--ae-border-radius, var(--ae-radius-xs));\n background: var(--ae-surface-base);\n color: var(--ae-color-text-muted);\n transition: var(--textarea-transition);\n resize: vertical;\n}\n\ntextarea::placeholder {\n color: var(--ae-color-text-disabled);\n}\n\ntextarea:focus {\n outline: none;\n border-color: var(--ae-border-focus);\n background: var(--ae-surface-raised);\n}\n\ntextarea:hover:not(:focus) {\n border-color: var(--ae-border-default);\n background: var(--ae-surface-raised);\n}\n\ntextarea:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n resize: none;\n}\n\n/* Error state */\n:host([error]) textarea {\n border-color: var(--field-error-color, var(--ae-red));\n}\n\n:host([error]) textarea:hover:not(:focus),\n:host([error]) textarea:focus {\n border-color: var(--field-error-color, var(--ae-red));\n}\n";
|
|
7
7
|
var __create = Object.create;
|
|
8
8
|
var __defProp = Object.defineProperty;
|
|
9
9
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/chunks/textarea.js
CHANGED
|
@@ -2,7 +2,7 @@ import { A as AeicoField, f as fieldLabelCSS, a as actionButtonCSS } from "./act
|
|
|
2
2
|
import { prop, html } from "aeico";
|
|
3
3
|
import { v as variables } from "./variables.js";
|
|
4
4
|
import { s as sizeCSS } from "./size.js";
|
|
5
|
-
const style = ":host {\n display: block;\n flex: 1;\n min-width: 0;\n font-size: var(--size-base);\n\n --textarea-font-size: 1em;\n --textarea-padding: 0.333em 0.583em;\n --textarea-border-width: 1px;\n --textarea-
|
|
5
|
+
const style = ":host {\n display: block;\n flex: 1;\n min-width: 0;\n font-size: var(--ae-size-base);\n\n --textarea-font-size: 1em;\n --textarea-padding: 0.333em 0.583em;\n --textarea-border-width: 1px;\n --textarea-transition: border-color 0.12s, background 0.12s;\n}\n\n.textarea-container {\n display: flex;\n align-items: flex-start;\n gap: 4px;\n width: 100%;\n}\n\ntextarea {\n flex: 1;\n min-width: 0;\n width: 100%;\n box-sizing: border-box;\n font-size: var(--textarea-font-size);\n font-family: inherit;\n line-height: 1.5;\n padding: var(--textarea-padding);\n border: var(--textarea-border-width) solid var(--ae-border-subtle);\n border-radius: var(--ae-border-radius, var(--ae-radius-xs));\n background: var(--ae-surface-base);\n color: var(--ae-color-text-muted);\n transition: var(--textarea-transition);\n resize: vertical;\n}\n\ntextarea::placeholder {\n color: var(--ae-color-text-disabled);\n}\n\ntextarea:focus {\n outline: none;\n border-color: var(--ae-border-focus);\n background: var(--ae-surface-raised);\n}\n\ntextarea:hover:not(:focus) {\n border-color: var(--ae-border-default);\n background: var(--ae-surface-raised);\n}\n\ntextarea:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n resize: none;\n}\n\n/* Error state */\n:host([error]) textarea {\n border-color: var(--field-error-color, var(--ae-red));\n}\n\n:host([error]) textarea:hover:not(:focus),\n:host([error]) textarea:focus {\n border-color: var(--field-error-color, var(--ae-red));\n}\n";
|
|
6
6
|
var __create = Object.create;
|
|
7
7
|
var __defProp = Object.defineProperty;
|
|
8
8
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/chunks/tooltip.cjs
CHANGED
|
@@ -8,19 +8,18 @@ const tooltipStyle = `:host {
|
|
|
8
8
|
vertical-align: middle;
|
|
9
9
|
|
|
10
10
|
--ae-tooltip-z-index: 1000;
|
|
11
|
-
--ae-tooltip-bg: var(--dark, #343a40);
|
|
11
|
+
--ae-tooltip-bg: var(--ae-dark, #343a40);
|
|
12
12
|
--ae-tooltip-color: #fff;
|
|
13
13
|
--ae-tooltip-padding: 0.3125rem 0.625rem;
|
|
14
14
|
--ae-tooltip-font-size: 0.8125rem;
|
|
15
|
-
--ae-tooltip-border-radius: 4px;
|
|
16
15
|
--ae-tooltip-arrow-size: 5px;
|
|
17
16
|
--ae-tooltip-gap: 6px;
|
|
18
17
|
--ae-tooltip-max-width: 20rem;
|
|
19
18
|
}
|
|
20
19
|
|
|
21
20
|
:host-context([theme="dark"]) {
|
|
22
|
-
--ae-tooltip-bg: var(--light, #f8f9fa);
|
|
23
|
-
--ae-tooltip-color: var(--dark, #343a40);
|
|
21
|
+
--ae-tooltip-bg: var(--ae-light, #f8f9fa);
|
|
22
|
+
--ae-tooltip-color: var(--ae-dark, #343a40);
|
|
24
23
|
}
|
|
25
24
|
|
|
26
25
|
.tooltip-panel {
|
|
@@ -32,7 +31,7 @@ const tooltipStyle = `:host {
|
|
|
32
31
|
padding: var(--ae-tooltip-padding);
|
|
33
32
|
font-size: var(--ae-tooltip-font-size);
|
|
34
33
|
font-family: inherit;
|
|
35
|
-
border-radius: var(--ae-
|
|
34
|
+
border-radius: var(--ae-border-radius, var(--ae-radius-sm));
|
|
36
35
|
line-height: 1.4;
|
|
37
36
|
white-space: nowrap;
|
|
38
37
|
max-width: var(--ae-tooltip-max-width);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.cjs","sources":["../../src/tooltip/tooltip.ts"],"sourcesContent":["import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport tooltipStyle from '../styles/components/tooltip.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html, prop } from 'aeico';\nimport type { TooltipPlacement, TooltipTrigger } from './defines';\n\n/**\n * Tooltip Component\n *\n * A floating label that appears on hover or focus around its trigger content.\n * Wrap any element in `<ae-tooltip>` and provide content via the `content`\n * attribute (plain text) or the `tooltip` named slot (rich HTML).\n *\n * @example\n * ```html\n * <ae-tooltip content=\"Save file\">\n * <ae-button>Save</ae-button>\n * </ae-tooltip>\n *\n * <ae-tooltip placement=\"bottom-start\">\n * <span slot=\"tooltip\"><strong>Bold</strong> tip</span>\n * <ae-icon-button name=\"info\"></ae-icon-button>\n * </ae-tooltip>\n * ```\n */\nclass Tooltip extends AeicoComponent {\n protected static styles = [styleVariables, tooltipStyle];\n\n @prop({ type: String })\n accessor content: string | undefined;\n\n @prop({ type: String })\n accessor placement: TooltipPlacement = 'top';\n\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n @prop({ type: String })\n accessor trigger: TooltipTrigger = 'hover';\n\n @prop({ type: Boolean })\n accessor open: boolean = false;\n\n private _outsideClickHandler: ((e: MouseEvent) => void) | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n this.listen('mouseenter', this._handleMouseEnter);\n this.listen('mouseleave', this._handleMouseLeave);\n this.listen('focusin', this._handleFocusin);\n this.listen('focusout', this._handleFocusout);\n this.listen('click', this._handleClick);\n\n this._outsideClickHandler = (e: MouseEvent) => {\n if (!this.open) return;\n if (!e.composedPath().includes(this)) this.open = false;\n };\n document.addEventListener('click', this._outsideClickHandler);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._outsideClickHandler) {\n document.removeEventListener('click', this._outsideClickHandler);\n this._outsideClickHandler = null;\n }\n }\n\n private _handleMouseEnter = () => {\n if (this.trigger !== 'hover') return;\n if (this.disabled) return;\n this.open = true;\n };\n\n private _handleMouseLeave = () => {\n if (this.trigger !== 'hover') return;\n this.open = false;\n };\n\n private _handleFocusin = () => {\n if (this.trigger !== 'hover') return;\n if (this.disabled) return;\n this.open = true;\n };\n\n private _handleFocusout = () => {\n if (this.trigger !== 'hover') return;\n this.open = false;\n };\n\n private _handleClick = () => {\n if (this.trigger !== 'click') return;\n if (this.disabled) return;\n this.open = !this.open;\n };\n\n private _updatePosition() {\n const panel = this.shadowRoot?.querySelector<HTMLElement>('.tooltip-panel');\n if (!panel) return;\n\n const host = this.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n const gap = 6; // Match --ae-tooltip-gap: 6px\n const pw = panelRect.width;\n const ph = panelRect.height;\n\n let top: number;\n let left: number;\n\n switch (this.placement) {\n case 'top-start':\n top = host.top - ph - gap;\n left = host.left;\n break;\n case 'top-end':\n top = host.top - ph - gap;\n left = host.right - pw;\n break;\n case 'bottom':\n top = host.bottom + gap;\n left = host.left + host.width / 2 - pw / 2;\n break;\n case 'bottom-start':\n top = host.bottom + gap;\n left = host.left;\n break;\n case 'bottom-end':\n top = host.bottom + gap;\n left = host.right - pw;\n break;\n case 'left':\n top = host.top + host.height / 2 - ph / 2;\n left = host.left - pw - gap;\n break;\n case 'right':\n top = host.top + host.height / 2 - ph / 2;\n left = host.right + gap;\n break;\n default: // 'top'\n top = host.top - ph - gap;\n left = host.left + host.width / 2 - pw / 2;\n }\n\n panel.style.top = `${top}px`;\n panel.style.left = `${left}px`;\n }\n\n protected onUpdated(changedProps: Map<string, unknown>) {\n if (changedProps.has('open') && this.open) {\n this._updatePosition();\n }\n }\n\n protected render() {\n return html(({ div, span, slot }) => {\n slot();\n div(\n {\n className: `tooltip-panel placement-${this.placement ?? 'top'}`,\n role: 'tooltip',\n 'aria-hidden': String(!this.open),\n },\n () => {\n slot({ name: 'tooltip' }, () => {\n span({ textContent: this.content ?? '' });\n });\n },\n );\n });\n }\n}\n\nTooltip.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-tooltip': Tooltip;\n }\n}\n\nexport type TooltipProps = InferProps<typeof Tooltip>;\nexport default Tooltip;\n"],"names":["AeicoComponent","prop","_a","html","styleVariables"],"mappings":"
|
|
1
|
+
{"version":3,"file":"tooltip.cjs","sources":["../../src/tooltip/tooltip.ts"],"sourcesContent":["import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport tooltipStyle from '../styles/components/tooltip.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html, prop } from 'aeico';\nimport type { TooltipPlacement, TooltipTrigger } from './defines';\n\n/**\n * Tooltip Component\n *\n * A floating label that appears on hover or focus around its trigger content.\n * Wrap any element in `<ae-tooltip>` and provide content via the `content`\n * attribute (plain text) or the `tooltip` named slot (rich HTML).\n *\n * @example\n * ```html\n * <ae-tooltip content=\"Save file\">\n * <ae-button>Save</ae-button>\n * </ae-tooltip>\n *\n * <ae-tooltip placement=\"bottom-start\">\n * <span slot=\"tooltip\"><strong>Bold</strong> tip</span>\n * <ae-icon-button name=\"info\"></ae-icon-button>\n * </ae-tooltip>\n * ```\n */\nclass Tooltip extends AeicoComponent {\n protected static styles = [styleVariables, tooltipStyle];\n\n @prop({ type: String })\n accessor content: string | undefined;\n\n @prop({ type: String })\n accessor placement: TooltipPlacement = 'top';\n\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n @prop({ type: String })\n accessor trigger: TooltipTrigger = 'hover';\n\n @prop({ type: Boolean })\n accessor open: boolean = false;\n\n private _outsideClickHandler: ((e: MouseEvent) => void) | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n this.listen('mouseenter', this._handleMouseEnter);\n this.listen('mouseleave', this._handleMouseLeave);\n this.listen('focusin', this._handleFocusin);\n this.listen('focusout', this._handleFocusout);\n this.listen('click', this._handleClick);\n\n this._outsideClickHandler = (e: MouseEvent) => {\n if (!this.open) return;\n if (!e.composedPath().includes(this)) this.open = false;\n };\n document.addEventListener('click', this._outsideClickHandler);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._outsideClickHandler) {\n document.removeEventListener('click', this._outsideClickHandler);\n this._outsideClickHandler = null;\n }\n }\n\n private _handleMouseEnter = () => {\n if (this.trigger !== 'hover') return;\n if (this.disabled) return;\n this.open = true;\n };\n\n private _handleMouseLeave = () => {\n if (this.trigger !== 'hover') return;\n this.open = false;\n };\n\n private _handleFocusin = () => {\n if (this.trigger !== 'hover') return;\n if (this.disabled) return;\n this.open = true;\n };\n\n private _handleFocusout = () => {\n if (this.trigger !== 'hover') return;\n this.open = false;\n };\n\n private _handleClick = () => {\n if (this.trigger !== 'click') return;\n if (this.disabled) return;\n this.open = !this.open;\n };\n\n private _updatePosition() {\n const panel = this.shadowRoot?.querySelector<HTMLElement>('.tooltip-panel');\n if (!panel) return;\n\n const host = this.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n const gap = 6; // Match --ae-tooltip-gap: 6px\n const pw = panelRect.width;\n const ph = panelRect.height;\n\n let top: number;\n let left: number;\n\n switch (this.placement) {\n case 'top-start':\n top = host.top - ph - gap;\n left = host.left;\n break;\n case 'top-end':\n top = host.top - ph - gap;\n left = host.right - pw;\n break;\n case 'bottom':\n top = host.bottom + gap;\n left = host.left + host.width / 2 - pw / 2;\n break;\n case 'bottom-start':\n top = host.bottom + gap;\n left = host.left;\n break;\n case 'bottom-end':\n top = host.bottom + gap;\n left = host.right - pw;\n break;\n case 'left':\n top = host.top + host.height / 2 - ph / 2;\n left = host.left - pw - gap;\n break;\n case 'right':\n top = host.top + host.height / 2 - ph / 2;\n left = host.right + gap;\n break;\n default: // 'top'\n top = host.top - ph - gap;\n left = host.left + host.width / 2 - pw / 2;\n }\n\n panel.style.top = `${top}px`;\n panel.style.left = `${left}px`;\n }\n\n protected onUpdated(changedProps: Map<string, unknown>) {\n if (changedProps.has('open') && this.open) {\n this._updatePosition();\n }\n }\n\n protected render() {\n return html(({ div, span, slot }) => {\n slot();\n div(\n {\n className: `tooltip-panel placement-${this.placement ?? 'top'}`,\n role: 'tooltip',\n 'aria-hidden': String(!this.open),\n },\n () => {\n slot({ name: 'tooltip' }, () => {\n span({ textContent: this.content ?? '' });\n });\n },\n );\n });\n }\n}\n\nTooltip.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-tooltip': Tooltip;\n }\n}\n\nexport type TooltipProps = InferProps<typeof Tooltip>;\nexport default Tooltip;\n"],"names":["AeicoComponent","prop","_a","html","styleVariables"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,WAAA,cAAA,eAAA,gBAAA,cAAA,IAAA,OAAA,UAAA,YAAA,WAAA,UAAA;AA0BA,MAAM,iBAAgB,KAAAA,+BAGpB,eAAA,CAACC,WAAK,EAAE,MAAM,OAAA,CAAQ,CAAA,GAGtB,iBAAA,CAACA,MAAAA,KAAK,EAAE,MAAM,QAAQ,IAGtB,gBAAA,CAACA,MAAAA,KAAK,EAAE,MAAM,SAAS,CAAA,GAGvB,eAAA,CAACA,MAAAA,KAAK,EAAE,MAAM,OAAA,CAAQ,CAAA,GAGtB,aAACA,WAAK,EAAE,MAAM,QAAA,CAAS,IAfH,IAAe;AAAA,EAArC,cAAA;AAAA,UAAA,GAAA,SAAA;AAIE,iBAAA,MAAS,UAAT,kBAAA,OAAA,GAAA,IAAA,CAAA,GAAA,kBAAA,OAAA,IAAA,IAAA;AAGA,iBAAA,MAAS,YAA8B,kBAAvC,OAAA,IAAA,MAAuC,KAAA,CAAA,GAAvC,kBAAA,OAAA,IAAA,IAAA;AAGA,iBAAA,MAAS,WAAoB,kBAA7B,OAAA,IAAA,MAA6B,KAAA,CAAA,GAA7B,kBAAA,OAAA,IAAA,IAAA;AAGA,iBAAA,MAAS,UAA0B,kBAAnC,OAAA,IAAA,MAAmC,OAAA,CAAA,GAAnC,kBAAA,OAAA,IAAA,IAAA;AAGA,iBAAA,MAAS,OAAgB,kBAAzB,OAAA,IAAA,MAAyB,KAAA,CAAA,GAAzB,kBAAA,OAAA,IAAA,IAAA;AAEA,kBAAA,MAAQ,wBAAyD,IAAA;AAyBjE,kBAAA,MAAQ,qBAAoB,MAAM;AAChC,UAAI,KAAK,YAAY,QAAS;AAC9B,UAAI,KAAK,SAAU;AACnB,WAAK,OAAO;AAAA,IACd,CAAA;AAEA,kBAAA,MAAQ,qBAAoB,MAAM;AAChC,UAAI,KAAK,YAAY,QAAS;AAC9B,WAAK,OAAO;AAAA,IACd,CAAA;AAEA,kBAAA,MAAQ,kBAAiB,MAAM;AAC7B,UAAI,KAAK,YAAY,QAAS;AAC9B,UAAI,KAAK,SAAU;AACnB,WAAK,OAAO;AAAA,IACd,CAAA;AAEA,kBAAA,MAAQ,mBAAkB,MAAM;AAC9B,UAAI,KAAK,YAAY,QAAS;AAC9B,WAAK,OAAO;AAAA,IACd,CAAA;AAEA,kBAAA,MAAQ,gBAAe,MAAM;AAC3B,UAAI,KAAK,YAAY,QAAS;AAC9B,UAAI,KAAK,SAAU;AACnB,WAAK,OAAO,CAAC,KAAK;AAAA,IACpB,CAAA;AAAA,EAAA;AAAA,EAjDA,oBAAoB;AAClB,UAAM,kBAAA;AACN,SAAK,OAAO,cAAc,KAAK,iBAAiB;AAChD,SAAK,OAAO,cAAc,KAAK,iBAAiB;AAChD,SAAK,OAAO,WAAW,KAAK,cAAc;AAC1C,SAAK,OAAO,YAAY,KAAK,eAAe;AAC5C,SAAK,OAAO,SAAS,KAAK,YAAY;AAEtC,SAAK,uBAAuB,CAAC,MAAkB;AAC7C,UAAI,CAAC,KAAK,KAAM;AAChB,UAAI,CAAC,EAAE,eAAe,SAAS,IAAI,QAAQ,OAAO;AAAA,IACpD;AACA,aAAS,iBAAiB,SAAS,KAAK,oBAAoB;AAAA,EAC9D;AAAA,EAEA,uBAAuB;AACrB,UAAM,qBAAA;AACN,QAAI,KAAK,sBAAsB;AAC7B,eAAS,oBAAoB,SAAS,KAAK,oBAAoB;AAC/D,WAAK,uBAAuB;AAAA,IAC9B;AAAA,EACF;AAAA,EA8BQ,kBAAkB;;AACxB,UAAM,SAAQC,MAAA,KAAK,eAAL,gBAAAA,IAAiB,cAA2B;AAC1D,QAAI,CAAC,MAAO;AAEZ,UAAM,OAAO,KAAK,sBAAA;AAClB,UAAM,YAAY,MAAM,sBAAA;AACxB,UAAM,MAAM;AACZ,UAAM,KAAK,UAAU;AACrB,UAAM,KAAK,UAAU;AAErB,QAAI;AACJ,QAAI;AAEJ,YAAQ,KAAK,WAAA;AAAA,MACX,KAAK;AACH,cAAM,KAAK,MAAM,KAAK;AACtB,eAAO,KAAK;AACZ;AAAA,MACF,KAAK;AACH,cAAM,KAAK,MAAM,KAAK;AACtB,eAAO,KAAK,QAAQ;AACpB;AAAA,MACF,KAAK;AACH,cAAM,KAAK,SAAS;AACpB,eAAO,KAAK,OAAO,KAAK,QAAQ,IAAI,KAAK;AACzC;AAAA,MACF,KAAK;AACH,cAAM,KAAK,SAAS;AACpB,eAAO,KAAK;AACZ;AAAA,MACF,KAAK;AACH,cAAM,KAAK,SAAS;AACpB,eAAO,KAAK,QAAQ;AACpB;AAAA,MACF,KAAK;AACH,cAAM,KAAK,MAAM,KAAK,SAAS,IAAI,KAAK;AACxC,eAAO,KAAK,OAAO,KAAK;AACxB;AAAA,MACF,KAAK;AACH,cAAM,KAAK,MAAM,KAAK,SAAS,IAAI,KAAK;AACxC,eAAO,KAAK,QAAQ;AACpB;AAAA,MACF;AACE,cAAM,KAAK,MAAM,KAAK;AACtB,eAAO,KAAK,OAAO,KAAK,QAAQ,IAAI,KAAK;AAAA,IAAA;AAG7C,UAAM,MAAM,MAAM,GAAG,GAAG;AACxB,UAAM,MAAM,OAAO,GAAG,IAAI;AAAA,EAC5B;AAAA,EAEU,UAAU,cAAoC;AACtD,QAAI,aAAa,IAAI,MAAM,KAAK,KAAK,MAAM;AACzC,WAAK,gBAAA;AAAA,IACP;AAAA,EACF;AAAA,EAEU,SAAS;AACjB,WAAOC,MAAAA,KAAK,CAAC,EAAE,KAAK,MAAM,WAAW;AACnC,WAAA;AACA;AAAA,QACE;AAAA,UACE,WAAW,2BAA2B,KAAK,aAAa,KAAK;AAAA,UAC7D,MAAM;AAAA,UACN,eAAe,OAAO,CAAC,KAAK,IAAI;AAAA,QAAA;AAAA,QAElC,MAAM;AACJ,eAAK,EAAE,MAAM,UAAA,GAAa,MAAM;AAC9B,iBAAK,EAAE,aAAa,KAAK,WAAW,IAAI;AAAA,UAC1C,CAAC;AAAA,QACH;AAAA,MAAA;AAAA,IAEJ,CAAC;AAAA,EACH;AACF;AAjJA,QAAA,iBAAA,EAAA;AAIW,WAAA,oBAAA,QAAA;AAGA,aAAA,oBAAA,QAAA;AAGA,YAAA,oBAAA,QAAA;AAGA,WAAA,oBAAA,QAAA;AAGA,QAAA,oBAAA,QAAA;AAZT,kBAAA,OAAA,GAAS,WADT,cAHI,SAIK,QAAA;AAGT,kBAAA,OAAA,GAAS,aADT,gBANI,SAOK,UAAA;AAGT,kBAAA,OAAA,GAAS,YADT,eATI,SAUK,SAAA;AAGT,kBAAA,OAAA,GAAS,WADT,cAZI,SAaK,QAAA;AAGT,kBAAA,OAAA,GAAS,QADT,WAfI,SAgBK,KAAA;AAhBX,oBAAA,OAAM,OAAA;AACJ,cADI,SACa,UAAS,CAACC,UAAAA,WAAgB,YAAY,CAAA;AAkJzD,QAAQ,SAAA;;"}
|
package/dist/chunks/tooltip.js
CHANGED
|
@@ -7,19 +7,18 @@ const tooltipStyle = `:host {
|
|
|
7
7
|
vertical-align: middle;
|
|
8
8
|
|
|
9
9
|
--ae-tooltip-z-index: 1000;
|
|
10
|
-
--ae-tooltip-bg: var(--dark, #343a40);
|
|
10
|
+
--ae-tooltip-bg: var(--ae-dark, #343a40);
|
|
11
11
|
--ae-tooltip-color: #fff;
|
|
12
12
|
--ae-tooltip-padding: 0.3125rem 0.625rem;
|
|
13
13
|
--ae-tooltip-font-size: 0.8125rem;
|
|
14
|
-
--ae-tooltip-border-radius: 4px;
|
|
15
14
|
--ae-tooltip-arrow-size: 5px;
|
|
16
15
|
--ae-tooltip-gap: 6px;
|
|
17
16
|
--ae-tooltip-max-width: 20rem;
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
:host-context([theme="dark"]) {
|
|
21
|
-
--ae-tooltip-bg: var(--light, #f8f9fa);
|
|
22
|
-
--ae-tooltip-color: var(--dark, #343a40);
|
|
20
|
+
--ae-tooltip-bg: var(--ae-light, #f8f9fa);
|
|
21
|
+
--ae-tooltip-color: var(--ae-dark, #343a40);
|
|
23
22
|
}
|
|
24
23
|
|
|
25
24
|
.tooltip-panel {
|
|
@@ -31,7 +30,7 @@ const tooltipStyle = `:host {
|
|
|
31
30
|
padding: var(--ae-tooltip-padding);
|
|
32
31
|
font-size: var(--ae-tooltip-font-size);
|
|
33
32
|
font-family: inherit;
|
|
34
|
-
border-radius: var(--ae-
|
|
33
|
+
border-radius: var(--ae-border-radius, var(--ae-radius-sm));
|
|
35
34
|
line-height: 1.4;
|
|
36
35
|
white-space: nowrap;
|
|
37
36
|
max-width: var(--ae-tooltip-max-width);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","sources":["../../src/tooltip/tooltip.ts"],"sourcesContent":["import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport tooltipStyle from '../styles/components/tooltip.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html, prop } from 'aeico';\nimport type { TooltipPlacement, TooltipTrigger } from './defines';\n\n/**\n * Tooltip Component\n *\n * A floating label that appears on hover or focus around its trigger content.\n * Wrap any element in `<ae-tooltip>` and provide content via the `content`\n * attribute (plain text) or the `tooltip` named slot (rich HTML).\n *\n * @example\n * ```html\n * <ae-tooltip content=\"Save file\">\n * <ae-button>Save</ae-button>\n * </ae-tooltip>\n *\n * <ae-tooltip placement=\"bottom-start\">\n * <span slot=\"tooltip\"><strong>Bold</strong> tip</span>\n * <ae-icon-button name=\"info\"></ae-icon-button>\n * </ae-tooltip>\n * ```\n */\nclass Tooltip extends AeicoComponent {\n protected static styles = [styleVariables, tooltipStyle];\n\n @prop({ type: String })\n accessor content: string | undefined;\n\n @prop({ type: String })\n accessor placement: TooltipPlacement = 'top';\n\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n @prop({ type: String })\n accessor trigger: TooltipTrigger = 'hover';\n\n @prop({ type: Boolean })\n accessor open: boolean = false;\n\n private _outsideClickHandler: ((e: MouseEvent) => void) | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n this.listen('mouseenter', this._handleMouseEnter);\n this.listen('mouseleave', this._handleMouseLeave);\n this.listen('focusin', this._handleFocusin);\n this.listen('focusout', this._handleFocusout);\n this.listen('click', this._handleClick);\n\n this._outsideClickHandler = (e: MouseEvent) => {\n if (!this.open) return;\n if (!e.composedPath().includes(this)) this.open = false;\n };\n document.addEventListener('click', this._outsideClickHandler);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._outsideClickHandler) {\n document.removeEventListener('click', this._outsideClickHandler);\n this._outsideClickHandler = null;\n }\n }\n\n private _handleMouseEnter = () => {\n if (this.trigger !== 'hover') return;\n if (this.disabled) return;\n this.open = true;\n };\n\n private _handleMouseLeave = () => {\n if (this.trigger !== 'hover') return;\n this.open = false;\n };\n\n private _handleFocusin = () => {\n if (this.trigger !== 'hover') return;\n if (this.disabled) return;\n this.open = true;\n };\n\n private _handleFocusout = () => {\n if (this.trigger !== 'hover') return;\n this.open = false;\n };\n\n private _handleClick = () => {\n if (this.trigger !== 'click') return;\n if (this.disabled) return;\n this.open = !this.open;\n };\n\n private _updatePosition() {\n const panel = this.shadowRoot?.querySelector<HTMLElement>('.tooltip-panel');\n if (!panel) return;\n\n const host = this.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n const gap = 6; // Match --ae-tooltip-gap: 6px\n const pw = panelRect.width;\n const ph = panelRect.height;\n\n let top: number;\n let left: number;\n\n switch (this.placement) {\n case 'top-start':\n top = host.top - ph - gap;\n left = host.left;\n break;\n case 'top-end':\n top = host.top - ph - gap;\n left = host.right - pw;\n break;\n case 'bottom':\n top = host.bottom + gap;\n left = host.left + host.width / 2 - pw / 2;\n break;\n case 'bottom-start':\n top = host.bottom + gap;\n left = host.left;\n break;\n case 'bottom-end':\n top = host.bottom + gap;\n left = host.right - pw;\n break;\n case 'left':\n top = host.top + host.height / 2 - ph / 2;\n left = host.left - pw - gap;\n break;\n case 'right':\n top = host.top + host.height / 2 - ph / 2;\n left = host.right + gap;\n break;\n default: // 'top'\n top = host.top - ph - gap;\n left = host.left + host.width / 2 - pw / 2;\n }\n\n panel.style.top = `${top}px`;\n panel.style.left = `${left}px`;\n }\n\n protected onUpdated(changedProps: Map<string, unknown>) {\n if (changedProps.has('open') && this.open) {\n this._updatePosition();\n }\n }\n\n protected render() {\n return html(({ div, span, slot }) => {\n slot();\n div(\n {\n className: `tooltip-panel placement-${this.placement ?? 'top'}`,\n role: 'tooltip',\n 'aria-hidden': String(!this.open),\n },\n () => {\n slot({ name: 'tooltip' }, () => {\n span({ textContent: this.content ?? '' });\n });\n },\n );\n });\n }\n}\n\nTooltip.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-tooltip': Tooltip;\n }\n}\n\nexport type TooltipProps = InferProps<typeof Tooltip>;\nexport default Tooltip;\n"],"names":["_a","styleVariables"],"mappings":"
|
|
1
|
+
{"version":3,"file":"tooltip.js","sources":["../../src/tooltip/tooltip.ts"],"sourcesContent":["import type { InferProps } from 'aeico';\nimport styleVariables from '../styles/variables.css?inline';\nimport tooltipStyle from '../styles/components/tooltip.css?inline';\nimport AeicoComponent from '../aeico-component';\nimport { html, prop } from 'aeico';\nimport type { TooltipPlacement, TooltipTrigger } from './defines';\n\n/**\n * Tooltip Component\n *\n * A floating label that appears on hover or focus around its trigger content.\n * Wrap any element in `<ae-tooltip>` and provide content via the `content`\n * attribute (plain text) or the `tooltip` named slot (rich HTML).\n *\n * @example\n * ```html\n * <ae-tooltip content=\"Save file\">\n * <ae-button>Save</ae-button>\n * </ae-tooltip>\n *\n * <ae-tooltip placement=\"bottom-start\">\n * <span slot=\"tooltip\"><strong>Bold</strong> tip</span>\n * <ae-icon-button name=\"info\"></ae-icon-button>\n * </ae-tooltip>\n * ```\n */\nclass Tooltip extends AeicoComponent {\n protected static styles = [styleVariables, tooltipStyle];\n\n @prop({ type: String })\n accessor content: string | undefined;\n\n @prop({ type: String })\n accessor placement: TooltipPlacement = 'top';\n\n @prop({ type: Boolean })\n accessor disabled: boolean = false;\n\n @prop({ type: String })\n accessor trigger: TooltipTrigger = 'hover';\n\n @prop({ type: Boolean })\n accessor open: boolean = false;\n\n private _outsideClickHandler: ((e: MouseEvent) => void) | null = null;\n\n connectedCallback() {\n super.connectedCallback();\n this.listen('mouseenter', this._handleMouseEnter);\n this.listen('mouseleave', this._handleMouseLeave);\n this.listen('focusin', this._handleFocusin);\n this.listen('focusout', this._handleFocusout);\n this.listen('click', this._handleClick);\n\n this._outsideClickHandler = (e: MouseEvent) => {\n if (!this.open) return;\n if (!e.composedPath().includes(this)) this.open = false;\n };\n document.addEventListener('click', this._outsideClickHandler);\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this._outsideClickHandler) {\n document.removeEventListener('click', this._outsideClickHandler);\n this._outsideClickHandler = null;\n }\n }\n\n private _handleMouseEnter = () => {\n if (this.trigger !== 'hover') return;\n if (this.disabled) return;\n this.open = true;\n };\n\n private _handleMouseLeave = () => {\n if (this.trigger !== 'hover') return;\n this.open = false;\n };\n\n private _handleFocusin = () => {\n if (this.trigger !== 'hover') return;\n if (this.disabled) return;\n this.open = true;\n };\n\n private _handleFocusout = () => {\n if (this.trigger !== 'hover') return;\n this.open = false;\n };\n\n private _handleClick = () => {\n if (this.trigger !== 'click') return;\n if (this.disabled) return;\n this.open = !this.open;\n };\n\n private _updatePosition() {\n const panel = this.shadowRoot?.querySelector<HTMLElement>('.tooltip-panel');\n if (!panel) return;\n\n const host = this.getBoundingClientRect();\n const panelRect = panel.getBoundingClientRect();\n const gap = 6; // Match --ae-tooltip-gap: 6px\n const pw = panelRect.width;\n const ph = panelRect.height;\n\n let top: number;\n let left: number;\n\n switch (this.placement) {\n case 'top-start':\n top = host.top - ph - gap;\n left = host.left;\n break;\n case 'top-end':\n top = host.top - ph - gap;\n left = host.right - pw;\n break;\n case 'bottom':\n top = host.bottom + gap;\n left = host.left + host.width / 2 - pw / 2;\n break;\n case 'bottom-start':\n top = host.bottom + gap;\n left = host.left;\n break;\n case 'bottom-end':\n top = host.bottom + gap;\n left = host.right - pw;\n break;\n case 'left':\n top = host.top + host.height / 2 - ph / 2;\n left = host.left - pw - gap;\n break;\n case 'right':\n top = host.top + host.height / 2 - ph / 2;\n left = host.right + gap;\n break;\n default: // 'top'\n top = host.top - ph - gap;\n left = host.left + host.width / 2 - pw / 2;\n }\n\n panel.style.top = `${top}px`;\n panel.style.left = `${left}px`;\n }\n\n protected onUpdated(changedProps: Map<string, unknown>) {\n if (changedProps.has('open') && this.open) {\n this._updatePosition();\n }\n }\n\n protected render() {\n return html(({ div, span, slot }) => {\n slot();\n div(\n {\n className: `tooltip-panel placement-${this.placement ?? 'top'}`,\n role: 'tooltip',\n 'aria-hidden': String(!this.open),\n },\n () => {\n slot({ name: 'tooltip' }, () => {\n span({ textContent: this.content ?? '' });\n });\n },\n );\n });\n }\n}\n\nTooltip.register();\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'ae-tooltip': Tooltip;\n }\n}\n\nexport type TooltipProps = InferProps<typeof Tooltip>;\nexport default Tooltip;\n"],"names":["_a","styleVariables"],"mappings":"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"}
|
package/dist/chunks/tree.cjs
CHANGED
|
@@ -3,7 +3,7 @@ const aeicoComponent = require("./aeico-component.cjs");
|
|
|
3
3
|
const aeico = require("aeico");
|
|
4
4
|
const variables = require("./variables.cjs");
|
|
5
5
|
const style$1 = ":host {\n display: block;\n}\n\n.tree {\n display: block;\n padding: 0.25rem;\n box-sizing: border-box;\n user-select: none;\n}\n";
|
|
6
|
-
const style = ":host {\n display: block;\n --ae-tree-indent: 1.25rem;\n --tree-item-height: 2rem;\n --tree-item-font-size: 0.9375rem;\n --tree-item-color: var(--color-text-main, #343a40);\n --tree-item-color-disabled: var(--color-text-disabled, #bbb);\n --tree-item-bg-hover: var(--surface-raised, rgba(0, 0, 0, 0.04));\n --tree-item-bg-selected: var(--color-primary-bg-subtle, rgba(14, 99, 156, 0.08));\n --tree-item-color-selected: var(--color-primary, #0e639c);\n --tree-item-line-color: var(--border-default, rgba(0, 0, 0, 0.15));\n --tree-item-expand-size: 1rem;\n}\n\n.tree-item-content {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n height: var(--tree-item-height);\n padding-left: calc(var(--ae-tree-indent) * var(--depth, 0) + 0.25rem);\n padding-right: 0.5rem;\n font-size: var(--tree-item-font-size);\n color: var(--tree-item-color);\n cursor: pointer;\n user-select: none;\n border-radius: var(--ae-radius-sm
|
|
6
|
+
const style = ":host {\n display: block;\n --ae-tree-indent: 1.25rem;\n --tree-item-height: 2rem;\n --tree-item-font-size: 0.9375rem;\n --tree-item-color: var(--ae-color-text-main, #343a40);\n --tree-item-color-disabled: var(--ae-color-text-disabled, #bbb);\n --tree-item-bg-hover: var(--ae-surface-raised, rgba(0, 0, 0, 0.04));\n --tree-item-bg-selected: var(--ae-color-primary-bg-subtle, rgba(14, 99, 156, 0.08));\n --tree-item-color-selected: var(--ae-color-primary, #0e639c);\n --tree-item-line-color: var(--ae-border-default, rgba(0, 0, 0, 0.15));\n --tree-item-expand-size: 1rem;\n}\n\n.tree-item-content {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n height: var(--tree-item-height);\n padding-left: calc(var(--ae-tree-indent) * var(--depth, 0) + 0.25rem);\n padding-right: 0.5rem;\n font-size: var(--tree-item-font-size);\n color: var(--tree-item-color);\n cursor: pointer;\n user-select: none;\n border-radius: var(--ae-border-radius, var(--ae-radius-sm));\n transition: background 0.1s, color 0.1s;\n box-sizing: border-box;\n}\n\n.tree-item-content:hover {\n background: var(--tree-item-bg-hover);\n}\n\n.expand-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--tree-item-expand-size);\n height: var(--tree-item-expand-size);\n padding: 0;\n border: none;\n background: transparent;\n color: inherit;\n cursor: pointer;\n border-radius: var(--ae-border-radius, var(--ae-radius-sm));\n transition: transform 0.18s;\n outline: none;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.expand-btn:focus-visible {\n outline: 2px solid var(--ae-color-primary, #0e639c);\n outline-offset: 1px;\n}\n\n.expand-btn svg,\n.expand-btn ae-icon {\n display: block;\n width: 0.625rem;\n height: 0.625rem;\n fill: currentColor;\n transition: transform 0.18s;\n}\n\n/* ae-icon uses font-size for its internal sizing */\n.expand-btn ae-icon,\n.expand-placeholder ae-icon {\n font-size: 0.625rem;\n}\n\n:host([expanded]) .expand-btn svg,\n:host([expanded]) .expand-btn ae-icon {\n transform: rotate(90deg);\n}\n\n/* Leaf placeholder keeps alignment consistent */\n.expand-placeholder {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--tree-item-expand-size);\n height: var(--tree-item-expand-size);\n}\n\n.tree-item-checkbox {\n flex-shrink: 0;\n width: 0.875rem;\n height: 0.875rem;\n margin: 0;\n cursor: pointer;\n accent-color: var(--ae-color-primary, #0e639c);\n}\n\n.tree-item-label {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n height: 100%;\n padding: 0 0.25rem;\n border: none;\n background: transparent;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n text-align: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n outline: none;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.tree-item-label:focus-visible {\n outline: 2px solid var(--ae-color-primary, #0e639c);\n outline-offset: -2px;\n border-radius: var(--ae-border-radius, var(--ae-radius-sm));\n}\n\n:host([selected]) .tree-item-content {\n background: var(--tree-item-bg-selected);\n color: var(--tree-item-color-selected);\n}\n\n:host([disabled]) .tree-item-content {\n color: var(--tree-item-color-disabled);\n cursor: not-allowed;\n}\n\n:host([disabled]) .tree-item-content * {\n pointer-events: none;\n}\n\n.tree-item-children {\n display: none;\n}\n\n:host([expanded]) .tree-item-children {\n display: block;\n}\n\n:host([showline]) .tree-item-children {\n margin-left: calc(var(--ae-tree-indent) * var(--depth, 0) + 0.25rem + calc(var(--tree-item-expand-size) / 2));\n padding-left: calc(var(--ae-tree-indent) - calc(var(--tree-item-expand-size) / 2));\n border-left: 1px dashed var(--tree-item-line-color);\n}\n";
|
|
7
7
|
var __create$1 = Object.create;
|
|
8
8
|
var __defProp$1 = Object.defineProperty;
|
|
9
9
|
var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
|
package/dist/chunks/tree.js
CHANGED
|
@@ -2,7 +2,7 @@ import { S as SVG_NS, A as AeicoComponent } from "./aeico-component.js";
|
|
|
2
2
|
import { prop, html } from "aeico";
|
|
3
3
|
import { v as variables } from "./variables.js";
|
|
4
4
|
const style$1 = ":host {\n display: block;\n}\n\n.tree {\n display: block;\n padding: 0.25rem;\n box-sizing: border-box;\n user-select: none;\n}\n";
|
|
5
|
-
const style = ":host {\n display: block;\n --ae-tree-indent: 1.25rem;\n --tree-item-height: 2rem;\n --tree-item-font-size: 0.9375rem;\n --tree-item-color: var(--color-text-main, #343a40);\n --tree-item-color-disabled: var(--color-text-disabled, #bbb);\n --tree-item-bg-hover: var(--surface-raised, rgba(0, 0, 0, 0.04));\n --tree-item-bg-selected: var(--color-primary-bg-subtle, rgba(14, 99, 156, 0.08));\n --tree-item-color-selected: var(--color-primary, #0e639c);\n --tree-item-line-color: var(--border-default, rgba(0, 0, 0, 0.15));\n --tree-item-expand-size: 1rem;\n}\n\n.tree-item-content {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n height: var(--tree-item-height);\n padding-left: calc(var(--ae-tree-indent) * var(--depth, 0) + 0.25rem);\n padding-right: 0.5rem;\n font-size: var(--tree-item-font-size);\n color: var(--tree-item-color);\n cursor: pointer;\n user-select: none;\n border-radius: var(--ae-radius-sm
|
|
5
|
+
const style = ":host {\n display: block;\n --ae-tree-indent: 1.25rem;\n --tree-item-height: 2rem;\n --tree-item-font-size: 0.9375rem;\n --tree-item-color: var(--ae-color-text-main, #343a40);\n --tree-item-color-disabled: var(--ae-color-text-disabled, #bbb);\n --tree-item-bg-hover: var(--ae-surface-raised, rgba(0, 0, 0, 0.04));\n --tree-item-bg-selected: var(--ae-color-primary-bg-subtle, rgba(14, 99, 156, 0.08));\n --tree-item-color-selected: var(--ae-color-primary, #0e639c);\n --tree-item-line-color: var(--ae-border-default, rgba(0, 0, 0, 0.15));\n --tree-item-expand-size: 1rem;\n}\n\n.tree-item-content {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n height: var(--tree-item-height);\n padding-left: calc(var(--ae-tree-indent) * var(--depth, 0) + 0.25rem);\n padding-right: 0.5rem;\n font-size: var(--tree-item-font-size);\n color: var(--tree-item-color);\n cursor: pointer;\n user-select: none;\n border-radius: var(--ae-border-radius, var(--ae-radius-sm));\n transition: background 0.1s, color 0.1s;\n box-sizing: border-box;\n}\n\n.tree-item-content:hover {\n background: var(--tree-item-bg-hover);\n}\n\n.expand-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--tree-item-expand-size);\n height: var(--tree-item-expand-size);\n padding: 0;\n border: none;\n background: transparent;\n color: inherit;\n cursor: pointer;\n border-radius: var(--ae-border-radius, var(--ae-radius-sm));\n transition: transform 0.18s;\n outline: none;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.expand-btn:focus-visible {\n outline: 2px solid var(--ae-color-primary, #0e639c);\n outline-offset: 1px;\n}\n\n.expand-btn svg,\n.expand-btn ae-icon {\n display: block;\n width: 0.625rem;\n height: 0.625rem;\n fill: currentColor;\n transition: transform 0.18s;\n}\n\n/* ae-icon uses font-size for its internal sizing */\n.expand-btn ae-icon,\n.expand-placeholder ae-icon {\n font-size: 0.625rem;\n}\n\n:host([expanded]) .expand-btn svg,\n:host([expanded]) .expand-btn ae-icon {\n transform: rotate(90deg);\n}\n\n/* Leaf placeholder keeps alignment consistent */\n.expand-placeholder {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: var(--tree-item-expand-size);\n height: var(--tree-item-expand-size);\n}\n\n.tree-item-checkbox {\n flex-shrink: 0;\n width: 0.875rem;\n height: 0.875rem;\n margin: 0;\n cursor: pointer;\n accent-color: var(--ae-color-primary, #0e639c);\n}\n\n.tree-item-label {\n display: inline-flex;\n align-items: center;\n flex: 1;\n min-width: 0;\n height: 100%;\n padding: 0 0.25rem;\n border: none;\n background: transparent;\n color: inherit;\n font-size: inherit;\n font-family: inherit;\n text-align: left;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n cursor: pointer;\n outline: none;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.tree-item-label:focus-visible {\n outline: 2px solid var(--ae-color-primary, #0e639c);\n outline-offset: -2px;\n border-radius: var(--ae-border-radius, var(--ae-radius-sm));\n}\n\n:host([selected]) .tree-item-content {\n background: var(--tree-item-bg-selected);\n color: var(--tree-item-color-selected);\n}\n\n:host([disabled]) .tree-item-content {\n color: var(--tree-item-color-disabled);\n cursor: not-allowed;\n}\n\n:host([disabled]) .tree-item-content * {\n pointer-events: none;\n}\n\n.tree-item-children {\n display: none;\n}\n\n:host([expanded]) .tree-item-children {\n display: block;\n}\n\n:host([showline]) .tree-item-children {\n margin-left: calc(var(--ae-tree-indent) * var(--depth, 0) + 0.25rem + calc(var(--tree-item-expand-size) / 2));\n padding-left: calc(var(--ae-tree-indent) - calc(var(--tree-item-expand-size) / 2));\n border-left: 1px dashed var(--tree-item-line-color);\n}\n";
|
|
6
6
|
var __create$1 = Object.create;
|
|
7
7
|
var __defProp$1 = Object.defineProperty;
|
|
8
8
|
var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
|