@emkodev/emroute 1.6.2 → 1.6.3
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 +6 -6
- package/dist/runtime/abstract.runtime.d.ts +94 -0
- package/dist/runtime/abstract.runtime.js +339 -0
- package/dist/runtime/abstract.runtime.js.map +1 -0
- package/dist/runtime/bun/esbuild-runtime-loader.plugin.d.ts +25 -0
- package/dist/runtime/bun/esbuild-runtime-loader.plugin.js +72 -0
- package/dist/runtime/bun/esbuild-runtime-loader.plugin.js.map +1 -0
- package/dist/runtime/bun/fs/bun-fs.runtime.d.ts +21 -0
- package/dist/runtime/bun/fs/bun-fs.runtime.js +205 -0
- package/dist/runtime/bun/fs/bun-fs.runtime.js.map +1 -0
- package/dist/runtime/bun/sqlite/bun-sqlite.runtime.d.ts +27 -0
- package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js +234 -0
- package/dist/runtime/bun/sqlite/bun-sqlite.runtime.js.map +1 -0
- package/dist/runtime/sitemap.generator.d.ts +58 -0
- package/dist/runtime/sitemap.generator.js +107 -0
- package/dist/runtime/sitemap.generator.js.map +1 -0
- package/dist/runtime/universal/fs/universal-fs.runtime.d.ts +29 -0
- package/dist/runtime/universal/fs/universal-fs.runtime.js +213 -0
- package/dist/runtime/universal/fs/universal-fs.runtime.js.map +1 -0
- package/dist/server/codegen.util.d.ts +16 -0
- package/dist/server/codegen.util.js +46 -0
- package/dist/server/codegen.util.js.map +1 -0
- package/dist/server/emroute.server.d.ts +37 -0
- package/dist/server/emroute.server.js +314 -0
- package/dist/server/emroute.server.js.map +1 -0
- package/dist/server/esbuild-manifest.plugin.d.ts +26 -0
- package/dist/server/esbuild-manifest.plugin.js +187 -0
- package/dist/server/esbuild-manifest.plugin.js.map +1 -0
- package/dist/server/scanner.util.d.ts +22 -0
- package/dist/server/scanner.util.js +194 -0
- package/dist/server/scanner.util.js.map +1 -0
- package/dist/server/server-api.type.d.ts +71 -0
- package/dist/server/server-api.type.js +9 -0
- package/dist/server/server-api.type.js.map +1 -0
- package/dist/src/component/abstract.component.d.ts +197 -0
- package/dist/src/component/abstract.component.js +84 -0
- package/dist/src/component/abstract.component.js.map +1 -0
- package/dist/src/component/page.component.d.ts +74 -0
- package/dist/src/component/page.component.js +107 -0
- package/dist/src/component/page.component.js.map +1 -0
- package/dist/src/component/widget.component.d.ts +47 -0
- package/dist/src/component/widget.component.js +69 -0
- package/dist/src/component/widget.component.js.map +1 -0
- package/dist/src/element/component.element.d.ts +79 -0
- package/dist/src/element/component.element.js +293 -0
- package/dist/src/element/component.element.js.map +1 -0
- package/dist/src/element/markdown.element.d.ts +36 -0
- package/dist/src/element/markdown.element.js +93 -0
- package/dist/src/element/markdown.element.js.map +1 -0
- package/dist/src/element/slot.element.d.ts +30 -0
- package/dist/src/element/slot.element.js +31 -0
- package/dist/src/element/slot.element.js.map +1 -0
- package/dist/src/index.d.ts +23 -0
- package/dist/src/index.js +24 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/overlay/mod.d.ts +9 -0
- package/dist/src/overlay/mod.js +9 -0
- package/dist/src/overlay/mod.js.map +1 -0
- package/dist/src/overlay/overlay.css.d.ts +8 -0
- package/dist/src/overlay/overlay.css.js +170 -0
- package/dist/src/overlay/overlay.css.js.map +1 -0
- package/dist/src/overlay/overlay.service.d.ts +14 -0
- package/dist/src/overlay/overlay.service.js +307 -0
- package/dist/src/overlay/overlay.service.js.map +1 -0
- package/dist/src/overlay/overlay.type.d.ts +33 -0
- package/dist/src/overlay/overlay.type.js +11 -0
- package/dist/src/overlay/overlay.type.js.map +1 -0
- package/dist/src/renderer/spa/base.renderer.d.ts +39 -0
- package/dist/src/renderer/spa/base.renderer.js +149 -0
- package/dist/src/renderer/spa/base.renderer.js.map +1 -0
- package/dist/src/renderer/spa/hash.renderer.d.ts +78 -0
- package/dist/src/renderer/spa/hash.renderer.js +162 -0
- package/dist/src/renderer/spa/hash.renderer.js.map +1 -0
- package/dist/src/renderer/spa/html.renderer.d.ts +81 -0
- package/dist/src/renderer/spa/html.renderer.js +304 -0
- package/dist/src/renderer/spa/html.renderer.js.map +1 -0
- package/dist/src/renderer/spa/mod.d.ts +30 -0
- package/dist/src/renderer/spa/mod.js +35 -0
- package/dist/src/renderer/spa/mod.js.map +1 -0
- package/dist/src/renderer/ssr/html.renderer.d.ts +49 -0
- package/dist/src/renderer/ssr/html.renderer.js +108 -0
- package/dist/src/renderer/ssr/html.renderer.js.map +1 -0
- package/dist/src/renderer/ssr/md.renderer.d.ts +40 -0
- package/dist/src/renderer/ssr/md.renderer.js +100 -0
- package/dist/src/renderer/ssr/md.renderer.js.map +1 -0
- package/dist/src/renderer/ssr/ssr.renderer.d.ts +74 -0
- package/dist/src/renderer/ssr/ssr.renderer.js +185 -0
- package/dist/src/renderer/ssr/ssr.renderer.js.map +1 -0
- package/dist/src/route/route.core.d.ts +129 -0
- package/dist/src/route/route.core.js +255 -0
- package/dist/src/route/route.core.js.map +1 -0
- package/dist/src/route/route.matcher.d.ts +86 -0
- package/dist/src/route/route.matcher.js +214 -0
- package/dist/src/route/route.matcher.js.map +1 -0
- package/dist/src/type/logger.type.d.ts +17 -0
- package/dist/src/type/logger.type.js +9 -0
- package/dist/src/type/logger.type.js.map +1 -0
- package/dist/src/type/markdown.type.d.ts +20 -0
- package/dist/src/type/markdown.type.js +2 -0
- package/dist/src/type/markdown.type.js.map +1 -0
- package/dist/src/type/route.type.d.ts +112 -0
- package/dist/src/type/route.type.js +8 -0
- package/dist/src/type/route.type.js.map +1 -0
- package/dist/src/type/widget.type.d.ts +55 -0
- package/dist/src/type/widget.type.js +10 -0
- package/dist/src/type/widget.type.js.map +1 -0
- package/dist/src/util/html.util.d.ts +29 -0
- package/dist/src/util/html.util.js +158 -0
- package/dist/src/util/html.util.js.map +1 -0
- package/dist/src/util/logger.util.d.ts +26 -0
- package/dist/src/util/logger.util.js +80 -0
- package/dist/src/util/logger.util.js.map +1 -0
- package/dist/src/util/widget-resolve.util.d.ts +52 -0
- package/dist/src/util/widget-resolve.util.js +149 -0
- package/dist/src/util/widget-resolve.util.js.map +1 -0
- package/dist/src/widget/breadcrumb.widget.d.ts +48 -0
- package/dist/src/widget/breadcrumb.widget.js +72 -0
- package/dist/src/widget/breadcrumb.widget.js.map +1 -0
- package/dist/src/widget/page-title.widget.d.ts +33 -0
- package/dist/src/widget/page-title.widget.js +33 -0
- package/dist/src/widget/page-title.widget.js.map +1 -0
- package/dist/src/widget/widget.parser.d.ts +26 -0
- package/dist/src/widget/widget.parser.js +76 -0
- package/dist/src/widget/widget.parser.js.map +1 -0
- package/dist/src/widget/widget.registry.d.ts +23 -0
- package/dist/src/widget/widget.registry.js +42 -0
- package/dist/src/widget/widget.registry.js.map +1 -0
- package/package.json +72 -13
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Markdown Element — <mark-down> custom element.
|
|
3
|
+
*
|
|
4
|
+
* Renders markdown content with pluggable renderer.
|
|
5
|
+
* Supports:
|
|
6
|
+
* - Inline content: <mark-down># Title</mark-down>
|
|
7
|
+
* - Source attribute: <mark-down src="/path/to.md"></mark-down>
|
|
8
|
+
*/
|
|
9
|
+
import { escapeHtml, HTMLElementBase } from "../util/html.util.js";
|
|
10
|
+
export class MarkdownElement extends HTMLElementBase {
|
|
11
|
+
static renderer = null;
|
|
12
|
+
static rendererInitPromise = null;
|
|
13
|
+
abortController = null;
|
|
14
|
+
/**
|
|
15
|
+
* Set the markdown renderer.
|
|
16
|
+
* Must be called before any <mark-down> elements are connected.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* import { createEmkoRenderer } from './emko.renderer.ts';
|
|
21
|
+
* MarkdownElement.setRenderer(await createEmkoRenderer());
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
static setRenderer(renderer) {
|
|
25
|
+
MarkdownElement.renderer = renderer;
|
|
26
|
+
MarkdownElement.rendererInitPromise = renderer.init ? renderer.init() : null;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get the current renderer, waiting for init if needed.
|
|
30
|
+
*/
|
|
31
|
+
static async getRenderer() {
|
|
32
|
+
const renderer = MarkdownElement.renderer;
|
|
33
|
+
if (!renderer) {
|
|
34
|
+
throw new Error('No markdown renderer configured. Call MarkdownElement.setRenderer() before using <mark-down> elements.');
|
|
35
|
+
}
|
|
36
|
+
if (MarkdownElement.rendererInitPromise) {
|
|
37
|
+
await MarkdownElement.rendererInitPromise;
|
|
38
|
+
}
|
|
39
|
+
return renderer;
|
|
40
|
+
}
|
|
41
|
+
async connectedCallback() {
|
|
42
|
+
this.abortController = new AbortController();
|
|
43
|
+
await this.loadContent();
|
|
44
|
+
}
|
|
45
|
+
disconnectedCallback() {
|
|
46
|
+
this.abortController?.abort();
|
|
47
|
+
this.abortController = null;
|
|
48
|
+
}
|
|
49
|
+
async loadContent() {
|
|
50
|
+
const src = this.getAttribute('src');
|
|
51
|
+
const inlineContent = this.textContent?.trim();
|
|
52
|
+
if (src) {
|
|
53
|
+
await this.loadFromSrc(src);
|
|
54
|
+
}
|
|
55
|
+
else if (inlineContent) {
|
|
56
|
+
await this.renderContent(inlineContent);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
this.innerHTML = '';
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async loadFromSrc(src) {
|
|
63
|
+
const signal = this.abortController?.signal;
|
|
64
|
+
try {
|
|
65
|
+
const response = await fetch(src, { signal });
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
throw new Error(`Failed to fetch ${src}: ${response.status}`);
|
|
68
|
+
}
|
|
69
|
+
const markdown = await response.text();
|
|
70
|
+
await this.renderContent(markdown);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.showError(error);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
async renderContent(markdown) {
|
|
80
|
+
try {
|
|
81
|
+
const renderer = await MarkdownElement.getRenderer();
|
|
82
|
+
this.innerHTML = renderer.render(markdown);
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
this.showError(error);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
showError(error) {
|
|
89
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
90
|
+
this.innerHTML = `<div>Markdown Error: ${escapeHtml(message)}</div>`;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=markdown.element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.element.js","sourceRoot":"","sources":["../../../src/element/markdown.element.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Router Slot Element
|
|
3
|
+
*
|
|
4
|
+
* <router-slot> is where page content is rendered.
|
|
5
|
+
* Supports nested routes via parent page containing slot.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```html
|
|
9
|
+
* <router-slot></router-slot>
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* For nested routes, parent page includes:
|
|
13
|
+
* ```typescript
|
|
14
|
+
* export default function render() {
|
|
15
|
+
* return `
|
|
16
|
+
* <header>...</header>
|
|
17
|
+
* <main>
|
|
18
|
+
* <router-slot></router-slot>
|
|
19
|
+
* </main>
|
|
20
|
+
* `;
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import { HTMLElementBase } from '../util/html.util.ts';
|
|
25
|
+
/**
|
|
26
|
+
* Router slot web component.
|
|
27
|
+
* Serves as the mounting point for page content.
|
|
28
|
+
*/
|
|
29
|
+
export declare class RouterSlot extends HTMLElementBase {
|
|
30
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Router Slot Element
|
|
3
|
+
*
|
|
4
|
+
* <router-slot> is where page content is rendered.
|
|
5
|
+
* Supports nested routes via parent page containing slot.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```html
|
|
9
|
+
* <router-slot></router-slot>
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* For nested routes, parent page includes:
|
|
13
|
+
* ```typescript
|
|
14
|
+
* export default function render() {
|
|
15
|
+
* return `
|
|
16
|
+
* <header>...</header>
|
|
17
|
+
* <main>
|
|
18
|
+
* <router-slot></router-slot>
|
|
19
|
+
* </main>
|
|
20
|
+
* `;
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
import { HTMLElementBase } from "../util/html.util.js";
|
|
25
|
+
/**
|
|
26
|
+
* Router slot web component.
|
|
27
|
+
* Serves as the mounting point for page content.
|
|
28
|
+
*/
|
|
29
|
+
export class RouterSlot extends HTMLElementBase {
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=slot.element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot.element.js","sourceRoot":"","sources":["../../../src/element/slot.element.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;GAGG;AACH,MAAM,OAAO,UAAW,SAAQ,eAAe;CAAG"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @emkodev/emroute
|
|
3
|
+
*
|
|
4
|
+
* Public API — types, component base classes, and utilities for consumer code.
|
|
5
|
+
*
|
|
6
|
+
* For environment-specific code, use sub-exports:
|
|
7
|
+
* @emkodev/emroute/spa — Browser: SPA router + custom elements
|
|
8
|
+
* @emkodev/emroute/ssr/html — Server: SSR HTML renderer
|
|
9
|
+
* @emkodev/emroute/ssr/md — Server: SSR Markdown renderer
|
|
10
|
+
* @emkodev/emroute/server — Production server
|
|
11
|
+
* @emkodev/emroute/runtime — Abstract runtime + constants
|
|
12
|
+
* @emkodev/emroute/runtime/sitemap — Sitemap generation
|
|
13
|
+
*/
|
|
14
|
+
export type { ErrorBoundary, MatchedRoute, NavigateOptions, RedirectConfig, RouteConfig, RouteFiles, RouteFileType, RouteInfo, RouteParams, RouterEvent, RouterEventListener, RouterEventType, RouterState, RoutesManifest, } from './type/route.type.ts';
|
|
15
|
+
export type { ParsedWidgetBlock, SpaMode, WidgetManifestEntry, WidgetsManifest, } from './type/widget.type.ts';
|
|
16
|
+
export type { MarkdownRenderer } from './type/markdown.type.ts';
|
|
17
|
+
export { type Logger, setLogger } from './type/logger.type.ts';
|
|
18
|
+
export { Component, type ComponentContext, type ComponentManifestEntry, type ContextProvider, type FileContents, type RenderContext, } from './component/abstract.component.ts';
|
|
19
|
+
export { PageComponent } from './component/page.component.ts';
|
|
20
|
+
export { WidgetComponent } from './component/widget.component.ts';
|
|
21
|
+
export { WidgetRegistry } from './widget/widget.registry.ts';
|
|
22
|
+
export { type BasePath, DEFAULT_BASE_PATH, prefixManifest } from './route/route.core.ts';
|
|
23
|
+
export { escapeHtml, scopeWidgetCss } from './util/html.util.ts';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @emkodev/emroute
|
|
3
|
+
*
|
|
4
|
+
* Public API — types, component base classes, and utilities for consumer code.
|
|
5
|
+
*
|
|
6
|
+
* For environment-specific code, use sub-exports:
|
|
7
|
+
* @emkodev/emroute/spa — Browser: SPA router + custom elements
|
|
8
|
+
* @emkodev/emroute/ssr/html — Server: SSR HTML renderer
|
|
9
|
+
* @emkodev/emroute/ssr/md — Server: SSR Markdown renderer
|
|
10
|
+
* @emkodev/emroute/server — Production server
|
|
11
|
+
* @emkodev/emroute/runtime — Abstract runtime + constants
|
|
12
|
+
* @emkodev/emroute/runtime/sitemap — Sitemap generation
|
|
13
|
+
*/
|
|
14
|
+
export { setLogger } from "./type/logger.type.js";
|
|
15
|
+
// Components
|
|
16
|
+
export { Component, } from "./component/abstract.component.js";
|
|
17
|
+
export { PageComponent } from "./component/page.component.js";
|
|
18
|
+
export { WidgetComponent } from "./component/widget.component.js";
|
|
19
|
+
export { WidgetRegistry } from "./widget/widget.registry.js";
|
|
20
|
+
// Route config
|
|
21
|
+
export { DEFAULT_BASE_PATH, prefixManifest } from "./route/route.core.js";
|
|
22
|
+
// Utils
|
|
23
|
+
export { escapeHtml, scopeWidgetCss } from "./util/html.util.js";
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA4BH,OAAO,EAAe,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE/D,aAAa;AACb,OAAO,EACL,SAAS,GAMV,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,eAAe;AACf,OAAO,EAAiB,iBAAiB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEzF,QAAQ;AACR,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay Module
|
|
3
|
+
*
|
|
4
|
+
* Programmatic overlay API for modals, toasts, and popovers.
|
|
5
|
+
* For simple cases, use declarative HTML (commandfor/command + popover/dialog).
|
|
6
|
+
* dismissAll() closes both programmatic and declarative overlays.
|
|
7
|
+
*/
|
|
8
|
+
export type { ModalOptions, OverlayService, PopoverOptions, ToastOptions } from './overlay.type.ts';
|
|
9
|
+
export { createOverlayService } from './overlay.service.ts';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay Module
|
|
3
|
+
*
|
|
4
|
+
* Programmatic overlay API for modals, toasts, and popovers.
|
|
5
|
+
* For simple cases, use declarative HTML (commandfor/command + popover/dialog).
|
|
6
|
+
* dismissAll() closes both programmatic and declarative overlays.
|
|
7
|
+
*/
|
|
8
|
+
export { createOverlayService } from "./overlay.service.js";
|
|
9
|
+
//# sourceMappingURL=mod.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","sourceRoot":"","sources":["../../../src/overlay/mod.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay Default CSS
|
|
3
|
+
*
|
|
4
|
+
* Styles for modals, toasts, and popovers. Works for both declarative
|
|
5
|
+
* (commandfor/command + HTML attributes) and programmatic (OverlayService)
|
|
6
|
+
* overlays. Uses CSS custom properties for theming.
|
|
7
|
+
*/
|
|
8
|
+
export declare const overlayCSS: string;
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay Default CSS
|
|
3
|
+
*
|
|
4
|
+
* Styles for modals, toasts, and popovers. Works for both declarative
|
|
5
|
+
* (commandfor/command + HTML attributes) and programmatic (OverlayService)
|
|
6
|
+
* overlays. Uses CSS custom properties for theming.
|
|
7
|
+
*/
|
|
8
|
+
export const overlayCSS = /* css */ `
|
|
9
|
+
:root {
|
|
10
|
+
--overlay-backdrop: oklch(0% 0 0 / 0.5);
|
|
11
|
+
--overlay-surface: oklch(100% 0 0);
|
|
12
|
+
--overlay-radius: 8px;
|
|
13
|
+
--overlay-shadow: 0 8px 32px oklch(0% 0 0 / 0.2);
|
|
14
|
+
--overlay-toast-gap: 8px;
|
|
15
|
+
--overlay-toast-duration: 5s;
|
|
16
|
+
--overlay-z: 1000;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/* --- Modal (dialog) --- */
|
|
20
|
+
|
|
21
|
+
dialog[data-overlay-modal] {
|
|
22
|
+
border: none;
|
|
23
|
+
padding: 0;
|
|
24
|
+
background: var(--overlay-surface);
|
|
25
|
+
border-radius: var(--overlay-radius);
|
|
26
|
+
box-shadow: var(--overlay-shadow);
|
|
27
|
+
max-width: min(90vw, 560px);
|
|
28
|
+
max-height: 85vh;
|
|
29
|
+
overflow: auto;
|
|
30
|
+
opacity: 1;
|
|
31
|
+
translate: 0 0;
|
|
32
|
+
transition:
|
|
33
|
+
opacity 200ms,
|
|
34
|
+
translate 200ms;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
dialog[data-overlay-modal][open] {
|
|
38
|
+
transition:
|
|
39
|
+
opacity 200ms,
|
|
40
|
+
translate 200ms,
|
|
41
|
+
display 200ms allow-discrete,
|
|
42
|
+
overlay 200ms allow-discrete;
|
|
43
|
+
|
|
44
|
+
@starting-style {
|
|
45
|
+
opacity: 0;
|
|
46
|
+
translate: 0 20px;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
dialog[data-overlay-modal]::backdrop {
|
|
51
|
+
background: var(--overlay-backdrop);
|
|
52
|
+
opacity: 1;
|
|
53
|
+
transition: opacity 200ms;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
dialog[data-overlay-modal][open]::backdrop {
|
|
57
|
+
transition:
|
|
58
|
+
opacity 200ms,
|
|
59
|
+
display 200ms allow-discrete,
|
|
60
|
+
overlay 200ms allow-discrete;
|
|
61
|
+
|
|
62
|
+
@starting-style {
|
|
63
|
+
opacity: 0;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
dialog[data-overlay-modal][data-dismissing] {
|
|
68
|
+
opacity: 0;
|
|
69
|
+
translate: 0 20px;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
dialog[data-overlay-modal][data-dismissing]::backdrop {
|
|
73
|
+
opacity: 0;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* --- Toast container --- */
|
|
77
|
+
|
|
78
|
+
[data-overlay-toast-container] {
|
|
79
|
+
position: fixed;
|
|
80
|
+
bottom: 16px;
|
|
81
|
+
right: 16px;
|
|
82
|
+
z-index: var(--overlay-z);
|
|
83
|
+
display: flex;
|
|
84
|
+
flex-direction: column;
|
|
85
|
+
gap: var(--overlay-toast-gap);
|
|
86
|
+
pointer-events: none;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* --- Toast item --- */
|
|
90
|
+
|
|
91
|
+
[data-overlay-toast] {
|
|
92
|
+
pointer-events: auto;
|
|
93
|
+
background: var(--overlay-surface);
|
|
94
|
+
border-radius: var(--overlay-radius);
|
|
95
|
+
box-shadow: var(--overlay-shadow);
|
|
96
|
+
padding: 12px 16px;
|
|
97
|
+
animation: overlay-toast-auto var(--overlay-toast-duration, 5s) ease-in-out forwards;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Manual toast (timeout: 0): no auto-dismiss, entry transition only */
|
|
101
|
+
[data-overlay-toast][data-toast-manual] {
|
|
102
|
+
animation: none;
|
|
103
|
+
opacity: 1;
|
|
104
|
+
translate: 0 0;
|
|
105
|
+
transition:
|
|
106
|
+
opacity 200ms,
|
|
107
|
+
translate 200ms;
|
|
108
|
+
|
|
109
|
+
@starting-style {
|
|
110
|
+
opacity: 0;
|
|
111
|
+
translate: 20px 0;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/* Dismissed toast: CSS exit animation */
|
|
116
|
+
[data-overlay-toast][data-dismissing] {
|
|
117
|
+
animation: overlay-toast-exit 200ms ease-in forwards;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@keyframes overlay-toast-auto {
|
|
121
|
+
0% { opacity: 0; translate: 20px 0; }
|
|
122
|
+
10% { opacity: 1; translate: 0 0; }
|
|
123
|
+
80% { opacity: 1; translate: 0 0; }
|
|
124
|
+
100% { opacity: 0; translate: 0 0; display: none; }
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@keyframes overlay-toast-exit {
|
|
128
|
+
to { opacity: 0; translate: 20px 0; display: none; }
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/* --- Popover --- */
|
|
132
|
+
|
|
133
|
+
[data-overlay-popover] {
|
|
134
|
+
border: none;
|
|
135
|
+
padding: 0;
|
|
136
|
+
margin: 0;
|
|
137
|
+
background: var(--overlay-surface);
|
|
138
|
+
border-radius: var(--overlay-radius);
|
|
139
|
+
box-shadow: var(--overlay-shadow);
|
|
140
|
+
opacity: 1;
|
|
141
|
+
scale: 1;
|
|
142
|
+
transition:
|
|
143
|
+
opacity 200ms,
|
|
144
|
+
scale 200ms;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
[data-overlay-popover]:popover-open {
|
|
148
|
+
position-anchor: auto;
|
|
149
|
+
inset: unset;
|
|
150
|
+
top: anchor(bottom);
|
|
151
|
+
left: anchor(start);
|
|
152
|
+
margin-top: 4px;
|
|
153
|
+
transition:
|
|
154
|
+
opacity 200ms,
|
|
155
|
+
scale 200ms,
|
|
156
|
+
display 200ms allow-discrete,
|
|
157
|
+
overlay 200ms allow-discrete;
|
|
158
|
+
|
|
159
|
+
@starting-style {
|
|
160
|
+
opacity: 0;
|
|
161
|
+
scale: 0.95;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
[data-overlay-popover][data-dismissing] {
|
|
166
|
+
opacity: 0;
|
|
167
|
+
scale: 0.95;
|
|
168
|
+
}
|
|
169
|
+
`;
|
|
170
|
+
//# sourceMappingURL=overlay.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overlay.css.js","sourceRoot":"","sources":["../../../src/overlay/overlay.css.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,UAAU,GAAW,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiK3C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay Service
|
|
3
|
+
*
|
|
4
|
+
* Programmatic API for modals, toasts, and popovers. For simple trigger
|
|
5
|
+
* patterns, use declarative HTML (commandfor/command + popover/dialog)
|
|
6
|
+
* with zero JS. This service covers dynamic content, programmatic
|
|
7
|
+
* triggers, and complex workflows.
|
|
8
|
+
*
|
|
9
|
+
* dismissAll() is DOM-aware: it closes both programmatic overlays
|
|
10
|
+
* managed by this service AND declarative popovers/dialogs found
|
|
11
|
+
* via DOM queries.
|
|
12
|
+
*/
|
|
13
|
+
import type { OverlayService } from './overlay.type.ts';
|
|
14
|
+
export declare function createOverlayService(): OverlayService;
|