m2m-components 5.0.5-alpha-83ec280.0 → 5.0.5-alpha-1718877026648-2c95198.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.
Files changed (44) hide show
  1. package/{chunk-UXYQOQLC.mjs → chunk-ARKJVMNQ.mjs} +2 -2
  2. package/{chunk-FDRD4YS4.mjs → chunk-CTGSJWXT.mjs} +2 -2
  3. package/{chunk-I2GUBCRE.mjs → chunk-RDG67OF7.mjs} +10 -6
  4. package/chunk-RDG67OF7.mjs.map +1 -0
  5. package/{chunk-IYTHV2XJ.mjs → chunk-SXIYWN76.mjs} +2 -2
  6. package/{chunk-TR4BCO6J.mjs → chunk-V65OEKRZ.mjs} +3 -3
  7. package/feedback/MultipleTextQuestion.d.mts +2 -2
  8. package/feedback/MultipleTextQuestion.d.ts +2 -2
  9. package/feedback/MultipleTextQuestion.js +1 -1
  10. package/feedback/MultipleTextQuestion.mjs +1 -1
  11. package/feedback/SelectQuestion.d.mts +2 -2
  12. package/feedback/SelectQuestion.d.ts +2 -2
  13. package/feedback/SelectQuestion.js +1 -1
  14. package/feedback/SelectQuestion.mjs +1 -1
  15. package/feedback/index.d.mts +2 -2
  16. package/feedback/index.d.ts +2 -2
  17. package/feedback/index.js +9 -5
  18. package/feedback/index.js.map +1 -1
  19. package/feedback/index.mjs +3 -3
  20. package/index.js +10 -6
  21. package/index.js.map +1 -1
  22. package/index.mjs +5 -5
  23. package/notification/NotificationProvider.d.mts +2 -2
  24. package/notification/NotificationProvider.d.ts +2 -2
  25. package/notification/NotificationProvider.js +2 -2
  26. package/notification/NotificationProvider.mjs +2 -2
  27. package/notification/ServiceIdProvider.d.mts +2 -2
  28. package/notification/ServiceIdProvider.d.ts +2 -2
  29. package/notification/ServiceIdProvider.js +1 -1
  30. package/notification/ServiceIdProvider.mjs +1 -1
  31. package/notification/index.d.mts +1 -1
  32. package/notification/index.d.ts +1 -1
  33. package/notification/index.js +2 -2
  34. package/notification/index.mjs +2 -2
  35. package/package.json +2 -1
  36. package/storage/useM2mAuth.d.mts +2 -2
  37. package/storage/useM2mAuth.d.ts +2 -2
  38. package/storage/useM2mAuth.js +1 -1
  39. package/storage/useM2mAuth.mjs +1 -1
  40. package/chunk-I2GUBCRE.mjs.map +0 -1
  41. /package/{chunk-UXYQOQLC.mjs.map → chunk-ARKJVMNQ.mjs.map} +0 -0
  42. /package/{chunk-FDRD4YS4.mjs.map → chunk-CTGSJWXT.mjs.map} +0 -0
  43. /package/{chunk-IYTHV2XJ.mjs.map → chunk-SXIYWN76.mjs.map} +0 -0
  44. /package/{chunk-TR4BCO6J.mjs.map → chunk-V65OEKRZ.mjs.map} +0 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  // src/notification/ServiceIdProvider.tsx
4
4
  import React, { createContext, useMemo } from "react";
5
- import { jsx } from "react/jsx-runtime";
5
+ import { jsx } from "@emotion/react/jsx-runtime";
6
6
  var ServiceIdContext = createContext(
7
7
  void 0
8
8
  );
@@ -25,4 +25,4 @@ export {
25
25
  ServiceIdProvider,
26
26
  useServiceId
27
27
  };
28
- //# sourceMappingURL=chunk-UXYQOQLC.mjs.map
28
+ //# sourceMappingURL=chunk-ARKJVMNQ.mjs.map
@@ -2,7 +2,7 @@
2
2
 
3
3
  // src/feedback/SelectQuestion.tsx
4
4
  import { Checkbox } from "matsuri-ui";
5
- import { jsx } from "react/jsx-runtime";
5
+ import { jsx } from "@emotion/react/jsx-runtime";
6
6
  var SelectQuestion = (props) => {
7
7
  return /* @__PURE__ */ jsx(
8
8
  "div",
@@ -31,4 +31,4 @@ var SelectQuestion = (props) => {
31
31
  export {
32
32
  SelectQuestion
33
33
  };
34
- //# sourceMappingURL=chunk-FDRD4YS4.mjs.map
34
+ //# sourceMappingURL=chunk-CTGSJWXT.mjs.map
@@ -4,10 +4,10 @@ import {
4
4
  } from "./chunk-IH72EYIB.mjs";
5
5
  import {
6
6
  MultipleTextQuestion
7
- } from "./chunk-IYTHV2XJ.mjs";
7
+ } from "./chunk-SXIYWN76.mjs";
8
8
  import {
9
9
  SelectQuestion
10
- } from "./chunk-FDRD4YS4.mjs";
10
+ } from "./chunk-CTGSJWXT.mjs";
11
11
 
12
12
  // src/feedback/index.tsx
13
13
  import {
@@ -24,9 +24,13 @@ import {
24
24
  useMatsuriForms
25
25
  } from "matsuri-forms-sdk";
26
26
  import { createContext, useContext, useState } from "react";
27
- import FeedbackIcon from "@mui/icons-material/Feedback";
28
- import { jsx, jsxs } from "react/jsx-runtime";
29
- import { createElement } from "react";
27
+ import FeedbackIconBase from "@mui/icons-material/Feedback";
28
+ import { jsx, jsxs } from "@emotion/react/jsx-runtime";
29
+ import { createElement } from "@emotion/react";
30
+ var normalizeIcon = (Icon) => {
31
+ return Icon.default ? Icon.default : Icon;
32
+ };
33
+ var FeedbackIcon = normalizeIcon(FeedbackIconBase);
30
34
  var getFormId = () => {
31
35
  return globalThis.M2M_COMPONENTS_ENV === "production" ? "01GWRQ1MRS7PE29XGRETFZ6D7Y" : "01GTBSYMGPMX91E96P007SXEMH";
32
36
  };
@@ -224,4 +228,4 @@ var FeedbackProvider = ({
224
228
  export {
225
229
  FeedbackProvider
226
230
  };
227
- //# sourceMappingURL=chunk-I2GUBCRE.mjs.map
231
+ //# sourceMappingURL=chunk-RDG67OF7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/feedback/index.tsx"],"sourcesContent":["import {\n Button,\n Modal,\n ModalProps,\n Portal,\n Typography,\n useAlert,\n useModal,\n} from \"matsuri-ui\";\nimport { type Logger } from \"@datadog/browser-logs\";\nimport {\n MatsuriFormsQuestion,\n MatsuriFormsQuestionProvider,\n MatsuriFormsTextQuestionProps,\n useMatsuriForms,\n} from \"matsuri-forms-sdk\";\nimport { MultipleTextQuestion } from \"./MultipleTextQuestion\";\nimport { PropsWithChildren, createContext, useContext, useState } from \"react\";\nimport { SelectQuestion } from \"./SelectQuestion\";\nimport { getRandomId } from \"./getRandomId\";\nimport FeedbackIconBase from \"@mui/icons-material/Feedback\";\n\n/**\n * これはワークアラウンドです。\n * これを行わずに、MuiIconをそのまま使うと、トランスパイル後のコードで次のようなエラーが発生し、コンポーネントを描画できなくなります。\n * `Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.`\n * 関連リンク:\n * https://stackoverflow.com/questions/72008357/mui-icons-used-in-shared-react-component-library-wont-render-error-element-ty\n * https://github.com/mui/material-ui/issues/35535\n */\nconst normalizeIcon = <T,>(Icon: T): T => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n return ((Icon as any).default ? (Icon as any).default : Icon) as T;\n};\nconst FeedbackIcon = normalizeIcon(FeedbackIconBase);\n\nconst getFormId = () => {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"01GWRQ1MRS7PE29XGRETFZ6D7Y\"\n : \"01GTBSYMGPMX91E96P007SXEMH\";\n};\n\ninterface TextQuestionContextValue {\n userId?: string;\n userName?: string;\n serviceName?: string;\n url?: string;\n id?: string;\n}\n\nconst TextQuestionContext = createContext<TextQuestionContextValue>({});\n\nconst TextQuestion = (props: MatsuriFormsTextQuestionProps) => {\n const context = useContext(TextQuestionContext);\n return (\n <input\n value={context[props.title as keyof TextQuestionContextValue]}\n type=\"hidden\"\n name={props.name}\n />\n );\n};\n\ninterface FeedbackProviderModalProps\n extends Partial<ModalProps>,\n FeedbackProviderProps {}\n\nconst FeedbackProviderModal = (props: FeedbackProviderModalProps) => {\n const { questions, submit } = useMatsuriForms(getFormId(), {\n dev: globalThis.M2M_COMPONENTS_ENV !== \"production\",\n });\n\n const { throwAlert } = useAlert();\n\n const [status, setStatus] = useState<\"started\" | \"sending\" | \"completed\">(\n \"started\",\n );\n\n const id = getRandomId();\n\n return (\n <Modal\n backdrop\n width={600}\n maxWidth={600}\n header={<Typography variant=\"h3\">フィードバックを送信</Typography>}\n body={\n status === \"completed\" ? (\n <div\n style={{\n display: \"grid\",\n gap: 32,\n }}\n >\n <Typography>\n レポートを送信しました。ありがとうございます。\n </Typography>\n <Typography color=\"textSecondary\" variant=\"caption\" as=\"p\">\n お送りいただいたフィードバックは、問題の解決とサービスの改善に役立てさせていただきます。\n </Typography>\n <Button\n color=\"primary\"\n variant=\"filled\"\n onClick={() => {\n props.onClose?.();\n }}\n >\n 閉じる\n </Button>\n </div>\n ) : (\n <form\n style={{\n display: \"grid\",\n gap: 24,\n }}\n onSubmit={async (event) => {\n event.preventDefault();\n setStatus(\"sending\");\n const { error } = await submit(event.currentTarget);\n\n /**\n * 以下、対応が行われるまでは取れる値だけ送る\n * https://github.com/matsuri-tech/matsuri-forms-manager-front/issues/265\n */\n const input = {\n id,\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n };\n throwAlert(error, {\n ignoreSuccess: true,\n errorMessage: {\n reason: \"サーバー側のエラーの可能性があります。\",\n action:\n \"しばらく時間を空けて試すか、開発チームへお問い合わせください。\",\n happend: \"フィードバックの送信に失敗しました。\",\n },\n onSuccess: () => {\n props.datadogLogs?.logger?.info?.(\n `Feedback: ${id} by ${props.userId}`,\n {\n input,\n },\n );\n\n window.setTimeout(() => {\n setStatus(\"completed\");\n }, 2000);\n },\n onError: () => {\n props.datadogLogs?.logger?.error?.(\n `Failed Feedback: ${input.id} by ${input.userId}`,\n { input, error },\n );\n\n window.setTimeout(() => {\n setStatus(\"started\");\n }, 2000);\n },\n });\n }}\n >\n <TextQuestionContext.Provider\n value={{\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n id,\n }}\n >\n <MatsuriFormsQuestionProvider\n renderSelect={SelectQuestion}\n renderMultilineText={MultipleTextQuestion}\n renderText={TextQuestion}\n >\n {questions.map((question) => {\n return (\n <MatsuriFormsQuestion {...question} key={question.id} />\n );\n })}\n </MatsuriFormsQuestionProvider>\n </TextQuestionContext.Provider>\n <div>\n <Button\n type=\"submit\"\n color=\"primary\"\n variant=\"filled\"\n disabled={status === \"sending\"}\n fullWidth\n >\n 送信\n </Button>\n <Typography\n variant=\"caption\"\n style={{\n float: \"right\",\n }}\n >\n {status === \"sending\" ? \"送信中...\" : undefined}\n &nbsp;\n </Typography>\n </div>\n </form>\n )\n }\n {...props}\n />\n );\n};\n\ninterface FeedbackProviderProps {\n userId?: string;\n userName?: string;\n serviceName: string;\n datadogLogs?: {\n logger: Logger;\n };\n}\n\nexport const FeedbackProvider = ({\n children,\n ...modalProps\n}: PropsWithChildren<FeedbackProviderProps>) => {\n const [open] = useModal(FeedbackProviderModal, {\n enableClickOutside: true,\n disableClose: false,\n });\n return (\n <div>\n {children}\n <Portal>\n <Button\n style={{\n position: \"fixed\",\n bottom: 16,\n right: 16,\n }}\n onClick={() => {\n open(modalProps);\n }}\n type=\"button\"\n icon={<FeedbackIcon />}\n color=\"secondary\"\n variant=\"filled\"\n rounded\n />\n </Portal>\n </div>\n );\n};\n"],"mappings":"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","names":[]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  // src/feedback/MultipleTextQuestion.tsx
4
4
  import { MultipleTextField } from "matsuri-ui";
5
- import { jsx } from "react/jsx-runtime";
5
+ import { jsx } from "@emotion/react/jsx-runtime";
6
6
  var MultipleTextQuestion = (props) => {
7
7
  return /* @__PURE__ */ jsx(
8
8
  MultipleTextField,
@@ -19,4 +19,4 @@ var MultipleTextQuestion = (props) => {
19
19
  export {
20
20
  MultipleTextQuestion
21
21
  };
22
- //# sourceMappingURL=chunk-IYTHV2XJ.mjs.map
22
+ //# sourceMappingURL=chunk-SXIYWN76.mjs.map
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
  import {
3
3
  useServiceId
4
- } from "./chunk-UXYQOQLC.mjs";
4
+ } from "./chunk-ARKJVMNQ.mjs";
5
5
  import {
6
6
  m2mNotifications_v1
7
7
  } from "./chunk-M2D55I4L.mjs";
@@ -14,7 +14,7 @@ import {
14
14
  } from "react";
15
15
  import { useAuthFetch } from "matsuri-hooks";
16
16
  import { useMemo } from "react";
17
- import { jsx } from "react/jsx-runtime";
17
+ import { jsx } from "@emotion/react/jsx-runtime";
18
18
  var NotificationPermissionContext = createContext(void 0);
19
19
  var NotificationsContext = createContext(void 0);
20
20
  var NotificationsProvider = ({
@@ -80,4 +80,4 @@ export {
80
80
  useNotifications,
81
81
  useNotificationPermission
82
82
  };
83
- //# sourceMappingURL=chunk-TR4BCO6J.mjs.map
83
+ //# sourceMappingURL=chunk-V65OEKRZ.mjs.map
@@ -1,6 +1,6 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { MatsuriFormsMultilineTextQuestionProps } from 'matsuri-forms-sdk';
3
3
 
4
- declare const MultipleTextQuestion: (props: MatsuriFormsMultilineTextQuestionProps) => react_jsx_runtime.JSX.Element;
4
+ declare const MultipleTextQuestion: (props: MatsuriFormsMultilineTextQuestionProps) => _emotion_react_jsx_runtime.JSX.Element;
5
5
 
6
6
  export { MultipleTextQuestion };
@@ -1,6 +1,6 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { MatsuriFormsMultilineTextQuestionProps } from 'matsuri-forms-sdk';
3
3
 
4
- declare const MultipleTextQuestion: (props: MatsuriFormsMultilineTextQuestionProps) => react_jsx_runtime.JSX.Element;
4
+ declare const MultipleTextQuestion: (props: MatsuriFormsMultilineTextQuestionProps) => _emotion_react_jsx_runtime.JSX.Element;
5
5
 
6
6
  export { MultipleTextQuestion };
@@ -25,7 +25,7 @@ __export(MultipleTextQuestion_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(MultipleTextQuestion_exports);
27
27
  var import_matsuri_ui = require("matsuri-ui");
28
- var import_jsx_runtime = require("react/jsx-runtime");
28
+ var import_jsx_runtime = require("@emotion/react/jsx-runtime");
29
29
  var MultipleTextQuestion = (props) => {
30
30
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
31
31
  import_matsuri_ui.MultipleTextField,
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
  import {
3
3
  MultipleTextQuestion
4
- } from "../chunk-IYTHV2XJ.mjs";
4
+ } from "../chunk-SXIYWN76.mjs";
5
5
  import "../chunk-QH5I6YL2.mjs";
6
6
  export {
7
7
  MultipleTextQuestion
@@ -1,6 +1,6 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { MatsuriFormsSelectQuestionProps } from 'matsuri-forms-sdk';
3
3
 
4
- declare const SelectQuestion: (props: MatsuriFormsSelectQuestionProps) => react_jsx_runtime.JSX.Element;
4
+ declare const SelectQuestion: (props: MatsuriFormsSelectQuestionProps) => _emotion_react_jsx_runtime.JSX.Element;
5
5
 
6
6
  export { SelectQuestion };
@@ -1,6 +1,6 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { MatsuriFormsSelectQuestionProps } from 'matsuri-forms-sdk';
3
3
 
4
- declare const SelectQuestion: (props: MatsuriFormsSelectQuestionProps) => react_jsx_runtime.JSX.Element;
4
+ declare const SelectQuestion: (props: MatsuriFormsSelectQuestionProps) => _emotion_react_jsx_runtime.JSX.Element;
5
5
 
6
6
  export { SelectQuestion };
@@ -25,7 +25,7 @@ __export(SelectQuestion_exports, {
25
25
  });
26
26
  module.exports = __toCommonJS(SelectQuestion_exports);
27
27
  var import_matsuri_ui = require("matsuri-ui");
28
- var import_jsx_runtime = require("react/jsx-runtime");
28
+ var import_jsx_runtime = require("@emotion/react/jsx-runtime");
29
29
  var SelectQuestion = (props) => {
30
30
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
31
31
  "div",
@@ -1,7 +1,7 @@
1
1
  'use client'
2
2
  import {
3
3
  SelectQuestion
4
- } from "../chunk-FDRD4YS4.mjs";
4
+ } from "../chunk-CTGSJWXT.mjs";
5
5
  import "../chunk-QH5I6YL2.mjs";
6
6
  export {
7
7
  SelectQuestion
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { Logger } from '@datadog/browser-logs';
3
3
  import { PropsWithChildren } from 'react';
4
4
 
@@ -10,6 +10,6 @@ interface FeedbackProviderProps {
10
10
  logger: Logger;
11
11
  };
12
12
  }
13
- declare const FeedbackProvider: ({ children, ...modalProps }: PropsWithChildren<FeedbackProviderProps>) => react_jsx_runtime.JSX.Element;
13
+ declare const FeedbackProvider: ({ children, ...modalProps }: PropsWithChildren<FeedbackProviderProps>) => _emotion_react_jsx_runtime.JSX.Element;
14
14
 
15
15
  export { FeedbackProvider };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { Logger } from '@datadog/browser-logs';
3
3
  import { PropsWithChildren } from 'react';
4
4
 
@@ -10,6 +10,6 @@ interface FeedbackProviderProps {
10
10
  logger: Logger;
11
11
  };
12
12
  }
13
- declare const FeedbackProvider: ({ children, ...modalProps }: PropsWithChildren<FeedbackProviderProps>) => react_jsx_runtime.JSX.Element;
13
+ declare const FeedbackProvider: ({ children, ...modalProps }: PropsWithChildren<FeedbackProviderProps>) => _emotion_react_jsx_runtime.JSX.Element;
14
14
 
15
15
  export { FeedbackProvider };
package/feedback/index.js CHANGED
@@ -39,7 +39,7 @@ var import_matsuri_forms_sdk = require("matsuri-forms-sdk");
39
39
 
40
40
  // src/feedback/MultipleTextQuestion.tsx
41
41
  var import_matsuri_ui = require("matsuri-ui");
42
- var import_jsx_runtime = require("react/jsx-runtime");
42
+ var import_jsx_runtime = require("@emotion/react/jsx-runtime");
43
43
  var MultipleTextQuestion = (props) => {
44
44
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
45
45
  import_matsuri_ui.MultipleTextField,
@@ -58,7 +58,7 @@ var import_react = require("react");
58
58
 
59
59
  // src/feedback/SelectQuestion.tsx
60
60
  var import_matsuri_ui2 = require("matsuri-ui");
61
- var import_jsx_runtime2 = require("react/jsx-runtime");
61
+ var import_jsx_runtime2 = require("@emotion/react/jsx-runtime");
62
62
  var SelectQuestion = (props) => {
63
63
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
64
64
  "div",
@@ -89,8 +89,12 @@ var getRandomId = () => Math.floor(2e7 * Math.random()).toString(16);
89
89
 
90
90
  // src/feedback/index.tsx
91
91
  var import_Feedback = __toESM(require("@mui/icons-material/Feedback"));
92
- var import_jsx_runtime3 = require("react/jsx-runtime");
93
- var import_react2 = require("react");
92
+ var import_jsx_runtime3 = require("@emotion/react/jsx-runtime");
93
+ var import_react2 = require("@emotion/react");
94
+ var normalizeIcon = (Icon) => {
95
+ return Icon.default ? Icon.default : Icon;
96
+ };
97
+ var FeedbackIcon = normalizeIcon(import_Feedback.default);
94
98
  var getFormId = () => {
95
99
  return globalThis.M2M_COMPONENTS_ENV === "production" ? "01GWRQ1MRS7PE29XGRETFZ6D7Y" : "01GTBSYMGPMX91E96P007SXEMH";
96
100
  };
@@ -276,7 +280,7 @@ var FeedbackProvider = ({
276
280
  open(modalProps);
277
281
  },
278
282
  type: "button",
279
- icon: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_Feedback.default, {}),
283
+ icon: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(FeedbackIcon, {}),
280
284
  color: "secondary",
281
285
  variant: "filled",
282
286
  rounded: true
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/feedback/index.tsx","../../src/feedback/MultipleTextQuestion.tsx","../../src/feedback/SelectQuestion.tsx","../../src/feedback/getRandomId.tsx"],"sourcesContent":["import {\n Button,\n Modal,\n ModalProps,\n Portal,\n Typography,\n useAlert,\n useModal,\n} from \"matsuri-ui\";\nimport { type Logger } from \"@datadog/browser-logs\";\nimport {\n MatsuriFormsQuestion,\n MatsuriFormsQuestionProvider,\n MatsuriFormsTextQuestionProps,\n useMatsuriForms,\n} from \"matsuri-forms-sdk\";\nimport { MultipleTextQuestion } from \"./MultipleTextQuestion\";\nimport { PropsWithChildren, createContext, useContext, useState } from \"react\";\nimport { SelectQuestion } from \"./SelectQuestion\";\nimport { getRandomId } from \"./getRandomId\";\nimport FeedbackIcon from \"@mui/icons-material/Feedback\";\n\nconst getFormId = () => {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"01GWRQ1MRS7PE29XGRETFZ6D7Y\"\n : \"01GTBSYMGPMX91E96P007SXEMH\";\n};\n\ninterface TextQuestionContextValue {\n userId?: string;\n userName?: string;\n serviceName?: string;\n url?: string;\n id?: string;\n}\n\nconst TextQuestionContext = createContext<TextQuestionContextValue>({});\n\nconst TextQuestion = (props: MatsuriFormsTextQuestionProps) => {\n const context = useContext(TextQuestionContext);\n return (\n <input\n value={context[props.title as keyof TextQuestionContextValue]}\n type=\"hidden\"\n name={props.name}\n />\n );\n};\n\ninterface FeedbackProviderModalProps\n extends Partial<ModalProps>,\n FeedbackProviderProps {}\n\nconst FeedbackProviderModal = (props: FeedbackProviderModalProps) => {\n const { questions, submit } = useMatsuriForms(getFormId(), {\n dev: globalThis.M2M_COMPONENTS_ENV !== \"production\",\n });\n\n const { throwAlert } = useAlert();\n\n const [status, setStatus] = useState<\"started\" | \"sending\" | \"completed\">(\n \"started\",\n );\n\n const id = getRandomId();\n\n return (\n <Modal\n backdrop\n width={600}\n maxWidth={600}\n header={<Typography variant=\"h3\">フィードバックを送信</Typography>}\n body={\n status === \"completed\" ? (\n <div\n style={{\n display: \"grid\",\n gap: 32,\n }}\n >\n <Typography>\n レポートを送信しました。ありがとうございます。\n </Typography>\n <Typography color=\"textSecondary\" variant=\"caption\" as=\"p\">\n お送りいただいたフィードバックは、問題の解決とサービスの改善に役立てさせていただきます。\n </Typography>\n <Button\n color=\"primary\"\n variant=\"filled\"\n onClick={() => {\n props.onClose?.();\n }}\n >\n 閉じる\n </Button>\n </div>\n ) : (\n <form\n style={{\n display: \"grid\",\n gap: 24,\n }}\n onSubmit={async (event) => {\n event.preventDefault();\n setStatus(\"sending\");\n const { error } = await submit(event.currentTarget);\n\n /**\n * 以下、対応が行われるまでは取れる値だけ送る\n * https://github.com/matsuri-tech/matsuri-forms-manager-front/issues/265\n */\n const input = {\n id,\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n };\n throwAlert(error, {\n ignoreSuccess: true,\n errorMessage: {\n reason: \"サーバー側のエラーの可能性があります。\",\n action:\n \"しばらく時間を空けて試すか、開発チームへお問い合わせください。\",\n happend: \"フィードバックの送信に失敗しました。\",\n },\n onSuccess: () => {\n props.datadogLogs?.logger?.info?.(\n `Feedback: ${id} by ${props.userId}`,\n {\n input,\n },\n );\n\n window.setTimeout(() => {\n setStatus(\"completed\");\n }, 2000);\n },\n onError: () => {\n props.datadogLogs?.logger?.error?.(\n `Failed Feedback: ${input.id} by ${input.userId}`,\n { input, error },\n );\n\n window.setTimeout(() => {\n setStatus(\"started\");\n }, 2000);\n },\n });\n }}\n >\n <TextQuestionContext.Provider\n value={{\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n id,\n }}\n >\n <MatsuriFormsQuestionProvider\n renderSelect={SelectQuestion}\n renderMultilineText={MultipleTextQuestion}\n renderText={TextQuestion}\n >\n {questions.map((question) => {\n return (\n <MatsuriFormsQuestion {...question} key={question.id} />\n );\n })}\n </MatsuriFormsQuestionProvider>\n </TextQuestionContext.Provider>\n <div>\n <Button\n type=\"submit\"\n color=\"primary\"\n variant=\"filled\"\n disabled={status === \"sending\"}\n fullWidth\n >\n 送信\n </Button>\n <Typography\n variant=\"caption\"\n style={{\n float: \"right\",\n }}\n >\n {status === \"sending\" ? \"送信中...\" : undefined}\n &nbsp;\n </Typography>\n </div>\n </form>\n )\n }\n {...props}\n />\n );\n};\n\ninterface FeedbackProviderProps {\n userId?: string;\n userName?: string;\n serviceName: string;\n datadogLogs?: {\n logger: Logger;\n };\n}\n\nexport const FeedbackProvider = ({\n children,\n ...modalProps\n}: PropsWithChildren<FeedbackProviderProps>) => {\n const [open] = useModal(FeedbackProviderModal, {\n enableClickOutside: true,\n disableClose: false,\n });\n return (\n <div>\n {children}\n <Portal>\n <Button\n style={{\n position: \"fixed\",\n bottom: 16,\n right: 16,\n }}\n onClick={() => {\n open(modalProps);\n }}\n type=\"button\"\n icon={<FeedbackIcon />}\n color=\"secondary\"\n variant=\"filled\"\n rounded\n />\n </Portal>\n </div>\n );\n};\n","import { MatsuriFormsMultilineTextQuestionProps } from \"matsuri-forms-sdk\";\nimport { MultipleTextField } from \"matsuri-ui\";\n\nexport const MultipleTextQuestion = (\n props: MatsuriFormsMultilineTextQuestionProps,\n) => {\n return (\n <MultipleTextField\n label=\"問題や提案について説明してください\"\n required={props.required}\n name={props.name}\n rows={6}\n helperText=\"現在開いているページのURLは自動的に送信されるため記載不要です\"\n />\n );\n};\n","import { Checkbox } from \"matsuri-ui\";\nimport { MatsuriFormsSelectQuestionProps } from \"matsuri-forms-sdk\";\n\nexport const SelectQuestion = (props: MatsuriFormsSelectQuestionProps) => {\n return (\n <div\n style={{\n display: \"flex\",\n gap: 16,\n }}\n >\n {props.options.map((option) => {\n return (\n <Checkbox\n defaultChecked\n type=\"radio\"\n name={props.name}\n value={option.value}\n key={option.value}\n >\n {option.label}\n </Checkbox>\n );\n })}\n </div>\n );\n};\n","/**\n * このIDはdatadogなどのログ収集サービスと紐づけるためのものであり、厳密なランダム性は求めない。\n */\nexport const getRandomId = () => Math.floor(20e6 * Math.random()).toString(16);\n"],"mappings":"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","names":["import_matsuri_ui","import_matsuri_ui","import_jsx_runtime","import_jsx_runtime","import_react","FeedbackIcon"]}
1
+ {"version":3,"sources":["../../src/feedback/index.tsx","../../src/feedback/MultipleTextQuestion.tsx","../../src/feedback/SelectQuestion.tsx","../../src/feedback/getRandomId.tsx"],"sourcesContent":["import {\n Button,\n Modal,\n ModalProps,\n Portal,\n Typography,\n useAlert,\n useModal,\n} from \"matsuri-ui\";\nimport { type Logger } from \"@datadog/browser-logs\";\nimport {\n MatsuriFormsQuestion,\n MatsuriFormsQuestionProvider,\n MatsuriFormsTextQuestionProps,\n useMatsuriForms,\n} from \"matsuri-forms-sdk\";\nimport { MultipleTextQuestion } from \"./MultipleTextQuestion\";\nimport { PropsWithChildren, createContext, useContext, useState } from \"react\";\nimport { SelectQuestion } from \"./SelectQuestion\";\nimport { getRandomId } from \"./getRandomId\";\nimport FeedbackIconBase from \"@mui/icons-material/Feedback\";\n\n/**\n * これはワークアラウンドです。\n * これを行わずに、MuiIconをそのまま使うと、トランスパイル後のコードで次のようなエラーが発生し、コンポーネントを描画できなくなります。\n * `Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.`\n * 関連リンク:\n * https://stackoverflow.com/questions/72008357/mui-icons-used-in-shared-react-component-library-wont-render-error-element-ty\n * https://github.com/mui/material-ui/issues/35535\n */\nconst normalizeIcon = <T,>(Icon: T): T => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n return ((Icon as any).default ? (Icon as any).default : Icon) as T;\n};\nconst FeedbackIcon = normalizeIcon(FeedbackIconBase);\n\nconst getFormId = () => {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"01GWRQ1MRS7PE29XGRETFZ6D7Y\"\n : \"01GTBSYMGPMX91E96P007SXEMH\";\n};\n\ninterface TextQuestionContextValue {\n userId?: string;\n userName?: string;\n serviceName?: string;\n url?: string;\n id?: string;\n}\n\nconst TextQuestionContext = createContext<TextQuestionContextValue>({});\n\nconst TextQuestion = (props: MatsuriFormsTextQuestionProps) => {\n const context = useContext(TextQuestionContext);\n return (\n <input\n value={context[props.title as keyof TextQuestionContextValue]}\n type=\"hidden\"\n name={props.name}\n />\n );\n};\n\ninterface FeedbackProviderModalProps\n extends Partial<ModalProps>,\n FeedbackProviderProps {}\n\nconst FeedbackProviderModal = (props: FeedbackProviderModalProps) => {\n const { questions, submit } = useMatsuriForms(getFormId(), {\n dev: globalThis.M2M_COMPONENTS_ENV !== \"production\",\n });\n\n const { throwAlert } = useAlert();\n\n const [status, setStatus] = useState<\"started\" | \"sending\" | \"completed\">(\n \"started\",\n );\n\n const id = getRandomId();\n\n return (\n <Modal\n backdrop\n width={600}\n maxWidth={600}\n header={<Typography variant=\"h3\">フィードバックを送信</Typography>}\n body={\n status === \"completed\" ? (\n <div\n style={{\n display: \"grid\",\n gap: 32,\n }}\n >\n <Typography>\n レポートを送信しました。ありがとうございます。\n </Typography>\n <Typography color=\"textSecondary\" variant=\"caption\" as=\"p\">\n お送りいただいたフィードバックは、問題の解決とサービスの改善に役立てさせていただきます。\n </Typography>\n <Button\n color=\"primary\"\n variant=\"filled\"\n onClick={() => {\n props.onClose?.();\n }}\n >\n 閉じる\n </Button>\n </div>\n ) : (\n <form\n style={{\n display: \"grid\",\n gap: 24,\n }}\n onSubmit={async (event) => {\n event.preventDefault();\n setStatus(\"sending\");\n const { error } = await submit(event.currentTarget);\n\n /**\n * 以下、対応が行われるまでは取れる値だけ送る\n * https://github.com/matsuri-tech/matsuri-forms-manager-front/issues/265\n */\n const input = {\n id,\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n };\n throwAlert(error, {\n ignoreSuccess: true,\n errorMessage: {\n reason: \"サーバー側のエラーの可能性があります。\",\n action:\n \"しばらく時間を空けて試すか、開発チームへお問い合わせください。\",\n happend: \"フィードバックの送信に失敗しました。\",\n },\n onSuccess: () => {\n props.datadogLogs?.logger?.info?.(\n `Feedback: ${id} by ${props.userId}`,\n {\n input,\n },\n );\n\n window.setTimeout(() => {\n setStatus(\"completed\");\n }, 2000);\n },\n onError: () => {\n props.datadogLogs?.logger?.error?.(\n `Failed Feedback: ${input.id} by ${input.userId}`,\n { input, error },\n );\n\n window.setTimeout(() => {\n setStatus(\"started\");\n }, 2000);\n },\n });\n }}\n >\n <TextQuestionContext.Provider\n value={{\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n id,\n }}\n >\n <MatsuriFormsQuestionProvider\n renderSelect={SelectQuestion}\n renderMultilineText={MultipleTextQuestion}\n renderText={TextQuestion}\n >\n {questions.map((question) => {\n return (\n <MatsuriFormsQuestion {...question} key={question.id} />\n );\n })}\n </MatsuriFormsQuestionProvider>\n </TextQuestionContext.Provider>\n <div>\n <Button\n type=\"submit\"\n color=\"primary\"\n variant=\"filled\"\n disabled={status === \"sending\"}\n fullWidth\n >\n 送信\n </Button>\n <Typography\n variant=\"caption\"\n style={{\n float: \"right\",\n }}\n >\n {status === \"sending\" ? \"送信中...\" : undefined}\n &nbsp;\n </Typography>\n </div>\n </form>\n )\n }\n {...props}\n />\n );\n};\n\ninterface FeedbackProviderProps {\n userId?: string;\n userName?: string;\n serviceName: string;\n datadogLogs?: {\n logger: Logger;\n };\n}\n\nexport const FeedbackProvider = ({\n children,\n ...modalProps\n}: PropsWithChildren<FeedbackProviderProps>) => {\n const [open] = useModal(FeedbackProviderModal, {\n enableClickOutside: true,\n disableClose: false,\n });\n return (\n <div>\n {children}\n <Portal>\n <Button\n style={{\n position: \"fixed\",\n bottom: 16,\n right: 16,\n }}\n onClick={() => {\n open(modalProps);\n }}\n type=\"button\"\n icon={<FeedbackIcon />}\n color=\"secondary\"\n variant=\"filled\"\n rounded\n />\n </Portal>\n </div>\n );\n};\n","import { MatsuriFormsMultilineTextQuestionProps } from \"matsuri-forms-sdk\";\nimport { MultipleTextField } from \"matsuri-ui\";\n\nexport const MultipleTextQuestion = (\n props: MatsuriFormsMultilineTextQuestionProps,\n) => {\n return (\n <MultipleTextField\n label=\"問題や提案について説明してください\"\n required={props.required}\n name={props.name}\n rows={6}\n helperText=\"現在開いているページのURLは自動的に送信されるため記載不要です\"\n />\n );\n};\n","import { Checkbox } from \"matsuri-ui\";\nimport { MatsuriFormsSelectQuestionProps } from \"matsuri-forms-sdk\";\n\nexport const SelectQuestion = (props: MatsuriFormsSelectQuestionProps) => {\n return (\n <div\n style={{\n display: \"flex\",\n gap: 16,\n }}\n >\n {props.options.map((option) => {\n return (\n <Checkbox\n defaultChecked\n type=\"radio\"\n name={props.name}\n value={option.value}\n key={option.value}\n >\n {option.label}\n </Checkbox>\n );\n })}\n </div>\n );\n};\n","/**\n * このIDはdatadogなどのログ収集サービスと紐づけるためのものであり、厳密なランダム性は求めない。\n */\nexport const getRandomId = () => Math.floor(20e6 * Math.random()).toString(16);\n"],"mappings":"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","names":["import_matsuri_ui","import_matsuri_ui","import_jsx_runtime","import_jsx_runtime","import_react","FeedbackIconBase"]}
@@ -1,10 +1,10 @@
1
1
  'use client'
2
2
  import {
3
3
  FeedbackProvider
4
- } from "../chunk-I2GUBCRE.mjs";
4
+ } from "../chunk-RDG67OF7.mjs";
5
5
  import "../chunk-IH72EYIB.mjs";
6
- import "../chunk-IYTHV2XJ.mjs";
7
- import "../chunk-FDRD4YS4.mjs";
6
+ import "../chunk-SXIYWN76.mjs";
7
+ import "../chunk-CTGSJWXT.mjs";
8
8
  import "../chunk-QH5I6YL2.mjs";
9
9
  export {
10
10
  FeedbackProvider
package/index.js CHANGED
@@ -58,19 +58,23 @@ var import_matsuri_forms_sdk = require("matsuri-forms-sdk");
58
58
 
59
59
  // src/feedback/MultipleTextQuestion.tsx
60
60
  var import_matsuri_ui = require("matsuri-ui");
61
- var import_jsx_runtime = require("react/jsx-runtime");
61
+ var import_jsx_runtime = require("@emotion/react/jsx-runtime");
62
62
 
63
63
  // src/feedback/index.tsx
64
64
  var import_react = require("react");
65
65
 
66
66
  // src/feedback/SelectQuestion.tsx
67
67
  var import_matsuri_ui2 = require("matsuri-ui");
68
- var import_jsx_runtime2 = require("react/jsx-runtime");
68
+ var import_jsx_runtime2 = require("@emotion/react/jsx-runtime");
69
69
 
70
70
  // src/feedback/index.tsx
71
71
  var import_Feedback = __toESM(require("@mui/icons-material/Feedback"));
72
- var import_jsx_runtime3 = require("react/jsx-runtime");
73
- var import_react2 = require("react");
72
+ var import_jsx_runtime3 = require("@emotion/react/jsx-runtime");
73
+ var import_react2 = require("@emotion/react");
74
+ var normalizeIcon = (Icon) => {
75
+ return Icon.default ? Icon.default : Icon;
76
+ };
77
+ var FeedbackIcon = normalizeIcon(import_Feedback.default);
74
78
  var TextQuestionContext = (0, import_react.createContext)({});
75
79
 
76
80
  // src/storage/client.ts
@@ -409,7 +413,7 @@ var import_matsuri_hooks = require("matsuri-hooks");
409
413
 
410
414
  // src/notification/ServiceIdProvider.tsx
411
415
  var import_react3 = __toESM(require("react"));
412
- var import_jsx_runtime4 = require("react/jsx-runtime");
416
+ var import_jsx_runtime4 = require("@emotion/react/jsx-runtime");
413
417
  var ServiceIdContext = (0, import_react3.createContext)(
414
418
  void 0
415
419
  );
@@ -418,7 +422,7 @@ var ServiceIdContext = (0, import_react3.createContext)(
418
422
  var import_react4 = require("react");
419
423
  var import_matsuri_hooks2 = require("matsuri-hooks");
420
424
  var import_react5 = require("react");
421
- var import_jsx_runtime5 = require("react/jsx-runtime");
425
+ var import_jsx_runtime5 = require("@emotion/react/jsx-runtime");
422
426
  var NotificationPermissionContext = (0, import_react4.createContext)(void 0);
423
427
  var NotificationsContext = (0, import_react4.createContext)(void 0);
424
428
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/domains.ts","../src/feedback/index.tsx","../src/feedback/MultipleTextQuestion.tsx","../src/feedback/SelectQuestion.tsx","../src/storage/client.ts","../src/MenuBaseElement.ts","../src/m2m-apps-menu.ts","../src/m2m-user-menu.ts","../src/notification/api.ts","../src/notification/ServiceIdProvider.tsx","../src/notification/NotificationProvider.tsx"],"sourcesContent":["export const getDomains = () => {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? {\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 inspection: \"https://inspection.m2msystems.cloud\",\n checkin: \"https://manage.checkin.m2msystems.cloud\",\n systems: \"https://m2msystems.cloud/\",\n }\n : {\n core: \"https://dev--m2m-core-manager-front.netlify.app\",\n sumyca: \"https://dev--sumyca-manager-front.netlify.app\",\n cleaning: \"https://dev--m2m-cleaning-manager-front.netlify.app\",\n users: \"https://dev--manage-users.netlify.app\",\n inspection: \"https://dev--m2m-inspection-manager-front.netlify.app\",\n checkin: \"https://manage.dev.checkin.m2msystems.cloud\",\n systems: \"https://dev.m2msystems.cloud\",\n };\n};\n","import {\n Button,\n Modal,\n ModalProps,\n Portal,\n Typography,\n useAlert,\n useModal,\n} from \"matsuri-ui\";\nimport { type Logger } from \"@datadog/browser-logs\";\nimport {\n MatsuriFormsQuestion,\n MatsuriFormsQuestionProvider,\n MatsuriFormsTextQuestionProps,\n useMatsuriForms,\n} from \"matsuri-forms-sdk\";\nimport { MultipleTextQuestion } from \"./MultipleTextQuestion\";\nimport { PropsWithChildren, createContext, useContext, useState } from \"react\";\nimport { SelectQuestion } from \"./SelectQuestion\";\nimport { getRandomId } from \"./getRandomId\";\nimport FeedbackIcon from \"@mui/icons-material/Feedback\";\n\nconst getFormId = () => {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"01GWRQ1MRS7PE29XGRETFZ6D7Y\"\n : \"01GTBSYMGPMX91E96P007SXEMH\";\n};\n\ninterface TextQuestionContextValue {\n userId?: string;\n userName?: string;\n serviceName?: string;\n url?: string;\n id?: string;\n}\n\nconst TextQuestionContext = createContext<TextQuestionContextValue>({});\n\nconst TextQuestion = (props: MatsuriFormsTextQuestionProps) => {\n const context = useContext(TextQuestionContext);\n return (\n <input\n value={context[props.title as keyof TextQuestionContextValue]}\n type=\"hidden\"\n name={props.name}\n />\n );\n};\n\ninterface FeedbackProviderModalProps\n extends Partial<ModalProps>,\n FeedbackProviderProps {}\n\nconst FeedbackProviderModal = (props: FeedbackProviderModalProps) => {\n const { questions, submit } = useMatsuriForms(getFormId(), {\n dev: globalThis.M2M_COMPONENTS_ENV !== \"production\",\n });\n\n const { throwAlert } = useAlert();\n\n const [status, setStatus] = useState<\"started\" | \"sending\" | \"completed\">(\n \"started\",\n );\n\n const id = getRandomId();\n\n return (\n <Modal\n backdrop\n width={600}\n maxWidth={600}\n header={<Typography variant=\"h3\">フィードバックを送信</Typography>}\n body={\n status === \"completed\" ? (\n <div\n style={{\n display: \"grid\",\n gap: 32,\n }}\n >\n <Typography>\n レポートを送信しました。ありがとうございます。\n </Typography>\n <Typography color=\"textSecondary\" variant=\"caption\" as=\"p\">\n お送りいただいたフィードバックは、問題の解決とサービスの改善に役立てさせていただきます。\n </Typography>\n <Button\n color=\"primary\"\n variant=\"filled\"\n onClick={() => {\n props.onClose?.();\n }}\n >\n 閉じる\n </Button>\n </div>\n ) : (\n <form\n style={{\n display: \"grid\",\n gap: 24,\n }}\n onSubmit={async (event) => {\n event.preventDefault();\n setStatus(\"sending\");\n const { error } = await submit(event.currentTarget);\n\n /**\n * 以下、対応が行われるまでは取れる値だけ送る\n * https://github.com/matsuri-tech/matsuri-forms-manager-front/issues/265\n */\n const input = {\n id,\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n };\n throwAlert(error, {\n ignoreSuccess: true,\n errorMessage: {\n reason: \"サーバー側のエラーの可能性があります。\",\n action:\n \"しばらく時間を空けて試すか、開発チームへお問い合わせください。\",\n happend: \"フィードバックの送信に失敗しました。\",\n },\n onSuccess: () => {\n props.datadogLogs?.logger?.info?.(\n `Feedback: ${id} by ${props.userId}`,\n {\n input,\n },\n );\n\n window.setTimeout(() => {\n setStatus(\"completed\");\n }, 2000);\n },\n onError: () => {\n props.datadogLogs?.logger?.error?.(\n `Failed Feedback: ${input.id} by ${input.userId}`,\n { input, error },\n );\n\n window.setTimeout(() => {\n setStatus(\"started\");\n }, 2000);\n },\n });\n }}\n >\n <TextQuestionContext.Provider\n value={{\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n id,\n }}\n >\n <MatsuriFormsQuestionProvider\n renderSelect={SelectQuestion}\n renderMultilineText={MultipleTextQuestion}\n renderText={TextQuestion}\n >\n {questions.map((question) => {\n return (\n <MatsuriFormsQuestion {...question} key={question.id} />\n );\n })}\n </MatsuriFormsQuestionProvider>\n </TextQuestionContext.Provider>\n <div>\n <Button\n type=\"submit\"\n color=\"primary\"\n variant=\"filled\"\n disabled={status === \"sending\"}\n fullWidth\n >\n 送信\n </Button>\n <Typography\n variant=\"caption\"\n style={{\n float: \"right\",\n }}\n >\n {status === \"sending\" ? \"送信中...\" : undefined}\n &nbsp;\n </Typography>\n </div>\n </form>\n )\n }\n {...props}\n />\n );\n};\n\ninterface FeedbackProviderProps {\n userId?: string;\n userName?: string;\n serviceName: string;\n datadogLogs?: {\n logger: Logger;\n };\n}\n\nexport const FeedbackProvider = ({\n children,\n ...modalProps\n}: PropsWithChildren<FeedbackProviderProps>) => {\n const [open] = useModal(FeedbackProviderModal, {\n enableClickOutside: true,\n disableClose: false,\n });\n return (\n <div>\n {children}\n <Portal>\n <Button\n style={{\n position: \"fixed\",\n bottom: 16,\n right: 16,\n }}\n onClick={() => {\n open(modalProps);\n }}\n type=\"button\"\n icon={<FeedbackIcon />}\n color=\"secondary\"\n variant=\"filled\"\n rounded\n />\n </Portal>\n </div>\n );\n};\n","import { MatsuriFormsMultilineTextQuestionProps } from \"matsuri-forms-sdk\";\nimport { MultipleTextField } from \"matsuri-ui\";\n\nexport const MultipleTextQuestion = (\n props: MatsuriFormsMultilineTextQuestionProps,\n) => {\n return (\n <MultipleTextField\n label=\"問題や提案について説明してください\"\n required={props.required}\n name={props.name}\n rows={6}\n helperText=\"現在開いているページのURLは自動的に送信されるため記載不要です\"\n />\n );\n};\n","import { Checkbox } from \"matsuri-ui\";\nimport { MatsuriFormsSelectQuestionProps } from \"matsuri-forms-sdk\";\n\nexport const SelectQuestion = (props: MatsuriFormsSelectQuestionProps) => {\n return (\n <div\n style={{\n display: \"flex\",\n gap: 16,\n }}\n >\n {props.options.map((option) => {\n return (\n <Checkbox\n defaultChecked\n type=\"radio\"\n name={props.name}\n value={option.value}\n key={option.value}\n >\n {option.label}\n </Checkbox>\n );\n })}\n </div>\n );\n};\n","import { StorageClient } from \"./lib/client\";\n\nclass M2mStorageClient extends StorageClient {}\n\nexport type { M2mStorageClient };\n\nconst context: {\n storage?: M2mStorageClient;\n} = {};\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 = context.storage;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n resolve(storage);\n }\n\n const timer = globalThis.setInterval(() => {\n const storage = context.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 M2M_STORAGE_HUB_URL = \"https://hub.m2msystems.cloud/\";\n\nconst M2M_STORAGE_HUB_URL_DEV =\n \"https://m2m-components-storage-hub-dev.netlify.app/\";\n\nconst initStorageClient = (options?: {\n env?: \"development\" | \"production\";\n}) => {\n if (context.storage) {\n throw new Error(\n \"M2mStorageClient already initialized. Do not call m2mStorageClient.init multiple times.\",\n );\n }\n const storage = new M2mStorageClient(\n options?.env === \"production\"\n ? M2M_STORAGE_HUB_URL\n : M2M_STORAGE_HUB_URL_DEV,\n );\n context.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 || 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 { 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","import { MenuBaseElement, MenuBaseElementProps } from \"./MenuBaseElement\";\nimport { customElement } from \"lit/decorators.js\";\nimport { getDomains } from \"./domains\";\nimport { html } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\n\nexport type M2MAppsMenuProps = MenuBaseElementProps;\n\n@customElement(\"m2m-apps-menu\")\nexport class M2MAppsMenu extends MenuBaseElement {\n render() {\n const domains = getDomains();\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 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=${!this.expanded}\n class=\"navigation-drawer\"\n >\n <li>\n <span>m2m Series</span>\n <ul>\n <li><a href=\"${domains.core}\">Core 施設管理</a></li>\n <li><a href=\"${domains.checkin}\">Checkin ゲストチェックイン</a></li>\n <li><a href=\"${domains.systems}\">Systems Airbnb連携</a></li>\n <li><a href=\"${domains.cleaning}\">Cleaning 清掃管理</a></li>\n <li><a href=\"${domains.inspection}\">Inspection 内見チェック</a></li>\n <li><a href=\"${domains.users}\">Users アカウント管理</a></li>\n </ul>\n </li>\n <li>\n <a href=\"${domains.sumyca}\">Sumyca マンスリープラットフォーム</a>\n </li>\n ${additionalItems}\n </ul>\n </nav>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"m2m-apps-menu\": M2MAppsMenu;\n }\n}\n","import { MenuBaseElement, MenuBaseElementProps } from \"./MenuBaseElement\";\nimport { customElement } from \"lit/decorators.js\";\nimport { getDomains } from \"./domains\";\nimport { html } from \"lit\";\nimport { m2mAuthTokenApi } from \"./storage/client\";\nimport { ref } from \"lit/directives/ref.js\";\n\nexport type M2MUserMenuProps = MenuBaseElementProps;\n\n@customElement(\"m2m-user-menu\")\nexport class M2MUserMenu extends MenuBaseElement {\n handleLogout = () => {\n void m2mAuthTokenApi.clear();\n window.location.reload();\n };\n\n render() {\n const domains = getDomains();\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 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=${!this.expanded}\n class=\"navigation-drawer\"\n >\n <li><a href=\"${domains.users}\">アカウント情報</a></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","import { Subscription } from \"./domain\";\nimport { fetcher } from \"matsuri-hooks\";\nimport { m2mNotifications_v1 } from \"../endpoints/m2m-notifications.v1\";\n\nexport const requestUpdateNotificationStatusToRead = async (\n token: string,\n id: string,\n) => {\n await fetcher(\n m2mNotifications_v1.updateNotificationStatus({\n id,\n }),\n {\n method: \"PUT\",\n token,\n body: JSON.stringify({ status: \"read\" }),\n },\n );\n};\n\nexport const requestSubscribe = async (\n token: string,\n serviceId: string,\n input: Pick<Subscription, \"notificationType\" | \"resourceSubscription\">,\n) => {\n const { error } = await fetcher(m2mNotifications_v1.saveSubscription(), {\n method: \"POST\",\n token,\n body: JSON.stringify({\n ...input,\n serviceId,\n status: \"subscribed\",\n }),\n });\n if (error) {\n console.error(error);\n }\n};\n\nexport const requestUnSubscribe = async (\n token: string,\n serviceId: string,\n input: Pick<Subscription, \"notificationType\" | \"resourceSubscription\">,\n) => {\n const { error } = await fetcher(m2mNotifications_v1.saveSubscription(), {\n method: \"POST\",\n token,\n body: JSON.stringify({\n ...input,\n serviceId,\n status: \"denied\",\n }),\n });\n if (error) {\n console.error(error);\n }\n};\n","import React, { createContext, useMemo } from \"react\";\n\ninterface ServiceIdContextState {\n serviceId: string;\n}\n\nconst ServiceIdContext = createContext<ServiceIdContextState | undefined>(\n undefined,\n);\n\nexport const ServiceIdProvider = ({\n serviceId,\n children,\n}: {\n serviceId: string;\n children: React.ReactNode;\n}) => {\n const state = useMemo(() => ({ serviceId }), [serviceId]);\n\n return (\n <ServiceIdContext.Provider value={state}>\n {children}\n </ServiceIdContext.Provider>\n );\n};\n\nexport const useServiceId = () => {\n const context = React.useContext(ServiceIdContext);\n if (context === undefined) {\n throw new Error(\"useServiceId must be used within a ServiceIdProvider\");\n }\n return context.serviceId;\n};\n","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":"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","names":["import_matsuri_ui","import_matsuri_ui","import_jsx_runtime","import_jsx_runtime","import_react","storage","import_decorators","import_lit","import_ref","import_decorators","import_lit","import_ref","import_react","import_jsx_runtime","import_react","import_matsuri_hooks","import_react","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/domains.ts","../src/feedback/index.tsx","../src/feedback/MultipleTextQuestion.tsx","../src/feedback/SelectQuestion.tsx","../src/storage/client.ts","../src/MenuBaseElement.ts","../src/m2m-apps-menu.ts","../src/m2m-user-menu.ts","../src/notification/api.ts","../src/notification/ServiceIdProvider.tsx","../src/notification/NotificationProvider.tsx"],"sourcesContent":["export const getDomains = () => {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? {\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 inspection: \"https://inspection.m2msystems.cloud\",\n checkin: \"https://manage.checkin.m2msystems.cloud\",\n systems: \"https://m2msystems.cloud/\",\n }\n : {\n core: \"https://dev--m2m-core-manager-front.netlify.app\",\n sumyca: \"https://dev--sumyca-manager-front.netlify.app\",\n cleaning: \"https://dev--m2m-cleaning-manager-front.netlify.app\",\n users: \"https://dev--manage-users.netlify.app\",\n inspection: \"https://dev--m2m-inspection-manager-front.netlify.app\",\n checkin: \"https://manage.dev.checkin.m2msystems.cloud\",\n systems: \"https://dev.m2msystems.cloud\",\n };\n};\n","import {\n Button,\n Modal,\n ModalProps,\n Portal,\n Typography,\n useAlert,\n useModal,\n} from \"matsuri-ui\";\nimport { type Logger } from \"@datadog/browser-logs\";\nimport {\n MatsuriFormsQuestion,\n MatsuriFormsQuestionProvider,\n MatsuriFormsTextQuestionProps,\n useMatsuriForms,\n} from \"matsuri-forms-sdk\";\nimport { MultipleTextQuestion } from \"./MultipleTextQuestion\";\nimport { PropsWithChildren, createContext, useContext, useState } from \"react\";\nimport { SelectQuestion } from \"./SelectQuestion\";\nimport { getRandomId } from \"./getRandomId\";\nimport FeedbackIconBase from \"@mui/icons-material/Feedback\";\n\n/**\n * これはワークアラウンドです。\n * これを行わずに、MuiIconをそのまま使うと、トランスパイル後のコードで次のようなエラーが発生し、コンポーネントを描画できなくなります。\n * `Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: object.`\n * 関連リンク:\n * https://stackoverflow.com/questions/72008357/mui-icons-used-in-shared-react-component-library-wont-render-error-element-ty\n * https://github.com/mui/material-ui/issues/35535\n */\nconst normalizeIcon = <T,>(Icon: T): T => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access\n return ((Icon as any).default ? (Icon as any).default : Icon) as T;\n};\nconst FeedbackIcon = normalizeIcon(FeedbackIconBase);\n\nconst getFormId = () => {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"01GWRQ1MRS7PE29XGRETFZ6D7Y\"\n : \"01GTBSYMGPMX91E96P007SXEMH\";\n};\n\ninterface TextQuestionContextValue {\n userId?: string;\n userName?: string;\n serviceName?: string;\n url?: string;\n id?: string;\n}\n\nconst TextQuestionContext = createContext<TextQuestionContextValue>({});\n\nconst TextQuestion = (props: MatsuriFormsTextQuestionProps) => {\n const context = useContext(TextQuestionContext);\n return (\n <input\n value={context[props.title as keyof TextQuestionContextValue]}\n type=\"hidden\"\n name={props.name}\n />\n );\n};\n\ninterface FeedbackProviderModalProps\n extends Partial<ModalProps>,\n FeedbackProviderProps {}\n\nconst FeedbackProviderModal = (props: FeedbackProviderModalProps) => {\n const { questions, submit } = useMatsuriForms(getFormId(), {\n dev: globalThis.M2M_COMPONENTS_ENV !== \"production\",\n });\n\n const { throwAlert } = useAlert();\n\n const [status, setStatus] = useState<\"started\" | \"sending\" | \"completed\">(\n \"started\",\n );\n\n const id = getRandomId();\n\n return (\n <Modal\n backdrop\n width={600}\n maxWidth={600}\n header={<Typography variant=\"h3\">フィードバックを送信</Typography>}\n body={\n status === \"completed\" ? (\n <div\n style={{\n display: \"grid\",\n gap: 32,\n }}\n >\n <Typography>\n レポートを送信しました。ありがとうございます。\n </Typography>\n <Typography color=\"textSecondary\" variant=\"caption\" as=\"p\">\n お送りいただいたフィードバックは、問題の解決とサービスの改善に役立てさせていただきます。\n </Typography>\n <Button\n color=\"primary\"\n variant=\"filled\"\n onClick={() => {\n props.onClose?.();\n }}\n >\n 閉じる\n </Button>\n </div>\n ) : (\n <form\n style={{\n display: \"grid\",\n gap: 24,\n }}\n onSubmit={async (event) => {\n event.preventDefault();\n setStatus(\"sending\");\n const { error } = await submit(event.currentTarget);\n\n /**\n * 以下、対応が行われるまでは取れる値だけ送る\n * https://github.com/matsuri-tech/matsuri-forms-manager-front/issues/265\n */\n const input = {\n id,\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n };\n throwAlert(error, {\n ignoreSuccess: true,\n errorMessage: {\n reason: \"サーバー側のエラーの可能性があります。\",\n action:\n \"しばらく時間を空けて試すか、開発チームへお問い合わせください。\",\n happend: \"フィードバックの送信に失敗しました。\",\n },\n onSuccess: () => {\n props.datadogLogs?.logger?.info?.(\n `Feedback: ${id} by ${props.userId}`,\n {\n input,\n },\n );\n\n window.setTimeout(() => {\n setStatus(\"completed\");\n }, 2000);\n },\n onError: () => {\n props.datadogLogs?.logger?.error?.(\n `Failed Feedback: ${input.id} by ${input.userId}`,\n { input, error },\n );\n\n window.setTimeout(() => {\n setStatus(\"started\");\n }, 2000);\n },\n });\n }}\n >\n <TextQuestionContext.Provider\n value={{\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n id,\n }}\n >\n <MatsuriFormsQuestionProvider\n renderSelect={SelectQuestion}\n renderMultilineText={MultipleTextQuestion}\n renderText={TextQuestion}\n >\n {questions.map((question) => {\n return (\n <MatsuriFormsQuestion {...question} key={question.id} />\n );\n })}\n </MatsuriFormsQuestionProvider>\n </TextQuestionContext.Provider>\n <div>\n <Button\n type=\"submit\"\n color=\"primary\"\n variant=\"filled\"\n disabled={status === \"sending\"}\n fullWidth\n >\n 送信\n </Button>\n <Typography\n variant=\"caption\"\n style={{\n float: \"right\",\n }}\n >\n {status === \"sending\" ? \"送信中...\" : undefined}\n &nbsp;\n </Typography>\n </div>\n </form>\n )\n }\n {...props}\n />\n );\n};\n\ninterface FeedbackProviderProps {\n userId?: string;\n userName?: string;\n serviceName: string;\n datadogLogs?: {\n logger: Logger;\n };\n}\n\nexport const FeedbackProvider = ({\n children,\n ...modalProps\n}: PropsWithChildren<FeedbackProviderProps>) => {\n const [open] = useModal(FeedbackProviderModal, {\n enableClickOutside: true,\n disableClose: false,\n });\n return (\n <div>\n {children}\n <Portal>\n <Button\n style={{\n position: \"fixed\",\n bottom: 16,\n right: 16,\n }}\n onClick={() => {\n open(modalProps);\n }}\n type=\"button\"\n icon={<FeedbackIcon />}\n color=\"secondary\"\n variant=\"filled\"\n rounded\n />\n </Portal>\n </div>\n );\n};\n","import { MatsuriFormsMultilineTextQuestionProps } from \"matsuri-forms-sdk\";\nimport { MultipleTextField } from \"matsuri-ui\";\n\nexport const MultipleTextQuestion = (\n props: MatsuriFormsMultilineTextQuestionProps,\n) => {\n return (\n <MultipleTextField\n label=\"問題や提案について説明してください\"\n required={props.required}\n name={props.name}\n rows={6}\n helperText=\"現在開いているページのURLは自動的に送信されるため記載不要です\"\n />\n );\n};\n","import { Checkbox } from \"matsuri-ui\";\nimport { MatsuriFormsSelectQuestionProps } from \"matsuri-forms-sdk\";\n\nexport const SelectQuestion = (props: MatsuriFormsSelectQuestionProps) => {\n return (\n <div\n style={{\n display: \"flex\",\n gap: 16,\n }}\n >\n {props.options.map((option) => {\n return (\n <Checkbox\n defaultChecked\n type=\"radio\"\n name={props.name}\n value={option.value}\n key={option.value}\n >\n {option.label}\n </Checkbox>\n );\n })}\n </div>\n );\n};\n","import { StorageClient } from \"./lib/client\";\n\nclass M2mStorageClient extends StorageClient {}\n\nexport type { M2mStorageClient };\n\nconst context: {\n storage?: M2mStorageClient;\n} = {};\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 = context.storage;\n if (storage) {\n globalThis.clearTimeout(rejectTimer);\n resolve(storage);\n }\n\n const timer = globalThis.setInterval(() => {\n const storage = context.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 M2M_STORAGE_HUB_URL = \"https://hub.m2msystems.cloud/\";\n\nconst M2M_STORAGE_HUB_URL_DEV =\n \"https://m2m-components-storage-hub-dev.netlify.app/\";\n\nconst initStorageClient = (options?: {\n env?: \"development\" | \"production\";\n}) => {\n if (context.storage) {\n throw new Error(\n \"M2mStorageClient already initialized. Do not call m2mStorageClient.init multiple times.\",\n );\n }\n const storage = new M2mStorageClient(\n options?.env === \"production\"\n ? M2M_STORAGE_HUB_URL\n : M2M_STORAGE_HUB_URL_DEV,\n );\n context.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 || 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 { 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","import { MenuBaseElement, MenuBaseElementProps } from \"./MenuBaseElement\";\nimport { customElement } from \"lit/decorators.js\";\nimport { getDomains } from \"./domains\";\nimport { html } from \"lit\";\nimport { ref } from \"lit/directives/ref.js\";\n\nexport type M2MAppsMenuProps = MenuBaseElementProps;\n\n@customElement(\"m2m-apps-menu\")\nexport class M2MAppsMenu extends MenuBaseElement {\n render() {\n const domains = getDomains();\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 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=${!this.expanded}\n class=\"navigation-drawer\"\n >\n <li>\n <span>m2m Series</span>\n <ul>\n <li><a href=\"${domains.core}\">Core 施設管理</a></li>\n <li><a href=\"${domains.checkin}\">Checkin ゲストチェックイン</a></li>\n <li><a href=\"${domains.systems}\">Systems Airbnb連携</a></li>\n <li><a href=\"${domains.cleaning}\">Cleaning 清掃管理</a></li>\n <li><a href=\"${domains.inspection}\">Inspection 内見チェック</a></li>\n <li><a href=\"${domains.users}\">Users アカウント管理</a></li>\n </ul>\n </li>\n <li>\n <a href=\"${domains.sumyca}\">Sumyca マンスリープラットフォーム</a>\n </li>\n ${additionalItems}\n </ul>\n </nav>`;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n \"m2m-apps-menu\": M2MAppsMenu;\n }\n}\n","import { MenuBaseElement, MenuBaseElementProps } from \"./MenuBaseElement\";\nimport { customElement } from \"lit/decorators.js\";\nimport { getDomains } from \"./domains\";\nimport { html } from \"lit\";\nimport { m2mAuthTokenApi } from \"./storage/client\";\nimport { ref } from \"lit/directives/ref.js\";\n\nexport type M2MUserMenuProps = MenuBaseElementProps;\n\n@customElement(\"m2m-user-menu\")\nexport class M2MUserMenu extends MenuBaseElement {\n handleLogout = () => {\n void m2mAuthTokenApi.clear();\n window.location.reload();\n };\n\n render() {\n const domains = getDomains();\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 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=${!this.expanded}\n class=\"navigation-drawer\"\n >\n <li><a href=\"${domains.users}\">アカウント情報</a></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","import { Subscription } from \"./domain\";\nimport { fetcher } from \"matsuri-hooks\";\nimport { m2mNotifications_v1 } from \"../endpoints/m2m-notifications.v1\";\n\nexport const requestUpdateNotificationStatusToRead = async (\n token: string,\n id: string,\n) => {\n await fetcher(\n m2mNotifications_v1.updateNotificationStatus({\n id,\n }),\n {\n method: \"PUT\",\n token,\n body: JSON.stringify({ status: \"read\" }),\n },\n );\n};\n\nexport const requestSubscribe = async (\n token: string,\n serviceId: string,\n input: Pick<Subscription, \"notificationType\" | \"resourceSubscription\">,\n) => {\n const { error } = await fetcher(m2mNotifications_v1.saveSubscription(), {\n method: \"POST\",\n token,\n body: JSON.stringify({\n ...input,\n serviceId,\n status: \"subscribed\",\n }),\n });\n if (error) {\n console.error(error);\n }\n};\n\nexport const requestUnSubscribe = async (\n token: string,\n serviceId: string,\n input: Pick<Subscription, \"notificationType\" | \"resourceSubscription\">,\n) => {\n const { error } = await fetcher(m2mNotifications_v1.saveSubscription(), {\n method: \"POST\",\n token,\n body: JSON.stringify({\n ...input,\n serviceId,\n status: \"denied\",\n }),\n });\n if (error) {\n console.error(error);\n }\n};\n","import React, { createContext, useMemo } from \"react\";\n\ninterface ServiceIdContextState {\n serviceId: string;\n}\n\nconst ServiceIdContext = createContext<ServiceIdContextState | undefined>(\n undefined,\n);\n\nexport const ServiceIdProvider = ({\n serviceId,\n children,\n}: {\n serviceId: string;\n children: React.ReactNode;\n}) => {\n const state = useMemo(() => ({ serviceId }), [serviceId]);\n\n return (\n <ServiceIdContext.Provider value={state}>\n {children}\n </ServiceIdContext.Provider>\n );\n};\n\nexport const useServiceId = () => {\n const context = React.useContext(ServiceIdContext);\n if (context === undefined) {\n throw new Error(\"useServiceId must be used within a ServiceIdProvider\");\n }\n return context.serviceId;\n};\n","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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,IAAM,aAAa,MAAM;AAC9B,SAAO,WAAW,uBAAuB,eACrC;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,SAAS;AAAA,EACX,IACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,SAAS;AAAA,EACX;AACN;;;ACpBA,IAAAA,qBAQO;AAEP,+BAKO;;;ACdP,wBAAkC;AAM9B;;;ADUJ,mBAAuE;;;AEjBvE,IAAAC,qBAAyB;AAaf,IAAAC,sBAAA;;;AFOV,sBAA6B;AAmCzB,IAAAC,sBAAA;AA8HgB,IAAAC,gBAAA;AAvJpB,IAAM,gBAAgB,CAAK,SAAe;AAExC,SAAS,KAAa,UAAW,KAAa,UAAU;AAC1D;AACA,IAAM,eAAe,cAAc,gBAAAC,OAAgB;AAgBnD,IAAM,0BAAsB,4BAAwC,CAAC,CAAC;;;AG5CtE,IAAM,UAEF,CAAC;AAOL,IAAM,aAAa,OAAO,UAAU,QAAS;AAC3C,QAAM,UAAU,MAAM,IAAI,QAA0B,CAAC,SAAS,WAAW;AACvE,UAAM,cAAc,WAAW,WAAW,WAAY;AACpD;AAAA,QACE,IAAI;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAAG,OAAO;AAEV,UAAMC,WAAU,QAAQ;AACxB,QAAIA,UAAS;AACX,iBAAW,aAAa,WAAW;AACnC,cAAQA,QAAO;AAAA,IACjB;AAEA,UAAM,QAAQ,WAAW,YAAY,MAAM;AACzC,YAAMA,WAAU,QAAQ;AACxB,UAAIA,UAAS;AACX,mBAAW,aAAa,WAAW;AACnC,mBAAW,cAAc,KAAK;AAC9B,gBAAQA,QAAO;AAAA,MACjB;AAAA,IACF,GAAG,GAAG;AAAA,EACR,CAAC;AAED,QAAM,QAAQ,UAAU;AAExB,SAAO;AACT;AA4BO,IAAM,qBAAqB;AAElC,IAAM,oBAAoB,MAAM;AAC9B,SAAO,WAAW,aAAa,QAAQ,kBAAkB;AAC3D;AAEA,IAAM,eAAe,YAAY;AAC/B,MAAI;AACF,UAAM,UAAU,MAAM,WAAW;AACjC,UAAM,YAAa,MAAM,QAAQ,IAAI,kBAAkB;AACvD,WAAO,aAAa,kBAAkB;AAAA,EACxC,SAAS,OAAO;AACd,YAAQ,KAAK,KAAK;AAClB,WAAO,kBAAkB;AAAA,EAC3B;AACF;AAEA,IAAM,eAAe,OAAO,UAAkB;AAC5C,aAAW,aAAa,QAAQ,oBAAoB,KAAK;AACzD,MAAI;AACF,UAAM,UAAU,MAAM,WAAW;AACjC,UAAM,QAAQ,IAAI,oBAAoB,KAAK;AAAA,EAC7C,SAAS,OAAO;AACd,YAAQ,KAAK,KAAK;AAAA,EACpB;AACF;AAEA,IAAM,iBAAiB,YAAY;AACjC,aAAW,aAAa,WAAW,kBAAkB;AACrD,MAAI;AACF,UAAM,UAAU,MAAM,WAAW;AACjC,UAAM,QAAQ,IAAI,kBAAkB;AAAA,EACtC,SAAS,OAAO;AACd,YAAQ,KAAK,KAAK;AAAA,EACpB;AACF;AAEO,IAAM,kBAAkB;AAAA,EAC7B,KAAK;AAAA,EACL,UAAU;AAAA,EACV,KAAK;AAAA,EACL,OAAO;AACT;;;AClHA,iBAAgC;AAChC,iBAA+B;AAC/B,wBAAyB;AAYlB,IAAM,kBAAN,cAA8B,sBAAW;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,uBAAe,sBAAU;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,MAJC,4BAAS;AAAA,IACR,MAAM;AAAA,IACN,WAAW;AAAA,EACb,CAAC;AAAA,GAnHU,gBAoHX;AAGA;AAAA,MADC,4BAAS;AAAA,GAtHC,gBAuHX;;;ACpIF,IAAAC,qBAA8B;AAE9B,IAAAC,cAAqB;AACrB,IAAAC,cAAoB;AAKb,IAAM,cAAN,cAA0B,gBAAgB;AAAA,EAC/C,SAAS;AAVX;AAWI,UAAM,UAAU,WAAW;AAC3B,UAAM,mBAAkB,UAAK,mBAAL,mBAAqB,IAAI,CAAC,SAAS;AACzD,aAAO;AAAA;AAAA,qBAEQ,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA;AAAA;AAAA,IAGzC;AACA,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,CAAC,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAMT,QAAQ,IAAI;AAAA,2BACZ,QAAQ,OAAO;AAAA,2BACf,QAAQ,OAAO;AAAA,2BACf,QAAQ,QAAQ;AAAA,2BAChB,QAAQ,UAAU;AAAA,2BAClB,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA,qBAInB,QAAQ,MAAM;AAAA;AAAA,UAEzB,eAAe;AAAA;AAAA;AAAA,EAGvB;AACF;AArDa,cAAN;AAAA,MADN,kCAAc,eAAe;AAAA,GACjB;;;ACRb,IAAAC,qBAA8B;AAE9B,IAAAC,cAAqB;AAErB,IAAAC,cAAoB;AAKb,IAAM,cAAN,cAA0B,gBAAgB;AAAA,EAA1C;AAAA;AACL,wBAAe,MAAM;AACnB,WAAK,gBAAgB,MAAM;AAC3B,aAAO,SAAS,OAAO;AAAA,IACzB;AAAA;AAAA,EAEA,SAAS;AAhBX;AAiBI,UAAM,UAAU,WAAW;AAC3B,UAAM,mBAAkB,UAAK,mBAAL,mBAAqB,IAAI,CAAC,SAAS;AACzD,aAAO;AAAA;AAAA,qBAEQ,KAAK,IAAI,KAAK,KAAK,KAAK;AAAA;AAAA;AAAA,IAGzC;AACA,WAAO;AAAA;AAAA;AAAA;AAAA;AAAA,wBAKa,KAAK,QAAQ;AAAA,iBACpB,KAAK,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,cAU9B,iBAAI,KAAK,OAAO,CAAC;AAAA;AAAA,sBAEL,CAAC,KAAK,QAAQ;AAAA;AAAA;AAAA,uBAGb,QAAQ,KAAK;AAAA,qBACf,KAAK,YAAY;AAAA;AAAA;AAAA,UAG5B,eAAe;AAAA;AAAA;AAAA,EAGvB;AACF;AA5Ca,cAAN;AAAA,MADN,kCAAc,eAAe;AAAA,GACjB;;;ACTb,2BAAwB;;;ACDxB,IAAAC,gBAA8C;AAoB1C,IAAAC,sBAAA;AAdJ,IAAM,uBAAmB;AAAA,EACvB;AACF;;;ACPA,IAAAC,gBAKO;AAEP,IAAAC,wBAA6B;AAC7B,IAAAC,gBAAwB;AA0ElB,IAAAC,sBAAA;AAvEN,IAAM,oCAAgC,6BAQpC,MAAS;AAEX,IAAM,2BAAuB,6BAG3B,MAAS;","names":["import_matsuri_ui","import_matsuri_ui","import_jsx_runtime","import_jsx_runtime","import_react","FeedbackIconBase","storage","import_decorators","import_lit","import_ref","import_decorators","import_lit","import_ref","import_react","import_jsx_runtime","import_react","import_matsuri_hooks","import_react","import_jsx_runtime"]}
package/index.mjs CHANGED
@@ -1,16 +1,16 @@
1
1
  'use client'
2
2
  import "./chunk-YZIPEODC.mjs";
3
3
  import "./chunk-GHZTTY3R.mjs";
4
- import "./chunk-I2GUBCRE.mjs";
4
+ import "./chunk-RDG67OF7.mjs";
5
5
  import "./chunk-IH72EYIB.mjs";
6
6
  import "./chunk-IOZIVEOV.mjs";
7
- import "./chunk-TR4BCO6J.mjs";
8
- import "./chunk-UXYQOQLC.mjs";
7
+ import "./chunk-V65OEKRZ.mjs";
8
+ import "./chunk-ARKJVMNQ.mjs";
9
9
  import "./chunk-JTZEHJPB.mjs";
10
10
  import "./chunk-YUHXVW6K.mjs";
11
11
  import "./chunk-M2D55I4L.mjs";
12
- import "./chunk-IYTHV2XJ.mjs";
13
- import "./chunk-FDRD4YS4.mjs";
12
+ import "./chunk-SXIYWN76.mjs";
13
+ import "./chunk-CTGSJWXT.mjs";
14
14
  import "./chunk-CR2KP7D3.mjs";
15
15
  import "./chunk-5N273IY3.mjs";
16
16
  import "./chunk-CC5RJYL7.mjs";
@@ -1,10 +1,10 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { Notification, SubscriptionStatus } from './domain.mjs';
3
3
  import { PropsWithChildren } from 'react';
4
4
 
5
5
  declare const NotificationsProvider: ({ token, children, }: PropsWithChildren<{
6
6
  token: string;
7
- }>) => react_jsx_runtime.JSX.Element;
7
+ }>) => _emotion_react_jsx_runtime.JSX.Element;
8
8
  declare const useNotifications: () => {
9
9
  notifications: Notification[];
10
10
  isAllRead: boolean;
@@ -1,10 +1,10 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { Notification, SubscriptionStatus } from './domain.js';
3
3
  import { PropsWithChildren } from 'react';
4
4
 
5
5
  declare const NotificationsProvider: ({ token, children, }: PropsWithChildren<{
6
6
  token: string;
7
- }>) => react_jsx_runtime.JSX.Element;
7
+ }>) => _emotion_react_jsx_runtime.JSX.Element;
8
8
  declare const useNotifications: () => {
9
9
  notifications: Notification[];
10
10
  isAllRead: boolean;
@@ -130,7 +130,7 @@ var import_react3 = require("react");
130
130
 
131
131
  // src/notification/ServiceIdProvider.tsx
132
132
  var import_react = __toESM(require("react"));
133
- var import_jsx_runtime = require("react/jsx-runtime");
133
+ var import_jsx_runtime = require("@emotion/react/jsx-runtime");
134
134
  var ServiceIdContext = (0, import_react.createContext)(
135
135
  void 0
136
136
  );
@@ -143,7 +143,7 @@ var useServiceId = () => {
143
143
  };
144
144
 
145
145
  // src/notification/NotificationProvider.tsx
146
- var import_jsx_runtime2 = require("react/jsx-runtime");
146
+ var import_jsx_runtime2 = require("@emotion/react/jsx-runtime");
147
147
  var NotificationPermissionContext = (0, import_react2.createContext)(void 0);
148
148
  var NotificationsContext = (0, import_react2.createContext)(void 0);
149
149
  var NotificationsProvider = ({
@@ -3,8 +3,8 @@ import {
3
3
  NotificationsProvider,
4
4
  useNotificationPermission,
5
5
  useNotifications
6
- } from "../chunk-TR4BCO6J.mjs";
7
- import "../chunk-UXYQOQLC.mjs";
6
+ } from "../chunk-V65OEKRZ.mjs";
7
+ import "../chunk-ARKJVMNQ.mjs";
8
8
  import "../chunk-M2D55I4L.mjs";
9
9
  import "../chunk-QH5I6YL2.mjs";
10
10
  export {
@@ -1,10 +1,10 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import React from 'react';
3
3
 
4
4
  declare const ServiceIdProvider: ({ serviceId, children, }: {
5
5
  serviceId: string;
6
6
  children: React.ReactNode;
7
- }) => react_jsx_runtime.JSX.Element;
7
+ }) => _emotion_react_jsx_runtime.JSX.Element;
8
8
  declare const useServiceId: () => string;
9
9
 
10
10
  export { ServiceIdProvider, useServiceId };
@@ -1,10 +1,10 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import React from 'react';
3
3
 
4
4
  declare const ServiceIdProvider: ({ serviceId, children, }: {
5
5
  serviceId: string;
6
6
  children: React.ReactNode;
7
- }) => react_jsx_runtime.JSX.Element;
7
+ }) => _emotion_react_jsx_runtime.JSX.Element;
8
8
  declare const useServiceId: () => string;
9
9
 
10
10
  export { ServiceIdProvider, useServiceId };
@@ -36,7 +36,7 @@ __export(ServiceIdProvider_exports, {
36
36
  });
37
37
  module.exports = __toCommonJS(ServiceIdProvider_exports);
38
38
  var import_react = __toESM(require("react"));
39
- var import_jsx_runtime = require("react/jsx-runtime");
39
+ var import_jsx_runtime = require("@emotion/react/jsx-runtime");
40
40
  var ServiceIdContext = (0, import_react.createContext)(
41
41
  void 0
42
42
  );
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  ServiceIdProvider,
4
4
  useServiceId
5
- } from "../chunk-UXYQOQLC.mjs";
5
+ } from "../chunk-ARKJVMNQ.mjs";
6
6
  import "../chunk-QH5I6YL2.mjs";
7
7
  export {
8
8
  ServiceIdProvider,
@@ -2,5 +2,5 @@ export { Notification, ResourceSubscription, Subscription, SubscriptionStatus }
2
2
  export { requestSubscribe, requestUnSubscribe, requestUpdateNotificationStatusToRead } from './api.mjs';
3
3
  export { ServiceIdProvider, useServiceId } from './ServiceIdProvider.mjs';
4
4
  export { NotificationsProvider, useNotificationPermission, useNotifications } from './NotificationProvider.mjs';
5
- import 'react/jsx-runtime';
5
+ import '@emotion/react/jsx-runtime';
6
6
  import 'react';
@@ -2,5 +2,5 @@ export { Notification, ResourceSubscription, Subscription, SubscriptionStatus }
2
2
  export { requestSubscribe, requestUnSubscribe, requestUpdateNotificationStatusToRead } from './api.js';
3
3
  export { ServiceIdProvider, useServiceId } from './ServiceIdProvider.js';
4
4
  export { NotificationsProvider, useNotificationPermission, useNotifications } from './NotificationProvider.js';
5
- import 'react/jsx-runtime';
5
+ import '@emotion/react/jsx-runtime';
6
6
  import 'react';
@@ -175,7 +175,7 @@ var requestUnSubscribe = async (token, serviceId, input) => {
175
175
 
176
176
  // src/notification/ServiceIdProvider.tsx
177
177
  var import_react = __toESM(require("react"));
178
- var import_jsx_runtime = require("react/jsx-runtime");
178
+ var import_jsx_runtime = require("@emotion/react/jsx-runtime");
179
179
  var ServiceIdContext = (0, import_react.createContext)(
180
180
  void 0
181
181
  );
@@ -198,7 +198,7 @@ var useServiceId = () => {
198
198
  var import_react2 = require("react");
199
199
  var import_matsuri_hooks2 = require("matsuri-hooks");
200
200
  var import_react3 = require("react");
201
- var import_jsx_runtime2 = require("react/jsx-runtime");
201
+ var import_jsx_runtime2 = require("@emotion/react/jsx-runtime");
202
202
  var NotificationPermissionContext = (0, import_react2.createContext)(void 0);
203
203
  var NotificationsContext = (0, import_react2.createContext)(void 0);
204
204
  var NotificationsProvider = ({
@@ -4,11 +4,11 @@ import {
4
4
  NotificationsProvider,
5
5
  useNotificationPermission,
6
6
  useNotifications
7
- } from "../chunk-TR4BCO6J.mjs";
7
+ } from "../chunk-V65OEKRZ.mjs";
8
8
  import {
9
9
  ServiceIdProvider,
10
10
  useServiceId
11
- } from "../chunk-UXYQOQLC.mjs";
11
+ } from "../chunk-ARKJVMNQ.mjs";
12
12
  import {
13
13
  requestSubscribe,
14
14
  requestUnSubscribe,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "m2m-components",
3
- "version": "5.0.5-alpha-83ec280.0",
3
+ "version": "5.0.5-alpha-1718877026648-2c95198.0",
4
4
  "main": "index.js",
5
5
  "module": "index.mjs",
6
6
  "typings": "index.d.ts",
@@ -30,6 +30,7 @@
30
30
  },
31
31
  "peerDependencies": {
32
32
  "@datadog/browser-logs": "^5.0.0",
33
+ "@emotion/react": "^11.0.0",
33
34
  "@mui/icons-material": "^5.0.0",
34
35
  "@mui/material": "^5.0.0",
35
36
  "matsuri-hooks": "^0.1.0 || ^2.0.0 || ^3.0.0",
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { LoginInput } from './api/login.mjs';
3
3
  import React from 'react';
4
4
  import 'matsuri-hooks';
@@ -17,7 +17,7 @@ interface AuthenticationState {
17
17
  }
18
18
  declare const M2mAuthenticationProvider: ({ children, }: {
19
19
  children: React.ReactNode;
20
- }) => react_jsx_runtime.JSX.Element;
20
+ }) => _emotion_react_jsx_runtime.JSX.Element;
21
21
  declare const useAuth: () => AuthenticationState;
22
22
 
23
23
  export { M2mAuthenticationProvider, useAuth };
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
1
+ import * as _emotion_react_jsx_runtime from '@emotion/react/jsx-runtime';
2
2
  import { LoginInput } from './api/login.js';
3
3
  import React from 'react';
4
4
  import 'matsuri-hooks';
@@ -17,7 +17,7 @@ interface AuthenticationState {
17
17
  }
18
18
  declare const M2mAuthenticationProvider: ({ children, }: {
19
19
  children: React.ReactNode;
20
- }) => react_jsx_runtime.JSX.Element;
20
+ }) => _emotion_react_jsx_runtime.JSX.Element;
21
21
  declare const useAuth: () => AuthenticationState;
22
22
 
23
23
  export { M2mAuthenticationProvider, useAuth };
@@ -226,7 +226,7 @@ var refreshAuth = async () => {
226
226
 
227
227
  // src/storage/useM2mAuth.tsx
228
228
  var import_react = require("react");
229
- var import_jsx_runtime = require("react/jsx-runtime");
229
+ var import_jsx_runtime = require("@emotion/react/jsx-runtime");
230
230
  var AuthenticationContext = (0, import_react.createContext)(
231
231
  void 0
232
232
  );
@@ -28,7 +28,7 @@ import {
28
28
  useMemo,
29
29
  useState
30
30
  } from "react";
31
- import { jsx } from "react/jsx-runtime";
31
+ import { jsx } from "@emotion/react/jsx-runtime";
32
32
  var AuthenticationContext = createContext(
33
33
  void 0
34
34
  );
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/feedback/index.tsx"],"sourcesContent":["import {\n Button,\n Modal,\n ModalProps,\n Portal,\n Typography,\n useAlert,\n useModal,\n} from \"matsuri-ui\";\nimport { type Logger } from \"@datadog/browser-logs\";\nimport {\n MatsuriFormsQuestion,\n MatsuriFormsQuestionProvider,\n MatsuriFormsTextQuestionProps,\n useMatsuriForms,\n} from \"matsuri-forms-sdk\";\nimport { MultipleTextQuestion } from \"./MultipleTextQuestion\";\nimport { PropsWithChildren, createContext, useContext, useState } from \"react\";\nimport { SelectQuestion } from \"./SelectQuestion\";\nimport { getRandomId } from \"./getRandomId\";\nimport FeedbackIcon from \"@mui/icons-material/Feedback\";\n\nconst getFormId = () => {\n return globalThis.M2M_COMPONENTS_ENV === \"production\"\n ? \"01GWRQ1MRS7PE29XGRETFZ6D7Y\"\n : \"01GTBSYMGPMX91E96P007SXEMH\";\n};\n\ninterface TextQuestionContextValue {\n userId?: string;\n userName?: string;\n serviceName?: string;\n url?: string;\n id?: string;\n}\n\nconst TextQuestionContext = createContext<TextQuestionContextValue>({});\n\nconst TextQuestion = (props: MatsuriFormsTextQuestionProps) => {\n const context = useContext(TextQuestionContext);\n return (\n <input\n value={context[props.title as keyof TextQuestionContextValue]}\n type=\"hidden\"\n name={props.name}\n />\n );\n};\n\ninterface FeedbackProviderModalProps\n extends Partial<ModalProps>,\n FeedbackProviderProps {}\n\nconst FeedbackProviderModal = (props: FeedbackProviderModalProps) => {\n const { questions, submit } = useMatsuriForms(getFormId(), {\n dev: globalThis.M2M_COMPONENTS_ENV !== \"production\",\n });\n\n const { throwAlert } = useAlert();\n\n const [status, setStatus] = useState<\"started\" | \"sending\" | \"completed\">(\n \"started\",\n );\n\n const id = getRandomId();\n\n return (\n <Modal\n backdrop\n width={600}\n maxWidth={600}\n header={<Typography variant=\"h3\">フィードバックを送信</Typography>}\n body={\n status === \"completed\" ? (\n <div\n style={{\n display: \"grid\",\n gap: 32,\n }}\n >\n <Typography>\n レポートを送信しました。ありがとうございます。\n </Typography>\n <Typography color=\"textSecondary\" variant=\"caption\" as=\"p\">\n お送りいただいたフィードバックは、問題の解決とサービスの改善に役立てさせていただきます。\n </Typography>\n <Button\n color=\"primary\"\n variant=\"filled\"\n onClick={() => {\n props.onClose?.();\n }}\n >\n 閉じる\n </Button>\n </div>\n ) : (\n <form\n style={{\n display: \"grid\",\n gap: 24,\n }}\n onSubmit={async (event) => {\n event.preventDefault();\n setStatus(\"sending\");\n const { error } = await submit(event.currentTarget);\n\n /**\n * 以下、対応が行われるまでは取れる値だけ送る\n * https://github.com/matsuri-tech/matsuri-forms-manager-front/issues/265\n */\n const input = {\n id,\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n };\n throwAlert(error, {\n ignoreSuccess: true,\n errorMessage: {\n reason: \"サーバー側のエラーの可能性があります。\",\n action:\n \"しばらく時間を空けて試すか、開発チームへお問い合わせください。\",\n happend: \"フィードバックの送信に失敗しました。\",\n },\n onSuccess: () => {\n props.datadogLogs?.logger?.info?.(\n `Feedback: ${id} by ${props.userId}`,\n {\n input,\n },\n );\n\n window.setTimeout(() => {\n setStatus(\"completed\");\n }, 2000);\n },\n onError: () => {\n props.datadogLogs?.logger?.error?.(\n `Failed Feedback: ${input.id} by ${input.userId}`,\n { input, error },\n );\n\n window.setTimeout(() => {\n setStatus(\"started\");\n }, 2000);\n },\n });\n }}\n >\n <TextQuestionContext.Provider\n value={{\n userId: props.userId,\n userName: props.userName,\n serviceName: props.serviceName,\n url: window.location.href,\n id,\n }}\n >\n <MatsuriFormsQuestionProvider\n renderSelect={SelectQuestion}\n renderMultilineText={MultipleTextQuestion}\n renderText={TextQuestion}\n >\n {questions.map((question) => {\n return (\n <MatsuriFormsQuestion {...question} key={question.id} />\n );\n })}\n </MatsuriFormsQuestionProvider>\n </TextQuestionContext.Provider>\n <div>\n <Button\n type=\"submit\"\n color=\"primary\"\n variant=\"filled\"\n disabled={status === \"sending\"}\n fullWidth\n >\n 送信\n </Button>\n <Typography\n variant=\"caption\"\n style={{\n float: \"right\",\n }}\n >\n {status === \"sending\" ? \"送信中...\" : undefined}\n &nbsp;\n </Typography>\n </div>\n </form>\n )\n }\n {...props}\n />\n );\n};\n\ninterface FeedbackProviderProps {\n userId?: string;\n userName?: string;\n serviceName: string;\n datadogLogs?: {\n logger: Logger;\n };\n}\n\nexport const FeedbackProvider = ({\n children,\n ...modalProps\n}: PropsWithChildren<FeedbackProviderProps>) => {\n const [open] = useModal(FeedbackProviderModal, {\n enableClickOutside: true,\n disableClose: false,\n });\n return (\n <div>\n {children}\n <Portal>\n <Button\n style={{\n position: \"fixed\",\n bottom: 16,\n right: 16,\n }}\n onClick={() => {\n open(modalProps);\n }}\n type=\"button\"\n icon={<FeedbackIcon />}\n color=\"secondary\"\n variant=\"filled\"\n rounded\n />\n </Portal>\n </div>\n );\n};\n"],"mappings":"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","names":[]}