m2m-components 5.1.4-alpha-1725852045986-c9ff28f.0 → 5.1.4-alpha-0-9ac30bf.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/MenuBaseElement.js.map +1 -1
- package/MenuBaseElement.mjs +1 -1
- package/{chunk-RIKI6TTQ.mjs → chunk-2F7MVYJV.mjs} +5 -5
- package/chunk-2F7MVYJV.mjs.map +1 -0
- package/chunk-32NVR4HG.mjs +18 -0
- package/chunk-32NVR4HG.mjs.map +1 -0
- package/chunk-34OP4R54.mjs +114 -0
- package/chunk-34OP4R54.mjs.map +1 -0
- package/{chunk-YXPSTKYY.mjs → chunk-3LXMUAGW.mjs} +4 -4
- package/chunk-3LXMUAGW.mjs.map +1 -0
- package/chunk-3X5MOATG.mjs +9 -0
- package/chunk-3X5MOATG.mjs.map +1 -0
- package/{chunk-B6FEFIYC.mjs → chunk-4WYT3ILE.mjs} +2 -2
- package/chunk-4WYT3ILE.mjs.map +1 -0
- package/chunk-5DZIFMOT.mjs +96 -0
- package/chunk-5DZIFMOT.mjs.map +1 -0
- package/chunk-5MCHUEWC.mjs +40 -0
- package/chunk-5MCHUEWC.mjs.map +1 -0
- package/{chunk-HI2D4CLX.mjs → chunk-6YUMRFSL.mjs} +1 -1
- package/chunk-6YUMRFSL.mjs.map +1 -0
- package/chunk-7UFH6ALM.mjs +24 -0
- package/chunk-7UFH6ALM.mjs.map +1 -0
- package/chunk-AYYVMRUA.mjs +94 -0
- package/chunk-AYYVMRUA.mjs.map +1 -0
- package/chunk-BUSDHSUG.mjs +61 -0
- package/chunk-BUSDHSUG.mjs.map +1 -0
- package/{chunk-RDG67OF7.mjs → chunk-DJMCUABY.mjs} +4 -4
- package/chunk-F4UMH2JS.mjs +74 -0
- package/chunk-F4UMH2JS.mjs.map +1 -0
- package/chunk-FDRD4YS4.mjs +34 -0
- package/chunk-FDRD4YS4.mjs.map +1 -0
- package/{chunk-CR2KP7D3.mjs → chunk-FK5456TR.mjs} +2 -2
- package/{chunk-YZIPEODC.mjs → chunk-H6D6RG6X.mjs} +1 -1
- package/chunk-H6D6RG6X.mjs.map +1 -0
- package/chunk-IYTHV2XJ.mjs +22 -0
- package/chunk-IYTHV2XJ.mjs.map +1 -0
- package/chunk-JTHAKXEH.mjs +8992 -0
- package/chunk-JTHAKXEH.mjs.map +1 -0
- package/chunk-KE76CQSA.mjs +41 -0
- package/chunk-KE76CQSA.mjs.map +1 -0
- package/chunk-KEFPOQJ5.mjs +83 -0
- package/chunk-KEFPOQJ5.mjs.map +1 -0
- package/chunk-LUTUMV2M.mjs +166 -0
- package/chunk-LUTUMV2M.mjs.map +1 -0
- package/chunk-MHR3UXOP.mjs +154 -0
- package/{chunk-HI2D4CLX.mjs.map → chunk-MHR3UXOP.mjs.map} +1 -1
- package/chunk-OB2SVLHW.mjs +289 -0
- package/chunk-OB2SVLHW.mjs.map +1 -0
- package/chunk-P4FPJRVQ.mjs +17 -0
- package/{chunk-S7FCKJZP.mjs → chunk-RUMO4IC5.mjs} +1 -1
- package/chunk-RUMO4IC5.mjs.map +1 -0
- package/{chunk-LAH6LOT7.mjs → chunk-UIR5V5YH.mjs} +5 -5
- package/chunk-UXYQOQLC.mjs +28 -0
- package/chunk-UXYQOQLC.mjs.map +1 -0
- package/chunk-V74QQNBA.mjs +21 -0
- package/chunk-V74QQNBA.mjs.map +1 -0
- package/chunk-WLLFVGUS.mjs +441 -0
- package/chunk-WLLFVGUS.mjs.map +1 -0
- package/chunk-YMWGGIJ6.mjs +19 -0
- package/chunk-YMWGGIJ6.mjs.map +1 -0
- package/chunk-YSF5KXHA.mjs +54 -0
- package/chunk-YSF5KXHA.mjs.map +1 -0
- package/chunk-ZJKAXJ7Z.mjs +78 -0
- package/chunk-ZJKAXJ7Z.mjs.map +1 -0
- package/feedback/index.mjs +2 -2
- package/global.d.d.mts +5 -1
- package/global.d.d.ts +5 -1
- package/global.d.js.map +1 -1
- package/index.js +2 -3
- package/index.js.map +1 -1
- package/index.mjs +10 -10
- package/initM2mComponents.js +4 -5
- package/initM2mComponents.js.map +1 -1
- package/initM2mComponents.mjs +2 -2
- package/m2m-apps-menu.js.map +1 -1
- package/m2m-apps-menu.mjs +2 -2
- package/m2m-notifications.v1-OgnhtmrU.d.mts +64 -0
- package/m2m-notifications.v1-OgnhtmrU.d.ts +64 -0
- package/m2m-releases-link.js.map +1 -1
- package/m2m-releases-link.mjs +1 -1
- package/m2m-user-menu.js +2 -3
- package/m2m-user-menu.js.map +1 -1
- package/m2m-user-menu.mjs +3 -3
- package/m2m-users.v1-kKGcXd92.d.mts +271 -0
- package/m2m-users.v1-kKGcXd92.d.ts +271 -0
- package/matsuri-forms.v1-lw-XWLjX.d.mts +203 -0
- package/matsuri-forms.v1-lw-XWLjX.d.ts +203 -0
- package/notification/index.mjs +6 -6
- package/package.json +57 -57
- package/releases/t.js.map +1 -1
- package/releases/t.mjs +1 -1
- package/storage/client.js +4 -5
- package/storage/client.js.map +1 -1
- package/storage/client.mjs +1 -1
- package/storage/hub.js.map +1 -1
- package/storage/hub.mjs +1 -1
- package/storage/refreshAuth.js +2 -3
- package/storage/refreshAuth.js.map +1 -1
- package/storage/refreshAuth.mjs +3 -3
- package/storage/useM2mAuth.js +2 -3
- package/storage/useM2mAuth.js.map +1 -1
- package/storage/useM2mAuth.mjs +6 -6
- package/storage/useM2mAuth.mjs.map +1 -1
- package/chunk-B6FEFIYC.mjs.map +0 -1
- package/chunk-RIKI6TTQ.mjs.map +0 -1
- package/chunk-S7FCKJZP.mjs.map +0 -1
- package/chunk-YXPSTKYY.mjs.map +0 -1
- /package/{chunk-RDG67OF7.mjs.map → chunk-DJMCUABY.mjs.map} +0 -0
- /package/{chunk-CR2KP7D3.mjs.map → chunk-FK5456TR.mjs.map} +0 -0
- /package/{chunk-YZIPEODC.mjs.map → chunk-P4FPJRVQ.mjs.map} +0 -0
- /package/{chunk-LAH6LOT7.mjs.map → chunk-UIR5V5YH.mjs.map} +0 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
// src/storage/jwt.tsx
|
|
4
|
+
var isObject = (value) => {
|
|
5
|
+
return typeof value === "object" && value !== null;
|
|
6
|
+
};
|
|
7
|
+
var validateJwtPayload = (payload) => {
|
|
8
|
+
if (isObject(payload) === false) {
|
|
9
|
+
throw new Error("JWT payload is not an object");
|
|
10
|
+
}
|
|
11
|
+
if (typeof (payload == null ? void 0 : payload.exp) !== "number" || typeof (payload == null ? void 0 : payload.userId) !== "string") {
|
|
12
|
+
throw new Error("JWT payload is missing required fields");
|
|
13
|
+
}
|
|
14
|
+
return payload;
|
|
15
|
+
};
|
|
16
|
+
var parseJwtPayload = (jwt) => {
|
|
17
|
+
try {
|
|
18
|
+
const splitted = jwt.split(".");
|
|
19
|
+
if (splitted.length !== 3) {
|
|
20
|
+
throw new Error("Invalid JWT");
|
|
21
|
+
}
|
|
22
|
+
const [, payload] = splitted;
|
|
23
|
+
return validateJwtPayload(JSON.parse(atob(payload)));
|
|
24
|
+
} catch (error) {
|
|
25
|
+
console.error(error);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var checkJwtExpiration = (jwt) => {
|
|
30
|
+
const payload = parseJwtPayload(jwt);
|
|
31
|
+
if (!payload) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return /* @__PURE__ */ new Date() < new Date(payload.exp * 1e3);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export {
|
|
38
|
+
parseJwtPayload,
|
|
39
|
+
checkJwtExpiration
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=chunk-KE76CQSA.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/jwt.tsx"],"sourcesContent":["interface JwtPayload {\r\n aud: string;\r\n authority: string;\r\n companyId: string;\r\n exp: number;\r\n iss: string;\r\n loginType: string;\r\n scope: Record<string, string>;\r\n userId: string;\r\n}\r\n\r\nconst isObject = (value: unknown): value is Record<string, unknown> => {\r\n return typeof value === \"object\" && value !== null;\r\n};\r\n/**\r\n * 利用するパラメータが存在するかどうかを確認する\r\n */\r\nconst validateJwtPayload = (payload: unknown): JwtPayload => {\r\n if (isObject(payload) === false) {\r\n throw new Error(\"JWT payload is not an object\");\r\n }\r\n\r\n if (typeof payload?.exp !== \"number\" || typeof payload?.userId !== \"string\") {\r\n throw new Error(\"JWT payload is missing required fields\");\r\n }\r\n\r\n return payload as unknown as JwtPayload;\r\n};\r\n\r\nexport const parseJwtPayload = (jwt: string): JwtPayload | null => {\r\n try {\r\n const splitted = jwt.split(\".\");\r\n if (splitted.length !== 3) {\r\n throw new Error(\"Invalid JWT\");\r\n }\r\n const [, payload] = splitted;\r\n return validateJwtPayload(JSON.parse(atob(payload)));\r\n } catch (error: unknown) {\r\n console.error(error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const checkJwtExpiration = (jwt: string): boolean => {\r\n const payload = parseJwtPayload(jwt);\r\n if (!payload) {\r\n return false;\r\n }\r\n return new Date() < new Date(payload.exp * 1000);\r\n};\r\n"],"mappings":";;;AAWA,IAAM,WAAW,CAAC,UAAqD;AACrE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAIA,IAAM,qBAAqB,CAAC,YAAiC;AAC3D,MAAI,SAAS,OAAO,MAAM,OAAO;AAC/B,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AAEA,MAAI,QAAO,mCAAS,SAAQ,YAAY,QAAO,mCAAS,YAAW,UAAU;AAC3E,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AAEA,SAAO;AACT;AAEO,IAAM,kBAAkB,CAAC,QAAmC;AACjE,MAAI;AACF,UAAM,WAAW,IAAI,MAAM,GAAG;AAC9B,QAAI,SAAS,WAAW,GAAG;AACzB,YAAM,IAAI,MAAM,aAAa;AAAA,IAC/B;AACA,UAAM,CAAC,EAAE,OAAO,IAAI;AACpB,WAAO,mBAAmB,KAAK,MAAM,KAAK,OAAO,CAAC,CAAC;AAAA,EACrD,SAAS,OAAgB;AACvB,YAAQ,MAAM,KAAK;AACnB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,qBAAqB,CAAC,QAAyB;AAC1D,QAAM,UAAU,gBAAgB,GAAG;AACnC,MAAI,CAAC,SAAS;AACZ,WAAO;AAAA,EACT;AACA,SAAO,oBAAI,KAAK,IAAI,IAAI,KAAK,QAAQ,MAAM,GAAI;AACjD;","names":[]}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import {
|
|
3
|
+
useServiceId
|
|
4
|
+
} from "./chunk-UXYQOQLC.mjs";
|
|
5
|
+
import {
|
|
6
|
+
m2mNotifications_v1
|
|
7
|
+
} from "./chunk-34OP4R54.mjs";
|
|
8
|
+
|
|
9
|
+
// src/notification/NotificationProvider.tsx
|
|
10
|
+
import {
|
|
11
|
+
createContext,
|
|
12
|
+
useCallback,
|
|
13
|
+
useContext
|
|
14
|
+
} from "react";
|
|
15
|
+
import { useAuthFetch } from "matsuri-hooks";
|
|
16
|
+
import { useMemo } from "react";
|
|
17
|
+
import { jsx } from "react/jsx-runtime";
|
|
18
|
+
var NotificationPermissionContext = createContext(void 0);
|
|
19
|
+
var NotificationsContext = createContext(void 0);
|
|
20
|
+
var NotificationsProvider = ({
|
|
21
|
+
token,
|
|
22
|
+
children
|
|
23
|
+
}) => {
|
|
24
|
+
const serviceId = useServiceId();
|
|
25
|
+
const { data: subscriptions, refetch: refetchSubscriptions } = useAuthFetch(token, m2mNotifications_v1.findMySubscriptions(), {});
|
|
26
|
+
const checkPermission = useCallback(
|
|
27
|
+
(notificationType) => {
|
|
28
|
+
const subscription = subscriptions == null ? void 0 : subscriptions.find((item) => {
|
|
29
|
+
return item.serviceId === serviceId && item.notificationType === notificationType && item.resourceSubscription.resourceSelectType === "any";
|
|
30
|
+
});
|
|
31
|
+
return subscription == null ? void 0 : subscription.status;
|
|
32
|
+
},
|
|
33
|
+
[serviceId, subscriptions]
|
|
34
|
+
);
|
|
35
|
+
const {
|
|
36
|
+
data: notifications,
|
|
37
|
+
error,
|
|
38
|
+
refetch: refetchNotifications
|
|
39
|
+
} = useAuthFetch(
|
|
40
|
+
token,
|
|
41
|
+
m2mNotifications_v1.findNotificationsByServiceId({ id: serviceId }),
|
|
42
|
+
{ swrConfig: { refreshInterval: 1e3 * 60 * 5 } }
|
|
43
|
+
);
|
|
44
|
+
if (error) {
|
|
45
|
+
console.error(error);
|
|
46
|
+
}
|
|
47
|
+
const permissionContextState = useMemo(() => {
|
|
48
|
+
return {
|
|
49
|
+
checkPermission,
|
|
50
|
+
refetch: refetchSubscriptions
|
|
51
|
+
};
|
|
52
|
+
}, [checkPermission, refetchSubscriptions]);
|
|
53
|
+
const notificationsContextState = useMemo(() => {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
return {
|
|
56
|
+
notifications: (_a = notifications == null ? void 0 : notifications.data) != null ? _a : [],
|
|
57
|
+
isAllRead: (_b = notifications == null ? void 0 : notifications.data.every((n) => n.status === "read")) != null ? _b : true,
|
|
58
|
+
refetch: refetchNotifications
|
|
59
|
+
};
|
|
60
|
+
}, [refetchNotifications, notifications == null ? void 0 : notifications.data]);
|
|
61
|
+
return /* @__PURE__ */ jsx(NotificationPermissionContext.Provider, { value: permissionContextState, children: /* @__PURE__ */ jsx(NotificationsContext.Provider, { value: notificationsContextState, children }) });
|
|
62
|
+
};
|
|
63
|
+
var useNotifications = () => {
|
|
64
|
+
const ctx = useContext(NotificationsContext);
|
|
65
|
+
if (!ctx) {
|
|
66
|
+
throw new Error("NotificatoinProvider is not found");
|
|
67
|
+
}
|
|
68
|
+
return ctx;
|
|
69
|
+
};
|
|
70
|
+
var useNotificationPermission = () => {
|
|
71
|
+
const ctx = useContext(NotificationPermissionContext);
|
|
72
|
+
if (!ctx) {
|
|
73
|
+
throw new Error("NotificatoinProvider is not found");
|
|
74
|
+
}
|
|
75
|
+
return ctx;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export {
|
|
79
|
+
NotificationsProvider,
|
|
80
|
+
useNotifications,
|
|
81
|
+
useNotificationPermission
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=chunk-KEFPOQJ5.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/notification/NotificationProvider.tsx"],"sourcesContent":["import { Notification, Subscription, SubscriptionStatus } from \"./domain\";\nimport {\n PropsWithChildren,\n createContext,\n useCallback,\n useContext,\n} from \"react\";\nimport { m2mNotifications_v1 } from \"../endpoints/m2m-notifications.v1\";\nimport { useAuthFetch } from \"matsuri-hooks\";\nimport { useMemo } from \"react\";\nimport { useServiceId } from \"./ServiceIdProvider\";\n\nconst NotificationPermissionContext = createContext<\n | {\n checkPermission: (\n notificationType: string,\n ) => SubscriptionStatus | undefined;\n refetch: () => void;\n }\n | undefined\n>(undefined);\n\nconst NotificationsContext = createContext<\n | { notifications: Notification[]; isAllRead: boolean; refetch: () => void }\n | undefined\n>(undefined);\n\n// ServiceIdProviderの中で使うこと\nexport const NotificationsProvider = ({\n token,\n children,\n}: PropsWithChildren<{ token: string }>) => {\n const serviceId = useServiceId();\n\n const { data: subscriptions, refetch: refetchSubscriptions } = useAuthFetch<\n Subscription[]\n >(token, m2mNotifications_v1.findMySubscriptions(), {});\n const checkPermission = useCallback(\n (notificationType: string) => {\n const subscription = subscriptions?.find((item) => {\n return (\n item.serviceId === serviceId &&\n item.notificationType === notificationType &&\n item.resourceSubscription.resourceSelectType === \"any\"\n );\n });\n\n return subscription?.status;\n },\n [serviceId, subscriptions],\n );\n\n const {\n data: notifications,\n error,\n refetch: refetchNotifications,\n } = useAuthFetch<{ data: Notification[] }>(\n token,\n m2mNotifications_v1.findNotificationsByServiceId({ id: serviceId }),\n { swrConfig: { refreshInterval: 1000 * 60 * 5 } },\n );\n if (error) {\n // エラーが出てもユーザーは特に困らないので、ユーザーに伝える必要はないが、監視は必要。\n console.error(error);\n }\n\n const permissionContextState = useMemo(() => {\n return {\n checkPermission,\n refetch: refetchSubscriptions,\n };\n }, [checkPermission, refetchSubscriptions]);\n\n const notificationsContextState = useMemo(() => {\n return {\n notifications: notifications?.data ?? [],\n isAllRead: notifications?.data.every((n) => n.status === \"read\") ?? true,\n refetch: refetchNotifications,\n };\n }, [refetchNotifications, notifications?.data]);\n\n return (\n <NotificationPermissionContext.Provider value={permissionContextState}>\n <NotificationsContext.Provider value={notificationsContextState}>\n {children}\n </NotificationsContext.Provider>\n </NotificationPermissionContext.Provider>\n );\n};\n\nexport const useNotifications = () => {\n const ctx = useContext(NotificationsContext);\n if (!ctx) {\n throw new Error(\"NotificatoinProvider is not found\");\n }\n\n return ctx;\n};\n\nexport const useNotificationPermission = () => {\n const ctx = useContext(NotificationPermissionContext);\n if (!ctx) {\n throw new Error(\"NotificatoinProvider is not found\");\n }\n\n return ctx;\n};\n"],"mappings":";;;;;;;;;AACA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AA0ElB;AAvEN,IAAM,gCAAgC,cAQpC,MAAS;AAEX,IAAM,uBAAuB,cAG3B,MAAS;AAGJ,IAAM,wBAAwB,CAAC;AAAA,EACpC;AAAA,EACA;AACF,MAA4C;AAC1C,QAAM,YAAY,aAAa;AAE/B,QAAM,EAAE,MAAM,eAAe,SAAS,qBAAqB,IAAI,aAE7D,OAAO,oBAAoB,oBAAoB,GAAG,CAAC,CAAC;AACtD,QAAM,kBAAkB;AAAA,IACtB,CAAC,qBAA6B;AAC5B,YAAM,eAAe,+CAAe,KAAK,CAAC,SAAS;AACjD,eACE,KAAK,cAAc,aACnB,KAAK,qBAAqB,oBAC1B,KAAK,qBAAqB,uBAAuB;AAAA,MAErD;AAEA,aAAO,6CAAc;AAAA,IACvB;AAAA,IACA,CAAC,WAAW,aAAa;AAAA,EAC3B;AAEA,QAAM;AAAA,IACJ,MAAM;AAAA,IACN;AAAA,IACA,SAAS;AAAA,EACX,IAAI;AAAA,IACF;AAAA,IACA,oBAAoB,6BAA6B,EAAE,IAAI,UAAU,CAAC;AAAA,IAClE,EAAE,WAAW,EAAE,iBAAiB,MAAO,KAAK,EAAE,EAAE;AAAA,EAClD;AACA,MAAI,OAAO;AAET,YAAQ,MAAM,KAAK;AAAA,EACrB;AAEA,QAAM,yBAAyB,QAAQ,MAAM;AAC3C,WAAO;AAAA,MACL;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF,GAAG,CAAC,iBAAiB,oBAAoB,CAAC;AAE1C,QAAM,4BAA4B,QAAQ,MAAM;AAzElD;AA0EI,WAAO;AAAA,MACL,gBAAe,oDAAe,SAAf,YAAuB,CAAC;AAAA,MACvC,YAAW,oDAAe,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,YAA9C,YAAyD;AAAA,MACpE,SAAS;AAAA,IACX;AAAA,EACF,GAAG,CAAC,sBAAsB,+CAAe,IAAI,CAAC;AAE9C,SACE,oBAAC,8BAA8B,UAA9B,EAAuC,OAAO,wBAC7C,8BAAC,qBAAqB,UAArB,EAA8B,OAAO,2BACnC,UACH,GACF;AAEJ;AAEO,IAAM,mBAAmB,MAAM;AACpC,QAAM,MAAM,WAAW,oBAAoB;AAC3C,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAEA,SAAO;AACT;AAEO,IAAM,4BAA4B,MAAM;AAC7C,QAAM,MAAM,WAAW,6BAA6B;AACpD,MAAI,CAAC,KAAK;AACR,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
|
|
3
|
+
// src/storage/lib/client.ts
|
|
4
|
+
var generateUUID = () => {
|
|
5
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(c) {
|
|
6
|
+
const r = Math.random() * 16 | 0, v = c == "x" ? r : r & 3 | 8;
|
|
7
|
+
return v.toString(16);
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var StorageClient = class {
|
|
11
|
+
constructor(url, opts) {
|
|
12
|
+
opts = opts || {};
|
|
13
|
+
this.id = generateUUID();
|
|
14
|
+
this.frameId = opts.frameId || "CrossStorageClient-" + this.id;
|
|
15
|
+
this.origin = new URL(url).origin;
|
|
16
|
+
this.requests = {};
|
|
17
|
+
this.connected = false;
|
|
18
|
+
this.closed = false;
|
|
19
|
+
this.count = 0;
|
|
20
|
+
this.timeout = opts.timeout || 5e3;
|
|
21
|
+
window.addEventListener("message", this.listener.bind(this), false);
|
|
22
|
+
const frame = this.createFrame(url);
|
|
23
|
+
this.hub = frame.contentWindow;
|
|
24
|
+
}
|
|
25
|
+
onConnect() {
|
|
26
|
+
if (this.connected) {
|
|
27
|
+
return Promise.resolve();
|
|
28
|
+
} else if (this.closed) {
|
|
29
|
+
return Promise.reject(new Error("StorageClient has closed."));
|
|
30
|
+
}
|
|
31
|
+
if (!this.requests.connect) {
|
|
32
|
+
this.requests.connect = [];
|
|
33
|
+
}
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
const timeout = setTimeout(function() {
|
|
36
|
+
reject(new Error("StorageClient could not connect."));
|
|
37
|
+
}, this.timeout);
|
|
38
|
+
this.requests.connect.push((err) => {
|
|
39
|
+
clearTimeout(timeout);
|
|
40
|
+
if (err)
|
|
41
|
+
return reject(err);
|
|
42
|
+
resolve(void 0);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
set(key, value) {
|
|
47
|
+
return this.request("set", {
|
|
48
|
+
key,
|
|
49
|
+
value
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
get(...keys) {
|
|
53
|
+
return this.request("get", { keys });
|
|
54
|
+
}
|
|
55
|
+
del(...keys) {
|
|
56
|
+
return this.request("del", { keys });
|
|
57
|
+
}
|
|
58
|
+
clear() {
|
|
59
|
+
return this.request("clear");
|
|
60
|
+
}
|
|
61
|
+
getKeys() {
|
|
62
|
+
this.request("getKeys");
|
|
63
|
+
}
|
|
64
|
+
close() {
|
|
65
|
+
const frame = document.getElementById(this.frameId);
|
|
66
|
+
if (frame && frame.parentNode) {
|
|
67
|
+
frame.parentNode.removeChild(frame);
|
|
68
|
+
}
|
|
69
|
+
window.removeEventListener("message", this.listener, false);
|
|
70
|
+
this.connected = false;
|
|
71
|
+
this.closed = true;
|
|
72
|
+
}
|
|
73
|
+
listener(message) {
|
|
74
|
+
let i, error, response;
|
|
75
|
+
if (this.closed || !message.data || typeof message.data !== "string") {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const origin = message.origin;
|
|
79
|
+
if (origin !== this.origin)
|
|
80
|
+
return;
|
|
81
|
+
if (message.data === "cross-storage:unavailable") {
|
|
82
|
+
if (!this.closed)
|
|
83
|
+
this.close();
|
|
84
|
+
if (!this.requests.connect)
|
|
85
|
+
return;
|
|
86
|
+
error = new Error(
|
|
87
|
+
"Closing StorageClient. Could not access localStorage in StorageHub."
|
|
88
|
+
);
|
|
89
|
+
for (i = 0; i < this.requests.connect.length; i++) {
|
|
90
|
+
this.requests.connect[i](error);
|
|
91
|
+
}
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (message.data.indexOf("cross-storage:") !== -1 && !this.connected) {
|
|
95
|
+
this.connected = true;
|
|
96
|
+
if (!this.requests.connect)
|
|
97
|
+
return;
|
|
98
|
+
for (i = 0; i < this.requests.connect.length; i++) {
|
|
99
|
+
this.requests.connect[i](error);
|
|
100
|
+
}
|
|
101
|
+
delete this.requests.connect;
|
|
102
|
+
}
|
|
103
|
+
if (message.data === "cross-storage:ready")
|
|
104
|
+
return;
|
|
105
|
+
try {
|
|
106
|
+
response = JSON.parse(message.data);
|
|
107
|
+
} catch (e) {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (!response.id)
|
|
111
|
+
return;
|
|
112
|
+
if (this.requests[response.id]) {
|
|
113
|
+
this.requests[response.id](response.error, response.result);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
createFrame(url) {
|
|
117
|
+
const frame = window.document.createElement("iframe");
|
|
118
|
+
frame.id = this.frameId;
|
|
119
|
+
frame.style.display = "none";
|
|
120
|
+
frame.style.position = "absolute";
|
|
121
|
+
frame.style.top = "-999px";
|
|
122
|
+
frame.style.left = "-999px";
|
|
123
|
+
window.document.body.appendChild(frame);
|
|
124
|
+
frame.src = url;
|
|
125
|
+
return frame;
|
|
126
|
+
}
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
128
|
+
request(method, params) {
|
|
129
|
+
if (this.closed) {
|
|
130
|
+
return Promise.reject(new Error("StorageClient has closed."));
|
|
131
|
+
}
|
|
132
|
+
this.count++;
|
|
133
|
+
const req = {
|
|
134
|
+
id: this.id + ":" + this.count,
|
|
135
|
+
method: "cross-storage:" + method,
|
|
136
|
+
params
|
|
137
|
+
};
|
|
138
|
+
return new Promise((resolve, reject) => {
|
|
139
|
+
const timeout = window.setTimeout(() => {
|
|
140
|
+
if (!this.requests[req.id])
|
|
141
|
+
return;
|
|
142
|
+
delete this.requests[req.id];
|
|
143
|
+
reject(
|
|
144
|
+
new Error("Timeout: StorageClient could not perform " + req.method)
|
|
145
|
+
);
|
|
146
|
+
}, this.timeout);
|
|
147
|
+
this.requests[req.id] = (err, result) => {
|
|
148
|
+
clearTimeout(timeout);
|
|
149
|
+
delete this.requests[req.id];
|
|
150
|
+
if (err)
|
|
151
|
+
return reject(new Error(err));
|
|
152
|
+
resolve(result);
|
|
153
|
+
};
|
|
154
|
+
if (this.hub) {
|
|
155
|
+
this.hub.postMessage(JSON.stringify(req), this.origin);
|
|
156
|
+
} else {
|
|
157
|
+
reject(new Error("Not found StorageHub."));
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
export {
|
|
164
|
+
StorageClient
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=chunk-LUTUMV2M.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/lib/client.ts"],"sourcesContent":["/**\n * この実装はcross-storageほぼそのままです。\n */\nconst generateUUID = () => {\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0,\n v = c == \"x\" ? r : (r & 0x3) | 0x8;\n\n return v.toString(16);\n });\n};\nexport class StorageClient {\n id: string;\n frameId: string;\n origin: string;\n requests: Record<string, any>;\n connected: boolean;\n closed: boolean;\n count: number;\n timeout: number;\n hub: null | Window;\n\n constructor(url: string, opts?: { frameId?: string; timeout?: number }) {\n opts = opts || {};\n\n this.id = generateUUID();\n this.frameId = opts.frameId || \"CrossStorageClient-\" + this.id;\n this.origin = new URL(url).origin;\n this.requests = {};\n this.connected = false;\n this.closed = false;\n this.count = 0;\n this.timeout = opts.timeout || 5000;\n\n window.addEventListener(\"message\", this.listener.bind(this), false);\n\n const frame = this.createFrame(url);\n this.hub = frame.contentWindow;\n }\n\n onConnect() {\n if (this.connected) {\n return Promise.resolve();\n } else if (this.closed) {\n return Promise.reject(new Error(\"StorageClient has closed.\"));\n }\n\n if (!this.requests.connect) {\n this.requests.connect = [];\n }\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(function () {\n reject(new Error(\"StorageClient could not connect.\"));\n }, this.timeout);\n\n this.requests.connect.push((err: string) => {\n clearTimeout(timeout);\n if (err) return reject(err);\n\n resolve(undefined);\n });\n });\n }\n\n set(key: string, value: string) {\n return this.request(\"set\", {\n key: key,\n value: value,\n });\n }\n\n get(...keys: string[]) {\n return this.request(\"get\", { keys });\n }\n\n del(...keys: string[]) {\n return this.request(\"del\", { keys });\n }\n\n clear() {\n return this.request(\"clear\");\n }\n\n getKeys() {\n this.request(\"getKeys\");\n }\n\n close() {\n const frame = document.getElementById(this.frameId);\n if (frame && frame.parentNode) {\n frame.parentNode.removeChild(frame);\n }\n\n window.removeEventListener(\"message\", this.listener, false);\n\n this.connected = false;\n this.closed = true;\n }\n\n private listener(message: MessageEvent) {\n let i, error, response;\n\n if (this.closed || !message.data || typeof message.data !== \"string\") {\n return;\n }\n\n const origin = message.origin;\n\n if (origin !== this.origin) return;\n\n if (message.data === \"cross-storage:unavailable\") {\n if (!this.closed) this.close();\n if (!this.requests.connect) return;\n\n error = new Error(\n \"Closing StorageClient. Could not access localStorage in StorageHub.\",\n );\n for (i = 0; i < this.requests.connect.length; i++) {\n this.requests.connect[i](error);\n }\n\n return;\n }\n\n if (message.data.indexOf(\"cross-storage:\") !== -1 && !this.connected) {\n this.connected = true;\n if (!this.requests.connect) return;\n\n for (i = 0; i < this.requests.connect.length; i++) {\n this.requests.connect[i](error);\n }\n delete this.requests.connect;\n }\n\n if (message.data === \"cross-storage:ready\") return;\n\n try {\n response = JSON.parse(message.data);\n } catch (e) {\n return;\n }\n\n if (!response.id) return;\n\n if (this.requests[response.id]) {\n this.requests[response.id](response.error, response.result);\n }\n }\n\n private createFrame(url: string) {\n const frame = window.document.createElement(\"iframe\");\n frame.id = this.frameId;\n\n frame.style.display = \"none\";\n frame.style.position = \"absolute\";\n frame.style.top = \"-999px\";\n frame.style.left = \"-999px\";\n\n window.document.body.appendChild(frame);\n frame.src = url;\n\n return frame;\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n private request(method: string, params?: {}) {\n if (this.closed) {\n return Promise.reject(new Error(\"StorageClient has closed.\"));\n }\n\n this.count++;\n\n const req = {\n id: this.id + \":\" + this.count,\n method: \"cross-storage:\" + method,\n params: params,\n };\n\n return new Promise((resolve, reject) => {\n const timeout = window.setTimeout(() => {\n if (!this.requests[req.id]) return;\n\n delete this.requests[req.id];\n reject(\n new Error(\"Timeout: StorageClient could not perform \" + req.method),\n );\n }, this.timeout);\n\n this.requests[req.id] = (err: string, result: string) => {\n clearTimeout(timeout);\n delete this.requests[req.id];\n if (err) return reject(new Error(err));\n resolve(result);\n };\n\n if (this.hub) {\n this.hub.postMessage(JSON.stringify(req), this.origin);\n } else {\n reject(new Error(\"Not found StorageHub.\"));\n }\n });\n }\n}\n"],"mappings":";;;AAGA,IAAM,eAAe,MAAM;AACzB,SAAO,uCAAuC,QAAQ,SAAS,SAAU,GAAG;AAC1E,UAAM,IAAK,KAAK,OAAO,IAAI,KAAM,GAC/B,IAAI,KAAK,MAAM,IAAK,IAAI,IAAO;AAEjC,WAAO,EAAE,SAAS,EAAE;AAAA,EACtB,CAAC;AACH;AACO,IAAM,gBAAN,MAAoB;AAAA,EAWzB,YAAY,KAAa,MAA+C;AACtE,WAAO,QAAQ,CAAC;AAEhB,SAAK,KAAK,aAAa;AACvB,SAAK,UAAU,KAAK,WAAW,wBAAwB,KAAK;AAC5D,SAAK,SAAS,IAAI,IAAI,GAAG,EAAE;AAC3B,SAAK,WAAW,CAAC;AACjB,SAAK,YAAY;AACjB,SAAK,SAAS;AACd,SAAK,QAAQ;AACb,SAAK,UAAU,KAAK,WAAW;AAE/B,WAAO,iBAAiB,WAAW,KAAK,SAAS,KAAK,IAAI,GAAG,KAAK;AAElE,UAAM,QAAQ,KAAK,YAAY,GAAG;AAClC,SAAK,MAAM,MAAM;AAAA,EACnB;AAAA,EAEA,YAAY;AACV,QAAI,KAAK,WAAW;AAClB,aAAO,QAAQ,QAAQ;AAAA,IACzB,WAAW,KAAK,QAAQ;AACtB,aAAO,QAAQ,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAAA,IAC9D;AAEA,QAAI,CAAC,KAAK,SAAS,SAAS;AAC1B,WAAK,SAAS,UAAU,CAAC;AAAA,IAC3B;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,WAAW,WAAY;AACrC,eAAO,IAAI,MAAM,kCAAkC,CAAC;AAAA,MACtD,GAAG,KAAK,OAAO;AAEf,WAAK,SAAS,QAAQ,KAAK,CAAC,QAAgB;AAC1C,qBAAa,OAAO;AACpB,YAAI;AAAK,iBAAO,OAAO,GAAG;AAE1B,gBAAQ,MAAS;AAAA,MACnB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,KAAa,OAAe;AAC9B,WAAO,KAAK,QAAQ,OAAO;AAAA,MACzB;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,OAAO,MAAgB;AACrB,WAAO,KAAK,QAAQ,OAAO,EAAE,KAAK,CAAC;AAAA,EACrC;AAAA,EAEA,OAAO,MAAgB;AACrB,WAAO,KAAK,QAAQ,OAAO,EAAE,KAAK,CAAC;AAAA,EACrC;AAAA,EAEA,QAAQ;AACN,WAAO,KAAK,QAAQ,OAAO;AAAA,EAC7B;AAAA,EAEA,UAAU;AACR,SAAK,QAAQ,SAAS;AAAA,EACxB;AAAA,EAEA,QAAQ;AACN,UAAM,QAAQ,SAAS,eAAe,KAAK,OAAO;AAClD,QAAI,SAAS,MAAM,YAAY;AAC7B,YAAM,WAAW,YAAY,KAAK;AAAA,IACpC;AAEA,WAAO,oBAAoB,WAAW,KAAK,UAAU,KAAK;AAE1D,SAAK,YAAY;AACjB,SAAK,SAAS;AAAA,EAChB;AAAA,EAEQ,SAAS,SAAuB;AACtC,QAAI,GAAG,OAAO;AAEd,QAAI,KAAK,UAAU,CAAC,QAAQ,QAAQ,OAAO,QAAQ,SAAS,UAAU;AACpE;AAAA,IACF;AAEA,UAAM,SAAS,QAAQ;AAEvB,QAAI,WAAW,KAAK;AAAQ;AAE5B,QAAI,QAAQ,SAAS,6BAA6B;AAChD,UAAI,CAAC,KAAK;AAAQ,aAAK,MAAM;AAC7B,UAAI,CAAC,KAAK,SAAS;AAAS;AAE5B,cAAQ,IAAI;AAAA,QACV;AAAA,MACF;AACA,WAAK,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,QAAQ,KAAK;AACjD,aAAK,SAAS,QAAQ,CAAC,EAAE,KAAK;AAAA,MAChC;AAEA;AAAA,IACF;AAEA,QAAI,QAAQ,KAAK,QAAQ,gBAAgB,MAAM,MAAM,CAAC,KAAK,WAAW;AACpE,WAAK,YAAY;AACjB,UAAI,CAAC,KAAK,SAAS;AAAS;AAE5B,WAAK,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,QAAQ,KAAK;AACjD,aAAK,SAAS,QAAQ,CAAC,EAAE,KAAK;AAAA,MAChC;AACA,aAAO,KAAK,SAAS;AAAA,IACvB;AAEA,QAAI,QAAQ,SAAS;AAAuB;AAE5C,QAAI;AACF,iBAAW,KAAK,MAAM,QAAQ,IAAI;AAAA,IACpC,SAAS,GAAG;AACV;AAAA,IACF;AAEA,QAAI,CAAC,SAAS;AAAI;AAElB,QAAI,KAAK,SAAS,SAAS,EAAE,GAAG;AAC9B,WAAK,SAAS,SAAS,EAAE,EAAE,SAAS,OAAO,SAAS,MAAM;AAAA,IAC5D;AAAA,EACF;AAAA,EAEQ,YAAY,KAAa;AAC/B,UAAM,QAAQ,OAAO,SAAS,cAAc,QAAQ;AACpD,UAAM,KAAK,KAAK;AAEhB,UAAM,MAAM,UAAU;AACtB,UAAM,MAAM,WAAW;AACvB,UAAM,MAAM,MAAM;AAClB,UAAM,MAAM,OAAO;AAEnB,WAAO,SAAS,KAAK,YAAY,KAAK;AACtC,UAAM,MAAM;AAEZ,WAAO;AAAA,EACT;AAAA;AAAA,EAGQ,QAAQ,QAAgB,QAAa;AAC3C,QAAI,KAAK,QAAQ;AACf,aAAO,QAAQ,OAAO,IAAI,MAAM,2BAA2B,CAAC;AAAA,IAC9D;AAEA,SAAK;AAEL,UAAM,MAAM;AAAA,MACV,IAAI,KAAK,KAAK,MAAM,KAAK;AAAA,MACzB,QAAQ,mBAAmB;AAAA,MAC3B;AAAA,IACF;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,UAAU,OAAO,WAAW,MAAM;AACtC,YAAI,CAAC,KAAK,SAAS,IAAI,EAAE;AAAG;AAE5B,eAAO,KAAK,SAAS,IAAI,EAAE;AAC3B;AAAA,UACE,IAAI,MAAM,8CAA8C,IAAI,MAAM;AAAA,QACpE;AAAA,MACF,GAAG,KAAK,OAAO;AAEf,WAAK,SAAS,IAAI,EAAE,IAAI,CAAC,KAAa,WAAmB;AACvD,qBAAa,OAAO;AACpB,eAAO,KAAK,SAAS,IAAI,EAAE;AAC3B,YAAI;AAAK,iBAAO,OAAO,IAAI,MAAM,GAAG,CAAC;AACrC,gBAAQ,MAAM;AAAA,MAChB;AAEA,UAAI,KAAK,KAAK;AACZ,aAAK,IAAI,YAAY,KAAK,UAAU,GAAG,GAAG,KAAK,MAAM;AAAA,MACvD,OAAO;AACL,eAAO,IAAI,MAAM,uBAAuB,CAAC;AAAA,MAC3C;AAAA,IACF,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
'use client'
|
|
2
|
+
import {
|
|
3
|
+
__decorateClass
|
|
4
|
+
} from "./chunk-BUSDHSUG.mjs";
|
|
5
|
+
|
|
6
|
+
// src/MenuBaseElement.ts
|
|
7
|
+
import { LitElement, css } from "lit";
|
|
8
|
+
import { createRef } from "lit/directives/ref.js";
|
|
9
|
+
import { property } from "lit/decorators.js";
|
|
10
|
+
var MenuBaseElement = class extends LitElement {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.handleClickOutside = (event) => {
|
|
14
|
+
if (!this.listRef.value || this.listRef.value.contains(event.composedPath()[0])) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
this.expanded = false;
|
|
18
|
+
};
|
|
19
|
+
this.additinalItems = [];
|
|
20
|
+
this.expanded = false;
|
|
21
|
+
this.handleToggleDrawer = (event) => {
|
|
22
|
+
event.preventDefault();
|
|
23
|
+
event.stopPropagation();
|
|
24
|
+
this.expanded = !this.expanded;
|
|
25
|
+
if (this.expanded) {
|
|
26
|
+
window.addEventListener("click", this.handleClickOutside, false);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
this.listRef = createRef();
|
|
30
|
+
}
|
|
31
|
+
updated() {
|
|
32
|
+
if (this.expanded === false) {
|
|
33
|
+
window.removeEventListener("click", this.handleClickOutside, false);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
disconnectedCallback() {
|
|
37
|
+
super.disconnectedCallback();
|
|
38
|
+
window.removeEventListener("click", this.handleClickOutside, false);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
MenuBaseElement.styles = css`
|
|
42
|
+
nav {
|
|
43
|
+
position: relative;
|
|
44
|
+
display: flex;
|
|
45
|
+
}
|
|
46
|
+
.navigation-drawer-controll-button {
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
|
|
51
|
+
height: 42px;
|
|
52
|
+
padding: 0;
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
background-color: transparent;
|
|
55
|
+
border: none;
|
|
56
|
+
transition: background-color 0.2s;
|
|
57
|
+
appearance: none;
|
|
58
|
+
}
|
|
59
|
+
.navigation-drawer-controll-button.navigation-drawer-controll-button--icon {
|
|
60
|
+
width: 42px;
|
|
61
|
+
}
|
|
62
|
+
.navigation-drawer-controll-button:hover {
|
|
63
|
+
background-color: rgba(0, 0, 0, 0.05);
|
|
64
|
+
}
|
|
65
|
+
.navigation-drawer-controll-button:active {
|
|
66
|
+
background-color: rgba(0, 0, 0, 0.075);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.navigation-drawer {
|
|
70
|
+
position: absolute;
|
|
71
|
+
top: 100%;
|
|
72
|
+
right: 0px;
|
|
73
|
+
z-index: 1100;
|
|
74
|
+
box-sizing: border-box;
|
|
75
|
+
min-width: 200px;
|
|
76
|
+
padding: 0px;
|
|
77
|
+
margin: 0px;
|
|
78
|
+
overflow: hidden;
|
|
79
|
+
color: rgba(0, 0, 0, 0.87);
|
|
80
|
+
white-space: nowrap;
|
|
81
|
+
list-style: none;
|
|
82
|
+
background-color: #fff;
|
|
83
|
+
border-radius: 5px;
|
|
84
|
+
box-shadow:
|
|
85
|
+
0px 1px 3px 0px rgb(0 0 0 / 20%),
|
|
86
|
+
0px 1px 1px 0px rgb(0 0 0 / 14%),
|
|
87
|
+
0px 2px 1px -1px rgb(0 0 0 / 12%);
|
|
88
|
+
}
|
|
89
|
+
.navigation-drawer-controll-button[aria-expanded="false"]
|
|
90
|
+
~ .navigation-drawer {
|
|
91
|
+
display: none;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.navigation-drawer li {
|
|
95
|
+
border-bottom: 1px solid #eeeeee;
|
|
96
|
+
}
|
|
97
|
+
.navigation-drawer li:last-of-type {
|
|
98
|
+
border-bottom: none;
|
|
99
|
+
}
|
|
100
|
+
.navigation-drawer li > a,
|
|
101
|
+
.navigation-drawer li > button {
|
|
102
|
+
box-sizing: border-box;
|
|
103
|
+
display: block;
|
|
104
|
+
width: 100%;
|
|
105
|
+
padding: 0;
|
|
106
|
+
padding: 0.6em 1em;
|
|
107
|
+
font: inherit;
|
|
108
|
+
color: inherit;
|
|
109
|
+
text-align: left;
|
|
110
|
+
text-decoration: none;
|
|
111
|
+
cursor: pointer;
|
|
112
|
+
cursor: pointer;
|
|
113
|
+
background-color: transparent;
|
|
114
|
+
border: none;
|
|
115
|
+
transition: 0.2s;
|
|
116
|
+
appearance: none;
|
|
117
|
+
}
|
|
118
|
+
.navigation-drawer li > a:hover,
|
|
119
|
+
.navigation-drawer li > button:hover {
|
|
120
|
+
background-color: #ededed;
|
|
121
|
+
}
|
|
122
|
+
.navigation-drawer li > a:active,
|
|
123
|
+
.navigation-drawer li > button:active {
|
|
124
|
+
background-color: #dadada;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.navigation-drawer li ul {
|
|
128
|
+
padding: 0;
|
|
129
|
+
list-style: none;
|
|
130
|
+
}
|
|
131
|
+
.navigation-drawer li:has(> ul) li > a {
|
|
132
|
+
padding-left: 2em;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.navigation-drawer li:has(> ul) > span {
|
|
136
|
+
display: block;
|
|
137
|
+
padding: 0.6em 1em;
|
|
138
|
+
border-bottom: 1px solid #eeeeee;
|
|
139
|
+
}
|
|
140
|
+
`;
|
|
141
|
+
__decorateClass([
|
|
142
|
+
property({
|
|
143
|
+
type: Object,
|
|
144
|
+
attribute: "additional-items"
|
|
145
|
+
})
|
|
146
|
+
], MenuBaseElement.prototype, "additinalItems", 2);
|
|
147
|
+
__decorateClass([
|
|
148
|
+
property()
|
|
149
|
+
], MenuBaseElement.prototype, "expanded", 2);
|
|
150
|
+
|
|
151
|
+
export {
|
|
152
|
+
MenuBaseElement
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=chunk-MHR3UXOP.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/MenuBaseElement.ts"],"sourcesContent":["import { LitElement, css } from \"lit\";\nimport { Ref, createRef } from \"lit/directives/ref.js\";\nimport { property } from \"lit/decorators.js\";\n\nexport interface MenuAdditionalItem {\n label: string;\n href: string;\n}\n\nexport interface MenuBaseElementProps {\n expanded: boolean;\n additinalItems: MenuAdditionalItem[];\n}\n\nexport class MenuBaseElement extends LitElement {\n static styles = css`\n nav {\n position: relative;\n display: flex;\n }\n .navigation-drawer-controll-button {\n display: flex;\n align-items: center;\n justify-content: center;\n\n height: 42px;\n padding: 0;\n cursor: pointer;\n background-color: transparent;\n border: none;\n transition: background-color 0.2s;\n appearance: none;\n }\n .navigation-drawer-controll-button.navigation-drawer-controll-button--icon {\n width: 42px;\n }\n .navigation-drawer-controll-button:hover {\n background-color: rgba(0, 0, 0, 0.05);\n }\n .navigation-drawer-controll-button:active {\n background-color: rgba(0, 0, 0, 0.075);\n }\n\n .navigation-drawer {\n position: absolute;\n top: 100%;\n right: 0px;\n z-index: 1100;\n box-sizing: border-box;\n min-width: 200px;\n padding: 0px;\n margin: 0px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.87);\n white-space: nowrap;\n list-style: none;\n background-color: #fff;\n border-radius: 5px;\n box-shadow:\n 0px 1px 3px 0px rgb(0 0 0 / 20%),\n 0px 1px 1px 0px rgb(0 0 0 / 14%),\n 0px 2px 1px -1px rgb(0 0 0 / 12%);\n }\n .navigation-drawer-controll-button[aria-expanded=\"false\"]\n ~ .navigation-drawer {\n display: none;\n }\n\n .navigation-drawer li {\n border-bottom: 1px solid #eeeeee;\n }\n .navigation-drawer li:last-of-type {\n border-bottom: none;\n }\n .navigation-drawer li > a,\n .navigation-drawer li > button {\n box-sizing: border-box;\n display: block;\n width: 100%;\n padding: 0;\n padding: 0.6em 1em;\n font: inherit;\n color: inherit;\n text-align: left;\n text-decoration: none;\n cursor: pointer;\n cursor: pointer;\n background-color: transparent;\n border: none;\n transition: 0.2s;\n appearance: none;\n }\n .navigation-drawer li > a:hover,\n .navigation-drawer li > button:hover {\n background-color: #ededed;\n }\n .navigation-drawer li > a:active,\n .navigation-drawer li > button:active {\n background-color: #dadada;\n }\n\n .navigation-drawer li ul {\n padding: 0;\n list-style: none;\n }\n .navigation-drawer li:has(> ul) li > a {\n padding-left: 2em;\n }\n\n .navigation-drawer li:has(> ul) > span {\n display: block;\n padding: 0.6em 1em;\n border-bottom: 1px solid #eeeeee;\n }\n `;\n\n handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (\n !this.listRef.value ||\n this.listRef.value.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n this.expanded = false;\n };\n\n @property({\n type: Object,\n attribute: \"additional-items\",\n })\n additinalItems: MenuBaseElementProps[\"additinalItems\"] = [];\n\n @property()\n expanded?: boolean = false;\n\n handleToggleDrawer = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n\n
|
|
1
|
+
{"version":3,"sources":["../src/MenuBaseElement.ts"],"sourcesContent":["import { LitElement, css } from \"lit\";\nimport { Ref, createRef } from \"lit/directives/ref.js\";\nimport { property } from \"lit/decorators.js\";\n\nexport interface MenuAdditionalItem {\n label: string;\n href: string;\n}\n\nexport interface MenuBaseElementProps {\n expanded: boolean;\n additinalItems: MenuAdditionalItem[];\n}\n\nexport class MenuBaseElement extends LitElement {\n static styles = css`\n nav {\n position: relative;\n display: flex;\n }\n .navigation-drawer-controll-button {\n display: flex;\n align-items: center;\n justify-content: center;\n\n height: 42px;\n padding: 0;\n cursor: pointer;\n background-color: transparent;\n border: none;\n transition: background-color 0.2s;\n appearance: none;\n }\n .navigation-drawer-controll-button.navigation-drawer-controll-button--icon {\n width: 42px;\n }\n .navigation-drawer-controll-button:hover {\n background-color: rgba(0, 0, 0, 0.05);\n }\n .navigation-drawer-controll-button:active {\n background-color: rgba(0, 0, 0, 0.075);\n }\n\n .navigation-drawer {\n position: absolute;\n top: 100%;\n right: 0px;\n z-index: 1100;\n box-sizing: border-box;\n min-width: 200px;\n padding: 0px;\n margin: 0px;\n overflow: hidden;\n color: rgba(0, 0, 0, 0.87);\n white-space: nowrap;\n list-style: none;\n background-color: #fff;\n border-radius: 5px;\n box-shadow:\n 0px 1px 3px 0px rgb(0 0 0 / 20%),\n 0px 1px 1px 0px rgb(0 0 0 / 14%),\n 0px 2px 1px -1px rgb(0 0 0 / 12%);\n }\n .navigation-drawer-controll-button[aria-expanded=\"false\"]\n ~ .navigation-drawer {\n display: none;\n }\n\n .navigation-drawer li {\n border-bottom: 1px solid #eeeeee;\n }\n .navigation-drawer li:last-of-type {\n border-bottom: none;\n }\n .navigation-drawer li > a,\n .navigation-drawer li > button {\n box-sizing: border-box;\n display: block;\n width: 100%;\n padding: 0;\n padding: 0.6em 1em;\n font: inherit;\n color: inherit;\n text-align: left;\n text-decoration: none;\n cursor: pointer;\n cursor: pointer;\n background-color: transparent;\n border: none;\n transition: 0.2s;\n appearance: none;\n }\n .navigation-drawer li > a:hover,\n .navigation-drawer li > button:hover {\n background-color: #ededed;\n }\n .navigation-drawer li > a:active,\n .navigation-drawer li > button:active {\n background-color: #dadada;\n }\n\n .navigation-drawer li ul {\n padding: 0;\n list-style: none;\n }\n .navigation-drawer li:has(> ul) li > a {\n padding-left: 2em;\n }\n\n .navigation-drawer li:has(> ul) > span {\n display: block;\n padding: 0.6em 1em;\n border-bottom: 1px solid #eeeeee;\n }\n `;\n\n handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (\n !this.listRef.value ||\n this.listRef.value.contains(event.composedPath()[0] as Node)\n ) {\n return;\n }\n this.expanded = false;\n };\n\n @property({\n type: Object,\n attribute: \"additional-items\",\n })\n additinalItems: MenuBaseElementProps[\"additinalItems\"] = [];\n\n @property()\n expanded?: boolean = false;\n\n handleToggleDrawer = (event: Event) => {\n event.preventDefault();\n event.stopPropagation();\n\n this.expanded = !this.expanded;\n if (this.expanded) {\n window.addEventListener(\"click\", this.handleClickOutside, false);\n }\n };\n\n protected updated() {\n if (this.expanded === false) {\n window.removeEventListener(\"click\", this.handleClickOutside, false);\n }\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener(\"click\", this.handleClickOutside, false);\n }\n\n listRef: Ref = createRef();\n}\n"],"mappings":";;;;;;AAAA,SAAS,YAAY,WAAW;AAChC,SAAc,iBAAiB;AAC/B,SAAS,gBAAgB;AAYlB,IAAM,kBAAN,cAA8B,WAAW;AAAA,EAAzC;AAAA;AAsGL,8BAAqB,CAAC,UAAmC;AACvD,UACE,CAAC,KAAK,QAAQ,SACd,KAAK,QAAQ,MAAM,SAAS,MAAM,aAAa,EAAE,CAAC,CAAS,GAC3D;AACA;AAAA,MACF;AACA,WAAK,WAAW;AAAA,IAClB;AAMA,0BAAyD,CAAC;AAG1D,oBAAqB;AAErB,8BAAqB,CAAC,UAAiB;AACrC,YAAM,eAAe;AACrB,YAAM,gBAAgB;AAEtB,WAAK,WAAW,CAAC,KAAK;AACtB,UAAI,KAAK,UAAU;AACjB,eAAO,iBAAiB,SAAS,KAAK,oBAAoB,KAAK;AAAA,MACjE;AAAA,IACF;AAaA,mBAAe,UAAU;AAAA;AAAA,EAXf,UAAU;AAClB,QAAI,KAAK,aAAa,OAAO;AAC3B,aAAO,oBAAoB,SAAS,KAAK,oBAAoB,KAAK;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,uBAA6B;AAC3B,UAAM,qBAAqB;AAC3B,WAAO,oBAAoB,SAAS,KAAK,oBAAoB,KAAK;AAAA,EACpE;AAGF;AA/Ia,gBACJ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmHhB;AAAA,EAJC,SAAS;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,EACb,CAAC;AAAA,GAnHU,gBAoHX;AAGA;AAAA,EADC,SAAS;AAAA,GAtHC,gBAuHX;","names":[]}
|