@dogsbay/elements 0.2.0-beta.114 → 0.2.0-beta.116
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{base-BtvRtAsC.d.ts → base-D1Rz70fn.d.ts} +1 -0
- package/dist/chunk-3AEQ6KHV.js +70 -0
- package/dist/chunk-3AEQ6KHV.js.map +1 -0
- package/dist/chunk-3FMXAKOU.js +383 -0
- package/dist/chunk-3FMXAKOU.js.map +1 -0
- package/dist/{chunk-ZLIF4UYD.js → chunk-4YPDR3W6.js} +13 -4
- package/dist/chunk-4YPDR3W6.js.map +1 -0
- package/dist/{chunk-IMW234S2.js → chunk-CLUADA3G.js} +2 -2
- package/dist/chunk-EGU66XCL.js +116 -0
- package/dist/chunk-EGU66XCL.js.map +1 -0
- package/dist/{chunk-THLTJ2HB.js → chunk-ETBBSA3I.js} +2 -2
- package/dist/chunk-FIJZRZEN.js +90 -0
- package/dist/chunk-FIJZRZEN.js.map +1 -0
- package/dist/{chunk-ABP4WEKU.js → chunk-K6DPDBAG.js} +25 -2
- package/dist/chunk-K6DPDBAG.js.map +1 -0
- package/dist/{chunk-5S2MMI3R.js → chunk-LAUNXWKJ.js} +2 -2
- package/dist/chunk-MAD6XJY4.js +256 -0
- package/dist/chunk-MAD6XJY4.js.map +1 -0
- package/dist/chunk-MEOIAZDF.js +140 -0
- package/dist/chunk-MEOIAZDF.js.map +1 -0
- package/dist/{chunk-WTARNLNI.js → chunk-QSRUT67Y.js} +2 -2
- package/dist/chunk-S62ZVVO3.js +234 -0
- package/dist/chunk-S62ZVVO3.js.map +1 -0
- package/dist/chunk-SLJG53M7.js +208 -0
- package/dist/chunk-SLJG53M7.js.map +1 -0
- package/dist/{chunk-RVJC6M2U.js → chunk-V4P3UR4I.js} +2 -2
- package/dist/{chunk-VJXEM5O6.js → chunk-VW7HZY2B.js} +2 -2
- package/dist/db-accordion.d.ts +1 -1
- package/dist/db-accordion.js +2 -2
- package/dist/db-card.d.ts +1 -1
- package/dist/db-card.js +2 -2
- package/dist/db-code-block.d.ts +1 -1
- package/dist/db-code-block.js +2 -2
- package/dist/db-collapsible.d.ts +1 -1
- package/dist/db-collapsible.js +2 -2
- package/dist/db-combobox.d.ts +70 -0
- package/dist/db-combobox.js +9 -0
- package/dist/db-combobox.js.map +1 -0
- package/dist/db-dialog.d.ts +62 -0
- package/dist/db-dialog.js +9 -0
- package/dist/db-dialog.js.map +1 -0
- package/dist/db-link-button.d.ts +1 -1
- package/dist/db-link-button.js +2 -2
- package/dist/db-nav-tree.d.ts +83 -0
- package/dist/db-nav-tree.js +9 -0
- package/dist/db-nav-tree.js.map +1 -0
- package/dist/db-popover.d.ts +42 -0
- package/dist/db-popover.js +9 -0
- package/dist/db-popover.js.map +1 -0
- package/dist/db-select.d.ts +72 -0
- package/dist/db-select.js +9 -0
- package/dist/db-select.js.map +1 -0
- package/dist/db-steps.d.ts +1 -1
- package/dist/db-steps.js +2 -2
- package/dist/db-tabs.d.ts +8 -1
- package/dist/db-tabs.js +2 -2
- package/dist/db-toc.d.ts +32 -0
- package/dist/db-toc.js +8 -0
- package/dist/db-toc.js.map +1 -0
- package/dist/db-tooltip.d.ts +48 -0
- package/dist/db-tooltip.js +9 -0
- package/dist/db-tooltip.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.js +40 -11
- package/package.json +30 -2
- package/dist/chunk-ABP4WEKU.js.map +0 -1
- package/dist/chunk-ZLIF4UYD.js.map +0 -1
- /package/dist/{chunk-IMW234S2.js.map → chunk-CLUADA3G.js.map} +0 -0
- /package/dist/{chunk-THLTJ2HB.js.map → chunk-ETBBSA3I.js.map} +0 -0
- /package/dist/{chunk-5S2MMI3R.js.map → chunk-LAUNXWKJ.js.map} +0 -0
- /package/dist/{chunk-WTARNLNI.js.map → chunk-QSRUT67Y.js.map} +0 -0
- /package/dist/{chunk-RVJC6M2U.js.map → chunk-V4P3UR4I.js.map} +0 -0
- /package/dist/{chunk-VJXEM5O6.js.map → chunk-VW7HZY2B.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { D as DogsbayElement } from './base-D1Rz70fn.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* `<db-tooltip>` — Short description shown on hover and keyboard focus
|
|
5
|
+
* (APG "Tooltip"). The trigger is described by the content
|
|
6
|
+
* (aria-describedby), so screen readers announce it without showing it.
|
|
7
|
+
*
|
|
8
|
+
* WCAG 1.4.13 (content on hover or focus):
|
|
9
|
+
* - hoverable: the pointer can move from the trigger onto the tooltip
|
|
10
|
+
* without it closing (`close-delay`, default 100 ms);
|
|
11
|
+
* - dismissible: Escape hides it, whether it opened from hover or focus;
|
|
12
|
+
* - persistent: it stays until the pointer leaves, focus moves or Escape.
|
|
13
|
+
*
|
|
14
|
+
* Attributes:
|
|
15
|
+
* delay — ms before showing on hover (default 200)
|
|
16
|
+
* close-delay — ms grace period on leave (default 100)
|
|
17
|
+
* placement — "top" (default), or data-side on the content
|
|
18
|
+
*
|
|
19
|
+
* Parts: [data-part="trigger"] (`data-as-child` supported), [data-part="content"]
|
|
20
|
+
*
|
|
21
|
+
* Events: db-tooltip:open, db-tooltip:close
|
|
22
|
+
*/
|
|
23
|
+
declare class DbTooltip extends DogsbayElement {
|
|
24
|
+
private trigger;
|
|
25
|
+
private content;
|
|
26
|
+
private cleanupFloating;
|
|
27
|
+
private showTimer;
|
|
28
|
+
private hideTimer;
|
|
29
|
+
private _open;
|
|
30
|
+
get open(): boolean;
|
|
31
|
+
private num;
|
|
32
|
+
private onEnter;
|
|
33
|
+
private onLeave;
|
|
34
|
+
private onContentEnter;
|
|
35
|
+
private onFocus;
|
|
36
|
+
private onBlur;
|
|
37
|
+
private onPress;
|
|
38
|
+
private onKey;
|
|
39
|
+
protected setup(): void;
|
|
40
|
+
protected connect(): void;
|
|
41
|
+
protected disconnect(): void;
|
|
42
|
+
private clearTimers;
|
|
43
|
+
private setState;
|
|
44
|
+
show(): void;
|
|
45
|
+
hide(): void;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { DbTooltip };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { D as DogsbayElement } from './base-
|
|
1
|
+
export { D as DogsbayElement } from './base-D1Rz70fn.js';
|
|
2
2
|
export { DbTabs } from './db-tabs.js';
|
|
3
3
|
export { DbCollapsible } from './db-collapsible.js';
|
|
4
4
|
export { DbAccordion } from './db-accordion.js';
|
|
@@ -6,3 +6,10 @@ export { DbSteps } from './db-steps.js';
|
|
|
6
6
|
export { DbCodeBlock } from './db-code-block.js';
|
|
7
7
|
export { DbCard } from './db-card.js';
|
|
8
8
|
export { DbLinkButton } from './db-link-button.js';
|
|
9
|
+
export { DbDialog } from './db-dialog.js';
|
|
10
|
+
export { DbPopover } from './db-popover.js';
|
|
11
|
+
export { DbTooltip } from './db-tooltip.js';
|
|
12
|
+
export { DbSelect } from './db-select.js';
|
|
13
|
+
export { DbCombobox } from './db-combobox.js';
|
|
14
|
+
export { DbNavTree, NavData } from './db-nav-tree.js';
|
|
15
|
+
export { DbToc } from './db-toc.js';
|
package/dist/index.js
CHANGED
|
@@ -1,35 +1,64 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DbPopover
|
|
3
|
+
} from "./chunk-EGU66XCL.js";
|
|
4
|
+
import {
|
|
5
|
+
DbSelect
|
|
6
|
+
} from "./chunk-3FMXAKOU.js";
|
|
7
|
+
import {
|
|
8
|
+
DbSteps
|
|
9
|
+
} from "./chunk-VW7HZY2B.js";
|
|
10
|
+
import {
|
|
11
|
+
DbTabs
|
|
12
|
+
} from "./chunk-4YPDR3W6.js";
|
|
13
|
+
import {
|
|
14
|
+
DbToc
|
|
15
|
+
} from "./chunk-FIJZRZEN.js";
|
|
16
|
+
import {
|
|
17
|
+
DbTooltip
|
|
18
|
+
} from "./chunk-MEOIAZDF.js";
|
|
1
19
|
import {
|
|
2
20
|
DbAccordion
|
|
3
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-CLUADA3G.js";
|
|
4
22
|
import {
|
|
5
23
|
DbCard
|
|
6
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-ETBBSA3I.js";
|
|
7
25
|
import {
|
|
8
26
|
DbCodeBlock
|
|
9
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-V4P3UR4I.js";
|
|
10
28
|
import {
|
|
11
29
|
DbCollapsible
|
|
12
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-LAUNXWKJ.js";
|
|
13
31
|
import {
|
|
14
|
-
|
|
15
|
-
} from "./chunk-
|
|
32
|
+
DbCombobox
|
|
33
|
+
} from "./chunk-MAD6XJY4.js";
|
|
16
34
|
import {
|
|
17
|
-
|
|
18
|
-
} from "./chunk-
|
|
35
|
+
DbDialog
|
|
36
|
+
} from "./chunk-SLJG53M7.js";
|
|
19
37
|
import {
|
|
20
|
-
|
|
21
|
-
} from "./chunk-
|
|
38
|
+
DbLinkButton
|
|
39
|
+
} from "./chunk-QSRUT67Y.js";
|
|
40
|
+
import {
|
|
41
|
+
DbNavTree
|
|
42
|
+
} from "./chunk-S62ZVVO3.js";
|
|
43
|
+
import "./chunk-3AEQ6KHV.js";
|
|
22
44
|
import {
|
|
23
45
|
DogsbayElement
|
|
24
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-K6DPDBAG.js";
|
|
25
47
|
export {
|
|
26
48
|
DbAccordion,
|
|
27
49
|
DbCard,
|
|
28
50
|
DbCodeBlock,
|
|
29
51
|
DbCollapsible,
|
|
52
|
+
DbCombobox,
|
|
53
|
+
DbDialog,
|
|
30
54
|
DbLinkButton,
|
|
55
|
+
DbNavTree,
|
|
56
|
+
DbPopover,
|
|
57
|
+
DbSelect,
|
|
31
58
|
DbSteps,
|
|
32
59
|
DbTabs,
|
|
60
|
+
DbToc,
|
|
61
|
+
DbTooltip,
|
|
33
62
|
DogsbayElement
|
|
34
63
|
};
|
|
35
64
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dogsbay/elements",
|
|
3
|
-
"version": "0.2.0-beta.
|
|
3
|
+
"version": "0.2.0-beta.116",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -36,13 +36,41 @@
|
|
|
36
36
|
"./db-link-button": {
|
|
37
37
|
"types": "./dist/db-link-button.d.ts",
|
|
38
38
|
"import": "./dist/db-link-button.js"
|
|
39
|
+
},
|
|
40
|
+
"./db-dialog": {
|
|
41
|
+
"types": "./dist/db-dialog.d.ts",
|
|
42
|
+
"import": "./dist/db-dialog.js"
|
|
43
|
+
},
|
|
44
|
+
"./db-popover": {
|
|
45
|
+
"types": "./dist/db-popover.d.ts",
|
|
46
|
+
"import": "./dist/db-popover.js"
|
|
47
|
+
},
|
|
48
|
+
"./db-tooltip": {
|
|
49
|
+
"types": "./dist/db-tooltip.d.ts",
|
|
50
|
+
"import": "./dist/db-tooltip.js"
|
|
51
|
+
},
|
|
52
|
+
"./db-select": {
|
|
53
|
+
"types": "./dist/db-select.d.ts",
|
|
54
|
+
"import": "./dist/db-select.js"
|
|
55
|
+
},
|
|
56
|
+
"./db-combobox": {
|
|
57
|
+
"types": "./dist/db-combobox.d.ts",
|
|
58
|
+
"import": "./dist/db-combobox.js"
|
|
59
|
+
},
|
|
60
|
+
"./db-nav-tree": {
|
|
61
|
+
"types": "./dist/db-nav-tree.d.ts",
|
|
62
|
+
"import": "./dist/db-nav-tree.js"
|
|
63
|
+
},
|
|
64
|
+
"./db-toc": {
|
|
65
|
+
"types": "./dist/db-toc.d.ts",
|
|
66
|
+
"import": "./dist/db-toc.js"
|
|
39
67
|
}
|
|
40
68
|
},
|
|
41
69
|
"files": [
|
|
42
70
|
"dist"
|
|
43
71
|
],
|
|
44
72
|
"dependencies": {
|
|
45
|
-
"@dogsbay/primitives": "0.2.0-beta.
|
|
73
|
+
"@dogsbay/primitives": "0.2.0-beta.116"
|
|
46
74
|
},
|
|
47
75
|
"devDependencies": {
|
|
48
76
|
"happy-dom": "^20.10.6",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/base.ts"],"sourcesContent":["/**\n * Base class for Dogsbay custom elements.\n *\n * Handles the connect/disconnect lifecycle and ensures one-time setup\n * runs only once even when Obsidian's virtual scrolling removes and\n * re-adds elements to the DOM.\n */\nexport abstract class DogsbayElement extends HTMLElement {\n private _initialized = false;\n\n connectedCallback() {\n if (!this._initialized) {\n this.setup();\n this._initialized = true;\n }\n this.connect();\n }\n\n disconnectedCallback() {\n this.disconnect();\n }\n\n /** One-time setup: query children, generate IDs, set ARIA. */\n protected setup() {}\n\n /** Called on every connect: attach event listeners. */\n protected connect() {}\n\n /** Called on every disconnect: remove event listeners. */\n protected disconnect() {}\n}\n\n/**\n * Default `display` for each element.\n *\n * Custom elements have NO user-agent style, so an unstyled one is\n * `display: inline`. That is silently wrong for a container: `w-full`\n * does nothing on an inline box, and a border renders as detached\n * fragments at the start and end of the inline run rather than around\n * the content.\n *\n * `<db-tabs>` carries `border rounded-lg overflow-hidden w-full` from\n * Tabs.astro, so it showed short vertical bars above and below every\n * tab group on every generated site. The other six had the same defect\n * without a border to make it visible.\n */\nconst DEFAULT_DISPLAY: Record<string, string> = {\n \"db-tabs\": \"block\",\n \"db-accordion\": \"block\",\n \"db-collapsible\": \"block\",\n \"db-card\": \"block\",\n \"db-steps\": \"block\",\n \"db-code-block\": \"block\",\n // A link styled as a button — sits in a line of prose.\n \"db-link-button\": \"inline-block\",\n};\n\nconst STYLE_ID = \"dogsbay-elements-display\";\n\n/**\n * Give the elements a sane default `display`.\n *\n * Injected from here rather than shipped as CSS because a Dogsbay site\n * scaffolds `global.css` ONCE and copies UI components as source — so\n * neither updates when a package does. The element JS is the only part\n * of an existing site that a version bump actually reaches.\n *\n * `:where()` keeps specificity at zero, so ANY author rule or utility\n * class overrides it — this sets a default, it does not win arguments.\n *\n * Idempotent: safe to call from every element module, and Obsidian's\n * virtual scrolling re-registers freely.\n */\nexport function ensureDefaultDisplay(): void {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n\n const rules = Object.entries(DEFAULT_DISPLAY)\n .map(([tag, display]) => `:where(${tag}){display:${display}}`)\n .join(\"\");\n\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = rules;\n // Prepend so a later author stylesheet wins on equal specificity.\n document.head.prepend(style);\n}\n"],"mappings":";AAOO,IAAe,iBAAf,cAAsC,YAAY;AAAA,EAC/C,eAAe;AAAA,EAEvB,oBAAoB;AAClB,QAAI,CAAC,KAAK,cAAc;AACtB,WAAK,MAAM;AACX,WAAK,eAAe;AAAA,IACtB;AACA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,uBAAuB;AACrB,SAAK,WAAW;AAAA,EAClB;AAAA;AAAA,EAGU,QAAQ;AAAA,EAAC;AAAA;AAAA,EAGT,UAAU;AAAA,EAAC;AAAA;AAAA,EAGX,aAAa;AAAA,EAAC;AAC1B;AAgBA,IAAM,kBAA0C;AAAA,EAC9C,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,iBAAiB;AAAA;AAAA,EAEjB,kBAAkB;AACpB;AAEA,IAAM,WAAW;AAgBV,SAAS,uBAA6B;AAC3C,MAAI,OAAO,aAAa,YAAa;AACrC,MAAI,SAAS,eAAe,QAAQ,EAAG;AAEvC,QAAM,QAAQ,OAAO,QAAQ,eAAe,EACzC,IAAI,CAAC,CAAC,KAAK,OAAO,MAAM,UAAU,GAAG,aAAa,OAAO,GAAG,EAC5D,KAAK,EAAE;AAEV,QAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAM,KAAK;AACX,QAAM,cAAc;AAEpB,WAAS,KAAK,QAAQ,KAAK;AAC7B;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/db-tabs.ts"],"sourcesContent":["import { CompositeNavigation } from \"@dogsbay/primitives/composite\";\nimport type { Orientation } from \"@dogsbay/primitives/composite\";\nimport { DogsbayElement, ensureDefaultDisplay } from \"./base.js\";\n\nlet idCounter = 0;\nfunction uniqueId(prefix: string) {\n return `${prefix}-${++idCounter}`;\n}\n\n/**\n * `<db-tabs>` — Accessible tabbed interface.\n *\n * Attributes:\n * default-value — initial selected tab value\n * orientation — \"horizontal\" (default) or \"vertical\"\n * sync-key — sync selection across instances via localStorage\n *\n * Children:\n * [data-part=\"list\"] — tablist container\n * [data-part=\"trigger\"] — tab buttons (must have data-value)\n * [data-part=\"content\"] — tab panels (must have data-value)\n *\n * Events:\n * db-tabs:change — fired on selection change, detail: { value }\n */\nexport class DbTabs extends DogsbayElement {\n private list!: HTMLElement;\n private triggers: HTMLElement[] = [];\n private panels: HTMLElement[] = [];\n private nav: CompositeNavigation | null = null;\n private value = \"\";\n private syncKey: string | null = null;\n private orientation: Orientation = \"horizontal\";\n\n private handleClick = (e: Event) => {\n const trigger = (e.target as HTMLElement).closest(\n \"[data-part='trigger']\",\n ) as HTMLElement | null;\n if (!trigger || trigger.hasAttribute(\"disabled\")) return;\n const value = trigger.dataset.value;\n if (value) this.select(value);\n };\n\n private handleStorage = (e: StorageEvent) => {\n if (!this.syncKey || e.key !== `db-tabs-sync:${this.syncKey}`) return;\n const newValue = e.newValue;\n if (newValue && this.value !== newValue) {\n this.select(newValue);\n }\n };\n\n private handleSyncEvent = ((e: CustomEvent) => {\n const newValue = e.detail.value;\n if (newValue && this.value !== newValue) {\n this.select(newValue);\n }\n }) as EventListener;\n\n /**\n * Descendants belonging to THIS tab group.\n *\n * Not `:scope >`, and not a bare descendant query — both were wrong\n * here, in opposite directions:\n *\n * - Panels used `:scope > [data-part='content']`, so any wrapper\n * between the element and its panels hid them. The vertical example\n * wraps its list and panels in a flex row to sit them side by side,\n * so `panels` was EMPTY: triggers moved `aria-selected`, and the\n * content never changed. Nothing threw, and the server-rendered\n * initial state looked right, so it read as working.\n * - Triggers used a bare descendant query, which would reach into a\n * NESTED tab group and drive the wrong panels.\n *\n * `closest(\"db-tabs\") === this` allows arbitrary wrappers while\n * stopping at a nested group, which is a real case — Obsidian\n * alternates fence characters by depth precisely so tabs can nest.\n */\n private own(selector: string): HTMLElement[] {\n return (\n Array.from(this.querySelectorAll(selector)) as HTMLElement[]\n ).filter((el) => el.closest(\"db-tabs\") === this);\n }\n\n protected setup() {\n const list = this.own(\"[data-part='list']\")[0] ?? null;\n if (!list) return;\n this.list = list;\n\n this.triggers = this.own(\"[data-part='trigger']\");\n this.panels = this.own(\"[data-part='content']\");\n\n this.orientation =\n (this.getAttribute(\"orientation\") as Orientation) || \"horizontal\";\n this.syncKey = this.getAttribute(\"sync-key\") || null;\n\n // Set orientation on tablist\n list.setAttribute(\"role\", \"tablist\");\n list.setAttribute(\"aria-orientation\", this.orientation);\n\n // Generate IDs and link triggers ↔ panels\n this.triggers.forEach((trigger) => {\n const value = trigger.dataset.value!;\n trigger.setAttribute(\"role\", \"tab\");\n const triggerId = trigger.id || uniqueId(\"db-tab\");\n trigger.id = triggerId;\n\n const panel = this.panels.find((p) => p.dataset.value === value);\n if (panel) {\n panel.setAttribute(\"role\", \"tabpanel\");\n const panelId = panel.id || uniqueId(\"db-tabpanel\");\n panel.id = panelId;\n trigger.setAttribute(\"aria-controls\", panelId);\n panel.setAttribute(\"aria-labelledby\", triggerId);\n }\n });\n\n // Set up composite navigation\n this.nav = new CompositeNavigation(list, \"[data-part='trigger']\", {\n orientation: this.orientation,\n loop: true,\n homeEnd: true,\n onHighlightedIndexChange: () => {\n const focused = document.activeElement as HTMLElement;\n const value = focused?.dataset?.value;\n if (value) this.select(value);\n },\n });\n\n this.nav.activate();\n\n // Determine initial value: hash > localStorage > default-value > first trigger\n const defaultValue =\n this.getAttribute(\"default-value\") ||\n this.triggers[0]?.dataset.value ||\n \"\";\n\n let initialValue = defaultValue;\n if (this.syncKey) {\n const stored = localStorage.getItem(`db-tabs-sync:${this.syncKey}`);\n if (stored && this.triggers.some((t) => t.dataset.value === stored)) {\n initialValue = stored;\n }\n }\n const hash = window.location.hash.slice(1);\n if (hash && this.triggers.some((t) => t.dataset.value === hash)) {\n initialValue = hash;\n }\n\n this.select(initialValue);\n }\n\n protected connect() {\n this.list?.addEventListener(\"click\", this.handleClick);\n if (this.syncKey) {\n window.addEventListener(\"storage\", this.handleStorage);\n document.addEventListener(\n `db-tabs-sync:${this.syncKey}`,\n this.handleSyncEvent,\n );\n }\n }\n\n protected disconnect() {\n this.list?.removeEventListener(\"click\", this.handleClick);\n if (this.syncKey) {\n window.removeEventListener(\"storage\", this.handleStorage);\n document.removeEventListener(\n `db-tabs-sync:${this.syncKey}`,\n this.handleSyncEvent,\n );\n }\n }\n\n select(value: string) {\n if (this.value === value) return;\n this.value = value;\n\n // Update triggers\n this.triggers.forEach((trigger) => {\n const isSelected = trigger.dataset.value === value;\n trigger.setAttribute(\"aria-selected\", String(isSelected));\n trigger.setAttribute(\"tabindex\", isSelected ? \"0\" : \"-1\");\n if (isSelected) {\n trigger.setAttribute(\"data-state\", \"active\");\n } else {\n trigger.removeAttribute(\"data-state\");\n }\n });\n\n // Update panels\n this.panels.forEach((panel) => {\n const isActive = panel.dataset.value === value;\n panel.hidden = !isActive;\n if (isActive) {\n panel.setAttribute(\"data-state\", \"active\");\n if (!panel.hasAttribute(\"tabindex\")) {\n panel.setAttribute(\"tabindex\", \"0\");\n }\n // Lazy init: upgrade any nested db-tabs that haven't connected yet\n // (browser handles this automatically via connectedCallback)\n } else {\n panel.removeAttribute(\"data-state\");\n }\n });\n\n // Sync to localStorage and other instances\n if (this.syncKey) {\n localStorage.setItem(`db-tabs-sync:${this.syncKey}`, value);\n document.dispatchEvent(\n new CustomEvent(`db-tabs-sync:${this.syncKey}`, {\n detail: { value, source: this },\n }),\n );\n }\n\n // Dispatch change event\n this.dispatchEvent(\n new CustomEvent(\"db-tabs:change\", {\n detail: { value },\n bubbles: true,\n }),\n );\n }\n}\n\nensureDefaultDisplay();\n\nif (!customElements.get(\"db-tabs\")) {\n customElements.define(\"db-tabs\", DbTabs);\n}\n"],"mappings":"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","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|