m2m-components 8.0.1-alpha-1764576157309-d3e17a0.0 → 8.0.1

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.
Files changed (51) hide show
  1. package/apps-data.d.mts +20 -0
  2. package/apps-data.d.ts +20 -0
  3. package/apps-data.js +68 -0
  4. package/apps-data.js.map +1 -0
  5. package/apps-data.mjs +8 -0
  6. package/apps-data.mjs.map +1 -0
  7. package/apps.d.mts +6 -15
  8. package/apps.d.ts +6 -15
  9. package/apps.js +17 -4
  10. package/apps.js.map +1 -1
  11. package/apps.mjs +6 -2
  12. package/{chunk-7VHUBWOT.mjs → chunk-AJ5ZCYYF.mjs} +4 -4
  13. package/chunk-AJ5ZCYYF.mjs.map +1 -0
  14. package/chunk-DHL4QNLZ.mjs +40 -0
  15. package/chunk-DHL4QNLZ.mjs.map +1 -0
  16. package/{chunk-3QIUILX5.mjs → chunk-ID5SKMBD.mjs} +7 -7
  17. package/chunk-ID5SKMBD.mjs.map +1 -0
  18. package/{chunk-CP2PCNLU.mjs → chunk-MHVPEHXH.mjs} +3 -22
  19. package/chunk-MHVPEHXH.mjs.map +1 -0
  20. package/chunk-QU6UIRWS.mjs +23 -0
  21. package/chunk-QU6UIRWS.mjs.map +1 -0
  22. package/chunk-UG5BQSSY.mjs +37 -0
  23. package/chunk-UG5BQSSY.mjs.map +1 -0
  24. package/domains-data.d.mts +13 -0
  25. package/domains-data.d.ts +13 -0
  26. package/domains-data.js +48 -0
  27. package/domains-data.js.map +1 -0
  28. package/domains-data.mjs +10 -0
  29. package/domains-data.mjs.map +1 -0
  30. package/domains.d.mts +6 -6
  31. package/domains.d.ts +6 -6
  32. package/domains.js +20 -5
  33. package/domains.js.map +1 -1
  34. package/domains.mjs +7 -3
  35. package/index.js +20 -12
  36. package/index.js.map +1 -1
  37. package/index.mjs +8 -6
  38. package/m2m-apps-menu.js +19 -11
  39. package/m2m-apps-menu.js.map +1 -1
  40. package/m2m-apps-menu.mjs +5 -3
  41. package/m2m-user-menu.js +9 -5
  42. package/m2m-user-menu.js.map +1 -1
  43. package/m2m-user-menu.mjs +4 -3
  44. package/package.json +1 -1
  45. package/storage/refreshAuth.mjs +1 -1
  46. package/storage/useM2mAuth.mjs +4 -4
  47. package/chunk-3QIUILX5.mjs.map +0 -1
  48. package/chunk-7VHUBWOT.mjs.map +0 -1
  49. package/chunk-CP2PCNLU.mjs.map +0 -1
  50. package/chunk-ZBZMUI2R.mjs +0 -42
  51. package/chunk-ZBZMUI2R.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/m2m-apps-menu.ts","../src/MenuBaseElement.ts","../src/storage/getM2MStorageHubDomain.ts","../src/domains.ts","../src/apps.ts"],"sourcesContent":["import { customElement } from \"lit/decorators.js\";\nimport { html } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { Task } from \"@lit/task\";\nimport { MenuBaseElement, MenuBaseElementProps } from \"./MenuBaseElement\";\nimport { useDomains } from \"./domains\";\nimport { useApps } from \"./apps\";\n\nexport type M2MAppsMenuProps = MenuBaseElementProps;\n\n@customElement(\"m2m-apps-menu\")\nexport class M2MAppsMenu extends MenuBaseElement {\n private _dataTask = new Task(this, {\n task: async (_: unknown, { signal }) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const apps = await useApps(signal);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const domains = await useDomains(signal);\n return { apps, domains };\n },\n args: () => [],\n });\n\n render() {\n const isHidden = this.expanded === false || this.expanded === undefined;\n\n const additionalItems = this.additinalItems?.map((item) => {\n return html`\n <li>\n <a href=\"${item.href}\">${item.label}</a>\n </li>\n `;\n });\n\n return html`<nav>\n <button\n type=\"button\"\n class=\"navigation-drawer-controll-button navigation-drawer-controll-button--icon\"\n aria-controls=\"m2m-apps-menu__navigation-drawer\"\n aria-expanded=${this.expanded}\n @click=${this.handleToggleDrawer}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"38px\"\n height=\"38px\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M4 8h4V4H4v4zm6 12h4v-4h-4v4zm-6 0h4v-4H4v4zm0-6h4v-4H4v4zm6 0h4v-4h-4v4zm6-10v4h4V4h-4zm-6 4h4V4h-4v4zm6 6h4v-4h-4v4zm0 6h4v-4h-4v4z\"\n />\n </svg>\n </button>\n <ul\n ${ref(this.listRef)}\n id=\"m2m-apps-menu__navigation-drawer\"\n aria-hidden=${isHidden}\n class=\"navigation-drawer\"\n >\n ${this._dataTask.render({\n pending: () => html`<li><a disabled href=\"#\">Loading...</a></li>`,\n complete: ({ apps, domains }) => {\n return apps.map((app) => {\n return app.type === \"group\"\n ? html`\n <li>\n <span>${app.label}</span>\n <ul>\n ${app.children.map((child) => {\n // 2段ネストはサポートしない\n if (child.type === \"link\") {\n return html`\n <li>\n <a href=\"${domains[child.key]}\"\n >${child.label}</a\n >\n </li>\n `;\n }\n })}\n </ul>\n </li>\n `\n : html`\n <li>\n <a href=\"${domains[app.key]}\">${app.label}</a>\n </li>\n `;\n });\n },\n })}\n ${additionalItems}\n </ul>\n </nav>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"m2m-apps-menu\": M2MAppsMenu;\n }\n}\n","import { LitElement, css } from \"lit\";\nimport { Ref, createRef } from \"lit/directives/ref.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 declare additinalItems: MenuBaseElementProps[\"additinalItems\"];\n declare expanded: boolean;\n static properties = {\n additinalItems: {\n type: Object,\n attribute: \"additional-items\",\n },\n expanded: {\n type: Boolean,\n attribute: \"expanded\",\n },\n };\n\n constructor() {\n super();\n this.additinalItems = [];\n this.expanded = false;\n }\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","export const getM2MStorageHubDomain = (env?: \"production\" | \"development\") => {\n if (env === \"production\" || globalThis.M2M_COMPONENTS_ENV === \"production\") {\n return \"https://hub.m2msystems.cloud\";\n }\n return \"https://hub.dev.m2msystems.cloud\";\n};\n","import { getM2MStorageHubDomain } from \"./storage/getM2MStorageHubDomain\";\nimport { type AppLinkKey } from \"./apps\";\n\nexport type DomainRecord = Record<AppLinkKey, string>;\n\nexport const developmentDomains: DomainRecord = {\n core: \"https://core.dev.m2msystems.cloud\",\n sumyca: \"https://manage.dev.sumyca.com\",\n cleaning: \"https://manager-cleaning.dev.m2msystems.cloud\",\n users: \"https://manage-users.dev.m2msystems.cloud\",\n checkin: \"https://manage.checkin.dev.m2msystems.cloud\",\n systems: \"https://dev.m2msystems.cloud\",\n};\n\nexport const productionDomains: DomainRecord = {\n core: \"https://core.m2msystems.cloud\",\n sumyca: \"https://manage.sumyca.com\",\n cleaning: \"https://manager-cleaning.m2msystems.cloud\",\n users: \"https://manage-users.m2msystems.cloud\",\n checkin: \"https://manage.checkin.m2msystems.cloud\",\n systems: \"https://m2msystems.cloud/\",\n};\n\n/**\n * 可能なら最新のドメインを取得し、取得出来なければリリース時のドメインを返す。\n * Q. なぜgetDomainsではなくuseDomainsなのか\n * A. M2M_COMPONENTS_ENVが設定される前に、この関数が呼び出されると常にdevelopmentになってしまうため、\n * Reactを利用するケースを考えるとコンポーネントのレンダリング時などに呼んでもらう必要がある。\n * React hookのような命名にしておくことで、Linterによってこれを強制できる。\n */\nexport const useDomains = async (\n signal?: AbortSignal,\n): Promise<DomainRecord> => {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n try {\n const domain = getM2MStorageHubDomain(env);\n const response = await fetch(`${domain}/api/domains/${env}`, { signal });\n if (!response.ok) {\n throw new Error(`Failed to fetch domains: ${response.statusText}`);\n }\n const data = (await response.json()) as DomainRecord;\n return data;\n } catch {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? productionDomains\n : developmentDomains;\n }\n};\n","import { getM2MStorageHubDomain } from \"./storage/getM2MStorageHubDomain\";\n\ninterface AppGroup {\n label: string;\n type: \"group\";\n children: App[];\n}\n\nexport type AppLinkKey =\n | \"core\"\n | \"checkin\"\n | \"systems\"\n | \"cleaning\"\n | \"users\"\n | \"sumyca\";\n\ninterface AppLink {\n label: string;\n type: \"link\";\n key: AppLinkKey;\n}\n\nexport type App = AppGroup | AppLink;\n\nexport const apps: App[] = [\n {\n label: \"m2m Series\",\n type: \"group\",\n children: [\n {\n label: \"Core 施設管理\",\n type: \"link\",\n key: \"core\",\n },\n {\n label: \"Checkin ゲストチェックイン\",\n type: \"link\",\n key: \"checkin\",\n },\n {\n label: \"Systems Airbnb連携\",\n type: \"link\",\n key: \"systems\",\n },\n {\n label: \"Cleaning 清掃管理\",\n type: \"link\",\n key: \"cleaning\",\n },\n {\n label: \"Users アカウント管理\",\n type: \"link\",\n key: \"users\",\n },\n ],\n },\n {\n label: \"Sumyca マンスリープラットフォーム\",\n key: \"sumyca\",\n type: \"link\",\n },\n];\n\nexport const useApps = async (signal?: AbortSignal): Promise<App[]> => {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n try {\n const domain = getM2MStorageHubDomain(env);\n const response = await fetch(`${domain}/api/apps`, { signal });\n if (!response.ok) {\n throw new Error(`Failed to fetch apps: ${response.statusText}`);\n }\n const data = (await response.json()) as App[];\n return data;\n } catch {\n return apps;\n }\n};\n"],"mappings":"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","names":["import_lit","import_ref","apps"]}
1
+ {"version":3,"sources":["../src/m2m-apps-menu.ts","../src/MenuBaseElement.ts","../src/domains.ts","../src/storage/getM2MStorageHubDomain.ts","../src/domains-data.ts","../src/apps.ts","../src/apps-data.ts"],"sourcesContent":["import { customElement } from \"lit/decorators.js\";\nimport { html } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { Task } from \"@lit/task\";\nimport { MenuBaseElement, MenuBaseElementProps } from \"./MenuBaseElement\";\nimport { domainsPromise } from \"./domains\";\nimport { appsPromise } from \"./apps\";\n\nexport type M2MAppsMenuProps = MenuBaseElementProps;\n\n@customElement(\"m2m-apps-menu\")\nexport class M2MAppsMenu extends MenuBaseElement {\n private _dataTask = new Task(this, {\n task: async (_: unknown, { signal }) => {\n const apps = await appsPromise(signal);\n\n const domains = await domainsPromise(signal);\n return { apps, domains };\n },\n args: () => [],\n });\n\n render() {\n const isHidden = this.expanded === false || this.expanded === undefined;\n\n const additionalItems = this.additinalItems?.map((item) => {\n return html`\n <li>\n <a href=\"${item.href}\">${item.label}</a>\n </li>\n `;\n });\n\n return html`<nav>\n <button\n type=\"button\"\n class=\"navigation-drawer-controll-button navigation-drawer-controll-button--icon\"\n aria-controls=\"m2m-apps-menu__navigation-drawer\"\n aria-expanded=${this.expanded}\n @click=${this.handleToggleDrawer}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"38px\"\n height=\"38px\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M4 8h4V4H4v4zm6 12h4v-4h-4v4zm-6 0h4v-4H4v4zm0-6h4v-4H4v4zm6 0h4v-4h-4v4zm6-10v4h4V4h-4zm-6 4h4V4h-4v4zm6 6h4v-4h-4v4zm0 6h4v-4h-4v4z\"\n />\n </svg>\n </button>\n <ul\n ${ref(this.listRef)}\n id=\"m2m-apps-menu__navigation-drawer\"\n aria-hidden=${isHidden}\n class=\"navigation-drawer\"\n >\n ${this._dataTask.render({\n pending: () => html`<li><a disabled href=\"#\">Loading...</a></li>`,\n complete: ({ apps, domains }) => {\n return apps.map((app) => {\n return app.type === \"group\"\n ? html`\n <li>\n <span>${app.label}</span>\n <ul>\n ${app.children.map((child) => {\n // 2段ネストはサポートしない\n if (child.type === \"link\") {\n return html`\n <li>\n <a href=\"${domains[child.key]}\"\n >${child.label}</a\n >\n </li>\n `;\n }\n })}\n </ul>\n </li>\n `\n : html`\n <li>\n <a href=\"${domains[app.key]}\">${app.label}</a>\n </li>\n `;\n });\n },\n })}\n ${additionalItems}\n </ul>\n </nav>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"m2m-apps-menu\": M2MAppsMenu;\n }\n}\n","import { LitElement, css } from \"lit\";\nimport { Ref, createRef } from \"lit/directives/ref.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 declare additinalItems: MenuBaseElementProps[\"additinalItems\"];\n declare expanded: boolean;\n static properties = {\n additinalItems: {\n type: Object,\n attribute: \"additional-items\",\n },\n expanded: {\n type: Boolean,\n attribute: \"expanded\",\n },\n };\n\n constructor() {\n super();\n this.additinalItems = [];\n this.expanded = false;\n }\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","import { useFetch } from \"matsuri-hooks\";\nimport { getM2MStorageHubDomain } from \"./storage/getM2MStorageHubDomain\";\nimport {\n type DomainRecord,\n productionDomains,\n developmentDomains,\n} from \"./domains-data\";\n\nexport * from \"./domains-data\";\n\n/**\n * 可能なら最新のドメインを取得し、取得出来なければリリース時のドメインを返す。\n * Q. なぜgetDomainsではなくuseDomainsなのか\n * A. M2M_COMPONENTS_ENVが設定される前に、この関数が呼び出されると常にdevelopmentになってしまうため、\n * Reactを利用するケースを考えるとコンポーネントのレンダリング時などに呼んでもらう必要がある。\n * React hookのような命名にしておくことで、Linterによってこれを強制できる。\n */\nexport const useDomains = (): DomainRecord => {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n const domain = getM2MStorageHubDomain(env);\n const { data, error } = useFetch<DomainRecord>(\n `${domain}/api/domains/${env}`,\n );\n if (error || !data) {\n return env === \"production\" ? productionDomains : developmentDomains;\n }\n return data;\n};\n\nexport const domainsPromise = async (\n signal?: AbortSignal,\n): Promise<DomainRecord> => {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n try {\n const domain = getM2MStorageHubDomain(env);\n const response = await fetch(`${domain}/api/domains/${env}`, { signal });\n if (!response.ok) {\n throw new Error(`Failed to fetch domains: ${response.statusText}`);\n }\n return response.json() as Promise<DomainRecord>;\n } catch {\n return env === \"production\" ? productionDomains : developmentDomains;\n }\n};\n","export const getM2MStorageHubDomain = (env?: \"production\" | \"development\") => {\n if (env === \"production\" || globalThis.M2M_COMPONENTS_ENV === \"production\") {\n return \"https://hub.m2msystems.cloud\";\n }\n return \"https://hub.dev.m2msystems.cloud\";\n};\n","/**\n * Next.jsのAPI Routesなど、サーバーサイドでインポートする際に\n * クライアントサイドのHooks(swr等)への依存によるビルドエラーを避けるため、\n * 定数データのみをこのファイルに分離しています。\n */\nimport { type AppLinkKey } from \"./apps-data\";\n\nexport type DomainRecord = Record<AppLinkKey, string>;\n\nexport const developmentDomains: DomainRecord = {\n core: \"https://core.dev.m2msystems.cloud\",\n sumyca: \"https://manage.dev.sumyca.com\",\n cleaning: \"https://manager-cleaning.dev.m2msystems.cloud\",\n users: \"https://manage-users.dev.m2msystems.cloud\",\n checkin: \"https://manage.checkin.dev.m2msystems.cloud\",\n systems: \"https://dev.m2msystems.cloud\",\n};\n\nexport const productionDomains: DomainRecord = {\n core: \"https://core.m2msystems.cloud\",\n sumyca: \"https://manage.sumyca.com\",\n cleaning: \"https://manager-cleaning.m2msystems.cloud\",\n users: \"https://manage-users.m2msystems.cloud\",\n checkin: \"https://manage.checkin.m2msystems.cloud\",\n systems: \"https://m2msystems.cloud/\",\n};\n","import { useFetch } from \"matsuri-hooks\";\nimport { getM2MStorageHubDomain } from \"./storage/getM2MStorageHubDomain\";\nimport { type App, apps } from \"./apps-data\";\n\nexport * from \"./apps-data\";\n\nexport const useApps = (): App[] => {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n const domain = getM2MStorageHubDomain(env);\n const { data, error } = useFetch<App[]>(`${domain}/api/apps`);\n if (error || !data) {\n return apps;\n }\n return data;\n};\n\nexport const appsPromise = async (signal?: AbortSignal): Promise<App[]> => {\n try {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n const domain = getM2MStorageHubDomain(env);\n const response = await fetch(`${domain}/api/apps`, { signal });\n if (!response.ok) {\n throw new Error(`Failed to fetch apps: ${response.statusText}`);\n }\n return response.json() as Promise<App[]>;\n } catch {\n return apps;\n }\n};\n","/**\n * Next.jsのAPI Routesなど、サーバーサイドでインポートする際に\n * クライアントサイドのHooks(swr等)への依存によるビルドエラーを避けるため、\n * 定数データのみをこのファイルに分離しています。\n */\ninterface AppGroup {\n label: string;\n type: \"group\";\n children: App[];\n}\n\nexport type AppLinkKey =\n | \"core\"\n | \"checkin\"\n | \"systems\"\n | \"cleaning\"\n | \"users\"\n | \"sumyca\";\n\ninterface AppLink {\n label: string;\n type: \"link\";\n key: AppLinkKey;\n}\n\nexport type App = AppGroup | AppLink;\n\nexport const apps: App[] = [\n {\n label: \"m2m Series\",\n type: \"group\",\n children: [\n {\n label: \"Core 施設管理\",\n type: \"link\",\n key: \"core\",\n },\n {\n label: \"Checkin ゲストチェックイン\",\n type: \"link\",\n key: \"checkin\",\n },\n {\n label: \"Systems Airbnb連携\",\n type: \"link\",\n key: \"systems\",\n },\n {\n label: \"Cleaning 清掃管理\",\n type: \"link\",\n key: \"cleaning\",\n },\n {\n label: \"Users アカウント管理\",\n type: \"link\",\n key: \"users\",\n },\n ],\n },\n {\n label: \"Sumyca マンスリープラットフォーム\",\n key: \"sumyca\",\n type: \"link\",\n },\n];\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAA8B;AAC9B,IAAAA,cAAqB;AACrB,IAAAC,cAAoB;AACpB,kBAAqB;;;ACHrB,iBAAgC;AAChC,iBAA+B;AAYxB,IAAM,kBAAN,cAA8B,sBAAW;AAAA,EA6H9C,cAAc;AACZ,UAAM;AAxBR,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;AAqBA,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,uBAAe,sBAAU;AAzBvB,SAAK,iBAAiB,CAAC;AACvB,SAAK,WAAW;AAAA,EAClB;AAAA,EAYU,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;AAzJa,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;AADL,gBAkHJ,aAAa;AAAA,EAClB,gBAAgB;AAAA,IACd,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AACF;;;ACxIF,2BAAyB;;;ACAlB,IAAM,yBAAyB,CAAC,QAAuC;AAC5E,MAAI,QAAQ,gBAAgB,WAAW,uBAAuB,cAAc;AAC1E,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACIO,IAAM,qBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AACX;AAEO,IAAM,oBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AACX;;;AFOO,IAAM,iBAAiB,OAC5B,WAC0B;AAC1B,QAAM,MACJ,WAAW,uBAAuB,eAC9B,eACA;AACN,MAAI;AACF,UAAM,SAAS,uBAAuB,GAAG;AACzC,UAAM,WAAW,MAAM,MAAM,GAAG,MAAM,gBAAgB,GAAG,IAAI,EAAE,OAAO,CAAC;AACvE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,4BAA4B,SAAS,UAAU,EAAE;AAAA,IACnE;AACA,WAAO,SAAS,KAAK;AAAA,EACvB,QAAQ;AACN,WAAO,QAAQ,eAAe,oBAAoB;AAAA,EACpD;AACF;;;AGjDA,IAAAC,wBAAyB;;;AC2BlB,IAAM,OAAc;AAAA,EACzB;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AACF;;;AD7CO,IAAM,cAAc,OAAO,WAAyC;AACzE,MAAI;AACF,UAAM,MACJ,WAAW,uBAAuB,eAC9B,eACA;AACN,UAAM,SAAS,uBAAuB,GAAG;AACzC,UAAM,WAAW,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,OAAO,CAAC;AAC7D,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,yBAAyB,SAAS,UAAU,EAAE;AAAA,IAChE;AACA,WAAO,SAAS,KAAK;AAAA,EACvB,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ALvBO,IAAM,cAAN,cAA0B,gBAAgB;AAAA,EAA1C;AAAA;AACL,SAAQ,YAAY,IAAI,iBAAK,MAAM;AAAA,MACjC,MAAM,OAAO,GAAY,EAAE,OAAO,MAAM;AACtC,cAAMC,QAAO,MAAM,YAAY,MAAM;AAErC,cAAM,UAAU,MAAM,eAAe,MAAM;AAC3C,eAAO,EAAE,MAAAA,OAAM,QAAQ;AAAA,MACzB;AAAA,MACA,MAAM,MAAM,CAAC;AAAA,IACf,CAAC;AAAA;AAAA,EAED,SAAS;AAtBX;AAuBI,UAAM,WAAW,KAAK,aAAa,SAAS,KAAK,aAAa;AAE9D,UAAM,mBAAkB,UAAK,mBAAL,mBAAqB,IAAI,CAAC,SAAS;AACzD,aAAO;AAAA;AAAA,qBAEQ,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA;AAAA;AAAA,IAGzC;AAEA,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKa,KAAK,QAAQ;AAAA,iBACpB,KAAK,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAc9B,iBAAI,KAAK,OAAO,CAAC;AAAA;AAAA,sBAEL,QAAQ;AAAA;AAAA;AAAA,UAGpB,KAAK,UAAU,OAAO;AAAA,MACtB,SAAS,MAAM;AAAA,MACf,UAAU,CAAC,EAAE,MAAAA,OAAM,QAAQ,MAAM;AAC/B,eAAOA,MAAK,IAAI,CAAC,QAAQ;AACvB,iBAAO,IAAI,SAAS,UAChB;AAAA;AAAA,8BAEY,IAAI,KAAK;AAAA;AAAA,0BAEb,IAAI,SAAS,IAAI,CAAC,UAAU;AAE5B,gBAAI,MAAM,SAAS,QAAQ;AACzB,qBAAO;AAAA;AAAA,2CAEQ,QAAQ,MAAM,GAAG,CAAC;AAAA,qCACxB,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA,YAItB;AAAA,UACF,CAAC,CAAC;AAAA;AAAA;AAAA,sBAIR;AAAA;AAAA,iCAEe,QAAQ,IAAI,GAAG,CAAC,KAAK,IAAI,KAAK;AAAA;AAAA;AAAA,QAGnD,CAAC;AAAA,MACH;AAAA,IACF,CAAC,CAAC;AAAA,UACA,eAAe;AAAA;AAAA;AAAA,EAGvB;AACF;AAnFa,cAAN;AAAA,MADN,iCAAc,eAAe;AAAA,GACjB;","names":["import_lit","import_ref","import_matsuri_hooks","apps"]}
package/m2m-apps-menu.mjs CHANGED
@@ -1,9 +1,11 @@
1
1
  import {
2
2
  M2MAppsMenu
3
- } from "./chunk-3QIUILX5.mjs";
3
+ } from "./chunk-ID5SKMBD.mjs";
4
4
  import "./chunk-5EK67DDX.mjs";
5
- import "./chunk-CP2PCNLU.mjs";
6
- import "./chunk-ZBZMUI2R.mjs";
5
+ import "./chunk-UG5BQSSY.mjs";
6
+ import "./chunk-MHVPEHXH.mjs";
7
+ import "./chunk-DHL4QNLZ.mjs";
8
+ import "./chunk-QU6UIRWS.mjs";
7
9
  import "./chunk-W5DAWJ2F.mjs";
8
10
  import "./chunk-ZOXT4E27.mjs";
9
11
  export {
package/m2m-user-menu.js CHANGED
@@ -287,6 +287,9 @@ MenuBaseElement.properties = {
287
287
  };
288
288
 
289
289
  // src/domains.ts
290
+ var import_matsuri_hooks = require("matsuri-hooks");
291
+
292
+ // src/domains-data.ts
290
293
  var developmentDomains = {
291
294
  core: "https://core.dev.m2msystems.cloud",
292
295
  sumyca: "https://manage.dev.sumyca.com",
@@ -303,7 +306,9 @@ var productionDomains = {
303
306
  checkin: "https://manage.checkin.m2msystems.cloud",
304
307
  systems: "https://m2msystems.cloud/"
305
308
  };
306
- var useDomains = async (signal) => {
309
+
310
+ // src/domains.ts
311
+ var domainsPromise = async (signal) => {
307
312
  const env = globalThis.M2M_COMPONENTS_ENV === "production" ? "production" : "development";
308
313
  try {
309
314
  const domain = getM2MStorageHubDomain(env);
@@ -311,10 +316,9 @@ var useDomains = async (signal) => {
311
316
  if (!response.ok) {
312
317
  throw new Error(`Failed to fetch domains: ${response.statusText}`);
313
318
  }
314
- const data = await response.json();
315
- return data;
319
+ return response.json();
316
320
  } catch {
317
- return globalThis.M2M_COMPONENTS_ENV === "production" ? productionDomains : developmentDomains;
321
+ return env === "production" ? productionDomains : developmentDomains;
318
322
  }
319
323
  };
320
324
 
@@ -328,7 +332,7 @@ var M2MUserMenu = class extends MenuBaseElement {
328
332
  };
329
333
  this._usersUrlTask = new import_task.Task(this, {
330
334
  task: async (_, { signal }) => {
331
- const domains = await useDomains(signal);
335
+ const domains = await domainsPromise(signal);
332
336
  return domains.users;
333
337
  },
334
338
  args: () => []
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/m2m-user-menu.ts","../src/storage/getM2MStorageHubDomain.ts","../src/storage/client.ts","../src/storage/persistenceDatabase.ts","../src/storage/clearAuth.tsx","../src/MenuBaseElement.ts","../src/domains.ts"],"sourcesContent":["import { customElement } from \"lit/decorators.js\";\nimport { html } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { Task } from \"@lit/task\";\nimport { clearAuth } from \"./storage/clearAuth\";\nimport { MenuBaseElement, MenuBaseElementProps } from \"./MenuBaseElement\";\nimport { useDomains } from \"./domains\";\n\nexport type M2MUserMenuProps = MenuBaseElementProps;\n\n@customElement(\"m2m-user-menu\")\nexport class M2MUserMenu extends MenuBaseElement {\n handleLogout = async () => {\n await clearAuth();\n window.location.reload();\n };\n private _usersUrlTask = new Task(this, {\n task: async (_: unknown, { signal }) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const domains = await useDomains(signal);\n return domains.users;\n },\n args: () => [],\n });\n\n render() {\n const additionalItems = this.additinalItems?.map((item) => {\n return html`\n <li>\n <a href=\"${item.href}\">${item.label}</a>\n </li>\n `;\n });\n const isHidden = this.expanded === false || this.expanded === undefined;\n return html`<nav>\n <button\n type=\"button\"\n class=\"navigation-drawer-controll-button navigation-drawer-controll-button--icon\"\n aria-controls=\"m2m-user-menu__navigation-drawer\"\n aria-expanded=${this.expanded}\n @click=${this.handleToggleDrawer}\n >\n <svg viewBox=\"0 0 24 24\" width=\"38px\" height=\"38px\" fill=\"#000000\">\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z\"\n />\n </svg>\n </button>\n <ul\n ${ref(this.listRef)}\n id=\"m2m-user-menu__navigation-drawer\"\n aria-hidden=${isHidden}\n class=\"navigation-drawer\"\n >\n <li>\n ${this._usersUrlTask.render({\n pending: () => html`<a disabled href=\"#\">Loading...</a>`,\n complete: (usersUrl) => {\n return html`<a href=\"${usersUrl}\">アカウント情報</a>`;\n },\n })}\n </li>\n <li @click=${this.handleLogout}>\n <button type=\"button\">ログアウト</button>\n </li>\n ${additionalItems}\n </ul>\n </nav>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"m2m-user-menu\": M2MUserMenu;\n }\n}\n","export const getM2MStorageHubDomain = (env?: \"production\" | \"development\") => {\n if (env === \"production\" || globalThis.M2M_COMPONENTS_ENV === \"production\") {\n return \"https://hub.m2msystems.cloud\";\n }\n return \"https://hub.dev.m2msystems.cloud\";\n};\n","import { getM2MStorageHubDomain } from \"./getM2MStorageHubDomain\";\nimport { StorageClient } from \"./lib/client\";\n\nclass M2mStorageClient extends StorageClient {}\n\nexport type { M2mStorageClient };\n\n/**\n * Get the connected storage client.\n * @param timeout\n * @default 5000\n */\nconst getStorage = async (timeout = 5000) => {\n const storage = await new Promise<M2mStorageClient>((resolve, reject) => {\n const rejectTimer = globalThis.setTimeout(function () {\n reject(\n new Error(\n \"Timeout: M2mStorageClient could not connect. Please call m2mStorageClient.init() before using m2mStorageClient.\",\n ),\n );\n }, timeout);\n\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n resolve(storage);\n }\n\n const timer = globalThis.setInterval(() => {\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n globalThis.clearInterval(timer);\n resolve(storage);\n }\n }, 200);\n });\n\n await storage.onConnect();\n\n return storage;\n};\n\nconst initStorageClient = (options?: {\n env?: \"development\" | \"production\";\n}) => {\n if (globalThis.M2M_STORAGE) {\n throw new Error(\n \"M2mStorageClient already initialized. Do not call m2mStorageClient.init multiple times.\",\n );\n }\n const storage = new M2mStorageClient(getM2MStorageHubDomain(options?.env));\n globalThis.M2M_STORAGE = storage;\n};\n\nexport const m2mStorageClient = {\n init: initStorageClient,\n getStorage: getStorage,\n};\n\nexport const M2M_AUTH_TOKEN_KEY = \"M2M_APP_AUTH_TOKEN\";\n\nconst getAuthTokenCache = () => {\n return globalThis.localStorage.getItem(M2M_AUTH_TOKEN_KEY);\n};\n\nconst getAuthToken = async () => {\n try {\n const storage = await getStorage();\n const autuToken = (await storage.get(M2M_AUTH_TOKEN_KEY)) as string;\n return autuToken !== null && autuToken !== undefined && autuToken.length > 0\n ? autuToken\n : getAuthTokenCache();\n } catch (error) {\n console.warn(error);\n return getAuthTokenCache();\n }\n};\n\nconst setAuthToken = async (token: string) => {\n globalThis.localStorage.setItem(M2M_AUTH_TOKEN_KEY, token);\n try {\n const storage = await getStorage();\n await storage.set(M2M_AUTH_TOKEN_KEY, token);\n } catch (error) {\n console.warn(error);\n }\n};\n\nconst clearAuthToken = async () => {\n globalThis.localStorage.removeItem(M2M_AUTH_TOKEN_KEY);\n try {\n const storage = await getStorage();\n await storage.del(M2M_AUTH_TOKEN_KEY);\n } catch (error) {\n console.warn(error);\n }\n};\n\nexport const m2mAuthTokenApi = {\n get: getAuthToken,\n getCache: getAuthTokenCache,\n set: setAuthToken,\n clear: clearAuthToken,\n};\n","import { DBSchema, openDB } from \"idb\";\nimport { LoginResponse } from \"./api/login\";\n\ninterface PersistenceDatabase extends DBSchema {\n persistence: {\n value: LoginResponse;\n key: \"auth\";\n };\n}\n\n// Only create connectors on client-side or in test environments to avoid SSR issues\nconst dbPromise =\n typeof window !== \"undefined\" || process.env.VITEST === \"true\"\n ? openDB<PersistenceDatabase>(\"persistence-store\", 1, {\n upgrade(db) {\n db.createObjectStore(\"persistence\");\n },\n })\n : Promise.resolve(null);\n\nconst get = async (key: \"auth\") => {\n return (await dbPromise)?.get(\"persistence\", key);\n};\nconst set = async (key: \"auth\", val: LoginResponse) => {\n return (await dbPromise)?.put(\"persistence\", val, key);\n};\nconst clear = async (key: \"auth\") => {\n return (await dbPromise)?.delete(\"persistence\", key);\n};\n\nexport const persistenceDatabase = {\n get,\n set,\n clear,\n};\n","import { m2mAuthTokenApi } from \"./client\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\n\nexport const clearAuth = async () => {\n await persistenceDatabase.clear(\"auth\");\n await m2mAuthTokenApi.clear();\n};\n","import { LitElement, css } from \"lit\";\nimport { Ref, createRef } from \"lit/directives/ref.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 declare additinalItems: MenuBaseElementProps[\"additinalItems\"];\n declare expanded: boolean;\n static properties = {\n additinalItems: {\n type: Object,\n attribute: \"additional-items\",\n },\n expanded: {\n type: Boolean,\n attribute: \"expanded\",\n },\n };\n\n constructor() {\n super();\n this.additinalItems = [];\n this.expanded = false;\n }\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","import { getM2MStorageHubDomain } from \"./storage/getM2MStorageHubDomain\";\nimport { type AppLinkKey } from \"./apps\";\n\nexport type DomainRecord = Record<AppLinkKey, string>;\n\nexport const developmentDomains: DomainRecord = {\n core: \"https://core.dev.m2msystems.cloud\",\n sumyca: \"https://manage.dev.sumyca.com\",\n cleaning: \"https://manager-cleaning.dev.m2msystems.cloud\",\n users: \"https://manage-users.dev.m2msystems.cloud\",\n checkin: \"https://manage.checkin.dev.m2msystems.cloud\",\n systems: \"https://dev.m2msystems.cloud\",\n};\n\nexport const productionDomains: DomainRecord = {\n core: \"https://core.m2msystems.cloud\",\n sumyca: \"https://manage.sumyca.com\",\n cleaning: \"https://manager-cleaning.m2msystems.cloud\",\n users: \"https://manage-users.m2msystems.cloud\",\n checkin: \"https://manage.checkin.m2msystems.cloud\",\n systems: \"https://m2msystems.cloud/\",\n};\n\n/**\n * 可能なら最新のドメインを取得し、取得出来なければリリース時のドメインを返す。\n * Q. なぜgetDomainsではなくuseDomainsなのか\n * A. M2M_COMPONENTS_ENVが設定される前に、この関数が呼び出されると常にdevelopmentになってしまうため、\n * Reactを利用するケースを考えるとコンポーネントのレンダリング時などに呼んでもらう必要がある。\n * React hookのような命名にしておくことで、Linterによってこれを強制できる。\n */\nexport const useDomains = async (\n signal?: AbortSignal,\n): Promise<DomainRecord> => {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n try {\n const domain = getM2MStorageHubDomain(env);\n const response = await fetch(`${domain}/api/domains/${env}`, { signal });\n if (!response.ok) {\n throw new Error(`Failed to fetch domains: ${response.statusText}`);\n }\n const data = (await response.json()) as DomainRecord;\n return data;\n } catch {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? productionDomains\n : developmentDomains;\n }\n};\n"],"mappings":"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","names":["import_lit","import_ref","storage"]}
1
+ {"version":3,"sources":["../src/m2m-user-menu.ts","../src/storage/getM2MStorageHubDomain.ts","../src/storage/client.ts","../src/storage/persistenceDatabase.ts","../src/storage/clearAuth.tsx","../src/MenuBaseElement.ts","../src/domains.ts","../src/domains-data.ts"],"sourcesContent":["import { customElement } from \"lit/decorators.js\";\nimport { html } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { Task } from \"@lit/task\";\nimport { clearAuth } from \"./storage/clearAuth\";\nimport { MenuBaseElement, MenuBaseElementProps } from \"./MenuBaseElement\";\nimport { domainsPromise } from \"./domains\";\n\nexport type M2MUserMenuProps = MenuBaseElementProps;\n\n@customElement(\"m2m-user-menu\")\nexport class M2MUserMenu extends MenuBaseElement {\n handleLogout = async () => {\n await clearAuth();\n window.location.reload();\n };\n private _usersUrlTask = new Task(this, {\n task: async (_: unknown, { signal }) => {\n const domains = await domainsPromise(signal);\n return domains.users;\n },\n args: () => [],\n });\n\n render() {\n const additionalItems = this.additinalItems?.map((item) => {\n return html`\n <li>\n <a href=\"${item.href}\">${item.label}</a>\n </li>\n `;\n });\n const isHidden = this.expanded === false || this.expanded === undefined;\n return html`<nav>\n <button\n type=\"button\"\n class=\"navigation-drawer-controll-button navigation-drawer-controll-button--icon\"\n aria-controls=\"m2m-user-menu__navigation-drawer\"\n aria-expanded=${this.expanded}\n @click=${this.handleToggleDrawer}\n >\n <svg viewBox=\"0 0 24 24\" width=\"38px\" height=\"38px\" fill=\"#000000\">\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z\"\n />\n </svg>\n </button>\n <ul\n ${ref(this.listRef)}\n id=\"m2m-user-menu__navigation-drawer\"\n aria-hidden=${isHidden}\n class=\"navigation-drawer\"\n >\n <li>\n ${this._usersUrlTask.render({\n pending: () => html`<a disabled href=\"#\">Loading...</a>`,\n complete: (usersUrl) => {\n return html`<a href=\"${usersUrl}\">アカウント情報</a>`;\n },\n })}\n </li>\n <li @click=${this.handleLogout}>\n <button type=\"button\">ログアウト</button>\n </li>\n ${additionalItems}\n </ul>\n </nav>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"m2m-user-menu\": M2MUserMenu;\n }\n}\n","export const getM2MStorageHubDomain = (env?: \"production\" | \"development\") => {\n if (env === \"production\" || globalThis.M2M_COMPONENTS_ENV === \"production\") {\n return \"https://hub.m2msystems.cloud\";\n }\n return \"https://hub.dev.m2msystems.cloud\";\n};\n","import { getM2MStorageHubDomain } from \"./getM2MStorageHubDomain\";\nimport { StorageClient } from \"./lib/client\";\n\nclass M2mStorageClient extends StorageClient {}\n\nexport type { M2mStorageClient };\n\n/**\n * Get the connected storage client.\n * @param timeout\n * @default 5000\n */\nconst getStorage = async (timeout = 5000) => {\n const storage = await new Promise<M2mStorageClient>((resolve, reject) => {\n const rejectTimer = globalThis.setTimeout(function () {\n reject(\n new Error(\n \"Timeout: M2mStorageClient could not connect. Please call m2mStorageClient.init() before using m2mStorageClient.\",\n ),\n );\n }, timeout);\n\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n resolve(storage);\n }\n\n const timer = globalThis.setInterval(() => {\n const storage = globalThis.M2M_STORAGE;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n globalThis.clearInterval(timer);\n resolve(storage);\n }\n }, 200);\n });\n\n await storage.onConnect();\n\n return storage;\n};\n\nconst initStorageClient = (options?: {\n env?: \"development\" | \"production\";\n}) => {\n if (globalThis.M2M_STORAGE) {\n throw new Error(\n \"M2mStorageClient already initialized. Do not call m2mStorageClient.init multiple times.\",\n );\n }\n const storage = new M2mStorageClient(getM2MStorageHubDomain(options?.env));\n globalThis.M2M_STORAGE = storage;\n};\n\nexport const m2mStorageClient = {\n init: initStorageClient,\n getStorage: getStorage,\n};\n\nexport const M2M_AUTH_TOKEN_KEY = \"M2M_APP_AUTH_TOKEN\";\n\nconst getAuthTokenCache = () => {\n return globalThis.localStorage.getItem(M2M_AUTH_TOKEN_KEY);\n};\n\nconst getAuthToken = async () => {\n try {\n const storage = await getStorage();\n const autuToken = (await storage.get(M2M_AUTH_TOKEN_KEY)) as string;\n return autuToken !== null && autuToken !== undefined && autuToken.length > 0\n ? autuToken\n : getAuthTokenCache();\n } catch (error) {\n console.warn(error);\n return getAuthTokenCache();\n }\n};\n\nconst setAuthToken = async (token: string) => {\n globalThis.localStorage.setItem(M2M_AUTH_TOKEN_KEY, token);\n try {\n const storage = await getStorage();\n await storage.set(M2M_AUTH_TOKEN_KEY, token);\n } catch (error) {\n console.warn(error);\n }\n};\n\nconst clearAuthToken = async () => {\n globalThis.localStorage.removeItem(M2M_AUTH_TOKEN_KEY);\n try {\n const storage = await getStorage();\n await storage.del(M2M_AUTH_TOKEN_KEY);\n } catch (error) {\n console.warn(error);\n }\n};\n\nexport const m2mAuthTokenApi = {\n get: getAuthToken,\n getCache: getAuthTokenCache,\n set: setAuthToken,\n clear: clearAuthToken,\n};\n","import { DBSchema, openDB } from \"idb\";\nimport { LoginResponse } from \"./api/login\";\n\ninterface PersistenceDatabase extends DBSchema {\n persistence: {\n value: LoginResponse;\n key: \"auth\";\n };\n}\n\n// Only create connectors on client-side or in test environments to avoid SSR issues\nconst dbPromise =\n typeof window !== \"undefined\" || process.env.VITEST === \"true\"\n ? openDB<PersistenceDatabase>(\"persistence-store\", 1, {\n upgrade(db) {\n db.createObjectStore(\"persistence\");\n },\n })\n : Promise.resolve(null);\n\nconst get = async (key: \"auth\") => {\n return (await dbPromise)?.get(\"persistence\", key);\n};\nconst set = async (key: \"auth\", val: LoginResponse) => {\n return (await dbPromise)?.put(\"persistence\", val, key);\n};\nconst clear = async (key: \"auth\") => {\n return (await dbPromise)?.delete(\"persistence\", key);\n};\n\nexport const persistenceDatabase = {\n get,\n set,\n clear,\n};\n","import { m2mAuthTokenApi } from \"./client\";\nimport { persistenceDatabase } from \"./persistenceDatabase\";\n\nexport const clearAuth = async () => {\n await persistenceDatabase.clear(\"auth\");\n await m2mAuthTokenApi.clear();\n};\n","import { LitElement, css } from \"lit\";\nimport { Ref, createRef } from \"lit/directives/ref.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 declare additinalItems: MenuBaseElementProps[\"additinalItems\"];\n declare expanded: boolean;\n static properties = {\n additinalItems: {\n type: Object,\n attribute: \"additional-items\",\n },\n expanded: {\n type: Boolean,\n attribute: \"expanded\",\n },\n };\n\n constructor() {\n super();\n this.additinalItems = [];\n this.expanded = false;\n }\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","import { useFetch } from \"matsuri-hooks\";\nimport { getM2MStorageHubDomain } from \"./storage/getM2MStorageHubDomain\";\nimport {\n type DomainRecord,\n productionDomains,\n developmentDomains,\n} from \"./domains-data\";\n\nexport * from \"./domains-data\";\n\n/**\n * 可能なら最新のドメインを取得し、取得出来なければリリース時のドメインを返す。\n * Q. なぜgetDomainsではなくuseDomainsなのか\n * A. M2M_COMPONENTS_ENVが設定される前に、この関数が呼び出されると常にdevelopmentになってしまうため、\n * Reactを利用するケースを考えるとコンポーネントのレンダリング時などに呼んでもらう必要がある。\n * React hookのような命名にしておくことで、Linterによってこれを強制できる。\n */\nexport const useDomains = (): DomainRecord => {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n const domain = getM2MStorageHubDomain(env);\n const { data, error } = useFetch<DomainRecord>(\n `${domain}/api/domains/${env}`,\n );\n if (error || !data) {\n return env === \"production\" ? productionDomains : developmentDomains;\n }\n return data;\n};\n\nexport const domainsPromise = async (\n signal?: AbortSignal,\n): Promise<DomainRecord> => {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n try {\n const domain = getM2MStorageHubDomain(env);\n const response = await fetch(`${domain}/api/domains/${env}`, { signal });\n if (!response.ok) {\n throw new Error(`Failed to fetch domains: ${response.statusText}`);\n }\n return response.json() as Promise<DomainRecord>;\n } catch {\n return env === \"production\" ? productionDomains : developmentDomains;\n }\n};\n","/**\n * Next.jsのAPI Routesなど、サーバーサイドでインポートする際に\n * クライアントサイドのHooks(swr等)への依存によるビルドエラーを避けるため、\n * 定数データのみをこのファイルに分離しています。\n */\nimport { type AppLinkKey } from \"./apps-data\";\n\nexport type DomainRecord = Record<AppLinkKey, string>;\n\nexport const developmentDomains: DomainRecord = {\n core: \"https://core.dev.m2msystems.cloud\",\n sumyca: \"https://manage.dev.sumyca.com\",\n cleaning: \"https://manager-cleaning.dev.m2msystems.cloud\",\n users: \"https://manage-users.dev.m2msystems.cloud\",\n checkin: \"https://manage.checkin.dev.m2msystems.cloud\",\n systems: \"https://dev.m2msystems.cloud\",\n};\n\nexport const productionDomains: DomainRecord = {\n core: \"https://core.m2msystems.cloud\",\n sumyca: \"https://manage.sumyca.com\",\n cleaning: \"https://manager-cleaning.m2msystems.cloud\",\n users: \"https://manage-users.m2msystems.cloud\",\n checkin: \"https://manage.checkin.m2msystems.cloud\",\n systems: \"https://m2msystems.cloud/\",\n};\n"],"mappings":"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","names":["import_lit","import_ref","storage"]}
package/m2m-user-menu.mjs CHANGED
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  M2MUserMenu
3
- } from "./chunk-7VHUBWOT.mjs";
3
+ } from "./chunk-AJ5ZCYYF.mjs";
4
4
  import "./chunk-BFCTE2XZ.mjs";
5
5
  import "./chunk-IGOSAWM6.mjs";
6
+ import "./chunk-5EK67DDX.mjs";
7
+ import "./chunk-DHL4QNLZ.mjs";
8
+ import "./chunk-QU6UIRWS.mjs";
6
9
  import "./chunk-QWW2VCZM.mjs";
7
10
  import "./chunk-R73ITKF5.mjs";
8
- import "./chunk-5EK67DDX.mjs";
9
- import "./chunk-ZBZMUI2R.mjs";
10
11
  import "./chunk-W5DAWJ2F.mjs";
11
12
  import "./chunk-ZOXT4E27.mjs";
12
13
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "m2m-components",
3
- "version": "8.0.1-alpha-1764576157309-d3e17a0.0",
3
+ "version": "8.0.1",
4
4
  "main": "index.js",
5
5
  "module": "index.mjs",
6
6
  "typings": "index.d.ts",
@@ -2,8 +2,8 @@ import {
2
2
  refreshAuth
3
3
  } from "../chunk-7AZEHVZT.mjs";
4
4
  import "../chunk-YK5WXFFQ.mjs";
5
- import "../chunk-JG5QN6O7.mjs";
6
5
  import "../chunk-E2ELQNMR.mjs";
6
+ import "../chunk-JG5QN6O7.mjs";
7
7
  import "../chunk-IGOSAWM6.mjs";
8
8
  import "../chunk-QWW2VCZM.mjs";
9
9
  import "../chunk-R73ITKF5.mjs";
@@ -1,14 +1,14 @@
1
+ import {
2
+ requestLogin
3
+ } from "../chunk-77SFV5XL.mjs";
1
4
  import {
2
5
  refreshAuth
3
6
  } from "../chunk-7AZEHVZT.mjs";
4
7
  import "../chunk-YK5WXFFQ.mjs";
5
- import {
6
- requestLogin
7
- } from "../chunk-77SFV5XL.mjs";
8
+ import "../chunk-E2ELQNMR.mjs";
8
9
  import {
9
10
  checkJwtExpiration
10
11
  } from "../chunk-JG5QN6O7.mjs";
11
- import "../chunk-E2ELQNMR.mjs";
12
12
  import {
13
13
  clearAuth
14
14
  } from "../chunk-BFCTE2XZ.mjs";
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/m2m-apps-menu.ts"],"sourcesContent":["import { customElement } from \"lit/decorators.js\";\nimport { html } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { Task } from \"@lit/task\";\nimport { MenuBaseElement, MenuBaseElementProps } from \"./MenuBaseElement\";\nimport { useDomains } from \"./domains\";\nimport { useApps } from \"./apps\";\n\nexport type M2MAppsMenuProps = MenuBaseElementProps;\n\n@customElement(\"m2m-apps-menu\")\nexport class M2MAppsMenu extends MenuBaseElement {\n private _dataTask = new Task(this, {\n task: async (_: unknown, { signal }) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const apps = await useApps(signal);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const domains = await useDomains(signal);\n return { apps, domains };\n },\n args: () => [],\n });\n\n render() {\n const isHidden = this.expanded === false || this.expanded === undefined;\n\n const additionalItems = this.additinalItems?.map((item) => {\n return html`\n <li>\n <a href=\"${item.href}\">${item.label}</a>\n </li>\n `;\n });\n\n return html`<nav>\n <button\n type=\"button\"\n class=\"navigation-drawer-controll-button navigation-drawer-controll-button--icon\"\n aria-controls=\"m2m-apps-menu__navigation-drawer\"\n aria-expanded=${this.expanded}\n @click=${this.handleToggleDrawer}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"38px\"\n height=\"38px\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M4 8h4V4H4v4zm6 12h4v-4h-4v4zm-6 0h4v-4H4v4zm0-6h4v-4H4v4zm6 0h4v-4h-4v4zm6-10v4h4V4h-4zm-6 4h4V4h-4v4zm6 6h4v-4h-4v4zm0 6h4v-4h-4v4z\"\n />\n </svg>\n </button>\n <ul\n ${ref(this.listRef)}\n id=\"m2m-apps-menu__navigation-drawer\"\n aria-hidden=${isHidden}\n class=\"navigation-drawer\"\n >\n ${this._dataTask.render({\n pending: () => html`<li><a disabled href=\"#\">Loading...</a></li>`,\n complete: ({ apps, domains }) => {\n return apps.map((app) => {\n return app.type === \"group\"\n ? html`\n <li>\n <span>${app.label}</span>\n <ul>\n ${app.children.map((child) => {\n // 2段ネストはサポートしない\n if (child.type === \"link\") {\n return html`\n <li>\n <a href=\"${domains[child.key]}\"\n >${child.label}</a\n >\n </li>\n `;\n }\n })}\n </ul>\n </li>\n `\n : html`\n <li>\n <a href=\"${domains[app.key]}\">${app.label}</a>\n </li>\n `;\n });\n },\n })}\n ${additionalItems}\n </ul>\n </nav>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"m2m-apps-menu\": M2MAppsMenu;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,SAAS,YAAY;AACrB,SAAS,WAAW;AACpB,SAAS,YAAY;AAQd,IAAM,cAAN,cAA0B,gBAAgB;AAAA,EAA1C;AAAA;AACL,SAAQ,YAAY,IAAI,KAAK,MAAM;AAAA,MACjC,MAAM,OAAO,GAAY,EAAE,OAAO,MAAM;AAEtC,cAAM,OAAO,MAAM,QAAQ,MAAM;AAEjC,cAAM,UAAU,MAAM,WAAW,MAAM;AACvC,eAAO,EAAE,MAAM,QAAQ;AAAA,MACzB;AAAA,MACA,MAAM,MAAM,CAAC;AAAA,IACf,CAAC;AAAA;AAAA,EAED,SAAS;AAvBX;AAwBI,UAAM,WAAW,KAAK,aAAa,SAAS,KAAK,aAAa;AAE9D,UAAM,mBAAkB,UAAK,mBAAL,mBAAqB,IAAI,CAAC,SAAS;AACzD,aAAO;AAAA;AAAA,qBAEQ,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA;AAAA;AAAA,IAGzC;AAEA,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKa,KAAK,QAAQ;AAAA,iBACpB,KAAK,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAc9B,IAAI,KAAK,OAAO,CAAC;AAAA;AAAA,sBAEL,QAAQ;AAAA;AAAA;AAAA,UAGpB,KAAK,UAAU,OAAO;AAAA,MACtB,SAAS,MAAM;AAAA,MACf,UAAU,CAAC,EAAE,MAAM,QAAQ,MAAM;AAC/B,eAAO,KAAK,IAAI,CAAC,QAAQ;AACvB,iBAAO,IAAI,SAAS,UAChB;AAAA;AAAA,8BAEY,IAAI,KAAK;AAAA;AAAA,0BAEb,IAAI,SAAS,IAAI,CAAC,UAAU;AAE5B,gBAAI,MAAM,SAAS,QAAQ;AACzB,qBAAO;AAAA;AAAA,2CAEQ,QAAQ,MAAM,GAAG,CAAC;AAAA,qCACxB,MAAM,KAAK;AAAA;AAAA;AAAA;AAAA,YAItB;AAAA,UACF,CAAC,CAAC;AAAA;AAAA;AAAA,sBAIR;AAAA;AAAA,iCAEe,QAAQ,IAAI,GAAG,CAAC,KAAK,IAAI,KAAK;AAAA;AAAA;AAAA,QAGnD,CAAC;AAAA,MACH;AAAA,IACF,CAAC,CAAC;AAAA,UACA,eAAe;AAAA;AAAA;AAAA,EAGvB;AACF;AApFa,cAAN;AAAA,EADN,cAAc,eAAe;AAAA,GACjB;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/m2m-user-menu.ts"],"sourcesContent":["import { customElement } from \"lit/decorators.js\";\nimport { html } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\nimport { Task } from \"@lit/task\";\nimport { clearAuth } from \"./storage/clearAuth\";\nimport { MenuBaseElement, MenuBaseElementProps } from \"./MenuBaseElement\";\nimport { useDomains } from \"./domains\";\n\nexport type M2MUserMenuProps = MenuBaseElementProps;\n\n@customElement(\"m2m-user-menu\")\nexport class M2MUserMenu extends MenuBaseElement {\n handleLogout = async () => {\n await clearAuth();\n window.location.reload();\n };\n private _usersUrlTask = new Task(this, {\n task: async (_: unknown, { signal }) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const domains = await useDomains(signal);\n return domains.users;\n },\n args: () => [],\n });\n\n render() {\n const additionalItems = this.additinalItems?.map((item) => {\n return html`\n <li>\n <a href=\"${item.href}\">${item.label}</a>\n </li>\n `;\n });\n const isHidden = this.expanded === false || this.expanded === undefined;\n return html`<nav>\n <button\n type=\"button\"\n class=\"navigation-drawer-controll-button navigation-drawer-controll-button--icon\"\n aria-controls=\"m2m-user-menu__navigation-drawer\"\n aria-expanded=${this.expanded}\n @click=${this.handleToggleDrawer}\n >\n <svg viewBox=\"0 0 24 24\" width=\"38px\" height=\"38px\" fill=\"#000000\">\n <path d=\"M0 0h24v24H0z\" fill=\"none\" />\n <path\n d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 3c1.66 0 3 1.34 3 3s-1.34 3-3 3-3-1.34-3-3 1.34-3 3-3zm0 14.2c-2.5 0-4.71-1.28-6-3.22.03-1.99 4-3.08 6-3.08 1.99 0 5.97 1.09 6 3.08-1.29 1.94-3.5 3.22-6 3.22z\"\n />\n </svg>\n </button>\n <ul\n ${ref(this.listRef)}\n id=\"m2m-user-menu__navigation-drawer\"\n aria-hidden=${isHidden}\n class=\"navigation-drawer\"\n >\n <li>\n ${this._usersUrlTask.render({\n pending: () => html`<a disabled href=\"#\">Loading...</a>`,\n complete: (usersUrl) => {\n return html`<a href=\"${usersUrl}\">アカウント情報</a>`;\n },\n })}\n </li>\n <li @click=${this.handleLogout}>\n <button type=\"button\">ログアウト</button>\n </li>\n ${additionalItems}\n </ul>\n </nav>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"m2m-user-menu\": M2MUserMenu;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,SAAS,YAAY;AACrB,SAAS,WAAW;AACpB,SAAS,YAAY;AAQd,IAAM,cAAN,cAA0B,gBAAgB;AAAA,EAA1C;AAAA;AACL,wBAAe,YAAY;AACzB,YAAM,UAAU;AAChB,aAAO,SAAS,OAAO;AAAA,IACzB;AACA,SAAQ,gBAAgB,IAAI,KAAK,MAAM;AAAA,MACrC,MAAM,OAAO,GAAY,EAAE,OAAO,MAAM;AAEtC,cAAM,UAAU,MAAM,WAAW,MAAM;AACvC,eAAO,QAAQ;AAAA,MACjB;AAAA,MACA,MAAM,MAAM,CAAC;AAAA,IACf,CAAC;AAAA;AAAA,EAED,SAAS;AAzBX;AA0BI,UAAM,mBAAkB,UAAK,mBAAL,mBAAqB,IAAI,CAAC,SAAS;AACzD,aAAO;AAAA;AAAA,qBAEQ,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA;AAAA;AAAA,IAGzC;AACA,UAAM,WAAW,KAAK,aAAa,SAAS,KAAK,aAAa;AAC9D,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKa,KAAK,QAAQ;AAAA,iBACpB,KAAK,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAU9B,IAAI,KAAK,OAAO,CAAC;AAAA;AAAA,sBAEL,QAAQ;AAAA;AAAA;AAAA;AAAA,YAIlB,KAAK,cAAc,OAAO;AAAA,MAC1B,SAAS,MAAM;AAAA,MACf,UAAU,CAAC,aAAa;AACtB,eAAO,gBAAgB,QAAQ;AAAA,MACjC;AAAA,IACF,CAAC,CAAC;AAAA;AAAA,qBAES,KAAK,YAAY;AAAA;AAAA;AAAA,UAG5B,eAAe;AAAA;AAAA;AAAA,EAGvB;AACF;AA3Da,cAAN;AAAA,EADN,cAAc,eAAe;AAAA,GACjB;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/apps.ts"],"sourcesContent":["import { getM2MStorageHubDomain } from \"./storage/getM2MStorageHubDomain\";\n\ninterface AppGroup {\n label: string;\n type: \"group\";\n children: App[];\n}\n\nexport type AppLinkKey =\n | \"core\"\n | \"checkin\"\n | \"systems\"\n | \"cleaning\"\n | \"users\"\n | \"sumyca\";\n\ninterface AppLink {\n label: string;\n type: \"link\";\n key: AppLinkKey;\n}\n\nexport type App = AppGroup | AppLink;\n\nexport const apps: App[] = [\n {\n label: \"m2m Series\",\n type: \"group\",\n children: [\n {\n label: \"Core 施設管理\",\n type: \"link\",\n key: \"core\",\n },\n {\n label: \"Checkin ゲストチェックイン\",\n type: \"link\",\n key: \"checkin\",\n },\n {\n label: \"Systems Airbnb連携\",\n type: \"link\",\n key: \"systems\",\n },\n {\n label: \"Cleaning 清掃管理\",\n type: \"link\",\n key: \"cleaning\",\n },\n {\n label: \"Users アカウント管理\",\n type: \"link\",\n key: \"users\",\n },\n ],\n },\n {\n label: \"Sumyca マンスリープラットフォーム\",\n key: \"sumyca\",\n type: \"link\",\n },\n];\n\nexport const useApps = async (signal?: AbortSignal): Promise<App[]> => {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n try {\n const domain = getM2MStorageHubDomain(env);\n const response = await fetch(`${domain}/api/apps`, { signal });\n if (!response.ok) {\n throw new Error(`Failed to fetch apps: ${response.statusText}`);\n }\n const data = (await response.json()) as App[];\n return data;\n } catch {\n return apps;\n }\n};\n"],"mappings":";;;;;AAwBO,IAAM,OAAc;AAAA,EACzB;AAAA,IACE,OAAO;AAAA,IACP,MAAM;AAAA,IACN,UAAU;AAAA,MACR;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,MACA;AAAA,QACE,OAAO;AAAA,QACP,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,KAAK;AAAA,IACL,MAAM;AAAA,EACR;AACF;AAEO,IAAM,UAAU,OAAO,WAAyC;AACrE,QAAM,MACJ,WAAW,uBAAuB,eAC9B,eACA;AACN,MAAI;AACF,UAAM,SAAS,uBAAuB,GAAG;AACzC,UAAM,WAAW,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,OAAO,CAAC;AAC7D,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,yBAAyB,SAAS,UAAU,EAAE;AAAA,IAChE;AACA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,42 +0,0 @@
1
- import {
2
- getM2MStorageHubDomain
3
- } from "./chunk-W5DAWJ2F.mjs";
4
-
5
- // src/domains.ts
6
- var developmentDomains = {
7
- core: "https://core.dev.m2msystems.cloud",
8
- sumyca: "https://manage.dev.sumyca.com",
9
- cleaning: "https://manager-cleaning.dev.m2msystems.cloud",
10
- users: "https://manage-users.dev.m2msystems.cloud",
11
- checkin: "https://manage.checkin.dev.m2msystems.cloud",
12
- systems: "https://dev.m2msystems.cloud"
13
- };
14
- var productionDomains = {
15
- core: "https://core.m2msystems.cloud",
16
- sumyca: "https://manage.sumyca.com",
17
- cleaning: "https://manager-cleaning.m2msystems.cloud",
18
- users: "https://manage-users.m2msystems.cloud",
19
- checkin: "https://manage.checkin.m2msystems.cloud",
20
- systems: "https://m2msystems.cloud/"
21
- };
22
- var useDomains = async (signal) => {
23
- const env = globalThis.M2M_COMPONENTS_ENV === "production" ? "production" : "development";
24
- try {
25
- const domain = getM2MStorageHubDomain(env);
26
- const response = await fetch(`${domain}/api/domains/${env}`, { signal });
27
- if (!response.ok) {
28
- throw new Error(`Failed to fetch domains: ${response.statusText}`);
29
- }
30
- const data = await response.json();
31
- return data;
32
- } catch {
33
- return globalThis.M2M_COMPONENTS_ENV === "production" ? productionDomains : developmentDomains;
34
- }
35
- };
36
-
37
- export {
38
- developmentDomains,
39
- productionDomains,
40
- useDomains
41
- };
42
- //# sourceMappingURL=chunk-ZBZMUI2R.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/domains.ts"],"sourcesContent":["import { getM2MStorageHubDomain } from \"./storage/getM2MStorageHubDomain\";\nimport { type AppLinkKey } from \"./apps\";\n\nexport type DomainRecord = Record<AppLinkKey, string>;\n\nexport const developmentDomains: DomainRecord = {\n core: \"https://core.dev.m2msystems.cloud\",\n sumyca: \"https://manage.dev.sumyca.com\",\n cleaning: \"https://manager-cleaning.dev.m2msystems.cloud\",\n users: \"https://manage-users.dev.m2msystems.cloud\",\n checkin: \"https://manage.checkin.dev.m2msystems.cloud\",\n systems: \"https://dev.m2msystems.cloud\",\n};\n\nexport const productionDomains: DomainRecord = {\n core: \"https://core.m2msystems.cloud\",\n sumyca: \"https://manage.sumyca.com\",\n cleaning: \"https://manager-cleaning.m2msystems.cloud\",\n users: \"https://manage-users.m2msystems.cloud\",\n checkin: \"https://manage.checkin.m2msystems.cloud\",\n systems: \"https://m2msystems.cloud/\",\n};\n\n/**\n * 可能なら最新のドメインを取得し、取得出来なければリリース時のドメインを返す。\n * Q. なぜgetDomainsではなくuseDomainsなのか\n * A. M2M_COMPONENTS_ENVが設定される前に、この関数が呼び出されると常にdevelopmentになってしまうため、\n * Reactを利用するケースを考えるとコンポーネントのレンダリング時などに呼んでもらう必要がある。\n * React hookのような命名にしておくことで、Linterによってこれを強制できる。\n */\nexport const useDomains = async (\n signal?: AbortSignal,\n): Promise<DomainRecord> => {\n const env =\n globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"production\"\n : \"development\";\n try {\n const domain = getM2MStorageHubDomain(env);\n const response = await fetch(`${domain}/api/domains/${env}`, { signal });\n if (!response.ok) {\n throw new Error(`Failed to fetch domains: ${response.statusText}`);\n }\n const data = (await response.json()) as DomainRecord;\n return data;\n } catch {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? productionDomains\n : developmentDomains;\n }\n};\n"],"mappings":";;;;;AAKO,IAAM,qBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AACX;AAEO,IAAM,oBAAkC;AAAA,EAC7C,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AACX;AASO,IAAM,aAAa,OACxB,WAC0B;AAC1B,QAAM,MACJ,WAAW,uBAAuB,eAC9B,eACA;AACN,MAAI;AACF,UAAM,SAAS,uBAAuB,GAAG;AACzC,UAAM,WAAW,MAAM,MAAM,GAAG,MAAM,gBAAgB,GAAG,IAAI,EAAE,OAAO,CAAC;AACvE,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,IAAI,MAAM,4BAA4B,SAAS,UAAU,EAAE;AAAA,IACnE;AACA,UAAM,OAAQ,MAAM,SAAS,KAAK;AAClC,WAAO;AAAA,EACT,QAAQ;AACN,WAAO,WAAW,uBAAuB,eACrC,oBACA;AAAA,EACN;AACF;","names":[]}