@umamichi-ui/common-components 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -0
- package/dist/dialog/AboutDialog.d.ts +27 -0
- package/dist/dialog/AboutDialog.d.ts.map +1 -0
- package/dist/dialog/AboutDialog.js +61 -0
- package/dist/dialog/AboutDialog.js.map +1 -0
- package/dist/dialog/ConfirmDialog.d.ts +17 -0
- package/dist/dialog/ConfirmDialog.d.ts.map +1 -0
- package/dist/dialog/ConfirmDialog.js +38 -0
- package/dist/dialog/ConfirmDialog.js.map +1 -0
- package/dist/dialog/ConfirmDialogOverlay.d.ts +13 -0
- package/dist/dialog/ConfirmDialogOverlay.d.ts.map +1 -0
- package/dist/dialog/ConfirmDialogOverlay.js +28 -0
- package/dist/dialog/ConfirmDialogOverlay.js.map +1 -0
- package/dist/dialog/index.d.ts +4 -0
- package/dist/dialog/index.d.ts.map +1 -0
- package/dist/dialog/index.js +9 -0
- package/dist/dialog/index.js.map +1 -0
- package/dist/icons/ChevronIcons.d.ts +6 -0
- package/dist/icons/ChevronIcons.d.ts.map +1 -0
- package/dist/icons/ChevronIcons.js +19 -0
- package/dist/icons/ChevronIcons.js.map +1 -0
- package/dist/icons/DropdownMenuChevron.d.ts +6 -0
- package/dist/icons/DropdownMenuChevron.d.ts.map +1 -0
- package/dist/icons/DropdownMenuChevron.js +20 -0
- package/dist/icons/DropdownMenuChevron.js.map +1 -0
- package/dist/icons/InfoCircleIcon.d.ts +5 -0
- package/dist/icons/InfoCircleIcon.d.ts.map +1 -0
- package/dist/icons/InfoCircleIcon.js +17 -0
- package/dist/icons/InfoCircleIcon.js.map +1 -0
- package/dist/icons/index.d.ts +4 -0
- package/dist/icons/index.d.ts.map +1 -0
- package/dist/icons/index.js +10 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/menu/FloatingMenu.d.ts +28 -0
- package/dist/menu/FloatingMenu.d.ts.map +1 -0
- package/dist/menu/FloatingMenu.js +125 -0
- package/dist/menu/FloatingMenu.js.map +1 -0
- package/dist/menu/MobileActionSheet.d.ts +9 -0
- package/dist/menu/MobileActionSheet.d.ts.map +1 -0
- package/dist/menu/MobileActionSheet.js +10 -0
- package/dist/menu/MobileActionSheet.js.map +1 -0
- package/dist/menu/MobileActionSheetContent.d.ts +31 -0
- package/dist/menu/MobileActionSheetContent.d.ts.map +1 -0
- package/dist/menu/MobileActionSheetContent.js +123 -0
- package/dist/menu/MobileActionSheetContent.js.map +1 -0
- package/dist/menu/computeFloatingMenuGeometry.d.ts +12 -0
- package/dist/menu/computeFloatingMenuGeometry.d.ts.map +1 -0
- package/dist/menu/computeFloatingMenuGeometry.js +30 -0
- package/dist/menu/computeFloatingMenuGeometry.js.map +1 -0
- package/dist/menu/index.d.ts +6 -0
- package/dist/menu/index.d.ts.map +1 -0
- package/dist/menu/index.js +13 -0
- package/dist/menu/index.js.map +1 -0
- package/dist/menu/useFloatingMenuGeometry.d.ts +13 -0
- package/dist/menu/useFloatingMenuGeometry.d.ts.map +1 -0
- package/dist/menu/useFloatingMenuGeometry.js +50 -0
- package/dist/menu/useFloatingMenuGeometry.js.map +1 -0
- package/dist/overlay/OverlayStackProvider.d.ts +17 -0
- package/dist/overlay/OverlayStackProvider.d.ts.map +1 -0
- package/dist/overlay/OverlayStackProvider.js +120 -0
- package/dist/overlay/OverlayStackProvider.js.map +1 -0
- package/dist/overlay/SiteOverlayBackdrop.d.ts +13 -0
- package/dist/overlay/SiteOverlayBackdrop.d.ts.map +1 -0
- package/dist/overlay/SiteOverlayBackdrop.js +62 -0
- package/dist/overlay/SiteOverlayBackdrop.js.map +1 -0
- package/dist/overlay/index.d.ts +6 -0
- package/dist/overlay/index.d.ts.map +1 -0
- package/dist/overlay/index.js +18 -0
- package/dist/overlay/index.js.map +1 -0
- package/dist/overlay/overlayHistory.d.ts +8 -0
- package/dist/overlay/overlayHistory.d.ts.map +1 -0
- package/dist/overlay/overlayHistory.js +14 -0
- package/dist/overlay/overlayHistory.js.map +1 -0
- package/dist/overlay/overlayStackTypes.d.ts +10 -0
- package/dist/overlay/overlayStackTypes.d.ts.map +1 -0
- package/dist/overlay/overlayStackTypes.js +9 -0
- package/dist/overlay/overlayStackTypes.js.map +1 -0
- package/dist/overlay/useOverlayStackEntry.d.ts +11 -0
- package/dist/overlay/useOverlayStackEntry.d.ts.map +1 -0
- package/dist/overlay/useOverlayStackEntry.js +55 -0
- package/dist/overlay/useOverlayStackEntry.js.map +1 -0
- package/dist/presence/index.d.ts +2 -0
- package/dist/presence/index.d.ts.map +1 -0
- package/dist/presence/index.js +7 -0
- package/dist/presence/index.js.map +1 -0
- package/dist/presence/useOverlayPresence.d.ts +10 -0
- package/dist/presence/useOverlayPresence.d.ts.map +1 -0
- package/dist/presence/useOverlayPresence.js +119 -0
- package/dist/presence/useOverlayPresence.js.map +1 -0
- package/package.json +81 -0
- package/src/styles/about-dialog.css +117 -0
- package/src/styles/index.css +3 -0
- package/src/styles/mobile-action-sheet.css +166 -0
- package/src/styles/overlay.css +61 -0
package/README.md
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# @umamichi-ui/common-components
|
|
2
|
+
|
|
3
|
+
> 以下内容为 LLM 生成,且未经人工检查,请谨慎对待
|
|
4
|
+
|
|
5
|
+
Umamichi 站点共用的 React UI 组件库,与 [@umamichi-ui/common-css](https://www.npmjs.com/package/@umamichi-ui/common-css) 配合使用。
|
|
6
|
+
|
|
7
|
+
各子模块可单独引用,彼此尽量解耦:
|
|
8
|
+
|
|
9
|
+
| 子路径 | 内容 |
|
|
10
|
+
|--------|------|
|
|
11
|
+
| `@umamichi-ui/common-components/presence` | 进出场动画 hook(不依赖叠层栈) |
|
|
12
|
+
| `@umamichi-ui/common-components/overlay` | 叠层栈、`SiteOverlayBackdrop` |
|
|
13
|
+
| `@umamichi-ui/common-components/icons` | Chevron、下拉箭头、信息图标 |
|
|
14
|
+
| `@umamichi-ui/common-components/menu` | `FloatingMenu`、`MobileActionSheet` |
|
|
15
|
+
| `@umamichi-ui/common-components/dialog` | `ConfirmDialog`、`AboutDialog` |
|
|
16
|
+
| `@umamichi-ui/common-components/styles.css` | 本库补充样式(overlay、action sheet、about) |
|
|
17
|
+
|
|
18
|
+
## 依赖图
|
|
19
|
+
|
|
20
|
+
模块间**单向**依赖;`presence` 与 `icons` 为叶子模块,可被任意上层单独引用。
|
|
21
|
+
|
|
22
|
+
```mermaid
|
|
23
|
+
flowchart TB
|
|
24
|
+
subgraph peer["Peer(消费方安装)"]
|
|
25
|
+
react["react / react-dom"]
|
|
26
|
+
commonCss["@umamichi-ui/common-css"]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
subgraph pkg["@umamichi-ui/common-components"]
|
|
30
|
+
presence["presence<br/>useOverlayPresence"]
|
|
31
|
+
icons["icons<br/>Chevron · DropdownMenuChevron · InfoCircle"]
|
|
32
|
+
overlay["overlay<br/>OverlayStackProvider · SiteOverlayBackdrop"]
|
|
33
|
+
menu["menu<br/>FloatingMenu · MobileActionSheet"]
|
|
34
|
+
dialog["dialog<br/>ConfirmDialog · ConfirmDialogOverlay · AboutDialog"]
|
|
35
|
+
styles["styles.css"]
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
react --> presence
|
|
39
|
+
react --> icons
|
|
40
|
+
react --> overlay
|
|
41
|
+
react --> menu
|
|
42
|
+
react --> dialog
|
|
43
|
+
|
|
44
|
+
commonCss -.->|"class 名约定"| styles
|
|
45
|
+
styles -.-> overlay
|
|
46
|
+
styles -.-> menu
|
|
47
|
+
styles -.-> dialog
|
|
48
|
+
|
|
49
|
+
presence --> overlay
|
|
50
|
+
presence --> menu
|
|
51
|
+
|
|
52
|
+
icons --> menu
|
|
53
|
+
|
|
54
|
+
overlay --> menu
|
|
55
|
+
overlay --> dialog
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
| 从 | 到 | 说明 |
|
|
59
|
+
|----|-----|------|
|
|
60
|
+
| `presence` | `overlay` | `SiteOverlayBackdrop` 进出场动画 |
|
|
61
|
+
| `presence` | `menu` | `FloatingMenu` 面板淡入(不进叠层栈) |
|
|
62
|
+
| `icons` | `menu` | 下拉箭头;ActionSheet 子菜单 Chevron |
|
|
63
|
+
| `overlay` | `menu` | `MobileActionSheet` 底部 backdrop |
|
|
64
|
+
| `overlay` | `dialog` | `ConfirmDialogOverlay` |
|
|
65
|
+
| `dialog`(内部) | — | `AboutDialog` → `ConfirmDialog` + `ConfirmDialogOverlay` |
|
|
66
|
+
|
|
67
|
+
**无库内依赖:** `ConfirmDialog`(纯 markup 壳)、`computeFloatingMenuGeometry`、`OverlayStackProvider` 自身逻辑。
|
|
68
|
+
|
|
69
|
+
`menu` 子模块内:`FloatingMenu` 只走 `presence`;`MobileActionSheet` 额外依赖 `overlay`。
|
|
70
|
+
|
|
71
|
+
## 使用
|
|
72
|
+
|
|
73
|
+
```tsx
|
|
74
|
+
import '@umamichi-ui/common-css';
|
|
75
|
+
import '@umamichi-ui/common-components/styles.css';
|
|
76
|
+
import { OverlayStackProvider } from '@umamichi-ui/common-components/overlay';
|
|
77
|
+
|
|
78
|
+
// 根组件
|
|
79
|
+
<OverlayStackProvider>
|
|
80
|
+
<App />
|
|
81
|
+
</OverlayStackProvider>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`MobileActionSheet` 与 `ConfirmDialogOverlay` 需要外层已挂载 `OverlayStackProvider`。`FloatingMenu` 仅需 `presence` hook,不进入叠层栈。
|
|
85
|
+
|
|
86
|
+
## 开发
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
npm install
|
|
90
|
+
npm run build
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
安装(npm 发布后):
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
npm install @umamichi-ui/common-components @umamichi-ui/common-css
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
本地联调可在消费项目中添加:
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
"@umamichi-ui/common-components": "file:../umamichi-ui/common-components"
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## 发布
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
npm run build
|
|
109
|
+
npm publish --access public
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
版本记录见 [CHANGELOG.md](./CHANGELOG.md)。
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export type AboutDialogLink = {
|
|
3
|
+
label: string;
|
|
4
|
+
href: string;
|
|
5
|
+
};
|
|
6
|
+
export type AboutDialogSection = {
|
|
7
|
+
id: string;
|
|
8
|
+
title: string;
|
|
9
|
+
content: ReactNode;
|
|
10
|
+
};
|
|
11
|
+
export type AboutDialogProps = {
|
|
12
|
+
open: boolean;
|
|
13
|
+
overlayId: string;
|
|
14
|
+
onClose: () => void;
|
|
15
|
+
appName: string;
|
|
16
|
+
version: string;
|
|
17
|
+
channelLabel?: ReactNode;
|
|
18
|
+
tagline?: ReactNode;
|
|
19
|
+
copyrightYear: number;
|
|
20
|
+
copyrightHolder?: string;
|
|
21
|
+
sections?: AboutDialogSection[];
|
|
22
|
+
links?: AboutDialogLink[];
|
|
23
|
+
dialogTitle?: string;
|
|
24
|
+
closeLabel?: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function AboutDialog({ open, overlayId, onClose, appName, version, channelLabel, tagline, copyrightYear, copyrightHolder, sections, links, dialogTitle, closeLabel, }: AboutDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=AboutDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AboutDialog.d.ts","sourceRoot":"","sources":["../../src/dialog/AboutDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIvC,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,SAAS,EACT,OAAO,EACP,OAAO,EACP,OAAO,EACP,YAAY,EACZ,OAAO,EACP,aAAa,EACb,eAA4B,EAC5B,QAAa,EACb,KAAU,EACV,WAAkB,EAClB,UAAiB,GAClB,EAAE,gBAAgB,2CAyDlB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ConfirmDialog } from "./ConfirmDialog.js";
|
|
3
|
+
import { ConfirmDialogOverlay } from "./ConfirmDialogOverlay.js";
|
|
4
|
+
function AboutDialog({
|
|
5
|
+
open,
|
|
6
|
+
overlayId,
|
|
7
|
+
onClose,
|
|
8
|
+
appName,
|
|
9
|
+
version,
|
|
10
|
+
channelLabel,
|
|
11
|
+
tagline,
|
|
12
|
+
copyrightYear,
|
|
13
|
+
copyrightHolder = "Umamichi",
|
|
14
|
+
sections = [],
|
|
15
|
+
links = [],
|
|
16
|
+
dialogTitle = "关于",
|
|
17
|
+
closeLabel = "确定"
|
|
18
|
+
}) {
|
|
19
|
+
return /* @__PURE__ */ jsx(ConfirmDialogOverlay, { open, overlayId, onDismiss: onClose, children: /* @__PURE__ */ jsxs(
|
|
20
|
+
ConfirmDialog,
|
|
21
|
+
{
|
|
22
|
+
title: dialogTitle,
|
|
23
|
+
titleId: "about-dialog-title",
|
|
24
|
+
className: "confirm-dialog about-dialog",
|
|
25
|
+
bodyClassName: "confirm-dialog-body about-dialog-body",
|
|
26
|
+
onClick: (event) => event.stopPropagation(),
|
|
27
|
+
actionsClassName: "confirm-dialog-actions about-dialog-actions",
|
|
28
|
+
actions: /* @__PURE__ */ jsx("button", { type: "button", className: "primary-button", onClick: onClose, children: closeLabel }),
|
|
29
|
+
children: [
|
|
30
|
+
/* @__PURE__ */ jsxs("div", { className: "about-dialog-product", children: [
|
|
31
|
+
/* @__PURE__ */ jsx("p", { className: "about-dialog-app-name", children: appName }),
|
|
32
|
+
/* @__PURE__ */ jsxs("p", { className: "about-dialog-version", children: [
|
|
33
|
+
"版本 ",
|
|
34
|
+
version,
|
|
35
|
+
channelLabel ? /* @__PURE__ */ jsx("span", { className: "about-dialog-channel", children: channelLabel }) : null
|
|
36
|
+
] }),
|
|
37
|
+
tagline ? /* @__PURE__ */ jsx("p", { className: "about-dialog-tagline", children: tagline }) : null
|
|
38
|
+
] }),
|
|
39
|
+
/* @__PURE__ */ jsxs("p", { className: "about-dialog-copyright", children: [
|
|
40
|
+
"© ",
|
|
41
|
+
copyrightYear,
|
|
42
|
+
" ",
|
|
43
|
+
copyrightHolder
|
|
44
|
+
] }),
|
|
45
|
+
sections.length > 0 || links.length > 0 ? /* @__PURE__ */ jsx("hr", { className: "about-dialog-divider" }) : null,
|
|
46
|
+
sections.map((section) => /* @__PURE__ */ jsxs("section", { className: "about-dialog-section", "aria-labelledby": section.id, children: [
|
|
47
|
+
/* @__PURE__ */ jsx("h3", { id: section.id, className: "about-dialog-section-title", children: section.title }),
|
|
48
|
+
/* @__PURE__ */ jsx("div", { className: "about-dialog-section-text", children: section.content })
|
|
49
|
+
] }, section.id)),
|
|
50
|
+
links.length > 0 ? /* @__PURE__ */ jsx("dl", { className: "about-dialog-meta", children: links.map((link) => /* @__PURE__ */ jsxs("div", { className: "about-dialog-meta-row", children: [
|
|
51
|
+
/* @__PURE__ */ jsx("dt", { children: link.label }),
|
|
52
|
+
/* @__PURE__ */ jsx("dd", { children: /* @__PURE__ */ jsx("a", { href: link.href, target: "_blank", rel: "noreferrer", children: link.href }) })
|
|
53
|
+
] }, link.label)) }) : null
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
) });
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
AboutDialog
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=AboutDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AboutDialog.js","sources":["../../src/dialog/AboutDialog.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { ConfirmDialog } from './ConfirmDialog';\nimport { ConfirmDialogOverlay } from './ConfirmDialogOverlay';\n\nexport type AboutDialogLink = {\n label: string;\n href: string;\n};\n\nexport type AboutDialogSection = {\n id: string;\n title: string;\n content: ReactNode;\n};\n\nexport type AboutDialogProps = {\n open: boolean;\n overlayId: string;\n onClose: () => void;\n appName: string;\n version: string;\n channelLabel?: ReactNode;\n tagline?: ReactNode;\n copyrightYear: number;\n copyrightHolder?: string;\n sections?: AboutDialogSection[];\n links?: AboutDialogLink[];\n dialogTitle?: string;\n closeLabel?: string;\n};\n\nexport function AboutDialog({\n open,\n overlayId,\n onClose,\n appName,\n version,\n channelLabel,\n tagline,\n copyrightYear,\n copyrightHolder = 'Umamichi',\n sections = [],\n links = [],\n dialogTitle = '关于',\n closeLabel = '确定',\n}: AboutDialogProps) {\n return (\n <ConfirmDialogOverlay open={open} overlayId={overlayId} onDismiss={onClose}>\n <ConfirmDialog\n title={dialogTitle}\n titleId=\"about-dialog-title\"\n className=\"confirm-dialog about-dialog\"\n bodyClassName=\"confirm-dialog-body about-dialog-body\"\n onClick={(event) => event.stopPropagation()}\n actionsClassName=\"confirm-dialog-actions about-dialog-actions\"\n actions={\n <button type=\"button\" className=\"primary-button\" onClick={onClose}>\n {closeLabel}\n </button>\n }\n >\n <div className=\"about-dialog-product\">\n <p className=\"about-dialog-app-name\">{appName}</p>\n <p className=\"about-dialog-version\">\n 版本 {version}\n {channelLabel ? <span className=\"about-dialog-channel\">{channelLabel}</span> : null}\n </p>\n {tagline ? <p className=\"about-dialog-tagline\">{tagline}</p> : null}\n </div>\n\n <p className=\"about-dialog-copyright\">\n © {copyrightYear} {copyrightHolder}\n </p>\n\n {sections.length > 0 || links.length > 0 ? <hr className=\"about-dialog-divider\" /> : null}\n\n {sections.map((section) => (\n <section key={section.id} className=\"about-dialog-section\" aria-labelledby={section.id}>\n <h3 id={section.id} className=\"about-dialog-section-title\">\n {section.title}\n </h3>\n <div className=\"about-dialog-section-text\">{section.content}</div>\n </section>\n ))}\n\n {links.length > 0 ? (\n <dl className=\"about-dialog-meta\">\n {links.map((link) => (\n <div key={link.label} className=\"about-dialog-meta-row\">\n <dt>{link.label}</dt>\n <dd>\n <a href={link.href} target=\"_blank\" rel=\"noreferrer\">\n {link.href}\n </a>\n </dd>\n </div>\n ))}\n </dl>\n ) : null}\n </ConfirmDialog>\n </ConfirmDialogOverlay>\n );\n}\n"],"names":[],"mappings":";;;AA+BO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,WAAW,CAAA;AAAA,EACX,QAAQ,CAAA;AAAA,EACR,cAAc;AAAA,EACd,aAAa;AACf,GAAqB;AACnB,SACE,oBAAC,sBAAA,EAAqB,MAAY,WAAsB,WAAW,SACjE,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,OAAO;AAAA,MACP,SAAQ;AAAA,MACR,WAAU;AAAA,MACV,eAAc;AAAA,MACd,SAAS,CAAC,UAAU,MAAM,gBAAA;AAAA,MAC1B,kBAAiB;AAAA,MACjB,6BACG,UAAA,EAAO,MAAK,UAAS,WAAU,kBAAiB,SAAS,SACvD,UAAA,WAAA,CACH;AAAA,MAGF,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,wBACb,UAAA;AAAA,UAAA,oBAAC,KAAA,EAAE,WAAU,yBAAyB,UAAA,SAAQ;AAAA,UAC9C,qBAAC,KAAA,EAAE,WAAU,wBAAuB,UAAA;AAAA,YAAA;AAAA,YAC9B;AAAA,YACH,eAAe,oBAAC,QAAA,EAAK,WAAU,wBAAwB,wBAAa,IAAU;AAAA,UAAA,GACjF;AAAA,UACC,UAAU,oBAAC,KAAA,EAAE,WAAU,wBAAwB,mBAAQ,IAAO;AAAA,QAAA,GACjE;AAAA,QAEA,qBAAC,KAAA,EAAE,WAAU,0BAAyB,UAAA;AAAA,UAAA;AAAA,UACjC;AAAA,UAAc;AAAA,UAAE;AAAA,QAAA,GACrB;AAAA,QAEC,SAAS,SAAS,KAAK,MAAM,SAAS,IAAI,oBAAC,MAAA,EAAG,WAAU,uBAAA,CAAuB,IAAK;AAAA,QAEpF,SAAS,IAAI,CAAC,YACb,qBAAC,aAAyB,WAAU,wBAAuB,mBAAiB,QAAQ,IAClF,UAAA;AAAA,UAAA,oBAAC,QAAG,IAAI,QAAQ,IAAI,WAAU,8BAC3B,kBAAQ,MAAA,CACX;AAAA,UACA,oBAAC,OAAA,EAAI,WAAU,6BAA6B,kBAAQ,QAAA,CAAQ;AAAA,QAAA,KAJhD,QAAQ,EAKtB,CACD;AAAA,QAEA,MAAM,SAAS,IACd,oBAAC,QAAG,WAAU,qBACX,UAAA,MAAM,IAAI,CAAC,SACV,qBAAC,OAAA,EAAqB,WAAU,yBAC9B,UAAA;AAAA,UAAA,oBAAC,MAAA,EAAI,eAAK,MAAA,CAAM;AAAA,UAChB,oBAAC,MAAA,EACC,UAAA,oBAAC,KAAA,EAAE,MAAM,KAAK,MAAM,QAAO,UAAS,KAAI,cACrC,UAAA,KAAK,MACR,EAAA,CACF;AAAA,QAAA,EAAA,GANQ,KAAK,KAOf,CACD,EAAA,CACH,IACE;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA,GAER;AAEJ;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { FormEventHandler, MouseEventHandler, ReactNode } from 'react';
|
|
2
|
+
export type ConfirmDialogProps = {
|
|
3
|
+
title: ReactNode;
|
|
4
|
+
titleId?: string;
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
actions: ReactNode;
|
|
7
|
+
className?: string;
|
|
8
|
+
bodyClassName?: string;
|
|
9
|
+
actionsClassName?: string;
|
|
10
|
+
role?: 'dialog' | 'alertdialog';
|
|
11
|
+
ariaDescribedBy?: string;
|
|
12
|
+
onClick?: MouseEventHandler<HTMLElement>;
|
|
13
|
+
onSubmit?: FormEventHandler<HTMLFormElement>;
|
|
14
|
+
as?: 'div' | 'form';
|
|
15
|
+
};
|
|
16
|
+
export declare function ConfirmDialog({ title, titleId, children, actions, className, bodyClassName, actionsClassName, role, ariaDescribedBy, onClick, onSubmit, as, }: ConfirmDialogProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
//# sourceMappingURL=ConfirmDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.d.ts","sourceRoot":"","sources":["../../src/dialog/ConfirmDialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,EAAE,SAAS,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;IAC7C,EAAE,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,OAAO,EACP,QAAQ,EACR,OAAO,EACP,SAA4B,EAC5B,aAAqC,EACrC,gBAA2C,EAC3C,IAAe,EACf,eAAe,EACf,OAAO,EACP,QAAQ,EACR,EAAU,GACX,EAAE,kBAAkB,2CA8BpB"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
+
function ConfirmDialog({
|
|
3
|
+
title,
|
|
4
|
+
titleId,
|
|
5
|
+
children,
|
|
6
|
+
actions,
|
|
7
|
+
className = "confirm-dialog",
|
|
8
|
+
bodyClassName = "confirm-dialog-body",
|
|
9
|
+
actionsClassName = "confirm-dialog-actions",
|
|
10
|
+
role = "dialog",
|
|
11
|
+
ariaDescribedBy,
|
|
12
|
+
onClick,
|
|
13
|
+
onSubmit,
|
|
14
|
+
as = "div"
|
|
15
|
+
}) {
|
|
16
|
+
const resolvedTitleId = titleId ?? "confirm-dialog-title";
|
|
17
|
+
const sharedProps = {
|
|
18
|
+
className,
|
|
19
|
+
role,
|
|
20
|
+
"aria-modal": true,
|
|
21
|
+
"aria-labelledby": resolvedTitleId,
|
|
22
|
+
...ariaDescribedBy ? { "aria-describedby": ariaDescribedBy } : {},
|
|
23
|
+
onClick
|
|
24
|
+
};
|
|
25
|
+
const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
26
|
+
/* @__PURE__ */ jsx("h2", { id: resolvedTitleId, className: "confirm-dialog-title", children: title }),
|
|
27
|
+
/* @__PURE__ */ jsx("div", { className: bodyClassName, children }),
|
|
28
|
+
/* @__PURE__ */ jsx("div", { className: actionsClassName, children: actions })
|
|
29
|
+
] });
|
|
30
|
+
if (as === "form") {
|
|
31
|
+
return /* @__PURE__ */ jsx("form", { ...sharedProps, onSubmit, children: inner });
|
|
32
|
+
}
|
|
33
|
+
return /* @__PURE__ */ jsx("div", { ...sharedProps, children: inner });
|
|
34
|
+
}
|
|
35
|
+
export {
|
|
36
|
+
ConfirmDialog
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=ConfirmDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmDialog.js","sources":["../../src/dialog/ConfirmDialog.tsx"],"sourcesContent":["import type { FormEventHandler, MouseEventHandler, ReactNode } from 'react';\n\nexport type ConfirmDialogProps = {\n title: ReactNode;\n titleId?: string;\n children: ReactNode;\n actions: ReactNode;\n className?: string;\n bodyClassName?: string;\n actionsClassName?: string;\n role?: 'dialog' | 'alertdialog';\n ariaDescribedBy?: string;\n onClick?: MouseEventHandler<HTMLElement>;\n onSubmit?: FormEventHandler<HTMLFormElement>;\n as?: 'div' | 'form';\n};\n\nexport function ConfirmDialog({\n title,\n titleId,\n children,\n actions,\n className = 'confirm-dialog',\n bodyClassName = 'confirm-dialog-body',\n actionsClassName = 'confirm-dialog-actions',\n role = 'dialog',\n ariaDescribedBy,\n onClick,\n onSubmit,\n as = 'div',\n}: ConfirmDialogProps) {\n const resolvedTitleId = titleId ?? 'confirm-dialog-title';\n const sharedProps = {\n className,\n role,\n 'aria-modal': true as const,\n 'aria-labelledby': resolvedTitleId,\n ...(ariaDescribedBy ? { 'aria-describedby': ariaDescribedBy } : {}),\n onClick,\n };\n\n const inner = (\n <>\n <h2 id={resolvedTitleId} className=\"confirm-dialog-title\">\n {title}\n </h2>\n <div className={bodyClassName}>{children}</div>\n <div className={actionsClassName}>{actions}</div>\n </>\n );\n\n if (as === 'form') {\n return (\n <form {...sharedProps} onSubmit={onSubmit}>\n {inner}\n </form>\n );\n }\n\n return <div {...sharedProps}>{inner}</div>;\n}\n"],"names":[],"mappings":";AAiBO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA;AAAA,EACA,KAAK;AACP,GAAuB;AACrB,QAAM,kBAAkB,WAAW;AACnC,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,GAAI,kBAAkB,EAAE,oBAAoB,gBAAA,IAAoB,CAAA;AAAA,IAChE;AAAA,EAAA;AAGF,QAAM,QACJ,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA,oBAAC,MAAA,EAAG,IAAI,iBAAiB,WAAU,wBAChC,UAAA,OACH;AAAA,IACA,oBAAC,OAAA,EAAI,WAAW,eAAgB,SAAA,CAAS;AAAA,IACzC,oBAAC,OAAA,EAAI,WAAW,kBAAmB,UAAA,QAAA,CAAQ;AAAA,EAAA,GAC7C;AAGF,MAAI,OAAO,QAAQ;AACjB,WACE,oBAAC,QAAA,EAAM,GAAG,aAAa,UACpB,UAAA,OACH;AAAA,EAEJ;AAEA,SAAO,oBAAC,OAAA,EAAK,GAAG,aAAc,UAAA,OAAM;AACtC;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
import { type SiteOverlayAlign } from '../overlay/SiteOverlayBackdrop';
|
|
3
|
+
export type ConfirmDialogOverlayProps = {
|
|
4
|
+
open: boolean;
|
|
5
|
+
overlayId: string;
|
|
6
|
+
onDismiss: () => void;
|
|
7
|
+
onExited?: () => void;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
align?: SiteOverlayAlign;
|
|
10
|
+
dismissOnEscape?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare function ConfirmDialogOverlay({ open, overlayId, onDismiss, onExited, children, align, dismissOnEscape, }: ConfirmDialogOverlayProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=ConfirmDialogOverlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmDialogOverlay.d.ts","sourceRoot":"","sources":["../../src/dialog/ConfirmDialogOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAuB,KAAK,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAE5F,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,KAAkB,EAClB,eAAsB,GACvB,EAAE,yBAAyB,2CAa3B"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { SiteOverlayBackdrop } from "../overlay/SiteOverlayBackdrop.js";
|
|
3
|
+
function ConfirmDialogOverlay({
|
|
4
|
+
open,
|
|
5
|
+
overlayId,
|
|
6
|
+
onDismiss,
|
|
7
|
+
onExited,
|
|
8
|
+
children,
|
|
9
|
+
align = "centered",
|
|
10
|
+
dismissOnEscape = true
|
|
11
|
+
}) {
|
|
12
|
+
return /* @__PURE__ */ jsx(
|
|
13
|
+
SiteOverlayBackdrop,
|
|
14
|
+
{
|
|
15
|
+
open,
|
|
16
|
+
overlayId,
|
|
17
|
+
align,
|
|
18
|
+
onDismiss,
|
|
19
|
+
onExited,
|
|
20
|
+
dismissOnEscape,
|
|
21
|
+
children
|
|
22
|
+
}
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
export {
|
|
26
|
+
ConfirmDialogOverlay
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=ConfirmDialogOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmDialogOverlay.js","sources":["../../src/dialog/ConfirmDialogOverlay.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { SiteOverlayBackdrop, type SiteOverlayAlign } from '../overlay/SiteOverlayBackdrop';\n\nexport type ConfirmDialogOverlayProps = {\n open: boolean;\n overlayId: string;\n onDismiss: () => void;\n onExited?: () => void;\n children: ReactNode;\n align?: SiteOverlayAlign;\n dismissOnEscape?: boolean;\n};\n\nexport function ConfirmDialogOverlay({\n open,\n overlayId,\n onDismiss,\n onExited,\n children,\n align = 'centered',\n dismissOnEscape = true,\n}: ConfirmDialogOverlayProps) {\n return (\n <SiteOverlayBackdrop\n open={open}\n overlayId={overlayId}\n align={align}\n onDismiss={onDismiss}\n onExited={onExited}\n dismissOnEscape={dismissOnEscape}\n >\n {children}\n </SiteOverlayBackdrop>\n );\n}\n"],"names":[],"mappings":";;AAaO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR,kBAAkB;AACpB,GAA8B;AAC5B,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEC;AAAA,IAAA;AAAA,EAAA;AAGP;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { AboutDialog, type AboutDialogLink, type AboutDialogProps, type AboutDialogSection, } from './AboutDialog';
|
|
2
|
+
export { ConfirmDialog, type ConfirmDialogProps } from './ConfirmDialog';
|
|
3
|
+
export { ConfirmDialogOverlay, type ConfirmDialogOverlayProps } from './ConfirmDialogOverlay';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dialog/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,GACxB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AboutDialog } from "./AboutDialog.js";
|
|
2
|
+
import { ConfirmDialog } from "./ConfirmDialog.js";
|
|
3
|
+
import { ConfirmDialogOverlay } from "./ConfirmDialogOverlay.js";
|
|
4
|
+
export {
|
|
5
|
+
AboutDialog,
|
|
6
|
+
ConfirmDialog,
|
|
7
|
+
ConfirmDialogOverlay
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type ChevronIconProps = {
|
|
2
|
+
className?: string;
|
|
3
|
+
};
|
|
4
|
+
export declare function ChevronRightIcon({ className }: ChevronIconProps): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare function ChevronLeftIcon({ className }: ChevronIconProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=ChevronIcons.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChevronIcons.d.ts","sourceRoot":"","sources":["../../src/icons/ChevronIcons.tsx"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAUF,wBAAgB,gBAAgB,CAAC,EAAE,SAA0B,EAAE,EAAE,gBAAgB,2CAMhF;AAED,wBAAgB,eAAe,CAAC,EAAE,SAA0B,EAAE,EAAE,gBAAgB,2CAM/E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
const chevronPathProps = {
|
|
3
|
+
fill: "none",
|
|
4
|
+
stroke: "currentColor",
|
|
5
|
+
strokeWidth: 1.75,
|
|
6
|
+
strokeLinecap: "square",
|
|
7
|
+
strokeLinejoin: "miter"
|
|
8
|
+
};
|
|
9
|
+
function ChevronRightIcon({ className = "chevron-icon" }) {
|
|
10
|
+
return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 16 16", width: "20", height: "20", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M6 4 L10 8 L6 12", ...chevronPathProps }) });
|
|
11
|
+
}
|
|
12
|
+
function ChevronLeftIcon({ className = "chevron-icon" }) {
|
|
13
|
+
return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 16 16", width: "20", height: "20", "aria-hidden": "true", children: /* @__PURE__ */ jsx("path", { d: "M10 4 L6 8 L10 12", ...chevronPathProps }) });
|
|
14
|
+
}
|
|
15
|
+
export {
|
|
16
|
+
ChevronLeftIcon,
|
|
17
|
+
ChevronRightIcon
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=ChevronIcons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChevronIcons.js","sources":["../../src/icons/ChevronIcons.tsx"],"sourcesContent":["export type ChevronIconProps = {\n className?: string;\n};\n\nconst chevronPathProps = {\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 1.75,\n strokeLinecap: 'square' as const,\n strokeLinejoin: 'miter' as const,\n};\n\nexport function ChevronRightIcon({ className = 'chevron-icon' }: ChevronIconProps) {\n return (\n <svg className={className} viewBox=\"0 0 16 16\" width=\"20\" height=\"20\" aria-hidden=\"true\">\n <path d=\"M6 4 L10 8 L6 12\" {...chevronPathProps} />\n </svg>\n );\n}\n\nexport function ChevronLeftIcon({ className = 'chevron-icon' }: ChevronIconProps) {\n return (\n <svg className={className} viewBox=\"0 0 16 16\" width=\"20\" height=\"20\" aria-hidden=\"true\">\n <path d=\"M10 4 L6 8 L10 12\" {...chevronPathProps} />\n </svg>\n );\n}\n"],"names":[],"mappings":";AAIA,MAAM,mBAAmB;AAAA,EACvB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,eAAe;AAAA,EACf,gBAAgB;AAClB;AAEO,SAAS,iBAAiB,EAAE,YAAY,kBAAoC;AACjF,6BACG,OAAA,EAAI,WAAsB,SAAQ,aAAY,OAAM,MAAK,QAAO,MAAK,eAAY,QAChF,UAAA,oBAAC,QAAA,EAAK,GAAE,oBAAoB,GAAG,kBAAkB,GACnD;AAEJ;AAEO,SAAS,gBAAgB,EAAE,YAAY,kBAAoC;AAChF,6BACG,OAAA,EAAI,WAAsB,SAAQ,aAAY,OAAM,MAAK,QAAO,MAAK,eAAY,QAChF,UAAA,oBAAC,QAAA,EAAK,GAAE,qBAAqB,GAAG,kBAAkB,GACpD;AAEJ;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type DropdownMenuChevronProps = {
|
|
2
|
+
className?: string;
|
|
3
|
+
size?: number;
|
|
4
|
+
};
|
|
5
|
+
export declare function DropdownMenuChevron({ className, size }: DropdownMenuChevronProps): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
//# sourceMappingURL=DropdownMenuChevron.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownMenuChevron.d.ts","sourceRoot":"","sources":["../../src/icons/DropdownMenuChevron.tsx"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,SAAmC,EAAE,IAAI,EAAE,EAAE,wBAAwB,2CAgB1G"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
function DropdownMenuChevron({ className = "dropdown-menu-chevron", size }) {
|
|
3
|
+
const width = size ?? "0.72em";
|
|
4
|
+
const height = size ?? "0.72em";
|
|
5
|
+
return /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 16 16", width, height, "aria-hidden": "true", children: /* @__PURE__ */ jsx(
|
|
6
|
+
"path",
|
|
7
|
+
{
|
|
8
|
+
d: "M4 7 L8 11 L12 7",
|
|
9
|
+
fill: "none",
|
|
10
|
+
stroke: "currentColor",
|
|
11
|
+
strokeWidth: "1.75",
|
|
12
|
+
strokeLinecap: "square",
|
|
13
|
+
strokeLinejoin: "miter"
|
|
14
|
+
}
|
|
15
|
+
) });
|
|
16
|
+
}
|
|
17
|
+
export {
|
|
18
|
+
DropdownMenuChevron
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=DropdownMenuChevron.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropdownMenuChevron.js","sources":["../../src/icons/DropdownMenuChevron.tsx"],"sourcesContent":["export type DropdownMenuChevronProps = {\n className?: string;\n size?: number;\n};\n\nexport function DropdownMenuChevron({ className = 'dropdown-menu-chevron', size }: DropdownMenuChevronProps) {\n const width = size ?? '0.72em';\n const height = size ?? '0.72em';\n\n return (\n <svg className={className} viewBox=\"0 0 16 16\" width={width} height={height} aria-hidden=\"true\">\n <path\n d=\"M4 7 L8 11 L12 7\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.75\"\n strokeLinecap=\"square\"\n strokeLinejoin=\"miter\"\n />\n </svg>\n );\n}\n"],"names":[],"mappings":";AAKO,SAAS,oBAAoB,EAAE,YAAY,yBAAyB,QAAkC;AAC3G,QAAM,QAAQ,QAAQ;AACtB,QAAM,SAAS,QAAQ;AAEvB,SACE,oBAAC,SAAI,WAAsB,SAAQ,aAAY,OAAc,QAAgB,eAAY,QACvF,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,GAAE;AAAA,MACF,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,IAAA;AAAA,EAAA,GAEnB;AAEJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InfoCircleIcon.d.ts","sourceRoot":"","sources":["../../src/icons/InfoCircleIcon.tsx"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAAG;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAAE,SAAkC,EAAE,EAAE,mBAAmB,2CAUzF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
function InfoCircleIcon({ className = "app-info-circle-icon" }) {
|
|
3
|
+
return /* @__PURE__ */ jsxs("svg", { className, viewBox: "0 0 24 24", width: "20", height: "20", "aria-hidden": true, children: [
|
|
4
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "9", fill: "none", stroke: "currentColor", strokeWidth: "2" }),
|
|
5
|
+
/* @__PURE__ */ jsx(
|
|
6
|
+
"path",
|
|
7
|
+
{
|
|
8
|
+
fill: "currentColor",
|
|
9
|
+
d: "M12 10.25a1.1 1.1 0 1 0 0-2.2 1.1 1.1 0 0 0 0 2.2Zm-.15 1.05c-.55 0-1 .35-1 .9v4.1c0 .55.45.9 1 .9h.3c.55 0 1-.35 1-.9v-4.1c0-.55-.45-.9-1-.9h-.3Z"
|
|
10
|
+
}
|
|
11
|
+
)
|
|
12
|
+
] });
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
InfoCircleIcon
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=InfoCircleIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InfoCircleIcon.js","sources":["../../src/icons/InfoCircleIcon.tsx"],"sourcesContent":["export type InfoCircleIconProps = {\n className?: string;\n};\n\nexport function InfoCircleIcon({ className = 'app-info-circle-icon' }: InfoCircleIconProps) {\n return (\n <svg className={className} viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" aria-hidden>\n <circle cx=\"12\" cy=\"12\" r=\"9\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path\n fill=\"currentColor\"\n d=\"M12 10.25a1.1 1.1 0 1 0 0-2.2 1.1 1.1 0 0 0 0 2.2Zm-.15 1.05c-.55 0-1 .35-1 .9v4.1c0 .55.45.9 1 .9h.3c.55 0 1-.35 1-.9v-4.1c0-.55-.45-.9-1-.9h-.3Z\"\n />\n </svg>\n );\n}\n"],"names":[],"mappings":";AAIO,SAAS,eAAe,EAAE,YAAY,0BAA+C;AAC1F,SACE,qBAAC,OAAA,EAAI,WAAsB,SAAQ,aAAY,OAAM,MAAK,QAAO,MAAK,eAAW,MAC/E,UAAA;AAAA,IAAA,oBAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,KAAI,MAAK,QAAO,QAAO,gBAAe,aAAY,KAAI;AAAA,IAChF;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,GAAE;AAAA,MAAA;AAAA,IAAA;AAAA,EACJ,GACF;AAEJ;"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ChevronLeftIcon, ChevronRightIcon, type ChevronIconProps } from './ChevronIcons';
|
|
2
|
+
export { DropdownMenuChevron, type DropdownMenuChevronProps } from './DropdownMenuChevron';
|
|
3
|
+
export { InfoCircleIcon, type InfoCircleIconProps } from './InfoCircleIcon';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ChevronLeftIcon, ChevronRightIcon } from "./ChevronIcons.js";
|
|
2
|
+
import { DropdownMenuChevron } from "./DropdownMenuChevron.js";
|
|
3
|
+
import { InfoCircleIcon } from "./InfoCircleIcon.js";
|
|
4
|
+
export {
|
|
5
|
+
ChevronLeftIcon,
|
|
6
|
+
ChevronRightIcon,
|
|
7
|
+
DropdownMenuChevron,
|
|
8
|
+
InfoCircleIcon
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { AboutDialog } from "./dialog/AboutDialog.js";
|
|
2
|
+
import { ChevronLeftIcon, ChevronRightIcon } from "./icons/ChevronIcons.js";
|
|
3
|
+
import { ConfirmDialog } from "./dialog/ConfirmDialog.js";
|
|
4
|
+
import { ConfirmDialogOverlay } from "./dialog/ConfirmDialogOverlay.js";
|
|
5
|
+
import { DropdownMenuChevron } from "./icons/DropdownMenuChevron.js";
|
|
6
|
+
import { FloatingMenu } from "./menu/FloatingMenu.js";
|
|
7
|
+
import { InfoCircleIcon } from "./icons/InfoCircleIcon.js";
|
|
8
|
+
import { MobileActionSheet } from "./menu/MobileActionSheet.js";
|
|
9
|
+
import { MobileActionSheetContent } from "./menu/MobileActionSheetContent.js";
|
|
10
|
+
import { OVERLAY_HISTORY_STATE_KEY, isOverlayHistoryState, pushOverlayHistoryState } from "./overlay/overlayHistory.js";
|
|
11
|
+
import { OVERLAY_Z_BASE, OVERLAY_Z_STEP, computeOverlayZIndex } from "./overlay/overlayStackTypes.js";
|
|
12
|
+
import { OverlayStackProvider, useOverlayStack } from "./overlay/OverlayStackProvider.js";
|
|
13
|
+
import { SiteOverlayBackdrop } from "./overlay/SiteOverlayBackdrop.js";
|
|
14
|
+
import { computeFloatingMenuGeometry } from "./menu/computeFloatingMenuGeometry.js";
|
|
15
|
+
import { mergeOverlayRefs, useOverlayPresence, withOverlayOpen } from "./presence/useOverlayPresence.js";
|
|
16
|
+
import { useFloatingMenuGeometry } from "./menu/useFloatingMenuGeometry.js";
|
|
17
|
+
import { useOverlayStackEntry } from "./overlay/useOverlayStackEntry.js";
|
|
18
|
+
export {
|
|
19
|
+
AboutDialog,
|
|
20
|
+
ChevronLeftIcon,
|
|
21
|
+
ChevronRightIcon,
|
|
22
|
+
ConfirmDialog,
|
|
23
|
+
ConfirmDialogOverlay,
|
|
24
|
+
DropdownMenuChevron,
|
|
25
|
+
FloatingMenu,
|
|
26
|
+
InfoCircleIcon,
|
|
27
|
+
MobileActionSheet,
|
|
28
|
+
MobileActionSheetContent,
|
|
29
|
+
OVERLAY_HISTORY_STATE_KEY,
|
|
30
|
+
OVERLAY_Z_BASE,
|
|
31
|
+
OVERLAY_Z_STEP,
|
|
32
|
+
OverlayStackProvider,
|
|
33
|
+
SiteOverlayBackdrop,
|
|
34
|
+
computeFloatingMenuGeometry,
|
|
35
|
+
computeOverlayZIndex,
|
|
36
|
+
isOverlayHistoryState,
|
|
37
|
+
mergeOverlayRefs,
|
|
38
|
+
pushOverlayHistoryState,
|
|
39
|
+
useFloatingMenuGeometry,
|
|
40
|
+
useOverlayPresence,
|
|
41
|
+
useOverlayStack,
|
|
42
|
+
useOverlayStackEntry,
|
|
43
|
+
withOverlayOpen
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export type FloatingMenuItem = {
|
|
3
|
+
kind: 'item';
|
|
4
|
+
id: string;
|
|
5
|
+
label: ReactNode;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
title?: string;
|
|
8
|
+
onSelect: () => void;
|
|
9
|
+
};
|
|
10
|
+
export type FloatingMenuSeparator = {
|
|
11
|
+
kind: 'separator';
|
|
12
|
+
id: string;
|
|
13
|
+
};
|
|
14
|
+
export type FloatingMenuEntry = FloatingMenuItem | FloatingMenuSeparator;
|
|
15
|
+
export type FloatingMenuTriggerVariant = 'labeled' | 'icon';
|
|
16
|
+
export type FloatingMenuProps = {
|
|
17
|
+
menuAriaLabel: string;
|
|
18
|
+
items: FloatingMenuEntry[];
|
|
19
|
+
triggerLabel?: ReactNode;
|
|
20
|
+
triggerIcon?: ReactNode;
|
|
21
|
+
triggerVariant?: FloatingMenuTriggerVariant;
|
|
22
|
+
triggerClassName?: string;
|
|
23
|
+
triggerAriaLabel?: string;
|
|
24
|
+
scrollRootSelector?: string;
|
|
25
|
+
wrapClassName?: string;
|
|
26
|
+
};
|
|
27
|
+
export declare function FloatingMenu({ menuAriaLabel, items, triggerLabel, triggerIcon, triggerVariant, triggerClassName, triggerAriaLabel, scrollRootSelector, wrapClassName, }: FloatingMenuProps): import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
//# sourceMappingURL=FloatingMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FloatingMenu.d.ts","sourceRoot":"","sources":["../../src/menu/FloatingMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAM3E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,gBAAgB,GAAG,qBAAqB,CAAC;AAEzE,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAaF,wBAAgB,YAAY,CAAC,EAC3B,aAAa,EACb,KAAK,EACL,YAAY,EACZ,WAAW,EACX,cAA0B,EAC1B,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,aAA+B,GAChC,EAAE,iBAAiB,2CAqHnB"}
|