galadrim-feedback 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +2 -11
- package/dist/index.es.js +2 -11
- package/dist/src/index.css +1 -1
- package/package.json +7 -1
- package/eslint.config.js +0 -28
- package/rollup.config.js +0 -40
- package/src/App.tsx +0 -16
- package/src/components/buttons/IconButton.tsx +0 -27
- package/src/components/buttons/PlusButton.tsx +0 -20
- package/src/components/feedback/FeedbackItem.tsx +0 -89
- package/src/components/misc/Avatar.tsx +0 -3
- package/src/components/misc/Modal.tsx +0 -43
- package/src/index.css +0 -7
- package/src/pages/FeedbacksCanvas.tsx +0 -38
- package/src/pages/Overlay.tsx +0 -26
- package/src/pages/Root.tsx +0 -128
- package/src/services/api.ts +0 -22
- package/src/services/feedback.ts +0 -62
- package/src/types/types.d.ts +0 -16
- package/tailwind.config.js +0 -46
- package/tsconfig.json +0 -18
package/dist/index.cjs.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var reactQuery = require('@tanstack/react-query');
|
|
5
5
|
var React = require('react');
|
|
6
|
-
var axios = require('axios');
|
|
7
6
|
var reactDom = require('react-dom');
|
|
7
|
+
var axios = require('axios');
|
|
8
8
|
|
|
9
9
|
const api = axios.create({
|
|
10
10
|
baseURL: "http://localhost:3000",
|
|
@@ -112,16 +112,13 @@ const FeedbackItem = ({ feedback }) => {
|
|
|
112
112
|
}, children: [jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("p", { style: { fontSize: "16px", fontWeight: "bold" }, children: "Feedback" }), jsxRuntime.jsxs("p", { style: { fontSize: "14px" }, children: ["Created at: ", feedback.createdAt.toLocaleString()] }), jsxRuntime.jsx("a", { href: feedback.elementId, target: "_blank", children: "Go to component" })] }), jsxRuntime.jsx("button", { onClick: handleDeleteFeedback, children: "Delete" })] }), jsxRuntime.jsx("p", { style: { fontSize: "14px" }, children: feedback.comment })] }), document.body);
|
|
113
113
|
};
|
|
114
114
|
|
|
115
|
-
new reactQuery.QueryClient();
|
|
116
115
|
function Root() {
|
|
117
116
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
118
117
|
const { data: feedbacks } = useFeedbacks();
|
|
119
118
|
console.log("feedbacks 1 : ", feedbacks);
|
|
120
|
-
const [creatingFeedback, setCreatingFeedback] = React.useState(false);
|
|
121
119
|
const { mutate: createFeedback } = useCreateFeedback();
|
|
122
120
|
React.useEffect(() => {
|
|
123
121
|
if (isOpen) {
|
|
124
|
-
console.log("Opening feedbacks canvas");
|
|
125
122
|
window.addEventListener("keydown", handleKeyPress);
|
|
126
123
|
return () => {
|
|
127
124
|
window.removeEventListener("keypress", handleKeyPress);
|
|
@@ -129,13 +126,11 @@ function Root() {
|
|
|
129
126
|
}
|
|
130
127
|
}, [isOpen]);
|
|
131
128
|
const handleKeyPress = (event) => {
|
|
132
|
-
console.log(event.key);
|
|
133
129
|
if (event.key === "Escape") {
|
|
134
130
|
setIsOpen(false);
|
|
135
131
|
}
|
|
136
132
|
};
|
|
137
133
|
const handleClick = (e) => {
|
|
138
|
-
console.log("click");
|
|
139
134
|
e.stopPropagation();
|
|
140
135
|
e.preventDefault();
|
|
141
136
|
const node = e.target;
|
|
@@ -149,8 +144,6 @@ function Root() {
|
|
|
149
144
|
const newFeedback = {
|
|
150
145
|
x,
|
|
151
146
|
y,
|
|
152
|
-
screenWidth: window.innerWidth,
|
|
153
|
-
screenHeight: window.innerHeight,
|
|
154
147
|
comment: "test",
|
|
155
148
|
path: window.location.pathname,
|
|
156
149
|
elementId,
|
|
@@ -160,12 +153,10 @@ function Root() {
|
|
|
160
153
|
createFeedback(newFeedback);
|
|
161
154
|
document.body.classList.remove("comment-cursor");
|
|
162
155
|
document.removeEventListener("click", handleClick, true);
|
|
163
|
-
setCreatingFeedback(false);
|
|
164
156
|
setIsOpen(true);
|
|
165
157
|
};
|
|
166
158
|
const handleCreateFeedback = (e) => {
|
|
167
159
|
e.stopPropagation();
|
|
168
|
-
setCreatingFeedback(true);
|
|
169
160
|
document.body.classList.add("comment-cursor");
|
|
170
161
|
document.addEventListener("click", handleClick, true);
|
|
171
162
|
};
|
|
@@ -202,4 +193,4 @@ function App() {
|
|
|
202
193
|
}
|
|
203
194
|
|
|
204
195
|
module.exports = App;
|
|
205
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvc2VydmljZXMvYXBpLnRzIiwiLi4vc3JjL3NlcnZpY2VzL2ZlZWRiYWNrLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZmVlZGJhY2svRmVlZGJhY2tJdGVtLnRzeCIsIi4uL3NyYy9wYWdlcy9Sb290LnRzeCIsIi4uL3NyYy9BcHAudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcblxuY29uc3QgYXBpID0gYXhpb3MuY3JlYXRlKHtcbiAgYmFzZVVSTDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIixcbn0pO1xuXG5hcGkuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxuICBhc3luYyAoY29uZmlnKSA9PiB7XG4gICAgLy8gY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImRhc2hib2FyZEdhbGFkcmltQXV0aFRva2VuXCIpO1xuICAgIC8vIGlmICh0b2tlbiAmJiBjb25maWcuaGVhZGVycykge1xuICAgIC8vICAgY29uZmlnLmhlYWRlcnNbXCJ4LWRhc2hib2FyZC10b2tlblwiXSA9IHRva2VuO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICBkZWxldGUgYXBpLmRlZmF1bHRzLmhlYWRlcnMuY29tbW9uLkF1dGhvcml6YXRpb247XG4gICAgLy8gfVxuICAgIHJldHVybiBjb25maWc7XG4gIH0sXG4gIChlcnJvcikgPT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IGFwaTtcbiIsImltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeSwgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgYXBpIGZyb20gXCIuL2FwaVwiO1xuaW1wb3J0IHsgRmVlZGJhY2ssIEZlZWRiYWNrUGF5bG9hZCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgZmV0Y2hGZWVkYmFja3MgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLmdldDxGZWVkYmFja1tdPihcIi9mZWVkYmFja1wiKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRmVlZGJhY2sgPSBhc3luYyAoZmVlZGJhY2s6IEZlZWRiYWNrUGF5bG9hZCkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5wb3N0KFwiL2ZlZWRiYWNrXCIsIGZlZWRiYWNrKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlRmVlZGJhY2sgPSBhc3luYyAoZmVlZGJhY2s6IEZlZWRiYWNrUGF5bG9hZCkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5wdXQoXCIvZmVlZGJhY2tcIiwgZmVlZGJhY2spO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZGVsZXRlKGAvZmVlZGJhY2svJHtmZWVkYmFjay5pZH1gKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlRmVlZGJhY2tzID0gKCkgPT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBbXCJmZWVkYmFja3NcIl0sXG4gICAgcXVlcnlGbjogZmV0Y2hGZWVkYmFja3MsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUNyZWF0ZUZlZWRiYWNrID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogY3JlYXRlRmVlZGJhY2ssXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcIkZlZWRiYWNrIGNyZWF0ZWRcIik7XG5cbiAgICAgIHJldHVybiBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBbXCJmZWVkYmFja3NcIl0gfSk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlVXBkYXRlRmVlZGJhY2sgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiB1cGRhdGVGZWVkYmFjayxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHJldHVybiBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBbXCJmZWVkYmFja3NcIl0gfSk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlRGVsZXRlRmVlZGJhY2sgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBkZWxldGVGZWVkYmFjayxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHJldHVybiBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBbXCJmZWVkYmFja3NcIl0gfSk7XG4gICAgfSxcbiAgfSk7XG59O1xuIiwiaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdXNlRGVsZXRlRmVlZGJhY2sgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZmVlZGJhY2tcIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrSXRlbSA9ICh7IGZlZWRiYWNrIH06IHsgZmVlZGJhY2s6IEZlZWRiYWNrIH0pID0+IHtcbiAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCB7IG11dGF0ZTogZGVsZXRlRmVlZGJhY2sgfSA9IHVzZURlbGV0ZUZlZWRiYWNrKCk7XG4gIGNvbnN0IFtwb3NpdGlvbiwgc2V0UG9zaXRpb25dID0gdXNlU3RhdGUoeyB0b3A6IDAsIGxlZnQ6IDAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgIXRhcmdldEVsZW1lbnQuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGFyZ2V0RWxlbWVudC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgc2V0UG9zaXRpb24oe1xuICAgICAgICB0b3A6IGZlZWRiYWNrLnkgKyBkaW1lbnNpb25zLnRvcCArIHdpbmRvdy5zY3JvbGxZLFxuICAgICAgICBsZWZ0OiBmZWVkYmFjay54ICsgZGltZW5zaW9ucy5sZWZ0ICsgd2luZG93LnNjcm9sbFgsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihcbiAgICAgIGBbZGF0YS1pZD1cIiR7ZmVlZGJhY2suZWxlbWVudElkfVwiXWBcbiAgICApO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tmZWVkYmFjay5lbGVtZW50SW5kZXhdO1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVsZW1lbnQpO1xuXG4gICAgICB0YXJnZXRFbGVtZW50LmN1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgaGFuZGxlUmVzaXplKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoYW5kbGVSZXNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoYW5kbGVSZXNpemUpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtmZWVkYmFja10pO1xuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUZlZWRiYWNrID0gKCkgPT4ge1xuICAgIGRlbGV0ZUZlZWRiYWNrKGZlZWRiYWNrKTtcbiAgfTtcblxuICAvLyBJZiB3ZSBoYXZlbid0IGZvdW5kIGEgbWF0Y2hpbmcgRE9NIG5vZGUsIGRvbid0IHJlbmRlciBhbnl0aGluZ1xuICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgIXRhcmdldEVsZW1lbnQuY3VycmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc29sZS5sb2coXCJyZW5kcnJcIiwgcG9zaXRpb24pO1xuXG4gIC8vIFJlbmRlciB0aGlzIGNvbXBvbmVudCBpbnNpZGUgYHRhcmdldEVsZW1lbnRgIHVzaW5nIGEgUG9ydGFsXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgdG9wOiBwb3NpdGlvbi50b3AsXG4gICAgICAgIGxlZnQ6IHBvc2l0aW9uLmxlZnQsXG4gICAgICAgIHdpZHRoOiBcIjIwMHB4XCIsXG4gICAgICAgIGhlaWdodDogXCIxMDBweFwiLFxuICAgICAgICBib3JkZXI6IFwiMXB4IHNvbGlkIGJsYWNrXCIsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLFxuICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6IFwiMTZweFwiLCBmb250V2VpZ2h0OiBcImJvbGRcIiB9fT5GZWVkYmFjazwvcD5cbiAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIxNHB4XCIgfX0+XG4gICAgICAgICAgICBDcmVhdGVkIGF0OiB7ZmVlZGJhY2suY3JlYXRlZEF0LnRvTG9jYWxlU3RyaW5nKCl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxhIGhyZWY9e2ZlZWRiYWNrLmVsZW1lbnRJZH0gdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICBHbyB0byBjb21wb25lbnRcbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZUZlZWRiYWNrfT5EZWxldGU8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6IFwiMTRweFwiIH19PntmZWVkYmFjay5jb21tZW50fTwvcD5cbiAgICA8L2Rpdj4sXG4gICAgZG9jdW1lbnQuYm9keVxuICApO1xufTtcbiIsImltcG9ydCB7IFF1ZXJ5Q2xpZW50IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcbmltcG9ydCB7IE92ZXJsYXkgfSBmcm9tIFwiLi9PdmVybGF5XCI7XG5pbXBvcnQgeyB1c2VDcmVhdGVGZWVkYmFjaywgdXNlRmVlZGJhY2tzIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2ZlZWRiYWNrXCI7XG5pbXBvcnQgeyBGZWVkYmFja1BheWxvYWQgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IEZlZWRiYWNrSXRlbSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2ZlZWRiYWNrL0ZlZWRiYWNrSXRlbVwiO1xuXG5jb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuXG5mdW5jdGlvbiBSb290KCkge1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCB7IGRhdGE6IGZlZWRiYWNrcyB9ID0gdXNlRmVlZGJhY2tzKCk7XG5cbiAgY29uc29sZS5sb2coXCJmZWVkYmFja3MgMSA6IFwiLCBmZWVkYmFja3MpO1xuXG4gIGNvbnN0IFtjcmVhdGluZ0ZlZWRiYWNrLCBzZXRDcmVhdGluZ0ZlZWRiYWNrXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCB7IG11dGF0ZTogY3JlYXRlRmVlZGJhY2sgfSA9IHVzZUNyZWF0ZUZlZWRiYWNrKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIk9wZW5pbmcgZmVlZGJhY2tzIGNhbnZhc1wiKTtcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleVByZXNzKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgaGFuZGxlS2V5UHJlc3MpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtpc09wZW5dKTtcblxuICBjb25zdCBoYW5kbGVLZXlQcmVzcyA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGV2ZW50LmtleSk7XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBzZXRJc09wZW4oZmFsc2UpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChlOiBhbnkpID0+IHtcbiAgICBjb25zb2xlLmxvZyhcImNsaWNrXCIpO1xuXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3Qgbm9kZSA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBjb25zdCBlbGVtZW50SWQgPSBub2RlPy5kYXRhc2V0LmlkIHx8IFwiXCI7XG4gICAgY29uc3QgYWxsRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihcbiAgICAgIGBbZGF0YS1pZD1cIiR7ZWxlbWVudElkfVwiXWBcbiAgICApO1xuXG4gICAgY29uc3QgYXJyQWxsRWxlbWVudHMgPSBBcnJheS5mcm9tKGFsbEVsZW1lbnRzKTtcblxuICAgIGNvbnN0IGVsZW1lbnRJbmRleCA9IGFyckFsbEVsZW1lbnRzLmluZGV4T2Yobm9kZSBhcyBIVE1MRWxlbWVudCk7XG5cbiAgICBjb25zdCB4ID0gZS5vZmZzZXRYO1xuICAgIGNvbnN0IHkgPSBlLm9mZnNldFk7XG4gICAgY29uc29sZS5sb2coZSk7XG4gICAgY29uc3QgbmV3RmVlZGJhY2s6IEZlZWRiYWNrUGF5bG9hZCA9IHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgc2NyZWVuV2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLFxuICAgICAgc2NyZWVuSGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICBjb21tZW50OiBcInRlc3RcIixcbiAgICAgIHBhdGg6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgIGVsZW1lbnRJZCxcbiAgICAgIGVsZW1lbnRJbmRleCxcbiAgICB9O1xuICAgIGNvbnNvbGUubG9nKG5ld0ZlZWRiYWNrKTtcbiAgICBjcmVhdGVGZWVkYmFjayhuZXdGZWVkYmFjayk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiY29tbWVudC1jdXJzb3JcIik7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNsaWNrLCB0cnVlKTtcbiAgICBzZXRDcmVhdGluZ0ZlZWRiYWNrKGZhbHNlKTtcbiAgICBzZXRJc09wZW4odHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ3JlYXRlRmVlZGJhY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHNldENyZWF0aW5nRmVlZGJhY2sodHJ1ZSk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29tbWVudC1jdXJzb3JcIik7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNsaWNrLCB0cnVlKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICB0b3A6IFwiY2FsYygxMDB2aCAtIDYycHgpXCIsXG4gICAgICAgICAgbGVmdDogXCJjYWxjKDEwMHZ3IC0gMTI0cHgpXCIsXG4gICAgICAgICAgd2lkdGg6IFwiMTAwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTBweFwiLFxuICAgICAgICAgIHpJbmRleDogMTAwMDAwMCxcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzAwODVGRlwiLFxuICAgICAgICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgICAgICB9fVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc09wZW4oIWlzT3Blbil9XG4gICAgICA+XG4gICAgICAgIFNob3cgRmVlZGJhY2tcbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgdG9wOiBcImNhbGMoMTAwdmggLSAxMjJweClcIixcbiAgICAgICAgICBsZWZ0OiBcImNhbGMoMTAwdncgLSAxMjRweClcIixcbiAgICAgICAgICB3aWR0aDogXCIxMDBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MHB4XCIsXG4gICAgICAgICAgekluZGV4OiAxMDAwMDAwLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMDA4NUZGXCIsXG4gICAgICAgICAgY29sb3I6IFwid2hpdGVcIixcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDQsXG4gICAgICAgIH19XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNyZWF0ZUZlZWRiYWNrfVxuICAgICAgPlxuICAgICAgICBOZXcgRmVlZGJhY2tcbiAgICAgIDwvYnV0dG9uPlxuICAgICAge2lzT3BlbiAmJlxuICAgICAgICBmZWVkYmFja3MgJiZcbiAgICAgICAgZmVlZGJhY2tzXG4gICAgICAgICAgLmZpbHRlcigoZmVlZGJhY2spID0+IGZlZWRiYWNrLnBhdGggPT09IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgICAgICAgICAubWFwKChmZWVkYmFjaykgPT4gKFxuICAgICAgICAgICAgPEZlZWRiYWNrSXRlbSBrZXk9e2ZlZWRiYWNrLmlkfSBmZWVkYmFjaz17ZmVlZGJhY2t9IC8+XG4gICAgICAgICAgKSl9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvb3Q7XG4iLCJpbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCBSb290IGZyb20gXCIuL3BhZ2VzL1Jvb3RcIjtcbmltcG9ydCBcIi4vaW5kZXguY3NzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbmZ1bmN0aW9uIEFwcCgpIHtcbiAgcmV0dXJuIChcbiAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgIDxSb290IC8+XG4gICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBBcHA7XG4iXSwibmFtZXMiOlsidXNlUXVlcnkiLCJ1c2VRdWVyeUNsaWVudCIsInVzZU11dGF0aW9uIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ1c2VFZmZlY3QiLCJjcmVhdGVQb3J0YWwiLCJfanN4cyIsIl9qc3giLCJRdWVyeUNsaWVudCIsIl9GcmFnbWVudCIsIlF1ZXJ5Q2xpZW50UHJvdmlkZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUEsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN2QixJQUFBLE9BQU8sRUFBRSx1QkFBdUI7QUFDakMsQ0FBQSxDQUFDO0FBRUYsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUMxQixPQUFPLE1BQU0sS0FBSTs7Ozs7OztBQU9mLElBQUEsT0FBTyxNQUFNO0FBQ2YsQ0FBQyxFQUNELENBQUMsS0FBSyxLQUFJO0FBQ1IsSUFBQSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzlCLENBQUMsQ0FDRjs7QUNmTSxNQUFNLGNBQWMsR0FBRyxZQUFXO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBYSxXQUFXLENBQUM7SUFDdkQsT0FBTyxRQUFRLENBQUMsSUFBSTtBQUN0QixDQUFDO0FBRU0sTUFBTSxjQUFjLEdBQUcsT0FBTyxRQUF5QixLQUFJO0lBQ2hFLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO0lBQ3RELE9BQU8sUUFBUSxDQUFDLElBQUk7QUFDdEIsQ0FBQztBQU9NLE1BQU0sY0FBYyxHQUFHLE9BQU8sUUFBa0IsS0FBSTtBQUN6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
|
|
196
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzLmpzIiwic291cmNlcyI6WyIuLi9zcmMvc2VydmljZXMvYXBpLnRzIiwiLi4vc3JjL3NlcnZpY2VzL2ZlZWRiYWNrLnRzIiwiLi4vc3JjL2NvbXBvbmVudHMvZmVlZGJhY2svRmVlZGJhY2tJdGVtLnRzeCIsIi4uL3NyYy9wYWdlcy9Sb290LnRzeCIsIi4uL3NyYy9BcHAudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcblxuY29uc3QgYXBpID0gYXhpb3MuY3JlYXRlKHtcbiAgYmFzZVVSTDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIixcbn0pO1xuXG5hcGkuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKFxuICBhc3luYyAoY29uZmlnKSA9PiB7XG4gICAgLy8gY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImRhc2hib2FyZEdhbGFkcmltQXV0aFRva2VuXCIpO1xuICAgIC8vIGlmICh0b2tlbiAmJiBjb25maWcuaGVhZGVycykge1xuICAgIC8vICAgY29uZmlnLmhlYWRlcnNbXCJ4LWRhc2hib2FyZC10b2tlblwiXSA9IHRva2VuO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICBkZWxldGUgYXBpLmRlZmF1bHRzLmhlYWRlcnMuY29tbW9uLkF1dGhvcml6YXRpb247XG4gICAgLy8gfVxuICAgIHJldHVybiBjb25maWc7XG4gIH0sXG4gIChlcnJvcikgPT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gIH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IGFwaTtcbiIsImltcG9ydCB7IHVzZU11dGF0aW9uLCB1c2VRdWVyeSwgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgYXBpIGZyb20gXCIuL2FwaVwiO1xuaW1wb3J0IHsgRmVlZGJhY2ssIEZlZWRiYWNrUGF5bG9hZCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG5leHBvcnQgY29uc3QgZmV0Y2hGZWVkYmFja3MgPSBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLmdldDxGZWVkYmFja1tdPihcIi9mZWVkYmFja1wiKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRmVlZGJhY2sgPSBhc3luYyAoZmVlZGJhY2s6IEZlZWRiYWNrUGF5bG9hZCkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5wb3N0KFwiL2ZlZWRiYWNrXCIsIGZlZWRiYWNrKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlRmVlZGJhY2sgPSBhc3luYyAoZmVlZGJhY2s6IEZlZWRiYWNrUGF5bG9hZCkgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5wdXQoXCIvZmVlZGJhY2tcIiwgZmVlZGJhY2spO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZGVsZXRlKGAvZmVlZGJhY2svJHtmZWVkYmFjay5pZH1gKTtcbiAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlRmVlZGJhY2tzID0gKCkgPT4ge1xuICByZXR1cm4gdXNlUXVlcnkoe1xuICAgIHF1ZXJ5S2V5OiBbXCJmZWVkYmFja3NcIl0sXG4gICAgcXVlcnlGbjogZmV0Y2hGZWVkYmFja3MsXG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVzZUNyZWF0ZUZlZWRiYWNrID0gKCkgPT4ge1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG4gIHJldHVybiB1c2VNdXRhdGlvbih7XG4gICAgbXV0YXRpb25GbjogY3JlYXRlRmVlZGJhY2ssXG4gICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcIkZlZWRiYWNrIGNyZWF0ZWRcIik7XG5cbiAgICAgIHJldHVybiBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBbXCJmZWVkYmFja3NcIl0gfSk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlVXBkYXRlRmVlZGJhY2sgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiB1cGRhdGVGZWVkYmFjayxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHJldHVybiBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBbXCJmZWVkYmFja3NcIl0gfSk7XG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlRGVsZXRlRmVlZGJhY2sgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBkZWxldGVGZWVkYmFjayxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIHJldHVybiBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7IHF1ZXJ5S2V5OiBbXCJmZWVkYmFja3NcIl0gfSk7XG4gICAgfSxcbiAgfSk7XG59O1xuIiwiaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdXNlRGVsZXRlRmVlZGJhY2sgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvZmVlZGJhY2tcIjtcblxuZXhwb3J0IGNvbnN0IEZlZWRiYWNrSXRlbSA9ICh7IGZlZWRiYWNrIH06IHsgZmVlZGJhY2s6IEZlZWRiYWNrIH0pID0+IHtcbiAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IHVzZVJlZjxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCB7IG11dGF0ZTogZGVsZXRlRmVlZGJhY2sgfSA9IHVzZURlbGV0ZUZlZWRiYWNrKCk7XG4gIGNvbnN0IFtwb3NpdGlvbiwgc2V0UG9zaXRpb25dID0gdXNlU3RhdGUoeyB0b3A6IDAsIGxlZnQ6IDAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVSZXNpemUgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgIXRhcmdldEVsZW1lbnQuY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkaW1lbnNpb25zID0gdGFyZ2V0RWxlbWVudC5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgc2V0UG9zaXRpb24oe1xuICAgICAgICB0b3A6IGZlZWRiYWNrLnkgKyBkaW1lbnNpb25zLnRvcCArIHdpbmRvdy5zY3JvbGxZLFxuICAgICAgICBsZWZ0OiBmZWVkYmFjay54ICsgZGltZW5zaW9ucy5sZWZ0ICsgd2luZG93LnNjcm9sbFgsXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihcbiAgICAgIGBbZGF0YS1pZD1cIiR7ZmVlZGJhY2suZWxlbWVudElkfVwiXWBcbiAgICApO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tmZWVkYmFjay5lbGVtZW50SW5kZXhdO1xuXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVsZW1lbnQpO1xuXG4gICAgICB0YXJnZXRFbGVtZW50LmN1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgaGFuZGxlUmVzaXplKCk7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoYW5kbGVSZXNpemUpO1xuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoYW5kbGVSZXNpemUpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtmZWVkYmFja10pO1xuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUZlZWRiYWNrID0gKCkgPT4ge1xuICAgIGRlbGV0ZUZlZWRiYWNrKGZlZWRiYWNrKTtcbiAgfTtcblxuICAvLyBJZiB3ZSBoYXZlbid0IGZvdW5kIGEgbWF0Y2hpbmcgRE9NIG5vZGUsIGRvbid0IHJlbmRlciBhbnl0aGluZ1xuICBpZiAoIXRhcmdldEVsZW1lbnQgfHwgIXRhcmdldEVsZW1lbnQuY3VycmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc29sZS5sb2coXCJyZW5kcnJcIiwgcG9zaXRpb24pO1xuXG4gIC8vIFJlbmRlciB0aGlzIGNvbXBvbmVudCBpbnNpZGUgYHRhcmdldEVsZW1lbnRgIHVzaW5nIGEgUG9ydGFsXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPGRpdlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgdG9wOiBwb3NpdGlvbi50b3AsXG4gICAgICAgIGxlZnQ6IHBvc2l0aW9uLmxlZnQsXG4gICAgICAgIHdpZHRoOiBcIjIwMHB4XCIsXG4gICAgICAgIGhlaWdodDogXCIxMDBweFwiLFxuICAgICAgICBib3JkZXI6IFwiMXB4IHNvbGlkIGJsYWNrXCIsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgfX1cbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgICAgICAganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLFxuICAgICAgICAgIGFsaWduSXRlbXM6IFwiY2VudGVyXCIsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6IFwiMTZweFwiLCBmb250V2VpZ2h0OiBcImJvbGRcIiB9fT5GZWVkYmFjazwvcD5cbiAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIxNHB4XCIgfX0+XG4gICAgICAgICAgICBDcmVhdGVkIGF0OiB7ZmVlZGJhY2suY3JlYXRlZEF0LnRvTG9jYWxlU3RyaW5nKCl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICAgIDxhIGhyZWY9e2ZlZWRiYWNrLmVsZW1lbnRJZH0gdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICBHbyB0byBjb21wb25lbnRcbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9e2hhbmRsZURlbGV0ZUZlZWRiYWNrfT5EZWxldGU8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHAgc3R5bGU9e3sgZm9udFNpemU6IFwiMTRweFwiIH19PntmZWVkYmFjay5jb21tZW50fTwvcD5cbiAgICA8L2Rpdj4sXG4gICAgZG9jdW1lbnQuYm9keVxuICApO1xufTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZlZWRiYWNrSXRlbSB9IGZyb20gXCIuLi9jb21wb25lbnRzL2ZlZWRiYWNrL0ZlZWRiYWNrSXRlbVwiO1xuaW1wb3J0IHsgdXNlQ3JlYXRlRmVlZGJhY2ssIHVzZUZlZWRiYWNrcyB9IGZyb20gXCIuLi9zZXJ2aWNlcy9mZWVkYmFja1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tQYXlsb2FkIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5cbmZ1bmN0aW9uIFJvb3QoKSB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgZGF0YTogZmVlZGJhY2tzIH0gPSB1c2VGZWVkYmFja3MoKTtcblxuICBjb25zb2xlLmxvZyhcImZlZWRiYWNrcyAxIDogXCIsIGZlZWRiYWNrcyk7XG5cbiAgY29uc3QgeyBtdXRhdGU6IGNyZWF0ZUZlZWRiYWNrIH0gPSB1c2VDcmVhdGVGZWVkYmFjaygpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleVByZXNzKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5cHJlc3NcIiwgaGFuZGxlS2V5UHJlc3MpO1xuICAgICAgfTtcbiAgICB9XG4gIH0sIFtpc09wZW5dKTtcblxuICBjb25zdCBoYW5kbGVLZXlQcmVzcyA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBub2RlID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IGVsZW1lbnRJZCA9IG5vZGU/LmRhdGFzZXQuaWQgfHwgXCJcIjtcbiAgICBjb25zdCBhbGxFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxuICAgICAgYFtkYXRhLWlkPVwiJHtlbGVtZW50SWR9XCJdYFxuICAgICk7XG5cbiAgICBjb25zdCBhcnJBbGxFbGVtZW50cyA9IEFycmF5LmZyb20oYWxsRWxlbWVudHMpO1xuXG4gICAgY29uc3QgZWxlbWVudEluZGV4ID0gYXJyQWxsRWxlbWVudHMuaW5kZXhPZihub2RlIGFzIEhUTUxFbGVtZW50KTtcblxuICAgIGNvbnN0IHggPSBlLm9mZnNldFg7XG4gICAgY29uc3QgeSA9IGUub2Zmc2V0WTtcbiAgICBjb25zb2xlLmxvZyhlKTtcbiAgICBjb25zdCBuZXdGZWVkYmFjazogRmVlZGJhY2tQYXlsb2FkID0ge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBjb21tZW50OiBcInRlc3RcIixcbiAgICAgIHBhdGg6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgIGVsZW1lbnRJZCxcbiAgICAgIGVsZW1lbnRJbmRleCxcbiAgICB9O1xuICAgIGNvbnNvbGUubG9nKG5ld0ZlZWRiYWNrKTtcbiAgICBjcmVhdGVGZWVkYmFjayhuZXdGZWVkYmFjayk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiY29tbWVudC1jdXJzb3JcIik7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNsaWNrLCB0cnVlKTtcbiAgICBzZXRJc09wZW4odHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ3JlYXRlRmVlZGJhY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImNvbW1lbnQtY3Vyc29yXCIpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDbGljaywgdHJ1ZSk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgdG9wOiBcImNhbGMoMTAwdmggLSA2MnB4KVwiLFxuICAgICAgICAgIGxlZnQ6IFwiY2FsYygxMDB2dyAtIDEyNHB4KVwiLFxuICAgICAgICAgIHdpZHRoOiBcIjEwMHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwcHhcIixcbiAgICAgICAgICB6SW5kZXg6IDEwMDAwMDAsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiMwMDg1RkZcIixcbiAgICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogNCxcbiAgICAgICAgfX1cbiAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SXNPcGVuKCFpc09wZW4pfVxuICAgICAgPlxuICAgICAgICBTaG93IEZlZWRiYWNrXG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgIHRvcDogXCJjYWxjKDEwMHZoIC0gMTIycHgpXCIsXG4gICAgICAgICAgbGVmdDogXCJjYWxjKDEwMHZ3IC0gMTI0cHgpXCIsXG4gICAgICAgICAgd2lkdGg6IFwiMTAwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTBweFwiLFxuICAgICAgICAgIHpJbmRleDogMTAwMDAwMCxcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzAwODVGRlwiLFxuICAgICAgICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgICAgICB9fVxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVDcmVhdGVGZWVkYmFja31cbiAgICAgID5cbiAgICAgICAgTmV3IEZlZWRiYWNrXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIHtpc09wZW4gJiZcbiAgICAgICAgZmVlZGJhY2tzICYmXG4gICAgICAgIGZlZWRiYWNrc1xuICAgICAgICAgIC5maWx0ZXIoKGZlZWRiYWNrKSA9PiBmZWVkYmFjay5wYXRoID09PSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpXG4gICAgICAgICAgLm1hcCgoZmVlZGJhY2spID0+IChcbiAgICAgICAgICAgIDxGZWVkYmFja0l0ZW0ga2V5PXtmZWVkYmFjay5pZH0gZmVlZGJhY2s9e2ZlZWRiYWNrfSAvPlxuICAgICAgICAgICkpfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBSb290O1xuIiwiaW1wb3J0IHsgUXVlcnlDbGllbnQsIFF1ZXJ5Q2xpZW50UHJvdmlkZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUm9vdCBmcm9tIFwiLi9wYWdlcy9Sb290XCI7XG5pbXBvcnQgXCIuL2luZGV4LmNzc1wiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5jb25zdCBxdWVyeUNsaWVudCA9IG5ldyBRdWVyeUNsaWVudCgpO1xuXG5mdW5jdGlvbiBBcHAoKSB7XG4gIHJldHVybiAoXG4gICAgPFF1ZXJ5Q2xpZW50UHJvdmlkZXIgY2xpZW50PXtxdWVyeUNsaWVudH0+XG4gICAgICA8Um9vdCAvPlxuICAgIDwvUXVlcnlDbGllbnRQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwO1xuIl0sIm5hbWVzIjpbInVzZVF1ZXJ5IiwidXNlUXVlcnlDbGllbnQiLCJ1c2VNdXRhdGlvbiIsInVzZVJlZiIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwiY3JlYXRlUG9ydGFsIiwiX2pzeHMiLCJfanN4IiwiX0ZyYWdtZW50IiwiUXVlcnlDbGllbnQiLCJRdWVyeUNsaWVudFByb3ZpZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUVBLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDdkIsSUFBQSxPQUFPLEVBQUUsdUJBQXVCO0FBQ2pDLENBQUEsQ0FBQztBQUVGLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDMUIsT0FBTyxNQUFNLEtBQUk7Ozs7Ozs7QUFPZixJQUFBLE9B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
|
package/dist/index.es.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { useQuery, useQueryClient, useMutation, QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
3
3
|
import React, { useRef, useState, useEffect } from 'react';
|
|
4
|
-
import axios from 'axios';
|
|
5
4
|
import { createPortal } from 'react-dom';
|
|
5
|
+
import axios from 'axios';
|
|
6
6
|
|
|
7
7
|
const api = axios.create({
|
|
8
8
|
baseURL: "http://localhost:3000",
|
|
@@ -110,16 +110,13 @@ const FeedbackItem = ({ feedback }) => {
|
|
|
110
110
|
}, children: [jsxs("div", { children: [jsx("p", { style: { fontSize: "16px", fontWeight: "bold" }, children: "Feedback" }), jsxs("p", { style: { fontSize: "14px" }, children: ["Created at: ", feedback.createdAt.toLocaleString()] }), jsx("a", { href: feedback.elementId, target: "_blank", children: "Go to component" })] }), jsx("button", { onClick: handleDeleteFeedback, children: "Delete" })] }), jsx("p", { style: { fontSize: "14px" }, children: feedback.comment })] }), document.body);
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
-
new QueryClient();
|
|
114
113
|
function Root() {
|
|
115
114
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
116
115
|
const { data: feedbacks } = useFeedbacks();
|
|
117
116
|
console.log("feedbacks 1 : ", feedbacks);
|
|
118
|
-
const [creatingFeedback, setCreatingFeedback] = React.useState(false);
|
|
119
117
|
const { mutate: createFeedback } = useCreateFeedback();
|
|
120
118
|
useEffect(() => {
|
|
121
119
|
if (isOpen) {
|
|
122
|
-
console.log("Opening feedbacks canvas");
|
|
123
120
|
window.addEventListener("keydown", handleKeyPress);
|
|
124
121
|
return () => {
|
|
125
122
|
window.removeEventListener("keypress", handleKeyPress);
|
|
@@ -127,13 +124,11 @@ function Root() {
|
|
|
127
124
|
}
|
|
128
125
|
}, [isOpen]);
|
|
129
126
|
const handleKeyPress = (event) => {
|
|
130
|
-
console.log(event.key);
|
|
131
127
|
if (event.key === "Escape") {
|
|
132
128
|
setIsOpen(false);
|
|
133
129
|
}
|
|
134
130
|
};
|
|
135
131
|
const handleClick = (e) => {
|
|
136
|
-
console.log("click");
|
|
137
132
|
e.stopPropagation();
|
|
138
133
|
e.preventDefault();
|
|
139
134
|
const node = e.target;
|
|
@@ -147,8 +142,6 @@ function Root() {
|
|
|
147
142
|
const newFeedback = {
|
|
148
143
|
x,
|
|
149
144
|
y,
|
|
150
|
-
screenWidth: window.innerWidth,
|
|
151
|
-
screenHeight: window.innerHeight,
|
|
152
145
|
comment: "test",
|
|
153
146
|
path: window.location.pathname,
|
|
154
147
|
elementId,
|
|
@@ -158,12 +151,10 @@ function Root() {
|
|
|
158
151
|
createFeedback(newFeedback);
|
|
159
152
|
document.body.classList.remove("comment-cursor");
|
|
160
153
|
document.removeEventListener("click", handleClick, true);
|
|
161
|
-
setCreatingFeedback(false);
|
|
162
154
|
setIsOpen(true);
|
|
163
155
|
};
|
|
164
156
|
const handleCreateFeedback = (e) => {
|
|
165
157
|
e.stopPropagation();
|
|
166
|
-
setCreatingFeedback(true);
|
|
167
158
|
document.body.classList.add("comment-cursor");
|
|
168
159
|
document.addEventListener("click", handleClick, true);
|
|
169
160
|
};
|
|
@@ -200,4 +191,4 @@ function App() {
|
|
|
200
191
|
}
|
|
201
192
|
|
|
202
193
|
export { App as default };
|
|
203
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXMuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJ2aWNlcy9hcGkudHMiLCIuLi9zcmMvc2VydmljZXMvZmVlZGJhY2sudHMiLCIuLi9zcmMvY29tcG9uZW50cy9mZWVkYmFjay9GZWVkYmFja0l0ZW0udHN4IiwiLi4vc3JjL3BhZ2VzL1Jvb3QudHN4IiwiLi4vc3JjL0FwcC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xuXG5jb25zdCBhcGkgPSBheGlvcy5jcmVhdGUoe1xuICBiYXNlVVJMOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiLFxufSk7XG5cbmFwaS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoXG4gIGFzeW5jIChjb25maWcpID0+IHtcbiAgICAvLyBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZGFzaGJvYXJkR2FsYWRyaW1BdXRoVG9rZW5cIik7XG4gICAgLy8gaWYgKHRva2VuICYmIGNvbmZpZy5oZWFkZXJzKSB7XG4gICAgLy8gICBjb25maWcuaGVhZGVyc1tcIngtZGFzaGJvYXJkLXRva2VuXCJdID0gdG9rZW47XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIGRlbGV0ZSBhcGkuZGVmYXVsdHMuaGVhZGVycy5jb21tb24uQXV0aG9yaXphdGlvbjtcbiAgICAvLyB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfSxcbiAgKGVycm9yKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuKTtcblxuZXhwb3J0IGRlZmF1bHQgYXBpO1xuIiwiaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCBhcGkgZnJvbSBcIi4vYXBpXCI7XG5pbXBvcnQgeyBGZWVkYmFjaywgRmVlZGJhY2tQYXlsb2FkIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBmZXRjaEZlZWRiYWNrcyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZ2V0PEZlZWRiYWNrW10+KFwiL2ZlZWRiYWNrXCIpO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2tQYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLnBvc3QoXCIvZmVlZGJhY2tcIiwgZmVlZGJhY2spO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2tQYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLnB1dChcIi9mZWVkYmFja1wiLCBmZWVkYmFjayk7XG4gIHJldHVybiByZXNwb25zZS5kYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUZlZWRiYWNrID0gYXN5bmMgKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5kZWxldGUoYC9mZWVkYmFjay8ke2ZlZWRiYWNrLmlkfWApO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VGZWVkYmFja3MgPSAoKSA9PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSxcbiAgICBxdWVyeUZuOiBmZXRjaEZlZWRiYWNrcyxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlQ3JlYXRlRmVlZGJhY2sgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBjcmVhdGVGZWVkYmFjayxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRmVlZGJhY2sgY3JlYXRlZFwiKTtcblxuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSB9KTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VVcGRhdGVGZWVkYmFjayA9ICgpID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IHVwZGF0ZUZlZWRiYWNrLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSB9KTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VEZWxldGVGZWVkYmFjayA9ICgpID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGRlbGV0ZUZlZWRiYWNrLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSB9KTtcbiAgICB9LFxuICB9KTtcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VEZWxldGVGZWVkYmFjayB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9mZWVkYmFja1wiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tJdGVtID0gKHsgZmVlZGJhY2sgfTogeyBmZWVkYmFjazogRmVlZGJhY2sgfSkgPT4ge1xuICBjb25zdCB0YXJnZXRFbGVtZW50ID0gdXNlUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHsgbXV0YXRlOiBkZWxldGVGZWVkYmFjayB9ID0gdXNlRGVsZXRlRmVlZGJhY2soKTtcbiAgY29uc3QgW3Bvc2l0aW9uLCBzZXRQb3NpdGlvbl0gPSB1c2VTdGF0ZSh7IHRvcDogMCwgbGVmdDogMCB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0YXJnZXRFbGVtZW50LmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBzZXRQb3NpdGlvbih7XG4gICAgICAgIHRvcDogZmVlZGJhY2sueSArIGRpbWVuc2lvbnMudG9wICsgd2luZG93LnNjcm9sbFksXG4gICAgICAgIGxlZnQ6IGZlZWRiYWNrLnggKyBkaW1lbnNpb25zLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWCxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxuICAgICAgYFtkYXRhLWlkPVwiJHtmZWVkYmFjay5lbGVtZW50SWR9XCJdYFxuICAgICk7XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2ZlZWRiYWNrLmVsZW1lbnRJbmRleF07XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgY29uc29sZS5sb2coZWxlbWVudCk7XG5cbiAgICAgIHRhcmdldEVsZW1lbnQuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICBoYW5kbGVSZXNpemUoKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2ZlZWRiYWNrXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlRmVlZGJhY2sgPSAoKSA9PiB7XG4gICAgZGVsZXRlRmVlZGJhY2soZmVlZGJhY2spO1xuICB9O1xuXG4gIC8vIElmIHdlIGhhdmVuJ3QgZm91bmQgYSBtYXRjaGluZyBET00gbm9kZSwgZG9uJ3QgcmVuZGVyIGFueXRoaW5nXG4gIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC5jdXJyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zb2xlLmxvZyhcInJlbmRyclwiLCBwb3NpdGlvbik7XG5cbiAgLy8gUmVuZGVyIHRoaXMgY29tcG9uZW50IGluc2lkZSBgdGFyZ2V0RWxlbWVudGAgdXNpbmcgYSBQb3J0YWxcbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17e1xuICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICB0b3A6IHBvc2l0aW9uLnRvcCxcbiAgICAgICAgbGVmdDogcG9zaXRpb24ubGVmdCxcbiAgICAgICAgd2lkdGg6IFwiMjAwcHhcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwMHB4XCIsXG4gICAgICAgIGJvcmRlcjogXCIxcHggc29saWQgYmxhY2tcIixcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIndoaXRlXCIsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsXG4gICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIxNnB4XCIsIGZvbnRXZWlnaHQ6IFwiYm9sZFwiIH19PkZlZWRiYWNrPC9wPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiBcIjE0cHhcIiB9fT5cbiAgICAgICAgICAgIENyZWF0ZWQgYXQ6IHtmZWVkYmFjay5jcmVhdGVkQXQudG9Mb2NhbGVTdHJpbmcoKX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGEgaHJlZj17ZmVlZGJhY2suZWxlbWVudElkfSB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgIEdvIHRvIGNvbXBvbmVudFxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gb25DbGljaz17aGFuZGxlRGVsZXRlRmVlZGJhY2t9PkRlbGV0ZTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIxNHB4XCIgfX0+e2ZlZWRiYWNrLmNvbW1lbnR9PC9wPlxuICAgIDwvZGl2PixcbiAgICBkb2N1bWVudC5ib2R5XG4gICk7XG59O1xuIiwiaW1wb3J0IHsgUXVlcnlDbGllbnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgUmVhY3RET00gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHsgT3ZlcmxheSB9IGZyb20gXCIuL092ZXJsYXlcIjtcbmltcG9ydCB7IHVzZUNyZWF0ZUZlZWRiYWNrLCB1c2VGZWVkYmFja3MgfSBmcm9tIFwiLi4vc2VydmljZXMvZmVlZGJhY2tcIjtcbmltcG9ydCB7IEZlZWRiYWNrUGF5bG9hZCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgRmVlZGJhY2tJdGVtIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZmVlZGJhY2svRmVlZGJhY2tJdGVtXCI7XG5cbmNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbmZ1bmN0aW9uIFJvb3QoKSB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgZGF0YTogZmVlZGJhY2tzIH0gPSB1c2VGZWVkYmFja3MoKTtcblxuICBjb25zb2xlLmxvZyhcImZlZWRiYWNrcyAxIDogXCIsIGZlZWRiYWNrcyk7XG5cbiAgY29uc3QgW2NyZWF0aW5nRmVlZGJhY2ssIHNldENyZWF0aW5nRmVlZGJhY2tdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHsgbXV0YXRlOiBjcmVhdGVGZWVkYmFjayB9ID0gdXNlQ3JlYXRlRmVlZGJhY2soKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiT3BlbmluZyBmZWVkYmFja3MgY2FudmFzXCIpO1xuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5UHJlc3MpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLCBoYW5kbGVLZXlQcmVzcyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2lzT3Blbl0pO1xuXG4gIGNvbnN0IGhhbmRsZUtleVByZXNzID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgY29uc29sZS5sb2coZXZlbnQua2V5KTtcblxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IGFueSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKFwiY2xpY2tcIik7XG5cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBub2RlID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGNvbnN0IGVsZW1lbnRJZCA9IG5vZGU/LmRhdGFzZXQuaWQgfHwgXCJcIjtcbiAgICBjb25zdCBhbGxFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxuICAgICAgYFtkYXRhLWlkPVwiJHtlbGVtZW50SWR9XCJdYFxuICAgICk7XG5cbiAgICBjb25zdCBhcnJBbGxFbGVtZW50cyA9IEFycmF5LmZyb20oYWxsRWxlbWVudHMpO1xuXG4gICAgY29uc3QgZWxlbWVudEluZGV4ID0gYXJyQWxsRWxlbWVudHMuaW5kZXhPZihub2RlIGFzIEhUTUxFbGVtZW50KTtcblxuICAgIGNvbnN0IHggPSBlLm9mZnNldFg7XG4gICAgY29uc3QgeSA9IGUub2Zmc2V0WTtcbiAgICBjb25zb2xlLmxvZyhlKTtcbiAgICBjb25zdCBuZXdGZWVkYmFjazogRmVlZGJhY2tQYXlsb2FkID0ge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBzY3JlZW5XaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICBzY3JlZW5IZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCxcbiAgICAgIGNvbW1lbnQ6IFwidGVzdFwiLFxuICAgICAgcGF0aDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgZWxlbWVudElkLFxuICAgICAgZWxlbWVudEluZGV4LFxuICAgIH07XG4gICAgY29uc29sZS5sb2cobmV3RmVlZGJhY2spO1xuICAgIGNyZWF0ZUZlZWRiYWNrKG5ld0ZlZWRiYWNrKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJjb21tZW50LWN1cnNvclwiKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2ssIHRydWUpO1xuICAgIHNldENyZWF0aW5nRmVlZGJhY2soZmFsc2UpO1xuICAgIHNldElzT3Blbih0cnVlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDcmVhdGVGZWVkYmFjayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc2V0Q3JlYXRpbmdGZWVkYmFjayh0cnVlKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJjb21tZW50LWN1cnNvclwiKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2ssIHRydWUpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxuICAgICAgICAgIHRvcDogXCJjYWxjKDEwMHZoIC0gNjJweClcIixcbiAgICAgICAgICBsZWZ0OiBcImNhbGMoMTAwdncgLSAxMjRweClcIixcbiAgICAgICAgICB3aWR0aDogXCIxMDBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MHB4XCIsXG4gICAgICAgICAgekluZGV4OiAxMDAwMDAwLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMDA4NUZGXCIsXG4gICAgICAgICAgY29sb3I6IFwid2hpdGVcIixcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDQsXG4gICAgICAgIH19XG4gICAgICAgIG9uQ2xpY2s9eygpID0+IHNldElzT3BlbighaXNPcGVuKX1cbiAgICAgID5cbiAgICAgICAgU2hvdyBGZWVkYmFja1xuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICB0b3A6IFwiY2FsYygxMDB2aCAtIDEyMnB4KVwiLFxuICAgICAgICAgIGxlZnQ6IFwiY2FsYygxMDB2dyAtIDEyNHB4KVwiLFxuICAgICAgICAgIHdpZHRoOiBcIjEwMHB4XCIsXG4gICAgICAgICAgaGVpZ2h0OiBcIjUwcHhcIixcbiAgICAgICAgICB6SW5kZXg6IDEwMDAwMDAsXG4gICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIiMwMDg1RkZcIixcbiAgICAgICAgICBjb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgICAgIGJvcmRlclJhZGl1czogNCxcbiAgICAgICAgfX1cbiAgICAgICAgb25DbGljaz17aGFuZGxlQ3JlYXRlRmVlZGJhY2t9XG4gICAgICA+XG4gICAgICAgIE5ldyBGZWVkYmFja1xuICAgICAgPC9idXR0b24+XG4gICAgICB7aXNPcGVuICYmXG4gICAgICAgIGZlZWRiYWNrcyAmJlxuICAgICAgICBmZWVkYmFja3NcbiAgICAgICAgICAuZmlsdGVyKChmZWVkYmFjaykgPT4gZmVlZGJhY2sucGF0aCA9PT0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKVxuICAgICAgICAgIC5tYXAoKGZlZWRiYWNrKSA9PiAoXG4gICAgICAgICAgICA8RmVlZGJhY2tJdGVtIGtleT17ZmVlZGJhY2suaWR9IGZlZWRiYWNrPXtmZWVkYmFja30gLz5cbiAgICAgICAgICApKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgUm9vdDtcbiIsImltcG9ydCB7IFF1ZXJ5Q2xpZW50LCBRdWVyeUNsaWVudFByb3ZpZGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IFJvb3QgZnJvbSBcIi4vcGFnZXMvUm9vdFwiO1xuaW1wb3J0IFwiLi9pbmRleC5jc3NcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuY29uc3QgcXVlcnlDbGllbnQgPSBuZXcgUXVlcnlDbGllbnQoKTtcblxuZnVuY3Rpb24gQXBwKCkge1xuICByZXR1cm4gKFxuICAgIDxRdWVyeUNsaWVudFByb3ZpZGVyIGNsaWVudD17cXVlcnlDbGllbnR9PlxuICAgICAgPFJvb3QgLz5cbiAgICA8L1F1ZXJ5Q2xpZW50UHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcDtcbiJdLCJuYW1lcyI6WyJfanN4cyIsIl9qc3giLCJfRnJhZ21lbnQiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDdkIsSUFBQSxPQUFPLEVBQUUsdUJBQXVCO0FBQ2pDLENBQUEsQ0FBQztBQUVGLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDMUIsT0FBTyxNQUFNLEtBQUk7Ozs7Ozs7QUFPZixJQUFBLE9BQU8sTUFBTTtBQUNmLENBQUMsRUFDRCxDQUFDLEtBQUssS0FBSTtBQUNSLElBQUEsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM5QixDQUFDLENBQ0Y7O0FDZk0sTUFBTSxjQUFjLEdBQUcsWUFBVztJQUN2QyxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQWEsV0FBVyxDQUFDO0lBQ3ZELE9BQU8sUUFBUSxDQUFDLElBQUk7QUFDdEIsQ0FBQztBQUVNLE1BQU0sY0FBYyxHQUFHLE9BQU8sUUFBeUIsS0FBSTtJQUNoRSxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztJQUN0RCxPQUFPLFFBQVEsQ0FBQyxJQUFJO0FBQ3RCLENBQUM7QUFPTSxNQUFNLGNBQWMsR0FBRyxPQUFPLFFBQWtCLEtBQUk7QUFDekQsSUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQSxVQUFBLEVBQWEsUUFBUSxDQUFDLEVBQUUsQ0FBQSxDQUFFLENBQUM7SUFDN0QsT0FBTyxRQUFRLENBQUMsSUFBSTtBQUN0QixDQUFD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
|
|
194
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXMuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9zZXJ2aWNlcy9hcGkudHMiLCIuLi9zcmMvc2VydmljZXMvZmVlZGJhY2sudHMiLCIuLi9zcmMvY29tcG9uZW50cy9mZWVkYmFjay9GZWVkYmFja0l0ZW0udHN4IiwiLi4vc3JjL3BhZ2VzL1Jvb3QudHN4IiwiLi4vc3JjL0FwcC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xuXG5jb25zdCBhcGkgPSBheGlvcy5jcmVhdGUoe1xuICBiYXNlVVJMOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMFwiLFxufSk7XG5cbmFwaS5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoXG4gIGFzeW5jIChjb25maWcpID0+IHtcbiAgICAvLyBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiZGFzaGJvYXJkR2FsYWRyaW1BdXRoVG9rZW5cIik7XG4gICAgLy8gaWYgKHRva2VuICYmIGNvbmZpZy5oZWFkZXJzKSB7XG4gICAgLy8gICBjb25maWcuaGVhZGVyc1tcIngtZGFzaGJvYXJkLXRva2VuXCJdID0gdG9rZW47XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIGRlbGV0ZSBhcGkuZGVmYXVsdHMuaGVhZGVycy5jb21tb24uQXV0aG9yaXphdGlvbjtcbiAgICAvLyB9XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfSxcbiAgKGVycm9yKSA9PiB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuKTtcblxuZXhwb3J0IGRlZmF1bHQgYXBpO1xuIiwiaW1wb3J0IHsgdXNlTXV0YXRpb24sIHVzZVF1ZXJ5LCB1c2VRdWVyeUNsaWVudCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCBhcGkgZnJvbSBcIi4vYXBpXCI7XG5pbXBvcnQgeyBGZWVkYmFjaywgRmVlZGJhY2tQYXlsb2FkIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBmZXRjaEZlZWRiYWNrcyA9IGFzeW5jICgpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZ2V0PEZlZWRiYWNrW10+KFwiL2ZlZWRiYWNrXCIpO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2tQYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLnBvc3QoXCIvZmVlZGJhY2tcIiwgZmVlZGJhY2spO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVGZWVkYmFjayA9IGFzeW5jIChmZWVkYmFjazogRmVlZGJhY2tQYXlsb2FkKSA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLnB1dChcIi9mZWVkYmFja1wiLCBmZWVkYmFjayk7XG4gIHJldHVybiByZXNwb25zZS5kYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUZlZWRiYWNrID0gYXN5bmMgKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5kZWxldGUoYC9mZWVkYmFjay8ke2ZlZWRiYWNrLmlkfWApO1xuICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VGZWVkYmFja3MgPSAoKSA9PiB7XG4gIHJldHVybiB1c2VRdWVyeSh7XG4gICAgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSxcbiAgICBxdWVyeUZuOiBmZXRjaEZlZWRiYWNrcyxcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXNlQ3JlYXRlRmVlZGJhY2sgPSAoKSA9PiB7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcbiAgcmV0dXJuIHVzZU11dGF0aW9uKHtcbiAgICBtdXRhdGlvbkZuOiBjcmVhdGVGZWVkYmFjayxcbiAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiRmVlZGJhY2sgY3JlYXRlZFwiKTtcblxuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSB9KTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VVcGRhdGVGZWVkYmFjayA9ICgpID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IHVwZGF0ZUZlZWRiYWNrLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSB9KTtcbiAgICB9LFxuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1c2VEZWxldGVGZWVkYmFjayA9ICgpID0+IHtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuICByZXR1cm4gdXNlTXV0YXRpb24oe1xuICAgIG11dGF0aW9uRm46IGRlbGV0ZUZlZWRiYWNrLFxuICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgcmV0dXJuIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHsgcXVlcnlLZXk6IFtcImZlZWRiYWNrc1wiXSB9KTtcbiAgICB9LFxuICB9KTtcbn07XG4iLCJpbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VEZWxldGVGZWVkYmFjayB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9mZWVkYmFja1wiO1xuXG5leHBvcnQgY29uc3QgRmVlZGJhY2tJdGVtID0gKHsgZmVlZGJhY2sgfTogeyBmZWVkYmFjazogRmVlZGJhY2sgfSkgPT4ge1xuICBjb25zdCB0YXJnZXRFbGVtZW50ID0gdXNlUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHsgbXV0YXRlOiBkZWxldGVGZWVkYmFjayB9ID0gdXNlRGVsZXRlRmVlZGJhY2soKTtcbiAgY29uc3QgW3Bvc2l0aW9uLCBzZXRQb3NpdGlvbl0gPSB1c2VTdGF0ZSh7IHRvcDogMCwgbGVmdDogMCB9KTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0YXJnZXRFbGVtZW50LmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBzZXRQb3NpdGlvbih7XG4gICAgICAgIHRvcDogZmVlZGJhY2sueSArIGRpbWVuc2lvbnMudG9wICsgd2luZG93LnNjcm9sbFksXG4gICAgICAgIGxlZnQ6IGZlZWRiYWNrLnggKyBkaW1lbnNpb25zLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWCxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCBlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KFxuICAgICAgYFtkYXRhLWlkPVwiJHtmZWVkYmFjay5lbGVtZW50SWR9XCJdYFxuICAgICk7XG4gICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRzW2ZlZWRiYWNrLmVsZW1lbnRJbmRleF07XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgY29uc29sZS5sb2coZWxlbWVudCk7XG5cbiAgICAgIHRhcmdldEVsZW1lbnQuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICBoYW5kbGVSZXNpemUoKTtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhhbmRsZVJlc2l6ZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSwgW2ZlZWRiYWNrXSk7XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlRmVlZGJhY2sgPSAoKSA9PiB7XG4gICAgZGVsZXRlRmVlZGJhY2soZmVlZGJhY2spO1xuICB9O1xuXG4gIC8vIElmIHdlIGhhdmVuJ3QgZm91bmQgYSBtYXRjaGluZyBET00gbm9kZSwgZG9uJ3QgcmVuZGVyIGFueXRoaW5nXG4gIGlmICghdGFyZ2V0RWxlbWVudCB8fCAhdGFyZ2V0RWxlbWVudC5jdXJyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zb2xlLmxvZyhcInJlbmRyclwiLCBwb3NpdGlvbik7XG5cbiAgLy8gUmVuZGVyIHRoaXMgY29tcG9uZW50IGluc2lkZSBgdGFyZ2V0RWxlbWVudGAgdXNpbmcgYSBQb3J0YWxcbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17e1xuICAgICAgICBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLFxuICAgICAgICB0b3A6IHBvc2l0aW9uLnRvcCxcbiAgICAgICAgbGVmdDogcG9zaXRpb24ubGVmdCxcbiAgICAgICAgd2lkdGg6IFwiMjAwcHhcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwMHB4XCIsXG4gICAgICAgIGJvcmRlcjogXCIxcHggc29saWQgYmxhY2tcIixcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBcIndoaXRlXCIsXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICBkaXNwbGF5OiBcImZsZXhcIixcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogXCJzcGFjZS1iZXR3ZWVuXCIsXG4gICAgICAgICAgYWxpZ25JdGVtczogXCJjZW50ZXJcIixcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIxNnB4XCIsIGZvbnRXZWlnaHQ6IFwiYm9sZFwiIH19PkZlZWRiYWNrPC9wPlxuICAgICAgICAgIDxwIHN0eWxlPXt7IGZvbnRTaXplOiBcIjE0cHhcIiB9fT5cbiAgICAgICAgICAgIENyZWF0ZWQgYXQ6IHtmZWVkYmFjay5jcmVhdGVkQXQudG9Mb2NhbGVTdHJpbmcoKX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgICAgPGEgaHJlZj17ZmVlZGJhY2suZWxlbWVudElkfSB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgIEdvIHRvIGNvbXBvbmVudFxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gb25DbGljaz17aGFuZGxlRGVsZXRlRmVlZGJhY2t9PkRlbGV0ZTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8cCBzdHlsZT17eyBmb250U2l6ZTogXCIxNHB4XCIgfX0+e2ZlZWRiYWNrLmNvbW1lbnR9PC9wPlxuICAgIDwvZGl2PixcbiAgICBkb2N1bWVudC5ib2R5XG4gICk7XG59O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgRmVlZGJhY2tJdGVtIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZmVlZGJhY2svRmVlZGJhY2tJdGVtXCI7XG5pbXBvcnQgeyB1c2VDcmVhdGVGZWVkYmFjaywgdXNlRmVlZGJhY2tzIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2ZlZWRiYWNrXCI7XG5pbXBvcnQgeyBGZWVkYmFja1BheWxvYWQgfSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcblxuZnVuY3Rpb24gUm9vdCgpIHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgeyBkYXRhOiBmZWVkYmFja3MgfSA9IHVzZUZlZWRiYWNrcygpO1xuXG4gIGNvbnNvbGUubG9nKFwiZmVlZGJhY2tzIDEgOiBcIiwgZmVlZGJhY2tzKTtcblxuICBjb25zdCB7IG11dGF0ZTogY3JlYXRlRmVlZGJhY2sgfSA9IHVzZUNyZWF0ZUZlZWRiYWNrKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5UHJlc3MpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlwcmVzc1wiLCBoYW5kbGVLZXlQcmVzcyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSwgW2lzT3Blbl0pO1xuXG4gIGNvbnN0IGhhbmRsZUtleVByZXNzID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IG5vZGUgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgY29uc3QgZWxlbWVudElkID0gbm9kZT8uZGF0YXNldC5pZCB8fCBcIlwiO1xuICAgIGNvbnN0IGFsbEVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXG4gICAgICBgW2RhdGEtaWQ9XCIke2VsZW1lbnRJZH1cIl1gXG4gICAgKTtcblxuICAgIGNvbnN0IGFyckFsbEVsZW1lbnRzID0gQXJyYXkuZnJvbShhbGxFbGVtZW50cyk7XG5cbiAgICBjb25zdCBlbGVtZW50SW5kZXggPSBhcnJBbGxFbGVtZW50cy5pbmRleE9mKG5vZGUgYXMgSFRNTEVsZW1lbnQpO1xuXG4gICAgY29uc3QgeCA9IGUub2Zmc2V0WDtcbiAgICBjb25zdCB5ID0gZS5vZmZzZXRZO1xuICAgIGNvbnNvbGUubG9nKGUpO1xuICAgIGNvbnN0IG5ld0ZlZWRiYWNrOiBGZWVkYmFja1BheWxvYWQgPSB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIGNvbW1lbnQ6IFwidGVzdFwiLFxuICAgICAgcGF0aDogd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgZWxlbWVudElkLFxuICAgICAgZWxlbWVudEluZGV4LFxuICAgIH07XG4gICAgY29uc29sZS5sb2cobmV3RmVlZGJhY2spO1xuICAgIGNyZWF0ZUZlZWRiYWNrKG5ld0ZlZWRiYWNrKTtcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJjb21tZW50LWN1cnNvclwiKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2ssIHRydWUpO1xuICAgIHNldElzT3Blbih0cnVlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDcmVhdGVGZWVkYmFjayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiY29tbWVudC1jdXJzb3JcIik7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGhhbmRsZUNsaWNrLCB0cnVlKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgcG9zaXRpb246IFwiZml4ZWRcIixcbiAgICAgICAgICB0b3A6IFwiY2FsYygxMDB2aCAtIDYycHgpXCIsXG4gICAgICAgICAgbGVmdDogXCJjYWxjKDEwMHZ3IC0gMTI0cHgpXCIsXG4gICAgICAgICAgd2lkdGg6IFwiMTAwcHhcIixcbiAgICAgICAgICBoZWlnaHQ6IFwiNTBweFwiLFxuICAgICAgICAgIHpJbmRleDogMTAwMDAwMCxcbiAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzAwODVGRlwiLFxuICAgICAgICAgIGNvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgICAgYm9yZGVyUmFkaXVzOiA0LFxuICAgICAgICB9fVxuICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc09wZW4oIWlzT3Blbil9XG4gICAgICA+XG4gICAgICAgIFNob3cgRmVlZGJhY2tcbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgICAgdG9wOiBcImNhbGMoMTAwdmggLSAxMjJweClcIixcbiAgICAgICAgICBsZWZ0OiBcImNhbGMoMTAwdncgLSAxMjRweClcIixcbiAgICAgICAgICB3aWR0aDogXCIxMDBweFwiLFxuICAgICAgICAgIGhlaWdodDogXCI1MHB4XCIsXG4gICAgICAgICAgekluZGV4OiAxMDAwMDAwLFxuICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjMDA4NUZGXCIsXG4gICAgICAgICAgY29sb3I6IFwid2hpdGVcIixcbiAgICAgICAgICBib3JkZXJSYWRpdXM6IDQsXG4gICAgICAgIH19XG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNyZWF0ZUZlZWRiYWNrfVxuICAgICAgPlxuICAgICAgICBOZXcgRmVlZGJhY2tcbiAgICAgIDwvYnV0dG9uPlxuICAgICAge2lzT3BlbiAmJlxuICAgICAgICBmZWVkYmFja3MgJiZcbiAgICAgICAgZmVlZGJhY2tzXG4gICAgICAgICAgLmZpbHRlcigoZmVlZGJhY2spID0+IGZlZWRiYWNrLnBhdGggPT09IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSlcbiAgICAgICAgICAubWFwKChmZWVkYmFjaykgPT4gKFxuICAgICAgICAgICAgPEZlZWRiYWNrSXRlbSBrZXk9e2ZlZWRiYWNrLmlkfSBmZWVkYmFjaz17ZmVlZGJhY2t9IC8+XG4gICAgICAgICAgKSl9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvb3Q7XG4iLCJpbXBvcnQgeyBRdWVyeUNsaWVudCwgUXVlcnlDbGllbnRQcm92aWRlciB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCBSb290IGZyb20gXCIuL3BhZ2VzL1Jvb3RcIjtcbmltcG9ydCBcIi4vaW5kZXguY3NzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KCk7XG5cbmZ1bmN0aW9uIEFwcCgpIHtcbiAgcmV0dXJuIChcbiAgICA8UXVlcnlDbGllbnRQcm92aWRlciBjbGllbnQ9e3F1ZXJ5Q2xpZW50fT5cbiAgICAgIDxSb290IC8+XG4gICAgPC9RdWVyeUNsaWVudFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBBcHA7XG4iXSwibmFtZXMiOlsiX2pzeHMiLCJfanN4IiwiX0ZyYWdtZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3ZCLElBQUEsT0FBTyxFQUFFLHVCQUF1QjtBQUNqQyxDQUFBLENBQUM7QUFFRixHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQzFCLE9BQU8sTUFBTSxLQUFJOzs7Ozs7O0FBT2YsSUFBQSxPQUFPLE1BQU07QUFDZixDQUFDLEVBQ0QsQ0FBQyxLQUFLLEtBQUk7QUFDUixJQUFBLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDOUIsQ0FBQyxDQUNGOztBQ2ZNLE1BQU0sY0FBYyxHQUFHLFlBQVc7SUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFhLFdBQVcsQ0FBQztJQUN2RCxPQUFPLFFBQVEsQ0FBQyxJQUFJO0FBQ3RCLENBQUM7QUFFTSxNQUFNLGNBQWMsR0FBRyxPQUFPLFFBQXlCLEtBQUk7SUFDaEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUM7SUFDdEQsT0FBTyxRQUFRLENBQUMsSUFBSTtBQUN0QixDQUFDO0FBT00sTUFBTSxjQUFjLEdBQUcsT0FBTyxRQUFrQixLQUFJO0FBQ3pELElBQUEsTUFBTSxRQUFRLEdBQUcsTUFBTSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUEsVUFBQSxFQUFhLFFBQVEsQ0FBQyxFQUFFLENBQUEsQ0FBRSxDQUFDO0lBQzdELE9BQU8sUUFBUSxDQUFDLElBQUk7QUFDdEIsQ0FBQztBQUVNLE1BQU0sWUFBWSxHQUFHLE1BQUs7QUFDL0IsSUFBQSxPQUFPLFFBQVEsQ0FBQztRQUNkLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQztBQUN2QixRQUFBLE9BQU8sRUFBRSxjQUFjO0FBQ3hCLEtBQUEsQ0FBQztBQUNKLENBQUM7QUFFTSxNQUFNLGlCQUFpQixHQUFHLE1BQUs7QUFDcEMsSUFBQSxNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUU7QUFDcEMsSUFBQSxPQUFPLFdBQVcsQ0FBQztBQUNqQixRQUFBLFVBQVUsRUFBRSxjQUFjO1FBQzFCLFNBQVMsRUFBRSxNQUFLO0FBQ2QsWUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO0FBRS9CLFlBQUEsT0FBTyxXQUFXLENBQUMsaUJBQWlCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1NBQ2xFO0FBQ0YsS0FBQSxDQUFDO0FBQ0osQ0FBQztBQVlNLE1BQU0saUJBQWlCLEdBQUcsTUFBSztBQUNwQyxJQUFBLE1BQU0sV0FBVyxHQUFHLGNBQWMsRUFBRTtBQUNwQyxJQUFBLE9BQU8sV0FBVyxDQUFDO0FBQ2pCLFFBQUEsVUFBVSxFQUFFLGNBQWM7UUFDMUIsU0FBUyxFQUFFLE1BQUs7QUFDZCxZQUFBLE9BQU8sV0FBVyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztTQUNsRTtBQUNGLEtBQUEsQ0FBQztBQUNKLENBQUM7O0FDeERNLE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBRSxRQUFRLEVBQTBCLEtBQUk7QUFDbkUsSUFBQSxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQXFCLElBQUksQ0FBQztJQUN0RCxNQUFNLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLGlCQUFpQixFQUFFO0FBQ3RELElBQUEsTUFBTSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUU3RCxTQUFTLENBQUMsTUFBSztRQUNiLE1BQU0sWUFBWSxHQUFHLE1BQUs7WUFDeEIsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVDOztZQUVGLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUU7QUFDaEUsWUFBQSxXQUFXLENBQUM7Z0JBQ1YsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTztnQkFDakQsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTztBQUNwRCxhQUFBLENBQUM7QUFDSixTQUFDO0FBRUQsUUFBQSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQ3hDLENBQWEsVUFBQSxFQUFBLFFBQVEsQ0FBQyxTQUFTLENBQUksRUFBQSxDQUFBLENBQ3BDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFFL0MsSUFBSSxPQUFPLEVBQUU7QUFDWCxZQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBRXBCLFlBQUEsYUFBYSxDQUFDLE9BQU8sR0FBRyxPQUFPO0FBQy9CLFlBQUEsWUFBWSxFQUFFO0FBQ2QsWUFBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQzs7QUFHakQsUUFBQSxPQUFPLE1BQUs7WUFDVixJQUFJLE9BQU8sRUFBRTtBQUNYLGdCQUFBLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDOztBQUV0RCxTQUFDO0FBQ0gsS0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFZCxNQUFNLG9CQUFvQixHQUFHLE1BQUs7UUFDaEMsY0FBYyxDQUFDLFFBQVEsQ0FBQztBQUMxQixLQUFDOztJQUdELElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO0FBQzVDLFFBQUEsT0FBTyxJQUFJOztBQUdiLElBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDOztBQUcvQixJQUFBLE9BQU8sWUFBWSxDQUNqQkEsSUFDRSxDQUFBLEtBQUEsRUFBQSxFQUFBLEtBQUssRUFBRTtBQUNMLFlBQUEsUUFBUSxFQUFFLFVBQVU7WUFDcEIsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHO1lBQ2pCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtBQUNuQixZQUFBLEtBQUssRUFBRSxPQUFPO0FBQ2QsWUFBQSxNQUFNLEVBQUUsT0FBTztBQUNmLFlBQUEsTUFBTSxFQUFFLGlCQUFpQjtBQUN6QixZQUFBLGVBQWUsRUFBRSxPQUFPO1NBQ3pCLEVBRUQsUUFBQSxFQUFBLENBQUFBLElBQUEsQ0FBQSxLQUFBLEVBQUEsRUFDRSxLQUFLLEVBQUU7QUFDTCxvQkFBQSxPQUFPLEVBQUUsTUFBTTtBQUNmLG9CQUFBLGNBQWMsRUFBRSxlQUFlO0FBQy9CLG9CQUFBLFVBQVUsRUFBRSxRQUFRO0FBQ3JCLGlCQUFBLEVBQUEsUUFBQSxFQUFBLENBRURBLElBQ0UsQ0FBQSxLQUFBLEVBQUEsRUFBQSxRQUFBLEVBQUEsQ0FBQUMsR0FBQSxDQUFBLEdBQUEsRUFBQSxFQUFHLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSx5QkFBYyxFQUNoRUQsSUFBQSxDQUFBLEdBQUEsRUFBQSxFQUFHLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFDZixRQUFBLEVBQUEsQ0FBQSxjQUFBLEVBQUEsUUFBUSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsQ0FDOUMsRUFBQSxDQUFBLEVBQ0pDLFdBQUcsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFDLFFBQVEsRUFFeEMsUUFBQSxFQUFBLGlCQUFBLEVBQUEsQ0FBQSxDQUFBLEVBQUEsQ0FDQSxFQUNOQSxHQUFBLENBQUEsUUFBQSxFQUFBLEVBQVEsT0FBTyxFQUFFLG9CQUFvQixFQUFpQixRQUFBLEVBQUEsUUFBQSxFQUFBLENBQUEsQ0FBQSxFQUFBLENBQ2xELEVBQ05BLEdBQUcsQ0FBQSxHQUFBLEVBQUEsRUFBQSxLQUFLLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQUcsUUFBUSxDQUFDLE9BQU8sRUFBQSxDQUFLLElBQ2xELEVBQ04sUUFBUSxDQUFDLElBQUksQ0FDZDtBQUNILENBQUM7O0FDbkZELFNBQVMsSUFBSSxHQUFBO0FBQ1gsSUFBQSxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQ2pELE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsWUFBWSxFQUFFO0FBRTFDLElBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUM7SUFFeEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxpQkFBaUIsRUFBRTtJQUV0RCxTQUFTLENBQUMsTUFBSztRQUNiLElBQUksTUFBTSxFQUFFO0FBQ1YsWUFBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQztBQUNsRCxZQUFBLE9BQU8sTUFBSztBQUNWLGdCQUFBLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDO0FBQ3hELGFBQUM7O0FBRUwsS0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFWixJQUFBLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBb0IsS0FBSTtBQUM5QyxRQUFBLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDMUIsU0FBUyxDQUFDLEtBQUssQ0FBQzs7QUFFcEIsS0FBQztBQUVELElBQUEsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFhLEtBQUk7UUFDcEMsQ0FBQyxDQUFDLGVBQWUsRUFBRTtRQUNuQixDQUFDLENBQUMsY0FBYyxFQUFFO0FBQ2xCLFFBQUEsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQTRCO0FBQzNDLFFBQUEsTUFBTSxTQUFTLEdBQUcsQ0FBQSxJQUFJLGFBQUosSUFBSSxLQUFBLFNBQUEsR0FBQSxTQUFBLEdBQUosSUFBSSxDQUFFLE9BQU8sQ0FBQyxFQUFFLEtBQUksRUFBRTtRQUN4QyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQzNDLENBQWEsVUFBQSxFQUFBLFNBQVMsQ0FBSSxFQUFBLENBQUEsQ0FDM0I7UUFFRCxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUU5QyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQW1CLENBQUM7QUFFaEUsUUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTztBQUNuQixRQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPO0FBQ25CLFFBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sV0FBVyxHQUFvQjtZQUNuQyxDQUFDO1lBQ0QsQ0FBQztBQUNELFlBQUEsT0FBTyxFQUFFLE1BQU07QUFDZixZQUFBLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVE7WUFDOUIsU0FBUztZQUNULFlBQVk7U0FDYjtBQUNELFFBQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDeEIsY0FBYyxDQUFDLFdBQVcsQ0FBQztRQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7UUFDaEQsUUFBUSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDO1FBQ3hELFNBQVMsQ0FBQyxJQUFJLENBQUM7QUFDakIsS0FBQztBQUVELElBQUEsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQXNDLEtBQUk7UUFDdEUsQ0FBQyxDQUFDLGVBQWUsRUFBRTtRQUNuQixRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7UUFDN0MsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDO0FBQ3ZELEtBQUM7QUFFRCxJQUFBLFFBQ0VELElBQUEsQ0FBQUUsUUFBQSxFQUFBLEVBQUEsUUFBQSxFQUFBLENBQ0VELEdBQ0UsQ0FBQSxLQUFBLEVBQUEsRUFBQSxLQUFLLEVBQUU7QUFDTCxvQkFBQSxRQUFRLEVBQUUsT0FBTztBQUNqQixvQkFBQSxHQUFHLEVBQUUsb0JBQW9CO0FBQ3pCLG9CQUFBLElBQUksRUFBRSxxQkFBcUI7QUFDM0Isb0JBQUEsS0FBSyxFQUFFLE9BQU87QUFDZCxvQkFBQSxNQUFNLEVBQUUsTUFBTTtBQUNkLG9CQUFBLE1BQU0sRUFBRSxPQUFPO0FBQ2Ysb0JBQUEsZUFBZSxFQUFFLFNBQVM7QUFDMUIsb0JBQUEsS0FBSyxFQUFFLE9BQU87QUFDZCxvQkFBQSxZQUFZLEVBQUUsQ0FBQztBQUNoQixpQkFBQSxFQUNELE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFBLFFBQUEsRUFBQSxlQUFBLEVBQUEsQ0FHN0IsRUFDTkEsR0FBQSxDQUFBLFFBQUEsRUFBQSxFQUNFLEtBQUssRUFBRTtBQUNMLG9CQUFBLFFBQVEsRUFBRSxPQUFPO0FBQ2pCLG9CQUFBLEdBQUcsRUFBRSxxQkFBcUI7QUFDMUIsb0JBQUEsSUFBSSxFQUFFLHFCQUFxQjtBQUMzQixvQkFBQSxLQUFLLEVBQUUsT0FBTztBQUNkLG9CQUFBLE1BQU0sRUFBRSxNQUFNO0FBQ2Qsb0JBQUEsTUFBTSxFQUFFLE9BQU87QUFDZixvQkFBQSxlQUFlLEVBQUUsU0FBUztBQUMxQixvQkFBQSxLQUFLLEVBQUUsT0FBTztBQUNkLG9CQUFBLFlBQVksRUFBRSxDQUFDO0FBQ2hCLGlCQUFBLEVBQ0QsT0FBTyxFQUFFLG9CQUFvQixFQUFBLFFBQUEsRUFBQSxjQUFBLEVBQUEsQ0FHdEIsRUFDUixNQUFNO2dCQUNMLFNBQVM7Z0JBQ1Q7QUFDRyxxQkFBQSxNQUFNLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVE7cUJBQy9ELEdBQUcsQ0FBQyxDQUFDLFFBQVEsTUFDWkEsR0FBQyxDQUFBLFlBQVksRUFBbUIsRUFBQSxRQUFRLEVBQUUsUUFBUSxFQUFBLEVBQS9CLFFBQVEsQ0FBQyxFQUFFLENBQXdCLENBQ3ZELENBQUMsQ0FDTCxFQUFBLENBQUE7QUFFUDs7QUN2R0EsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUU7QUFFckMsU0FBUyxHQUFHLEdBQUE7QUFDVixJQUFBLFFBQ0VBLEdBQUEsQ0FBQyxtQkFBbUIsRUFBQSxFQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUEsUUFBQSxFQUN0Q0EsR0FBQyxDQUFBLElBQUksRUFBRyxFQUFBLENBQUEsRUFBQSxDQUNZO0FBRTFCOzs7OyJ9
|
package/dist/src/index.css
CHANGED
package/package.json
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "galadrim-feedback",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.4",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs.js",
|
|
7
7
|
"module": "dist/index.es.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist/",
|
|
11
|
+
"assets/"
|
|
12
|
+
],
|
|
9
13
|
"scripts": {
|
|
10
14
|
"build": "rollup -c",
|
|
11
15
|
"prepublishOnly": "npm run build"
|
|
@@ -25,6 +29,7 @@
|
|
|
25
29
|
"@rollup/plugin-json": "^6.1.0",
|
|
26
30
|
"@rollup/plugin-node-resolve": "^16.0.0",
|
|
27
31
|
"@rollup/plugin-typescript": "^12.1.2",
|
|
32
|
+
"@rollup/plugin-url": "^8.0.2",
|
|
28
33
|
"@types/react": "^18.3.10",
|
|
29
34
|
"@types/react-dom": "^18.3.0",
|
|
30
35
|
"@vitejs/plugin-react": "^4.3.2",
|
|
@@ -36,6 +41,7 @@
|
|
|
36
41
|
"globals": "^15.9.0",
|
|
37
42
|
"postcss": "^8.4.49",
|
|
38
43
|
"rollup": "^4.30.1",
|
|
44
|
+
"rollup-plugin-copy": "^3.5.0",
|
|
39
45
|
"rollup-plugin-node-polyfills": "^0.2.1",
|
|
40
46
|
"rollup-plugin-postcss": "^4.0.2",
|
|
41
47
|
"sass": "^1.83.1",
|
package/eslint.config.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import js from '@eslint/js'
|
|
2
|
-
import globals from 'globals'
|
|
3
|
-
import reactHooks from 'eslint-plugin-react-hooks'
|
|
4
|
-
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
5
|
-
import tseslint from 'typescript-eslint'
|
|
6
|
-
|
|
7
|
-
export default tseslint.config(
|
|
8
|
-
{ ignores: ['dist'] },
|
|
9
|
-
{
|
|
10
|
-
extends: [js.configs.recommended, ...tseslint.configs.recommended],
|
|
11
|
-
files: ['**/*.{ts,tsx}'],
|
|
12
|
-
languageOptions: {
|
|
13
|
-
ecmaVersion: 2020,
|
|
14
|
-
globals: globals.browser,
|
|
15
|
-
},
|
|
16
|
-
plugins: {
|
|
17
|
-
'react-hooks': reactHooks,
|
|
18
|
-
'react-refresh': reactRefresh,
|
|
19
|
-
},
|
|
20
|
-
rules: {
|
|
21
|
-
...reactHooks.configs.recommended.rules,
|
|
22
|
-
'react-refresh/only-export-components': [
|
|
23
|
-
'warn',
|
|
24
|
-
{ allowConstantExport: true },
|
|
25
|
-
],
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
)
|
package/rollup.config.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
// rollup.config.js
|
|
2
|
-
import commonjs from "@rollup/plugin-commonjs";
|
|
3
|
-
import resolve from "@rollup/plugin-node-resolve";
|
|
4
|
-
import typescript from "@rollup/plugin-typescript";
|
|
5
|
-
import postcss from "rollup-plugin-postcss";
|
|
6
|
-
import json from "@rollup/plugin-json";
|
|
7
|
-
import nodePolyfills from "rollup-plugin-node-polyfills";
|
|
8
|
-
import pkg from "./package.json" assert { type: "json" };
|
|
9
|
-
|
|
10
|
-
export default {
|
|
11
|
-
input: "src/App.tsx", // Your entry point
|
|
12
|
-
output: [
|
|
13
|
-
{
|
|
14
|
-
file: pkg.main, // dist/index.cjs.js
|
|
15
|
-
format: "cjs",
|
|
16
|
-
sourcemap: "inline",
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
file: pkg.module, // dist/index.es.js
|
|
20
|
-
format: "es",
|
|
21
|
-
sourcemap: "inline",
|
|
22
|
-
},
|
|
23
|
-
],
|
|
24
|
-
external: [
|
|
25
|
-
// Peer dependencies (don’t bundle React, ReactDOM, etc.)
|
|
26
|
-
...Object.keys(pkg.peerDependencies || {}),
|
|
27
|
-
],
|
|
28
|
-
plugins: [
|
|
29
|
-
resolve(),
|
|
30
|
-
nodePolyfills(),
|
|
31
|
-
commonjs(),
|
|
32
|
-
postcss({
|
|
33
|
-
extract: "src/index.css",
|
|
34
|
-
}),
|
|
35
|
-
typescript({
|
|
36
|
-
tsconfig: "./tsconfig.json",
|
|
37
|
-
}),
|
|
38
|
-
json(),
|
|
39
|
-
],
|
|
40
|
-
};
|
package/src/App.tsx
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
2
|
-
import Root from "./pages/Root";
|
|
3
|
-
import "./index.css";
|
|
4
|
-
import React from "react";
|
|
5
|
-
|
|
6
|
-
const queryClient = new QueryClient();
|
|
7
|
-
|
|
8
|
-
function App() {
|
|
9
|
-
return (
|
|
10
|
-
<QueryClientProvider client={queryClient}>
|
|
11
|
-
<Root />
|
|
12
|
-
</QueryClientProvider>
|
|
13
|
-
);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export default App;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import classNames from "classnames";
|
|
2
|
-
|
|
3
|
-
export const IconButton = ({
|
|
4
|
-
text,
|
|
5
|
-
iconPath,
|
|
6
|
-
twButtonBackgroundColor,
|
|
7
|
-
onClick,
|
|
8
|
-
}: {
|
|
9
|
-
text: string;
|
|
10
|
-
iconPath: string;
|
|
11
|
-
twButtonBackgroundColor: string;
|
|
12
|
-
onClick: () => void;
|
|
13
|
-
}) => {
|
|
14
|
-
return (
|
|
15
|
-
<button
|
|
16
|
-
onClick={onClick}
|
|
17
|
-
className={classNames(
|
|
18
|
-
"flex-shrink-0 flex flex-row items-center px-4 py-2 gap-2 rounded-[8px] text-white font-[500] ",
|
|
19
|
-
twButtonBackgroundColor,
|
|
20
|
-
"hover:bg-opacity-80"
|
|
21
|
-
)}
|
|
22
|
-
>
|
|
23
|
-
<img src={iconPath} className="w-6 h-6" />
|
|
24
|
-
{text}
|
|
25
|
-
</button>
|
|
26
|
-
);
|
|
27
|
-
};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { IconButton } from "./IconButton";
|
|
2
|
-
|
|
3
|
-
export const PlusButton = ({
|
|
4
|
-
text,
|
|
5
|
-
twButtonBackgroundColor,
|
|
6
|
-
onClick,
|
|
7
|
-
}: {
|
|
8
|
-
text: string;
|
|
9
|
-
twButtonBackgroundColor: string;
|
|
10
|
-
onClick: () => void;
|
|
11
|
-
}) => {
|
|
12
|
-
return (
|
|
13
|
-
<IconButton
|
|
14
|
-
text={text}
|
|
15
|
-
iconPath="/plus.svg"
|
|
16
|
-
twButtonBackgroundColor={twButtonBackgroundColor}
|
|
17
|
-
onClick={onClick}
|
|
18
|
-
/>
|
|
19
|
-
);
|
|
20
|
-
};
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { createPortal } from "react-dom";
|
|
2
|
-
import { useEffect, useRef, useState } from "react";
|
|
3
|
-
import { Feedback } from "../../types/types";
|
|
4
|
-
import { useDeleteFeedback } from "../../services/feedback";
|
|
5
|
-
|
|
6
|
-
export const FeedbackItem = ({ feedback }: { feedback: Feedback }) => {
|
|
7
|
-
const targetElement = useRef<HTMLElement | null>(null);
|
|
8
|
-
const { mutate: deleteFeedback } = useDeleteFeedback();
|
|
9
|
-
const [position, setPosition] = useState({ top: 0, left: 0 });
|
|
10
|
-
|
|
11
|
-
useEffect(() => {
|
|
12
|
-
const handleResize = () => {
|
|
13
|
-
if (!targetElement || !targetElement.current) {
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
const dimensions = targetElement.current.getBoundingClientRect();
|
|
17
|
-
setPosition({
|
|
18
|
-
top: feedback.y + dimensions.top + window.scrollY,
|
|
19
|
-
left: feedback.x + dimensions.left + window.scrollX,
|
|
20
|
-
});
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
const elements = document.querySelectorAll<HTMLElement>(
|
|
24
|
-
`[data-id="${feedback.elementId}"]`
|
|
25
|
-
);
|
|
26
|
-
const element = elements[feedback.elementIndex];
|
|
27
|
-
|
|
28
|
-
if (element) {
|
|
29
|
-
console.log(element);
|
|
30
|
-
|
|
31
|
-
targetElement.current = element;
|
|
32
|
-
handleResize();
|
|
33
|
-
window.addEventListener("resize", handleResize);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
return () => {
|
|
37
|
-
if (element) {
|
|
38
|
-
window.removeEventListener("resize", handleResize);
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
}, [feedback]);
|
|
42
|
-
|
|
43
|
-
const handleDeleteFeedback = () => {
|
|
44
|
-
deleteFeedback(feedback);
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
// If we haven't found a matching DOM node, don't render anything
|
|
48
|
-
if (!targetElement || !targetElement.current) {
|
|
49
|
-
return null;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
console.log("rendrr", position);
|
|
53
|
-
|
|
54
|
-
// Render this component inside `targetElement` using a Portal
|
|
55
|
-
return createPortal(
|
|
56
|
-
<div
|
|
57
|
-
style={{
|
|
58
|
-
position: "absolute",
|
|
59
|
-
top: position.top,
|
|
60
|
-
left: position.left,
|
|
61
|
-
width: "200px",
|
|
62
|
-
height: "100px",
|
|
63
|
-
border: "1px solid black",
|
|
64
|
-
backgroundColor: "white",
|
|
65
|
-
}}
|
|
66
|
-
>
|
|
67
|
-
<div
|
|
68
|
-
style={{
|
|
69
|
-
display: "flex",
|
|
70
|
-
justifyContent: "space-between",
|
|
71
|
-
alignItems: "center",
|
|
72
|
-
}}
|
|
73
|
-
>
|
|
74
|
-
<div>
|
|
75
|
-
<p style={{ fontSize: "16px", fontWeight: "bold" }}>Feedback</p>
|
|
76
|
-
<p style={{ fontSize: "14px" }}>
|
|
77
|
-
Created at: {feedback.createdAt.toLocaleString()}
|
|
78
|
-
</p>
|
|
79
|
-
<a href={feedback.elementId} target="_blank">
|
|
80
|
-
Go to component
|
|
81
|
-
</a>
|
|
82
|
-
</div>
|
|
83
|
-
<button onClick={handleDeleteFeedback}>Delete</button>
|
|
84
|
-
</div>
|
|
85
|
-
<p style={{ fontSize: "14px" }}>{feedback.comment}</p>
|
|
86
|
-
</div>,
|
|
87
|
-
document.body
|
|
88
|
-
);
|
|
89
|
-
};
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { useRef } from "react";
|
|
2
|
-
|
|
3
|
-
export const Modal = ({
|
|
4
|
-
isVisible,
|
|
5
|
-
closeModal,
|
|
6
|
-
limitWidth = true,
|
|
7
|
-
children,
|
|
8
|
-
}: {
|
|
9
|
-
isVisible: boolean;
|
|
10
|
-
closeModal?: () => void;
|
|
11
|
-
limitWidth?: boolean;
|
|
12
|
-
children: React.ReactNode;
|
|
13
|
-
}) => {
|
|
14
|
-
const resizing = useRef(false);
|
|
15
|
-
|
|
16
|
-
if (!isVisible) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
const width = limitWidth ? "w-[400px]" : "";
|
|
20
|
-
return (
|
|
21
|
-
<div
|
|
22
|
-
className="modal"
|
|
23
|
-
onMouseDown={(e) => {
|
|
24
|
-
const target = e.target as HTMLElement;
|
|
25
|
-
if (target.tagName === "TEXTAREA") {
|
|
26
|
-
resizing.current = true;
|
|
27
|
-
}
|
|
28
|
-
}}
|
|
29
|
-
onMouseUp={() => {
|
|
30
|
-
setTimeout(() => {
|
|
31
|
-
resizing.current = false;
|
|
32
|
-
}, 100);
|
|
33
|
-
}}
|
|
34
|
-
onClick={(e) => {
|
|
35
|
-
if (closeModal && e.target === e.currentTarget && !resizing.current) {
|
|
36
|
-
closeModal();
|
|
37
|
-
}
|
|
38
|
-
}}
|
|
39
|
-
>
|
|
40
|
-
<div className={`${width} bg-white rounded-lg`}>{children}</div>
|
|
41
|
-
</div>
|
|
42
|
-
);
|
|
43
|
-
};
|
package/src/index.css
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Dispatch, useEffect } from "react";
|
|
2
|
-
import { FeedbackItem } from "../components/feedback/FeedbackItem";
|
|
3
|
-
import { useFeedbacks } from "../services/feedback";
|
|
4
|
-
import { Feedback } from "../types/types";
|
|
5
|
-
|
|
6
|
-
export const FeedbacksCanvas = ({
|
|
7
|
-
isOpen,
|
|
8
|
-
setIsOpen,
|
|
9
|
-
feedbacks,
|
|
10
|
-
}: {
|
|
11
|
-
isOpen: boolean;
|
|
12
|
-
setIsOpen: Dispatch<React.SetStateAction<boolean>>;
|
|
13
|
-
feedbacks: Feedback[];
|
|
14
|
-
}) => {
|
|
15
|
-
if (!isOpen) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return (
|
|
20
|
-
<div
|
|
21
|
-
style={{
|
|
22
|
-
zIndex: 2147483647, // Maximum zIndex
|
|
23
|
-
position: "fixed",
|
|
24
|
-
top: 0,
|
|
25
|
-
left: 0,
|
|
26
|
-
width: "100vw",
|
|
27
|
-
height: "100vh",
|
|
28
|
-
}}
|
|
29
|
-
>
|
|
30
|
-
{feedbacks &&
|
|
31
|
-
feedbacks
|
|
32
|
-
.filter((feedback) => feedback.path === window.location.pathname)
|
|
33
|
-
.map((feedback) => (
|
|
34
|
-
<FeedbackItem key={feedback.id} feedback={feedback} />
|
|
35
|
-
))}
|
|
36
|
-
</div>
|
|
37
|
-
);
|
|
38
|
-
};
|
package/src/pages/Overlay.tsx
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
2
|
-
import { Dispatch } from "react";
|
|
3
|
-
import { FeedbacksCanvas } from "./FeedbacksCanvas";
|
|
4
|
-
import { Feedback } from "../types/types";
|
|
5
|
-
|
|
6
|
-
export const Overlay = ({
|
|
7
|
-
isOpen,
|
|
8
|
-
setIsOpen,
|
|
9
|
-
queryClient,
|
|
10
|
-
feedbacks,
|
|
11
|
-
}: {
|
|
12
|
-
isOpen: boolean;
|
|
13
|
-
setIsOpen: Dispatch<React.SetStateAction<boolean>>;
|
|
14
|
-
queryClient: QueryClient;
|
|
15
|
-
feedbacks: Feedback[];
|
|
16
|
-
}) => {
|
|
17
|
-
return (
|
|
18
|
-
<QueryClientProvider client={queryClient}>
|
|
19
|
-
<FeedbacksCanvas
|
|
20
|
-
isOpen={isOpen}
|
|
21
|
-
setIsOpen={setIsOpen}
|
|
22
|
-
feedbacks={feedbacks}
|
|
23
|
-
/>
|
|
24
|
-
</QueryClientProvider>
|
|
25
|
-
);
|
|
26
|
-
};
|
package/src/pages/Root.tsx
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { QueryClient } from "@tanstack/react-query";
|
|
2
|
-
import React, { useEffect } from "react";
|
|
3
|
-
import ReactDOM from "react-dom";
|
|
4
|
-
import { Overlay } from "./Overlay";
|
|
5
|
-
import { useCreateFeedback, useFeedbacks } from "../services/feedback";
|
|
6
|
-
import { FeedbackPayload } from "../types/types";
|
|
7
|
-
import { FeedbackItem } from "../components/feedback/FeedbackItem";
|
|
8
|
-
|
|
9
|
-
const queryClient = new QueryClient();
|
|
10
|
-
|
|
11
|
-
function Root() {
|
|
12
|
-
const [isOpen, setIsOpen] = React.useState(false);
|
|
13
|
-
const { data: feedbacks } = useFeedbacks();
|
|
14
|
-
|
|
15
|
-
console.log("feedbacks 1 : ", feedbacks);
|
|
16
|
-
|
|
17
|
-
const [creatingFeedback, setCreatingFeedback] = React.useState(false);
|
|
18
|
-
|
|
19
|
-
const { mutate: createFeedback } = useCreateFeedback();
|
|
20
|
-
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (isOpen) {
|
|
23
|
-
console.log("Opening feedbacks canvas");
|
|
24
|
-
|
|
25
|
-
window.addEventListener("keydown", handleKeyPress);
|
|
26
|
-
return () => {
|
|
27
|
-
window.removeEventListener("keypress", handleKeyPress);
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
}, [isOpen]);
|
|
31
|
-
|
|
32
|
-
const handleKeyPress = (event: KeyboardEvent) => {
|
|
33
|
-
console.log(event.key);
|
|
34
|
-
|
|
35
|
-
if (event.key === "Escape") {
|
|
36
|
-
setIsOpen(false);
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const handleClick = (e: any) => {
|
|
41
|
-
console.log("click");
|
|
42
|
-
|
|
43
|
-
e.stopPropagation();
|
|
44
|
-
e.preventDefault();
|
|
45
|
-
const node = e.target as HTMLElement | null;
|
|
46
|
-
const elementId = node?.dataset.id || "";
|
|
47
|
-
const allElements = document.querySelectorAll<HTMLElement>(
|
|
48
|
-
`[data-id="${elementId}"]`
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
const arrAllElements = Array.from(allElements);
|
|
52
|
-
|
|
53
|
-
const elementIndex = arrAllElements.indexOf(node as HTMLElement);
|
|
54
|
-
|
|
55
|
-
const x = e.offsetX;
|
|
56
|
-
const y = e.offsetY;
|
|
57
|
-
console.log(e);
|
|
58
|
-
const newFeedback: FeedbackPayload = {
|
|
59
|
-
x,
|
|
60
|
-
y,
|
|
61
|
-
screenWidth: window.innerWidth,
|
|
62
|
-
screenHeight: window.innerHeight,
|
|
63
|
-
comment: "test",
|
|
64
|
-
path: window.location.pathname,
|
|
65
|
-
elementId,
|
|
66
|
-
elementIndex,
|
|
67
|
-
};
|
|
68
|
-
console.log(newFeedback);
|
|
69
|
-
createFeedback(newFeedback);
|
|
70
|
-
document.body.classList.remove("comment-cursor");
|
|
71
|
-
document.removeEventListener("click", handleClick, true);
|
|
72
|
-
setCreatingFeedback(false);
|
|
73
|
-
setIsOpen(true);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
const handleCreateFeedback = (e: React.MouseEvent<HTMLButtonElement>) => {
|
|
77
|
-
e.stopPropagation();
|
|
78
|
-
setCreatingFeedback(true);
|
|
79
|
-
document.body.classList.add("comment-cursor");
|
|
80
|
-
document.addEventListener("click", handleClick, true);
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
return (
|
|
84
|
-
<>
|
|
85
|
-
<div
|
|
86
|
-
style={{
|
|
87
|
-
position: "fixed",
|
|
88
|
-
top: "calc(100vh - 62px)",
|
|
89
|
-
left: "calc(100vw - 124px)",
|
|
90
|
-
width: "100px",
|
|
91
|
-
height: "50px",
|
|
92
|
-
zIndex: 1000000,
|
|
93
|
-
backgroundColor: "#0085FF",
|
|
94
|
-
color: "white",
|
|
95
|
-
borderRadius: 4,
|
|
96
|
-
}}
|
|
97
|
-
onClick={() => setIsOpen(!isOpen)}
|
|
98
|
-
>
|
|
99
|
-
Show Feedback
|
|
100
|
-
</div>
|
|
101
|
-
<button
|
|
102
|
-
style={{
|
|
103
|
-
position: "fixed",
|
|
104
|
-
top: "calc(100vh - 122px)",
|
|
105
|
-
left: "calc(100vw - 124px)",
|
|
106
|
-
width: "100px",
|
|
107
|
-
height: "50px",
|
|
108
|
-
zIndex: 1000000,
|
|
109
|
-
backgroundColor: "#0085FF",
|
|
110
|
-
color: "white",
|
|
111
|
-
borderRadius: 4,
|
|
112
|
-
}}
|
|
113
|
-
onClick={handleCreateFeedback}
|
|
114
|
-
>
|
|
115
|
-
New Feedback
|
|
116
|
-
</button>
|
|
117
|
-
{isOpen &&
|
|
118
|
-
feedbacks &&
|
|
119
|
-
feedbacks
|
|
120
|
-
.filter((feedback) => feedback.path === window.location.pathname)
|
|
121
|
-
.map((feedback) => (
|
|
122
|
-
<FeedbackItem key={feedback.id} feedback={feedback} />
|
|
123
|
-
))}
|
|
124
|
-
</>
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export default Root;
|
package/src/services/api.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import axios from "axios";
|
|
2
|
-
|
|
3
|
-
const api = axios.create({
|
|
4
|
-
baseURL: "http://localhost:3000",
|
|
5
|
-
});
|
|
6
|
-
|
|
7
|
-
api.interceptors.request.use(
|
|
8
|
-
async (config) => {
|
|
9
|
-
// const token = localStorage.getItem("dashboardGaladrimAuthToken");
|
|
10
|
-
// if (token && config.headers) {
|
|
11
|
-
// config.headers["x-dashboard-token"] = token;
|
|
12
|
-
// } else {
|
|
13
|
-
// delete api.defaults.headers.common.Authorization;
|
|
14
|
-
// }
|
|
15
|
-
return config;
|
|
16
|
-
},
|
|
17
|
-
(error) => {
|
|
18
|
-
return Promise.reject(error);
|
|
19
|
-
}
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
export default api;
|
package/src/services/feedback.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
2
|
-
import api from "./api";
|
|
3
|
-
import { Feedback, FeedbackPayload } from "../types/types";
|
|
4
|
-
|
|
5
|
-
export const fetchFeedbacks = async () => {
|
|
6
|
-
const response = await api.get<Feedback[]>("/feedback");
|
|
7
|
-
return response.data;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export const createFeedback = async (feedback: FeedbackPayload) => {
|
|
11
|
-
const response = await api.post("/feedback", feedback);
|
|
12
|
-
return response.data;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const updateFeedback = async (feedback: FeedbackPayload) => {
|
|
16
|
-
const response = await api.put("/feedback", feedback);
|
|
17
|
-
return response.data;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export const deleteFeedback = async (feedback: Feedback) => {
|
|
21
|
-
const response = await api.delete(`/feedback/${feedback.id}`);
|
|
22
|
-
return response.data;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export const useFeedbacks = () => {
|
|
26
|
-
return useQuery({
|
|
27
|
-
queryKey: ["feedbacks"],
|
|
28
|
-
queryFn: fetchFeedbacks,
|
|
29
|
-
});
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
export const useCreateFeedback = () => {
|
|
33
|
-
const queryClient = useQueryClient();
|
|
34
|
-
return useMutation({
|
|
35
|
-
mutationFn: createFeedback,
|
|
36
|
-
onSuccess: () => {
|
|
37
|
-
console.log("Feedback created");
|
|
38
|
-
|
|
39
|
-
return queryClient.invalidateQueries({ queryKey: ["feedbacks"] });
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export const useUpdateFeedback = () => {
|
|
45
|
-
const queryClient = useQueryClient();
|
|
46
|
-
return useMutation({
|
|
47
|
-
mutationFn: updateFeedback,
|
|
48
|
-
onSuccess: () => {
|
|
49
|
-
return queryClient.invalidateQueries({ queryKey: ["feedbacks"] });
|
|
50
|
-
},
|
|
51
|
-
});
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
export const useDeleteFeedback = () => {
|
|
55
|
-
const queryClient = useQueryClient();
|
|
56
|
-
return useMutation({
|
|
57
|
-
mutationFn: deleteFeedback,
|
|
58
|
-
onSuccess: () => {
|
|
59
|
-
return queryClient.invalidateQueries({ queryKey: ["feedbacks"] });
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
};
|
package/src/types/types.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export interface FeedbackPayload {
|
|
2
|
-
x: number;
|
|
3
|
-
y: number;
|
|
4
|
-
screenWidth: number;
|
|
5
|
-
screenHeight: number;
|
|
6
|
-
elementId: string;
|
|
7
|
-
elementIndex: number;
|
|
8
|
-
comment: string;
|
|
9
|
-
path: string;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface Feedback extends FeedbackPayload {
|
|
13
|
-
id: string;
|
|
14
|
-
createdAt: Date;
|
|
15
|
-
updatedAt: Date;
|
|
16
|
-
}
|
package/tailwind.config.js
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
/** @type {import('tailwindcss').Config} */
|
|
2
|
-
export default {
|
|
3
|
-
content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"],
|
|
4
|
-
theme: {
|
|
5
|
-
extend: {
|
|
6
|
-
colors: {
|
|
7
|
-
gray: {
|
|
8
|
-
50: "#F2F2F2",
|
|
9
|
-
75: "#F4F5F7",
|
|
10
|
-
100: "#E2E8F0",
|
|
11
|
-
200: "#EAECF0",
|
|
12
|
-
300: "#676D78",
|
|
13
|
-
400: "#343D4B",
|
|
14
|
-
500: "#010C1E",
|
|
15
|
-
600: "#475467",
|
|
16
|
-
700: "#CBD5E1",
|
|
17
|
-
900: "#101828",
|
|
18
|
-
},
|
|
19
|
-
blue: {
|
|
20
|
-
50: "#F5FAFF",
|
|
21
|
-
100: "#EBF5FF",
|
|
22
|
-
500: "#0085FF",
|
|
23
|
-
},
|
|
24
|
-
red: {
|
|
25
|
-
100: "#FFD3E0",
|
|
26
|
-
500: "#FF2462",
|
|
27
|
-
},
|
|
28
|
-
rose: {
|
|
29
|
-
100: "#FFD3E0",
|
|
30
|
-
200: "#FFA7C0",
|
|
31
|
-
},
|
|
32
|
-
orange: {
|
|
33
|
-
50: "#FEF6EE",
|
|
34
|
-
200: "#F9DBAF",
|
|
35
|
-
700: "#B93815",
|
|
36
|
-
},
|
|
37
|
-
green: {
|
|
38
|
-
50: "#ECFDF3",
|
|
39
|
-
200: "#ABEFC6",
|
|
40
|
-
700: "#067647",
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
plugins: [],
|
|
46
|
-
};
|
package/tsconfig.json
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2017",
|
|
4
|
-
"module": "ESNext",
|
|
5
|
-
"jsx": "react-jsx",
|
|
6
|
-
// Generate type definitions
|
|
7
|
-
"declaration": true,
|
|
8
|
-
"declarationDir": "dist/types",
|
|
9
|
-
"outDir": "dist",
|
|
10
|
-
"moduleResolution": "node",
|
|
11
|
-
"isolatedModules": true,
|
|
12
|
-
"esModuleInterop": true,
|
|
13
|
-
"skipLibCheck": true,
|
|
14
|
-
"strict": true
|
|
15
|
-
},
|
|
16
|
-
"include": ["src"],
|
|
17
|
-
"exclude": ["node_modules", "**/*.test.*"]
|
|
18
|
-
}
|