utopia-ui 3.0.64 → 3.0.65
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 +808 -387
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +19 -18
- package/dist/index.esm.js +478 -75
- package/dist/index.esm.js.map +1 -1
- package/dist/types/src/Components/AppShell/AppShell.d.ts +1 -0
- package/dist/types/src/Components/AppShell/Content.d.ts +2 -2
- package/dist/types/src/Components/AppShell/ContextWrapper.d.ts +2 -2
- package/dist/types/src/Components/AppShell/SideBar.d.ts +5 -6
- package/dist/types/src/Components/AppShell/SidebarSubmenu.d.ts +2 -1
- package/dist/types/src/Components/Auth/RequestPasswordPage.d.ts +1 -1
- package/dist/types/src/Components/Auth/useAuth.d.ts +5 -5
- package/dist/types/src/Components/Gaming/hooks/useQuests.d.ts +3 -2
- package/dist/types/src/Components/Input/SelectBox.d.ts +2 -2
- package/dist/types/src/Components/Input/TextAreaInput.d.ts +2 -2
- package/dist/types/src/Components/Input/TextInput.d.ts +2 -2
- package/dist/types/src/Components/Map/hooks/useDebounce.d.ts +1 -1
- package/dist/types/src/Components/Map/hooks/usePermissions.d.ts +1 -1
- package/package.json +5 -5
package/dist/index.cjs
CHANGED
@@ -4,7 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var leaflet = require('leaflet');
|
5
5
|
var reactLeaflet = require('react-leaflet');
|
6
6
|
var reactQuery = require('@tanstack/react-query');
|
7
|
-
var
|
7
|
+
var React = require('react');
|
8
8
|
var reactRouterDom = require('react-router-dom');
|
9
9
|
var reactToastify = require('react-toastify');
|
10
10
|
require('leaflet/dist/leaflet.css');
|
@@ -27,6 +27,25 @@ var reactImageCrop = require('react-image-crop');
|
|
27
27
|
require('react-image-crop/dist/ReactCrop.css');
|
28
28
|
var reactColorful = require('react-colorful');
|
29
29
|
|
30
|
+
function _interopNamespaceDefault(e) {
|
31
|
+
var n = Object.create(null);
|
32
|
+
if (e) {
|
33
|
+
Object.keys(e).forEach(function (k) {
|
34
|
+
if (k !== 'default') {
|
35
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
36
|
+
Object.defineProperty(n, k, d.get ? d : {
|
37
|
+
enumerable: true,
|
38
|
+
get: function () { return e[k]; }
|
39
|
+
});
|
40
|
+
}
|
41
|
+
});
|
42
|
+
}
|
43
|
+
n.default = e;
|
44
|
+
return Object.freeze(n);
|
45
|
+
}
|
46
|
+
|
47
|
+
var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
48
|
+
|
30
49
|
function styleInject(css, ref) {
|
31
50
|
if ( ref === void 0 ) ref = {};
|
32
51
|
var insertAt = ref.insertAt;
|
@@ -54,54 +73,55 @@ function styleInject(css, ref) {
|
|
54
73
|
}
|
55
74
|
}
|
56
75
|
|
57
|
-
var css_248z$4 = "*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}/*\n! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: Helvetica, sans-serif, Roboto; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n\n:root,\n[data-theme] {\n background-color: var(--fallback-b1,oklch(var(--b1)/1));\n color: var(--fallback-bc,oklch(var(--bc)/1));\n}\n\n@supports not (color: oklch(0% 0 0)) {\n\n :root {\n color-scheme: light;\n --fallback-p: #491eff;\n --fallback-pc: #d4dbff;\n --fallback-s: #ff41c7;\n --fallback-sc: #fff9fc;\n --fallback-a: #00cfbd;\n --fallback-ac: #00100d;\n --fallback-n: #2b3440;\n --fallback-nc: #d7dde4;\n --fallback-b1: #ffffff;\n --fallback-b2: #e5e6e6;\n --fallback-b3: #e5e6e6;\n --fallback-bc: #1f2937;\n --fallback-in: #00b3f0;\n --fallback-inc: #000000;\n --fallback-su: #00ca92;\n --fallback-suc: #000000;\n --fallback-wa: #ffc22d;\n --fallback-wac: #000000;\n --fallback-er: #ff6f70;\n --fallback-erc: #000000;\n }\n\n @media (prefers-color-scheme: dark) {\n\n :root {\n color-scheme: dark;\n --fallback-p: #7582ff;\n --fallback-pc: #050617;\n --fallback-s: #ff71cf;\n --fallback-sc: #190211;\n --fallback-a: #00c7b5;\n --fallback-ac: #000e0c;\n --fallback-n: #2a323c;\n --fallback-nc: #a6adbb;\n --fallback-b1: #1d232a;\n --fallback-b2: #191e24;\n --fallback-b3: #15191e;\n --fallback-bc: #a6adbb;\n --fallback-in: #00b3f0;\n --fallback-inc: #000000;\n --fallback-su: #00ca92;\n --fallback-suc: #000000;\n --fallback-wa: #ffc22d;\n --fallback-wac: #000000;\n --fallback-er: #ff6f70;\n --fallback-erc: #000000;\n }\n }\n}\n\nhtml {\n -webkit-tap-highlight-color: transparent;\n}\n\n* {\n scrollbar-color: color-mix(in oklch, currentColor 35%, transparent) transparent;\n}\n\n*:hover {\n scrollbar-color: color-mix(in oklch, currentColor 60%, transparent) transparent;\n}\n\n:root {\n color-scheme: light;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 89.824% 0.06192 275.75;\n --ac: 15.352% 0.0368 183.61;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --p: 49.12% 0.3096 275.75;\n --s: 69.71% 0.329 342.55;\n --sc: 98.71% 0.0106 342.55;\n --a: 76.76% 0.184 183.61;\n --n: 32.1785% 0.02476 255.701624;\n --nc: 89.4994% 0.011585 252.096176;\n --b1: 100% 0 0;\n --b2: 96.1151% 0 0;\n --b3: 92.4169% 0.00108 197.137559;\n --bc: 27.8078% 0.029596 256.847952;\n}\n\n@media (prefers-color-scheme: dark) {\n\n :root {\n color-scheme: dark;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 13.138% 0.0392 275.75;\n --sc: 14.96% 0.052 342.55;\n --ac: 14.902% 0.0334 183.61;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --p: 65.69% 0.196 275.75;\n --s: 74.8% 0.26 342.55;\n --a: 74.51% 0.167 183.61;\n --n: 31.3815% 0.021108 254.139175;\n --nc: 74.6477% 0.0216 264.435964;\n --b1: 25.3267% 0.015896 252.417568;\n --b2: 23.2607% 0.013807 253.100675;\n --b3: 21.1484% 0.01165 254.087939;\n --bc: 74.6477% 0.0216 264.435964;\n }\n}\n\n[data-theme=light] {\n color-scheme: light;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 89.824% 0.06192 275.75;\n --ac: 15.352% 0.0368 183.61;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --p: 49.12% 0.3096 275.75;\n --s: 69.71% 0.329 342.55;\n --sc: 98.71% 0.0106 342.55;\n --a: 76.76% 0.184 183.61;\n --n: 32.1785% 0.02476 255.701624;\n --nc: 89.4994% 0.011585 252.096176;\n --b1: 100% 0 0;\n --b2: 96.1151% 0 0;\n --b3: 92.4169% 0.00108 197.137559;\n --bc: 27.8078% 0.029596 256.847952;\n}\n\n[data-theme=dark] {\n color-scheme: dark;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 13.138% 0.0392 275.75;\n --sc: 14.96% 0.052 342.55;\n --ac: 14.902% 0.0334 183.61;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --p: 65.69% 0.196 275.75;\n --s: 74.8% 0.26 342.55;\n --a: 74.51% 0.167 183.61;\n --n: 31.3815% 0.021108 254.139175;\n --nc: 74.6477% 0.0216 264.435964;\n --b1: 25.3267% 0.015896 252.417568;\n --b2: 23.2607% 0.013807 253.100675;\n --b3: 21.1484% 0.01165 254.087939;\n --bc: 74.6477% 0.0216 264.435964;\n}\n\n[data-theme=cupcake] {\n color-scheme: light;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 15.2344% 0.017892 200.026556;\n --sc: 15.787% 0.020249 356.29965;\n --ac: 15.8762% 0.029206 78.618794;\n --nc: 84.7148% 0.013247 313.189598;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --p: 76.172% 0.089459 200.026556;\n --s: 78.9351% 0.101246 356.29965;\n --a: 79.3811% 0.146032 78.618794;\n --n: 23.5742% 0.066235 313.189598;\n --b1: 97.7882% 0.00418 56.375637;\n --b2: 93.9822% 0.007638 61.449292;\n --b3: 91.5861% 0.006811 53.440502;\n --bc: 23.5742% 0.066235 313.189598;\n --rounded-btn: 1.9rem;\n --tab-border: 2px;\n --tab-radius: 0.7rem;\n}\n\n[data-theme=retro] {\n color-scheme: light;\n --inc: 90.923% 0.043042 262.880917;\n --suc: 12.541% 0.033982 149.213788;\n --wac: 13.3168% 0.031484 58.31834;\n --erc: 13.144% 0.0398 27.33;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --p: 76.8664% 0.104092 22.664655;\n --pc: 26.5104% 0.006243 0.522862;\n --s: 80.7415% 0.052534 159.094608;\n --sc: 26.5104% 0.006243 0.522862;\n --a: 70.3919% 0.125455 52.953428;\n --ac: 26.5104% 0.006243 0.522862;\n --n: 28.4181% 0.009519 355.534017;\n --nc: 92.5604% 0.025113 89.217311;\n --b1: 91.6374% 0.034554 90.51575;\n --b2: 88.2722% 0.049418 91.774344;\n --b3: 84.133% 0.065952 90.856665;\n --bc: 26.5104% 0.006243 0.522862;\n --in: 54.615% 0.215208 262.880917;\n --su: 62.7052% 0.169912 149.213788;\n --wa: 66.584% 0.157422 58.31834;\n --er: 65.72% 0.199 27.33;\n --rounded-box: 0.4rem;\n --rounded-btn: 0.4rem;\n --rounded-badge: 0.4rem;\n --tab-radius: 0.4rem;\n}\n\n[data-theme=cyberpunk] {\n color-scheme: light;\n --b2: 87.8943% 0.16647 104.32;\n --b3: 81.2786% 0.15394 104.32;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --bc: 18.902% 0.0358 104.32;\n --pc: 14.844% 0.0418 6.35;\n --sc: 16.666% 0.0368 204.72;\n --ac: 14.372% 0.04352 310.43;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n font-family: ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;\n --p: 74.22% 0.209 6.35;\n --s: 83.33% 0.184 204.72;\n --a: 71.86% 0.2176 310.43;\n --n: 23.04% 0.065 269.31;\n --nc: 94.51% 0.179 104.32;\n --b1: 94.51% 0.179 104.32;\n --rounded-box: 0;\n --rounded-btn: 0;\n --rounded-badge: 0;\n --tab-radius: 0;\n}\n\n[data-theme=aqua] {\n color-scheme: dark;\n --b2: 45.3464% 0.118611 261.181672;\n --b3: 41.9333% 0.109683 261.181672;\n --bc: 89.7519% 0.025508 261.181672;\n --sc: 12.1365% 0.02175 309.782946;\n --ac: 18.6854% 0.020445 94.555431;\n --nc: 12.2124% 0.023402 243.760661;\n --inc: 90.923% 0.043042 262.880917;\n --suc: 12.541% 0.033982 149.213788;\n --wac: 13.3168% 0.031484 58.31834;\n --erc: 14.79% 0.038 27.33;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --p: 85.6617% 0.14498 198.6458;\n --pc: 40.1249% 0.068266 197.603872;\n --s: 60.6827% 0.108752 309.782946;\n --a: 93.4269% 0.102225 94.555431;\n --n: 61.0622% 0.117009 243.760661;\n --b1: 48.7596% 0.127539 261.181672;\n --in: 54.615% 0.215208 262.880917;\n --su: 62.7052% 0.169912 149.213788;\n --wa: 66.584% 0.157422 58.31834;\n --er: 73.95% 0.19 27.33;\n}\n\n[data-theme=docutopia] {\n --p: 54.645% 0.29421 298.46034;\n --b2: 25.8897% 0.107132 328.136712;\n --b3: 23.941% 0.099069 328.136712;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 90.929% 0.058842 298.46034;\n --sc: 13.9726% 0.031813 159.602475;\n --ac: 91.4207% 0.047244 260.255903;\n --nc: 84.1911% 0.008064 74.211583;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --s: 69.8629% 0.159065 159.602475;\n --a: 57.1034% 0.236222 260.255903;\n --n: 20.9553% 0.040319 74.211583;\n --bc: 81.3966% 0.126754 58.524936;\n --b1: 27.8384% 0.115196 328.136712;\n}\n\ninput[type=\"range\"]::-webkit-slider-thumb {\n height: 1rem;\n width: 1rem;\n border-radius: 9999px;\n border: 0;\n appearance: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n cursor: pointer;\n}\n\n.dark input[type=\"range\"]::-webkit-slider-thumb {}\n\ninput[type=\"range\"]:disabled::-webkit-slider-thumb {}\n\ninput[type=\"range\"]:disabled:focus::-webkit-slider-thumb {}\n\ninput[type=\"range\"]:disabled:active::-webkit-slider-thumb {}\n\n.dark input[type=\"range\"]:disabled::-webkit-slider-thumb {}\n\n.dark input[type=\"range\"]:disabled:focus::-webkit-slider-thumb {}\n\n.dark input[type=\"range\"]:disabled:active::-webkit-slider-thumb {}\n\ninput[type=\"range\"]::-moz-range-thumb {\n height: 1rem;\n width: 1rem;\n border-radius: 9999px;\n border: 0;\n appearance: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n cursor: pointer;\n}\n\n.dark input[type=\"range\"]::-moz-range-thumb {}\n\ninput[type=\"range\"]:disabled::-moz-range-thumb {}\n\n.dark input[type=\"range\"]:disabled::-moz-range-thumb {}\n\ninput[type=\"range\"]::-moz-range-progress {}\n\ninput[type=\"range\"]::-ms-fill-lower {}\n\n.dark input[type=\"range\"]::-moz-range-progress {}\n\n.dark input[type=\"range\"]::-ms-fill-lower {}\n\ninput[type=\"range\"]:focus {\n outline: none;\n}\n\ninput[type=\"range\"]:focus::-webkit-slider-thumb {}\n\ninput[type=\"range\"]:active::-webkit-slider-thumb {}\n\n.dark input[type=\"range\"]:focus::-webkit-slider-thumb {}\n\n.dark input[type=\"range\"]:active::-webkit-slider-thumb {}\n.tw-alert {\n display: grid;\n width: 100%;\n grid-auto-flow: row;\n align-content: flex-start;\n align-items: center;\n justify-items: center;\n gap: 1rem;\n text-align: center;\n border-radius: var(--rounded-box, 1rem);\n border-width: 1px;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n padding: 1rem;\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --alert-bg: var(--fallback-b2,oklch(var(--b2)/1));\n --alert-bg-mix: var(--fallback-b1,oklch(var(--b1)/1));\n background-color: var(--alert-bg);\n}\n@media (min-width: 640px) {\n\n .tw-alert {\n grid-auto-flow: column;\n grid-template-columns: auto minmax(auto,1fr);\n justify-items: start;\n text-align: start;\n }\n}\n.tw-avatar {\n position: relative;\n display: inline-flex;\n}\n.tw-avatar > div {\n display: block;\n aspect-ratio: 1 / 1;\n overflow: hidden;\n}\n.tw-avatar img {\n height: 100%;\n width: 100%;\n -o-object-fit: cover;\n object-fit: cover;\n}\n.tw-avatar.tw-placeholder > div {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.tw-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-duration: 200ms;\n height: 1.25rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n width: -moz-fit-content;\n width: fit-content;\n padding-left: 0.563rem;\n padding-right: 0.563rem;\n border-radius: var(--rounded-badge, 1.9rem);\n border-width: 1px;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n}\n.tw-breadcrumbs {\n max-width: 100%;\n overflow-x: auto;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.tw-breadcrumbs > ul,\n .tw-breadcrumbs > ol {\n display: flex;\n align-items: center;\n white-space: nowrap;\n min-height: -moz-min-content;\n min-height: min-content;\n}\n.tw-breadcrumbs > ul > li, .tw-breadcrumbs > ol > li {\n display: flex;\n align-items: center;\n}\n.tw-breadcrumbs > ul > li > a, .tw-breadcrumbs > ol > li > a {\n display: flex;\n cursor: pointer;\n align-items: center;\n}\n@media (hover:hover) {\n\n .tw-breadcrumbs > ul > li > a:hover, .tw-breadcrumbs > ol > li > a:hover {\n text-decoration-line: underline;\n }\n\n .tw-checkbox-success:hover {\n --tw-border-opacity: 1;\n border-color: var(--fallback-su,oklch(var(--su)/var(--tw-border-opacity)));\n }\n\n .tw-label a:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n }\n\n .tw-menu li > *:not(ul, .tw-menu-title, details, .tw-btn):active,\n.tw-menu li > *:not(ul, .tw-menu-title, details, .tw-btn).tw-active,\n.tw-menu li > details > summary:active {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));\n }\n\n .tw-tab:hover {\n --tw-text-opacity: 1;\n }\n\n .tw-table tr.tw-hover:hover,\n .tw-table tr.tw-hover:nth-child(even):hover {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n }\n}\n.tw-btn {\n display: inline-flex;\n height: 3rem;\n min-height: 3rem;\n flex-shrink: 0;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n border-radius: var(--rounded-btn, 0.5rem);\n border-color: transparent;\n border-color: oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity));\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: center;\n font-size: 0.875rem;\n line-height: 1em;\n gap: 0.5rem;\n font-weight: 600;\n text-decoration-line: none;\n transition-duration: 200ms;\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n border-width: var(--border-btn, 1px);\n transition-property: color, background-color, border-color, opacity, box-shadow, transform;\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n outline-color: var(--fallback-bc,oklch(var(--bc)/1));\n background-color: oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity));\n --tw-bg-opacity: 1;\n --tw-border-opacity: 1;\n}\n.tw-btn-disabled,\n .tw-btn[disabled],\n .tw-btn:disabled {\n pointer-events: none;\n}\n.tw-btn-square {\n height: 3rem;\n width: 3rem;\n padding: 0px;\n}\n.tw-btn-circle {\n height: 3rem;\n width: 3rem;\n border-radius: 9999px;\n padding: 0px;\n}\n:where(.tw-btn:is(input[type=\"checkbox\"])),\n:where(.tw-btn:is(input[type=\"radio\"])) {\n width: auto;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.tw-btn:is(input[type=\"checkbox\"]):after,\n.tw-btn:is(input[type=\"radio\"]):after {\n --tw-content: attr(aria-label);\n content: var(--tw-content);\n}\n.tw-card {\n position: relative;\n display: flex;\n flex-direction: column;\n border-radius: var(--rounded-box, 1rem);\n}\n.tw-card:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-card-body {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n padding: var(--padding-card, 2rem);\n gap: 0.5rem;\n}\n.tw-card-body :where(p) {\n flex-grow: 1;\n}\n.tw-card-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: 0.5rem;\n}\n.tw-card figure {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.tw-card.tw-image-full {\n display: grid;\n}\n.tw-card.tw-image-full:before {\n position: relative;\n content: \"\";\n z-index: 10;\n border-radius: var(--rounded-box, 1rem);\n --tw-bg-opacity: 1;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n opacity: 0.75;\n}\n.tw-card.tw-image-full:before,\n .tw-card.tw-image-full > * {\n grid-column-start: 1;\n grid-row-start: 1;\n}\n.tw-card.tw-image-full > figure img {\n height: 100%;\n -o-object-fit: cover;\n object-fit: cover;\n}\n.tw-card.tw-image-full > .tw-card-body {\n position: relative;\n z-index: 20;\n --tw-text-opacity: 1;\n color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));\n}\n.tw-checkbox {\n flex-shrink: 0;\n --chkbg: var(--fallback-bc,oklch(var(--bc)/1));\n --chkfg: var(--fallback-b1,oklch(var(--b1)/1));\n height: 1.5rem;\n width: 1.5rem;\n cursor: pointer;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: var(--rounded-btn, 0.5rem);\n border-width: 1px;\n border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));\n --tw-border-opacity: 0.2;\n}\n.tw-divider {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n margin-top: 1rem;\n margin-bottom: 1rem;\n height: 1rem;\n white-space: nowrap;\n}\n.tw-divider:before,\n .tw-divider:after {\n height: 0.125rem;\n width: 100%;\n flex-grow: 1;\n --tw-content: '';\n content: var(--tw-content);\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n}\n.tw-dropdown {\n position: relative;\n display: inline-block;\n}\n.tw-dropdown > *:not(summary):focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-dropdown .tw-dropdown-content {\n position: absolute;\n}\n.tw-dropdown:is(:not(details)) .tw-dropdown-content {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n visibility: hidden;\n opacity: 0;\n transform-origin: top;\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-duration: 200ms;\n}\n.tw-dropdown-end .tw-dropdown-content {\n inset-inline-end: 0px;\n}\n.tw-dropdown-left .tw-dropdown-content {\n bottom: auto;\n inset-inline-end: 100%;\n top: 0px;\n transform-origin: right;\n}\n.tw-dropdown-right .tw-dropdown-content {\n bottom: auto;\n inset-inline-start: 100%;\n top: 0px;\n transform-origin: left;\n}\n.tw-dropdown-bottom .tw-dropdown-content {\n bottom: auto;\n top: 100%;\n transform-origin: top;\n}\n.tw-dropdown-top .tw-dropdown-content {\n bottom: 100%;\n top: auto;\n transform-origin: bottom;\n}\n.tw-dropdown-end.tw-dropdown-right .tw-dropdown-content {\n bottom: 0px;\n top: auto;\n}\n.tw-dropdown-end.tw-dropdown-left .tw-dropdown-content {\n bottom: 0px;\n top: auto;\n}\n.tw-dropdown.tw-dropdown-open .tw-dropdown-content,\n.tw-dropdown:not(.tw-dropdown-hover):focus .tw-dropdown-content,\n.tw-dropdown:focus-within .tw-dropdown-content {\n visibility: visible;\n opacity: 1;\n}\n@media (hover: hover) {\n\n .tw-dropdown.tw-dropdown-hover:hover .tw-dropdown-content {\n visibility: visible;\n opacity: 1;\n }\n\n .tw-btn:hover {\n --tw-border-opacity: 1;\n border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn:hover {\n background-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,\n black\n );\n border-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,\n black\n );\n }\n }\n\n @supports not (color: oklch(0% 0 0)) {\n\n .tw-btn:hover {\n background-color: var(--btn-color, var(--fallback-b2));\n border-color: var(--btn-color, var(--fallback-b2));\n }\n }\n\n .tw-btn:hover {\n --tw-border-opacity: 1;\n border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn:hover {\n background-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,\n black\n );\n border-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,\n black\n );\n }\n }\n\n @supports not (color: oklch(0% 0 0)) {\n\n .tw-btn:hover {\n background-color: var(--btn-color, var(--fallback-b2));\n border-color: var(--btn-color, var(--fallback-b2));\n }\n }\n\n .tw-btn:hover {\n --tw-border-opacity: 1;\n border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn:hover {\n background-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,\n black\n );\n border-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,\n black\n );\n }\n }\n\n @supports not (color: oklch(0% 0 0)) {\n\n .tw-btn:hover {\n background-color: var(--btn-color, var(--fallback-b2));\n border-color: var(--btn-color, var(--fallback-b2));\n }\n }\n\n .tw-btn.tw-glass:hover {\n --glass-opacity: 25%;\n --glass-border-opacity: 15%;\n }\n\n .tw-btn-ghost:hover {\n border-color: transparent;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n .tw-btn-ghost:hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n }\n }\n\n .tw-btn-ghost:hover {\n border-color: transparent;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n .tw-btn-ghost:hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n }\n }\n\n .tw-btn-outline.tw-btn-primary:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn-outline.tw-btn-primary:hover {\n background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n }\n }\n\n .tw-btn-outline.tw-btn-primary:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn-outline.tw-btn-primary:hover {\n background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n }\n }\n\n .tw-btn-outline.tw-btn-error:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn-outline.tw-btn-error:hover {\n background-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n }\n }\n\n .tw-btn-outline.tw-btn-error:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn-outline.tw-btn-error:hover {\n background-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n }\n }\n\n .tw-btn-disabled:hover,\n .tw-btn[disabled]:hover,\n .tw-btn:disabled:hover {\n --tw-border-opacity: 0;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n --tw-bg-opacity: 0.2;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-text-opacity: 0.2;\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn:is(input[type=\"checkbox\"]:checked):hover, .tw-btn:is(input[type=\"radio\"]:checked):hover {\n background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n }\n }\n\n .tw-dropdown.tw-dropdown-hover:hover .tw-dropdown-content {\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n }\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n cursor: pointer;\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n }\n }\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n cursor: pointer;\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n }\n }\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n cursor: pointer;\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n }\n }\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n cursor: pointer;\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n }\n }\n\n .tw-tab[disabled],\n .tw-tab[disabled]:hover {\n cursor: not-allowed;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-text-opacity: 0.2;\n }\n}\n.tw-dropdown:is(details) summary::-webkit-details-marker {\n display: none;\n}\n.tw-file-input {\n height: 3rem;\n flex-shrink: 1;\n padding-inline-end: 1rem;\n font-size: 1rem;\n line-height: 2;\n line-height: 1.5rem;\n overflow: hidden;\n border-radius: var(--rounded-btn, 0.5rem);\n border-width: 1px;\n border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));\n --tw-border-opacity: 0;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-file-input::file-selector-button {\n margin-inline-end: 1rem;\n display: inline-flex;\n height: 100%;\n flex-shrink: 0;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: center;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 1em;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-duration: 200ms;\n border-style: solid;\n --tw-border-opacity: 1;\n border-color: var(--fallback-n,oklch(var(--n)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n font-weight: 600;\n text-transform: uppercase;\n --tw-text-opacity: 1;\n color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));\n text-decoration-line: none;\n border-width: var(--border-btn, 1px);\n animation: button-pop var(--animation-btn, 0.25s) ease-out;\n}\n.tw-form-control {\n display: flex;\n flex-direction: column;\n}\n.tw-label {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n align-items: center;\n justify-content: space-between;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.tw-indicator {\n position: relative;\n display: inline-flex;\n width: -moz-max-content;\n width: max-content;\n}\n.tw-indicator :where(.tw-indicator-item) {\n z-index: 1;\n position: absolute;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n white-space: nowrap;\n}\n.tw-input {\n flex-shrink: 1;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n height: 3rem;\n padding-left: 1rem;\n padding-right: 1rem;\n font-size: 1rem;\n line-height: 2;\n line-height: 1.5rem;\n border-radius: var(--rounded-btn, 0.5rem);\n border-width: 1px;\n border-color: transparent;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-input[type=\"number\"]::-webkit-inner-spin-button,\n.tw-input-md[type=\"number\"]::-webkit-inner-spin-button {\n margin-top: -1rem;\n margin-bottom: -1rem;\n margin-inline-end: -1rem;\n}\n.tw-input-sm[type=\"number\"]::-webkit-inner-spin-button {\n margin-top: 0px;\n margin-bottom: 0px;\n margin-inline-end: -0px;\n}\n.tw-join .tw-dropdown .tw-join-item:first-child:not(:last-child),\n .tw-join *:first-child:not(:last-child) .tw-dropdown .tw-join-item {\n border-start-end-radius: inherit;\n border-end-end-radius: inherit;\n}\n.tw-mask {\n -webkit-mask-size: contain;\n mask-size: contain;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: center;\n mask-position: center;\n}\n.tw-menu {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n font-size: 0.875rem;\n line-height: 1.25rem;\n padding: 0.5rem;\n}\n.tw-menu :where(li ul) {\n position: relative;\n white-space: nowrap;\n margin-inline-start: 1rem;\n padding-inline-start: 0.5rem;\n}\n.tw-menu :where(li:not(.tw-menu-title) > *:not(ul, details, .tw-menu-title, .tw-btn)), .tw-menu :where(li:not(.tw-menu-title) > details > summary:not(.tw-menu-title)) {\n display: grid;\n grid-auto-flow: column;\n align-content: flex-start;\n align-items: center;\n gap: 0.5rem;\n grid-auto-columns: minmax(auto, max-content) auto max-content;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.tw-menu li.tw-disabled {\n cursor: not-allowed;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n color: var(--fallback-bc,oklch(var(--bc)/0.3));\n}\n.tw-menu :where(li > .tw-menu-dropdown:not(.tw-menu-dropdown-show)) {\n display: none;\n}\n:where(.tw-menu li) {\n position: relative;\n display: flex;\n flex-shrink: 0;\n flex-direction: column;\n flex-wrap: wrap;\n align-items: stretch;\n}\n:where(.tw-menu li) .tw-badge {\n justify-self: end;\n}\n.tw-modal {\n pointer-events: none;\n position: fixed;\n inset: 0px;\n margin: 0px;\n display: grid;\n height: 100%;\n max-height: none;\n width: 100%;\n max-width: none;\n justify-items: center;\n padding: 0px;\n opacity: 0;\n overscroll-behavior: contain;\n z-index: 999;\n background-color: transparent;\n color: inherit;\n transition-duration: 200ms;\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-property: transform, opacity, visibility;\n overflow-y: hidden;\n}\n:where(.tw-modal) {\n align-items: center;\n}\n.tw-modal-box {\n max-height: calc(100vh - 5em);\n grid-column-start: 1;\n grid-row-start: 1;\n width: 91.666667%;\n max-width: 32rem;\n --tw-scale-x: .9;\n --tw-scale-y: .9;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-bottom-right-radius: var(--rounded-box, 1rem);\n border-bottom-left-radius: var(--rounded-box, 1rem);\n border-top-left-radius: var(--rounded-box, 1rem);\n border-top-right-radius: var(--rounded-box, 1rem);\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n padding: 1.5rem;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-duration: 200ms;\n box-shadow: rgba(0, 0, 0, 0.25) 0px 25px 50px -12px;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n.tw-modal-open,\n.tw-modal:target,\n.tw-modal-toggle:checked + .tw-modal,\n.tw-modal[open] {\n pointer-events: auto;\n visibility: visible;\n opacity: 1;\n}\n:root:has(:is(.tw-modal-open, .tw-modal:target, .tw-modal-toggle:checked + .tw-modal, .tw-modal[open])) {\n overflow: hidden;\n scrollbar-gutter: stable;\n}\n.tw-navbar {\n display: flex;\n align-items: center;\n padding: var(--navbar-padding, 0.5rem);\n min-height: 4rem;\n width: 100%;\n}\n:where(.tw-navbar > *:not(script, style)) {\n display: inline-flex;\n align-items: center;\n}\n.tw-select {\n display: inline-flex;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n height: 3rem;\n min-height: 3rem;\n padding-inline-start: 1rem;\n padding-inline-end: 2.5rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 2;\n border-radius: var(--rounded-btn, 0.5rem);\n border-width: 1px;\n border-color: transparent;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),\n linear-gradient(135deg, currentColor 50%, transparent 50%);\n background-position: calc(100% - 20px) calc(1px + 50%),\n calc(100% - 16.1px) calc(1px + 50%);\n background-size: 4px 4px,\n 4px 4px;\n background-repeat: no-repeat;\n}\n.tw-select[multiple] {\n height: auto;\n}\n.tw-tabs {\n display: grid;\n align-items: flex-end;\n}\n.tw-tabs-lifted:has(.tw-tab-content[class^=\"rounded-\"])\n .tw-tab:first-child:not(:is(.tw-tab-active, [aria-selected=\"true\"])), .tw-tabs-lifted:has(.tw-tab-content[class*=\" rounded-\"])\n .tw-tab:first-child:not(:is(.tw-tab-active, [aria-selected=\"true\"])) {\n border-bottom-color: transparent;\n}\n.tw-tab {\n position: relative;\n grid-row-start: 1;\n display: inline-flex;\n height: 2rem;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 2;\n --tab-padding: 1rem;\n --tw-text-opacity: 0.5;\n --tab-color: var(--fallback-bc,oklch(var(--bc)/1));\n --tab-bg: var(--fallback-b1,oklch(var(--b1)/1));\n --tab-border-color: var(--fallback-b3,oklch(var(--b3)/1));\n color: var(--tab-color);\n padding-inline-start: var(--tab-padding, 1rem);\n padding-inline-end: var(--tab-padding, 1rem);\n}\n.tw-tab:is(input[type=\"radio\"]) {\n width: auto;\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.tw-tab:is(input[type=\"radio\"]):after {\n --tw-content: attr(aria-label);\n content: var(--tw-content);\n}\n.tw-tab:not(input):empty {\n cursor: default;\n grid-column-start: span 9999;\n}\n.tw-tab-content {\n grid-column-start: 1;\n grid-column-end: span 9999;\n grid-row-start: 2;\n margin-top: calc(var(--tab-border) * -1);\n display: none;\n border-color: transparent;\n border-width: var(--tab-border, 0);\n}\n:checked + .tw-tab-content:nth-child(2),\n :is(.tw-tab-active, [aria-selected=\"true\"]) + .tw-tab-content:nth-child(2) {\n border-start-start-radius: 0px;\n}\ninput.tw-tab:checked + .tw-tab-content,\n:is(.tw-tab-active, [aria-selected=\"true\"]) + .tw-tab-content {\n display: block;\n}\n.tw-table {\n position: relative;\n width: 100%;\n border-radius: var(--rounded-box, 1rem);\n text-align: left;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.tw-table :where(.tw-table-pin-rows thead tr) {\n position: sticky;\n top: 0px;\n z-index: 1;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-table :where(.tw-table-pin-rows tfoot tr) {\n position: sticky;\n bottom: 0px;\n z-index: 1;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-table :where(.tw-table-pin-cols tr th) {\n position: sticky;\n left: 0px;\n right: 0px;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-textarea {\n min-height: 3rem;\n flex-shrink: 1;\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 2;\n border-radius: var(--rounded-btn, 0.5rem);\n border-width: 1px;\n border-color: transparent;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-avatar-group :where(.tw-avatar) {\n overflow: hidden;\n border-radius: 9999px;\n border-width: 4px;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-border-opacity)));\n}\n.tw-badge-success {\n border-color: transparent;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-su,oklch(var(--su)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-suc,oklch(var(--suc)/var(--tw-text-opacity)));\n}\n.tw-badge-outline.tw-badge-success {\n --tw-text-opacity: 1;\n color: var(--fallback-su,oklch(var(--su)/var(--tw-text-opacity)));\n}\n.tw-btm-nav > * .tw-label {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.tw-breadcrumbs > ul > li > a:focus, .tw-breadcrumbs > ol > li > a:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-breadcrumbs > ul > li > a:focus-visible, .tw-breadcrumbs > ol > li > a:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n.tw-breadcrumbs > ul > li + *:before, .tw-breadcrumbs > ol > li + *:before {\n content: \"\";\n margin-left: 0.5rem;\n margin-right: 0.75rem;\n display: block;\n height: 0.375rem;\n width: 0.375rem;\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n opacity: 0.4;\n border-top: 1px solid;\n border-right: 1px solid;\n background-color: transparent;\n}\n[dir=\"rtl\"] .tw-breadcrumbs > ul > li + *:before,\n[dir=\"rtl\"] .tw-breadcrumbs > ol > li + *:before {\n --tw-rotate: -135deg;\n}\n@media (prefers-reduced-motion: no-preference) {\n\n .tw-btn {\n animation: button-pop var(--animation-btn, 0.25s) ease-out;\n }\n}\n.tw-btn:active:hover,\n .tw-btn:active:focus {\n animation: button-pop 0s ease-out;\n transform: scale(var(--btn-focus-scale, 0.97));\n}\n@supports not (color: oklch(0% 0 0)) {\n\n .tw-btn {\n background-color: var(--btn-color, var(--fallback-b2));\n border-color: var(--btn-color, var(--fallback-b2));\n }\n\n .tw-btn-primary {\n --btn-color: var(--fallback-p);\n }\n\n .tw-btn-neutral {\n --btn-color: var(--fallback-n);\n }\n\n .tw-btn-error {\n --btn-color: var(--fallback-er);\n }\n}\n@supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn-outline.tw-btn-primary.tw-btn-active {\n background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n }\n\n .tw-btn-outline.tw-btn-error.tw-btn-active {\n background-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n }\n}\n.tw-btn:focus-visible {\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n}\n.tw-btn-primary {\n --tw-text-opacity: 1;\n color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));\n outline-color: var(--fallback-p,oklch(var(--p)/1));\n}\n@supports (color: oklch(0% 0 0)) {\n\n .tw-btn-primary {\n --btn-color: var(--p);\n }\n\n .tw-btn-neutral {\n --btn-color: var(--n);\n }\n\n .tw-btn-error {\n --btn-color: var(--er);\n }\n}\n.tw-btn-neutral {\n --tw-text-opacity: 1;\n color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));\n outline-color: var(--fallback-n,oklch(var(--n)/1));\n}\n.tw-btn-error {\n --tw-text-opacity: 1;\n color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));\n outline-color: var(--fallback-er,oklch(var(--er)/1));\n}\n.tw-btn.tw-glass {\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n outline-color: currentColor;\n}\n.tw-btn.tw-glass.tw-btn-active {\n --glass-opacity: 25%;\n --glass-border-opacity: 15%;\n}\n.tw-btn-ghost {\n border-width: 1px;\n border-color: transparent;\n background-color: transparent;\n color: currentColor;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n outline-color: currentColor;\n}\n.tw-btn-ghost.tw-btn-active {\n border-color: transparent;\n background-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-btn-outline.tw-btn-primary {\n --tw-text-opacity: 1;\n color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)));\n}\n.tw-btn-outline.tw-btn-primary.tw-btn-active {\n --tw-text-opacity: 1;\n color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));\n}\n.tw-btn-outline.tw-btn-error {\n --tw-text-opacity: 1;\n color: var(--fallback-er,oklch(var(--er)/var(--tw-text-opacity)));\n}\n.tw-btn-outline.tw-btn-error.tw-btn-active {\n --tw-text-opacity: 1;\n color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));\n}\n.tw-btn.tw-btn-disabled,\n .tw-btn[disabled],\n .tw-btn:disabled {\n --tw-border-opacity: 0;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n --tw-bg-opacity: 0.2;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-text-opacity: 0.2;\n}\n.tw-btn:is(input[type=\"checkbox\"]:checked),\n.tw-btn:is(input[type=\"radio\"]:checked) {\n --tw-border-opacity: 1;\n border-color: var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));\n}\n.tw-btn:is(input[type=\"checkbox\"]:checked):focus-visible, .tw-btn:is(input[type=\"radio\"]:checked):focus-visible {\n outline-color: var(--fallback-p,oklch(var(--p)/1));\n}\n@keyframes button-pop {\n\n 0% {\n transform: scale(var(--btn-focus-scale, 0.98));\n }\n\n 40% {\n transform: scale(1.02);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n.tw-card :where(figure:first-child) {\n overflow: hidden;\n border-start-start-radius: inherit;\n border-start-end-radius: inherit;\n border-end-start-radius: unset;\n border-end-end-radius: unset;\n}\n.tw-card :where(figure:last-child) {\n overflow: hidden;\n border-start-start-radius: unset;\n border-start-end-radius: unset;\n border-end-start-radius: inherit;\n border-end-end-radius: inherit;\n}\n.tw-card:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n.tw-card.tw-bordered {\n border-width: 1px;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n}\n.tw-card.tw-compact .tw-card-body {\n padding: 1rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.tw-card-title {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 1.25rem;\n line-height: 1.75rem;\n font-weight: 600;\n}\n.tw-card.tw-image-full :where(figure) {\n overflow: hidden;\n border-radius: inherit;\n}\n.tw-checkbox:focus {\n box-shadow: none;\n}\n.tw-checkbox:focus-visible {\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--fallback-bc,oklch(var(--bc)/1));\n}\n.tw-checkbox:disabled {\n border-width: 0px;\n cursor: not-allowed;\n border-color: transparent;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));\n opacity: 0.2;\n}\n.tw-checkbox:checked,\n .tw-checkbox[aria-checked=\"true\"] {\n background-repeat: no-repeat;\n animation: checkmark var(--animation-input, 0.2s) ease-out;\n background-color: var(--chkbg);\n background-image: linear-gradient(-45deg, transparent 65%, var(--chkbg) 65.99%),\n linear-gradient(45deg, transparent 75%, var(--chkbg) 75.99%),\n linear-gradient(-45deg, var(--chkbg) 40%, transparent 40.99%),\n linear-gradient(\n 45deg,\n var(--chkbg) 30%,\n var(--chkfg) 30.99%,\n var(--chkfg) 40%,\n transparent 40.99%\n ),\n linear-gradient(-45deg, var(--chkfg) 50%, var(--chkbg) 50.99%);\n}\n.tw-checkbox:indeterminate {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));\n background-repeat: no-repeat;\n animation: checkmark var(--animation-input, 0.2s) ease-out;\n background-image: linear-gradient(90deg, transparent 80%, var(--chkbg) 80%),\n linear-gradient(-90deg, transparent 80%, var(--chkbg) 80%),\n linear-gradient(0deg, var(--chkbg) 43%, var(--chkfg) 43%, var(--chkfg) 57%, var(--chkbg) 57%);\n}\n.tw-checkbox-success {\n --chkbg: var(--fallback-su,oklch(var(--su)/1));\n --chkfg: var(--fallback-suc,oklch(var(--suc)/1));\n --tw-border-opacity: 1;\n border-color: var(--fallback-su,oklch(var(--su)/var(--tw-border-opacity)));\n}\n.tw-checkbox-success:focus-visible {\n outline-color: var(--fallback-su,oklch(var(--su)/1));\n}\n.tw-checkbox-success:checked,\n .tw-checkbox-success[aria-checked=\"true\"] {\n --tw-border-opacity: 1;\n border-color: var(--fallback-su,oklch(var(--su)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-su,oklch(var(--su)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-suc,oklch(var(--suc)/var(--tw-text-opacity)));\n}\n@keyframes checkmark {\n\n 0% {\n background-position-y: 5px;\n }\n\n 50% {\n background-position-y: -2px;\n }\n\n 100% {\n background-position-y: 0;\n }\n}\n.tw-divider:not(:empty) {\n gap: 1rem;\n}\n.tw-dropdown.tw-dropdown-open .tw-dropdown-content,\n.tw-dropdown:focus .tw-dropdown-content,\n.tw-dropdown:focus-within .tw-dropdown-content {\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-file-input:focus {\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-file-input-disabled,\n .tw-file-input[disabled] {\n cursor: not-allowed;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n --tw-text-opacity: 0.2;\n}\n.tw-file-input-disabled::-moz-placeholder, .tw-file-input[disabled]::-moz-placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-file-input-disabled::placeholder,\n .tw-file-input[disabled]::placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-file-input-disabled::file-selector-button, .tw-file-input[disabled]::file-selector-button {\n --tw-border-opacity: 0;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n --tw-bg-opacity: 0.2;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-text-opacity: 0.2;\n}\n.tw-label-text {\n font-size: 0.875rem;\n line-height: 1.25rem;\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n}\n.tw-input input {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));\n background-color: transparent;\n}\n.tw-input input:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-input[list]::-webkit-calendar-picker-indicator {\n line-height: 1em;\n}\n.tw-input-bordered {\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-input:focus,\n .tw-input:focus-within {\n box-shadow: none;\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-input:has(> input[disabled]),\n .tw-input-disabled,\n .tw-input:disabled,\n .tw-input[disabled] {\n cursor: not-allowed;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n color: var(--fallback-bc,oklch(var(--bc)/0.4));\n}\n.tw-input:has(> input[disabled])::-moz-placeholder, .tw-input-disabled::-moz-placeholder, .tw-input:disabled::-moz-placeholder, .tw-input[disabled]::-moz-placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-input:has(> input[disabled])::placeholder,\n .tw-input-disabled::placeholder,\n .tw-input:disabled::placeholder,\n .tw-input[disabled]::placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-input:has(> input[disabled]) > input[disabled] {\n cursor: not-allowed;\n}\n.tw-input::-webkit-date-and-time-value {\n text-align: inherit;\n}\n.tw-join > :where(*:not(:first-child)):is(.tw-btn) {\n margin-inline-start: calc(var(--border-btn) * -1);\n}\n.tw-loading {\n pointer-events: none;\n display: inline-block;\n aspect-ratio: 1 / 1;\n width: 1.5rem;\n background-color: currentColor;\n -webkit-mask-size: 100%;\n mask-size: 100%;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: center;\n mask-position: center;\n -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E\");\n mask-image: url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E\");\n}\n.tw-loading-spinner {\n -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E\");\n mask-image: url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E\");\n}\n.tw-loading-sm {\n width: 1.25rem;\n}\n.tw-loading-md {\n width: 1.5rem;\n}\n.tw-mask-squircle {\n -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 0C20 0 0 20 0 100s20 100 100 100 100-20 100-100S180 0 100 0Z'/%3e%3c/svg%3e\");\n mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 0C20 0 0 20 0 100s20 100 100 100 100-20 100-100S180 0 100 0Z'/%3e%3c/svg%3e\");\n}\n.tw-mask-decagon {\n -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width='192' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 0 58.779 19.098 36.327 50v61.804l-36.327 50L96 200l-58.779-19.098-36.327-50V69.098l36.327-50z' fill-rule='evenodd'/%3e%3c/svg%3e\");\n mask-image: url(\"data:image/svg+xml,%3csvg width='192' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 0 58.779 19.098 36.327 50v61.804l-36.327 50L96 200l-58.779-19.098-36.327-50V69.098l36.327-50z' fill-rule='evenodd'/%3e%3c/svg%3e\");\n}\n.tw-mask-hexagon-2 {\n -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='182' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M64.786 181.4c-9.196 0-20.063-6.687-25.079-14.21L3.762 105.33c-5.016-8.36-5.016-20.9 0-29.259l35.945-61.86C44.723 5.851 55.59 0 64.786 0h71.055c9.196 0 20.063 6.688 25.079 14.211l35.945 61.86c4.18 8.36 4.18 20.899 0 29.258l-35.945 61.86c-4.18 8.36-15.883 14.211-25.079 14.211H64.786Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e\");\n mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='182' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M64.786 181.4c-9.196 0-20.063-6.687-25.079-14.21L3.762 105.33c-5.016-8.36-5.016-20.9 0-29.259l35.945-61.86C44.723 5.851 55.59 0 64.786 0h71.055c9.196 0 20.063 6.688 25.079 14.211l35.945 61.86c4.18 8.36 4.18 20.899 0 29.258l-35.945 61.86c-4.18 8.36-15.883 14.211-25.079 14.211H64.786Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e\");\n}\n.tw-mask-circle {\n -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e\");\n mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e\");\n}\n:where(.tw-menu li:empty) {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));\n opacity: 0.1;\n margin: 0.5rem 1rem;\n height: 1px;\n}\n.tw-menu :where(li ul):before {\n position: absolute;\n bottom: 0.75rem;\n inset-inline-start: 0px;\n top: 0.75rem;\n width: 1px;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));\n opacity: 0.1;\n content: \"\";\n}\n.tw-menu :where(li:not(.tw-menu-title) > *:not(ul, details, .tw-menu-title, .tw-btn)),\n.tw-menu :where(li:not(.tw-menu-title) > details > summary:not(.tw-menu-title)) {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n border-radius: var(--rounded-btn, 0.5rem);\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n text-align: start;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-duration: 200ms;\n text-wrap: balance;\n}\n:where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(summary, .tw-active, .tw-btn).tw-focus, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(summary, .tw-active, .tw-btn):focus, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):is(summary):not(.tw-active, .tw-btn):focus-visible, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(summary, .tw-active, .tw-btn).tw-focus, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(summary, .tw-active, .tw-btn):focus, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):is(summary):not(.tw-active, .tw-btn):focus-visible {\n cursor: pointer;\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-menu li > *:not(ul, .tw-menu-title, details, .tw-btn):active,\n.tw-menu li > *:not(ul, .tw-menu-title, details, .tw-btn).tw-active,\n.tw-menu li > details > summary:active {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));\n}\n.tw-menu :where(li > details > summary)::-webkit-details-marker {\n display: none;\n}\n.tw-menu :where(li > details > summary):after,\n.tw-menu :where(li > .tw-menu-dropdown-toggle):after {\n justify-self: end;\n display: block;\n margin-top: -0.5rem;\n height: 0.5rem;\n width: 0.5rem;\n transform: rotate(45deg);\n transition-property: transform, margin-top;\n transition-duration: 0.3s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n content: \"\";\n transform-origin: 75% 75%;\n box-shadow: 2px 2px;\n pointer-events: none;\n}\n.tw-menu :where(li > details[open] > summary):after,\n.tw-menu :where(li > .tw-menu-dropdown-toggle.tw-menu-dropdown-show):after {\n transform: rotate(225deg);\n margin-top: 0;\n}\n.tw-mockup-browser .tw-mockup-browser-toolbar .tw-input {\n position: relative;\n margin-left: auto;\n margin-right: auto;\n display: block;\n height: 1.75rem;\n width: 24rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n padding-left: 2rem;\n direction: ltr;\n}\n.tw-mockup-browser .tw-mockup-browser-toolbar .tw-input:before {\n content: \"\";\n position: absolute;\n left: 0.5rem;\n top: 50%;\n aspect-ratio: 1 / 1;\n height: 0.75rem;\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-radius: 9999px;\n border-width: 2px;\n border-color: currentColor;\n opacity: 0.6;\n}\n.tw-mockup-browser .tw-mockup-browser-toolbar .tw-input:after {\n content: \"\";\n position: absolute;\n left: 1.25rem;\n top: 50%;\n height: 0.5rem;\n --tw-translate-y: 25%;\n --tw-rotate: -45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-radius: 9999px;\n border-width: 1px;\n border-color: currentColor;\n opacity: 0.6;\n}\n.tw-modal:not(dialog:not(.tw-modal-open)),\n .tw-modal::backdrop {\n background-color: #0006;\n animation: modal-pop 0.2s ease-out;\n}\n.tw-modal-backdrop {\n z-index: -1;\n grid-column-start: 1;\n grid-row-start: 1;\n display: grid;\n align-self: stretch;\n justify-self: stretch;\n color: transparent;\n}\n.tw-modal-open .tw-modal-box,\n.tw-modal-toggle:checked + .tw-modal .tw-modal-box,\n.tw-modal:target .tw-modal-box,\n.tw-modal[open] .tw-modal-box {\n --tw-translate-y: 0px;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes modal-pop {\n\n 0% {\n opacity: 0;\n }\n}\n@keyframes progress-loading {\n\n 50% {\n background-position-x: -115%;\n }\n}\n@keyframes radiomark {\n\n 0% {\n box-shadow: 0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset,\n 0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset;\n }\n\n 50% {\n box-shadow: 0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset,\n 0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset;\n }\n\n 100% {\n box-shadow: 0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,\n 0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset;\n }\n}\n@keyframes rating-pop {\n\n 0% {\n transform: translateY(-0.125em);\n }\n\n 40% {\n transform: translateY(-0.125em);\n }\n\n 100% {\n transform: translateY(0);\n }\n}\n.tw-select-bordered {\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-select:focus {\n box-shadow: none;\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-select-disabled,\n .tw-select:disabled,\n .tw-select[disabled] {\n cursor: not-allowed;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n color: var(--fallback-bc,oklch(var(--bc)/0.4));\n}\n.tw-select-disabled::-moz-placeholder, .tw-select:disabled::-moz-placeholder, .tw-select[disabled]::-moz-placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-select-disabled::placeholder,\n .tw-select:disabled::placeholder,\n .tw-select[disabled]::placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-select-multiple,\n .tw-select[multiple],\n .tw-select[size].tw-select:not([size=\"1\"]) {\n background-image: none;\n padding-right: 1rem;\n}\n[dir=\"rtl\"] .tw-select {\n background-position: calc(0% + 12px) calc(1px + 50%),\n calc(0% + 16px) calc(1px + 50%);\n}\n@keyframes skeleton {\n\n from {\n background-position: 150%;\n }\n\n to {\n background-position: -50%;\n }\n}\n.tw-tabs-lifted > .tw-tab:focus-visible {\n border-end-end-radius: 0;\n border-end-start-radius: 0;\n}\n.tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]), .tw-tab:is(input:checked) {\n border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));\n --tw-border-opacity: 1;\n --tw-text-opacity: 1;\n}\n.tw-tab:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-tab:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: -5px;\n}\n.tw-tab-disabled,\n .tw-tab[disabled] {\n cursor: not-allowed;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-text-opacity: 0.2;\n}\n.tw-tabs-bordered > .tw-tab {\n border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));\n --tw-border-opacity: 0.2;\n border-style: solid;\n border-bottom-width: calc(var(--tab-border, 1px) + 1px);\n}\n.tw-tabs-lifted > .tw-tab {\n border: var(--tab-border, 1px) solid transparent;\n border-width: 0 0 var(--tab-border, 1px) 0;\n border-start-start-radius: var(--tab-radius, 0.5rem);\n border-start-end-radius: var(--tab-radius, 0.5rem);\n border-bottom-color: var(--tab-border-color);\n padding-inline-start: var(--tab-padding, 1rem);\n padding-inline-end: var(--tab-padding, 1rem);\n padding-top: var(--tab-border, 1px);\n}\n.tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]), .tw-tabs-lifted > .tw-tab:is(input:checked) {\n background-color: var(--tab-bg);\n border-width: var(--tab-border, 1px) var(--tab-border, 1px) 0 var(--tab-border, 1px);\n border-inline-start-color: var(--tab-border-color);\n border-inline-end-color: var(--tab-border-color);\n border-top-color: var(--tab-border-color);\n padding-inline-start: calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));\n padding-inline-end: calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));\n padding-bottom: var(--tab-border, 1px);\n padding-top: 0;\n}\n.tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):before, .tw-tabs-lifted > .tw-tab:is(input:checked):before {\n z-index: 1;\n content: \"\";\n display: block;\n position: absolute;\n width: calc(100% + var(--tab-radius, 0.5rem) * 2);\n height: var(--tab-radius, 0.5rem);\n bottom: 0;\n background-size: var(--tab-radius, 0.5rem);\n background-position: top left,\n top right;\n background-repeat: no-repeat;\n --tab-grad: calc(69% - var(--tab-border, 1px));\n --radius-start: radial-gradient(\n circle at top left,\n transparent var(--tab-grad),\n var(--tab-border-color) calc(var(--tab-grad) + 0.25px),\n var(--tab-border-color) calc(var(--tab-grad) + var(--tab-border, 1px)),\n var(--tab-bg) calc(var(--tab-grad) + var(--tab-border, 1px) + 0.25px)\n );\n --radius-end: radial-gradient(\n circle at top right,\n transparent var(--tab-grad),\n var(--tab-border-color) calc(var(--tab-grad) + 0.25px),\n var(--tab-border-color) calc(var(--tab-grad) + var(--tab-border, 1px)),\n var(--tab-bg) calc(var(--tab-grad) + var(--tab-border, 1px) + 0.25px)\n );\n background-image: var(--radius-start), var(--radius-end);\n}\n.tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):first-child:before, .tw-tabs-lifted > .tw-tab:is(input:checked):first-child:before {\n background-image: var(--radius-end);\n background-position: top right;\n}\n[dir=\"rtl\"] .tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):first-child:before, [dir=\"rtl\"] .tw-tabs-lifted > .tw-tab:is(input:checked):first-child:before {\n background-image: var(--radius-start);\n background-position: top left;\n}\n.tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):last-child:before, .tw-tabs-lifted > .tw-tab:is(input:checked):last-child:before {\n background-image: var(--radius-start);\n background-position: top left;\n}\n[dir=\"rtl\"] .tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):last-child:before, [dir=\"rtl\"] .tw-tabs-lifted > .tw-tab:is(input:checked):last-child:before {\n background-image: var(--radius-end);\n background-position: top right;\n}\n.tw-tabs-lifted\n > :is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled])\n + .tw-tabs-lifted\n :is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):before, .tw-tabs-lifted > .tw-tab:is(input:checked) + .tw-tabs-lifted .tw-tab:is(input:checked):before {\n background-image: var(--radius-end);\n background-position: top right;\n}\n.tw-tabs-boxed .tw-tab {\n border-radius: var(--rounded-btn, 0.5rem);\n}\n.tw-table:where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n text-align: right;\n}\n.tw-table :where(th, td) {\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n vertical-align: middle;\n}\n.tw-table tr.tw-active,\n .tw-table tr.tw-active:nth-child(even),\n .tw-table-zebra tbody tr:nth-child(even) {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n}\n.tw-table :where(thead tr, tbody tr:not(:last-child), tbody tr:first-child:last-child) {\n border-bottom-width: 1px;\n --tw-border-opacity: 1;\n border-bottom-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n}\n.tw-table :where(thead, tfoot) {\n white-space: nowrap;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 700;\n color: var(--fallback-bc,oklch(var(--bc)/0.6));\n}\n.tw-table :where(tfoot) {\n border-top-width: 1px;\n --tw-border-opacity: 1;\n border-top-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n}\n.tw-textarea-bordered {\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-textarea:focus {\n box-shadow: none;\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-textarea-disabled,\n .tw-textarea:disabled,\n .tw-textarea[disabled] {\n cursor: not-allowed;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n color: var(--fallback-bc,oklch(var(--bc)/0.4));\n}\n.tw-textarea-disabled::-moz-placeholder, .tw-textarea:disabled::-moz-placeholder, .tw-textarea[disabled]::-moz-placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-textarea-disabled::placeholder,\n .tw-textarea:disabled::placeholder,\n .tw-textarea[disabled]::placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n@keyframes toast-pop {\n\n 0% {\n transform: scale(0.9);\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n.tw-btn-xs {\n height: 1.5rem;\n min-height: 1.5rem;\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n font-size: 0.75rem;\n}\n.tw-btn-sm {\n height: 2rem;\n min-height: 2rem;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n font-size: 0.875rem;\n}\n.tw-btn-lg {\n height: 4rem;\n min-height: 4rem;\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n font-size: 1.125rem;\n}\n.tw-btn-block {\n width: 100%;\n}\n.tw-btn-square:where(.tw-btn-xs) {\n height: 1.5rem;\n width: 1.5rem;\n padding: 0px;\n}\n.tw-btn-square:where(.tw-btn-sm) {\n height: 2rem;\n width: 2rem;\n padding: 0px;\n}\n.tw-btn-square:where(.tw-btn-md) {\n height: 3rem;\n width: 3rem;\n padding: 0px;\n}\n.tw-btn-square:where(.tw-btn-lg) {\n height: 4rem;\n width: 4rem;\n padding: 0px;\n}\n.tw-btn-circle:where(.tw-btn-xs) {\n height: 1.5rem;\n width: 1.5rem;\n border-radius: 9999px;\n padding: 0px;\n}\n.tw-btn-circle:where(.tw-btn-sm) {\n height: 2rem;\n width: 2rem;\n border-radius: 9999px;\n padding: 0px;\n}\n.tw-btn-circle:where(.tw-btn-md) {\n height: 3rem;\n width: 3rem;\n border-radius: 9999px;\n padding: 0px;\n}\n.tw-btn-circle:where(.tw-btn-lg) {\n height: 4rem;\n width: 4rem;\n border-radius: 9999px;\n padding: 0px;\n}\n[type=\"checkbox\"].tw-checkbox-xs {\n height: 1rem;\n width: 1rem;\n}\n[type=\"checkbox\"].tw-checkbox-sm {\n height: 1.25rem;\n width: 1.25rem;\n}\n.tw-indicator :where(.tw-indicator-item) {\n bottom: auto;\n inset-inline-end: 0px;\n inset-inline-start: auto;\n top: 0px;\n --tw-translate-y: -50%;\n --tw-translate-x: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item):where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-start) {\n inset-inline-end: auto;\n inset-inline-start: 0px;\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-start):where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n --tw-translate-x: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-center) {\n inset-inline-end: 50%;\n inset-inline-start: 50%;\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-center):where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n --tw-translate-x: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-end) {\n inset-inline-end: 0px;\n inset-inline-start: auto;\n --tw-translate-x: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-end):where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-bottom) {\n bottom: 0px;\n top: auto;\n --tw-translate-y: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-middle) {\n bottom: 50%;\n top: 50%;\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-top) {\n bottom: auto;\n top: 0px;\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-input-md {\n height: 3rem;\n padding-left: 1rem;\n padding-right: 1rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 2;\n}\n.tw-input-sm {\n height: 2rem;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n font-size: 0.875rem;\n line-height: 2rem;\n}\n.tw-tabs-md :where(.tw-tab) {\n height: 2rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 2;\n --tab-padding: 1rem;\n}\n.tw-tabs-lg :where(.tw-tab) {\n height: 3rem;\n font-size: 1.125rem;\n line-height: 1.75rem;\n line-height: 2;\n --tab-padding: 1.25rem;\n}\n.tw-tabs-sm :where(.tw-tab) {\n height: 1.5rem;\n font-size: 0.875rem;\n line-height: .75rem;\n --tab-padding: 0.75rem;\n}\n.tw-tabs-xs :where(.tw-tab) {\n height: 1.25rem;\n font-size: 0.75rem;\n line-height: .75rem;\n --tab-padding: 0.5rem;\n}\n.tw-tooltip {\n position: relative;\n display: inline-block;\n --tooltip-offset: calc(100% + 1px + var(--tooltip-tail, 0px));\n}\n.tw-tooltip:before {\n position: absolute;\n pointer-events: none;\n z-index: 1;\n content: var(--tw-content);\n --tw-content: attr(data-tip);\n}\n.tw-tooltip:before, .tw-tooltip-top:before {\n transform: translateX(-50%);\n top: auto;\n left: 50%;\n right: auto;\n bottom: var(--tooltip-offset);\n}\n.tw-tooltip-left:before {\n transform: translateY(-50%);\n top: 50%;\n left: auto;\n right: var(--tooltip-offset);\n bottom: auto;\n}\n.tw-tooltip-right:before {\n transform: translateY(-50%);\n top: 50%;\n left: var(--tooltip-offset);\n right: auto;\n bottom: auto;\n}\n.tw-avatar.tw-online:before {\n content: \"\";\n position: absolute;\n z-index: 10;\n display: block;\n border-radius: 9999px;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-su,oklch(var(--su)/var(--tw-bg-opacity)));\n outline-style: solid;\n outline-width: 2px;\n outline-color: var(--fallback-b1,oklch(var(--b1)/1));\n width: 15%;\n height: 15%;\n top: 7%;\n right: 7%;\n}\n.tw-avatar.tw-offline:before {\n content: \"\";\n position: absolute;\n z-index: 10;\n display: block;\n border-radius: 9999px;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));\n outline-style: solid;\n outline-width: 2px;\n outline-color: var(--fallback-b1,oklch(var(--b1)/1));\n width: 15%;\n height: 15%;\n top: 7%;\n right: 7%;\n}\n.tw-card-compact .tw-card-body {\n padding: 1rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.tw-card-compact .tw-card-title {\n margin-bottom: 0.25rem;\n}\n.tw-card-normal .tw-card-body {\n padding: var(--padding-card, 2rem);\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.tw-card-normal .tw-card-title {\n margin-bottom: 0.75rem;\n}\n.tw-join.tw-join-vertical > :where(*:not(:first-child)):is(.tw-btn) {\n margin-top: calc(var(--border-btn) * -1);\n}\n.tw-join.tw-join-horizontal > :where(*:not(:first-child)):is(.tw-btn) {\n margin-inline-start: calc(var(--border-btn) * -1);\n margin-top: 0px;\n}\n.tw-modal-top :where(.tw-modal-box) {\n width: 100%;\n max-width: none;\n --tw-translate-y: -2.5rem;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-bottom-right-radius: var(--rounded-box, 1rem);\n border-bottom-left-radius: var(--rounded-box, 1rem);\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n}\n.tw-modal-middle :where(.tw-modal-box) {\n width: 91.666667%;\n max-width: 32rem;\n --tw-translate-y: 0px;\n --tw-scale-x: .9;\n --tw-scale-y: .9;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-top-left-radius: var(--rounded-box, 1rem);\n border-top-right-radius: var(--rounded-box, 1rem);\n border-bottom-right-radius: var(--rounded-box, 1rem);\n border-bottom-left-radius: var(--rounded-box, 1rem);\n}\n.tw-modal-bottom :where(.tw-modal-box) {\n width: 100%;\n max-width: none;\n --tw-translate-y: 2.5rem;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-top-left-radius: var(--rounded-box, 1rem);\n border-top-right-radius: var(--rounded-box, 1rem);\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.tw-tooltip {\n position: relative;\n display: inline-block;\n text-align: center;\n --tooltip-tail: 0.1875rem;\n --tooltip-color: var(--fallback-n,oklch(var(--n)/1));\n --tooltip-text-color: var(--fallback-nc,oklch(var(--nc)/1));\n --tooltip-tail-offset: calc(100% + 0.0625rem - var(--tooltip-tail));\n}\n.tw-tooltip:before,\n.tw-tooltip:after {\n opacity: 0;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-delay: 100ms;\n transition-duration: 200ms;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.tw-tooltip:after {\n position: absolute;\n content: \"\";\n border-style: solid;\n border-width: var(--tooltip-tail, 0);\n width: 0;\n height: 0;\n display: block;\n}\n.tw-tooltip:before {\n max-width: 20rem;\n white-space: normal;\n border-radius: 0.25rem;\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n background-color: var(--tooltip-color);\n color: var(--tooltip-text-color);\n width: -moz-max-content;\n width: max-content;\n}\n.tw-tooltip.tw-tooltip-open:before {\n opacity: 1;\n transition-delay: 75ms;\n}\n.tw-tooltip.tw-tooltip-open:after {\n opacity: 1;\n transition-delay: 75ms;\n}\n.tw-tooltip:hover:before {\n opacity: 1;\n transition-delay: 75ms;\n}\n.tw-tooltip:hover:after {\n opacity: 1;\n transition-delay: 75ms;\n}\n.tw-tooltip:has(:focus-visible):after,\n.tw-tooltip:has(:focus-visible):before {\n opacity: 1;\n transition-delay: 75ms;\n}\n.tw-tooltip:not([data-tip]):hover:before,\n.tw-tooltip:not([data-tip]):hover:after {\n visibility: hidden;\n opacity: 0;\n}\n.tw-tooltip:after, .tw-tooltip-top:after {\n transform: translateX(-50%);\n border-color: var(--tooltip-color) transparent transparent transparent;\n top: auto;\n left: 50%;\n right: auto;\n bottom: var(--tooltip-tail-offset);\n}\n.tw-tooltip-left:after {\n transform: translateY(-50%);\n border-color: transparent transparent transparent var(--tooltip-color);\n top: 50%;\n left: auto;\n right: calc(var(--tooltip-tail-offset) + 0.0625rem);\n bottom: auto;\n}\n.tw-tooltip-right:after {\n transform: translateY(-50%);\n border-color: transparent var(--tooltip-color) transparent transparent;\n top: 50%;\n left: calc(var(--tooltip-tail-offset) + 0.0625rem);\n right: auto;\n bottom: auto;\n}\n.tw-pointer-events-none {\n pointer-events: none;\n}\n.tw-pointer-events-auto {\n pointer-events: auto;\n}\n.tw-fixed {\n position: fixed;\n}\n.tw-absolute {\n position: absolute;\n}\n.tw-relative {\n position: relative;\n}\n.tw-inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.\\!tw-bottom-24 {\n bottom: 6rem !important;\n}\n.\\!tw-left-0 {\n left: 0px !important;\n}\n.\\!tw-left-auto {\n left: auto !important;\n}\n.-tw-left-6 {\n left: -1.5rem;\n}\n.tw--right-2 {\n right: -0.5rem;\n}\n.tw--top-2 {\n top: -0.5rem;\n}\n.tw-bottom-0 {\n bottom: 0px;\n}\n.tw-bottom-4 {\n bottom: 1rem;\n}\n.tw-left-0 {\n left: 0px;\n}\n.tw-left-1\\/2 {\n left: 50%;\n}\n.tw-left-4 {\n left: 1rem;\n}\n.tw-right-0 {\n right: 0px;\n}\n.tw-right-1 {\n right: 0.25rem;\n}\n.tw-right-2 {\n right: 0.5rem;\n}\n.tw-right-4 {\n right: 1rem;\n}\n.tw-right-5 {\n right: 1.25rem;\n}\n.tw-top-0 {\n top: 0px;\n}\n.tw-top-1 {\n top: 0.25rem;\n}\n.tw-top-14 {\n top: 3.5rem;\n}\n.tw-top-2 {\n top: 0.5rem;\n}\n.tw-top-4 {\n top: 1rem;\n}\n.\\!tw-z-\\[10000\\] {\n z-index: 10000 !important;\n}\n.tw-z-1000 {\n z-index: 1000;\n}\n.tw-z-3000 {\n z-index: 3000;\n}\n.tw-z-500 {\n z-index: 500;\n}\n.tw-z-\\[10000\\] {\n z-index: 10000;\n}\n.tw-z-\\[10035\\] {\n z-index: 10035;\n}\n.tw-z-\\[2000\\] {\n z-index: 2000;\n}\n.tw-z-\\[4000\\] {\n z-index: 4000;\n}\n.tw-z-\\[9998\\] {\n z-index: 9998;\n}\n.tw-z-\\[999\\] {\n z-index: 999;\n}\n.tw-col-span-1 {\n grid-column: span 1 / span 1;\n}\n.tw-float-right {\n float: right;\n}\n.tw-float-left {\n float: left;\n}\n.tw-m-1 {\n margin: 0.25rem;\n}\n.tw-m-4 {\n margin: 1rem;\n}\n.tw-m-auto {\n margin: auto;\n}\n.\\!tw-my-0 {\n margin-top: 0px !important;\n margin-bottom: 0px !important;\n}\n.\\!tw-my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n.-tw-mx-4 {\n margin-left: -1rem;\n margin-right: -1rem;\n}\n.tw-mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.tw-mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.tw-mx-6 {\n margin-left: 1.5rem;\n margin-right: 1.5rem;\n}\n.tw-mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.tw-my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.tw-my-10 {\n margin-top: 2.5rem;\n margin-bottom: 2.5rem;\n}\n.tw-my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.-tw-mb-1 {\n margin-bottom: -0.25rem;\n}\n.-tw-mb-2 {\n margin-bottom: -0.5rem;\n}\n.-tw-mb-4 {\n margin-bottom: -1rem;\n}\n.-tw-mr-4 {\n margin-right: -1rem;\n}\n.-tw-mr-6 {\n margin-right: -1.5rem;\n}\n.-tw-mt-2 {\n margin-top: -0.5rem;\n}\n.tw-mb-0 {\n margin-bottom: 0px;\n}\n.tw-mb-1 {\n margin-bottom: 0.25rem;\n}\n.tw-mb-10 {\n margin-bottom: 2.5rem;\n}\n.tw-mb-2 {\n margin-bottom: 0.5rem;\n}\n.tw-mb-3 {\n margin-bottom: 0.75rem;\n}\n.tw-mb-4 {\n margin-bottom: 1rem;\n}\n.tw-mb-6 {\n margin-bottom: 1.5rem;\n}\n.tw-ml-1 {\n margin-left: 0.25rem;\n}\n.tw-ml-2 {\n margin-left: 0.5rem;\n}\n.tw-mr-1 {\n margin-right: 0.25rem;\n}\n.tw-mr-2 {\n margin-right: 0.5rem;\n}\n.tw-mr-4 {\n margin-right: 1rem;\n}\n.tw-mr-5 {\n margin-right: 1.25rem;\n}\n.tw-mt-0 {\n margin-top: 0px;\n}\n.tw-mt-1 {\n margin-top: 0.25rem;\n}\n.tw-mt-1\\.5 {\n margin-top: 0.375rem;\n}\n.tw-mt-12 {\n margin-top: 3rem;\n}\n.tw-mt-16 {\n margin-top: 4rem;\n}\n.tw-mt-2 {\n margin-top: 0.5rem;\n}\n.tw-mt-3 {\n margin-top: 0.75rem;\n}\n.tw-mt-4 {\n margin-top: 1rem;\n}\n.tw-mt-5 {\n margin-top: 1.25rem;\n}\n.tw-mt-6 {\n margin-top: 1.5rem;\n}\n.tw-mt-8 {\n margin-top: 2rem;\n}\n.tw-block {\n display: block;\n}\n.tw-inline-block {\n display: inline-block;\n}\n.tw-inline {\n display: inline;\n}\n.tw-flex {\n display: flex;\n}\n.tw-inline-flex {\n display: inline-flex;\n}\n.tw-table {\n display: table;\n}\n.tw-grid {\n display: grid;\n}\n.tw-hidden {\n display: none;\n}\n.tw-h-10 {\n height: 2.5rem;\n}\n.tw-h-12 {\n height: 3rem;\n}\n.tw-h-20 {\n height: 5rem;\n}\n.tw-h-24 {\n height: 6rem;\n}\n.tw-h-28 {\n height: 7rem;\n}\n.tw-h-3 {\n height: 0.75rem;\n}\n.tw-h-3\\/4 {\n height: 75%;\n}\n.tw-h-32 {\n height: 8rem;\n}\n.tw-h-4 {\n height: 1rem;\n}\n.tw-h-40 {\n height: 10rem;\n}\n.tw-h-48 {\n height: 12rem;\n}\n.tw-h-5 {\n height: 1.25rem;\n}\n.tw-h-6 {\n height: 1.5rem;\n}\n.tw-h-8 {\n height: 2rem;\n}\n.tw-h-96 {\n height: 24rem;\n}\n.tw-h-\\[100dvh\\] {\n height: 100dvh;\n}\n.tw-h-\\[calc\\(100\\%-1rem\\)\\] {\n height: calc(100% - 1rem);\n}\n.tw-h-\\[calc\\(100dvh-268px\\)\\] {\n height: calc(100dvh - 268px);\n}\n.tw-h-\\[calc\\(100dvh-280px\\)\\] {\n height: calc(100dvh - 280px);\n}\n.tw-h-\\[calc\\(100dvh-332px\\)\\] {\n height: calc(100dvh - 332px);\n}\n.tw-h-\\[calc\\(100dvh-64px\\)\\] {\n height: calc(100dvh - 64px);\n}\n.tw-h-\\[calc\\(50\\%-0\\.75em\\)\\] {\n height: calc(50% - 0.75em);\n}\n.tw-h-\\[calc\\(50\\%-1\\.5em\\)\\] {\n height: calc(50% - 1.5em);\n}\n.tw-h-fit {\n height: -moz-fit-content;\n height: fit-content;\n}\n.tw-h-full {\n height: 100%;\n}\n.tw-max-h-64 {\n max-height: 16rem;\n}\n.tw-max-h-\\[calc\\(100dvh-152px\\)\\] {\n max-height: calc(100dvh - 152px);\n}\n.tw-max-h-\\[calc\\(100dvh-96px\\)\\] {\n max-height: calc(100dvh - 96px);\n}\n.tw-min-h-0 {\n min-height: 0px;\n}\n.tw-min-h-56 {\n min-height: 224px;\n}\n.tw-min-h-80 {\n min-height: 320px;\n}\n.tw-min-h-\\[21px\\] {\n min-height: 21px;\n}\n.tw-min-h-\\[5em\\] {\n min-height: 5em;\n}\n.tw-w-1 {\n width: 0.25rem;\n}\n.tw-w-10 {\n width: 2.5rem;\n}\n.tw-w-12 {\n width: 3rem;\n}\n.tw-w-20 {\n width: 5rem;\n}\n.tw-w-28 {\n width: 7rem;\n}\n.tw-w-4 {\n width: 1rem;\n}\n.tw-w-48 {\n width: 12rem;\n}\n.tw-w-5 {\n width: 1.25rem;\n}\n.tw-w-52 {\n width: 13rem;\n}\n.tw-w-6 {\n width: 1.5rem;\n}\n.tw-w-8 {\n width: 2rem;\n}\n.tw-w-80 {\n width: 20rem;\n}\n.tw-w-96 {\n width: 24rem;\n}\n.tw-w-\\[56px\\] {\n width: 56px;\n}\n.tw-w-\\[calc\\(100\\%-32px\\)\\] {\n width: calc(100% - 32px);\n}\n.tw-w-\\[calc\\(100vw-2rem\\)\\] {\n width: calc(100vw - 2rem);\n}\n.tw-w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.tw-w-full {\n width: 100%;\n}\n.tw-min-w-0 {\n min-width: 0px;\n}\n.tw-min-w-80 {\n min-width: 320px;\n}\n.tw-min-w-\\[10\\.4em\\] {\n min-width: 10.4em;\n}\n.tw-min-w-\\[10em\\] {\n min-width: 10em;\n}\n.tw-min-w-\\[8rem\\] {\n min-width: 8rem;\n}\n.tw-min-w-fit {\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n.tw-max-w-3xl {\n max-width: 48rem;\n}\n.tw-max-w-\\[17rem\\] {\n max-width: 17rem;\n}\n.tw-max-w-\\[22rem\\] {\n max-width: 22rem;\n}\n.tw-max-w-\\[calc\\(100\\%-60px\\)\\] {\n max-width: calc(100% - 60px);\n}\n.tw-max-w-full {\n max-width: 100%;\n}\n.tw-max-w-xl {\n max-width: 36rem;\n}\n.tw-max-w-xs {\n max-width: 20rem;\n}\n.tw-flex-1 {\n flex: 1 1 0%;\n}\n.tw-flex-none {\n flex: none;\n}\n.tw-flex-grow {\n flex-grow: 1;\n}\n.tw-grow {\n flex-grow: 1;\n}\n.tw-basis-1\\/5 {\n flex-basis: 20%;\n}\n.tw-basis-2\\/5 {\n flex-basis: 40%;\n}\n.-tw-translate-y-1\\/3 {\n --tw-translate-y: -33.333333%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw--translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw--translate-x-full {\n --tw-translate-x: -100%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-translate-x-0 {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-translate-x-1\\/3 {\n --tw-translate-x: 33.333333%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-rotate-180 {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes tw-pulseGrow {\n\n 0%, 100% {\n transform: scale(1.00);\n }\n\n 80% {\n transform: scale(1.00);\n }\n\n 90% {\n transform: scale(0.95);\n }\n}\n.tw-animate-pulseGrow {\n animation: tw-pulseGrow 2s ease-in-out infinite;\n}\n.tw-cursor-pointer {\n cursor: pointer;\n}\n.tw-cursor-text {\n cursor: text;\n}\n.tw-resize-none {\n resize: none;\n}\n.tw-list-inside {\n list-style-position: inside;\n}\n.tw-list-decimal {\n list-style-type: decimal;\n}\n.tw-list-disc {\n list-style-type: disc;\n}\n.tw-list-none {\n list-style-type: none;\n}\n.tw-columns-1 {\n -moz-columns: 1;\n columns: 1;\n}\n.tw-break-inside-avoid {\n -moz-column-break-inside: avoid;\n break-inside: avoid;\n}\n.tw-grid-flow-col {\n grid-auto-flow: column;\n}\n.tw-grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.tw-grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.tw-grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.tw-grid-cols-6 {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n}\n.tw-flex-row {\n flex-direction: row;\n}\n.tw-flex-col {\n flex-direction: column;\n}\n.tw-flex-wrap {\n flex-wrap: wrap;\n}\n.tw-place-content-center {\n place-content: center;\n}\n.tw-place-content-end {\n place-content: end;\n}\n.tw-place-items-end {\n place-items: end;\n}\n.tw-place-items-center {\n place-items: center;\n}\n.tw-items-center {\n align-items: center;\n}\n.tw-justify-normal {\n justify-content: normal;\n}\n.tw-justify-end {\n justify-content: flex-end;\n}\n.tw-justify-center {\n justify-content: center;\n}\n.tw-justify-between {\n justify-content: space-between;\n}\n.tw-gap-2 {\n gap: 0.5rem;\n}\n.tw-gap-6 {\n gap: 1.5rem;\n}\n.tw-space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.5rem * var(--tw-space-x-reverse));\n margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.tw-space-x-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.tw-space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.tw-space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.tw-place-self-end {\n place-self: end;\n}\n.tw-place-self-center {\n place-self: center;\n}\n.tw-self-center {\n align-self: center;\n}\n.tw-overflow-auto {\n overflow: auto;\n}\n.tw-overflow-hidden {\n overflow: hidden;\n}\n.tw-overflow-scroll {\n overflow: scroll;\n}\n.tw-overflow-x-auto {\n overflow-x: auto;\n}\n.tw-overflow-y-auto {\n overflow-y: auto;\n}\n.tw-overflow-x-hidden {\n overflow-x: hidden;\n}\n.tw-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.tw-text-ellipsis {\n text-overflow: ellipsis;\n}\n.tw-whitespace-nowrap {\n white-space: nowrap;\n}\n.\\!tw-rounded-none {\n border-radius: 0px !important;\n}\n.tw-rounded {\n border-radius: 0.25rem;\n}\n.tw-rounded-2xl {\n border-radius: 1rem;\n}\n.tw-rounded-box {\n border-radius: var(--rounded-box, 1rem);\n}\n.tw-rounded-full {\n border-radius: 9999px;\n}\n.tw-rounded-lg {\n border-radius: 0.5rem;\n}\n.tw-rounded-md {\n border-radius: 0.375rem;\n}\n.tw-rounded-none {\n border-radius: 0px;\n}\n.tw-rounded-xl {\n border-radius: 0.75rem;\n}\n.tw-rounded-br-md {\n border-bottom-right-radius: 0.375rem;\n}\n.tw-rounded-tl-none {\n border-top-left-radius: 0px;\n}\n.tw-rounded-tr-md {\n border-top-right-radius: 0.375rem;\n}\n.tw-border {\n border-width: 1px;\n}\n.tw-border-0 {\n border-width: 0px;\n}\n.tw-border-4 {\n border-width: 4px;\n}\n.tw-border-\\[1px\\] {\n border-width: 1px;\n}\n.tw-border-t-0 {\n border-top-width: 0px;\n}\n.tw-border-none {\n border-style: none;\n}\n.tw-border-\\[var\\(--fallback-bc\\,oklch\\(var\\(--bc\\)\\/0\\.2\\)\\)\\] {\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-border-base-200 {\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity, 1)));\n}\n.tw-border-base-300 {\n --tw-border-opacity: 1;\n border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity, 1)));\n}\n.tw-border-current {\n border-color: currentColor;\n}\n.tw-border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n.tw-bg-\\[\\#369acc\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(54 154 204 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#95cf92\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(149 207 146 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#9656a2\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(150 86 162 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#A9DEF9\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(169 222 249 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#D0F4DE\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(208 244 222 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#E4C1F9\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(228 193 249 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#FCF6BD\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(252 246 189 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#FF99C8\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 153 200 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#de324c\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(222 50 76 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#f4895f\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(244 137 95 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#f8e16f\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(248 225 111 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#fff0d6\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 240 214 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-base-100 {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity, 1)));\n}\n.tw-bg-base-200 {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity, 1)));\n}\n.tw-bg-base-300 {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity, 1)));\n}\n.tw-bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-neutral-content {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-nc,oklch(var(--nc)/var(--tw-bg-opacity, 1)));\n}\n.tw-bg-primary {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity, 1)));\n}\n.tw-bg-slate-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(226 232 240 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-transparent {\n background-color: transparent;\n}\n.tw-bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.tw-fill-current {\n fill: currentColor;\n}\n.tw-stroke-current {\n stroke: currentColor;\n}\n.tw-object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.\\!tw-p-0 {\n padding: 0px !important;\n}\n.\\!tw-p-4 {\n padding: 1rem !important;\n}\n.\\!tw-p-9 {\n padding: 2.25rem !important;\n}\n.tw-p-0 {\n padding: 0px;\n}\n.tw-p-1 {\n padding: 0.25rem;\n}\n.tw-p-2 {\n padding: 0.5rem;\n}\n.tw-p-3 {\n padding: 0.75rem;\n}\n.tw-p-4 {\n padding: 1rem;\n}\n.tw-p-6 {\n padding: 1.5rem;\n}\n.tw-p-\\[1px\\] {\n padding: 1px;\n}\n.tw-px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.tw-px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.tw-px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.tw-px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.tw-py-0\\.5 {\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n}\n.tw-py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.tw-py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.\\!tw-pe-2 {\n padding-inline-end: 0.5rem !important;\n}\n.\\!tw-ps-2 {\n padding-inline-start: 0.5rem !important;\n}\n.tw-pb-0 {\n padding-bottom: 0px;\n}\n.tw-pb-1 {\n padding-bottom: 0.25rem;\n}\n.tw-pb-2 {\n padding-bottom: 0.5rem;\n}\n.tw-pb-4 {\n padding-bottom: 1rem;\n}\n.tw-pb-6 {\n padding-bottom: 1.5rem;\n}\n.tw-pl-2 {\n padding-left: 0.5rem;\n}\n.tw-pr-1 {\n padding-right: 0.25rem;\n}\n.tw-pr-12 {\n padding-right: 3rem;\n}\n.tw-pr-4 {\n padding-right: 1rem;\n}\n.tw-pt-0 {\n padding-top: 0px;\n}\n.tw-pt-1 {\n padding-top: 0.25rem;\n}\n.tw-pt-2 {\n padding-top: 0.5rem;\n}\n.tw-pt-4 {\n padding-top: 1rem;\n}\n.tw-pt-6 {\n padding-top: 1.5rem;\n}\n.tw-text-center {\n text-align: center;\n}\n.tw-text-right {\n text-align: right;\n}\n.tw-align-middle {\n vertical-align: middle;\n}\n.tw-text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.tw-text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.tw-text-6xl {\n font-size: 3.75rem;\n line-height: 1;\n}\n.tw-text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.tw-text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.tw-text-map {\n font-size: 13px;\n}\n.tw-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.tw-text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.tw-text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.tw-font-bold {\n font-weight: 700;\n}\n.tw-font-medium {\n font-weight: 500;\n}\n.tw-font-normal {\n font-weight: 400;\n}\n.tw-font-semibold {\n font-weight: 600;\n}\n.tw-normal-case {\n text-transform: none;\n}\n.tw-italic {\n font-style: italic;\n}\n.tw-leading-3 {\n line-height: .75rem;\n}\n.tw-leading-5 {\n line-height: 1.25rem;\n}\n.tw-leading-map {\n line-height: 1.4em;\n}\n.\\!tw-text-base-content {\n --tw-text-opacity: 1 !important;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity, 1))) !important;\n}\n.\\!tw-text-error {\n --tw-text-opacity: 1 !important;\n color: var(--fallback-er,oklch(var(--er)/var(--tw-text-opacity, 1))) !important;\n}\n.tw-text-base-content {\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity, 1)));\n}\n.tw-text-current {\n color: currentColor;\n}\n.tw-text-error {\n --tw-text-opacity: 1;\n color: var(--fallback-er,oklch(var(--er)/var(--tw-text-opacity, 1)));\n}\n.tw-text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n.tw-text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n.tw-text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.tw-text-green-500 {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n.tw-text-primary {\n --tw-text-opacity: 1;\n color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity, 1)));\n}\n.tw-text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.tw-text-zinc-500 {\n --tw-text-opacity: 1;\n color: rgb(113 113 122 / var(--tw-text-opacity, 1));\n}\n.tw-underline {\n text-decoration-line: underline;\n}\n.tw-opacity-0 {\n opacity: 0;\n}\n.tw-opacity-100 {\n opacity: 1;\n}\n.tw-opacity-50 {\n opacity: 0.5;\n}\n.tw-shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.tw-shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.tw-shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.tw-shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.tw-shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.tw-drop-shadow-md {\n --tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.tw-backdrop-brightness-75 {\n --tw-backdrop-brightness: brightness(.75);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.tw-transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.tw-transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.tw-transition-none {\n transition-property: none;\n}\n.tw-transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.tw-duration-200 {\n transition-duration: 200ms;\n}\n.tw-duration-300 {\n transition-duration: 300ms;\n}\n.tw-duration-500 {\n transition-duration: 500ms;\n}\n.tw-ease-in {\n transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\n}\n.\\[--tab-border-color\\:var\\(--fallback-bc\\2c oklch\\(var\\(--bc\\)\\/0\\.2\\)\\)\\] {\n --tab-border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.\\!\\[clip\\:rect\\(0\\2c 0\\2c 0\\2c 0\\)\\] {\n clip: rect(0,0,0,0) !important;\n}\n.\\[clip\\:rect\\(0\\2c 0\\2c 0\\2c 0\\)\\] {\n clip: rect(0,0,0,0);\n}\n.\\[direction\\:ltr\\] {\n direction: ltr;\n}\n.\\[overflow-anchor\\:none\\] {\n overflow-anchor: none;\n}\n.\\[transition\\:background-color_\\.2s_linear\\2c _height_\\.2s_ease-in-out\\] {\n transition: background-color .2s linear, height .2s ease-in-out;\n}\n.\\[transition\\:background-color_\\.2s_linear\\2c _width_\\.2s_ease-in-out\\2c _opacity\\] {\n transition: background-color .2s linear, width .2s ease-in-out, opacity;\n}\n.\\[transition\\:background-color_250ms_cubic-bezier\\(0\\.4\\2c 0\\2c 0\\.2\\2c 1\\)_0ms\\2c box-shadow_250ms_cubic-bezier\\(0\\.4\\2c 0\\2c 0\\.2\\2c 1\\)_0ms\\2c border_250ms_cubic-bezier\\(0\\.4\\2c 0\\2c 0\\.2\\2c 1\\)_0ms\\] {\n transition: background-color 250ms cubic-bezier(0.4,0,0.2,1) 0ms,box-shadow 250ms cubic-bezier(0.4,0,0.2,1) 0ms,border 250ms cubic-bezier(0.4,0,0.2,1) 0ms;\n}\n\n.fade {\n -webkit-mask-image: linear-gradient(180deg, transparent, #000 1%, #000 99%, transparent);\n mask-image: linear-gradient(180deg, transparent, #000 1%, #000 99%, transparent);\n}\n\n.tw-modal {\n z-index: 1200 !important;\n}\n\n.tw-menu li a {\n border-radius: 10px;\n}\n\n.tw-modal {\n z-index: 1200 !important;\n max-height: 100dvh;\n}\n\n.tw-modal-box {\n max-height: calc(100dvh - 2em);\n}\n\n.Toastify__toast {\n border-radius: 1rem;\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n margin-left: 1rem;\n margin-right: 1rem;\n margin-bottom: 1rem;\n background-color: var(--fallback-b1,oklch(var(--b1)/1));\n color: var(--fallback-bc,oklch(var(--bc)/1));\n}\n\n.Toastify__toast-container {\n z-index: 2001 !important;\n}\n\n.Toastify__toast-container--top-right {\n top: 4.75em !important;\n}\n\n:root {\n\n --toastify-color-info: var(--fallback-in,oklch(var(--in)/1));\n --toastify-color-success: var(--fallback-su,oklch(var(--su)/1));\n --toastify-color-warning: var(--fallback-wa,oklch(var(--wa)/1));\n --toastify-color-error: var(--fallback-er,oklch(var(--er)/1));\n\n}\n\n.placeholder-center::-moz-placeholder {\n text-align: center;\n}\n\n.placeholder-center::placeholder {\n text-align: center;\n}\n\n.custom-file-upload {\n cursor: pointer;\n}\n\ninput[type=\"file\"] {\n display: none;\n}\n\n.custom-file-upload:hover .button {\n opacity: 0.8;\n}\n\n.custom-file-upload .button {\n transition: .5s ease;\n opacity: 0;\n position: absolute;\n transform: translate(8px, 8px);\n\n}\n\n.tw-tab-content .container {\n height: 100%;\n}\n\n.masonry {\n -moz-column-count: 1;\n column-count: 1;\n -moz-column-gap: 1.5rem;\n column-gap: 1.5rem;\n}\n.masonry-item {\n -moz-column-break-inside: avoid;\n break-inside: avoid;\n margin-bottom: 1.5rem;\n}\n@media (min-width: 640px) {\n .masonry {\n -moz-column-count: 2;\n column-count: 2;\n }\n}\n@media (min-width: 1024px) {\n .masonry {\n -moz-column-count: 3;\n column-count: 3;\n }\n}\n@media (min-width: 1536px) {\n .masonry {\n -moz-column-count: 4;\n column-count: 4;\n }\n}\n@media (min-width: 640px) {\n\n .sm\\:tw-table-sm :not(thead):not(tfoot) tr {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .sm\\:tw-table-sm :where(th, td) {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:tw-table-md :not(thead):not(tfoot) tr {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .md\\:tw-table-md :where(th, td) {\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n }\n}\n.hover\\:tw-cursor-pointer:hover {\n cursor: pointer;\n}\n.hover\\:tw-bg-base-200:hover {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity, 1)));\n}\n.hover\\:tw-bg-slate-300:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(203 213 225 / var(--tw-bg-opacity, 1));\n}\n.hover\\:tw-bg-transparent:hover {\n background-color: transparent;\n}\n.hover\\:tw-font-bold:hover {\n font-weight: 700;\n}\n.hover\\:tw-text-primary:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity, 1)));\n}\n.hover\\:tw-underline:hover {\n text-decoration-line: underline;\n}\n.focus\\:tw-border-indigo-500:focus {\n --tw-border-opacity: 1;\n border-color: rgb(99 102 241 / var(--tw-border-opacity, 1));\n}\n.focus\\:tw-outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:tw-ring-indigo-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity, 1));\n}\n.data-\\[te-sidenav-slim\\=\\'true\\'\\]\\:tw-hidden[data-te-sidenav-slim='true'] {\n display: none;\n}\n.data-\\[te-sidenav-slim-collapsed\\=\\'true\\'\\]\\:tw-w-\\[56px\\][data-te-sidenav-slim-collapsed='true'] {\n width: 56px;\n}\n.data-\\[te-sidenav-slim\\=\\'true\\'\\]\\:tw-w-\\[56px\\][data-te-sidenav-slim='true'] {\n width: 56px;\n}\n.data-\\[te-sidenav-hidden\\=\\'false\\'\\]\\:tw-translate-x-0[data-te-sidenav-hidden='false'] {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-group[data-te-sidenav-slim-collapsed='true'] .group-\\[\\&\\[data-te-sidenav-slim-collapsed\\=\\'true\\'\\]\\]\\:data-\\[te-sidenav-slim\\=\\'false\\'\\]\\:tw-hidden[data-te-sidenav-slim='false'] {\n display: none;\n}\n@media (min-width: 640px) {\n\n .sm\\:\\!tw-left-auto {\n left: auto !important;\n }\n\n .sm\\:tw-grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .sm\\:tw-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:tw-mb-0 {\n margin-bottom: 0px;\n }\n\n .md\\:tw-flex {\n display: flex;\n }\n\n .md\\:tw-hidden {\n display: none;\n }\n\n .md\\:tw-w-1\\/2 {\n width: 50%;\n }\n\n .md\\:tw-w-\\[calc\\(50\\%-32px\\)\\] {\n width: calc(50% - 32px);\n }\n\n .md\\:tw-columns-2 {\n -moz-columns: 2;\n columns: 2;\n }\n\n .md\\:tw-grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n\n .md\\:tw-grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .md\\:tw-space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .md\\:tw-text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n }\n}\n@media (min-width: 1024px) {\n\n .lg\\:tw-columns-3 {\n -moz-columns: 3;\n columns: 3;\n }\n\n .lg\\:tw-grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n}\n@media (min-width: 1280px) {\n\n .xl\\:tw-max-w-6xl {\n max-width: 72rem;\n }\n\n .xl\\:tw-grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n\n .xl\\:tw-text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n }\n}\n@media (min-width: 1536px) {\n\n .\\32xl\\:tw-columns-4 {\n -moz-columns: 4;\n columns: 4;\n }\n\n .\\32xl\\:tw-grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n}\n.rtl\\:\\[direction\\:rtl\\]:where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n direction: rtl;\n}\n@media (prefers-color-scheme: dark) {\n\n .dark\\:tw-bg-zinc-800 {\n --tw-bg-opacity: 1;\n background-color: rgb(39 39 42 / var(--tw-bg-opacity, 1));\n }\n}\n.\\[\\&\\[data-te-sidenav-slim-collapsed\\=\\'true\\'\\]\\[data-te-sidenav-slim\\=\\'false\\'\\]\\]\\:tw-hidden[data-te-sidenav-slim-collapsed='true'][data-te-sidenav-slim='false'] {\n display: none;\n}\n.\\[\\&\\[data-te-sidenav-slim-collapsed\\=\\'true\\'\\]\\[data-te-sidenav-slim\\=\\'true\\'\\]\\]\\:\\[display\\:unset\\][data-te-sidenav-slim-collapsed='true'][data-te-sidenav-slim='true'] {\n display: unset;\n}";
|
76
|
+
var css_248z$4 = "*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}/*\n! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: Helvetica, sans-serif, Roboto; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n -webkit-tap-highlight-color: transparent; /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, monospace; /* 1 */\n font-feature-settings: normal; /* 2 */\n font-variation-settings: normal; /* 3 */\n font-size: 1em; /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n letter-spacing: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n\n:root,\n[data-theme] {\n background-color: var(--fallback-b1,oklch(var(--b1)/1));\n color: var(--fallback-bc,oklch(var(--bc)/1));\n}\n\n@supports not (color: oklch(0% 0 0)) {\n\n :root {\n color-scheme: light;\n --fallback-p: #491eff;\n --fallback-pc: #d4dbff;\n --fallback-s: #ff41c7;\n --fallback-sc: #fff9fc;\n --fallback-a: #00cfbd;\n --fallback-ac: #00100d;\n --fallback-n: #2b3440;\n --fallback-nc: #d7dde4;\n --fallback-b1: #ffffff;\n --fallback-b2: #e5e6e6;\n --fallback-b3: #e5e6e6;\n --fallback-bc: #1f2937;\n --fallback-in: #00b3f0;\n --fallback-inc: #000000;\n --fallback-su: #00ca92;\n --fallback-suc: #000000;\n --fallback-wa: #ffc22d;\n --fallback-wac: #000000;\n --fallback-er: #ff6f70;\n --fallback-erc: #000000;\n }\n\n @media (prefers-color-scheme: dark) {\n\n :root {\n color-scheme: dark;\n --fallback-p: #7582ff;\n --fallback-pc: #050617;\n --fallback-s: #ff71cf;\n --fallback-sc: #190211;\n --fallback-a: #00c7b5;\n --fallback-ac: #000e0c;\n --fallback-n: #2a323c;\n --fallback-nc: #a6adbb;\n --fallback-b1: #1d232a;\n --fallback-b2: #191e24;\n --fallback-b3: #15191e;\n --fallback-bc: #a6adbb;\n --fallback-in: #00b3f0;\n --fallback-inc: #000000;\n --fallback-su: #00ca92;\n --fallback-suc: #000000;\n --fallback-wa: #ffc22d;\n --fallback-wac: #000000;\n --fallback-er: #ff6f70;\n --fallback-erc: #000000;\n }\n }\n}\n\nhtml {\n -webkit-tap-highlight-color: transparent;\n}\n\n* {\n scrollbar-color: color-mix(in oklch, currentColor 35%, transparent) transparent;\n}\n\n*:hover {\n scrollbar-color: color-mix(in oklch, currentColor 60%, transparent) transparent;\n}\n\n:root {\n color-scheme: light;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 89.824% 0.06192 275.75;\n --ac: 15.352% 0.0368 183.61;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --p: 49.12% 0.3096 275.75;\n --s: 69.71% 0.329 342.55;\n --sc: 98.71% 0.0106 342.55;\n --a: 76.76% 0.184 183.61;\n --n: 32.1785% 0.02476 255.701624;\n --nc: 89.4994% 0.011585 252.096176;\n --b1: 100% 0 0;\n --b2: 96.1151% 0 0;\n --b3: 92.4169% 0.00108 197.137559;\n --bc: 27.8078% 0.029596 256.847952;\n}\n\n@media (prefers-color-scheme: dark) {\n\n :root {\n color-scheme: dark;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 13.138% 0.0392 275.75;\n --sc: 14.96% 0.052 342.55;\n --ac: 14.902% 0.0334 183.61;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --p: 65.69% 0.196 275.75;\n --s: 74.8% 0.26 342.55;\n --a: 74.51% 0.167 183.61;\n --n: 31.3815% 0.021108 254.139175;\n --nc: 74.6477% 0.0216 264.435964;\n --b1: 25.3267% 0.015896 252.417568;\n --b2: 23.2607% 0.013807 253.100675;\n --b3: 21.1484% 0.01165 254.087939;\n --bc: 74.6477% 0.0216 264.435964;\n }\n}\n\n[data-theme=light] {\n color-scheme: light;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 89.824% 0.06192 275.75;\n --ac: 15.352% 0.0368 183.61;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --p: 49.12% 0.3096 275.75;\n --s: 69.71% 0.329 342.55;\n --sc: 98.71% 0.0106 342.55;\n --a: 76.76% 0.184 183.61;\n --n: 32.1785% 0.02476 255.701624;\n --nc: 89.4994% 0.011585 252.096176;\n --b1: 100% 0 0;\n --b2: 96.1151% 0 0;\n --b3: 92.4169% 0.00108 197.137559;\n --bc: 27.8078% 0.029596 256.847952;\n}\n\n[data-theme=dark] {\n color-scheme: dark;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 13.138% 0.0392 275.75;\n --sc: 14.96% 0.052 342.55;\n --ac: 14.902% 0.0334 183.61;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --p: 65.69% 0.196 275.75;\n --s: 74.8% 0.26 342.55;\n --a: 74.51% 0.167 183.61;\n --n: 31.3815% 0.021108 254.139175;\n --nc: 74.6477% 0.0216 264.435964;\n --b1: 25.3267% 0.015896 252.417568;\n --b2: 23.2607% 0.013807 253.100675;\n --b3: 21.1484% 0.01165 254.087939;\n --bc: 74.6477% 0.0216 264.435964;\n}\n\n[data-theme=cupcake] {\n color-scheme: light;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 15.2344% 0.017892 200.026556;\n --sc: 15.787% 0.020249 356.29965;\n --ac: 15.8762% 0.029206 78.618794;\n --nc: 84.7148% 0.013247 313.189598;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --p: 76.172% 0.089459 200.026556;\n --s: 78.9351% 0.101246 356.29965;\n --a: 79.3811% 0.146032 78.618794;\n --n: 23.5742% 0.066235 313.189598;\n --b1: 97.7882% 0.00418 56.375637;\n --b2: 93.9822% 0.007638 61.449292;\n --b3: 91.5861% 0.006811 53.440502;\n --bc: 23.5742% 0.066235 313.189598;\n --rounded-btn: 1.9rem;\n --tab-border: 2px;\n --tab-radius: 0.7rem;\n}\n\n[data-theme=retro] {\n color-scheme: light;\n --inc: 90.923% 0.043042 262.880917;\n --suc: 12.541% 0.033982 149.213788;\n --wac: 13.3168% 0.031484 58.31834;\n --erc: 13.144% 0.0398 27.33;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --p: 76.8664% 0.104092 22.664655;\n --pc: 26.5104% 0.006243 0.522862;\n --s: 80.7415% 0.052534 159.094608;\n --sc: 26.5104% 0.006243 0.522862;\n --a: 70.3919% 0.125455 52.953428;\n --ac: 26.5104% 0.006243 0.522862;\n --n: 28.4181% 0.009519 355.534017;\n --nc: 92.5604% 0.025113 89.217311;\n --b1: 91.6374% 0.034554 90.51575;\n --b2: 88.2722% 0.049418 91.774344;\n --b3: 84.133% 0.065952 90.856665;\n --bc: 26.5104% 0.006243 0.522862;\n --in: 54.615% 0.215208 262.880917;\n --su: 62.7052% 0.169912 149.213788;\n --wa: 66.584% 0.157422 58.31834;\n --er: 65.72% 0.199 27.33;\n --rounded-box: 0.4rem;\n --rounded-btn: 0.4rem;\n --rounded-badge: 0.4rem;\n --tab-radius: 0.4rem;\n}\n\n[data-theme=cyberpunk] {\n color-scheme: light;\n --b2: 87.8943% 0.16647 104.32;\n --b3: 81.2786% 0.15394 104.32;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --bc: 18.902% 0.0358 104.32;\n --pc: 14.844% 0.0418 6.35;\n --sc: 16.666% 0.0368 204.72;\n --ac: 14.372% 0.04352 310.43;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n font-family: ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;\n --p: 74.22% 0.209 6.35;\n --s: 83.33% 0.184 204.72;\n --a: 71.86% 0.2176 310.43;\n --n: 23.04% 0.065 269.31;\n --nc: 94.51% 0.179 104.32;\n --b1: 94.51% 0.179 104.32;\n --rounded-box: 0;\n --rounded-btn: 0;\n --rounded-badge: 0;\n --tab-radius: 0;\n}\n\n[data-theme=aqua] {\n color-scheme: dark;\n --b2: 45.3464% 0.118611 261.181672;\n --b3: 41.9333% 0.109683 261.181672;\n --bc: 89.7519% 0.025508 261.181672;\n --sc: 12.1365% 0.02175 309.782946;\n --ac: 18.6854% 0.020445 94.555431;\n --nc: 12.2124% 0.023402 243.760661;\n --inc: 90.923% 0.043042 262.880917;\n --suc: 12.541% 0.033982 149.213788;\n --wac: 13.3168% 0.031484 58.31834;\n --erc: 14.79% 0.038 27.33;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --p: 85.6617% 0.14498 198.6458;\n --pc: 40.1249% 0.068266 197.603872;\n --s: 60.6827% 0.108752 309.782946;\n --a: 93.4269% 0.102225 94.555431;\n --n: 61.0622% 0.117009 243.760661;\n --b1: 48.7596% 0.127539 261.181672;\n --in: 54.615% 0.215208 262.880917;\n --su: 62.7052% 0.169912 149.213788;\n --wa: 66.584% 0.157422 58.31834;\n --er: 73.95% 0.19 27.33;\n}\n\n[data-theme=docutopia] {\n --p: 54.645% 0.29421 298.46034;\n --b2: 25.8897% 0.107132 328.136712;\n --b3: 23.941% 0.099069 328.136712;\n --in: 72.06% 0.191 231.6;\n --su: 64.8% 0.150 160;\n --wa: 84.71% 0.199 83.87;\n --er: 71.76% 0.221 22.18;\n --pc: 90.929% 0.058842 298.46034;\n --sc: 13.9726% 0.031813 159.602475;\n --ac: 91.4207% 0.047244 260.255903;\n --nc: 84.1911% 0.008064 74.211583;\n --inc: 0% 0 0;\n --suc: 0% 0 0;\n --wac: 0% 0 0;\n --erc: 0% 0 0;\n --rounded-box: 1rem;\n --rounded-btn: 0.5rem;\n --rounded-badge: 1.9rem;\n --animation-btn: 0.25s;\n --animation-input: .2s;\n --btn-focus-scale: 0.95;\n --border-btn: 1px;\n --tab-border: 1px;\n --tab-radius: 0.5rem;\n --s: 69.8629% 0.159065 159.602475;\n --a: 57.1034% 0.236222 260.255903;\n --n: 20.9553% 0.040319 74.211583;\n --bc: 81.3966% 0.126754 58.524936;\n --b1: 27.8384% 0.115196 328.136712;\n}\n\ninput[type=\"range\"]::-webkit-slider-thumb {\n height: 1rem;\n width: 1rem;\n border-radius: 9999px;\n border: 0;\n appearance: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n cursor: pointer;\n}\n\n.dark input[type=\"range\"]::-webkit-slider-thumb {}\n\ninput[type=\"range\"]:disabled::-webkit-slider-thumb {}\n\ninput[type=\"range\"]:disabled:focus::-webkit-slider-thumb {}\n\ninput[type=\"range\"]:disabled:active::-webkit-slider-thumb {}\n\n.dark input[type=\"range\"]:disabled::-webkit-slider-thumb {}\n\n.dark input[type=\"range\"]:disabled:focus::-webkit-slider-thumb {}\n\n.dark input[type=\"range\"]:disabled:active::-webkit-slider-thumb {}\n\ninput[type=\"range\"]::-moz-range-thumb {\n height: 1rem;\n width: 1rem;\n border-radius: 9999px;\n border: 0;\n appearance: none;\n -moz-appearance: none;\n -webkit-appearance: none;\n cursor: pointer;\n}\n\n.dark input[type=\"range\"]::-moz-range-thumb {}\n\ninput[type=\"range\"]:disabled::-moz-range-thumb {}\n\n.dark input[type=\"range\"]:disabled::-moz-range-thumb {}\n\ninput[type=\"range\"]::-moz-range-progress {}\n\ninput[type=\"range\"]::-ms-fill-lower {}\n\n.dark input[type=\"range\"]::-moz-range-progress {}\n\n.dark input[type=\"range\"]::-ms-fill-lower {}\n\ninput[type=\"range\"]:focus {\n outline: none;\n}\n\ninput[type=\"range\"]:focus::-webkit-slider-thumb {}\n\ninput[type=\"range\"]:active::-webkit-slider-thumb {}\n\n.dark input[type=\"range\"]:focus::-webkit-slider-thumb {}\n\n.dark input[type=\"range\"]:active::-webkit-slider-thumb {}\n.tw-alert {\n display: grid;\n width: 100%;\n grid-auto-flow: row;\n align-content: flex-start;\n align-items: center;\n justify-items: center;\n gap: 1rem;\n text-align: center;\n border-radius: var(--rounded-box, 1rem);\n border-width: 1px;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n padding: 1rem;\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --alert-bg: var(--fallback-b2,oklch(var(--b2)/1));\n --alert-bg-mix: var(--fallback-b1,oklch(var(--b1)/1));\n background-color: var(--alert-bg);\n}\n@media (min-width: 640px) {\n\n .tw-alert {\n grid-auto-flow: column;\n grid-template-columns: auto minmax(auto,1fr);\n justify-items: start;\n text-align: start;\n }\n}\n.tw-avatar {\n position: relative;\n display: inline-flex;\n}\n.tw-avatar > div {\n display: block;\n aspect-ratio: 1 / 1;\n overflow: hidden;\n}\n.tw-avatar img {\n height: 100%;\n width: 100%;\n -o-object-fit: cover;\n object-fit: cover;\n}\n.tw-avatar.tw-placeholder > div {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.tw-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-duration: 200ms;\n height: 1.25rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n width: -moz-fit-content;\n width: fit-content;\n padding-left: 0.563rem;\n padding-right: 0.563rem;\n border-radius: var(--rounded-badge, 1.9rem);\n border-width: 1px;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n}\n.tw-breadcrumbs {\n max-width: 100%;\n overflow-x: auto;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.tw-breadcrumbs > ul,\n .tw-breadcrumbs > ol {\n display: flex;\n align-items: center;\n white-space: nowrap;\n min-height: -moz-min-content;\n min-height: min-content;\n}\n.tw-breadcrumbs > ul > li, .tw-breadcrumbs > ol > li {\n display: flex;\n align-items: center;\n}\n.tw-breadcrumbs > ul > li > a, .tw-breadcrumbs > ol > li > a {\n display: flex;\n cursor: pointer;\n align-items: center;\n}\n@media (hover:hover) {\n\n .tw-breadcrumbs > ul > li > a:hover, .tw-breadcrumbs > ol > li > a:hover {\n text-decoration-line: underline;\n }\n\n .tw-checkbox-success:hover {\n --tw-border-opacity: 1;\n border-color: var(--fallback-su,oklch(var(--su)/var(--tw-border-opacity)));\n }\n\n .tw-label a:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n }\n\n .tw-menu li > *:not(ul, .tw-menu-title, details, .tw-btn):active,\n.tw-menu li > *:not(ul, .tw-menu-title, details, .tw-btn).tw-active,\n.tw-menu li > details > summary:active {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));\n }\n\n .tw-tab:hover {\n --tw-text-opacity: 1;\n }\n\n .tw-table tr.tw-hover:hover,\n .tw-table tr.tw-hover:nth-child(even):hover {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n }\n}\n.tw-btn {\n display: inline-flex;\n height: 3rem;\n min-height: 3rem;\n flex-shrink: 0;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n border-radius: var(--rounded-btn, 0.5rem);\n border-color: transparent;\n border-color: oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity));\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: center;\n font-size: 0.875rem;\n line-height: 1em;\n gap: 0.5rem;\n font-weight: 600;\n text-decoration-line: none;\n transition-duration: 200ms;\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n border-width: var(--border-btn, 1px);\n transition-property: color, background-color, border-color, opacity, box-shadow, transform;\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n outline-color: var(--fallback-bc,oklch(var(--bc)/1));\n background-color: oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity));\n --tw-bg-opacity: 1;\n --tw-border-opacity: 1;\n}\n.tw-btn-disabled,\n .tw-btn[disabled],\n .tw-btn:disabled {\n pointer-events: none;\n}\n.tw-btn-square {\n height: 3rem;\n width: 3rem;\n padding: 0px;\n}\n.tw-btn-circle {\n height: 3rem;\n width: 3rem;\n border-radius: 9999px;\n padding: 0px;\n}\n:where(.tw-btn:is(input[type=\"checkbox\"])),\n:where(.tw-btn:is(input[type=\"radio\"])) {\n width: auto;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n}\n.tw-btn:is(input[type=\"checkbox\"]):after,\n.tw-btn:is(input[type=\"radio\"]):after {\n --tw-content: attr(aria-label);\n content: var(--tw-content);\n}\n.tw-card {\n position: relative;\n display: flex;\n flex-direction: column;\n border-radius: var(--rounded-box, 1rem);\n}\n.tw-card:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-card-body {\n display: flex;\n flex: 1 1 auto;\n flex-direction: column;\n padding: var(--padding-card, 2rem);\n gap: 0.5rem;\n}\n.tw-card-body :where(p) {\n flex-grow: 1;\n}\n.tw-card-actions {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: 0.5rem;\n}\n.tw-card figure {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.tw-card.tw-image-full {\n display: grid;\n}\n.tw-card.tw-image-full:before {\n position: relative;\n content: \"\";\n z-index: 10;\n border-radius: var(--rounded-box, 1rem);\n --tw-bg-opacity: 1;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n opacity: 0.75;\n}\n.tw-card.tw-image-full:before,\n .tw-card.tw-image-full > * {\n grid-column-start: 1;\n grid-row-start: 1;\n}\n.tw-card.tw-image-full > figure img {\n height: 100%;\n -o-object-fit: cover;\n object-fit: cover;\n}\n.tw-card.tw-image-full > .tw-card-body {\n position: relative;\n z-index: 20;\n --tw-text-opacity: 1;\n color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));\n}\n.tw-checkbox {\n flex-shrink: 0;\n --chkbg: var(--fallback-bc,oklch(var(--bc)/1));\n --chkfg: var(--fallback-b1,oklch(var(--b1)/1));\n height: 1.5rem;\n width: 1.5rem;\n cursor: pointer;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border-radius: var(--rounded-btn, 0.5rem);\n border-width: 1px;\n border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));\n --tw-border-opacity: 0.2;\n}\n.tw-divider {\n display: flex;\n flex-direction: row;\n align-items: center;\n align-self: stretch;\n margin-top: 1rem;\n margin-bottom: 1rem;\n height: 1rem;\n white-space: nowrap;\n}\n.tw-divider:before,\n .tw-divider:after {\n height: 0.125rem;\n width: 100%;\n flex-grow: 1;\n --tw-content: '';\n content: var(--tw-content);\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n}\n.tw-dropdown {\n position: relative;\n display: inline-block;\n}\n.tw-dropdown > *:not(summary):focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-dropdown .tw-dropdown-content {\n position: absolute;\n}\n.tw-dropdown:is(:not(details)) .tw-dropdown-content {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n visibility: hidden;\n opacity: 0;\n transform-origin: top;\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-duration: 200ms;\n}\n.tw-dropdown-end .tw-dropdown-content {\n inset-inline-end: 0px;\n}\n.tw-dropdown-left .tw-dropdown-content {\n bottom: auto;\n inset-inline-end: 100%;\n top: 0px;\n transform-origin: right;\n}\n.tw-dropdown-right .tw-dropdown-content {\n bottom: auto;\n inset-inline-start: 100%;\n top: 0px;\n transform-origin: left;\n}\n.tw-dropdown-bottom .tw-dropdown-content {\n bottom: auto;\n top: 100%;\n transform-origin: top;\n}\n.tw-dropdown-top .tw-dropdown-content {\n bottom: 100%;\n top: auto;\n transform-origin: bottom;\n}\n.tw-dropdown-end.tw-dropdown-right .tw-dropdown-content {\n bottom: 0px;\n top: auto;\n}\n.tw-dropdown-end.tw-dropdown-left .tw-dropdown-content {\n bottom: 0px;\n top: auto;\n}\n.tw-dropdown.tw-dropdown-open .tw-dropdown-content,\n.tw-dropdown:not(.tw-dropdown-hover):focus .tw-dropdown-content,\n.tw-dropdown:focus-within .tw-dropdown-content {\n visibility: visible;\n opacity: 1;\n}\n@media (hover: hover) {\n\n .tw-dropdown.tw-dropdown-hover:hover .tw-dropdown-content {\n visibility: visible;\n opacity: 1;\n }\n\n .tw-btn:hover {\n --tw-border-opacity: 1;\n border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn:hover {\n background-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,\n black\n );\n border-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,\n black\n );\n }\n }\n\n @supports not (color: oklch(0% 0 0)) {\n\n .tw-btn:hover {\n background-color: var(--btn-color, var(--fallback-b2));\n border-color: var(--btn-color, var(--fallback-b2));\n }\n }\n\n .tw-btn:hover {\n --tw-border-opacity: 1;\n border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn:hover {\n background-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,\n black\n );\n border-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,\n black\n );\n }\n }\n\n @supports not (color: oklch(0% 0 0)) {\n\n .tw-btn:hover {\n background-color: var(--btn-color, var(--fallback-b2));\n border-color: var(--btn-color, var(--fallback-b2));\n }\n }\n\n .tw-btn:hover {\n --tw-border-opacity: 1;\n border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn:hover {\n background-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-bg-opacity, 1)) 90%,\n black\n );\n border-color: color-mix(\n in oklab,\n oklch(var(--btn-color, var(--b2)) / var(--tw-border-opacity, 1)) 90%,\n black\n );\n }\n }\n\n @supports not (color: oklch(0% 0 0)) {\n\n .tw-btn:hover {\n background-color: var(--btn-color, var(--fallback-b2));\n border-color: var(--btn-color, var(--fallback-b2));\n }\n }\n\n .tw-btn.tw-glass:hover {\n --glass-opacity: 25%;\n --glass-border-opacity: 15%;\n }\n\n .tw-btn-ghost:hover {\n border-color: transparent;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n .tw-btn-ghost:hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n }\n }\n\n .tw-btn-ghost:hover {\n border-color: transparent;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n .tw-btn-ghost:hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n }\n }\n\n .tw-btn-outline.tw-btn-primary:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn-outline.tw-btn-primary:hover {\n background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n }\n }\n\n .tw-btn-outline.tw-btn-primary:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn-outline.tw-btn-primary:hover {\n background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n }\n }\n\n .tw-btn-outline.tw-btn-error:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn-outline.tw-btn-error:hover {\n background-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n }\n }\n\n .tw-btn-outline.tw-btn-error:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn-outline.tw-btn-error:hover {\n background-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n }\n }\n\n .tw-btn-disabled:hover,\n .tw-btn[disabled]:hover,\n .tw-btn:disabled:hover {\n --tw-border-opacity: 0;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n --tw-bg-opacity: 0.2;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-text-opacity: 0.2;\n }\n\n @supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn:is(input[type=\"checkbox\"]:checked):hover, .tw-btn:is(input[type=\"radio\"]:checked):hover {\n background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n }\n }\n\n .tw-dropdown.tw-dropdown-hover:hover .tw-dropdown-content {\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n }\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n cursor: pointer;\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n }\n }\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n cursor: pointer;\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n }\n }\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n cursor: pointer;\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n }\n }\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n cursor: pointer;\n outline: 2px solid transparent;\n outline-offset: 2px;\n }\n\n @supports (color: oklch(0% 0 0)) {\n\n :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(.tw-active, .tw-btn):hover, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(.tw-active, .tw-btn):hover {\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n }\n }\n\n .tw-tab[disabled],\n .tw-tab[disabled]:hover {\n cursor: not-allowed;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-text-opacity: 0.2;\n }\n}\n.tw-dropdown:is(details) summary::-webkit-details-marker {\n display: none;\n}\n.tw-file-input {\n height: 3rem;\n flex-shrink: 1;\n padding-inline-end: 1rem;\n font-size: 1rem;\n line-height: 2;\n line-height: 1.5rem;\n overflow: hidden;\n border-radius: var(--rounded-btn, 0.5rem);\n border-width: 1px;\n border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));\n --tw-border-opacity: 0;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-file-input::file-selector-button {\n margin-inline-end: 1rem;\n display: inline-flex;\n height: 100%;\n flex-shrink: 0;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n padding-left: 1rem;\n padding-right: 1rem;\n text-align: center;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 1em;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-duration: 200ms;\n border-style: solid;\n --tw-border-opacity: 1;\n border-color: var(--fallback-n,oklch(var(--n)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n font-weight: 600;\n text-transform: uppercase;\n --tw-text-opacity: 1;\n color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));\n text-decoration-line: none;\n border-width: var(--border-btn, 1px);\n animation: button-pop var(--animation-btn, 0.25s) ease-out;\n}\n.tw-form-control {\n display: flex;\n flex-direction: column;\n}\n.tw-label {\n display: flex;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n align-items: center;\n justify-content: space-between;\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.tw-indicator {\n position: relative;\n display: inline-flex;\n width: -moz-max-content;\n width: max-content;\n}\n.tw-indicator :where(.tw-indicator-item) {\n z-index: 1;\n position: absolute;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n white-space: nowrap;\n}\n.tw-input {\n flex-shrink: 1;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n height: 3rem;\n padding-left: 1rem;\n padding-right: 1rem;\n font-size: 1rem;\n line-height: 2;\n line-height: 1.5rem;\n border-radius: var(--rounded-btn, 0.5rem);\n border-width: 1px;\n border-color: transparent;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-input[type=\"number\"]::-webkit-inner-spin-button,\n.tw-input-md[type=\"number\"]::-webkit-inner-spin-button {\n margin-top: -1rem;\n margin-bottom: -1rem;\n margin-inline-end: -1rem;\n}\n.tw-input-sm[type=\"number\"]::-webkit-inner-spin-button {\n margin-top: 0px;\n margin-bottom: 0px;\n margin-inline-end: -0px;\n}\n.tw-join .tw-dropdown .tw-join-item:first-child:not(:last-child),\n .tw-join *:first-child:not(:last-child) .tw-dropdown .tw-join-item {\n border-start-end-radius: inherit;\n border-end-end-radius: inherit;\n}\n.tw-mask {\n -webkit-mask-size: contain;\n mask-size: contain;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: center;\n mask-position: center;\n}\n.tw-menu {\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n font-size: 0.875rem;\n line-height: 1.25rem;\n padding: 0.5rem;\n}\n.tw-menu :where(li ul) {\n position: relative;\n white-space: nowrap;\n margin-inline-start: 1rem;\n padding-inline-start: 0.5rem;\n}\n.tw-menu :where(li:not(.tw-menu-title) > *:not(ul, details, .tw-menu-title, .tw-btn)), .tw-menu :where(li:not(.tw-menu-title) > details > summary:not(.tw-menu-title)) {\n display: grid;\n grid-auto-flow: column;\n align-content: flex-start;\n align-items: center;\n gap: 0.5rem;\n grid-auto-columns: minmax(auto, max-content) auto max-content;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.tw-menu li.tw-disabled {\n cursor: not-allowed;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n color: var(--fallback-bc,oklch(var(--bc)/0.3));\n}\n.tw-menu :where(li > .tw-menu-dropdown:not(.tw-menu-dropdown-show)) {\n display: none;\n}\n:where(.tw-menu li) {\n position: relative;\n display: flex;\n flex-shrink: 0;\n flex-direction: column;\n flex-wrap: wrap;\n align-items: stretch;\n}\n:where(.tw-menu li) .tw-badge {\n justify-self: end;\n}\n.tw-modal {\n pointer-events: none;\n position: fixed;\n inset: 0px;\n margin: 0px;\n display: grid;\n height: 100%;\n max-height: none;\n width: 100%;\n max-width: none;\n justify-items: center;\n padding: 0px;\n opacity: 0;\n overscroll-behavior: contain;\n z-index: 999;\n background-color: transparent;\n color: inherit;\n transition-duration: 200ms;\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-property: transform, opacity, visibility;\n overflow-y: hidden;\n}\n:where(.tw-modal) {\n align-items: center;\n}\n.tw-modal-box {\n max-height: calc(100vh - 5em);\n grid-column-start: 1;\n grid-row-start: 1;\n width: 91.666667%;\n max-width: 32rem;\n --tw-scale-x: .9;\n --tw-scale-y: .9;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-bottom-right-radius: var(--rounded-box, 1rem);\n border-bottom-left-radius: var(--rounded-box, 1rem);\n border-top-left-radius: var(--rounded-box, 1rem);\n border-top-right-radius: var(--rounded-box, 1rem);\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n padding: 1.5rem;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-duration: 200ms;\n box-shadow: rgba(0, 0, 0, 0.25) 0px 25px 50px -12px;\n overflow-y: auto;\n overscroll-behavior: contain;\n}\n.tw-modal-open,\n.tw-modal:target,\n.tw-modal-toggle:checked + .tw-modal,\n.tw-modal[open] {\n pointer-events: auto;\n visibility: visible;\n opacity: 1;\n}\n:root:has(:is(.tw-modal-open, .tw-modal:target, .tw-modal-toggle:checked + .tw-modal, .tw-modal[open])) {\n overflow: hidden;\n scrollbar-gutter: stable;\n}\n.tw-navbar {\n display: flex;\n align-items: center;\n padding: var(--navbar-padding, 0.5rem);\n min-height: 4rem;\n width: 100%;\n}\n:where(.tw-navbar > *:not(script, style)) {\n display: inline-flex;\n align-items: center;\n}\n.tw-select {\n display: inline-flex;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n height: 3rem;\n min-height: 3rem;\n padding-inline-start: 1rem;\n padding-inline-end: 2.5rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 2;\n border-radius: var(--rounded-btn, 0.5rem);\n border-width: 1px;\n border-color: transparent;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n background-image: linear-gradient(45deg, transparent 50%, currentColor 50%),\n linear-gradient(135deg, currentColor 50%, transparent 50%);\n background-position: calc(100% - 20px) calc(1px + 50%),\n calc(100% - 16.1px) calc(1px + 50%);\n background-size: 4px 4px,\n 4px 4px;\n background-repeat: no-repeat;\n}\n.tw-select[multiple] {\n height: auto;\n}\n.tw-tabs {\n display: grid;\n align-items: flex-end;\n}\n.tw-tabs-lifted:has(.tw-tab-content[class^=\"rounded-\"])\n .tw-tab:first-child:not(:is(.tw-tab-active, [aria-selected=\"true\"])), .tw-tabs-lifted:has(.tw-tab-content[class*=\" rounded-\"])\n .tw-tab:first-child:not(:is(.tw-tab-active, [aria-selected=\"true\"])) {\n border-bottom-color: transparent;\n}\n.tw-tab {\n position: relative;\n grid-row-start: 1;\n display: inline-flex;\n height: 2rem;\n cursor: pointer;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n text-align: center;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 2;\n --tab-padding: 1rem;\n --tw-text-opacity: 0.5;\n --tab-color: var(--fallback-bc,oklch(var(--bc)/1));\n --tab-bg: var(--fallback-b1,oklch(var(--b1)/1));\n --tab-border-color: var(--fallback-b3,oklch(var(--b3)/1));\n color: var(--tab-color);\n padding-inline-start: var(--tab-padding, 1rem);\n padding-inline-end: var(--tab-padding, 1rem);\n}\n.tw-tab:is(input[type=\"radio\"]) {\n width: auto;\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.tw-tab:is(input[type=\"radio\"]):after {\n --tw-content: attr(aria-label);\n content: var(--tw-content);\n}\n.tw-tab:not(input):empty {\n cursor: default;\n grid-column-start: span 9999;\n}\n.tw-tab-content {\n grid-column-start: 1;\n grid-column-end: span 9999;\n grid-row-start: 2;\n margin-top: calc(var(--tab-border) * -1);\n display: none;\n border-color: transparent;\n border-width: var(--tab-border, 0);\n}\n:checked + .tw-tab-content:nth-child(2),\n :is(.tw-tab-active, [aria-selected=\"true\"]) + .tw-tab-content:nth-child(2) {\n border-start-start-radius: 0px;\n}\ninput.tw-tab:checked + .tw-tab-content,\n:is(.tw-tab-active, [aria-selected=\"true\"]) + .tw-tab-content {\n display: block;\n}\n.tw-table {\n position: relative;\n width: 100%;\n border-radius: var(--rounded-box, 1rem);\n text-align: left;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.tw-table :where(.tw-table-pin-rows thead tr) {\n position: sticky;\n top: 0px;\n z-index: 1;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-table :where(.tw-table-pin-rows tfoot tr) {\n position: sticky;\n bottom: 0px;\n z-index: 1;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-table :where(.tw-table-pin-cols tr th) {\n position: sticky;\n left: 0px;\n right: 0px;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-textarea {\n min-height: 3rem;\n flex-shrink: 1;\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 2;\n border-radius: var(--rounded-btn, 0.5rem);\n border-width: 1px;\n border-color: transparent;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity)));\n}\n.tw-avatar-group :where(.tw-avatar) {\n overflow: hidden;\n border-radius: 9999px;\n border-width: 4px;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-border-opacity)));\n}\n.tw-badge-success {\n border-color: transparent;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-su,oklch(var(--su)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-suc,oklch(var(--suc)/var(--tw-text-opacity)));\n}\n.tw-badge-outline.tw-badge-success {\n --tw-text-opacity: 1;\n color: var(--fallback-su,oklch(var(--su)/var(--tw-text-opacity)));\n}\n.tw-btm-nav > * .tw-label {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.tw-breadcrumbs > ul > li > a:focus, .tw-breadcrumbs > ol > li > a:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-breadcrumbs > ul > li > a:focus-visible, .tw-breadcrumbs > ol > li > a:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n.tw-breadcrumbs > ul > li + *:before, .tw-breadcrumbs > ol > li + *:before {\n content: \"\";\n margin-left: 0.5rem;\n margin-right: 0.75rem;\n display: block;\n height: 0.375rem;\n width: 0.375rem;\n --tw-rotate: 45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n opacity: 0.4;\n border-top: 1px solid;\n border-right: 1px solid;\n background-color: transparent;\n}\n[dir=\"rtl\"] .tw-breadcrumbs > ul > li + *:before,\n[dir=\"rtl\"] .tw-breadcrumbs > ol > li + *:before {\n --tw-rotate: -135deg;\n}\n@media (prefers-reduced-motion: no-preference) {\n\n .tw-btn {\n animation: button-pop var(--animation-btn, 0.25s) ease-out;\n }\n}\n.tw-btn:active:hover,\n .tw-btn:active:focus {\n animation: button-pop 0s ease-out;\n transform: scale(var(--btn-focus-scale, 0.97));\n}\n@supports not (color: oklch(0% 0 0)) {\n\n .tw-btn {\n background-color: var(--btn-color, var(--fallback-b2));\n border-color: var(--btn-color, var(--fallback-b2));\n }\n\n .tw-btn-primary {\n --btn-color: var(--fallback-p);\n }\n\n .tw-btn-neutral {\n --btn-color: var(--fallback-n);\n }\n\n .tw-btn-error {\n --btn-color: var(--fallback-er);\n }\n}\n@supports (color: color-mix(in oklab, black, black)) {\n\n .tw-btn-outline.tw-btn-primary.tw-btn-active {\n background-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-p,oklch(var(--p)/1)) 90%, black);\n }\n\n .tw-btn-outline.tw-btn-error.tw-btn-active {\n background-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n border-color: color-mix(in oklab, var(--fallback-er,oklch(var(--er)/1)) 90%, black);\n }\n}\n.tw-btn:focus-visible {\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n}\n.tw-btn-primary {\n --tw-text-opacity: 1;\n color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));\n outline-color: var(--fallback-p,oklch(var(--p)/1));\n}\n@supports (color: oklch(0% 0 0)) {\n\n .tw-btn-primary {\n --btn-color: var(--p);\n }\n\n .tw-btn-neutral {\n --btn-color: var(--n);\n }\n\n .tw-btn-error {\n --btn-color: var(--er);\n }\n}\n.tw-btn-neutral {\n --tw-text-opacity: 1;\n color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));\n outline-color: var(--fallback-n,oklch(var(--n)/1));\n}\n.tw-btn-error {\n --tw-text-opacity: 1;\n color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));\n outline-color: var(--fallback-er,oklch(var(--er)/1));\n}\n.tw-btn.tw-glass {\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n outline-color: currentColor;\n}\n.tw-btn.tw-glass.tw-btn-active {\n --glass-opacity: 25%;\n --glass-border-opacity: 15%;\n}\n.tw-btn-ghost {\n border-width: 1px;\n border-color: transparent;\n background-color: transparent;\n color: currentColor;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n outline-color: currentColor;\n}\n.tw-btn-ghost.tw-btn-active {\n border-color: transparent;\n background-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-btn-outline.tw-btn-primary {\n --tw-text-opacity: 1;\n color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity)));\n}\n.tw-btn-outline.tw-btn-primary.tw-btn-active {\n --tw-text-opacity: 1;\n color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));\n}\n.tw-btn-outline.tw-btn-error {\n --tw-text-opacity: 1;\n color: var(--fallback-er,oklch(var(--er)/var(--tw-text-opacity)));\n}\n.tw-btn-outline.tw-btn-error.tw-btn-active {\n --tw-text-opacity: 1;\n color: var(--fallback-erc,oklch(var(--erc)/var(--tw-text-opacity)));\n}\n.tw-btn.tw-btn-disabled,\n .tw-btn[disabled],\n .tw-btn:disabled {\n --tw-border-opacity: 0;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n --tw-bg-opacity: 0.2;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-text-opacity: 0.2;\n}\n.tw-btn:is(input[type=\"checkbox\"]:checked),\n.tw-btn:is(input[type=\"radio\"]:checked) {\n --tw-border-opacity: 1;\n border-color: var(--fallback-p,oklch(var(--p)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-pc,oklch(var(--pc)/var(--tw-text-opacity)));\n}\n.tw-btn:is(input[type=\"checkbox\"]:checked):focus-visible, .tw-btn:is(input[type=\"radio\"]:checked):focus-visible {\n outline-color: var(--fallback-p,oklch(var(--p)/1));\n}\n@keyframes button-pop {\n\n 0% {\n transform: scale(var(--btn-focus-scale, 0.98));\n }\n\n 40% {\n transform: scale(1.02);\n }\n\n 100% {\n transform: scale(1);\n }\n}\n.tw-card :where(figure:first-child) {\n overflow: hidden;\n border-start-start-radius: inherit;\n border-start-end-radius: inherit;\n border-end-start-radius: unset;\n border-end-end-radius: unset;\n}\n.tw-card :where(figure:last-child) {\n overflow: hidden;\n border-start-start-radius: unset;\n border-start-end-radius: unset;\n border-end-start-radius: inherit;\n border-end-end-radius: inherit;\n}\n.tw-card:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n.tw-card.tw-bordered {\n border-width: 1px;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n}\n.tw-card.tw-compact .tw-card-body {\n padding: 1rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.tw-card-title {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 1.25rem;\n line-height: 1.75rem;\n font-weight: 600;\n}\n.tw-card.tw-image-full :where(figure) {\n overflow: hidden;\n border-radius: inherit;\n}\n.tw-checkbox:focus {\n box-shadow: none;\n}\n.tw-checkbox:focus-visible {\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--fallback-bc,oklch(var(--bc)/1));\n}\n.tw-checkbox:disabled {\n border-width: 0px;\n cursor: not-allowed;\n border-color: transparent;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));\n opacity: 0.2;\n}\n.tw-checkbox:checked,\n .tw-checkbox[aria-checked=\"true\"] {\n background-repeat: no-repeat;\n animation: checkmark var(--animation-input, 0.2s) ease-out;\n background-color: var(--chkbg);\n background-image: linear-gradient(-45deg, transparent 65%, var(--chkbg) 65.99%),\n linear-gradient(45deg, transparent 75%, var(--chkbg) 75.99%),\n linear-gradient(-45deg, var(--chkbg) 40%, transparent 40.99%),\n linear-gradient(\n 45deg,\n var(--chkbg) 30%,\n var(--chkfg) 30.99%,\n var(--chkfg) 40%,\n transparent 40.99%\n ),\n linear-gradient(-45deg, var(--chkfg) 50%, var(--chkbg) 50.99%);\n}\n.tw-checkbox:indeterminate {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));\n background-repeat: no-repeat;\n animation: checkmark var(--animation-input, 0.2s) ease-out;\n background-image: linear-gradient(90deg, transparent 80%, var(--chkbg) 80%),\n linear-gradient(-90deg, transparent 80%, var(--chkbg) 80%),\n linear-gradient(0deg, var(--chkbg) 43%, var(--chkfg) 43%, var(--chkfg) 57%, var(--chkbg) 57%);\n}\n.tw-checkbox-success {\n --chkbg: var(--fallback-su,oklch(var(--su)/1));\n --chkfg: var(--fallback-suc,oklch(var(--suc)/1));\n --tw-border-opacity: 1;\n border-color: var(--fallback-su,oklch(var(--su)/var(--tw-border-opacity)));\n}\n.tw-checkbox-success:focus-visible {\n outline-color: var(--fallback-su,oklch(var(--su)/1));\n}\n.tw-checkbox-success:checked,\n .tw-checkbox-success[aria-checked=\"true\"] {\n --tw-border-opacity: 1;\n border-color: var(--fallback-su,oklch(var(--su)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-su,oklch(var(--su)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-suc,oklch(var(--suc)/var(--tw-text-opacity)));\n}\n@keyframes checkmark {\n\n 0% {\n background-position-y: 5px;\n }\n\n 50% {\n background-position-y: -2px;\n }\n\n 100% {\n background-position-y: 0;\n }\n}\n.tw-divider:not(:empty) {\n gap: 1rem;\n}\n.tw-dropdown.tw-dropdown-open .tw-dropdown-content,\n.tw-dropdown:focus .tw-dropdown-content,\n.tw-dropdown:focus-within .tw-dropdown-content {\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-file-input:focus {\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-file-input-disabled,\n .tw-file-input[disabled] {\n cursor: not-allowed;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n --tw-text-opacity: 0.2;\n}\n.tw-file-input-disabled::-moz-placeholder, .tw-file-input[disabled]::-moz-placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-file-input-disabled::placeholder,\n .tw-file-input[disabled]::placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-file-input-disabled::file-selector-button, .tw-file-input[disabled]::file-selector-button {\n --tw-border-opacity: 0;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n --tw-bg-opacity: 0.2;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-text-opacity: 0.2;\n}\n.tw-label-text {\n font-size: 0.875rem;\n line-height: 1.25rem;\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n}\n.tw-input input {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity)));\n background-color: transparent;\n}\n.tw-input input:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-input[list]::-webkit-calendar-picker-indicator {\n line-height: 1em;\n}\n.tw-input-bordered {\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-input:focus,\n .tw-input:focus-within {\n box-shadow: none;\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-input:has(> input[disabled]),\n .tw-input-disabled,\n .tw-input:disabled,\n .tw-input[disabled] {\n cursor: not-allowed;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n color: var(--fallback-bc,oklch(var(--bc)/0.4));\n}\n.tw-input:has(> input[disabled])::-moz-placeholder, .tw-input-disabled::-moz-placeholder, .tw-input:disabled::-moz-placeholder, .tw-input[disabled]::-moz-placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-input:has(> input[disabled])::placeholder,\n .tw-input-disabled::placeholder,\n .tw-input:disabled::placeholder,\n .tw-input[disabled]::placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-input:has(> input[disabled]) > input[disabled] {\n cursor: not-allowed;\n}\n.tw-input::-webkit-date-and-time-value {\n text-align: inherit;\n}\n.tw-join > :where(*:not(:first-child)):is(.tw-btn) {\n margin-inline-start: calc(var(--border-btn) * -1);\n}\n.tw-loading {\n pointer-events: none;\n display: inline-block;\n aspect-ratio: 1 / 1;\n width: 1.5rem;\n background-color: currentColor;\n -webkit-mask-size: 100%;\n mask-size: 100%;\n -webkit-mask-repeat: no-repeat;\n mask-repeat: no-repeat;\n -webkit-mask-position: center;\n mask-position: center;\n -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E\");\n mask-image: url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E\");\n}\n.tw-loading-spinner {\n -webkit-mask-image: url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E\");\n mask-image: url(\"data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E\");\n}\n.tw-loading-sm {\n width: 1.25rem;\n}\n.tw-loading-md {\n width: 1.5rem;\n}\n.tw-mask-squircle {\n -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 0C20 0 0 20 0 100s20 100 100 100 100-20 100-100S180 0 100 0Z'/%3e%3c/svg%3e\");\n mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M100 0C20 0 0 20 0 100s20 100 100 100 100-20 100-100S180 0 100 0Z'/%3e%3c/svg%3e\");\n}\n.tw-mask-decagon {\n -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width='192' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 0 58.779 19.098 36.327 50v61.804l-36.327 50L96 200l-58.779-19.098-36.327-50V69.098l36.327-50z' fill-rule='evenodd'/%3e%3c/svg%3e\");\n mask-image: url(\"data:image/svg+xml,%3csvg width='192' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3cpath fill='black' d='m96 0 58.779 19.098 36.327 50v61.804l-36.327 50L96 200l-58.779-19.098-36.327-50V69.098l36.327-50z' fill-rule='evenodd'/%3e%3c/svg%3e\");\n}\n.tw-mask-hexagon-2 {\n -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='182' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M64.786 181.4c-9.196 0-20.063-6.687-25.079-14.21L3.762 105.33c-5.016-8.36-5.016-20.9 0-29.259l35.945-61.86C44.723 5.851 55.59 0 64.786 0h71.055c9.196 0 20.063 6.688 25.079 14.211l35.945 61.86c4.18 8.36 4.18 20.899 0 29.258l-35.945 61.86c-4.18 8.36-15.883 14.211-25.079 14.211H64.786Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e\");\n mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='182' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M64.786 181.4c-9.196 0-20.063-6.687-25.079-14.21L3.762 105.33c-5.016-8.36-5.016-20.9 0-29.259l35.945-61.86C44.723 5.851 55.59 0 64.786 0h71.055c9.196 0 20.063 6.688 25.079 14.211l35.945 61.86c4.18 8.36 4.18 20.899 0 29.258l-35.945 61.86c-4.18 8.36-15.883 14.211-25.079 14.211H64.786Z' fill='black' fill-rule='nonzero'/%3e%3c/svg%3e\");\n}\n.tw-mask-circle {\n -webkit-mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e\");\n mask-image: url(\"data:image/svg+xml,%3csvg width='200' height='200' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle fill='black' cx='100' cy='100' r='100' fill-rule='evenodd'/%3e%3c/svg%3e\");\n}\n:where(.tw-menu li:empty) {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));\n opacity: 0.1;\n margin: 0.5rem 1rem;\n height: 1px;\n}\n.tw-menu :where(li ul):before {\n position: absolute;\n bottom: 0.75rem;\n inset-inline-start: 0px;\n top: 0.75rem;\n width: 1px;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-bg-opacity)));\n opacity: 0.1;\n content: \"\";\n}\n.tw-menu :where(li:not(.tw-menu-title) > *:not(ul, details, .tw-menu-title, .tw-btn)),\n.tw-menu :where(li:not(.tw-menu-title) > details > summary:not(.tw-menu-title)) {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n border-radius: var(--rounded-btn, 0.5rem);\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n text-align: start;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n transition-duration: 200ms;\n text-wrap: balance;\n}\n:where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(summary, .tw-active, .tw-btn).tw-focus, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):not(summary, .tw-active, .tw-btn):focus, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > *:not(ul, details, .tw-menu-title)):is(summary):not(.tw-active, .tw-btn):focus-visible, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(summary, .tw-active, .tw-btn).tw-focus, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):not(summary, .tw-active, .tw-btn):focus, :where(.tw-menu li:not(.tw-menu-title, .tw-disabled) > details > summary:not(.tw-menu-title)):is(summary):not(.tw-active, .tw-btn):focus-visible {\n cursor: pointer;\n background-color: var(--fallback-bc,oklch(var(--bc)/0.1));\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-menu li > *:not(ul, .tw-menu-title, details, .tw-btn):active,\n.tw-menu li > *:not(ul, .tw-menu-title, details, .tw-btn).tw-active,\n.tw-menu li > details > summary:active {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-n,oklch(var(--n)/var(--tw-bg-opacity)));\n --tw-text-opacity: 1;\n color: var(--fallback-nc,oklch(var(--nc)/var(--tw-text-opacity)));\n}\n.tw-menu :where(li > details > summary)::-webkit-details-marker {\n display: none;\n}\n.tw-menu :where(li > details > summary):after,\n.tw-menu :where(li > .tw-menu-dropdown-toggle):after {\n justify-self: end;\n display: block;\n margin-top: -0.5rem;\n height: 0.5rem;\n width: 0.5rem;\n transform: rotate(45deg);\n transition-property: transform, margin-top;\n transition-duration: 0.3s;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n content: \"\";\n transform-origin: 75% 75%;\n box-shadow: 2px 2px;\n pointer-events: none;\n}\n.tw-menu :where(li > details[open] > summary):after,\n.tw-menu :where(li > .tw-menu-dropdown-toggle.tw-menu-dropdown-show):after {\n transform: rotate(225deg);\n margin-top: 0;\n}\n.tw-mockup-browser .tw-mockup-browser-toolbar .tw-input {\n position: relative;\n margin-left: auto;\n margin-right: auto;\n display: block;\n height: 1.75rem;\n width: 24rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n padding-left: 2rem;\n direction: ltr;\n}\n.tw-mockup-browser .tw-mockup-browser-toolbar .tw-input:before {\n content: \"\";\n position: absolute;\n left: 0.5rem;\n top: 50%;\n aspect-ratio: 1 / 1;\n height: 0.75rem;\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-radius: 9999px;\n border-width: 2px;\n border-color: currentColor;\n opacity: 0.6;\n}\n.tw-mockup-browser .tw-mockup-browser-toolbar .tw-input:after {\n content: \"\";\n position: absolute;\n left: 1.25rem;\n top: 50%;\n height: 0.5rem;\n --tw-translate-y: 25%;\n --tw-rotate: -45deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-radius: 9999px;\n border-width: 1px;\n border-color: currentColor;\n opacity: 0.6;\n}\n.tw-modal:not(dialog:not(.tw-modal-open)),\n .tw-modal::backdrop {\n background-color: #0006;\n animation: modal-pop 0.2s ease-out;\n}\n.tw-modal-backdrop {\n z-index: -1;\n grid-column-start: 1;\n grid-row-start: 1;\n display: grid;\n align-self: stretch;\n justify-self: stretch;\n color: transparent;\n}\n.tw-modal-open .tw-modal-box,\n.tw-modal-toggle:checked + .tw-modal .tw-modal-box,\n.tw-modal:target .tw-modal-box,\n.tw-modal[open] .tw-modal-box {\n --tw-translate-y: 0px;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes modal-pop {\n\n 0% {\n opacity: 0;\n }\n}\n@keyframes progress-loading {\n\n 50% {\n background-position-x: -115%;\n }\n}\n@keyframes radiomark {\n\n 0% {\n box-shadow: 0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset,\n 0 0 0 12px var(--fallback-b1,oklch(var(--b1)/1)) inset;\n }\n\n 50% {\n box-shadow: 0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset,\n 0 0 0 3px var(--fallback-b1,oklch(var(--b1)/1)) inset;\n }\n\n 100% {\n box-shadow: 0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset,\n 0 0 0 4px var(--fallback-b1,oklch(var(--b1)/1)) inset;\n }\n}\n@keyframes rating-pop {\n\n 0% {\n transform: translateY(-0.125em);\n }\n\n 40% {\n transform: translateY(-0.125em);\n }\n\n 100% {\n transform: translateY(0);\n }\n}\n.tw-select-bordered {\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-select:focus {\n box-shadow: none;\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-select-disabled,\n .tw-select:disabled,\n .tw-select[disabled] {\n cursor: not-allowed;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n color: var(--fallback-bc,oklch(var(--bc)/0.4));\n}\n.tw-select-disabled::-moz-placeholder, .tw-select:disabled::-moz-placeholder, .tw-select[disabled]::-moz-placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-select-disabled::placeholder,\n .tw-select:disabled::placeholder,\n .tw-select[disabled]::placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-select-multiple,\n .tw-select[multiple],\n .tw-select[size].tw-select:not([size=\"1\"]) {\n background-image: none;\n padding-right: 1rem;\n}\n[dir=\"rtl\"] .tw-select {\n background-position: calc(0% + 12px) calc(1px + 50%),\n calc(0% + 16px) calc(1px + 50%);\n}\n@keyframes skeleton {\n\n from {\n background-position: 150%;\n }\n\n to {\n background-position: -50%;\n }\n}\n.tw-tabs-lifted > .tw-tab:focus-visible {\n border-end-end-radius: 0;\n border-end-start-radius: 0;\n}\n.tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]), .tw-tab:is(input:checked) {\n border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));\n --tw-border-opacity: 1;\n --tw-text-opacity: 1;\n}\n.tw-tab:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.tw-tab:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: -5px;\n}\n.tw-tab-disabled,\n .tw-tab[disabled] {\n cursor: not-allowed;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity)));\n --tw-text-opacity: 0.2;\n}\n.tw-tabs-bordered > .tw-tab {\n border-color: var(--fallback-bc,oklch(var(--bc)/var(--tw-border-opacity)));\n --tw-border-opacity: 0.2;\n border-style: solid;\n border-bottom-width: calc(var(--tab-border, 1px) + 1px);\n}\n.tw-tabs-lifted > .tw-tab {\n border: var(--tab-border, 1px) solid transparent;\n border-width: 0 0 var(--tab-border, 1px) 0;\n border-start-start-radius: var(--tab-radius, 0.5rem);\n border-start-end-radius: var(--tab-radius, 0.5rem);\n border-bottom-color: var(--tab-border-color);\n padding-inline-start: var(--tab-padding, 1rem);\n padding-inline-end: var(--tab-padding, 1rem);\n padding-top: var(--tab-border, 1px);\n}\n.tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]), .tw-tabs-lifted > .tw-tab:is(input:checked) {\n background-color: var(--tab-bg);\n border-width: var(--tab-border, 1px) var(--tab-border, 1px) 0 var(--tab-border, 1px);\n border-inline-start-color: var(--tab-border-color);\n border-inline-end-color: var(--tab-border-color);\n border-top-color: var(--tab-border-color);\n padding-inline-start: calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));\n padding-inline-end: calc(var(--tab-padding, 1rem) - var(--tab-border, 1px));\n padding-bottom: var(--tab-border, 1px);\n padding-top: 0;\n}\n.tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):before, .tw-tabs-lifted > .tw-tab:is(input:checked):before {\n z-index: 1;\n content: \"\";\n display: block;\n position: absolute;\n width: calc(100% + var(--tab-radius, 0.5rem) * 2);\n height: var(--tab-radius, 0.5rem);\n bottom: 0;\n background-size: var(--tab-radius, 0.5rem);\n background-position: top left,\n top right;\n background-repeat: no-repeat;\n --tab-grad: calc(69% - var(--tab-border, 1px));\n --radius-start: radial-gradient(\n circle at top left,\n transparent var(--tab-grad),\n var(--tab-border-color) calc(var(--tab-grad) + 0.25px),\n var(--tab-border-color) calc(var(--tab-grad) + var(--tab-border, 1px)),\n var(--tab-bg) calc(var(--tab-grad) + var(--tab-border, 1px) + 0.25px)\n );\n --radius-end: radial-gradient(\n circle at top right,\n transparent var(--tab-grad),\n var(--tab-border-color) calc(var(--tab-grad) + 0.25px),\n var(--tab-border-color) calc(var(--tab-grad) + var(--tab-border, 1px)),\n var(--tab-bg) calc(var(--tab-grad) + var(--tab-border, 1px) + 0.25px)\n );\n background-image: var(--radius-start), var(--radius-end);\n}\n.tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):first-child:before, .tw-tabs-lifted > .tw-tab:is(input:checked):first-child:before {\n background-image: var(--radius-end);\n background-position: top right;\n}\n[dir=\"rtl\"] .tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):first-child:before, [dir=\"rtl\"] .tw-tabs-lifted > .tw-tab:is(input:checked):first-child:before {\n background-image: var(--radius-start);\n background-position: top left;\n}\n.tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):last-child:before, .tw-tabs-lifted > .tw-tab:is(input:checked):last-child:before {\n background-image: var(--radius-start);\n background-position: top left;\n}\n[dir=\"rtl\"] .tw-tabs-lifted > .tw-tab:is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):last-child:before, [dir=\"rtl\"] .tw-tabs-lifted > .tw-tab:is(input:checked):last-child:before {\n background-image: var(--radius-end);\n background-position: top right;\n}\n.tw-tabs-lifted\n > :is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled])\n + .tw-tabs-lifted\n :is(.tw-tab-active, [aria-selected=\"true\"]):not(.tw-tab-disabled):not([disabled]):before, .tw-tabs-lifted > .tw-tab:is(input:checked) + .tw-tabs-lifted .tw-tab:is(input:checked):before {\n background-image: var(--radius-end);\n background-position: top right;\n}\n.tw-tabs-boxed .tw-tab {\n border-radius: var(--rounded-btn, 0.5rem);\n}\n.tw-table:where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n text-align: right;\n}\n.tw-table :where(th, td) {\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n vertical-align: middle;\n}\n.tw-table tr.tw-active,\n .tw-table tr.tw-active:nth-child(even),\n .tw-table-zebra tbody tr:nth-child(even) {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n}\n.tw-table :where(thead tr, tbody tr:not(:last-child), tbody tr:first-child:last-child) {\n border-bottom-width: 1px;\n --tw-border-opacity: 1;\n border-bottom-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n}\n.tw-table :where(thead, tfoot) {\n white-space: nowrap;\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 700;\n color: var(--fallback-bc,oklch(var(--bc)/0.6));\n}\n.tw-table :where(tfoot) {\n border-top-width: 1px;\n --tw-border-opacity: 1;\n border-top-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n}\n.tw-textarea-bordered {\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-textarea:focus {\n box-shadow: none;\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n outline-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-textarea-disabled,\n .tw-textarea:disabled,\n .tw-textarea[disabled] {\n cursor: not-allowed;\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity)));\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity)));\n color: var(--fallback-bc,oklch(var(--bc)/0.4));\n}\n.tw-textarea-disabled::-moz-placeholder, .tw-textarea:disabled::-moz-placeholder, .tw-textarea[disabled]::-moz-placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n.tw-textarea-disabled::placeholder,\n .tw-textarea:disabled::placeholder,\n .tw-textarea[disabled]::placeholder {\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-placeholder-opacity)));\n --tw-placeholder-opacity: 0.2;\n}\n@keyframes toast-pop {\n\n 0% {\n transform: scale(0.9);\n opacity: 0;\n }\n\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n.tw-btn-xs {\n height: 1.5rem;\n min-height: 1.5rem;\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n font-size: 0.75rem;\n}\n.tw-btn-sm {\n height: 2rem;\n min-height: 2rem;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n font-size: 0.875rem;\n}\n.tw-btn-lg {\n height: 4rem;\n min-height: 4rem;\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n font-size: 1.125rem;\n}\n.tw-btn-block {\n width: 100%;\n}\n.tw-btn-square:where(.tw-btn-xs) {\n height: 1.5rem;\n width: 1.5rem;\n padding: 0px;\n}\n.tw-btn-square:where(.tw-btn-sm) {\n height: 2rem;\n width: 2rem;\n padding: 0px;\n}\n.tw-btn-square:where(.tw-btn-md) {\n height: 3rem;\n width: 3rem;\n padding: 0px;\n}\n.tw-btn-square:where(.tw-btn-lg) {\n height: 4rem;\n width: 4rem;\n padding: 0px;\n}\n.tw-btn-circle:where(.tw-btn-xs) {\n height: 1.5rem;\n width: 1.5rem;\n border-radius: 9999px;\n padding: 0px;\n}\n.tw-btn-circle:where(.tw-btn-sm) {\n height: 2rem;\n width: 2rem;\n border-radius: 9999px;\n padding: 0px;\n}\n.tw-btn-circle:where(.tw-btn-md) {\n height: 3rem;\n width: 3rem;\n border-radius: 9999px;\n padding: 0px;\n}\n.tw-btn-circle:where(.tw-btn-lg) {\n height: 4rem;\n width: 4rem;\n border-radius: 9999px;\n padding: 0px;\n}\n[type=\"checkbox\"].tw-checkbox-xs {\n height: 1rem;\n width: 1rem;\n}\n[type=\"checkbox\"].tw-checkbox-sm {\n height: 1.25rem;\n width: 1.25rem;\n}\n.tw-indicator :where(.tw-indicator-item) {\n bottom: auto;\n inset-inline-end: 0px;\n inset-inline-start: auto;\n top: 0px;\n --tw-translate-y: -50%;\n --tw-translate-x: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item):where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-start) {\n inset-inline-end: auto;\n inset-inline-start: 0px;\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-start):where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n --tw-translate-x: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-center) {\n inset-inline-end: 50%;\n inset-inline-start: 50%;\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-center):where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n --tw-translate-x: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-end) {\n inset-inline-end: 0px;\n inset-inline-start: auto;\n --tw-translate-x: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-end):where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-bottom) {\n bottom: 0px;\n top: auto;\n --tw-translate-y: 50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-middle) {\n bottom: 50%;\n top: 50%;\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-indicator :where(.tw-indicator-item.tw-indicator-top) {\n bottom: auto;\n top: 0px;\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-input-md {\n height: 3rem;\n padding-left: 1rem;\n padding-right: 1rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 2;\n}\n.tw-input-sm {\n height: 2rem;\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n font-size: 0.875rem;\n line-height: 2rem;\n}\n.tw-tabs-md :where(.tw-tab) {\n height: 2rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n line-height: 2;\n --tab-padding: 1rem;\n}\n.tw-tabs-lg :where(.tw-tab) {\n height: 3rem;\n font-size: 1.125rem;\n line-height: 1.75rem;\n line-height: 2;\n --tab-padding: 1.25rem;\n}\n.tw-tabs-sm :where(.tw-tab) {\n height: 1.5rem;\n font-size: 0.875rem;\n line-height: .75rem;\n --tab-padding: 0.75rem;\n}\n.tw-tabs-xs :where(.tw-tab) {\n height: 1.25rem;\n font-size: 0.75rem;\n line-height: .75rem;\n --tab-padding: 0.5rem;\n}\n.tw-tooltip {\n position: relative;\n display: inline-block;\n --tooltip-offset: calc(100% + 1px + var(--tooltip-tail, 0px));\n}\n.tw-tooltip:before {\n position: absolute;\n pointer-events: none;\n z-index: 1;\n content: var(--tw-content);\n --tw-content: attr(data-tip);\n}\n.tw-tooltip:before, .tw-tooltip-top:before {\n transform: translateX(-50%);\n top: auto;\n left: 50%;\n right: auto;\n bottom: var(--tooltip-offset);\n}\n.tw-tooltip-left:before {\n transform: translateY(-50%);\n top: 50%;\n left: auto;\n right: var(--tooltip-offset);\n bottom: auto;\n}\n.tw-tooltip-right:before {\n transform: translateY(-50%);\n top: 50%;\n left: var(--tooltip-offset);\n right: auto;\n bottom: auto;\n}\n.tw-avatar.tw-online:before {\n content: \"\";\n position: absolute;\n z-index: 10;\n display: block;\n border-radius: 9999px;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-su,oklch(var(--su)/var(--tw-bg-opacity)));\n outline-style: solid;\n outline-width: 2px;\n outline-color: var(--fallback-b1,oklch(var(--b1)/1));\n width: 15%;\n height: 15%;\n top: 7%;\n right: 7%;\n}\n.tw-avatar.tw-offline:before {\n content: \"\";\n position: absolute;\n z-index: 10;\n display: block;\n border-radius: 9999px;\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity)));\n outline-style: solid;\n outline-width: 2px;\n outline-color: var(--fallback-b1,oklch(var(--b1)/1));\n width: 15%;\n height: 15%;\n top: 7%;\n right: 7%;\n}\n.tw-card-compact .tw-card-body {\n padding: 1rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.tw-card-compact .tw-card-title {\n margin-bottom: 0.25rem;\n}\n.tw-card-normal .tw-card-body {\n padding: var(--padding-card, 2rem);\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.tw-card-normal .tw-card-title {\n margin-bottom: 0.75rem;\n}\n.tw-join.tw-join-vertical > :where(*:not(:first-child)):is(.tw-btn) {\n margin-top: calc(var(--border-btn) * -1);\n}\n.tw-join.tw-join-horizontal > :where(*:not(:first-child)):is(.tw-btn) {\n margin-inline-start: calc(var(--border-btn) * -1);\n margin-top: 0px;\n}\n.tw-modal-top :where(.tw-modal-box) {\n width: 100%;\n max-width: none;\n --tw-translate-y: -2.5rem;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-bottom-right-radius: var(--rounded-box, 1rem);\n border-bottom-left-radius: var(--rounded-box, 1rem);\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n}\n.tw-modal-middle :where(.tw-modal-box) {\n width: 91.666667%;\n max-width: 32rem;\n --tw-translate-y: 0px;\n --tw-scale-x: .9;\n --tw-scale-y: .9;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-top-left-radius: var(--rounded-box, 1rem);\n border-top-right-radius: var(--rounded-box, 1rem);\n border-bottom-right-radius: var(--rounded-box, 1rem);\n border-bottom-left-radius: var(--rounded-box, 1rem);\n}\n.tw-modal-bottom :where(.tw-modal-box) {\n width: 100%;\n max-width: none;\n --tw-translate-y: 2.5rem;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n border-top-left-radius: var(--rounded-box, 1rem);\n border-top-right-radius: var(--rounded-box, 1rem);\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.tw-tooltip {\n position: relative;\n display: inline-block;\n text-align: center;\n --tooltip-tail: 0.1875rem;\n --tooltip-color: var(--fallback-n,oklch(var(--n)/1));\n --tooltip-text-color: var(--fallback-nc,oklch(var(--nc)/1));\n --tooltip-tail-offset: calc(100% + 0.0625rem - var(--tooltip-tail));\n}\n.tw-tooltip:before,\n.tw-tooltip:after {\n opacity: 0;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-delay: 100ms;\n transition-duration: 200ms;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.tw-tooltip:after {\n position: absolute;\n content: \"\";\n border-style: solid;\n border-width: var(--tooltip-tail, 0);\n width: 0;\n height: 0;\n display: block;\n}\n.tw-tooltip:before {\n max-width: 20rem;\n white-space: normal;\n border-radius: 0.25rem;\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n font-size: 0.875rem;\n line-height: 1.25rem;\n background-color: var(--tooltip-color);\n color: var(--tooltip-text-color);\n width: -moz-max-content;\n width: max-content;\n}\n.tw-tooltip.tw-tooltip-open:before {\n opacity: 1;\n transition-delay: 75ms;\n}\n.tw-tooltip.tw-tooltip-open:after {\n opacity: 1;\n transition-delay: 75ms;\n}\n.tw-tooltip:hover:before {\n opacity: 1;\n transition-delay: 75ms;\n}\n.tw-tooltip:hover:after {\n opacity: 1;\n transition-delay: 75ms;\n}\n.tw-tooltip:has(:focus-visible):after,\n.tw-tooltip:has(:focus-visible):before {\n opacity: 1;\n transition-delay: 75ms;\n}\n.tw-tooltip:not([data-tip]):hover:before,\n.tw-tooltip:not([data-tip]):hover:after {\n visibility: hidden;\n opacity: 0;\n}\n.tw-tooltip:after, .tw-tooltip-top:after {\n transform: translateX(-50%);\n border-color: var(--tooltip-color) transparent transparent transparent;\n top: auto;\n left: 50%;\n right: auto;\n bottom: var(--tooltip-tail-offset);\n}\n.tw-tooltip-left:after {\n transform: translateY(-50%);\n border-color: transparent transparent transparent var(--tooltip-color);\n top: 50%;\n left: auto;\n right: calc(var(--tooltip-tail-offset) + 0.0625rem);\n bottom: auto;\n}\n.tw-tooltip-right:after {\n transform: translateY(-50%);\n border-color: transparent var(--tooltip-color) transparent transparent;\n top: 50%;\n left: calc(var(--tooltip-tail-offset) + 0.0625rem);\n right: auto;\n bottom: auto;\n}\n.tw-pointer-events-none {\n pointer-events: none;\n}\n.tw-pointer-events-auto {\n pointer-events: auto;\n}\n.tw-fixed {\n position: fixed;\n}\n.tw-absolute {\n position: absolute;\n}\n.tw-relative {\n position: relative;\n}\n.tw-inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.\\!tw-bottom-24 {\n bottom: 6rem !important;\n}\n.\\!tw-left-0 {\n left: 0px !important;\n}\n.\\!tw-left-auto {\n left: auto !important;\n}\n.-tw-left-6 {\n left: -1.5rem;\n}\n.tw--right-2 {\n right: -0.5rem;\n}\n.tw--top-2 {\n top: -0.5rem;\n}\n.tw-bottom-0 {\n bottom: 0px;\n}\n.tw-bottom-4 {\n bottom: 1rem;\n}\n.tw-left-0 {\n left: 0px;\n}\n.tw-left-1\\/2 {\n left: 50%;\n}\n.tw-left-4 {\n left: 1rem;\n}\n.tw-right-0 {\n right: 0px;\n}\n.tw-right-1 {\n right: 0.25rem;\n}\n.tw-right-2 {\n right: 0.5rem;\n}\n.tw-right-4 {\n right: 1rem;\n}\n.tw-right-5 {\n right: 1.25rem;\n}\n.tw-top-0 {\n top: 0px;\n}\n.tw-top-1 {\n top: 0.25rem;\n}\n.tw-top-14 {\n top: 3.5rem;\n}\n.tw-top-2 {\n top: 0.5rem;\n}\n.tw-top-4 {\n top: 1rem;\n}\n.\\!tw-z-\\[10000\\] {\n z-index: 10000 !important;\n}\n.tw-z-1000 {\n z-index: 1000;\n}\n.tw-z-3000 {\n z-index: 3000;\n}\n.tw-z-500 {\n z-index: 500;\n}\n.tw-z-\\[10000\\] {\n z-index: 10000;\n}\n.tw-z-\\[10035\\] {\n z-index: 10035;\n}\n.tw-z-\\[2000\\] {\n z-index: 2000;\n}\n.tw-z-\\[4000\\] {\n z-index: 4000;\n}\n.tw-z-\\[9998\\] {\n z-index: 9998;\n}\n.tw-z-\\[999\\] {\n z-index: 999;\n}\n.tw-col-span-1 {\n grid-column: span 1 / span 1;\n}\n.tw-float-right {\n float: right;\n}\n.tw-float-left {\n float: left;\n}\n.tw-m-1 {\n margin: 0.25rem;\n}\n.tw-m-4 {\n margin: 1rem;\n}\n.tw-m-auto {\n margin: auto;\n}\n.\\!tw-my-0 {\n margin-top: 0px !important;\n margin-bottom: 0px !important;\n}\n.\\!tw-my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n.-tw-mx-4 {\n margin-left: -1rem;\n margin-right: -1rem;\n}\n.tw-mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.tw-mx-4 {\n margin-left: 1rem;\n margin-right: 1rem;\n}\n.tw-mx-6 {\n margin-left: 1.5rem;\n margin-right: 1.5rem;\n}\n.tw-mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n.tw-my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.tw-my-10 {\n margin-top: 2.5rem;\n margin-bottom: 2.5rem;\n}\n.tw-my-2 {\n margin-top: 0.5rem;\n margin-bottom: 0.5rem;\n}\n.-tw-mb-1 {\n margin-bottom: -0.25rem;\n}\n.-tw-mb-2 {\n margin-bottom: -0.5rem;\n}\n.-tw-mb-4 {\n margin-bottom: -1rem;\n}\n.-tw-mr-4 {\n margin-right: -1rem;\n}\n.-tw-mr-6 {\n margin-right: -1.5rem;\n}\n.-tw-mt-2 {\n margin-top: -0.5rem;\n}\n.tw-mb-0 {\n margin-bottom: 0px;\n}\n.tw-mb-1 {\n margin-bottom: 0.25rem;\n}\n.tw-mb-10 {\n margin-bottom: 2.5rem;\n}\n.tw-mb-2 {\n margin-bottom: 0.5rem;\n}\n.tw-mb-3 {\n margin-bottom: 0.75rem;\n}\n.tw-mb-4 {\n margin-bottom: 1rem;\n}\n.tw-mb-6 {\n margin-bottom: 1.5rem;\n}\n.tw-ml-1 {\n margin-left: 0.25rem;\n}\n.tw-ml-2 {\n margin-left: 0.5rem;\n}\n.tw-mr-1 {\n margin-right: 0.25rem;\n}\n.tw-mr-2 {\n margin-right: 0.5rem;\n}\n.tw-mr-4 {\n margin-right: 1rem;\n}\n.tw-mr-5 {\n margin-right: 1.25rem;\n}\n.tw-mt-0 {\n margin-top: 0px;\n}\n.tw-mt-1 {\n margin-top: 0.25rem;\n}\n.tw-mt-1\\.5 {\n margin-top: 0.375rem;\n}\n.tw-mt-12 {\n margin-top: 3rem;\n}\n.tw-mt-16 {\n margin-top: 4rem;\n}\n.tw-mt-2 {\n margin-top: 0.5rem;\n}\n.tw-mt-3 {\n margin-top: 0.75rem;\n}\n.tw-mt-4 {\n margin-top: 1rem;\n}\n.tw-mt-5 {\n margin-top: 1.25rem;\n}\n.tw-mt-6 {\n margin-top: 1.5rem;\n}\n.tw-mt-8 {\n margin-top: 2rem;\n}\n.tw-block {\n display: block;\n}\n.tw-inline-block {\n display: inline-block;\n}\n.tw-inline {\n display: inline;\n}\n.tw-flex {\n display: flex;\n}\n.tw-inline-flex {\n display: inline-flex;\n}\n.tw-table {\n display: table;\n}\n.tw-grid {\n display: grid;\n}\n.tw-hidden {\n display: none;\n}\n.tw-h-10 {\n height: 2.5rem;\n}\n.tw-h-12 {\n height: 3rem;\n}\n.tw-h-20 {\n height: 5rem;\n}\n.tw-h-24 {\n height: 6rem;\n}\n.tw-h-28 {\n height: 7rem;\n}\n.tw-h-3 {\n height: 0.75rem;\n}\n.tw-h-3\\/4 {\n height: 75%;\n}\n.tw-h-32 {\n height: 8rem;\n}\n.tw-h-4 {\n height: 1rem;\n}\n.tw-h-40 {\n height: 10rem;\n}\n.tw-h-48 {\n height: 12rem;\n}\n.tw-h-5 {\n height: 1.25rem;\n}\n.tw-h-6 {\n height: 1.5rem;\n}\n.tw-h-8 {\n height: 2rem;\n}\n.tw-h-96 {\n height: 24rem;\n}\n.tw-h-\\[100dvh\\] {\n height: 100dvh;\n}\n.tw-h-\\[2em\\] {\n height: 2em;\n}\n.tw-h-\\[calc\\(100\\%-1rem\\)\\] {\n height: calc(100% - 1rem);\n}\n.tw-h-\\[calc\\(100dvh-268px\\)\\] {\n height: calc(100dvh - 268px);\n}\n.tw-h-\\[calc\\(100dvh-280px\\)\\] {\n height: calc(100dvh - 280px);\n}\n.tw-h-\\[calc\\(100dvh-332px\\)\\] {\n height: calc(100dvh - 332px);\n}\n.tw-h-\\[calc\\(100dvh-64px\\)\\] {\n height: calc(100dvh - 64px);\n}\n.tw-h-\\[calc\\(50\\%-0\\.75em\\)\\] {\n height: calc(50% - 0.75em);\n}\n.tw-h-\\[calc\\(50\\%-1\\.5em\\)\\] {\n height: calc(50% - 1.5em);\n}\n.tw-h-fit {\n height: -moz-fit-content;\n height: fit-content;\n}\n.tw-h-full {\n height: 100%;\n}\n.tw-max-h-64 {\n max-height: 16rem;\n}\n.tw-max-h-\\[calc\\(100dvh-152px\\)\\] {\n max-height: calc(100dvh - 152px);\n}\n.tw-max-h-\\[calc\\(100dvh-96px\\)\\] {\n max-height: calc(100dvh - 96px);\n}\n.tw-min-h-0 {\n min-height: 0px;\n}\n.tw-min-h-56 {\n min-height: 224px;\n}\n.tw-min-h-80 {\n min-height: 320px;\n}\n.tw-min-h-\\[21px\\] {\n min-height: 21px;\n}\n.tw-min-h-\\[5em\\] {\n min-height: 5em;\n}\n.tw-w-1 {\n width: 0.25rem;\n}\n.tw-w-10 {\n width: 2.5rem;\n}\n.tw-w-12 {\n width: 3rem;\n}\n.tw-w-20 {\n width: 5rem;\n}\n.tw-w-28 {\n width: 7rem;\n}\n.tw-w-4 {\n width: 1rem;\n}\n.tw-w-48 {\n width: 12rem;\n}\n.tw-w-5 {\n width: 1.25rem;\n}\n.tw-w-52 {\n width: 13rem;\n}\n.tw-w-6 {\n width: 1.5rem;\n}\n.tw-w-8 {\n width: 2rem;\n}\n.tw-w-80 {\n width: 20rem;\n}\n.tw-w-96 {\n width: 24rem;\n}\n.tw-w-\\[56px\\] {\n width: 56px;\n}\n.tw-w-\\[calc\\(100\\%-32px\\)\\] {\n width: calc(100% - 32px);\n}\n.tw-w-\\[calc\\(100vw-2rem\\)\\] {\n width: calc(100vw - 2rem);\n}\n.tw-w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.tw-w-full {\n width: 100%;\n}\n.tw-min-w-0 {\n min-width: 0px;\n}\n.tw-min-w-80 {\n min-width: 320px;\n}\n.tw-min-w-\\[10\\.4em\\] {\n min-width: 10.4em;\n}\n.tw-min-w-\\[10em\\] {\n min-width: 10em;\n}\n.tw-min-w-\\[8rem\\] {\n min-width: 8rem;\n}\n.tw-min-w-fit {\n min-width: -moz-fit-content;\n min-width: fit-content;\n}\n.tw-max-w-3xl {\n max-width: 48rem;\n}\n.tw-max-w-\\[17rem\\] {\n max-width: 17rem;\n}\n.tw-max-w-\\[22rem\\] {\n max-width: 22rem;\n}\n.tw-max-w-\\[calc\\(100\\%-60px\\)\\] {\n max-width: calc(100% - 60px);\n}\n.tw-max-w-full {\n max-width: 100%;\n}\n.tw-max-w-xl {\n max-width: 36rem;\n}\n.tw-max-w-xs {\n max-width: 20rem;\n}\n.tw-flex-1 {\n flex: 1 1 0%;\n}\n.tw-flex-none {\n flex: none;\n}\n.tw-flex-grow {\n flex-grow: 1;\n}\n.tw-grow {\n flex-grow: 1;\n}\n.tw-basis-1\\/5 {\n flex-basis: 20%;\n}\n.tw-basis-2\\/5 {\n flex-basis: 40%;\n}\n.-tw-translate-y-1\\/3 {\n --tw-translate-y: -33.333333%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw--translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw--translate-x-full {\n --tw-translate-x: -100%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-translate-x-0 {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-translate-x-1\\/3 {\n --tw-translate-x: 33.333333%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-rotate-180 {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes tw-pulseGrow {\n\n 0%, 100% {\n transform: scale(1.00);\n }\n\n 80% {\n transform: scale(1.00);\n }\n\n 90% {\n transform: scale(0.95);\n }\n}\n.tw-animate-pulseGrow {\n animation: tw-pulseGrow 2s ease-in-out infinite;\n}\n.tw-cursor-pointer {\n cursor: pointer;\n}\n.tw-cursor-text {\n cursor: text;\n}\n.tw-resize-none {\n resize: none;\n}\n.tw-list-inside {\n list-style-position: inside;\n}\n.tw-list-decimal {\n list-style-type: decimal;\n}\n.tw-list-disc {\n list-style-type: disc;\n}\n.tw-list-none {\n list-style-type: none;\n}\n.tw-columns-1 {\n -moz-columns: 1;\n columns: 1;\n}\n.tw-break-inside-avoid {\n -moz-column-break-inside: avoid;\n break-inside: avoid;\n}\n.tw-grid-flow-col {\n grid-auto-flow: column;\n}\n.tw-grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n}\n.tw-grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.tw-grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n.tw-grid-cols-6 {\n grid-template-columns: repeat(6, minmax(0, 1fr));\n}\n.tw-flex-row {\n flex-direction: row;\n}\n.tw-flex-col {\n flex-direction: column;\n}\n.tw-flex-wrap {\n flex-wrap: wrap;\n}\n.tw-place-content-center {\n place-content: center;\n}\n.tw-place-content-end {\n place-content: end;\n}\n.tw-place-items-end {\n place-items: end;\n}\n.tw-place-items-center {\n place-items: center;\n}\n.tw-items-center {\n align-items: center;\n}\n.tw-justify-normal {\n justify-content: normal;\n}\n.tw-justify-end {\n justify-content: flex-end;\n}\n.tw-justify-center {\n justify-content: center;\n}\n.tw-justify-between {\n justify-content: space-between;\n}\n.tw-gap-2 {\n gap: 0.5rem;\n}\n.tw-gap-6 {\n gap: 1.5rem;\n}\n.tw-space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.5rem * var(--tw-space-x-reverse));\n margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.tw-space-x-3 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.75rem * var(--tw-space-x-reverse));\n margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.tw-space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.tw-space-y-6 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1.5rem * var(--tw-space-y-reverse));\n}\n.tw-place-self-end {\n place-self: end;\n}\n.tw-place-self-center {\n place-self: center;\n}\n.tw-self-center {\n align-self: center;\n}\n.tw-overflow-auto {\n overflow: auto;\n}\n.tw-overflow-hidden {\n overflow: hidden;\n}\n.tw-overflow-scroll {\n overflow: scroll;\n}\n.tw-overflow-x-auto {\n overflow-x: auto;\n}\n.tw-overflow-y-auto {\n overflow-y: auto;\n}\n.tw-overflow-x-hidden {\n overflow-x: hidden;\n}\n.tw-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.tw-text-ellipsis {\n text-overflow: ellipsis;\n}\n.tw-whitespace-nowrap {\n white-space: nowrap;\n}\n.\\!tw-rounded-none {\n border-radius: 0px !important;\n}\n.tw-rounded {\n border-radius: 0.25rem;\n}\n.tw-rounded-2xl {\n border-radius: 1rem;\n}\n.tw-rounded-box {\n border-radius: var(--rounded-box, 1rem);\n}\n.tw-rounded-full {\n border-radius: 9999px;\n}\n.tw-rounded-lg {\n border-radius: 0.5rem;\n}\n.tw-rounded-md {\n border-radius: 0.375rem;\n}\n.tw-rounded-none {\n border-radius: 0px;\n}\n.tw-rounded-xl {\n border-radius: 0.75rem;\n}\n.tw-rounded-br-md {\n border-bottom-right-radius: 0.375rem;\n}\n.tw-rounded-tl-none {\n border-top-left-radius: 0px;\n}\n.tw-rounded-tr-md {\n border-top-right-radius: 0.375rem;\n}\n.tw-border {\n border-width: 1px;\n}\n.tw-border-0 {\n border-width: 0px;\n}\n.tw-border-4 {\n border-width: 4px;\n}\n.tw-border-\\[1px\\] {\n border-width: 1px;\n}\n.tw-border-t-0 {\n border-top-width: 0px;\n}\n.tw-border-none {\n border-style: none;\n}\n.tw-border-\\[var\\(--fallback-bc\\,oklch\\(var\\(--bc\\)\\/0\\.2\\)\\)\\] {\n border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.tw-border-base-200 {\n --tw-border-opacity: 1;\n border-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-border-opacity, 1)));\n}\n.tw-border-base-300 {\n --tw-border-opacity: 1;\n border-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-border-opacity, 1)));\n}\n.tw-border-current {\n border-color: currentColor;\n}\n.tw-border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n.tw-bg-\\[\\#369acc\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(54 154 204 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#95cf92\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(149 207 146 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#9656a2\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(150 86 162 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#A9DEF9\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(169 222 249 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#D0F4DE\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(208 244 222 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#E4C1F9\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(228 193 249 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#FCF6BD\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(252 246 189 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#FF99C8\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 153 200 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#de324c\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(222 50 76 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#f4895f\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(244 137 95 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#f8e16f\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(248 225 111 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-\\[\\#fff0d6\\] {\n --tw-bg-opacity: 1;\n background-color: rgb(255 240 214 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-base-100 {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b1,oklch(var(--b1)/var(--tw-bg-opacity, 1)));\n}\n.tw-bg-base-200 {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity, 1)));\n}\n.tw-bg-base-300 {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b3,oklch(var(--b3)/var(--tw-bg-opacity, 1)));\n}\n.tw-bg-gray-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-neutral-content {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-nc,oklch(var(--nc)/var(--tw-bg-opacity, 1)));\n}\n.tw-bg-primary {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-p,oklch(var(--p)/var(--tw-bg-opacity, 1)));\n}\n.tw-bg-slate-200 {\n --tw-bg-opacity: 1;\n background-color: rgb(226 232 240 / var(--tw-bg-opacity, 1));\n}\n.tw-bg-transparent {\n background-color: transparent;\n}\n.tw-bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n.tw-fill-current {\n fill: currentColor;\n}\n.tw-stroke-\\[2\\.5\\] {\n stroke-width: 2.5;\n}\n.tw-stroke-\\[3\\] {\n stroke-width: 3;\n}\n.tw-object-cover {\n -o-object-fit: cover;\n object-fit: cover;\n}\n.\\!tw-p-0 {\n padding: 0px !important;\n}\n.\\!tw-p-4 {\n padding: 1rem !important;\n}\n.\\!tw-p-9 {\n padding: 2.25rem !important;\n}\n.tw-p-0 {\n padding: 0px;\n}\n.tw-p-1 {\n padding: 0.25rem;\n}\n.tw-p-2 {\n padding: 0.5rem;\n}\n.tw-p-3 {\n padding: 0.75rem;\n}\n.tw-p-4 {\n padding: 1rem;\n}\n.tw-p-6 {\n padding: 1.5rem;\n}\n.tw-p-\\[1px\\] {\n padding: 1px;\n}\n.tw-px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.tw-px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.tw-px-6 {\n padding-left: 1.5rem;\n padding-right: 1.5rem;\n}\n.tw-px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.tw-py-0\\.5 {\n padding-top: 0.125rem;\n padding-bottom: 0.125rem;\n}\n.tw-py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.tw-py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.\\!tw-pe-2 {\n padding-inline-end: 0.5rem !important;\n}\n.\\!tw-ps-2 {\n padding-inline-start: 0.5rem !important;\n}\n.tw-pb-0 {\n padding-bottom: 0px;\n}\n.tw-pb-1 {\n padding-bottom: 0.25rem;\n}\n.tw-pb-2 {\n padding-bottom: 0.5rem;\n}\n.tw-pb-4 {\n padding-bottom: 1rem;\n}\n.tw-pb-6 {\n padding-bottom: 1.5rem;\n}\n.tw-pl-2 {\n padding-left: 0.5rem;\n}\n.tw-pr-1 {\n padding-right: 0.25rem;\n}\n.tw-pr-12 {\n padding-right: 3rem;\n}\n.tw-pr-4 {\n padding-right: 1rem;\n}\n.tw-pt-0 {\n padding-top: 0px;\n}\n.tw-pt-1 {\n padding-top: 0.25rem;\n}\n.tw-pt-2 {\n padding-top: 0.5rem;\n}\n.tw-pt-4 {\n padding-top: 1rem;\n}\n.tw-pt-6 {\n padding-top: 1.5rem;\n}\n.tw-text-center {\n text-align: center;\n}\n.tw-text-right {\n text-align: right;\n}\n.tw-align-middle {\n vertical-align: middle;\n}\n.tw-text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.tw-text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.tw-text-6xl {\n font-size: 3.75rem;\n line-height: 1;\n}\n.tw-text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.tw-text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.tw-text-map {\n font-size: 13px;\n}\n.tw-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.tw-text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.tw-text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.tw-font-bold {\n font-weight: 700;\n}\n.tw-font-medium {\n font-weight: 500;\n}\n.tw-font-normal {\n font-weight: 400;\n}\n.tw-font-semibold {\n font-weight: 600;\n}\n.tw-normal-case {\n text-transform: none;\n}\n.tw-italic {\n font-style: italic;\n}\n.tw-leading-3 {\n line-height: .75rem;\n}\n.tw-leading-5 {\n line-height: 1.25rem;\n}\n.tw-leading-map {\n line-height: 1.4em;\n}\n.\\!tw-text-base-content {\n --tw-text-opacity: 1 !important;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity, 1))) !important;\n}\n.\\!tw-text-error {\n --tw-text-opacity: 1 !important;\n color: var(--fallback-er,oklch(var(--er)/var(--tw-text-opacity, 1))) !important;\n}\n.tw-text-base-content {\n --tw-text-opacity: 1;\n color: var(--fallback-bc,oklch(var(--bc)/var(--tw-text-opacity, 1)));\n}\n.tw-text-current {\n color: currentColor;\n}\n.tw-text-error {\n --tw-text-opacity: 1;\n color: var(--fallback-er,oklch(var(--er)/var(--tw-text-opacity, 1)));\n}\n.tw-text-gray-400 {\n --tw-text-opacity: 1;\n color: rgb(156 163 175 / var(--tw-text-opacity, 1));\n}\n.tw-text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n.tw-text-gray-600 {\n --tw-text-opacity: 1;\n color: rgb(75 85 99 / var(--tw-text-opacity, 1));\n}\n.tw-text-green-500 {\n --tw-text-opacity: 1;\n color: rgb(34 197 94 / var(--tw-text-opacity, 1));\n}\n.tw-text-primary {\n --tw-text-opacity: 1;\n color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity, 1)));\n}\n.tw-text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n.tw-text-zinc-500 {\n --tw-text-opacity: 1;\n color: rgb(113 113 122 / var(--tw-text-opacity, 1));\n}\n.tw-underline {\n text-decoration-line: underline;\n}\n.tw-opacity-0 {\n opacity: 0;\n}\n.tw-opacity-100 {\n opacity: 1;\n}\n.tw-opacity-50 {\n opacity: 0.5;\n}\n.tw-shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.tw-shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.tw-shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.tw-shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.tw-shadow-xl {\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.tw-drop-shadow-md {\n --tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.tw-backdrop-brightness-75 {\n --tw-backdrop-brightness: brightness(.75);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.tw-transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.tw-transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.tw-transition-none {\n transition-property: none;\n}\n.tw-transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.tw-duration-200 {\n transition-duration: 200ms;\n}\n.tw-duration-300 {\n transition-duration: 300ms;\n}\n.tw-duration-500 {\n transition-duration: 500ms;\n}\n.tw-ease-in {\n transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\n}\n.\\[--tab-border-color\\:var\\(--fallback-bc\\2c oklch\\(var\\(--bc\\)\\/0\\.2\\)\\)\\] {\n --tab-border-color: var(--fallback-bc,oklch(var(--bc)/0.2));\n}\n.\\!\\[clip\\:rect\\(0\\2c 0\\2c 0\\2c 0\\)\\] {\n clip: rect(0,0,0,0) !important;\n}\n.\\[clip\\:rect\\(0\\2c 0\\2c 0\\2c 0\\)\\] {\n clip: rect(0,0,0,0);\n}\n.\\[direction\\:ltr\\] {\n direction: ltr;\n}\n.\\[overflow-anchor\\:none\\] {\n overflow-anchor: none;\n}\n.\\[transition\\:background-color_\\.2s_linear\\2c _height_\\.2s_ease-in-out\\] {\n transition: background-color .2s linear, height .2s ease-in-out;\n}\n.\\[transition\\:background-color_\\.2s_linear\\2c _width_\\.2s_ease-in-out\\2c _opacity\\] {\n transition: background-color .2s linear, width .2s ease-in-out, opacity;\n}\n.\\[transition\\:background-color_250ms_cubic-bezier\\(0\\.4\\2c 0\\2c 0\\.2\\2c 1\\)_0ms\\2c box-shadow_250ms_cubic-bezier\\(0\\.4\\2c 0\\2c 0\\.2\\2c 1\\)_0ms\\2c border_250ms_cubic-bezier\\(0\\.4\\2c 0\\2c 0\\.2\\2c 1\\)_0ms\\] {\n transition: background-color 250ms cubic-bezier(0.4,0,0.2,1) 0ms,box-shadow 250ms cubic-bezier(0.4,0,0.2,1) 0ms,border 250ms cubic-bezier(0.4,0,0.2,1) 0ms;\n}\n\n.fade {\n -webkit-mask-image: linear-gradient(180deg, transparent, #000 1%, #000 99%, transparent);\n mask-image: linear-gradient(180deg, transparent, #000 1%, #000 99%, transparent);\n}\n\n.tw-modal {\n z-index: 1200 !important;\n}\n\n.tw-menu li a {\n border-radius: 10px;\n}\n\n.tw-modal {\n z-index: 1200 !important;\n max-height: 100dvh;\n}\n\n.tw-modal-box {\n max-height: calc(100dvh - 2em);\n}\n\n.Toastify__toast {\n border-radius: 1rem;\n --tw-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n margin-left: 1rem;\n margin-right: 1rem;\n margin-bottom: 1rem;\n background-color: var(--fallback-b1,oklch(var(--b1)/1));\n color: var(--fallback-bc,oklch(var(--bc)/1));\n}\n\n.Toastify__toast-container {\n z-index: 2001 !important;\n}\n\n.Toastify__toast-container--top-right {\n top: 4.75em !important;\n}\n\n:root {\n\n --toastify-color-info: var(--fallback-in,oklch(var(--in)/1));\n --toastify-color-success: var(--fallback-su,oklch(var(--su)/1));\n --toastify-color-warning: var(--fallback-wa,oklch(var(--wa)/1));\n --toastify-color-error: var(--fallback-er,oklch(var(--er)/1));\n\n}\n\n.placeholder-center::-moz-placeholder {\n text-align: center;\n}\n\n.placeholder-center::placeholder {\n text-align: center;\n}\n\n.custom-file-upload {\n cursor: pointer;\n}\n\ninput[type=\"file\"] {\n display: none;\n}\n\n.custom-file-upload:hover .button {\n opacity: 0.8;\n}\n\n.custom-file-upload .button {\n transition: .5s ease;\n opacity: 0;\n position: absolute;\n transform: translate(8px, 8px);\n\n}\n\n.tw-tab-content .container {\n height: 100%;\n}\n\n.masonry {\n -moz-column-count: 1;\n column-count: 1;\n -moz-column-gap: 1.5rem;\n column-gap: 1.5rem;\n}\n.masonry-item {\n -moz-column-break-inside: avoid;\n break-inside: avoid;\n margin-bottom: 1.5rem;\n}\n@media (min-width: 640px) {\n .masonry {\n -moz-column-count: 2;\n column-count: 2;\n }\n}\n@media (min-width: 1024px) {\n .masonry {\n -moz-column-count: 3;\n column-count: 3;\n }\n}\n@media (min-width: 1536px) {\n .masonry {\n -moz-column-count: 4;\n column-count: 4;\n }\n}\n@media (min-width: 640px) {\n\n .sm\\:tw-table-sm :not(thead):not(tfoot) tr {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .sm\\:tw-table-sm :where(th, td) {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:tw-table-md :not(thead):not(tfoot) tr {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n\n .md\\:tw-table-md :where(th, td) {\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n }\n}\n.hover\\:tw-cursor-pointer:hover {\n cursor: pointer;\n}\n.hover\\:tw-bg-base-200:hover {\n --tw-bg-opacity: 1;\n background-color: var(--fallback-b2,oklch(var(--b2)/var(--tw-bg-opacity, 1)));\n}\n.hover\\:tw-bg-slate-300:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(203 213 225 / var(--tw-bg-opacity, 1));\n}\n.hover\\:tw-bg-transparent:hover {\n background-color: transparent;\n}\n.hover\\:tw-font-bold:hover {\n font-weight: 700;\n}\n.hover\\:tw-text-primary:hover {\n --tw-text-opacity: 1;\n color: var(--fallback-p,oklch(var(--p)/var(--tw-text-opacity, 1)));\n}\n.hover\\:tw-underline:hover {\n text-decoration-line: underline;\n}\n.focus\\:tw-border-indigo-500:focus {\n --tw-border-opacity: 1;\n border-color: rgb(99 102 241 / var(--tw-border-opacity, 1));\n}\n.focus\\:tw-outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:tw-ring-indigo-500:focus {\n --tw-ring-opacity: 1;\n --tw-ring-color: rgb(99 102 241 / var(--tw-ring-opacity, 1));\n}\n.data-\\[te-sidenav-slim\\=\\'true\\'\\]\\:tw-hidden[data-te-sidenav-slim='true'] {\n display: none;\n}\n.data-\\[te-sidenav-slim-collapsed\\=\\'true\\'\\]\\:tw-w-\\[56px\\][data-te-sidenav-slim-collapsed='true'] {\n width: 56px;\n}\n.data-\\[te-sidenav-slim\\=\\'true\\'\\]\\:tw-w-\\[56px\\][data-te-sidenav-slim='true'] {\n width: 56px;\n}\n.data-\\[te-sidenav-hidden\\=\\'false\\'\\]\\:tw-translate-x-0[data-te-sidenav-hidden='false'] {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-group[data-te-sidenav-slim-collapsed='true'] .group-\\[\\&\\[data-te-sidenav-slim-collapsed\\=\\'true\\'\\]\\]\\:data-\\[te-sidenav-slim\\=\\'false\\'\\]\\:tw-hidden[data-te-sidenav-slim='false'] {\n display: none;\n}\n@media (min-width: 640px) {\n\n .sm\\:\\!tw-left-auto {\n left: auto !important;\n }\n\n .sm\\:tw-grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .sm\\:tw-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:tw-mb-0 {\n margin-bottom: 0px;\n }\n\n .md\\:tw-flex {\n display: flex;\n }\n\n .md\\:tw-hidden {\n display: none;\n }\n\n .md\\:tw-w-1\\/2 {\n width: 50%;\n }\n\n .md\\:tw-w-\\[calc\\(50\\%-32px\\)\\] {\n width: calc(50% - 32px);\n }\n\n .md\\:tw-columns-2 {\n -moz-columns: 2;\n columns: 2;\n }\n\n .md\\:tw-grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n\n .md\\:tw-grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n\n .md\\:tw-space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .md\\:tw-text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n }\n}\n@media (min-width: 1024px) {\n\n .lg\\:tw-columns-3 {\n -moz-columns: 3;\n columns: 3;\n }\n\n .lg\\:tw-grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n}\n@media (min-width: 1280px) {\n\n .xl\\:tw-max-w-6xl {\n max-width: 72rem;\n }\n\n .xl\\:tw-grid-cols-1 {\n grid-template-columns: repeat(1, minmax(0, 1fr));\n }\n\n .xl\\:tw-text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n }\n}\n@media (min-width: 1536px) {\n\n .\\32xl\\:tw-columns-4 {\n -moz-columns: 4;\n columns: 4;\n }\n\n .\\32xl\\:tw-grid-cols-2 {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n }\n}\n.rtl\\:\\[direction\\:rtl\\]:where([dir=\"rtl\"], [dir=\"rtl\"] *) {\n direction: rtl;\n}\n@media (prefers-color-scheme: dark) {\n\n .dark\\:tw-bg-zinc-800 {\n --tw-bg-opacity: 1;\n background-color: rgb(39 39 42 / var(--tw-bg-opacity, 1));\n }\n}\n.\\[\\&\\[data-te-sidenav-slim-collapsed\\=\\'true\\'\\]\\[data-te-sidenav-slim\\=\\'false\\'\\]\\]\\:tw-hidden[data-te-sidenav-slim-collapsed='true'][data-te-sidenav-slim='false'] {\n display: none;\n}\n.\\[\\&\\[data-te-sidenav-slim-collapsed\\=\\'true\\'\\]\\[data-te-sidenav-slim\\=\\'true\\'\\]\\]\\:\\[display\\:unset\\][data-te-sidenav-slim-collapsed='true'][data-te-sidenav-slim='true'] {\n display: unset;\n}";
|
58
77
|
styleInject(css_248z$4);
|
59
78
|
|
60
|
-
const QuestContext =
|
79
|
+
const QuestContext = React.createContext({
|
61
80
|
open: false,
|
62
81
|
setQuestsOpen: () => { },
|
63
82
|
});
|
64
83
|
function useQuestsManager(initialOpen) {
|
65
|
-
const [open, setOpen] =
|
66
|
-
const setQuestsOpen =
|
84
|
+
const [open, setOpen] = React.useState(initialOpen);
|
85
|
+
const setQuestsOpen = React.useCallback((questOpen) => {
|
67
86
|
setOpen(questOpen);
|
68
87
|
}, []);
|
69
88
|
return { open, setQuestsOpen };
|
70
89
|
}
|
71
|
-
const QuestsProvider = ({ initialOpen, children }) => (jsxRuntime.jsx(QuestContext.Provider, { value: useQuestsManager(initialOpen), children: children }));
|
90
|
+
const QuestsProvider = ({ initialOpen, children, }) => (jsxRuntime.jsx(QuestContext.Provider, { value: useQuestsManager(initialOpen), children: children }));
|
72
91
|
const useQuestsOpen = () => {
|
73
|
-
const { open } =
|
92
|
+
const { open } = React.useContext(QuestContext);
|
74
93
|
return open;
|
75
94
|
};
|
76
95
|
const useSetQuestOpen = () => {
|
77
|
-
const { setQuestsOpen } =
|
96
|
+
const { setQuestsOpen } = React.useContext(QuestContext);
|
78
97
|
return setQuestsOpen;
|
79
98
|
};
|
80
99
|
|
81
|
-
const ClusterRefContext =
|
100
|
+
const ClusterRefContext = React.createContext({
|
82
101
|
clusterRef: {},
|
83
102
|
setClusterRef: () => { },
|
84
103
|
});
|
85
104
|
function useClusterRefManager() {
|
86
|
-
const [clusterRef, setClusterRef] =
|
105
|
+
const [clusterRef, setClusterRef] = React.useState({});
|
87
106
|
return { clusterRef, setClusterRef };
|
88
107
|
}
|
89
108
|
const ClusterRefProvider = ({ children }) => (jsxRuntime.jsx(ClusterRefContext.Provider, { value: useClusterRefManager(), children: children }));
|
90
109
|
const useClusterRef = () => {
|
91
|
-
const { clusterRef } =
|
110
|
+
const { clusterRef } = React.useContext(ClusterRefContext);
|
92
111
|
return clusterRef;
|
93
112
|
};
|
94
113
|
const useSetClusterRef = () => {
|
95
|
-
const { setClusterRef } =
|
114
|
+
const { setClusterRef } = React.useContext(ClusterRefContext);
|
96
115
|
return setClusterRef;
|
97
116
|
};
|
98
117
|
|
99
|
-
const LayerContext =
|
118
|
+
const LayerContext = React.createContext({
|
100
119
|
layers: [],
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
101
121
|
addLayer: () => { },
|
102
122
|
});
|
103
123
|
function useLayerManager(initialLayers) {
|
104
|
-
const [layers, dispatch] =
|
124
|
+
const [layers, dispatch] = React.useReducer((state, action) => {
|
105
125
|
switch (action.type) {
|
106
126
|
case 'ADD LAYER':
|
107
127
|
// eslint-disable-next-line no-case-declarations
|
@@ -115,7 +135,7 @@ function useLayerManager(initialLayers) {
|
|
115
135
|
throw new Error();
|
116
136
|
}
|
117
137
|
}, initialLayers);
|
118
|
-
const addLayer =
|
138
|
+
const addLayer = React.useCallback((layer) => {
|
119
139
|
dispatch({
|
120
140
|
type: 'ADD LAYER',
|
121
141
|
layer,
|
@@ -125,11 +145,11 @@ function useLayerManager(initialLayers) {
|
|
125
145
|
}
|
126
146
|
const LayersProvider = ({ initialLayers, children }) => (jsxRuntime.jsx(LayerContext.Provider, { value: useLayerManager(initialLayers), children: children }));
|
127
147
|
const useLayers = () => {
|
128
|
-
const { layers } =
|
148
|
+
const { layers } = React.useContext(LayerContext);
|
129
149
|
return layers;
|
130
150
|
};
|
131
151
|
const useAddLayer = () => {
|
132
|
-
const { addLayer } =
|
152
|
+
const { addLayer } = React.useContext(LayerContext);
|
133
153
|
return addLayer;
|
134
154
|
};
|
135
155
|
|
@@ -141,8 +161,8 @@ function getWindowDimensions() {
|
|
141
161
|
};
|
142
162
|
}
|
143
163
|
function useWindowDimensions() {
|
144
|
-
const [windowDimensions, setWindowDimensions] =
|
145
|
-
|
164
|
+
const [windowDimensions, setWindowDimensions] = React.useState(getWindowDimensions());
|
165
|
+
React.useEffect(() => {
|
146
166
|
function handleResize() {
|
147
167
|
setWindowDimensions(getWindowDimensions());
|
148
168
|
}
|
@@ -152,7 +172,7 @@ function useWindowDimensions() {
|
|
152
172
|
return windowDimensions;
|
153
173
|
}
|
154
174
|
|
155
|
-
const FilterContext =
|
175
|
+
const FilterContext = React.createContext({
|
156
176
|
filterTags: [],
|
157
177
|
searchPhrase: '',
|
158
178
|
visibleLayers: [],
|
@@ -170,7 +190,7 @@ const FilterContext = react.createContext({
|
|
170
190
|
isGroupTypeVisible: () => true,
|
171
191
|
});
|
172
192
|
function useFilterManager(initialTags) {
|
173
|
-
const [filterTags, dispatchTags] =
|
193
|
+
const [filterTags, dispatchTags] = React.useReducer((state, action) => {
|
174
194
|
switch (action.type) {
|
175
195
|
case 'ADD_TAG':
|
176
196
|
const exist = state.find((tag) => tag.id === action.tag.id);
|
@@ -190,7 +210,7 @@ function useFilterManager(initialTags) {
|
|
190
210
|
const initialLayers = useLayers();
|
191
211
|
const navigate = reactRouterDom.useNavigate();
|
192
212
|
const windowDimensions = useWindowDimensions();
|
193
|
-
const [visibleLayers, dispatchLayers] =
|
213
|
+
const [visibleLayers, dispatchLayers] = React.useReducer((state, action) => {
|
194
214
|
switch (action.type) {
|
195
215
|
case 'ADD_LAYER':
|
196
216
|
const exist1 = state.find((layer) => layer.name === action.layer.name);
|
@@ -211,7 +231,7 @@ function useFilterManager(initialTags) {
|
|
211
231
|
throw new Error();
|
212
232
|
}
|
213
233
|
}, initialLayers);
|
214
|
-
const [visibleGroupTypes, dispatchGroupTypes] =
|
234
|
+
const [visibleGroupTypes, dispatchGroupTypes] = React.useReducer((state, action) => {
|
215
235
|
switch (action.type) {
|
216
236
|
case 'ADD_GROUP_TYPE':
|
217
237
|
const exist1 = state.find((groupType) => groupType === action.groupType);
|
@@ -232,8 +252,8 @@ function useFilterManager(initialTags) {
|
|
232
252
|
throw new Error();
|
233
253
|
}
|
234
254
|
}, []);
|
235
|
-
const [searchPhrase, searchPhraseSet] =
|
236
|
-
const addFilterTag =
|
255
|
+
const [searchPhrase, searchPhraseSet] = React.useState('');
|
256
|
+
const addFilterTag = React.useCallback((tag) => {
|
237
257
|
const params = new URLSearchParams(location.search);
|
238
258
|
const urlTags = params.get('tags');
|
239
259
|
const decodedTags = urlTags ? decodeURIComponent(urlTags) : '';
|
@@ -250,7 +270,7 @@ function useFilterManager(initialTags) {
|
|
250
270
|
});
|
251
271
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
252
272
|
}, []);
|
253
|
-
const removeFilterTag =
|
273
|
+
const removeFilterTag = React.useCallback((name) => {
|
254
274
|
const params = new URLSearchParams(window.location.search);
|
255
275
|
const urlTags = params.get('tags');
|
256
276
|
let newUrlTags = '';
|
@@ -277,7 +297,7 @@ function useFilterManager(initialTags) {
|
|
277
297
|
});
|
278
298
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
279
299
|
}, []);
|
280
|
-
const resetFilterTags =
|
300
|
+
const resetFilterTags = React.useCallback(() => {
|
281
301
|
dispatchTags({
|
282
302
|
type: 'RESET_TAGS',
|
283
303
|
});
|
@@ -294,12 +314,12 @@ function useFilterManager(initialTags) {
|
|
294
314
|
layer,
|
295
315
|
});
|
296
316
|
};
|
297
|
-
const resetVisibleLayers =
|
317
|
+
const resetVisibleLayers = React.useCallback(() => {
|
298
318
|
dispatchLayers({
|
299
319
|
type: 'RESET_LAYERS',
|
300
320
|
});
|
301
321
|
}, []);
|
302
|
-
const isLayerVisible =
|
322
|
+
const isLayerVisible = React.useCallback((layer) => {
|
303
323
|
return visibleLayers.some((l) => l.name === layer.name);
|
304
324
|
}, [visibleLayers]);
|
305
325
|
const addVisibleGroupType = (groupType) => {
|
@@ -314,10 +334,10 @@ function useFilterManager(initialTags) {
|
|
314
334
|
groupType,
|
315
335
|
});
|
316
336
|
};
|
317
|
-
const isGroupTypeVisible =
|
337
|
+
const isGroupTypeVisible = React.useCallback((groupType) => {
|
318
338
|
return visibleGroupTypes.some((gt) => gt === groupType);
|
319
339
|
}, [visibleGroupTypes]);
|
320
|
-
const setSearchPhrase =
|
340
|
+
const setSearchPhrase = React.useCallback((phrase) => {
|
321
341
|
searchPhraseSet(phrase);
|
322
342
|
}, []);
|
323
343
|
return {
|
@@ -340,51 +360,51 @@ function useFilterManager(initialTags) {
|
|
340
360
|
}
|
341
361
|
const FilterProvider = ({ initialTags, children }) => (jsxRuntime.jsx(FilterContext.Provider, { value: useFilterManager(initialTags), children: children }));
|
342
362
|
const useFilterTags = () => {
|
343
|
-
const { filterTags } =
|
363
|
+
const { filterTags } = React.useContext(FilterContext);
|
344
364
|
return filterTags;
|
345
365
|
};
|
346
366
|
const useAddFilterTag = () => {
|
347
|
-
const { addFilterTag } =
|
367
|
+
const { addFilterTag } = React.useContext(FilterContext);
|
348
368
|
return addFilterTag;
|
349
369
|
};
|
350
370
|
const useRemoveFilterTag = () => {
|
351
|
-
const { removeFilterTag } =
|
371
|
+
const { removeFilterTag } = React.useContext(FilterContext);
|
352
372
|
return removeFilterTag;
|
353
373
|
};
|
354
374
|
const useResetFilterTags = () => {
|
355
|
-
const { resetFilterTags } =
|
375
|
+
const { resetFilterTags } = React.useContext(FilterContext);
|
356
376
|
return resetFilterTags;
|
357
377
|
};
|
358
378
|
const useAddVisibleLayer = () => {
|
359
|
-
const { addVisibleLayer } =
|
379
|
+
const { addVisibleLayer } = React.useContext(FilterContext);
|
360
380
|
return addVisibleLayer;
|
361
381
|
};
|
362
382
|
const useToggleVisibleLayer = () => {
|
363
|
-
const { toggleVisibleLayer } =
|
383
|
+
const { toggleVisibleLayer } = React.useContext(FilterContext);
|
364
384
|
return toggleVisibleLayer;
|
365
385
|
};
|
366
386
|
const useIsLayerVisible = () => {
|
367
|
-
const { isLayerVisible } =
|
387
|
+
const { isLayerVisible } = React.useContext(FilterContext);
|
368
388
|
return isLayerVisible;
|
369
389
|
};
|
370
390
|
const useAddVisibleGroupType = () => {
|
371
|
-
const { addVisibleGroupType } =
|
391
|
+
const { addVisibleGroupType } = React.useContext(FilterContext);
|
372
392
|
return addVisibleGroupType;
|
373
393
|
};
|
374
394
|
const useToggleVisibleGroupType = () => {
|
375
|
-
const { toggleVisibleGroupType } =
|
395
|
+
const { toggleVisibleGroupType } = React.useContext(FilterContext);
|
376
396
|
return toggleVisibleGroupType;
|
377
397
|
};
|
378
398
|
const useIsGroupTypeVisible = () => {
|
379
|
-
const { isGroupTypeVisible } =
|
399
|
+
const { isGroupTypeVisible } = React.useContext(FilterContext);
|
380
400
|
return isGroupTypeVisible;
|
381
401
|
};
|
382
402
|
const useVisibleGroupType = () => {
|
383
|
-
const { visibleGroupTypes } =
|
403
|
+
const { visibleGroupTypes } = React.useContext(FilterContext);
|
384
404
|
return visibleGroupTypes;
|
385
405
|
};
|
386
406
|
|
387
|
-
const ItemContext =
|
407
|
+
const ItemContext = React.createContext({
|
388
408
|
items: [],
|
389
409
|
addItem: () => { },
|
390
410
|
updateItem: () => { },
|
@@ -396,8 +416,8 @@ const ItemContext = react.createContext({
|
|
396
416
|
});
|
397
417
|
function useItemsManager(initialItems) {
|
398
418
|
const addLayer = useAddLayer();
|
399
|
-
const [allItemsLoaded, setallItemsLoaded] =
|
400
|
-
const [items, dispatch] =
|
419
|
+
const [allItemsLoaded, setallItemsLoaded] = React.useState(false);
|
420
|
+
const [items, dispatch] = React.useReducer((state, action) => {
|
401
421
|
switch (action.type) {
|
402
422
|
case 'ADD':
|
403
423
|
// eslint-disable-next-line no-case-declarations
|
@@ -422,7 +442,7 @@ function useItemsManager(initialItems) {
|
|
422
442
|
throw new Error();
|
423
443
|
}
|
424
444
|
}, initialItems);
|
425
|
-
const setItemsApi =
|
445
|
+
const setItemsApi = React.useCallback(async (layer) => {
|
426
446
|
addLayer(layer);
|
427
447
|
const result = await reactToastify.toast.promise(layer.api.getItems(), {
|
428
448
|
pending: `loading ${layer.name} ...`,
|
@@ -434,14 +454,13 @@ function useItemsManager(initialItems) {
|
|
434
454
|
},
|
435
455
|
});
|
436
456
|
result.map((item) => {
|
437
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
438
457
|
dispatch({ type: 'ADD', item: { ...item, layer } });
|
439
458
|
return null;
|
440
459
|
});
|
441
460
|
setallItemsLoaded(true);
|
442
461
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
443
462
|
}, []);
|
444
|
-
const setItemsData =
|
463
|
+
const setItemsData = React.useCallback((layer) => {
|
445
464
|
addLayer(layer);
|
446
465
|
layer.data?.map((item) => {
|
447
466
|
dispatch({ type: 'ADD', item: { ...item, layer } });
|
@@ -450,25 +469,25 @@ function useItemsManager(initialItems) {
|
|
450
469
|
setallItemsLoaded(true);
|
451
470
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
452
471
|
}, []);
|
453
|
-
const addItem =
|
472
|
+
const addItem = React.useCallback(async (item) => {
|
454
473
|
dispatch({
|
455
474
|
type: 'ADD',
|
456
475
|
item,
|
457
476
|
});
|
458
477
|
}, []);
|
459
|
-
const updateItem =
|
478
|
+
const updateItem = React.useCallback(async (item) => {
|
460
479
|
dispatch({
|
461
480
|
type: 'UPDATE',
|
462
481
|
item,
|
463
482
|
});
|
464
483
|
}, []);
|
465
|
-
const removeItem =
|
484
|
+
const removeItem = React.useCallback((item) => {
|
466
485
|
dispatch({
|
467
486
|
type: 'REMOVE',
|
468
487
|
item,
|
469
488
|
});
|
470
489
|
}, []);
|
471
|
-
const resetItems =
|
490
|
+
const resetItems = React.useCallback((layer) => {
|
472
491
|
dispatch({
|
473
492
|
type: 'RESET',
|
474
493
|
layer,
|
@@ -487,41 +506,41 @@ function useItemsManager(initialItems) {
|
|
487
506
|
}
|
488
507
|
const ItemsProvider = ({ initialItems, children }) => (jsxRuntime.jsx(ItemContext.Provider, { value: useItemsManager(initialItems), children: children }));
|
489
508
|
const useItems = () => {
|
490
|
-
const { items } =
|
509
|
+
const { items } = React.useContext(ItemContext);
|
491
510
|
return items;
|
492
511
|
};
|
493
512
|
const useAddItem = () => {
|
494
|
-
const { addItem } =
|
513
|
+
const { addItem } = React.useContext(ItemContext);
|
495
514
|
return addItem;
|
496
515
|
};
|
497
516
|
const useUpdateItem = () => {
|
498
|
-
const { updateItem } =
|
517
|
+
const { updateItem } = React.useContext(ItemContext);
|
499
518
|
return updateItem;
|
500
519
|
};
|
501
520
|
const useRemoveItem = () => {
|
502
|
-
const { removeItem } =
|
521
|
+
const { removeItem } = React.useContext(ItemContext);
|
503
522
|
return removeItem;
|
504
523
|
};
|
505
524
|
const useSetItemsApi = () => {
|
506
|
-
const { setItemsApi } =
|
525
|
+
const { setItemsApi } = React.useContext(ItemContext);
|
507
526
|
return setItemsApi;
|
508
527
|
};
|
509
528
|
const useSetItemsData = () => {
|
510
|
-
const { setItemsData } =
|
529
|
+
const { setItemsData } = React.useContext(ItemContext);
|
511
530
|
return setItemsData;
|
512
531
|
};
|
513
532
|
const useAllItemsLoaded = () => {
|
514
|
-
const { allItemsLoaded } =
|
533
|
+
const { allItemsLoaded } = React.useContext(ItemContext);
|
515
534
|
return allItemsLoaded;
|
516
535
|
};
|
517
536
|
|
518
|
-
const LeafletRefsContext =
|
537
|
+
const LeafletRefsContext = React.createContext({
|
519
538
|
leafletRefs: {},
|
520
539
|
addMarker: () => { },
|
521
540
|
addPopup: () => { },
|
522
541
|
});
|
523
542
|
function useLeafletRefsManager(initialLeafletRefs) {
|
524
|
-
const [leafletRefs, dispatch] =
|
543
|
+
const [leafletRefs, dispatch] = React.useReducer((state, action) => {
|
525
544
|
switch (action.type) {
|
526
545
|
case 'ADD_MARKER':
|
527
546
|
return {
|
@@ -541,14 +560,14 @@ function useLeafletRefsManager(initialLeafletRefs) {
|
|
541
560
|
throw new Error();
|
542
561
|
}
|
543
562
|
}, initialLeafletRefs);
|
544
|
-
const addMarker =
|
563
|
+
const addMarker = React.useCallback((item, marker) => {
|
545
564
|
dispatch({
|
546
565
|
type: 'ADD_MARKER',
|
547
566
|
item,
|
548
567
|
marker,
|
549
568
|
});
|
550
569
|
}, []);
|
551
|
-
const addPopup =
|
570
|
+
const addPopup = React.useCallback((item, popup) => {
|
552
571
|
dispatch({
|
553
572
|
type: 'ADD_POPUP',
|
554
573
|
item,
|
@@ -559,19 +578,19 @@ function useLeafletRefsManager(initialLeafletRefs) {
|
|
559
578
|
}
|
560
579
|
const LeafletRefsProvider = ({ initialLeafletRefs, children }) => (jsxRuntime.jsx(LeafletRefsContext.Provider, { value: useLeafletRefsManager(initialLeafletRefs), children: children }));
|
561
580
|
const useLeafletRefs = () => {
|
562
|
-
const { leafletRefs } =
|
581
|
+
const { leafletRefs } = React.useContext(LeafletRefsContext);
|
563
582
|
return leafletRefs;
|
564
583
|
};
|
565
584
|
const useAddMarker = () => {
|
566
|
-
const { addMarker } =
|
585
|
+
const { addMarker } = React.useContext(LeafletRefsContext);
|
567
586
|
return addMarker;
|
568
587
|
};
|
569
588
|
const useAddPopup = () => {
|
570
|
-
const { addPopup } =
|
589
|
+
const { addPopup } = React.useContext(LeafletRefsContext);
|
571
590
|
return addPopup;
|
572
591
|
};
|
573
592
|
|
574
|
-
const AuthContext =
|
593
|
+
const AuthContext = React.createContext({
|
575
594
|
isAuthenticated: false,
|
576
595
|
user: null,
|
577
596
|
login: () => Promise.reject(Error('Unimplemented')),
|
@@ -587,12 +606,13 @@ const AuthContext = react.createContext({
|
|
587
606
|
* @category Auth
|
588
607
|
*/
|
589
608
|
const AuthProvider = ({ userApi, children }) => {
|
590
|
-
const [user, setUser] =
|
591
|
-
const [token, setToken] =
|
592
|
-
const [loading, setLoading] =
|
609
|
+
const [user, setUser] = React.useState(null);
|
610
|
+
const [token, setToken] = React.useState();
|
611
|
+
const [loading, setLoading] = React.useState(false);
|
593
612
|
const isAuthenticated = !!user;
|
594
|
-
|
613
|
+
React.useEffect(() => {
|
595
614
|
setLoading(true);
|
615
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
596
616
|
loadUser();
|
597
617
|
setLoading(false);
|
598
618
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
@@ -619,8 +639,8 @@ const AuthProvider = ({ userApi, children }) => {
|
|
619
639
|
const login = async (credentials) => {
|
620
640
|
setLoading(true);
|
621
641
|
try {
|
622
|
-
const
|
623
|
-
setToken(
|
642
|
+
const user = await userApi.login(credentials.email, credentials.password);
|
643
|
+
setToken(user?.access_token);
|
624
644
|
return await loadUser();
|
625
645
|
}
|
626
646
|
catch (error) {
|
@@ -651,13 +671,12 @@ const AuthProvider = ({ userApi, children }) => {
|
|
651
671
|
};
|
652
672
|
const updateUser = async (user) => {
|
653
673
|
setLoading(true);
|
654
|
-
const { id, ...userRest } = user;
|
655
674
|
try {
|
656
|
-
const
|
657
|
-
setUser(
|
658
|
-
loadUser();
|
675
|
+
const updatedUser = await userApi.updateUser(user);
|
676
|
+
setUser(updatedUser);
|
677
|
+
await loadUser();
|
659
678
|
setLoading(false);
|
660
|
-
return
|
679
|
+
return updatedUser;
|
661
680
|
}
|
662
681
|
catch (error) {
|
663
682
|
setLoading(false);
|
@@ -699,9 +718,9 @@ const AuthProvider = ({ userApi, children }) => {
|
|
699
718
|
passwordReset,
|
700
719
|
}, children: children }));
|
701
720
|
};
|
702
|
-
const useAuth = () =>
|
721
|
+
const useAuth = () => React.useContext(AuthContext);
|
703
722
|
|
704
|
-
const PermissionContext =
|
723
|
+
const PermissionContext = React.createContext({
|
705
724
|
permissions: [],
|
706
725
|
setPermissionApi: () => { },
|
707
726
|
setPermissionData: () => { },
|
@@ -709,7 +728,7 @@ const PermissionContext = react.createContext({
|
|
709
728
|
hasUserPermission: () => true,
|
710
729
|
});
|
711
730
|
function usePermissionsManager(initialPermissions) {
|
712
|
-
const [permissions, dispatch] =
|
731
|
+
const [permissions, dispatch] = React.useReducer((state, action) => {
|
713
732
|
switch (action.type) {
|
714
733
|
case 'ADD':
|
715
734
|
// eslint-disable-next-line no-case-declarations
|
@@ -725,22 +744,22 @@ function usePermissionsManager(initialPermissions) {
|
|
725
744
|
throw new Error();
|
726
745
|
}
|
727
746
|
}, initialPermissions);
|
728
|
-
const [adminRole, setAdminRole] =
|
747
|
+
const [adminRole, setAdminRole] = React.useState(null);
|
729
748
|
const { user } = useAuth();
|
730
|
-
const setPermissionApi =
|
749
|
+
const setPermissionApi = React.useCallback(async (api) => {
|
731
750
|
const result = await api.getItems();
|
732
751
|
result.map((permission) => {
|
733
752
|
dispatch({ type: 'ADD', permission });
|
734
753
|
return null;
|
735
754
|
});
|
736
755
|
}, []);
|
737
|
-
const setPermissionData =
|
756
|
+
const setPermissionData = React.useCallback((data) => {
|
738
757
|
data.map((permission) => {
|
739
758
|
dispatch({ type: 'ADD', permission });
|
740
759
|
return null;
|
741
760
|
});
|
742
761
|
}, []);
|
743
|
-
const hasUserPermission =
|
762
|
+
const hasUserPermission = React.useCallback((collectionName, action, item, layer) => {
|
744
763
|
const evaluateCondition = (condition) => {
|
745
764
|
if (condition.user_created?._eq === '$CURRENT_USER') {
|
746
765
|
return item?.user_created?.id === user?.id;
|
@@ -751,7 +770,7 @@ function usePermissionsManager(initialPermissions) {
|
|
751
770
|
return false;
|
752
771
|
};
|
753
772
|
const evaluatePermissions = (permissionConditions) => {
|
754
|
-
if (!permissionConditions
|
773
|
+
if (!permissionConditions?._and) {
|
755
774
|
return true;
|
756
775
|
}
|
757
776
|
return permissionConditions._and.every((andCondition) => andCondition._or
|
@@ -763,12 +782,12 @@ function usePermissionsManager(initialPermissions) {
|
|
763
782
|
// Bedingung für leere Berechtigungen nur, wenn NICHT item und create
|
764
783
|
if (permissions.length === 0)
|
765
784
|
return true;
|
766
|
-
else if (user && user.role
|
785
|
+
else if (user && user.role?.id === adminRole)
|
767
786
|
return true;
|
768
787
|
else {
|
769
788
|
return permissions.some((p) => p.action === action &&
|
770
789
|
p.collection === collectionName &&
|
771
|
-
((p.policy?.name === user?.role
|
790
|
+
((p.policy?.name === user?.role?.name &&
|
772
791
|
(!item || evaluatePermissions(p.permissions))) ||
|
773
792
|
(p.policy?.name === '$t:public_label' &&
|
774
793
|
(layer?.public_edit_items || item?.layer?.public_edit_items) &&
|
@@ -777,37 +796,37 @@ function usePermissionsManager(initialPermissions) {
|
|
777
796
|
}, [permissions, user, adminRole]);
|
778
797
|
return { permissions, setPermissionApi, setPermissionData, setAdminRole, hasUserPermission };
|
779
798
|
}
|
780
|
-
const PermissionsProvider = ({ initialPermissions, children }) => (jsxRuntime.jsx(PermissionContext.Provider, { value: usePermissionsManager(initialPermissions), children: children }));
|
799
|
+
const PermissionsProvider = ({ initialPermissions, children, }) => (jsxRuntime.jsx(PermissionContext.Provider, { value: usePermissionsManager(initialPermissions), children: children }));
|
781
800
|
const useSetPermissionApi = () => {
|
782
|
-
const { setPermissionApi } =
|
801
|
+
const { setPermissionApi } = React.useContext(PermissionContext);
|
783
802
|
return setPermissionApi;
|
784
803
|
};
|
785
804
|
const useSetPermissionData = () => {
|
786
|
-
const { setPermissionData } =
|
805
|
+
const { setPermissionData } = React.useContext(PermissionContext);
|
787
806
|
return setPermissionData;
|
788
807
|
};
|
789
808
|
const useHasUserPermission = () => {
|
790
|
-
const { hasUserPermission } =
|
809
|
+
const { hasUserPermission } = React.useContext(PermissionContext);
|
791
810
|
return hasUserPermission;
|
792
811
|
};
|
793
812
|
const useSetAdminRole = () => {
|
794
|
-
const { setAdminRole } =
|
813
|
+
const { setAdminRole } = React.useContext(PermissionContext);
|
795
814
|
return setAdminRole;
|
796
815
|
};
|
797
816
|
|
798
|
-
const SelectPositionContext =
|
817
|
+
const SelectPositionContext = React.createContext({
|
799
818
|
selectPosition: null,
|
800
819
|
setSelectPosition: () => { },
|
801
820
|
setMarkerClicked: () => { },
|
802
821
|
setMapClicked: () => { },
|
803
822
|
});
|
804
823
|
function useSelectPositionManager() {
|
805
|
-
const [selectPosition, setSelectPosition] =
|
806
|
-
const [markerClicked, setMarkerClicked] =
|
807
|
-
const [mapClicked, setMapClicked] =
|
824
|
+
const [selectPosition, setSelectPosition] = React.useState(null);
|
825
|
+
const [markerClicked, setMarkerClicked] = React.useState();
|
826
|
+
const [mapClicked, setMapClicked] = React.useState();
|
808
827
|
const updateItem = useUpdateItem();
|
809
828
|
const hasUserPermission = useHasUserPermission();
|
810
|
-
|
829
|
+
React.useEffect(() => {
|
811
830
|
if (selectPosition &&
|
812
831
|
markerClicked &&
|
813
832
|
'text' in selectPosition &&
|
@@ -816,7 +835,7 @@ function useSelectPositionManager() {
|
|
816
835
|
}
|
817
836
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
818
837
|
}, [markerClicked]);
|
819
|
-
|
838
|
+
React.useEffect(() => {
|
820
839
|
if (selectPosition != null) {
|
821
840
|
if ('menuIcon' in selectPosition) {
|
822
841
|
mapClicked &&
|
@@ -914,25 +933,25 @@ function useSelectPositionManager() {
|
|
914
933
|
}
|
915
934
|
const SelectPositionProvider = ({ children }) => (jsxRuntime.jsx(SelectPositionContext.Provider, { value: useSelectPositionManager(), children: children }));
|
916
935
|
const useSelectPosition = () => {
|
917
|
-
const { selectPosition } =
|
936
|
+
const { selectPosition } = React.useContext(SelectPositionContext);
|
918
937
|
return selectPosition;
|
919
938
|
};
|
920
939
|
const useSetSelectPosition = () => {
|
921
|
-
const { setSelectPosition } =
|
940
|
+
const { setSelectPosition } = React.useContext(SelectPositionContext);
|
922
941
|
return setSelectPosition;
|
923
942
|
};
|
924
943
|
const useSetMarkerClicked = () => {
|
925
|
-
const { setMarkerClicked } =
|
944
|
+
const { setMarkerClicked } = React.useContext(SelectPositionContext);
|
926
945
|
return setMarkerClicked;
|
927
946
|
};
|
928
947
|
const useSetMapClicked = () => {
|
929
|
-
const { setMapClicked } =
|
948
|
+
const { setMapClicked } = React.useContext(SelectPositionContext);
|
930
949
|
return setMapClicked;
|
931
950
|
};
|
932
951
|
|
933
952
|
const hashTagRegex = /(#+[a-zA-Z0-9À-ÖØ-öø-ʸ_-]{1,})/g;
|
934
953
|
|
935
|
-
const TagContext =
|
954
|
+
const TagContext = React.createContext({
|
936
955
|
tags: [],
|
937
956
|
addTag: () => { },
|
938
957
|
setTagApi: () => { },
|
@@ -941,9 +960,9 @@ const TagContext = react.createContext({
|
|
941
960
|
allTagsLoaded: false,
|
942
961
|
});
|
943
962
|
function useTagsManager(initialTags) {
|
944
|
-
const [allTagsLoaded, setallTagsLoaded] =
|
945
|
-
const [tagCount, setTagCount] =
|
946
|
-
const [tags, dispatch] =
|
963
|
+
const [allTagsLoaded, setallTagsLoaded] = React.useState(false);
|
964
|
+
const [tagCount, setTagCount] = React.useState(0);
|
965
|
+
const [tags, dispatch] = React.useReducer((state, action) => {
|
947
966
|
switch (action.type) {
|
948
967
|
case 'ADD':
|
949
968
|
// eslint-disable-next-line no-case-declarations
|
@@ -960,8 +979,8 @@ function useTagsManager(initialTags) {
|
|
960
979
|
throw new Error();
|
961
980
|
}
|
962
981
|
}, initialTags);
|
963
|
-
const [api, setApi] =
|
964
|
-
const setTagApi =
|
982
|
+
const [api, setApi] = React.useState({});
|
983
|
+
const setTagApi = React.useCallback(async (api) => {
|
965
984
|
setApi(api);
|
966
985
|
const result = await api.getItems();
|
967
986
|
setTagCount(result.length);
|
@@ -976,7 +995,7 @@ function useTagsManager(initialTags) {
|
|
976
995
|
}
|
977
996
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
978
997
|
}, []);
|
979
|
-
const setTagData =
|
998
|
+
const setTagData = React.useCallback((data) => {
|
980
999
|
data.map((tag) => {
|
981
1000
|
// tag.name = tag.name.toLocaleLowerCase();
|
982
1001
|
dispatch({ type: 'ADD', tag });
|
@@ -992,7 +1011,7 @@ function useTagsManager(initialTags) {
|
|
992
1011
|
api.createItem && api.createItem(tag);
|
993
1012
|
}
|
994
1013
|
};
|
995
|
-
const getItemTags =
|
1014
|
+
const getItemTags = React.useCallback((item) => {
|
996
1015
|
const text = item.text;
|
997
1016
|
const itemTagStrings = text?.match(hashTagRegex);
|
998
1017
|
const itemTags = [];
|
@@ -1017,27 +1036,27 @@ function useTagsManager(initialTags) {
|
|
1017
1036
|
}
|
1018
1037
|
const TagsProvider = ({ initialTags, children }) => (jsxRuntime.jsx(TagContext.Provider, { value: useTagsManager(initialTags), children: children }));
|
1019
1038
|
const useTags = () => {
|
1020
|
-
const { tags } =
|
1039
|
+
const { tags } = React.useContext(TagContext);
|
1021
1040
|
return tags;
|
1022
1041
|
};
|
1023
1042
|
const useAddTag = () => {
|
1024
|
-
const { addTag } =
|
1043
|
+
const { addTag } = React.useContext(TagContext);
|
1025
1044
|
return addTag;
|
1026
1045
|
};
|
1027
1046
|
const useSetTagApi = () => {
|
1028
|
-
const { setTagApi } =
|
1047
|
+
const { setTagApi } = React.useContext(TagContext);
|
1029
1048
|
return setTagApi;
|
1030
1049
|
};
|
1031
1050
|
const useSetTagData = () => {
|
1032
|
-
const { setTagData } =
|
1051
|
+
const { setTagData } = React.useContext(TagContext);
|
1033
1052
|
return setTagData;
|
1034
1053
|
};
|
1035
1054
|
const useGetItemTags = () => {
|
1036
|
-
const { getItemTags } =
|
1055
|
+
const { getItemTags } = React.useContext(TagContext);
|
1037
1056
|
return getItemTags;
|
1038
1057
|
};
|
1039
1058
|
const useAllTagsLoaded = () => {
|
1040
|
-
const { allTagsLoaded } =
|
1059
|
+
const { allTagsLoaded } = React.useContext(TagContext);
|
1041
1060
|
return allTagsLoaded;
|
1042
1061
|
};
|
1043
1062
|
|
@@ -1045,13 +1064,13 @@ const initialAppState = {
|
|
1045
1064
|
assetsApi: {},
|
1046
1065
|
userType: '',
|
1047
1066
|
};
|
1048
|
-
const AppContext =
|
1067
|
+
const AppContext = React.createContext({
|
1049
1068
|
state: initialAppState,
|
1050
1069
|
setAppState: () => { },
|
1051
1070
|
});
|
1052
1071
|
function useAppManager() {
|
1053
|
-
const [state, setState] =
|
1054
|
-
const setAppState =
|
1072
|
+
const [state, setState] = React.useState(initialAppState);
|
1073
|
+
const setAppState = React.useCallback((newState) => {
|
1055
1074
|
setState((prevState) => ({
|
1056
1075
|
...prevState,
|
1057
1076
|
...newState,
|
@@ -1061,19 +1080,18 @@ function useAppManager() {
|
|
1061
1080
|
}
|
1062
1081
|
const AppStateProvider = ({ children }) => jsxRuntime.jsx(AppContext.Provider, { value: useAppManager(), children: children });
|
1063
1082
|
const useAppState = () => {
|
1064
|
-
const { state } =
|
1083
|
+
const { state } = React.useContext(AppContext);
|
1065
1084
|
return state;
|
1066
1085
|
};
|
1067
1086
|
const useSetAppState = () => {
|
1068
|
-
const { setAppState } =
|
1087
|
+
const { setAppState } = React.useContext(AppContext);
|
1069
1088
|
return setAppState;
|
1070
1089
|
};
|
1071
1090
|
|
1072
1091
|
// Helper context to determine if the ContextWrapper is already present.
|
1073
|
-
const ContextCheckContext =
|
1074
|
-
// eslint-disable-next-line react/prop-types
|
1092
|
+
const ContextCheckContext = React.createContext(false);
|
1075
1093
|
const ContextWrapper = ({ children }) => {
|
1076
|
-
const isWrapped =
|
1094
|
+
const isWrapped = React.useContext(ContextCheckContext);
|
1077
1095
|
// Check if we are already inside a Router
|
1078
1096
|
let location;
|
1079
1097
|
try {
|
@@ -1113,6 +1131,8 @@ function containsUUID(str) {
|
|
1113
1131
|
return uuidRegex.test(str);
|
1114
1132
|
}
|
1115
1133
|
|
1134
|
+
var PlusSVG = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlLXdpZHRoPSIzIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgY2xhc3M9InR3LXctNSB0dy1oLTUiPjxwYXRoIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgZD0iTTEyIDQuNXYxNW03LjUtNy41aC0xNSI+PC9wYXRoPjwvc3ZnPg==';
|
1135
|
+
|
1116
1136
|
function AddButton({ triggerAction, }) {
|
1117
1137
|
const layers = useLayers();
|
1118
1138
|
const hasUserPermission = useHasUserPermission();
|
@@ -1127,7 +1147,7 @@ function AddButton({ triggerAction, }) {
|
|
1127
1147
|
});
|
1128
1148
|
return canAdd;
|
1129
1149
|
};
|
1130
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: canAddItems() ? (jsxRuntime.jsxs("div", { className: 'tw-dropdown tw-dropdown-top tw-dropdown-end tw-dropdown-hover tw-z-500 tw-absolute tw-right-4 tw-bottom-4', children: [jsxRuntime.jsx("label", { tabIndex: 0, className: 'tw-z-500 tw-btn tw-btn-circle tw-shadow tw-bg-base-100', children: jsxRuntime.jsx("
|
1150
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: canAddItems() ? (jsxRuntime.jsxs("div", { className: 'tw-dropdown tw-dropdown-top tw-dropdown-end tw-dropdown-hover tw-z-500 tw-absolute tw-right-4 tw-bottom-4', children: [jsxRuntime.jsx("label", { tabIndex: 0, className: 'tw-z-500 tw-btn tw-btn-circle tw-shadow tw-bg-base-100', children: jsxRuntime.jsx("img", { src: PlusSVG, alt: 'Layers', className: 'tw-h-5 tw-w-5' }) }), jsxRuntime.jsx("ul", { tabIndex: 0, className: 'tw-dropdown-content tw-pr-1 tw-list-none', children: layers.map((layer) => layer.api?.createItem &&
|
1131
1151
|
hasUserPermission(layer.api.collectionName, 'create', undefined, layer) &&
|
1132
1152
|
layer.listed && (jsxRuntime.jsx("li", { children: jsxRuntime.jsx("a", { children: jsxRuntime.jsx("div", { className: 'tw-tooltip tw-tooltip-left', "data-tip": layer.menuText, children: jsxRuntime.jsx("button", { tabIndex: 0, className: 'tw-z-500 tw-border-0 tw-pl-2 tw-p-0 tw-mb-3 tw-w-10 tw-h-10 tw-cursor-pointer tw-rounded-full tw-mouse tw-drop-shadow-md tw-transition tw-ease-in tw-duration-200 focus:tw-outline-none', style: { backgroundColor: layer.menuColor || '#777' }, onClick: () => {
|
1133
1153
|
triggerAction(layer);
|
@@ -1138,8 +1158,8 @@ function AddButton({ triggerAction, }) {
|
|
1138
1158
|
}
|
1139
1159
|
|
1140
1160
|
const Control = ({ position, children, zIndex, absolute, }) => {
|
1141
|
-
const controlContainerRef =
|
1142
|
-
|
1161
|
+
const controlContainerRef = React.createRef();
|
1162
|
+
React.useEffect(() => {
|
1143
1163
|
if (controlContainerRef.current !== null) {
|
1144
1164
|
leaflet.DomEvent.disableClickPropagation(controlContainerRef.current);
|
1145
1165
|
leaflet.DomEvent.disableScrollPropagation(controlContainerRef.current);
|
@@ -1148,14 +1168,39 @@ const Control = ({ position, children, zIndex, absolute, }) => {
|
|
1148
1168
|
return (jsxRuntime.jsx("div", { ref: controlContainerRef, style: { zIndex }, className: `${absolute && 'tw-absolute'} tw-z-[999] tw-flex-col ${position === 'topLeft' && 'tw-top-4 tw-left-4'} ${position === 'bottomLeft' && 'tw-bottom-4 tw-left-4'} ${position === 'topRight' && 'tw-bottom-4 tw-right-4'} ${position === 'bottomRight' && 'tw-bottom-4 tw-right-4'}`, children: children }));
|
1149
1169
|
};
|
1150
1170
|
|
1171
|
+
function FunnelIcon({
|
1172
|
+
title,
|
1173
|
+
titleId,
|
1174
|
+
...props
|
1175
|
+
}, svgRef) {
|
1176
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
1177
|
+
xmlns: "http://www.w3.org/2000/svg",
|
1178
|
+
fill: "none",
|
1179
|
+
viewBox: "0 0 24 24",
|
1180
|
+
strokeWidth: 1.5,
|
1181
|
+
stroke: "currentColor",
|
1182
|
+
"aria-hidden": "true",
|
1183
|
+
"data-slot": "icon",
|
1184
|
+
ref: svgRef,
|
1185
|
+
"aria-labelledby": titleId
|
1186
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
1187
|
+
id: titleId
|
1188
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
1189
|
+
strokeLinecap: "round",
|
1190
|
+
strokeLinejoin: "round",
|
1191
|
+
d: "M12 3c2.755 0 5.455.232 8.083.678.533.09.917.556.917 1.096v1.044a2.25 2.25 0 0 1-.659 1.591l-5.432 5.432a2.25 2.25 0 0 0-.659 1.591v2.927a2.25 2.25 0 0 1-1.244 2.013L9.75 21v-6.568a2.25 2.25 0 0 0-.659-1.591L3.659 7.409A2.25 2.25 0 0 1 3 5.818V4.774c0-.54.384-1.006.917-1.096A48.32 48.32 0 0 1 12 3Z"
|
1192
|
+
}));
|
1193
|
+
}
|
1194
|
+
const ForwardRef$e = /*#__PURE__*/ React__namespace.forwardRef(FunnelIcon);
|
1195
|
+
|
1151
1196
|
function FilterControl() {
|
1152
|
-
const [open, setOpen] =
|
1197
|
+
const [open, setOpen] = React.useState(false);
|
1153
1198
|
const groupTypes = [
|
1154
1199
|
{ text: 'Regional Gruppe', value: 'wuerdekompass' },
|
1155
1200
|
{ text: 'Themen Gruppe', value: 'themenkompass' },
|
1156
1201
|
{ text: 'liebevoll.jetzt', value: 'liebevoll.jetzt' },
|
1157
1202
|
];
|
1158
|
-
|
1203
|
+
React.useEffect(() => {
|
1159
1204
|
groupTypes.map((layer) => addVisibleGroupType(layer.value));
|
1160
1205
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
1161
1206
|
}, []);
|
@@ -1167,8 +1212,33 @@ function FilterControl() {
|
|
1167
1212
|
setOpen(false);
|
1168
1213
|
}, children: jsxRuntime.jsx("p", { className: 'tw-text-center ', children: "\u2715" }) }), jsxRuntime.jsx("ul", { className: 'tw-flex-row', children: groupTypes.map((groupType) => (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("label", { htmlFor: groupType.value, className: 'tw-label tw-justify-normal tw-pt-1 tw-pb-1', children: [jsxRuntime.jsx("input", { id: groupType.value, onChange: () => toggleVisibleGroupType(groupType.value), type: 'checkbox', className: 'tw-checkbox tw-checkbox-xs tw-checkbox-success', checked: isGroupTypeVisible(groupType.value) }), jsxRuntime.jsx("span", { className: 'tw-text-sm tw-label-text tw-mx-2 tw-cursor-pointer', children: groupType.text })] }) }, groupType.value))) })] })) : (jsxRuntime.jsxs("div", { className: 'tw-indicator', children: [visibleGroupTypes.length < groupTypes.length && (jsxRuntime.jsx("span", { className: 'tw-indicator-item tw-badge tw-badge-success tw-h-4 tw-p-2 tw-translate-x-1/3 -tw-translate-y-1/3 tw-border-0' })), jsxRuntime.jsx("div", { className: 'tw-card-body hover:tw-bg-slate-300 tw-card tw-p-2 tw-h-10 tw-w-10 tw-transition-all tw-duration-300 hover:tw-cursor-pointer', onClick: () => {
|
1169
1214
|
setOpen(true);
|
1170
|
-
}, children: jsxRuntime.jsx(
|
1215
|
+
}, children: jsxRuntime.jsx(ForwardRef$e, { className: 'size-6 tw-stroke-[2.5]' }) })] })) }));
|
1216
|
+
}
|
1217
|
+
|
1218
|
+
function HeartIcon({
|
1219
|
+
title,
|
1220
|
+
titleId,
|
1221
|
+
...props
|
1222
|
+
}, svgRef) {
|
1223
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
1224
|
+
xmlns: "http://www.w3.org/2000/svg",
|
1225
|
+
fill: "none",
|
1226
|
+
viewBox: "0 0 24 24",
|
1227
|
+
strokeWidth: 1.5,
|
1228
|
+
stroke: "currentColor",
|
1229
|
+
"aria-hidden": "true",
|
1230
|
+
"data-slot": "icon",
|
1231
|
+
ref: svgRef,
|
1232
|
+
"aria-labelledby": titleId
|
1233
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
1234
|
+
id: titleId
|
1235
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
1236
|
+
strokeLinecap: "round",
|
1237
|
+
strokeLinejoin: "round",
|
1238
|
+
d: "M21 8.25c0-2.485-2.099-4.5-4.688-4.5-1.935 0-3.597 1.126-4.312 2.733-.715-1.607-2.377-2.733-4.313-2.733C5.1 3.75 3 5.765 3 8.25c0 7.22 9 12 9 12s9-4.78 9-12Z"
|
1239
|
+
}));
|
1171
1240
|
}
|
1241
|
+
const ForwardRef$d = /*#__PURE__*/ React__namespace.forwardRef(HeartIcon);
|
1172
1242
|
|
1173
1243
|
const GratitudeControl = () => {
|
1174
1244
|
const navigate = reactRouterDom.useNavigate();
|
@@ -1176,14 +1246,16 @@ const GratitudeControl = () => {
|
|
1176
1246
|
if (isAuthenticated) {
|
1177
1247
|
return (jsxRuntime.jsx("div", { className: 'tw-card tw-bg-base-100 tw-shadow-xl tw-mt-2 tw-w-fit', children: jsxRuntime.jsx("div", { className: 'tw-card-body hover:tw-bg-slate-300 tw-card tw-p-2 tw-h-10 tw-w-10 tw-transition-all tw-duration-300 hover:tw-cursor-pointer', onClick: () => {
|
1178
1248
|
navigate('/select-user');
|
1179
|
-
}, children: jsxRuntime.jsx(
|
1249
|
+
}, children: jsxRuntime.jsx(ForwardRef$d, { className: 'tw-stroke-[2.5]' }) }) }));
|
1180
1250
|
}
|
1181
1251
|
else
|
1182
1252
|
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
1183
1253
|
};
|
1184
1254
|
|
1255
|
+
var LayerSVG = 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPScxLjEnIHZpZXdCb3g9JzAgMCAyMCAyMCcgc3Ryb2tlLXdpZHRoPSIyIiB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnPgogICAgPHBhdGgKICAgICAgICBpZD0nc3ZnXzEnCiAgICAgICAgZmlsbD0nY3VycmVudENvbG9yJwogICAgICAgIGQ9J20yLjc1NTY1LDExLjkwNzI3bC0xLjAzODUyLDAuMjgzNzJjLTAuNzc3MTgsMC4zODg1OSAtMC43NzcxOCwxLjAxMzggMCwxLjQwMjNsNy4wMTU2LDMuNTA3OGMwLjc3NzE4LDAuMzg4NTkgMi4wMjc1LDAuMzg4NTkgMi44MDQ3LDBsNy4wMTU2LC0zLjUwNzhjMC43NzcxOCwtMC4zODg1OSAwLjc3NzE4LC0xLjAxMzggMCwtMS40MDIzbC0wLjYzMzExLC0wLjQ4NjQzbC00LjY3NzE4LDIuMjM2MjRjLTEuNTQ1MiwwLjc3MjYyIC0zLjMxODc3LDEuNTgzNDMgLTQuODY0MDcsMC44MTA4MWwtNS42MjMwMiwtMi44NDQzNHonCiAgICAvPgogICAgPHBhdGgKICAgICAgICBpZD0nc3ZnXzInCiAgICAgICAgc3Ryb2tlPSdjdXJyZW50Q29sb3InCiAgICAgICAgZmlsbD0nbm9uZScKICAgICAgICBkPSdtMTEuMjQ3LDQuMzA4NTFsNi4yMzQ5LDMuMDg3N2MwLjY5MDgzLDAuMzQyMTEgMC42OTA4MywwLjg5Mjk1IDAsMS4yMzUxbC02LjIzNDksMy4wODc3Yy0wLjY5MDgzLDAuMzQyMTEgLTEuODAzMSwwLjM0MjEyIC0yLjQ5NCwwbC02LjIzNDksLTMuMDg3N2MtMC42OTA4MywtMC4zNDIxMSAtMC42OTA4MywtMC44OTI5NSAwLC0xLjIzNTFsNi4yMzQ5LC0zLjA4NzdjMC42OTA4MywtMC4zNDIxMSAxLjgwMzEsLTAuMzQyMTEgMi40OTQsMHonCiAgICAvPgo8L3N2Zz4=';
|
1256
|
+
|
1185
1257
|
function LayerControl() {
|
1186
|
-
const [open, setOpen] =
|
1258
|
+
const [open, setOpen] = React.useState(false);
|
1187
1259
|
const layers = useLayers();
|
1188
1260
|
const isLayerVisible = useIsLayerVisible();
|
1189
1261
|
const toggleVisibleLayer = useToggleVisibleLayer();
|
@@ -1191,8 +1263,58 @@ function LayerControl() {
|
|
1191
1263
|
setOpen(false);
|
1192
1264
|
}, children: jsxRuntime.jsx("p", { className: 'tw-text-center ', children: "\u2715" }) }), jsxRuntime.jsx("ul", { className: 'tw-flex-row', children: layers.map((layer) => layer.listed && (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("label", { htmlFor: layer.name, className: 'tw-label tw-justify-normal tw-pt-1 tw-pb-1', children: [jsxRuntime.jsx("input", { id: layer.name, onChange: () => toggleVisibleLayer(layer), type: 'checkbox', className: 'tw-checkbox tw-checkbox-xs tw-checkbox-success', checked: isLayerVisible(layer) }), jsxRuntime.jsx("span", { className: 'tw-text-sm tw-label-text tw-mx-2 tw-cursor-pointer', children: layer.name })] }) }, layer.name))) })] })) : (jsxRuntime.jsx("div", { className: 'tw-card-body hover:tw-bg-slate-300 tw-card tw-p-2 tw-h-10 tw-w-10 tw-transition-all tw-duration-300 hover:tw-cursor-pointer', onClick: () => {
|
1193
1265
|
setOpen(true);
|
1194
|
-
}, children: jsxRuntime.
|
1266
|
+
}, children: jsxRuntime.jsx("img", { src: LayerSVG, alt: 'Layers' }) })) }));
|
1267
|
+
}
|
1268
|
+
|
1269
|
+
function FlagIcon({
|
1270
|
+
title,
|
1271
|
+
titleId,
|
1272
|
+
...props
|
1273
|
+
}, svgRef) {
|
1274
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
1275
|
+
xmlns: "http://www.w3.org/2000/svg",
|
1276
|
+
fill: "none",
|
1277
|
+
viewBox: "0 0 24 24",
|
1278
|
+
strokeWidth: 1.5,
|
1279
|
+
stroke: "currentColor",
|
1280
|
+
"aria-hidden": "true",
|
1281
|
+
"data-slot": "icon",
|
1282
|
+
ref: svgRef,
|
1283
|
+
"aria-labelledby": titleId
|
1284
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
1285
|
+
id: titleId
|
1286
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
1287
|
+
strokeLinecap: "round",
|
1288
|
+
strokeLinejoin: "round",
|
1289
|
+
d: "M3 3v1.5M3 21v-6m0 0 2.77-.693a9 9 0 0 1 6.208.682l.108.054a9 9 0 0 0 6.086.71l3.114-.732a48.524 48.524 0 0 1-.005-10.499l-3.11.732a9 9 0 0 1-6.085-.711l-.108-.054a9 9 0 0 0-6.208-.682L3 4.5M3 15V4.5"
|
1290
|
+
}));
|
1291
|
+
}
|
1292
|
+
const ForwardRef$c = /*#__PURE__*/ React__namespace.forwardRef(FlagIcon);
|
1293
|
+
|
1294
|
+
function MagnifyingGlassIcon({
|
1295
|
+
title,
|
1296
|
+
titleId,
|
1297
|
+
...props
|
1298
|
+
}, svgRef) {
|
1299
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
1300
|
+
xmlns: "http://www.w3.org/2000/svg",
|
1301
|
+
fill: "none",
|
1302
|
+
viewBox: "0 0 24 24",
|
1303
|
+
strokeWidth: 1.5,
|
1304
|
+
stroke: "currentColor",
|
1305
|
+
"aria-hidden": "true",
|
1306
|
+
"data-slot": "icon",
|
1307
|
+
ref: svgRef,
|
1308
|
+
"aria-labelledby": titleId
|
1309
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
1310
|
+
id: titleId
|
1311
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
1312
|
+
strokeLinecap: "round",
|
1313
|
+
strokeLinejoin: "round",
|
1314
|
+
d: "m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"
|
1315
|
+
}));
|
1195
1316
|
}
|
1317
|
+
const ForwardRef$b = /*#__PURE__*/ React__namespace.forwardRef(MagnifyingGlassIcon);
|
1196
1318
|
|
1197
1319
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
1198
1320
|
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
@@ -1200,34 +1322,33 @@ function LayerControl() {
|
|
1200
1322
|
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
1201
1323
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
1202
1324
|
const useTimeout = (callback, delay) => {
|
1203
|
-
const callbackRef =
|
1204
|
-
const timeoutRef =
|
1205
|
-
|
1325
|
+
const callbackRef = React.useRef(callback);
|
1326
|
+
const timeoutRef = React.useRef();
|
1327
|
+
React.useEffect(() => {
|
1206
1328
|
callbackRef.current = callback;
|
1207
1329
|
}, [callback]);
|
1208
|
-
const set =
|
1330
|
+
const set = React.useCallback(() => {
|
1209
1331
|
timeoutRef.current = setTimeout(() => callbackRef.current(), delay);
|
1210
1332
|
}, [delay]);
|
1211
|
-
const clear =
|
1333
|
+
const clear = React.useCallback(() => {
|
1212
1334
|
timeoutRef.current && clearTimeout(timeoutRef.current);
|
1213
1335
|
}, []);
|
1214
|
-
|
1336
|
+
React.useEffect(() => {
|
1215
1337
|
set();
|
1216
1338
|
return clear;
|
1217
1339
|
}, [delay, set, clear]);
|
1218
|
-
const reset =
|
1340
|
+
const reset = React.useCallback(() => {
|
1219
1341
|
clear();
|
1220
1342
|
set();
|
1221
1343
|
}, [clear, set]);
|
1222
1344
|
return { reset, clear };
|
1223
1345
|
};
|
1224
1346
|
|
1225
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
1226
1347
|
const useDebounce = (callback, delay, deps) => {
|
1227
1348
|
const { reset, clear } = useTimeout(callback, delay);
|
1228
|
-
|
1349
|
+
React.useEffect(reset, [...deps, reset]);
|
1229
1350
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
1230
|
-
|
1351
|
+
React.useEffect(clear, []);
|
1231
1352
|
};
|
1232
1353
|
|
1233
1354
|
function decodeTag(string) {
|
@@ -1319,6 +1440,8 @@ const MarkerIconFactory = (shape, color1, color2, icon) => {
|
|
1319
1440
|
});
|
1320
1441
|
};
|
1321
1442
|
|
1443
|
+
var TargetSVG = 'data:image/svg+xml;base64,PHN2ZwogICAgZmlsbD0nY3VycmVudENvbG9yJwogICAgdmlld0JveD0nMCAwIDMyIDMyJwogICAgdmVyc2lvbj0nMS4xJwogICAgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJwo+CiAgPHBhdGggZD0nTTMwIDE0Ljc1aC0yLjgyNGMtMC42MDgtNS4yMTktNC43MDctOS4zMTgtOS44NzQtOS45MjFsLTAuMDUzLTAuMDA1di0yLjgyNGMwLTAuNjktMC41Ni0xLjI1LTEuMjUtMS4yNXMtMS4yNSAwLjU2LTEuMjUgMS4yNXYwIDIuODI0Yy01LjIxOSAwLjYwOC05LjMxOCA0LjcwNy05LjkyMSA5Ljg3NGwtMC4wMDUgMC4wNTNoLTIuODI0Yy0wLjY5IDAtMS4yNSAwLjU2LTEuMjUgMS4yNXMwLjU2IDEuMjUgMS4yNSAxLjI1djBoMi44MjRjMC42MDggNS4yMTkgNC43MDcgOS4zMTggOS44NzQgOS45MjFsMC4wNTMgMC4wMDV2Mi44MjRjMCAwLjY5IDAuNTYgMS4yNSAxLjI1IDEuMjVzMS4yNS0wLjU2IDEuMjUtMS4yNXYwLTIuODI0YzUuMjE5LTAuNjA4IDkuMzE4LTQuNzA3IDkuOTIxLTkuODc0bDAuMDA1LTAuMDUzaDIuODI0YzAuNjkgMCAxLjI1LTAuNTYgMS4yNS0xLjI1cy0wLjU2LTEuMjUtMS4yNS0xLjI1djB6TTE3LjI1IDI0LjYyNHYtMi42MjRjMC0wLjY5LTAuNTYtMS4yNS0xLjI1LTEuMjVzLTEuMjUgMC41Ni0xLjI1IDEuMjV2MCAyLjYyNGMtMy44MjEtMC41Ny02LjgwMy0zLjU1My03LjM2OC03LjMyNmwtMC4wMDYtMC4wNDhoMi42MjRjMC42OSAwIDEuMjUtMC41NiAxLjI1LTEuMjVzLTAuNTYtMS4yNS0xLjI1LTEuMjV2MGgtMi42MjRjMC41Ny0zLjgyMSAzLjU1My02LjgwNCA3LjMyNi03LjM2OGwwLjA0OC0wLjAwNnYyLjYyNGMwIDAuNjkgMC41NiAxLjI1IDEuMjUgMS4yNXMxLjI1LTAuNTYgMS4yNS0xLjI1djAtMi42MjRjMy44MjEgMC41NyA2LjgwMyAzLjU1MyA3LjM2OCA3LjMyNmwwLjAwNiAwLjA0OGgtMi42MjRjLTAuNjkgMC0xLjI1IDAuNTYtMS4yNSAxLjI1czAuNTYgMS4yNSAxLjI1IDEuMjV2MGgyLjYyNGMtMC41NzEgMy44MjEtMy41NTMgNi44MDMtNy4zMjYgNy4zNjhsLTAuMDQ4IDAuMDA2eic+PC9wYXRoPgo8L3N2Zz4=';
|
1444
|
+
|
1322
1445
|
/*!
|
1323
1446
|
Copyright (c) 2016 Dominik Moritz
|
1324
1447
|
|
@@ -2271,11 +2394,11 @@ You can find the project at: https://github.com/domoritz/leaflet-locatecontrol
|
|
2271
2394
|
const LocateControl = () => {
|
2272
2395
|
const map = reactLeaflet.useMap();
|
2273
2396
|
// prevent react18 from calling useEffect twice
|
2274
|
-
const init =
|
2275
|
-
const [lc, setLc] =
|
2276
|
-
const [active, setActive] =
|
2277
|
-
const [loading, setLoading] =
|
2278
|
-
|
2397
|
+
const init = React.useRef(false);
|
2398
|
+
const [lc, setLc] = React.useState(null);
|
2399
|
+
const [active, setActive] = React.useState(false);
|
2400
|
+
const [loading, setLoading] = React.useState(false);
|
2401
|
+
React.useEffect(() => {
|
2279
2402
|
if (!init.current) {
|
2280
2403
|
// @ts-ignore
|
2281
2404
|
setLc(leaflet.control.locate().addTo(map));
|
@@ -2298,22 +2421,45 @@ const LocateControl = () => {
|
|
2298
2421
|
lc.start();
|
2299
2422
|
setLoading(true);
|
2300
2423
|
}
|
2301
|
-
}, children: loading ? (jsxRuntime.jsx("span", { className: 'tw-loading tw-loading-spinner tw-loading-md tw-mt-1' })) : (jsxRuntime.jsx("
|
2424
|
+
}, children: loading ? (jsxRuntime.jsx("span", { className: 'tw-loading tw-loading-spinner tw-loading-md tw-mt-1' })) : (jsxRuntime.jsx("img", { src: TargetSVG, alt: 'x', className: 'tw-mt-1 tw-p-[1px]', style: { fill: `${active ? '#fc8702' : 'currentColor'}` } })) }) }) }));
|
2302
2425
|
};
|
2303
2426
|
|
2427
|
+
function Bars3Icon({
|
2428
|
+
title,
|
2429
|
+
titleId,
|
2430
|
+
...props
|
2431
|
+
}, svgRef) {
|
2432
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
2433
|
+
xmlns: "http://www.w3.org/2000/svg",
|
2434
|
+
viewBox: "0 0 16 16",
|
2435
|
+
fill: "currentColor",
|
2436
|
+
"aria-hidden": "true",
|
2437
|
+
"data-slot": "icon",
|
2438
|
+
ref: svgRef,
|
2439
|
+
"aria-labelledby": titleId
|
2440
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
2441
|
+
id: titleId
|
2442
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
2443
|
+
fillRule: "evenodd",
|
2444
|
+
d: "M2 3.75A.75.75 0 0 1 2.75 3h10.5a.75.75 0 0 1 0 1.5H2.75A.75.75 0 0 1 2 3.75ZM2 8a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H2.75A.75.75 0 0 1 2 8Zm0 4.25a.75.75 0 0 1 .75-.75h10.5a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1-.75-.75Z",
|
2445
|
+
clipRule: "evenodd"
|
2446
|
+
}));
|
2447
|
+
}
|
2448
|
+
const ForwardRef$a = /*#__PURE__*/ React__namespace.forwardRef(Bars3Icon);
|
2449
|
+
|
2304
2450
|
// Converts leaflet.locatecontrol to a React Component
|
2305
2451
|
const SidebarControl = () => {
|
2306
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx("div", { className: 'tw-card tw-bg-base-100 tw-shadow-xl tw-items-center tw-justify-center hover:tw-bg-slate-300 hover:tw-cursor-pointer tw-transition-all tw-duration-300 tw-mr-2 tw-h-12 tw-w-12 ', children: jsxRuntime.jsx("div", { className: 'tw-card-body tw-card tw-p-0', children: jsxRuntime.jsx("button", { className: 'tw-btn tw-btn-square tw-btn-ghost tw-rounded-2xl', "data-te-sidenav-toggle-ref": true, "data-te-target": '#sidenav', "aria-controls": '#sidenav', "aria-haspopup": 'true', children: jsxRuntime.jsx(
|
2452
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx("div", { className: 'tw-card tw-bg-base-100 tw-shadow-xl tw-items-center tw-justify-center hover:tw-bg-slate-300 hover:tw-cursor-pointer tw-transition-all tw-duration-300 tw-mr-2 tw-h-12 tw-w-12 ', children: jsxRuntime.jsx("div", { className: 'tw-card-body tw-card tw-p-0', children: jsxRuntime.jsx("button", { className: 'tw-btn tw-btn-square tw-btn-ghost tw-rounded-2xl', "data-te-sidenav-toggle-ref": true, "data-te-target": '#sidenav', "aria-controls": '#sidenav', "aria-haspopup": 'true', children: jsxRuntime.jsx(ForwardRef$a, { className: 'tw-inline-block tw-w-5 tw-h-5' }) }) }) }) }));
|
2307
2453
|
};
|
2308
2454
|
|
2309
2455
|
const SearchControl = () => {
|
2310
2456
|
const windowDimensions = useWindowDimensions();
|
2311
|
-
const [popupOpen, setPopupOpen] =
|
2312
|
-
const [value, setValue] =
|
2313
|
-
const [geoResults, setGeoResults] =
|
2314
|
-
const [tagsResults, setTagsResults] =
|
2315
|
-
const [itemsResults, setItemsResults] =
|
2316
|
-
const [hideSuggestions, setHideSuggestions] =
|
2457
|
+
const [popupOpen, setPopupOpen] = React.useState(false);
|
2458
|
+
const [value, setValue] = React.useState('');
|
2459
|
+
const [geoResults, setGeoResults] = React.useState([]);
|
2460
|
+
const [tagsResults, setTagsResults] = React.useState([]);
|
2461
|
+
const [itemsResults, setItemsResults] = React.useState([]);
|
2462
|
+
const [hideSuggestions, setHideSuggestions] = React.useState(true);
|
2317
2463
|
const map = reactLeaflet.useMap();
|
2318
2464
|
const tags = useTags();
|
2319
2465
|
const items = useItems();
|
@@ -2356,10 +2502,10 @@ const SearchControl = () => {
|
|
2356
2502
|
setHideSuggestions(true);
|
2357
2503
|
}, 200);
|
2358
2504
|
};
|
2359
|
-
const searchInput =
|
2360
|
-
const [embedded, setEmbedded] =
|
2505
|
+
const searchInput = React.useRef(null);
|
2506
|
+
const [embedded, setEmbedded] = React.useState(true);
|
2361
2507
|
const location = reactRouterDom.useLocation();
|
2362
|
-
|
2508
|
+
React.useEffect(() => {
|
2363
2509
|
const params = new URLSearchParams(location.search);
|
2364
2510
|
const embedded = params.get('embedded');
|
2365
2511
|
embedded !== 'true' && setEmbedded(false);
|
@@ -2402,7 +2548,7 @@ const SearchControl = () => {
|
|
2402
2548
|
else
|
2403
2549
|
map.setView(new leaflet.LatLng(geo.geometry.coordinates[1], geo.geometry.coordinates[0]), 15, { duration: 1 });
|
2404
2550
|
hide();
|
2405
|
-
}, children: [jsxRuntime.jsx(
|
2551
|
+
}, children: [jsxRuntime.jsx(ForwardRef$b, { className: 'tw-text-current tw-mr-2 tw-mt-0 tw-w-4' }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", { className: 'tw-text-sm tw-overflow-hidden tw-text-ellipsis tw-whitespace-nowrap tw-max-w-[17rem]', children: geo?.properties.name ? geo?.properties.name : value }), jsxRuntime.jsxs("div", { className: 'tw-text-xs tw-overflow-hidden tw-text-ellipsis tw-whitespace-nowrap tw-max-w-[17rem]', children: [geo?.properties?.city && `${capitalizeFirstLetter(geo?.properties?.city)}, `, ' ', geo?.properties?.osm_value &&
|
2406
2552
|
geo?.properties?.osm_value !== 'yes' &&
|
2407
2553
|
geo?.properties?.osm_value !== 'primary' &&
|
2408
2554
|
geo?.properties?.osm_value !== 'path' &&
|
@@ -2421,7 +2567,7 @@ const SearchControl = () => {
|
|
2421
2567
|
console.log(e.target.remove());
|
2422
2568
|
});
|
2423
2569
|
map.setView(new leaflet.LatLng(extractCoordinates(value)[0], extractCoordinates(value)[1]), 15, { duration: 1 });
|
2424
|
-
}, children: [jsxRuntime.jsx(
|
2570
|
+
}, children: [jsxRuntime.jsx(ForwardRef$c, { className: 'tw-text-current tw-mr-2 tw-mt-0 tw-w-4' }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("div", { className: 'tw-text-sm tw-overflow-hidden tw-text-ellipsis tw-whitespace-nowrap tw-max-w-[17rem]', children: value }), jsxRuntime.jsx("div", { className: 'tw-text-xs tw-overflow-hidden tw-text-ellipsis tw-whitespace-nowrap tw-max-w-[17rem]', children: 'Coordiante' })] })] }))] }))] })) }));
|
2425
2571
|
};
|
2426
2572
|
function isGeoCoordinate(input) {
|
2427
2573
|
const geokoordinatenRegex =
|
@@ -2540,7 +2686,7 @@ const TextView = ({ item, itemId, text, truncate = false, rawText, itemTextField
|
|
2540
2686
|
}, children: decodeTag(children) }, tag ? tag.name + itemId : itemId));
|
2541
2687
|
};
|
2542
2688
|
// eslint-disable-next-line react/display-name
|
2543
|
-
const MemoizedVideoEmbed =
|
2689
|
+
const MemoizedVideoEmbed = React.memo(({ url }) => (jsxRuntime.jsx("iframe", { className: 'tw-w-full', src: url, allow: 'fullscreen; picture-in-picture', allowFullScreen: true })));
|
2544
2690
|
return (jsxRuntime.jsx(Markdown, { className: 'tw-text-map tw-leading-map tw-text-sm', remarkPlugins: [remarkBreaks], components: {
|
2545
2691
|
p: CustomParagraph,
|
2546
2692
|
a: ({ href, children }) => {
|
@@ -2624,18 +2770,18 @@ function UtopiaMapInner({ children, geo, showFilterControl = false, showGratitud
|
|
2624
2770
|
const setClusterRef = useSetClusterRef();
|
2625
2771
|
const clusterRef = useClusterRef();
|
2626
2772
|
const setMapClicked = useSetMapClicked();
|
2627
|
-
const [itemFormPopup, setItemFormPopup] =
|
2773
|
+
const [itemFormPopup, setItemFormPopup] = React.useState(null);
|
2628
2774
|
const layers = useLayers();
|
2629
2775
|
const addVisibleLayer = useAddVisibleLayer();
|
2630
2776
|
const leafletRefs = useLeafletRefs();
|
2631
2777
|
const location = reactRouterDom.useLocation();
|
2632
2778
|
const map = reactLeaflet.useMap();
|
2633
|
-
|
2779
|
+
React.useEffect(() => {
|
2634
2780
|
layers.forEach((layer) => addVisibleLayer(layer));
|
2635
2781
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
2636
2782
|
}, [layers]);
|
2637
|
-
const init =
|
2638
|
-
|
2783
|
+
const init = React.useRef(false);
|
2784
|
+
React.useEffect(() => {
|
2639
2785
|
if (!init.current) {
|
2640
2786
|
donationWidget &&
|
2641
2787
|
setTimeout(() => {
|
@@ -2703,7 +2849,7 @@ function UtopiaMapInner({ children, geo, showFilterControl = false, showGratitud
|
|
2703
2849
|
}
|
2704
2850
|
}
|
2705
2851
|
};
|
2706
|
-
|
2852
|
+
React.useEffect(() => {
|
2707
2853
|
openPopup();
|
2708
2854
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
2709
2855
|
}, [leafletRefs, location]);
|
@@ -2723,8 +2869,8 @@ function UtopiaMapInner({ children, geo, showFilterControl = false, showGratitud
|
|
2723
2869
|
layer.bindPopup(feature.properties.name);
|
2724
2870
|
}
|
2725
2871
|
};
|
2726
|
-
return (jsxRuntime.jsxs("div", { className: `tw-h-full ${selectNewItemPosition != null ? 'crosshair-cursor-enabled' : undefined}`, children: [jsxRuntime.jsx(reactRouterDom.Outlet, {}), jsxRuntime.jsxs(Control, { position: 'topLeft', zIndex: '1000', absolute: true, children: [jsxRuntime.jsx(SearchControl, {}), jsxRuntime.jsx(TagsControl, {})] }), jsxRuntime.jsxs(Control, { position: 'bottomLeft', zIndex: '999', absolute: true, children: [showFilterControl && jsxRuntime.jsx(FilterControl, {}), showLayerControl && jsxRuntime.jsx(LayerControl, {}), showGratitudeControl && jsxRuntime.jsx(GratitudeControl, {})] }), jsxRuntime.jsx(reactLeaflet.TileLayer, { maxZoom: 19, attribution: '\u00A9 <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors', url: 'https://tile.osmand.net/hd/{z}/{x}/{y}.png' }), jsxRuntime.jsx(MarkerClusterGroup, { ref: (r) => setClusterRef(r), showCoverageOnHover: true, chunkedLoading: true, maxClusterRadius: 50, removeOutsideVisibleBounds: false, children:
|
2727
|
-
?
|
2872
|
+
return (jsxRuntime.jsxs("div", { className: `tw-h-full ${selectNewItemPosition != null ? 'crosshair-cursor-enabled' : undefined}`, children: [jsxRuntime.jsx(reactRouterDom.Outlet, {}), jsxRuntime.jsxs(Control, { position: 'topLeft', zIndex: '1000', absolute: true, children: [jsxRuntime.jsx(SearchControl, {}), jsxRuntime.jsx(TagsControl, {})] }), jsxRuntime.jsxs(Control, { position: 'bottomLeft', zIndex: '999', absolute: true, children: [showFilterControl && jsxRuntime.jsx(FilterControl, {}), showLayerControl && jsxRuntime.jsx(LayerControl, {}), showGratitudeControl && jsxRuntime.jsx(GratitudeControl, {})] }), jsxRuntime.jsx(reactLeaflet.TileLayer, { maxZoom: 19, attribution: '\u00A9 <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors', url: 'https://tile.osmand.net/hd/{z}/{x}/{y}.png' }), jsxRuntime.jsx(MarkerClusterGroup, { ref: (r) => setClusterRef(r), showCoverageOnHover: true, chunkedLoading: true, maxClusterRadius: 50, removeOutsideVisibleBounds: false, children: React.Children.toArray(children).map((child) => React.isValidElement(child)
|
2873
|
+
? React.cloneElement(child, { setItemFormPopup, itemFormPopup, clusterRef })
|
2728
2874
|
: child) }), geo && (jsxRuntime.jsx(reactLeaflet.GeoJSON, { data: geo, onEachFeature: onEachFeature, eventHandlers: {
|
2729
2875
|
click: (e) => {
|
2730
2876
|
if (selectNewItemPosition) {
|
@@ -2804,14 +2950,14 @@ const rgbToHex = (r, g, b) => '#' +
|
|
2804
2950
|
* @category Input
|
2805
2951
|
*/
|
2806
2952
|
function TextAreaInput({ labelTitle, dataField, labelStyle, containerStyle, inputStyle, defaultValue, placeholder, required = true, updateFormValue, }) {
|
2807
|
-
const ref =
|
2808
|
-
const [inputValue, setInputValue] =
|
2953
|
+
const ref = React.useRef(null);
|
2954
|
+
const [inputValue, setInputValue] = React.useState(defaultValue);
|
2809
2955
|
const tags = useTags();
|
2810
2956
|
const values = [];
|
2811
2957
|
tags.forEach((tag) => {
|
2812
2958
|
values.push({ key: tag.name, value: tag.name, color: tag.color });
|
2813
2959
|
});
|
2814
|
-
|
2960
|
+
React.useEffect(() => {
|
2815
2961
|
setInputValue(defaultValue);
|
2816
2962
|
}, [defaultValue]);
|
2817
2963
|
const handleChange = (e) => {
|
@@ -2821,16 +2967,16 @@ function TextAreaInput({ labelTitle, dataField, labelStyle, containerStyle, inpu
|
|
2821
2967
|
updateFormValue(newValue);
|
2822
2968
|
}
|
2823
2969
|
};
|
2824
|
-
return (jsxRuntime.jsxs("div", { className: `tw-form-control tw-w-full ${containerStyle
|
2970
|
+
return (jsxRuntime.jsxs("div", { className: `tw-form-control tw-w-full ${containerStyle ?? ''}`, children: [labelTitle ? (jsxRuntime.jsx("label", { className: 'tw-label', children: jsxRuntime.jsx("span", { className: `tw-label-text tw-text-base-content ${labelStyle ?? ''}`, children: labelTitle }) })) : null, jsxRuntime.jsx("textarea", { required: required, ref: ref, value: inputValue, name: dataField, className: `tw-textarea tw-textarea-bordered tw-w-full tw-leading-5 ${inputStyle ?? ''}`, placeholder: placeholder ?? '', onChange: handleChange })] }));
|
2825
2971
|
}
|
2826
2972
|
|
2827
2973
|
/**
|
2828
2974
|
* @category Input
|
2829
2975
|
*/
|
2830
2976
|
function TextInput({ labelTitle, labelStyle, type, dataField, containerStyle, inputStyle, defaultValue, placeholder, autocomplete, pattern, required = true, updateFormValue, }) {
|
2831
|
-
const [inputValue, setInputValue] =
|
2832
|
-
|
2833
|
-
setInputValue(defaultValue
|
2977
|
+
const [inputValue, setInputValue] = React.useState(defaultValue ?? '');
|
2978
|
+
React.useEffect(() => {
|
2979
|
+
setInputValue(defaultValue ?? '');
|
2834
2980
|
}, [defaultValue]);
|
2835
2981
|
const handleChange = (e) => {
|
2836
2982
|
const newValue = e.target.value;
|
@@ -2839,13 +2985,13 @@ function TextInput({ labelTitle, labelStyle, type, dataField, containerStyle, in
|
|
2839
2985
|
updateFormValue(newValue);
|
2840
2986
|
}
|
2841
2987
|
};
|
2842
|
-
return (jsxRuntime.jsxs("div", { className: `tw-form-control ${containerStyle}`, children: [labelTitle ? (jsxRuntime.jsx("label", { className: 'tw-label', children: jsxRuntime.jsx("span", { className: `tw-label-text tw-text-base-content ${labelStyle}`, children: labelTitle }) })) : null, jsxRuntime.jsx("input", { required: required, pattern: pattern, type: type
|
2988
|
+
return (jsxRuntime.jsxs("div", { className: `tw-form-control ${containerStyle ?? ''}`, children: [labelTitle ? (jsxRuntime.jsx("label", { className: 'tw-label', children: jsxRuntime.jsx("span", { className: `tw-label-text tw-text-base-content ${labelStyle ?? ''}`, children: labelTitle }) })) : null, jsxRuntime.jsx("input", { required: required, pattern: pattern, type: type ?? 'text', name: dataField, value: inputValue, placeholder: placeholder ?? '', autoComplete: autocomplete, onChange: handleChange, className: `tw-input tw-input-bordered tw-w-full ${inputStyle ?? ''}` })] }));
|
2843
2989
|
}
|
2844
2990
|
|
2845
2991
|
function ItemFormPopup(props) {
|
2846
|
-
const [spinner, setSpinner] =
|
2847
|
-
const [popupTitle, setPopupTitle] =
|
2848
|
-
const formRef =
|
2992
|
+
const [spinner, setSpinner] = React.useState(false);
|
2993
|
+
const [popupTitle, setPopupTitle] = React.useState('');
|
2994
|
+
const formRef = React.useRef(null);
|
2849
2995
|
const map = reactLeaflet.useMap();
|
2850
2996
|
const addItem = useAddItem();
|
2851
2997
|
const updateItem = useUpdateItem();
|
@@ -2864,6 +3010,11 @@ function ItemFormPopup(props) {
|
|
2864
3010
|
});
|
2865
3011
|
formItem.position = { type: 'Point', coordinates: [props.position.lng, props.position.lat] };
|
2866
3012
|
evt.preventDefault();
|
3013
|
+
const name = formItem.name ? formItem.name : user?.first_name;
|
3014
|
+
if (!name) {
|
3015
|
+
reactToastify.toast.error('Name is must be defined');
|
3016
|
+
return;
|
3017
|
+
}
|
2867
3018
|
setSpinner(true);
|
2868
3019
|
formItem.text &&
|
2869
3020
|
formItem.text
|
@@ -2905,8 +3056,8 @@ function ItemFormPopup(props) {
|
|
2905
3056
|
(!props.layer.userProfileLayer || !item) &&
|
2906
3057
|
(await props.layer.api?.createItem({
|
2907
3058
|
...formItem,
|
3059
|
+
name,
|
2908
3060
|
id: uuid,
|
2909
|
-
name: formItem.name ? formItem.name : user?.first_name,
|
2910
3061
|
}));
|
2911
3062
|
success = true;
|
2912
3063
|
// eslint-disable-next-line no-catch-all/no-catch-all
|
@@ -2940,7 +3091,7 @@ function ItemFormPopup(props) {
|
|
2940
3091
|
formRef.current.reset();
|
2941
3092
|
}
|
2942
3093
|
};
|
2943
|
-
|
3094
|
+
React.useEffect(() => {
|
2944
3095
|
resetPopup();
|
2945
3096
|
}, [props.position]);
|
2946
3097
|
return (jsxRuntime.jsx(reactLeaflet.Popup, { minWidth: 275, maxWidth: 275, autoPanPadding: [20, 80], eventHandlers: {
|
@@ -2949,8 +3100,8 @@ function ItemFormPopup(props) {
|
|
2949
3100
|
resetPopup();
|
2950
3101
|
}, 100);
|
2951
3102
|
},
|
2952
|
-
}, position: props.position, children: jsxRuntime.jsxs("form", { ref: formRef, onReset: resetPopup, autoComplete: 'off', onSubmit: (e) => handleSubmit(e), children: [props.item ? (jsxRuntime.jsx("div", { className: 'tw-h-3' })) : (jsxRuntime.jsx("div", { className: 'tw-flex tw-justify-center', children: jsxRuntime.jsx("b", { className: 'tw-text-xl tw-text-center tw-font-bold', children: props.layer.menuText }) })), props.children ? (
|
2953
|
-
?
|
3103
|
+
}, position: props.position, children: jsxRuntime.jsxs("form", { ref: formRef, onReset: resetPopup, autoComplete: 'off', onSubmit: (e) => handleSubmit(e), children: [props.item ? (jsxRuntime.jsx("div", { className: 'tw-h-3' })) : (jsxRuntime.jsx("div", { className: 'tw-flex tw-justify-center', children: jsxRuntime.jsx("b", { className: 'tw-text-xl tw-text-center tw-font-bold', children: props.layer.menuText }) })), props.children ? (React.Children.toArray(props.children).map((child) => React.isValidElement(child)
|
3104
|
+
? React.cloneElement(child, {
|
2954
3105
|
item: props.item,
|
2955
3106
|
key: props.position.toString(),
|
2956
3107
|
setPopupTitle,
|
@@ -2992,13 +3143,80 @@ const calculateTimeDifference = (time) => {
|
|
2992
3143
|
};
|
2993
3144
|
};
|
2994
3145
|
|
3146
|
+
function EllipsisVerticalIcon({
|
3147
|
+
title,
|
3148
|
+
titleId,
|
3149
|
+
...props
|
3150
|
+
}, svgRef) {
|
3151
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
3152
|
+
xmlns: "http://www.w3.org/2000/svg",
|
3153
|
+
viewBox: "0 0 16 16",
|
3154
|
+
fill: "currentColor",
|
3155
|
+
"aria-hidden": "true",
|
3156
|
+
"data-slot": "icon",
|
3157
|
+
ref: svgRef,
|
3158
|
+
"aria-labelledby": titleId
|
3159
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
3160
|
+
id: titleId
|
3161
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
3162
|
+
d: "M8 2a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM8 6.5a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM9.5 12.5a1.5 1.5 0 1 0-3 0 1.5 1.5 0 0 0 3 0Z"
|
3163
|
+
}));
|
3164
|
+
}
|
3165
|
+
const ForwardRef$9 = /*#__PURE__*/ React__namespace.forwardRef(EllipsisVerticalIcon);
|
3166
|
+
|
3167
|
+
function PencilIcon({
|
3168
|
+
title,
|
3169
|
+
titleId,
|
3170
|
+
...props
|
3171
|
+
}, svgRef) {
|
3172
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
3173
|
+
xmlns: "http://www.w3.org/2000/svg",
|
3174
|
+
viewBox: "0 0 24 24",
|
3175
|
+
fill: "currentColor",
|
3176
|
+
"aria-hidden": "true",
|
3177
|
+
"data-slot": "icon",
|
3178
|
+
ref: svgRef,
|
3179
|
+
"aria-labelledby": titleId
|
3180
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
3181
|
+
id: titleId
|
3182
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
3183
|
+
d: "M21.731 2.269a2.625 2.625 0 0 0-3.712 0l-1.157 1.157 3.712 3.712 1.157-1.157a2.625 2.625 0 0 0 0-3.712ZM19.513 8.199l-3.712-3.712-12.15 12.15a5.25 5.25 0 0 0-1.32 2.214l-.8 2.685a.75.75 0 0 0 .933.933l2.685-.8a5.25 5.25 0 0 0 2.214-1.32L19.513 8.2Z"
|
3184
|
+
}));
|
3185
|
+
}
|
3186
|
+
const ForwardRef$8 = /*#__PURE__*/ React__namespace.forwardRef(PencilIcon);
|
3187
|
+
|
3188
|
+
function TrashIcon({
|
3189
|
+
title,
|
3190
|
+
titleId,
|
3191
|
+
...props
|
3192
|
+
}, svgRef) {
|
3193
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
3194
|
+
xmlns: "http://www.w3.org/2000/svg",
|
3195
|
+
viewBox: "0 0 24 24",
|
3196
|
+
fill: "currentColor",
|
3197
|
+
"aria-hidden": "true",
|
3198
|
+
"data-slot": "icon",
|
3199
|
+
ref: svgRef,
|
3200
|
+
"aria-labelledby": titleId
|
3201
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
3202
|
+
id: titleId
|
3203
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
3204
|
+
fillRule: "evenodd",
|
3205
|
+
d: "M16.5 4.478v.227a48.816 48.816 0 0 1 3.878.512.75.75 0 1 1-.256 1.478l-.209-.035-1.005 13.07a3 3 0 0 1-2.991 2.77H8.084a3 3 0 0 1-2.991-2.77L4.087 6.66l-.209.035a.75.75 0 0 1-.256-1.478A48.567 48.567 0 0 1 7.5 4.705v-.227c0-1.564 1.213-2.9 2.816-2.951a52.662 52.662 0 0 1 3.369 0c1.603.051 2.815 1.387 2.815 2.951Zm-6.136-1.452a51.196 51.196 0 0 1 3.273 0C14.39 3.05 15 3.684 15 4.478v.113a49.488 49.488 0 0 0-6 0v-.113c0-.794.609-1.428 1.364-1.452Zm-.355 5.945a.75.75 0 1 0-1.5.058l.347 9a.75.75 0 1 0 1.499-.058l-.346-9Zm5.48.058a.75.75 0 1 0-1.498-.058l-.347 9a.75.75 0 0 0 1.5.058l.345-9Z",
|
3206
|
+
clipRule: "evenodd"
|
3207
|
+
}));
|
3208
|
+
}
|
3209
|
+
const ForwardRef$7 = /*#__PURE__*/ React__namespace.forwardRef(TrashIcon);
|
3210
|
+
|
3211
|
+
var TargetDotSVG = 'data:image/svg+xml;base64,PHN2ZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPSdjdXJyZW50Q29sb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPSdjdXJyZW50Q29sb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD0nMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9JzAgMCA1MTIgNTEyJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPSd0dy13LTUgdHctaC01JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJwogICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9J00yNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMlY0Mi40YzkzLjcgMTMuOSAxNjcuNyA4OCAxODEuNiAxODEuNkg0ODBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJINDY5LjZjLTEzLjkgOTMuNy04OCAxNjcuNy0xODEuNiAxODEuNlY0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJWNDY5LjZDMTMwLjMgNDU1LjcgNTYuMyAzODEuNyA0Mi40IDI4OEgzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMkg0Mi40QzU2LjMgMTMwLjMgMTMwLjMgNTYuMyAyMjQgNDIuNFYzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMTA3LjQgMjg4YzEyLjUgNTguMyA1OC40IDEwNC4xIDExNi42IDExNi42VjM4NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMydjIwLjZjNTguMy0xMi41IDEwNC4xLTU4LjQgMTE2LjYtMTE2LjZIMzg0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyaDIwLjZDMzkyLjEgMTY1LjcgMzQ2LjMgMTE5LjkgMjg4IDEwNy40VjEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMlYxMDcuNEMxNjUuNyAxMTkuOSAxMTkuOSAxNjUuNyAxMDcuNCAyMjRIMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMySDEwNy40ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHonPjwvcGF0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4=';
|
3212
|
+
|
2995
3213
|
const isClickInsideRectangle = (e, element) => {
|
2996
3214
|
const r = element.getBoundingClientRect();
|
2997
3215
|
return e.clientX > r.left && e.clientX < r.right && e.clientY > r.top && e.clientY < r.bottom;
|
2998
3216
|
};
|
2999
3217
|
const DialogModal = ({ title, isOpened, onClose, children, showCloseButton = true, closeOnClickOutside = true, className, }) => {
|
3000
|
-
const ref =
|
3001
|
-
|
3218
|
+
const ref = React.useRef(null);
|
3219
|
+
React.useEffect(() => {
|
3002
3220
|
if (isOpened) {
|
3003
3221
|
ref.current?.showModal();
|
3004
3222
|
ref.current?.classList.remove('tw-hidden');
|
@@ -3018,19 +3236,19 @@ const DialogModal = ({ title, isOpened, onClose, children, showCloseButton = tru
|
|
3018
3236
|
};
|
3019
3237
|
|
3020
3238
|
function HeaderView({ item, api, editCallback, deleteCallback, setPositionCallback, loading, hideMenu = false, big = false, truncateSubname = true, hideSubname = false, showAddress = false, }) {
|
3021
|
-
const [modalOpen, setModalOpen] =
|
3239
|
+
const [modalOpen, setModalOpen] = React.useState(false);
|
3022
3240
|
const hasUserPermission = useHasUserPermission();
|
3023
3241
|
const navigate = reactRouterDom.useNavigate();
|
3024
3242
|
const appState = useAppState();
|
3025
|
-
const [imageLoaded, setImageLoaded] =
|
3026
|
-
|
3243
|
+
const [imageLoaded, setImageLoaded] = React.useState(false);
|
3244
|
+
React.useEffect(() => {
|
3027
3245
|
setImageLoaded(false);
|
3028
3246
|
}, [item]);
|
3029
3247
|
const avatar = item.image &&
|
3030
3248
|
appState.assetsApi.url + item.image + `${big ? '?width=160&heigth=160' : '?width=80&heigth=80'}`;
|
3031
3249
|
const title = item.name;
|
3032
3250
|
const subtitle = item.subname;
|
3033
|
-
const [address] =
|
3251
|
+
const [address] = React.useState('');
|
3034
3252
|
const params = new URLSearchParams(window.location.search);
|
3035
3253
|
const openDeleteModal = async (event) => {
|
3036
3254
|
setModalOpen(true);
|
@@ -3039,29 +3257,29 @@ function HeaderView({ item, api, editCallback, deleteCallback, setPositionCallba
|
|
3039
3257
|
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: 'tw-flex tw-flex-row', children: [jsxRuntime.jsx("div", { className: 'tw-grow tw-max-w-[calc(100%-60px)] }', children: jsxRuntime.jsxs("div", { className: 'flex items-center', children: [avatar && (jsxRuntime.jsx("div", { className: 'tw-avatar', children: jsxRuntime.jsxs("div", { className: `${big ? 'tw-w-20' : 'tw-w-10'} tw-inline tw-items-center tw-justify-center overflow-hidden`, children: [jsxRuntime.jsx("img", { className: 'tw-w-full tw-h-full tw-object-cover tw-rounded-full', src: avatar, alt: item.name + ' logo', onLoad: () => setImageLoaded(true), onError: () => setImageLoaded(false), style: { display: imageLoaded ? 'block' : 'none' } }), !imageLoaded && (jsxRuntime.jsx("div", { className: 'tw-w-full tw-h-full tw-bg-gray-200 tw-rounded-full' }))] }) })), jsxRuntime.jsxs("div", { className: `${avatar ? 'tw-ml-2' : ''} tw-overflow-hidden`, children: [jsxRuntime.jsx("div", { className: `${big ? 'xl:tw-text-3xl tw-text-2xl' : 'tw-text-xl'} tw-font-semibold tw-truncate`, title: title, children: title }), showAddress && address && !hideSubname && (jsxRuntime.jsx("div", { className: `tw-text-xs tw-text-gray-500 ${truncateSubname && 'tw-truncate'}`, children: address })), subtitle && !hideSubname && (jsxRuntime.jsx("div", { className: `tw-text-xs tw-text-gray-500 ${truncateSubname && 'tw-truncate'}`, children: subtitle }))] })] }) }), jsxRuntime.jsx("div", { onClick: (e) => e.stopPropagation(), className: `${big ? 'tw-mt-5' : 'tw-mt-1'}`, children: (api?.deleteItem || item.layer?.api?.updateItem) &&
|
3040
3258
|
(hasUserPermission(api?.collectionName, 'delete', item) ||
|
3041
3259
|
hasUserPermission(api?.collectionName, 'update', item)) &&
|
3042
|
-
!hideMenu && (jsxRuntime.jsxs("div", { className: 'tw-dropdown tw-dropdown-bottom', children: [jsxRuntime.jsx("label", { tabIndex: 0, className: 'tw-bg-base-100 tw-btn tw-m-1 tw-leading-3 tw-border-none tw-min-h-0 tw-h-6', children: jsxRuntime.jsx(
|
3260
|
+
!hideMenu && (jsxRuntime.jsxs("div", { className: 'tw-dropdown tw-dropdown-bottom', children: [jsxRuntime.jsx("label", { tabIndex: 0, className: 'tw-bg-base-100 tw-btn tw-m-1 tw-leading-3 tw-border-none tw-min-h-0 tw-h-6', children: jsxRuntime.jsx(ForwardRef$9, { className: 'tw-h-5 tw-w-5' }) }), jsxRuntime.jsxs("ul", { tabIndex: 0, className: 'tw-dropdown-content tw-menu tw-p-2 tw-shadow tw-bg-base-100 tw-rounded-box tw-z-1000', children: [api?.updateItem &&
|
3043
3261
|
hasUserPermission(api.collectionName, 'update', item) &&
|
3044
3262
|
editCallback && (jsxRuntime.jsx("li", { children: jsxRuntime.jsx("a", { className: '!tw-text-base-content tw-cursor-pointer', onClick: (e) => item.layer?.customEditLink
|
3045
3263
|
? navigate(`${item.layer.customEditLink}${item.layer.customEditParameter ? `/${item.id}${params && '?' + params}` : ''} `)
|
3046
|
-
: editCallback(e), children: jsxRuntime.jsx(
|
3264
|
+
: editCallback(e), children: jsxRuntime.jsx(ForwardRef$8, { className: 'tw-h-5 tw-w-5' }) }) })), api?.updateItem &&
|
3047
3265
|
hasUserPermission(api.collectionName, 'update', item) &&
|
3048
|
-
setPositionCallback && (jsxRuntime.jsx("li", { children: jsxRuntime.jsx("a", { className: '!tw-text-base-content tw-cursor-pointer', onClick: setPositionCallback, children: jsxRuntime.jsx("
|
3266
|
+
setPositionCallback && (jsxRuntime.jsx("li", { children: jsxRuntime.jsx("a", { className: '!tw-text-base-content tw-cursor-pointer', onClick: setPositionCallback, children: jsxRuntime.jsx("img", { src: TargetDotSVG, alt: 'Position', className: 'tw-w-5 tw-h-5' }) }) })), api?.deleteItem &&
|
3049
3267
|
hasUserPermission(api.collectionName, 'delete', item) &&
|
3050
|
-
deleteCallback && (jsxRuntime.jsx("li", { children: jsxRuntime.jsx("a", { className: 'tw-cursor-pointer !tw-text-error', onClick: openDeleteModal, children: loading ? (jsxRuntime.jsx("span", { className: 'tw-loading tw-loading-spinner tw-loading-sm' })) : (jsxRuntime.jsx(
|
3268
|
+
deleteCallback && (jsxRuntime.jsx("li", { children: jsxRuntime.jsx("a", { className: 'tw-cursor-pointer !tw-text-error', onClick: openDeleteModal, children: loading ? (jsxRuntime.jsx("span", { className: 'tw-loading tw-loading-spinner tw-loading-sm' })) : (jsxRuntime.jsx(ForwardRef$7, { className: 'tw-h-5 tw-w-5' })) }) }))] })] })) })] }), jsxRuntime.jsx(DialogModal, { isOpened: modalOpen, title: 'Are you sure?', showCloseButton: false, onClose: () => setModalOpen(false), children: jsxRuntime.jsxs("div", { onClick: (e) => e.stopPropagation(), children: [jsxRuntime.jsxs("span", { children: ["Do you want to delete ", jsxRuntime.jsx("b", { children: item.name }), "?"] }), jsxRuntime.jsx("div", { className: 'tw-grid', children: jsxRuntime.jsxs("div", { className: 'tw-flex tw-justify-between', children: [jsxRuntime.jsx("label", { className: 'tw-btn tw-mt-4 tw-btn-error', onClick: (e) => {
|
3051
3269
|
deleteCallback(e);
|
3052
3270
|
setModalOpen(false);
|
3053
3271
|
}, children: "Yes" }), jsxRuntime.jsx("label", { className: 'tw-btn tw-mt-4', onClick: () => setModalOpen(false), children: "No" })] }) })] }) })] }));
|
3054
3272
|
}
|
3055
3273
|
|
3056
3274
|
// eslint-disable-next-line react/display-name
|
3057
|
-
const ItemViewPopup =
|
3275
|
+
const ItemViewPopup = React.forwardRef((props, ref) => {
|
3058
3276
|
const map = reactLeaflet.useMap();
|
3059
|
-
const [loading, setLoading] =
|
3277
|
+
const [loading, setLoading] = React.useState(false);
|
3060
3278
|
const removeItem = useRemoveItem();
|
3061
3279
|
const updadateItem = useUpdateItem();
|
3062
3280
|
const navigate = reactRouterDom.useNavigate();
|
3063
3281
|
const setSelectPosition = useSetSelectPosition();
|
3064
|
-
const [infoExpanded, setInfoExpanded] =
|
3282
|
+
const [infoExpanded, setInfoExpanded] = React.useState(false);
|
3065
3283
|
const handleEdit = (event) => {
|
3066
3284
|
event.stopPropagation();
|
3067
3285
|
map.closePopup();
|
@@ -3104,8 +3322,8 @@ const ItemViewPopup = react.forwardRef((props, ref) => {
|
|
3104
3322
|
map.closePopup();
|
3105
3323
|
setSelectPosition(props.item);
|
3106
3324
|
navigate('/');
|
3107
|
-
}, loading: loading }), jsxRuntime.jsx("div", { className: 'tw-overflow-y-auto tw-overflow-x-hidden tw-max-h-64 fade', children: props.children ? (
|
3108
|
-
?
|
3325
|
+
}, loading: loading }), jsxRuntime.jsx("div", { className: 'tw-overflow-y-auto tw-overflow-x-hidden tw-max-h-64 fade', children: props.children ? (React.Children.toArray(props.children).map((child) => React.isValidElement(child)
|
3326
|
+
? React.cloneElement(child, { item: props.item })
|
3109
3327
|
: '')) : (jsxRuntime.jsx(TextView, { text: props.item.text, itemId: props.item.id })) }), jsxRuntime.jsxs("div", { className: 'tw-flex -tw-mb-1 tw-flex-row tw-mr-2 tw-mt-1', children: [infoExpanded ? (jsxRuntime.jsx("p", { className: 'tw-italic tw-min-h-[21px] !tw-my-0 tw-text-gray-500', children: `${props.item.date_updated && props.item.date_updated !== props.item.date_created ? 'updated' : 'posted'} ${props.item && props.item.user_created && props.item.user_created.first_name ? `by ${props.item.user_created.first_name}` : ''} ${props.item.date_updated ? timeAgo(props.item.date_updated) : timeAgo(props.item.date_created)}` })) : (jsxRuntime.jsx("p", { className: '!tw-my-0 tw-min-h-[21px] tw-font-bold tw-cursor-pointer tw-text-gray-500', onClick: () => setInfoExpanded(true), children: "\u24D8" })), jsxRuntime.jsx("div", { className: 'tw-grow' })] })] }) }));
|
3110
3328
|
});
|
3111
3329
|
|
@@ -3129,12 +3347,12 @@ public_edit_items, listed = true, setItemFormPopup, itemFormPopup, clusterRef, }
|
|
3129
3347
|
const selectPosition = useSelectPosition();
|
3130
3348
|
const tags = useTags();
|
3131
3349
|
const addTag = useAddTag();
|
3132
|
-
const [newTagsToAdd, setNewTagsToAdd] =
|
3133
|
-
const [tagsReady, setTagsReady] =
|
3350
|
+
const [newTagsToAdd, setNewTagsToAdd] = React.useState([]);
|
3351
|
+
const [tagsReady, setTagsReady] = React.useState(false);
|
3134
3352
|
const isLayerVisible = useIsLayerVisible();
|
3135
3353
|
const isGroupTypeVisible = useIsGroupTypeVisible();
|
3136
3354
|
const visibleGroupTypes = useVisibleGroupType();
|
3137
|
-
|
3355
|
+
React.useEffect(() => {
|
3138
3356
|
data &&
|
3139
3357
|
setItemsData({
|
3140
3358
|
data,
|
@@ -3188,7 +3406,7 @@ public_edit_items, listed = true, setItemFormPopup, itemFormPopup, clusterRef, }
|
|
3188
3406
|
});
|
3189
3407
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
3190
3408
|
}, [data, api]);
|
3191
|
-
|
3409
|
+
React.useEffect(() => {
|
3192
3410
|
if (tagsReady) {
|
3193
3411
|
const processedTags = {};
|
3194
3412
|
newTagsToAdd.map((newtag) => {
|
@@ -3262,7 +3480,7 @@ public_edit_items, listed = true, setItemFormPopup, itemFormPopup, clusterRef, }
|
|
3262
3480
|
selectPosition && setMarkerClicked(item);
|
3263
3481
|
},
|
3264
3482
|
}, icon: MarkerIconFactory(markerShape, color1, color2, item.markerIcon ? item.markerIcon : markerIcon), position: [latitude, longitude], children: [children &&
|
3265
|
-
|
3483
|
+
React.Children.toArray(children).some((child) => isComponentWithType(child) && child.type.__TYPE === 'ItemView') ? (React.Children.toArray(children).map((child) => isComponentWithType(child) && child.type.__TYPE === 'ItemView' ? (jsxRuntime.jsx(ItemViewPopup, { ref: (r) => {
|
3266
3484
|
if (!(item.id in leafletRefs && leafletRefs[item.id].popup === r)) {
|
3267
3485
|
r && addPopup(item, r);
|
3268
3486
|
}
|
@@ -3277,10 +3495,10 @@ public_edit_items, listed = true, setItemFormPopup, itemFormPopup, clusterRef, }
|
|
3277
3495
|
}), itemFormPopup &&
|
3278
3496
|
itemFormPopup.layer.name === name &&
|
3279
3497
|
(children &&
|
3280
|
-
|
3498
|
+
React.Children.toArray(children).some((child) => isComponentWithType(child) && child.type.__TYPE === 'ItemForm') ? (React.Children.toArray(children).map((child) => isComponentWithType(child) && child.type.__TYPE === 'ItemForm' ? (jsxRuntime.jsx(ItemFormPopup, { position: itemFormPopup.position, layer: itemFormPopup.layer, setItemFormPopup: setItemFormPopup, item: itemFormPopup.item, children: child }, setItemFormPopup?.name)) : (''))) : (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(ItemFormPopup, { position: itemFormPopup.position, layer: itemFormPopup.layer, setItemFormPopup: setItemFormPopup, item: itemFormPopup.item }) })))] }));
|
3281
3499
|
};
|
3282
3500
|
function isComponentWithType(node) {
|
3283
|
-
return
|
3501
|
+
return React.isValidElement(node) && typeof node.type !== 'string' && '__TYPE' in node.type;
|
3284
3502
|
}
|
3285
3503
|
|
3286
3504
|
/**
|
@@ -3289,7 +3507,7 @@ function isComponentWithType(node) {
|
|
3289
3507
|
function Tags({ data, api }) {
|
3290
3508
|
const setTagData = useSetTagData();
|
3291
3509
|
const setTagApi = useSetTagApi();
|
3292
|
-
|
3510
|
+
React.useEffect(() => {
|
3293
3511
|
data && setTagData(data);
|
3294
3512
|
api && setTagApi(api);
|
3295
3513
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
@@ -3299,7 +3517,7 @@ function Tags({ data, api }) {
|
|
3299
3517
|
const resetFilterTags = useResetFilterTags();
|
3300
3518
|
const tags = useTags();
|
3301
3519
|
const filterTags = useFilterTags();
|
3302
|
-
|
3520
|
+
React.useEffect(() => {
|
3303
3521
|
const params = new URLSearchParams(location.search);
|
3304
3522
|
const urlTags = params.get('tags');
|
3305
3523
|
const decodedTags = urlTags ? decodeURIComponent(urlTags) : '';
|
@@ -3326,7 +3544,7 @@ function Permissions({ data, api, adminRole }) {
|
|
3326
3544
|
const setPermissionApi = useSetPermissionApi();
|
3327
3545
|
const setAdminRole = useSetAdminRole();
|
3328
3546
|
const { user } = useAuth();
|
3329
|
-
|
3547
|
+
React.useEffect(() => {
|
3330
3548
|
adminRole && setAdminRole(adminRole);
|
3331
3549
|
data && setPermissionData(data);
|
3332
3550
|
api && setPermissionApi(api);
|
@@ -3339,13 +3557,13 @@ function Permissions({ data, api, adminRole }) {
|
|
3339
3557
|
* @category Map
|
3340
3558
|
*/
|
3341
3559
|
const ItemForm = ({ children, item, title, setPopupTitle, }) => {
|
3342
|
-
|
3560
|
+
React.useEffect(() => {
|
3343
3561
|
setPopupTitle && title && setPopupTitle(title);
|
3344
3562
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
3345
3563
|
}, [title]);
|
3346
3564
|
return (jsxRuntime.jsx("div", { children: children
|
3347
|
-
?
|
3348
|
-
?
|
3565
|
+
? React.Children.toArray(children).map((child) => React.isValidElement(child)
|
3566
|
+
? React.cloneElement(child, { item, test: 'test' })
|
3349
3567
|
: '')
|
3350
3568
|
: '' }));
|
3351
3569
|
};
|
@@ -3356,7 +3574,7 @@ ItemForm.__TYPE = 'ItemForm';
|
|
3356
3574
|
*/
|
3357
3575
|
const ItemView = ({ children, item }) => {
|
3358
3576
|
return (jsxRuntime.jsx("div", { children: children
|
3359
|
-
?
|
3577
|
+
? React.Children.toArray(children).map((child) => React.isValidElement(child) ? React.cloneElement(child, { item }) : null)
|
3360
3578
|
: null }));
|
3361
3579
|
};
|
3362
3580
|
ItemView.__TYPE = 'ItemView';
|
@@ -3366,12 +3584,12 @@ ItemView.__TYPE = 'ItemView';
|
|
3366
3584
|
*/
|
3367
3585
|
function SelectBox(props) {
|
3368
3586
|
const { labelTitle, labelDescription, defaultValue, containerStyle, placeholder, labelStyle, options, updateFormValue, } = props;
|
3369
|
-
const [value, setValue] =
|
3587
|
+
const [value, setValue] = React.useState(defaultValue || '');
|
3370
3588
|
const updateValue = (newValue) => {
|
3371
3589
|
updateFormValue(newValue);
|
3372
3590
|
setValue(newValue);
|
3373
3591
|
};
|
3374
|
-
return (jsxRuntime.jsxs("div", { className: `tw-inline-block ${containerStyle}`, children: [labelTitle ? (jsxRuntime.jsx("label", { className: `tw-label ${labelStyle}`, children: jsxRuntime.jsxs("div", { className: 'tw-label-text', children: [labelTitle, labelDescription && (jsxRuntime.jsx("div", { className: 'tw-tooltip tw-tooltip-right', "data-tip": labelDescription, children: jsxRuntime.jsx(InformationCircleIcon, { className: 'tw-w-4 tw-h-4' }) }))] }) })) : (''), jsxRuntime.jsxs("select", { className: 'tw-select tw-select-bordered tw-w-full', value: value, onChange: (e) => updateValue(e.target.value), children: [jsxRuntime.jsx("option", { disabled: true, value: 'PLACEHOLDER', children: placeholder }), options.map((o, k) => {
|
3592
|
+
return (jsxRuntime.jsxs("div", { className: `tw-inline-block ${containerStyle ?? ''}`, children: [labelTitle ? (jsxRuntime.jsx("label", { className: `tw-label ${labelStyle ?? ''}`, children: jsxRuntime.jsxs("div", { className: 'tw-label-text', children: [labelTitle, labelDescription && (jsxRuntime.jsx("div", { className: 'tw-tooltip tw-tooltip-right', "data-tip": labelDescription, children: jsxRuntime.jsx(InformationCircleIcon, { className: 'tw-w-4 tw-h-4' }) }))] }) })) : (''), jsxRuntime.jsxs("select", { className: 'tw-select tw-select-bordered tw-w-full', value: value, onChange: (e) => updateValue(e.target.value), children: [jsxRuntime.jsx("option", { disabled: true, value: 'PLACEHOLDER', children: placeholder }), options.map((o, k) => {
|
3375
3593
|
return (jsxRuntime.jsx("option", { value: o.value || o.name, children: o.name }, k));
|
3376
3594
|
})] })] }));
|
3377
3595
|
}
|
@@ -3404,32 +3622,57 @@ const PopupCheckboxInput = ({ dataField, label, item, }) => {
|
|
3404
3622
|
return (jsxRuntime.jsxs("label", { htmlFor: item?.id, className: 'tw-label tw-justify-normal tw-pt-1 tw-pb-1', children: [jsxRuntime.jsx("input", { id: item?.id, type: 'checkbox', name: dataField, className: 'tw-checkbox tw-checkbox-xs tw-checkbox-success', checked: item?.public_edit }), jsxRuntime.jsx("span", { className: 'tw-text-sm tw-label-text tw-mx-2 tw-cursor-pointer', children: label })] }));
|
3405
3623
|
};
|
3406
3624
|
|
3625
|
+
function CalendarDaysIcon({
|
3626
|
+
title,
|
3627
|
+
titleId,
|
3628
|
+
...props
|
3629
|
+
}, svgRef) {
|
3630
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
3631
|
+
xmlns: "http://www.w3.org/2000/svg",
|
3632
|
+
viewBox: "0 0 24 24",
|
3633
|
+
fill: "currentColor",
|
3634
|
+
"aria-hidden": "true",
|
3635
|
+
"data-slot": "icon",
|
3636
|
+
ref: svgRef,
|
3637
|
+
"aria-labelledby": titleId
|
3638
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
3639
|
+
id: titleId
|
3640
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
3641
|
+
d: "M12.75 12.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM7.5 15.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5ZM8.25 17.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM9.75 15.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5ZM10.5 17.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM12 15.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5ZM12.75 17.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM14.25 15.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5ZM15 17.25a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM16.5 15.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5ZM15 12.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM16.5 13.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Z"
|
3642
|
+
}), /*#__PURE__*/React__namespace.createElement("path", {
|
3643
|
+
fillRule: "evenodd",
|
3644
|
+
d: "M6.75 2.25A.75.75 0 0 1 7.5 3v1.5h9V3A.75.75 0 0 1 18 3v1.5h.75a3 3 0 0 1 3 3v11.25a3 3 0 0 1-3 3H5.25a3 3 0 0 1-3-3V7.5a3 3 0 0 1 3-3H6V3a.75.75 0 0 1 .75-.75Zm13.5 9a1.5 1.5 0 0 0-1.5-1.5H5.25a1.5 1.5 0 0 0-1.5 1.5v7.5a1.5 1.5 0 0 0 1.5 1.5h13.5a1.5 1.5 0 0 0 1.5-1.5v-7.5Z",
|
3645
|
+
clipRule: "evenodd"
|
3646
|
+
}));
|
3647
|
+
}
|
3648
|
+
const ForwardRef$6 = /*#__PURE__*/ React__namespace.forwardRef(CalendarDaysIcon);
|
3649
|
+
|
3407
3650
|
/**
|
3408
3651
|
* @category Map
|
3409
3652
|
*/
|
3410
3653
|
const StartEndView = ({ item }) => {
|
3411
|
-
return (jsxRuntime.jsxs("div", { className: 'tw-flex tw-flex-row tw-mb-4 tw-mt-1', children: [jsxRuntime.jsxs("div", { className: 'tw-basis-2/5 tw-flex tw-flex-row', children: [jsxRuntime.jsx(
|
3654
|
+
return (jsxRuntime.jsxs("div", { className: 'tw-flex tw-flex-row tw-mb-4 tw-mt-1', children: [jsxRuntime.jsxs("div", { className: 'tw-basis-2/5 tw-flex tw-flex-row', children: [jsxRuntime.jsx(ForwardRef$6, { className: 'tw-h-4 tw-w-4 tw-mr-2' }), jsxRuntime.jsx("time", { className: 'tw-align-middle', dateTime: item && item.start ? item.start.substring(0, 10) : '', children: item && item.start ? new Date(item.start).toLocaleDateString() : '' })] }), jsxRuntime.jsx("div", { className: 'tw-basis-1/5 tw-place-content-center', children: jsxRuntime.jsx("span", { children: "-" }) }), jsxRuntime.jsxs("div", { className: 'tw-basis-2/5 tw-flex tw-flex-row', children: [jsxRuntime.jsx(ForwardRef$6, { className: 'tw-h-4 tw-w-4 tw-mr-2' }), jsxRuntime.jsx("time", { className: 'tw-align-middle', dateTime: item && item.end ? item.end.substring(0, 10) : '', children: item && item.end ? new Date(item.end).toLocaleDateString() : '' })] })] }));
|
3412
3655
|
};
|
3413
3656
|
|
3414
3657
|
function NavBar({ appName }) {
|
3415
3658
|
const { isAuthenticated, user, logout } = useAuth();
|
3416
|
-
const [userProfile, setUserProfile] =
|
3659
|
+
const [userProfile, setUserProfile] = React.useState({});
|
3417
3660
|
const items = useItems();
|
3418
|
-
|
3661
|
+
React.useEffect(() => {
|
3419
3662
|
const profile = user && items.find((i) => i.user_created?.id === user.id && i.layer?.userProfileLayer);
|
3420
3663
|
profile
|
3421
3664
|
? setUserProfile(profile)
|
3422
3665
|
: setUserProfile({ id: crypto.randomUUID(), name: user?.first_name ?? '', text: '' });
|
3423
3666
|
}, [user, items]);
|
3424
3667
|
// useEffect(() => {}, [userProfile])
|
3425
|
-
const nameRef =
|
3426
|
-
const [nameWidth, setNameWidth] =
|
3668
|
+
const nameRef = React.useRef(null);
|
3669
|
+
const [nameWidth, setNameWidth] = React.useState(0);
|
3427
3670
|
const location = reactRouterDom.useLocation();
|
3428
|
-
const [showNav, setShowNav] =
|
3429
|
-
|
3671
|
+
const [showNav, setShowNav] = React.useState(false);
|
3672
|
+
React.useEffect(() => {
|
3430
3673
|
showNav && nameRef.current && setNameWidth(nameRef.current.scrollWidth);
|
3431
3674
|
}, [nameRef, appName, showNav]);
|
3432
|
-
|
3675
|
+
React.useEffect(() => {
|
3433
3676
|
const params = new URLSearchParams(location.search);
|
3434
3677
|
const embedded = params.get('embedded');
|
3435
3678
|
embedded !== 'true' && setShowNav(true);
|
@@ -3452,9 +3695,9 @@ function NavBar({ appName }) {
|
|
3452
3695
|
});
|
3453
3696
|
};
|
3454
3697
|
if (showNav) {
|
3455
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("div", { className: 'tw-navbar tw-bg-base-100 tw-z-[9998] tw-shadow-xl tw-relative', children: [jsxRuntime.jsx("button", { className: 'tw-btn tw-btn-square tw-btn-ghost', "data-te-sidenav-toggle-ref": true, "data-te-target": '#sidenav', "aria-controls": '#sidenav', "aria-haspopup": 'true', children: jsxRuntime.jsx(
|
3698
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("div", { className: 'tw-navbar tw-bg-base-100 tw-z-[9998] tw-shadow-xl tw-relative', children: [jsxRuntime.jsx("button", { className: 'tw-btn tw-btn-square tw-btn-ghost', "data-te-sidenav-toggle-ref": true, "data-te-target": '#sidenav', "aria-controls": '#sidenav', "aria-haspopup": 'true', children: jsxRuntime.jsx(ForwardRef$a, { className: 'tw-inline-block tw-w-5 tw-h-5' }) }), jsxRuntime.jsx("div", { className: 'tw-flex-1 tw-mr-2', children: jsxRuntime.jsxs("div", { className: 'tw-flex-1 tw-truncate tw-grid tw-grid-flow-col', style: { maxWidth: nameWidth + 60 }, children: [jsxRuntime.jsx(reactRouterDom.Link, { className: 'tw-btn tw-btn-ghost tw-px-2 tw-normal-case tw-text-xl tw-flex-1 tw-truncate', to: '/', children: jsxRuntime.jsx("h1", { ref: nameRef, className: 'tw-truncate', children: appName }) }), jsxRuntime.jsx("button", { className: 'tw-btn tw-px-2 tw-btn-ghost', onClick: () => window.my_modal_3.showModal(), children: jsxRuntime.jsx(QuestionMarkIcon, { className: 'tw-h-5 tw-w-5' }) })] }) }), isAuthenticated ? (jsxRuntime.jsxs("div", { className: 'tw-flex-none', children: [jsxRuntime.jsxs(reactRouterDom.Link, { to: `${userProfile.id && '/item/' + userProfile.id}`, className: 'tw-flex tw-items-center', children: [userProfile.image && (jsxRuntime.jsx("div", { className: 'tw-avatar', children: jsxRuntime.jsx("div", { className: 'tw-w-10 tw-rounded-full', children: jsxRuntime.jsx("img", { src: 'https://api.utopia-lab.org/assets/' + userProfile.image }) }) })), jsxRuntime.jsx("div", { className: 'tw-ml-2 tw-mr-2', children: userProfile.name || user?.first_name })] }), jsxRuntime.jsxs("div", { className: 'tw-dropdown tw-dropdown-end', children: [jsxRuntime.jsx("label", { tabIndex: 0, className: 'tw-btn tw-btn-ghost tw-btn-square', children: jsxRuntime.jsx(ForwardRef$9, { className: 'tw-h-5 tw-w-5' }) }), jsxRuntime.jsxs("ul", { tabIndex: 0, className: 'tw-menu tw-menu-compact tw-dropdown-content tw-mt-3 tw-p-2 tw-shadow tw-bg-base-100 tw-rounded-box tw-w-52 !tw-z-[10000]', children: [jsxRuntime.jsx("li", { children: jsxRuntime.jsx(reactRouterDom.Link, { to: `${userProfile.id && '/edit-item/' + userProfile.id}`, children: "Profile" }) }), jsxRuntime.jsx("li", { children: jsxRuntime.jsx(reactRouterDom.Link, { to: '/user-settings', children: "Settings" }) }), jsxRuntime.jsx("li", { children: jsxRuntime.jsx("a", { onClick: () => {
|
3456
3699
|
void onLogout();
|
3457
|
-
}, children: "Logout" }) })] })] })] })) : (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("div", { className: 'tw-hidden md:tw-flex', children: [jsxRuntime.jsx(reactRouterDom.Link, { to: '/login', children: jsxRuntime.jsx("div", { className: 'tw-btn tw-btn-ghost tw-mr-2', children: "Login" }) }), jsxRuntime.jsx(reactRouterDom.Link, { to: '/signup', children: jsxRuntime.jsx("div", { className: 'tw-btn tw-btn-ghost tw-mr-2', children: "Sign Up" }) })] }), jsxRuntime.jsxs("div", { className: 'tw-dropdown tw-dropdown-end', children: [jsxRuntime.jsx("label", { tabIndex: 1, className: 'tw-btn tw-btn-ghost md:tw-hidden', children: jsxRuntime.jsx(
|
3700
|
+
}, children: "Logout" }) })] })] })] })) : (jsxRuntime.jsxs("div", { children: [jsxRuntime.jsxs("div", { className: 'tw-hidden md:tw-flex', children: [jsxRuntime.jsx(reactRouterDom.Link, { to: '/login', children: jsxRuntime.jsx("div", { className: 'tw-btn tw-btn-ghost tw-mr-2', children: "Login" }) }), jsxRuntime.jsx(reactRouterDom.Link, { to: '/signup', children: jsxRuntime.jsx("div", { className: 'tw-btn tw-btn-ghost tw-mr-2', children: "Sign Up" }) })] }), jsxRuntime.jsxs("div", { className: 'tw-dropdown tw-dropdown-end', children: [jsxRuntime.jsx("label", { tabIndex: 1, className: 'tw-btn tw-btn-ghost md:tw-hidden', children: jsxRuntime.jsx(ForwardRef$9, { className: 'tw-h-5 tw-w-5' }) }), jsxRuntime.jsxs("ul", { tabIndex: 1, className: 'tw-menu tw-dropdown-content tw-mt-3 tw-p-2 tw-shadow tw-bg-base-100 tw-rounded-box tw-w-52 !tw-z-[10000]', children: [jsxRuntime.jsx("li", { children: jsxRuntime.jsx(reactRouterDom.Link, { to: '/login', children: "Login" }) }), jsxRuntime.jsx("li", { children: jsxRuntime.jsx(reactRouterDom.Link, { to: '/signup', children: "Sign Up" }) })] })] })] }))] }) }));
|
3458
3701
|
}
|
3459
3702
|
else
|
3460
3703
|
return jsxRuntime.jsx(jsxRuntime.Fragment, {});
|
@@ -3462,7 +3705,7 @@ function NavBar({ appName }) {
|
|
3462
3705
|
|
3463
3706
|
const SetAppState = ({ assetsApi }) => {
|
3464
3707
|
const setAppState = useSetAppState();
|
3465
|
-
|
3708
|
+
React.useEffect(() => {
|
3466
3709
|
setAppState({ assetsApi });
|
3467
3710
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
3468
3711
|
}, [assetsApi]);
|
@@ -3478,17 +3721,17 @@ function AppShell({ appName, children, assetsApi, }) {
|
|
3478
3721
|
|
3479
3722
|
function SidebarSubmenu({ submenu, name, icon, }) {
|
3480
3723
|
const location = reactRouterDom.useLocation();
|
3481
|
-
const [isExpanded, setIsExpanded] =
|
3724
|
+
const [isExpanded, setIsExpanded] = React.useState(false);
|
3482
3725
|
/** Open Submenu list if path found in routes, this is for directly loading submenu routes first time */
|
3483
|
-
|
3484
|
-
if (submenu
|
3726
|
+
React.useEffect(() => {
|
3727
|
+
if (submenu?.filter((m) => {
|
3485
3728
|
return m.path === location.pathname;
|
3486
3729
|
})[0])
|
3487
3730
|
setIsExpanded(true);
|
3488
3731
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
3489
3732
|
}, []);
|
3490
3733
|
return (jsxRuntime.jsxs("div", { className: 'flex-col', children: [jsxRuntime.jsxs("div", { className: 'w-full', onClick: () => setIsExpanded(!isExpanded), children: [icon, ' ', jsxRuntime.jsxs("span", { className: "group-[&[data-te-sidenav-slim-collapsed='true']]:data-[te-sidenav-slim='false']:hidden", "data-te-sidenav-slim": 'false', children: [name, ' '] }), jsxRuntime.jsx(ChevronDownIcon, { className: 'w-5 h-5 mt-1 float-right delay-400 duration-500 transition-all ' +
|
3491
|
-
(isExpanded ? 'rotate-180' : '') })] }), jsxRuntime.jsx("div", { className: ' w-full data-[te-collapse-show]:!hidden ' + (isExpanded ? '' : 'hidden'), children: jsxRuntime.jsx("ul", { className: 'menu menu-compact', children: submenu
|
3734
|
+
(isExpanded ? 'rotate-180' : '') })] }), jsxRuntime.jsx("div", { className: ' w-full data-[te-collapse-show]:!hidden ' + (isExpanded ? '' : 'hidden'), children: jsxRuntime.jsx("ul", { className: 'menu menu-compact', children: submenu?.map((m, k) => {
|
3492
3735
|
return (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs(reactRouterDom.Link, { to: m.path, className: '', children: [m.icon, jsxRuntime.jsx("span", { className: '', "data-te-sidenav-slim": 'false', children: m.name }), location.pathname === m.path ? (jsxRuntime.jsx("span", { className: 'absolute mt-1 mb-1 inset-y-0 left-0 w-1 rounded-tr-md rounded-br-md bg-primary ', "aria-hidden": 'true' })) : null] }) }, k));
|
3493
3736
|
}) }) })] }));
|
3494
3737
|
}
|
@@ -3498,40 +3741,44 @@ function SidebarSubmenu({ submenu, name, icon, }) {
|
|
3498
3741
|
*/
|
3499
3742
|
function SideBar({ routes, bottomRoutes }) {
|
3500
3743
|
// prevent react18 from calling useEffect twice
|
3501
|
-
const init =
|
3744
|
+
const init = React.useRef(false);
|
3502
3745
|
const location = reactRouterDom.useLocation();
|
3503
|
-
const [instance, setInstance] =
|
3504
|
-
const [slim, setSlim] =
|
3746
|
+
const [instance, setInstance] = React.useState();
|
3747
|
+
const [slim, setSlim] = React.useState(false);
|
3505
3748
|
const toggleSlim = () => {
|
3506
3749
|
setSlim(!slim);
|
3507
|
-
instance
|
3750
|
+
instance?.toggleSlim();
|
3508
3751
|
};
|
3509
|
-
|
3752
|
+
React.useEffect(() => {
|
3510
3753
|
if (!init.current) {
|
3754
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
3511
3755
|
twElements.initTE({ Sidenav: twElements.Sidenav });
|
3756
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
|
3512
3757
|
const instance = twElements.Sidenav.getInstance(document.getElementById('sidenav'));
|
3513
3758
|
setInstance(instance);
|
3514
3759
|
instance.toggleSlim();
|
3515
3760
|
init.current = true;
|
3516
3761
|
}
|
3517
3762
|
}, []);
|
3518
|
-
const [embedded, setEmbedded] =
|
3519
|
-
|
3763
|
+
const [embedded, setEmbedded] = React.useState(true);
|
3764
|
+
React.useEffect(() => {
|
3520
3765
|
const params = new URLSearchParams(location.search);
|
3521
3766
|
const embedded = params.get('embedded');
|
3522
3767
|
embedded !== 'true' && setEmbedded(false);
|
3523
3768
|
}, [location]);
|
3524
3769
|
const params = new URLSearchParams(window.location.search);
|
3525
3770
|
return (jsxRuntime.jsx("nav", { id: 'sidenav', className: `group tw-fixed tw-left-0 ${embedded ? 'tw-mt-0 tw-h-[100dvh]' : 'tw-mt-16 tw-h-[calc(100dvh-64px)]'} tw-top-0 tw-z-[10035] tw--translate-x-full tw-overflow-hidden tw-shadow-xl data-[te-sidenav-slim='true']:tw-hidden data-[te-sidenav-slim-collapsed='true']:tw-w-[56px] data-[te-sidenav-slim='true']:tw-w-[56px] data-[te-sidenav-hidden='false']:tw-translate-x-0 dark:tw-bg-zinc-800 [&[data-te-sidenav-slim-collapsed='true'][data-te-sidenav-slim='false']]:tw-hidden [&[data-te-sidenav-slim-collapsed='true'][data-te-sidenav-slim='true']]:[display:unset]`, "data-te-sidenav-init": true, "data-te-sidenav-hidden": 'true', "data-te-sidenav-mode": 'side', "data-te-sidenav-slim": 'true', "data-te-sidenav-content": '#app-content', "data-te-sidenav-slim-collapsed": 'true', "data-te-sidenav-slim-width": '56', "data-te-sidenav-width": '180', children: jsxRuntime.jsxs("div", { className: `tw-flex tw-flex-col ${embedded ? 'tw-h-full' : 'tw-h-[calc(100dvh-64px)]'}`, children: [jsxRuntime.jsx("ul", { className: 'tw-menu tw-w-full tw-bg-base-100 tw-text-base-content tw-p-0', "data-te-sidenav-menu-ref": true, children: routes.map((route, k) => {
|
3526
|
-
return (jsxRuntime.jsx("li", { className: '', children: route.submenu ? (jsxRuntime.jsx(SidebarSubmenu, { ...route })) : (jsxRuntime.jsxs(reactRouterDom.NavLink, { end: true, target: route.blank ? '_blank' : '_self',
|
3771
|
+
return (jsxRuntime.jsx("li", { className: '', children: route.submenu ? (jsxRuntime.jsx(SidebarSubmenu, { ...route })) : (jsxRuntime.jsxs(reactRouterDom.NavLink, { end: true, target: route.blank ? '_blank' : '_self',
|
3772
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
3773
|
+
to: `${route.path}${params && '?' + params.toString()}`, className: ({ isActive }) => `${isActive ? 'tw-font-semibold tw-bg-base-200 !tw-rounded-none' : 'tw-font-normal !tw-rounded-none'}`, onClick: () => {
|
3527
3774
|
if (screen.width < 640 && !slim)
|
3528
|
-
instance
|
3775
|
+
instance?.toggle();
|
3529
3776
|
}, children: [route.icon, jsxRuntime.jsx("span", { className: "group-[&[data-te-sidenav-slim-collapsed='true']]:data-[te-sidenav-slim='false']:tw-hidden", "data-te-sidenav-slim": 'false', children: route.name }), (location.pathname.includes(route.path) && route.path.length > 1) ||
|
3530
3777
|
location.pathname === route.path ? (jsxRuntime.jsx("span", { className: 'tw-absolute tw-inset-y-0 tw-left-0 tw-w-1 tw-rounded-tr-md tw-rounded-br-md tw-bg-primary ', "aria-hidden": 'true' })) : null] })) }, k));
|
3531
3778
|
}) }), jsxRuntime.jsx("div", { id: 'slim-toggler', className: 'tw-w-full tw-bg-base-100 tw-flex-1 tw-grid tw-place-items-end', "aria-haspopup": 'true', children: jsxRuntime.jsxs("div", { className: 'tw-w-full', children: [jsxRuntime.jsx("ul", { className: 'tw-menu tw-w-full tw-bg-base-100 tw-text-base-content tw-p-0 tw-mb-0', "data-te-sidenav-menu-ref": true, children: bottomRoutes?.map((route, k) => {
|
3532
3779
|
return (jsxRuntime.jsx("li", { className: '', children: route.submenu ? (jsxRuntime.jsx(SidebarSubmenu, { ...route })) : (jsxRuntime.jsxs(reactRouterDom.NavLink, { end: true, target: route.blank ? '_blank' : '_self', to: route.path, className: ({ isActive }) => `${isActive ? 'tw-font-semibold tw-bg-base-200 !tw-rounded-none' : 'tw-font-normal !tw-rounded-none'}`, onClick: () => {
|
3533
3780
|
if (screen.width < 640 && !slim)
|
3534
|
-
instance
|
3781
|
+
instance?.toggle();
|
3535
3782
|
}, children: [route.icon, jsxRuntime.jsx("span", { className: "group-[&[data-te-sidenav-slim-collapsed='true']]:data-[te-sidenav-slim='false']:tw-hidden", "data-te-sidenav-slim": 'false', children: route.name }), (location.pathname.includes(route.path) && route.path.length > 1) ||
|
3536
3783
|
location.pathname === route.path ? (jsxRuntime.jsx("span", { className: 'tw-absolute tw-inset-y-0 tw-left-0 tw-w-1 tw-rounded-tr-md tw-rounded-br-md tw-bg-primary ', "aria-hidden": 'true' })) : null] })) }, k));
|
3537
3784
|
}) }), jsxRuntime.jsx(ChevronRightIcon, { className: 'tw-w-5 tw-h-5 tw-mb-4 tw-mr-4 tw-cursor-pointer tw-float-right tw-delay-400 tw-duration-500 tw-transition-all ' +
|
@@ -3549,9 +3796,9 @@ function Content({ children }) {
|
|
3549
3796
|
* @category AppShell
|
3550
3797
|
*/
|
3551
3798
|
const Sitemap = ({ url }) => {
|
3552
|
-
const [sitemap, setSitemap] =
|
3799
|
+
const [sitemap, setSitemap] = React.useState('');
|
3553
3800
|
const items = useItems();
|
3554
|
-
|
3801
|
+
React.useEffect(() => {
|
3555
3802
|
if (items.length) {
|
3556
3803
|
const generateSitemap = () => {
|
3557
3804
|
let sitemapXML = '<?xml version="1.0" encoding="UTF-8"?>\n';
|
@@ -3579,9 +3826,9 @@ function MapOverlayPage({ children, className, backdrop, card = true, }) {
|
|
3579
3826
|
navigate(`/${window.location.search ? window.location.search : ''}`);
|
3580
3827
|
};
|
3581
3828
|
const navigate = reactRouterDom.useNavigate();
|
3582
|
-
const overlayRef =
|
3583
|
-
const backdropRef =
|
3584
|
-
|
3829
|
+
const overlayRef = React.createRef();
|
3830
|
+
const backdropRef = React.createRef();
|
3831
|
+
React.useEffect(() => {
|
3585
3832
|
if (overlayRef.current !== null) {
|
3586
3833
|
leaflet.DomEvent.disableClickPropagation(overlayRef.current);
|
3587
3834
|
leaflet.DomEvent.disableScrollPropagation(overlayRef.current);
|
@@ -3599,8 +3846,8 @@ function MapOverlayPage({ children, className, backdrop, card = true, }) {
|
|
3599
3846
|
* @category Auth
|
3600
3847
|
*/
|
3601
3848
|
function LoginPage() {
|
3602
|
-
const [email, setEmail] =
|
3603
|
-
const [password, setPassword] =
|
3849
|
+
const [email, setEmail] = React.useState('');
|
3850
|
+
const [password, setPassword] = React.useState('');
|
3604
3851
|
const { login, loading } = useAuth();
|
3605
3852
|
const navigate = reactRouterDom.useNavigate();
|
3606
3853
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
@@ -3609,7 +3856,7 @@ function LoginPage() {
|
|
3609
3856
|
success: {
|
3610
3857
|
render({ data }) {
|
3611
3858
|
navigate('/');
|
3612
|
-
return `Hi ${data?.first_name}`;
|
3859
|
+
return `Hi ${data?.first_name ? data.first_name : 'Traveler'}`;
|
3613
3860
|
},
|
3614
3861
|
// other options
|
3615
3862
|
icon: '✌️',
|
@@ -3623,10 +3870,11 @@ function LoginPage() {
|
|
3623
3870
|
pending: 'logging in ...',
|
3624
3871
|
});
|
3625
3872
|
};
|
3626
|
-
|
3873
|
+
React.useEffect(() => {
|
3627
3874
|
const keyDownHandler = (event) => {
|
3628
3875
|
if (event.key === 'Enter') {
|
3629
3876
|
event.preventDefault();
|
3877
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
3630
3878
|
onLogin();
|
3631
3879
|
}
|
3632
3880
|
};
|
@@ -3637,16 +3885,18 @@ function LoginPage() {
|
|
3637
3885
|
}, [onLogin]);
|
3638
3886
|
return (jsxRuntime.jsxs(MapOverlayPage, { backdrop: true, className: 'tw-max-w-xs tw-h-fit', children: [jsxRuntime.jsx("h2", { className: 'tw-text-2xl tw-font-semibold tw-mb-2 tw-text-center', children: "Login" }), jsxRuntime.jsx("input", { type: 'email', placeholder: 'E-Mail', value: email, onChange: (e) => setEmail(e.target.value), className: 'tw-input tw-input-bordered tw-w-full tw-max-w-xs' }), jsxRuntime.jsx("input", { type: 'password', placeholder: 'Password', onChange: (e) => setPassword(e.target.value), className: 'tw-input tw-input-bordered tw-w-full tw-max-w-xs' }), jsxRuntime.jsx("div", { className: 'tw-text-right tw-text-primary', children: jsxRuntime.jsx(reactRouterDom.Link, { to: '/reset-password', children: jsxRuntime.jsx("span", { className: 'tw-text-sm tw-inline-block hover:tw-text-primary hover:tw-underline hover:tw-cursor-pointer tw-transition tw-duration-200', children: "Forgot Password?" }) }) }), jsxRuntime.jsx("div", { className: 'tw-card-actions', children: jsxRuntime.jsx("button", { className: loading
|
3639
3887
|
? 'tw-btn tw-btn-disabled tw-btn-block tw-btn-primary'
|
3640
|
-
: 'tw-btn tw-btn-primary tw-btn-block',
|
3888
|
+
: 'tw-btn tw-btn-primary tw-btn-block',
|
3889
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
3890
|
+
onClick: () => onLogin(), children: loading ? jsxRuntime.jsx("span", { className: 'tw-loading tw-loading-spinner' }) : 'Login' }) })] }));
|
3641
3891
|
}
|
3642
3892
|
|
3643
3893
|
/**
|
3644
3894
|
* @category Auth
|
3645
3895
|
*/
|
3646
3896
|
function SignupPage() {
|
3647
|
-
const [email, setEmail] =
|
3648
|
-
const [userName, setUserName] =
|
3649
|
-
const [password, setPassword] =
|
3897
|
+
const [email, setEmail] = React.useState('');
|
3898
|
+
const [userName, setUserName] = React.useState('');
|
3899
|
+
const [password, setPassword] = React.useState('');
|
3650
3900
|
const { register, loading } = useAuth();
|
3651
3901
|
const navigate = reactRouterDom.useNavigate();
|
3652
3902
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
@@ -3655,7 +3905,7 @@ function SignupPage() {
|
|
3655
3905
|
success: {
|
3656
3906
|
render({ data }) {
|
3657
3907
|
navigate('/');
|
3658
|
-
return `Hi ${data?.first_name}`;
|
3908
|
+
return `Hi ${data?.first_name ? data.first_name : 'Traveler'}`;
|
3659
3909
|
},
|
3660
3910
|
// other options
|
3661
3911
|
icon: '✌️',
|
@@ -3669,10 +3919,11 @@ function SignupPage() {
|
|
3669
3919
|
pending: 'creating new user ...',
|
3670
3920
|
});
|
3671
3921
|
};
|
3672
|
-
|
3922
|
+
React.useEffect(() => {
|
3673
3923
|
const keyDownHandler = (event) => {
|
3674
3924
|
if (event.key === 'Enter') {
|
3675
3925
|
event.preventDefault();
|
3926
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
3676
3927
|
onRegister();
|
3677
3928
|
}
|
3678
3929
|
};
|
@@ -3683,15 +3934,16 @@ function SignupPage() {
|
|
3683
3934
|
}, [onRegister]);
|
3684
3935
|
return (jsxRuntime.jsxs(MapOverlayPage, { backdrop: true, className: 'tw-max-w-xs tw-h-fit', children: [jsxRuntime.jsx("h2", { className: 'tw-text-2xl tw-font-semibold tw-mb-2 tw-text-center', children: "Sign Up" }), jsxRuntime.jsx("input", { type: 'text', placeholder: 'Name', value: userName, onChange: (e) => setUserName(e.target.value), className: 'tw-input tw-input-bordered tw-w-full tw-max-w-xs' }), jsxRuntime.jsx("input", { type: 'email', placeholder: 'E-Mail', value: email, onChange: (e) => setEmail(e.target.value), className: 'tw-input tw-input-bordered tw-w-full tw-max-w-xs' }), jsxRuntime.jsx("input", { type: 'password', placeholder: 'Password', onChange: (e) => setPassword(e.target.value), className: 'tw-input tw-input-bordered tw-w-full tw-max-w-xs' }), jsxRuntime.jsx("div", { className: 'tw-card-actions tw-mt-4', children: jsxRuntime.jsx("button", { className: loading
|
3685
3936
|
? 'tw-btn tw-btn-disabled tw-btn-block tw-btn-primary'
|
3686
|
-
: 'tw-btn tw-btn-primary tw-btn-block',
|
3937
|
+
: 'tw-btn tw-btn-primary tw-btn-block',
|
3938
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
3939
|
+
onClick: () => onRegister(), children: loading ? jsxRuntime.jsx("span", { className: 'tw-loading tw-loading-spinner' }) : 'Sign Up' }) })] }));
|
3687
3940
|
}
|
3688
3941
|
|
3689
3942
|
/**
|
3690
3943
|
* @category Auth
|
3691
3944
|
*/
|
3692
|
-
// eslint-disable-next-line react/prop-types
|
3693
3945
|
function RequestPasswordPage({ resetUrl }) {
|
3694
|
-
const [email, setEmail] =
|
3946
|
+
const [email, setEmail] = React.useState('');
|
3695
3947
|
const { requestPasswordReset, loading } = useAuth();
|
3696
3948
|
const navigate = reactRouterDom.useNavigate();
|
3697
3949
|
const onReset = async () => {
|
@@ -3714,20 +3966,20 @@ function RequestPasswordPage({ resetUrl }) {
|
|
3714
3966
|
};
|
3715
3967
|
return (jsxRuntime.jsxs(MapOverlayPage, { backdrop: true, className: 'tw-max-w-xs tw-h-fit', children: [jsxRuntime.jsx("h2", { className: 'tw-text-2xl tw-font-semibold tw-mb-2 tw-text-center', children: "Reset Password" }), jsxRuntime.jsx("input", { type: 'email', placeholder: 'E-Mail', value: email, onChange: (e) => setEmail(e.target.value), className: 'tw-input tw-input-bordered tw-w-full tw-max-w-xs' }), jsxRuntime.jsx("div", { className: 'tw-card-actions tw-mt-4', children: jsxRuntime.jsx("button", { className: loading
|
3716
3968
|
? 'tw-btn tw-btn-disabled tw-btn-block tw-btn-primary'
|
3717
|
-
: 'tw-btn tw-btn-primary tw-btn-block',
|
3969
|
+
: 'tw-btn tw-btn-primary tw-btn-block',
|
3970
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
3971
|
+
onClick: () => onReset(), children: loading ? jsxRuntime.jsx("span", { className: 'tw-loading tw-loading-spinner' }) : 'Send' }) })] }));
|
3718
3972
|
}
|
3719
3973
|
|
3720
3974
|
/**
|
3721
3975
|
* @category Auth
|
3722
3976
|
*/
|
3723
3977
|
function SetNewPasswordPage() {
|
3724
|
-
const [password, setPassword] =
|
3978
|
+
const [password, setPassword] = React.useState('');
|
3725
3979
|
const { passwordReset, loading } = useAuth();
|
3726
3980
|
const navigate = reactRouterDom.useNavigate();
|
3727
3981
|
const onReset = async () => {
|
3728
3982
|
const token = window.location.search.split('token=')[1];
|
3729
|
-
// eslint-disable-next-line no-console
|
3730
|
-
console.log(token);
|
3731
3983
|
await reactToastify.toast.promise(passwordReset(token, password), {
|
3732
3984
|
success: {
|
3733
3985
|
render() {
|
@@ -3745,7 +3997,9 @@ function SetNewPasswordPage() {
|
|
3745
3997
|
};
|
3746
3998
|
return (jsxRuntime.jsxs(MapOverlayPage, { backdrop: true, className: 'tw-max-w-xs tw-h-fit', children: [jsxRuntime.jsx("h2", { className: 'tw-text-2xl tw-font-semibold tw-mb-2 tw-text-center', children: "Set new Password" }), jsxRuntime.jsx("input", { type: 'password', placeholder: 'Password', onChange: (e) => setPassword(e.target.value), className: 'tw-input tw-input-bordered tw-w-full tw-max-w-xs' }), jsxRuntime.jsx("div", { className: 'tw-card-actions tw-mt-4', children: jsxRuntime.jsx("button", { className: loading
|
3747
3999
|
? 'tw-btn tw-btn-disabled tw-btn-block tw-btn-primary'
|
3748
|
-
: 'tw-btn tw-btn-primary tw-btn-block',
|
4000
|
+
: 'tw-btn tw-btn-primary tw-btn-block',
|
4001
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
4002
|
+
onClick: () => onReset(), children: loading ? jsxRuntime.jsx("span", { className: 'tw-loading tw-loading-spinner' }) : 'Set' }) })] }));
|
3749
4003
|
}
|
3750
4004
|
|
3751
4005
|
function Subtitle({ styleClass, children }) {
|
@@ -3797,8 +4051,8 @@ const getLastNewMoon = (date = new Date()) => {
|
|
3797
4051
|
};
|
3798
4052
|
|
3799
4053
|
const CircleLayout = ({ items, radius, fontSize, }) => {
|
3800
|
-
const containerRef =
|
3801
|
-
|
4054
|
+
const containerRef = React.useRef(null);
|
4055
|
+
React.useEffect(() => {
|
3802
4056
|
const container = containerRef.current;
|
3803
4057
|
const itemCount = items.length;
|
3804
4058
|
if (container) {
|
@@ -3822,7 +4076,7 @@ const CircleLayout = ({ items, radius, fontSize, }) => {
|
|
3822
4076
|
*/
|
3823
4077
|
const MoonCalendar = () => {
|
3824
4078
|
const today = dateFns.startOfToday();
|
3825
|
-
const [currMonth, setCurrMonth] =
|
4079
|
+
const [currMonth, setCurrMonth] = React.useState(() => dateFns.format(today, 'MMM-yyyy'));
|
3826
4080
|
const firstDayOfMonth = dateFns.parse(currMonth, 'MMM-yyyy', new Date());
|
3827
4081
|
const getPrevMonth = (event) => {
|
3828
4082
|
event.preventDefault();
|
@@ -3849,21 +4103,46 @@ const SelectUser = () => {
|
|
3849
4103
|
const appState = useAppState();
|
3850
4104
|
const items = useItems();
|
3851
4105
|
const users = items.filter((i) => i.layer?.userProfileLayer);
|
3852
|
-
const [selectedUsers, setSelectedUsers] =
|
4106
|
+
const [selectedUsers, setSelectedUsers] = React.useState([]);
|
3853
4107
|
return (jsxRuntime.jsxs(MapOverlayPage, { backdrop: true, className: 'tw-h-3/4 tw-w-80', children: [jsxRuntime.jsx("div", { className: 'tw-text-center tw-text-xl tw-font-bold tw-mb-4', children: "Gratitude to ..." }), jsxRuntime.jsx("div", { className: 'tw-overflow-x-auto tw-w-full fade', children: jsxRuntime.jsx("table", { className: 'tw-table tw-w-full', children: jsxRuntime.jsx("tbody", { children: users.map((u, k) => {
|
3854
4108
|
return (jsxRuntime.jsxs("tr", { children: [jsxRuntime.jsx("td", { children: jsxRuntime.jsx("input", { type: 'checkbox', onChange: () => setSelectedUsers((prev) => [...prev, u.id]), className: 'tw-checkbox tw-checkbox-sm' }) }), jsxRuntime.jsx("td", { children: jsxRuntime.jsxs("div", { className: 'tw-flex tw-items-center tw-space-x-3', children: [u.image ? (jsxRuntime.jsx("div", { className: 'tw-avatar', children: jsxRuntime.jsx("div", { className: 'tw-mask tw-mask-circle tw-w-8 tw-h-8', children: jsxRuntime.jsx("img", { src: appState.assetsApi.url + u.image + '?width=40&heigth=40', alt: 'Avatar' }) }) })) : (jsxRuntime.jsx("div", { className: 'tw-mask tw-mask-circle tw-text-xl md:tw-text-2xl tw-bg-slate-200 tw-rounded-full tw-w-8 tw-h-8' })), jsxRuntime.jsx("div", { children: jsxRuntime.jsx("div", { className: 'tw-font-bold', children: u.name }) })] }) })] }, k));
|
3855
4109
|
}) }) }) }), jsxRuntime.jsx("div", { className: 'tw-w-full tw-grid tw-mt-4', children: jsxRuntime.jsx(reactRouterDom.Link, { className: 'tw-place-self-center ', to: '/attestation-form' + '?to=' + selectedUsers.map((u) => u, ','), children: jsxRuntime.jsx("button", { className: 'tw-btn tw-px-8', children: "Next" }) }) })] }));
|
3856
4110
|
};
|
3857
4111
|
|
4112
|
+
function PlusIcon({
|
4113
|
+
title,
|
4114
|
+
titleId,
|
4115
|
+
...props
|
4116
|
+
}, svgRef) {
|
4117
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
4118
|
+
xmlns: "http://www.w3.org/2000/svg",
|
4119
|
+
fill: "none",
|
4120
|
+
viewBox: "0 0 24 24",
|
4121
|
+
strokeWidth: 1.5,
|
4122
|
+
stroke: "currentColor",
|
4123
|
+
"aria-hidden": "true",
|
4124
|
+
"data-slot": "icon",
|
4125
|
+
ref: svgRef,
|
4126
|
+
"aria-labelledby": titleId
|
4127
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
4128
|
+
id: titleId
|
4129
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
4130
|
+
strokeLinecap: "round",
|
4131
|
+
strokeLinejoin: "round",
|
4132
|
+
d: "M12 4.5v15m7.5-7.5h-15"
|
4133
|
+
}));
|
4134
|
+
}
|
4135
|
+
const ForwardRef$5 = /*#__PURE__*/ React__namespace.forwardRef(PlusIcon);
|
4136
|
+
|
3858
4137
|
function PlusButton({ layer, triggerAction, color, collection = 'items', }) {
|
3859
4138
|
const hasUserPermission = useHasUserPermission();
|
3860
4139
|
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: hasUserPermission(collection, 'create', undefined, layer) && (jsxRuntime.jsx("div", { className: 'tw-dropdown tw-dropdown-top tw-dropdown-end tw-dropdown-hover tw-z-3000 tw-absolute tw-right-4 tw-bottom-4', children: jsxRuntime.jsx("button", { tabIndex: 0, className: 'tw-z-500 tw-btn tw-btn-circle tw-shadow', onClick: () => {
|
3861
4140
|
triggerAction();
|
3862
|
-
}, style: { backgroundColor: color, color: '#fff' }, children: jsxRuntime.jsx(
|
4141
|
+
}, style: { backgroundColor: color, color: '#fff' }, children: jsxRuntime.jsx(ForwardRef$5, { className: 'tw-w-5 tw-h-5 tw-stroke-[2.5]' }) }) })) }));
|
3863
4142
|
}
|
3864
4143
|
|
3865
4144
|
const DateUserInfo = ({ item }) => {
|
3866
|
-
const [infoExpanded, setInfoExpanded] =
|
4145
|
+
const [infoExpanded, setInfoExpanded] = React.useState(false);
|
3867
4146
|
return (jsxRuntime.jsxs("div", { className: 'tw-flex -tw-mb-1 tw-flex-row tw-mr-2 -tw-mt-2', onClick: (e) => e.stopPropagation(), children: [infoExpanded ? (jsxRuntime.jsx("p", { className: 'tw-italic tw-min-h-[21px] !tw-my-0 tw-text-gray-500', onClick: () => setInfoExpanded(false), children: `${item.date_updated && item.date_updated !== item.date_created ? 'updated' : 'posted'} ${item && item.user_created && item.user_created.first_name ? `by ${item.user_created.first_name}` : ''} ${item.date_updated ? timeAgo(item.date_updated) : timeAgo(item.date_created)}` })) : (jsxRuntime.jsx("p", { className: '!tw-my-0 tw-min-h-[21px] tw-font-bold tw-cursor-pointer tw-text-gray-500', onClick: () => setInfoExpanded(true), children: "\u24D8" })), jsxRuntime.jsx("div", { className: 'tw-grow ' })] }));
|
3868
4147
|
};
|
3869
4148
|
|
@@ -3884,16 +4163,16 @@ const ItemCard = ({ i, loading, url, deleteCallback, }) => {
|
|
3884
4163
|
* @category Templates
|
3885
4164
|
*/
|
3886
4165
|
const OverlayItemsIndexPage = ({ url, layerName, parameterField, plusButton = true, }) => {
|
3887
|
-
const [loading, setLoading] =
|
3888
|
-
const [addItemPopupType, setAddItemPopupType] =
|
3889
|
-
const tabRef =
|
4166
|
+
const [loading, setLoading] = React.useState(false);
|
4167
|
+
const [addItemPopupType, setAddItemPopupType] = React.useState('');
|
4168
|
+
const tabRef = React.useRef(null);
|
3890
4169
|
function scroll() {
|
3891
4170
|
tabRef.current?.scrollIntoView();
|
3892
4171
|
}
|
3893
|
-
|
4172
|
+
React.useEffect(() => {
|
3894
4173
|
scroll();
|
3895
4174
|
}, [addItemPopupType]);
|
3896
|
-
|
4175
|
+
React.useEffect(() => {
|
3897
4176
|
setAddItemPopupType('');
|
3898
4177
|
}, [layerName]);
|
3899
4178
|
const tags = useTags();
|
@@ -3987,7 +4266,7 @@ const OverlayItemsIndexPage = ({ url, layerName, parameterField, plusButton = tr
|
|
3987
4266
|
};
|
3988
4267
|
|
3989
4268
|
const EmojiPicker = ({ selectedEmoji, selectedColor, selectedShape, setSelectedEmoji, setSelectedColor, setSelectedShape, }) => {
|
3990
|
-
const [isOpen, setIsOpen] =
|
4269
|
+
const [isOpen, setIsOpen] = React.useState(false);
|
3991
4270
|
const emojis = [
|
3992
4271
|
'❤️',
|
3993
4272
|
'🙏',
|
@@ -4065,17 +4344,17 @@ const EmojiPicker = ({ selectedEmoji, selectedColor, selectedShape, setSelectedE
|
|
4065
4344
|
const AttestationForm = ({ api }) => {
|
4066
4345
|
const items = useItems();
|
4067
4346
|
const appState = useAppState();
|
4068
|
-
const [users, setUsers] =
|
4347
|
+
const [users, setUsers] = React.useState();
|
4069
4348
|
const navigate = reactRouterDom.useNavigate();
|
4070
|
-
|
4349
|
+
React.useEffect(() => {
|
4071
4350
|
const params = new URLSearchParams(location.search);
|
4072
4351
|
const toUserIds = params.get('to');
|
4073
4352
|
setUsers(items.filter((i) => toUserIds?.includes(i.id)));
|
4074
4353
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
4075
4354
|
}, [items, location]);
|
4076
|
-
const [inputValue, setInputValue] =
|
4077
|
-
const inputRef =
|
4078
|
-
|
4355
|
+
const [inputValue, setInputValue] = React.useState('');
|
4356
|
+
const inputRef = React.useRef(null);
|
4357
|
+
React.useEffect(() => {
|
4079
4358
|
if (inputRef.current) {
|
4080
4359
|
inputRef.current.style.width = 'auto';
|
4081
4360
|
inputRef.current.style.width = `${inputRef.current.scrollWidth + 20}px`;
|
@@ -4115,9 +4394,9 @@ const AttestationForm = ({ api }) => {
|
|
4115
4394
|
i.layer?.userProfileLayer === true)?.id +
|
4116
4395
|
'?tab=2'));
|
4117
4396
|
};
|
4118
|
-
const [selectedEmoji, setSelectedEmoji] =
|
4119
|
-
const [selectedShape, setSelectedShape] =
|
4120
|
-
const [selectedColor, setSelectedColor] =
|
4397
|
+
const [selectedEmoji, setSelectedEmoji] = React.useState('select badge');
|
4398
|
+
const [selectedShape, setSelectedShape] = React.useState('circle');
|
4399
|
+
const [selectedColor, setSelectedColor] = React.useState('#fff0d6');
|
4121
4400
|
return (jsxRuntime.jsxs(MapOverlayPage, { backdrop: true, className: 'tw-h-fit tw-min-h-56 tw-w-96', children: [jsxRuntime.jsx("div", { className: 'tw-text-center tw-text-xl tw-font-bold', children: "Gratitude" }), jsxRuntime.jsx("div", { className: 'tw-text-center tw-text-base tw-text-gray-400', children: "to" }), jsxRuntime.jsx("div", { className: 'tw-flex tw-flex-row tw-justify-center tw-items-center tw-flex-wrap', children: users?.map((u, k) => (jsxRuntime.jsxs("div", { className: 'tw-flex tw-items-center tw-space-x-3 tw-mx-2 tw-my-1', children: [u.image ? (jsxRuntime.jsx("div", { className: 'tw-avatar', children: jsxRuntime.jsx("div", { className: 'tw-mask tw-mask-circle tw-w-8 tw-h-8', children: jsxRuntime.jsx("img", { src: appState.assetsApi.url + u.image + '?width=40&heigth=40', alt: 'Avatar' }) }) })) : (jsxRuntime.jsx("div", { className: 'tw-mask tw-mask-circle tw-text-xl md:tw-text-2xl tw-bg-slate-200 tw-rounded-full tw-w-8 tw-h-8' })), jsxRuntime.jsx("div", { children: jsxRuntime.jsx("div", { className: 'tw-font-bold', children: u.name }) })] }, k)), ', ') }), jsxRuntime.jsxs("div", { className: 'tw-w-full', children: [jsxRuntime.jsx("div", { className: 'tw-flex tw-justify-center tw-items-center', children: jsxRuntime.jsx("div", { className: ' tw-flex tw-justify-center tw-items-center tw-w-28 tw-h-28 tw-m-4', children: jsxRuntime.jsx(EmojiPicker, { selectedEmoji: selectedEmoji, selectedColor: selectedColor, selectedShape: selectedShape, setSelectedEmoji: setSelectedEmoji, setSelectedColor: setSelectedColor, setSelectedShape: setSelectedShape }) }) }), jsxRuntime.jsx("div", { className: 'tw-flex tw-justify-center tw-items-center', children: jsxRuntime.jsx("input", { ref: inputRef, value: inputValue, onChange: handleChange, type: 'text', placeholder: '... and say some words', className: 'tw-input tw-min-w-0 tw-w-fit tw-resize-none tw-overflow-hidden tw-text-center ' }) })] }), jsxRuntime.jsx("div", { className: 'tw-w-full tw-grid tw-mt-4', children: jsxRuntime.jsx("button", { onClick: sendAttestation, className: 'tw-btn tw-place-self-center tw-px-8', children: "Next" }) })] }));
|
4122
4401
|
};
|
4123
4402
|
|
@@ -4144,12 +4423,12 @@ function groupAndCount(arr) {
|
|
4144
4423
|
* @category Templates
|
4145
4424
|
*/
|
4146
4425
|
const MarketView = () => {
|
4147
|
-
const [offers, setOffers] =
|
4148
|
-
const [needs, setNeeds] =
|
4426
|
+
const [offers, setOffers] = React.useState([]);
|
4427
|
+
const [needs, setNeeds] = React.useState([]);
|
4149
4428
|
const navigate = reactRouterDom.useNavigate();
|
4150
4429
|
const items = useItems();
|
4151
4430
|
const tags = useTags();
|
4152
|
-
|
4431
|
+
React.useEffect(() => {
|
4153
4432
|
setOffers([]);
|
4154
4433
|
setNeeds([]);
|
4155
4434
|
for (const item of items) {
|
@@ -4174,12 +4453,12 @@ const MarketView = () => {
|
|
4174
4453
|
*/
|
4175
4454
|
function UserSettings() {
|
4176
4455
|
const { user, updateUser, loading /* token */ } = useAuth();
|
4177
|
-
const [id, setId] =
|
4178
|
-
const [email, setEmail] =
|
4179
|
-
const [password, setPassword] =
|
4180
|
-
const [passwordChanged, setPasswordChanged] =
|
4456
|
+
const [id, setId] = React.useState('');
|
4457
|
+
const [email, setEmail] = React.useState('');
|
4458
|
+
const [password, setPassword] = React.useState('');
|
4459
|
+
const [passwordChanged, setPasswordChanged] = React.useState(false);
|
4181
4460
|
const navigate = reactRouterDom.useNavigate();
|
4182
|
-
|
4461
|
+
React.useEffect(() => {
|
4183
4462
|
setId(user?.id ? user.id : '');
|
4184
4463
|
setEmail(user?.email ? user.email : '');
|
4185
4464
|
setPassword(user?.password ? user.password : '');
|
@@ -4396,14 +4675,64 @@ const onUpdateItem = async (state, item, tags, addTag, setLoading, navigate, upd
|
|
4396
4675
|
}
|
4397
4676
|
};
|
4398
4677
|
|
4678
|
+
function EnvelopeIcon({
|
4679
|
+
title,
|
4680
|
+
titleId,
|
4681
|
+
...props
|
4682
|
+
}, svgRef) {
|
4683
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
4684
|
+
xmlns: "http://www.w3.org/2000/svg",
|
4685
|
+
fill: "none",
|
4686
|
+
viewBox: "0 0 24 24",
|
4687
|
+
strokeWidth: 1.5,
|
4688
|
+
stroke: "currentColor",
|
4689
|
+
"aria-hidden": "true",
|
4690
|
+
"data-slot": "icon",
|
4691
|
+
ref: svgRef,
|
4692
|
+
"aria-labelledby": titleId
|
4693
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
4694
|
+
id: titleId
|
4695
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
4696
|
+
strokeLinecap: "round",
|
4697
|
+
strokeLinejoin: "round",
|
4698
|
+
d: "M21.75 6.75v10.5a2.25 2.25 0 0 1-2.25 2.25h-15a2.25 2.25 0 0 1-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0 0 19.5 4.5h-15a2.25 2.25 0 0 0-2.25 2.25m19.5 0v.243a2.25 2.25 0 0 1-1.07 1.916l-7.5 4.615a2.25 2.25 0 0 1-2.36 0L3.32 8.91a2.25 2.25 0 0 1-1.07-1.916V6.75"
|
4699
|
+
}));
|
4700
|
+
}
|
4701
|
+
const ForwardRef$4 = /*#__PURE__*/ React__namespace.forwardRef(EnvelopeIcon);
|
4702
|
+
|
4703
|
+
function PhoneIcon({
|
4704
|
+
title,
|
4705
|
+
titleId,
|
4706
|
+
...props
|
4707
|
+
}, svgRef) {
|
4708
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
4709
|
+
xmlns: "http://www.w3.org/2000/svg",
|
4710
|
+
fill: "none",
|
4711
|
+
viewBox: "0 0 24 24",
|
4712
|
+
strokeWidth: 1.5,
|
4713
|
+
stroke: "currentColor",
|
4714
|
+
"aria-hidden": "true",
|
4715
|
+
"data-slot": "icon",
|
4716
|
+
ref: svgRef,
|
4717
|
+
"aria-labelledby": titleId
|
4718
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
4719
|
+
id: titleId
|
4720
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
4721
|
+
strokeLinecap: "round",
|
4722
|
+
strokeLinejoin: "round",
|
4723
|
+
d: "M2.25 6.75c0 8.284 6.716 15 15 15h2.25a2.25 2.25 0 0 0 2.25-2.25v-1.372c0-.516-.351-.966-.852-1.091l-4.423-1.106c-.44-.11-.902.055-1.173.417l-.97 1.293c-.282.376-.769.542-1.21.38a12.035 12.035 0 0 1-7.143-7.143c-.162-.441.004-.928.38-1.21l1.293-.97c.363-.271.527-.734.417-1.173L6.963 3.102a1.125 1.125 0 0 0-1.091-.852H4.5A2.25 2.25 0 0 0 2.25 4.5v2.25Z"
|
4724
|
+
}));
|
4725
|
+
}
|
4726
|
+
const ForwardRef$3 = /*#__PURE__*/ React__namespace.forwardRef(PhoneIcon);
|
4727
|
+
|
4399
4728
|
const ContactInfoView = ({ item, heading }) => {
|
4400
4729
|
const appState = useAppState();
|
4401
|
-
const [profileOwner, setProfileOwner] =
|
4730
|
+
const [profileOwner, setProfileOwner] = React.useState();
|
4402
4731
|
const items = useItems();
|
4403
|
-
|
4732
|
+
React.useEffect(() => {
|
4404
4733
|
setProfileOwner(items.find((i) => i.user_created?.id === item.user_created?.id && i.layer?.userProfileLayer));
|
4405
4734
|
}, [item, items]);
|
4406
|
-
return (jsxRuntime.jsxs("div", { className: 'tw-bg-base-200 tw-mb-6 tw-mt-6 tw-p-6', children: [jsxRuntime.jsx("h2", { className: 'tw-text-lg tw-font-semibold', children: heading }), jsxRuntime.jsxs("div", { className: 'tw-mt-4 tw-flex tw-items-center', children: [profileOwner?.image && (jsxRuntime.jsx(ConditionalLink, { url: '/item/' + profileOwner?.id, children: jsxRuntime.jsx("div", { className: 'tw-mr-5 tw-flex tw-items-center tw-justify-center', children: jsxRuntime.jsx("div", { className: 'tw-avatar', children: jsxRuntime.jsx("div", { className: 'tw-w-20 tw-h-20 tw-bg-gray-200 rounded-full tw-flex tw-items-center tw-justify-center overflow-hidden', children: jsxRuntime.jsx("img", { src: appState.assetsApi.url + profileOwner?.image, alt: profileOwner?.name, className: 'tw-w-full tw-h-full tw-object-cover' }) }) }) }) })), jsxRuntime.jsxs("div", { className: 'tw-text-sm tw-flex-grow', children: [jsxRuntime.jsx("p", { className: 'tw-font-semibold', children: profileOwner?.name }), item.contact && (jsxRuntime.jsx("p", { children: jsxRuntime.jsxs("a", { href: `mailto:${item.contact}`, className: 'tw-mt-2 tw-text-green-500 tw-inline-flex tw-items-center', children: [jsxRuntime.
|
4735
|
+
return (jsxRuntime.jsxs("div", { className: 'tw-bg-base-200 tw-mb-6 tw-mt-6 tw-p-6', children: [jsxRuntime.jsx("h2", { className: 'tw-text-lg tw-font-semibold', children: heading }), jsxRuntime.jsxs("div", { className: 'tw-mt-4 tw-flex tw-items-center', children: [profileOwner?.image && (jsxRuntime.jsx(ConditionalLink, { url: '/item/' + profileOwner?.id, children: jsxRuntime.jsx("div", { className: 'tw-mr-5 tw-flex tw-items-center tw-justify-center', children: jsxRuntime.jsx("div", { className: 'tw-avatar', children: jsxRuntime.jsx("div", { className: 'tw-w-20 tw-h-20 tw-bg-gray-200 rounded-full tw-flex tw-items-center tw-justify-center overflow-hidden', children: jsxRuntime.jsx("img", { src: appState.assetsApi.url + profileOwner?.image, alt: profileOwner?.name, className: 'tw-w-full tw-h-full tw-object-cover' }) }) }) }) })), jsxRuntime.jsxs("div", { className: 'tw-text-sm tw-flex-grow', children: [jsxRuntime.jsx("p", { className: 'tw-font-semibold', children: profileOwner?.name }), item.contact && (jsxRuntime.jsx("p", { children: jsxRuntime.jsxs("a", { href: `mailto:${item.contact}`, className: 'tw-mt-2 tw-text-green-500 tw-inline-flex tw-items-center', children: [jsxRuntime.jsx(ForwardRef$4, { className: 'tw-w-4 tw-h-4 tw-mr-1' }), item.contact] }) })), item.telephone && (jsxRuntime.jsx("p", { children: jsxRuntime.jsxs("a", { href: `tel:${item.telephone}`, className: 'tw-mt-2 tw-text-green-500 tw-inline-flex tw-items-center tw-whitespace-nowrap', children: [jsxRuntime.jsx(ForwardRef$3, { className: 'tw-w-4 tw-h-4 tw-mr-1' }), item.telephone] }) }))] })] })] }));
|
4407
4736
|
};
|
4408
4737
|
// eslint-disable-next-line react/prop-types
|
4409
4738
|
const ConditionalLink = ({ url, children }) => {
|
@@ -4421,7 +4750,7 @@ var css_248z$1 = ".react-photo-album{display:flex}.react-photo-album,.react-phot
|
|
4421
4750
|
styleInject(css_248z$1);
|
4422
4751
|
|
4423
4752
|
const GalleryView = ({ item }) => {
|
4424
|
-
const [index, setIndex] =
|
4753
|
+
const [index, setIndex] = React.useState(-1);
|
4425
4754
|
const appState = useAppState();
|
4426
4755
|
const images = item.gallery?.map((i, j) => {
|
4427
4756
|
return {
|
@@ -4436,35 +4765,51 @@ const GalleryView = ({ item }) => {
|
|
4436
4765
|
return (jsxRuntime.jsxs("div", { className: 'tw-mx-6 tw-mb-6', children: [jsxRuntime.jsx(reactPhotoAlbum.RowsPhotoAlbum, { photos: images, targetRowHeight: 150, onClick: ({ index: current }) => setIndex(current) }), jsxRuntime.jsx(ReactLightbox, { index: index, slides: images, open: index >= 0, close: () => setIndex(-1) })] }));
|
4437
4766
|
};
|
4438
4767
|
|
4768
|
+
var ChevronSVG = 'data:image/svg+xml;base64,PHN2ZwogICAgICAgICAgICB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnCiAgICAgICAgICAgIHZpZXdCb3g9JzAgMCAyNCAyNCcKICAgICAgICAgICAgZmlsbD0nd2hpdGUnCiAgICAgICAgICAgIGNsYXNzTmFtZT0ndHctaC00IHR3LXctNCcKICAgICAgICAgID4KICAgICAgICAgICAgPHBhdGggZD0nTTIwIDRINGMtMS4xIDAtMS45OS45LTEuOTkgMkwyIDE4YzAgMS4xLjkgMiAyIDJoMTZjMS4xIDAgMi0uOSAyLTJWNmMwLTEuMS0uOS0yLTItMnptMCA0bC04IDUtOC01VjZsOCA1IDgtNXYyeicgLz4KICAgICAgICAgIDwvc3ZnPg==';
|
4769
|
+
|
4770
|
+
var ClipboardSVG = 'data:image/svg+xml;base64,PHN2ZyBzdHJva2U9ImN1cnJlbnRDb2xvciIgZmlsbD0id2hpdGUiIHN0cm9rZS13aWR0aD0iMCIgdmlld0JveD0iMCAwIDI1NiAyNTYiIGhlaWdodD0iMS41ZW0iIHdpZHRoPSIxLjVlbSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTgwLDY0SDQwQTEyLDEyLDAsMCwwLDI4LDc2VjIxNmExMiwxMiwwLDAsMCwxMiwxMkgxODBhMTIsMTIsMCwwLDAsMTItMTJWNzZBMTIsMTIsMCwwLDAsMTgwLDY0Wk0xNjgsMjA0SDUyVjg4SDE2OFpNMjI4LDQwVjE4MGExMiwxMiwwLDAsMS0yNCwwVjUySDc2YTEyLDEyLDAsMCwxLDAtMjRIMjE2QTEyLDEyLDAsMCwxLDIyOCw0MFoiPjwvcGF0aD48L3N2Zz4=';
|
4771
|
+
|
4772
|
+
var FacebookSVG = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nd2hpdGUnPgogICAgICAgIDxwYXRoIGQ9J00xOCAyaC0zYTUgNSAwIDAwLTUgNXYzSDd2NGgzdjhoNHYtOGgzbDEtNGgtNFY3YTEgMSAwIDAxMS0xaDN6JyAvPgogICAgICA8L3N2Zz4=';
|
4773
|
+
|
4774
|
+
var LinkedinSVG = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nd2hpdGUnPgogICAgICAgIDxwYXRoIGQ9J00xNiA4YTYgNiAwIDAxNiA2djdoLTR2LTdhMiAyIDAgMDAtMi0yIDIgMiAwIDAwLTIgMnY3aC00di03YTYgNiAwIDAxNi02ek0yIDloNHYxMkgyeicgLz4KICAgICAgICA8Y2lyY2xlIGN4PSc0JyBjeT0nNCcgcj0nMicgLz4KICAgICAgPC9zdmc+';
|
4775
|
+
|
4776
|
+
var TelegramSVG = 'data:image/svg+xml;base64,PHN2ZwogICAgICAgIHN0cm9rZT0nd2hpdGUnCiAgICAgICAgZmlsbD0nd2hpdGUnCiAgICAgICAgc3Ryb2tlV2lkdGg9JzAnCiAgICAgICAgdmlld0JveD0nMCAwIDQ0OCA1MTInCiAgICAgICAgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJwogICAgICA+CiAgICAgICAgPHBhdGggZD0nTTQ0Ni43IDk4LjZsLTY3LjYgMzE4LjhjLTUuMSAyMi41LTE4LjQgMjguMS0zNy4zIDE3LjVsLTEwMy03NS45LTQ5LjcgNDcuOGMtNS41IDUuNS0xMC4xIDEwLjEtMjAuNyAxMC4xbDcuNC0xMDQuOSAxOTAuOS0xNzIuNWM4LjMtNy40LTEuOC0xMS41LTEyLjktNC4xTDExNy44IDI4NCAxNi4yIDI1Mi4yYy0yMi4xLTYuOS0yMi41LTIyLjEgNC42LTMyLjdMNDE4LjIgNjYuNGMxOC40LTYuOSAzNC41IDQuMSAyOC41IDMyLjJ6Jz48L3BhdGg+CiAgICAgIDwvc3ZnPg==';
|
4777
|
+
|
4778
|
+
var TwitterSVG = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nd2hpdGUnPgogICAgICAgIDxwYXRoIGQ9J00yMyAzYTEwLjkgMTAuOSAwIDAxLTMuMTQgMS41MyA0LjQ4IDQuNDggMCAwMC03Ljg2IDN2MUExMC42NiAxMC42NiAwIDAxMyA0cy00IDkgNSAxM2ExMS42NCAxMS42NCAwIDAxLTcgMmM5IDUgMjAgMCAyMC0xMS41YTQuNSA0LjUgMCAwMC0uMDgtLjgzQTcuNzIgNy43MiAwIDAwMjMgM3onIC8+CiAgICAgIDwvc3ZnPg==';
|
4779
|
+
|
4780
|
+
var WhatsappSVG = 'data:image/svg+xml;base64,PHN2ZwogICAgICAgIHN0cm9rZT0nY3VycmVudENvbG9yJwogICAgICAgIGZpbGw9J3doaXRlJwogICAgICAgIHN0cm9rZVdpZHRoPScwJwogICAgICAgIHZpZXdCb3g9JzAgMCA1MTIgNTEyJwogICAgICAgIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycKICAgICAgPgogICAgICAgIDxwYXRoIGQ9J000OTcuMzkgMzYxLjhsLTExMi00OGEyNCAyNCAwIDAgMC0yOCA2LjlsLTQ5LjYgNjAuNkEzNzAuNjYgMzcwLjY2IDAgMCAxIDEzMC42IDIwNC4xMWw2MC42LTQ5LjZhMjMuOTQgMjMuOTQgMCAwIDAgNi45LTI4bC00OC0xMTJBMjQuMTYgMjQuMTYgMCAwIDAgMTIyLjYuNjFsLTEwNCAyNEEyNCAyNCAwIDAgMCAwIDQ4YzAgMjU2LjUgMjA3LjkgNDY0IDQ2NCA0NjRhMjQgMjQgMCAwIDAgMjMuNC0xOC42bDI0LTEwNGEyNC4yOSAyNC4yOSAwIDAgMC0xNC4wMS0yNy42eic+PC9wYXRoPgogICAgICA8L3N2Zz4=';
|
4781
|
+
|
4782
|
+
var XingSVG = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nd2hpdGUnPgogICAgICAgIDxwYXRoIGQ9J00xOC4xODggMGMtLjUxNyAwLS43NDEuMzI1LS45MjcuNjYgMCAwLTcuNDU1IDEzLjIyNC03LjcwMiAxMy42NTcuMDE1LjAyNCA0LjkxOSA5LjAyMyA0LjkxOSA5LjAyMy4xNy4zMDguNDM2LjY2Ljk2Ny42NmgzLjQ1NGMuMjExIDAgLjM3NS0uMDc4LjQ2My0uMjIuMDg5LS4xNTEuMDg5LS4zNDYtLjAwOS0uNTM2bC00Ljg3OS04LjkxNmMtLjAwNC0uMDA2LS4wMDQtLjAxNiAwLS4wMjJMMjIuMTM5Ljc1NmMuMDk1LS4xOTEuMDk3LS4zODcuMDA2LS41MzVDMjIuMDU2LjA3OCAyMS44OTQgMCAyMS42ODYgMGgtMy40OTh6TTMuNjQ4IDQuNzRjLS4yMTEgMC0uMzg1LjA3NC0uNDczLjIxNi0uMDkuMTQ5LS4wNzguMzM5LjAyLjUzMWwyLjM0IDQuMDVjLjAwNC4wMS4wMDQuMDE2IDAgLjAyMUwxLjg2IDE2LjA1MWMtLjA5OS4xODgtLjA5My4zODEgMCAuNTI5LjA4NS4xNDIuMjM5LjIzNC40NS4yMzRoMy40NjFjLjUxOCAwIC43NjYtLjM0OC45NDUtLjY2N2wzLjczNC02LjYwOS0yLjM3OC00LjE1NWMtLjE3Mi0uMzE1LS40MzQtLjY1OS0uOTYyLS42NTlIMy42NDh2LjAxNnonIC8+CiAgICAgIDwvc3ZnPg==';
|
4783
|
+
|
4439
4784
|
const platformConfigs = {
|
4440
4785
|
facebook: {
|
4441
4786
|
shareUrl: 'https://www.facebook.com/sharer/sharer.php?u={url}',
|
4442
|
-
icon:
|
4787
|
+
icon: jsxRuntime.jsx("img", { src: FacebookSVG, alt: 'Facebook' }),
|
4443
4788
|
bgColor: '#3b5998',
|
4444
4789
|
},
|
4445
4790
|
twitter: {
|
4446
4791
|
shareUrl: 'https://twitter.com/intent/tweet?text={title}:%20{url}',
|
4447
|
-
icon:
|
4792
|
+
icon: jsxRuntime.jsx("img", { src: TwitterSVG, alt: 'Twitter' }),
|
4448
4793
|
bgColor: '#55acee',
|
4449
4794
|
},
|
4450
4795
|
linkedin: {
|
4451
4796
|
shareUrl: 'http://www.linkedin.com/shareArticle?mini=true&url={url}&title={title}',
|
4452
|
-
icon:
|
4797
|
+
icon: jsxRuntime.jsx("img", { src: LinkedinSVG, alt: 'Linkedin' }),
|
4453
4798
|
bgColor: '#4875b4',
|
4454
4799
|
},
|
4455
4800
|
xing: {
|
4456
4801
|
shareUrl: 'https://www.xing-share.com/app/user?op=share;sc_p=xing-share;url={url}',
|
4457
|
-
icon:
|
4802
|
+
icon: jsxRuntime.jsx("img", { src: XingSVG, alt: 'Xing' }),
|
4458
4803
|
bgColor: '#026466',
|
4459
4804
|
},
|
4460
4805
|
whatsapp: {
|
4461
4806
|
shareUrl: 'https://api.whatsapp.com/send?text={title}%20{url}',
|
4462
|
-
icon:
|
4807
|
+
icon: jsxRuntime.jsx("img", { src: WhatsappSVG, alt: 'Whatsapp' }),
|
4463
4808
|
bgColor: '#25D366',
|
4464
4809
|
},
|
4465
4810
|
telegram: {
|
4466
4811
|
shareUrl: 'https://t.me/share/url?url={url}&text={title}',
|
4467
|
-
icon:
|
4812
|
+
icon: jsxRuntime.jsx("img", { src: TelegramSVG, alt: 'Telegram' }),
|
4468
4813
|
bgColor: '#0088cc',
|
4469
4814
|
},
|
4470
4815
|
};
|
@@ -4481,7 +4826,7 @@ const SocialShareButton = ({ platform, url, title, }) => {
|
|
4481
4826
|
return (jsxRuntime.jsx("a", { href: finalShareUrl, target: '_blank', rel: 'noopener noreferrer', className: 'tw-w-8 tw-h-8 tw-mt-2 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-text-white', style: {
|
4482
4827
|
color: 'white',
|
4483
4828
|
backgroundColor: bgColor,
|
4484
|
-
}, title: `share link on ${platform}`, children:
|
4829
|
+
}, title: `share link on ${platform}`, children: React.cloneElement(icon, { className: 'tw-w-4 tw-h-4 tw-fill-current' }) }));
|
4485
4830
|
};
|
4486
4831
|
|
4487
4832
|
const SocialShareBar = ({ url, title, platforms = ['facebook', 'twitter', 'linkedin', 'xing', 'email'], }) => {
|
@@ -4500,10 +4845,10 @@ const SocialShareBar = ({ url, title, platforms = ['facebook', 'twitter', 'linke
|
|
4500
4845
|
return (jsxRuntime.jsxs("div", { className: 'tw-flex tw-place-content-end tw-justify-end tw-space-x-2 tw-grow tw-min-w-fit tw-pl-2', children: [platforms.map((platform) => (jsxRuntime.jsx(SocialShareButton, { platform: platform, url: url, title: title }, platform))), platforms.includes('email') && (jsxRuntime.jsx("a", { href: `mailto:?subject=${title}&body=${url}`, target: '_blank', rel: 'noopener noreferrer', className: 'tw-w-8 tw-h-8 tw-mt-2 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-text-white hover:tw-cursor-pointer', style: {
|
4501
4846
|
color: 'white',
|
4502
4847
|
backgroundColor: '#444',
|
4503
|
-
}, onClick: () => copyLink(), title: 'share link via email', children: jsxRuntime.jsx("
|
4848
|
+
}, onClick: () => copyLink(), title: 'share link via email', children: jsxRuntime.jsx("img", { src: ChevronSVG, alt: '\\/', className: 'tw-h-4 tw-w-4' }) })), platforms.includes('clipboard') && (jsxRuntime.jsx("div", { rel: 'noopener noreferrer', className: 'tw-w-8 tw-h-8 tw-mt-2 tw-rounded-full tw-flex tw-items-center tw-justify-center tw-text-white hover:tw-cursor-pointer', style: {
|
4504
4849
|
color: 'white',
|
4505
4850
|
backgroundColor: '#888',
|
4506
|
-
}, onClick: () => copyLink(), title: 'copy Link', children: jsxRuntime.jsx("
|
4851
|
+
}, onClick: () => copyLink(), title: 'copy Link', children: jsxRuntime.jsx("img", { src: ClipboardSVG, className: 'tw-w-5' }) }))] }));
|
4507
4852
|
};
|
4508
4853
|
|
4509
4854
|
const GroupSubHeaderView = ({ item, shareBaseUrl, platforms, }) => (jsxRuntime.jsxs("div", { className: 'tw-px-6', children: [jsxRuntime.jsxs("div", { className: 'tw-float-left tw-mt-2 tw-mb-4 tw-flex tw-items-center', children: [item.status && (jsxRuntime.jsx("div", { className: 'tw-mt-1.5', children: jsxRuntime.jsx("span", { className: 'tw-text-sm tw-text-current tw-bg-base-300 tw-rounded tw-py-0.5 tw-px-2 tw-inline-flex tw-items-center tw-mr-2', children: item.status }) })), item.group_type && (jsxRuntime.jsx("div", { className: 'tw-mt-1.5', children: jsxRuntime.jsx("span", { className: 'tw-text-sm tw-text-current tw-bg-base-300 tw-rounded tw-py-1 tw-px-2', children: item.group_type }) }))] }), jsxRuntime.jsx("div", { children: jsxRuntime.jsx(SocialShareBar, { url: shareBaseUrl && item.slug
|
@@ -4534,11 +4879,8 @@ const get = (value, path, defaultValue) => {
|
|
4534
4879
|
|
4535
4880
|
const ProfileTextView = ({ item, dataField = 'text', heading, hideWhenEmpty, }) => {
|
4536
4881
|
const text = get(item, dataField);
|
4537
|
-
|
4538
|
-
|
4539
|
-
console.log('123');
|
4540
|
-
}
|
4541
|
-
return (jsxRuntime.jsxs("div", { className: 'tw-my-10 tw-mt-2 tw-px-6', children: [!(text === '' && hideWhenEmpty) && (jsxRuntime.jsx("h2", { className: 'tw-text-lg tw-font-semibold', children: heading })), jsxRuntime.jsx("div", { className: 'tw-mt-2 tw-text-sm', children: jsxRuntime.jsx(TextView, { itemId: item.id, rawText: text }) })] }));
|
4882
|
+
const parsedText = typeof text !== 'string' ? '' : text;
|
4883
|
+
return (jsxRuntime.jsxs("div", { className: 'tw-my-10 tw-mt-2 tw-px-6', children: [!(text === '' && hideWhenEmpty) && (jsxRuntime.jsx("h2", { className: 'tw-text-lg tw-font-semibold', children: heading })), jsxRuntime.jsx("div", { className: 'tw-mt-2 tw-text-sm', children: jsxRuntime.jsx(TextView, { itemId: item.id, rawText: parsedText }) })] }));
|
4542
4884
|
};
|
4543
4885
|
|
4544
4886
|
const componentMap$1 = {
|
@@ -4568,10 +4910,35 @@ const SimpleView = ({ item }) => {
|
|
4568
4910
|
return (jsxRuntime.jsx("div", { className: 'tw-mt-8 tw-h-full tw-overflow-y-auto fade tw-px-6', children: jsxRuntime.jsx(TextView, { text: item.text, itemId: item.id }) }));
|
4569
4911
|
};
|
4570
4912
|
|
4913
|
+
function LinkIcon({
|
4914
|
+
title,
|
4915
|
+
titleId,
|
4916
|
+
...props
|
4917
|
+
}, svgRef) {
|
4918
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
4919
|
+
xmlns: "http://www.w3.org/2000/svg",
|
4920
|
+
fill: "none",
|
4921
|
+
viewBox: "0 0 24 24",
|
4922
|
+
strokeWidth: 1.5,
|
4923
|
+
stroke: "currentColor",
|
4924
|
+
"aria-hidden": "true",
|
4925
|
+
"data-slot": "icon",
|
4926
|
+
ref: svgRef,
|
4927
|
+
"aria-labelledby": titleId
|
4928
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
4929
|
+
id: titleId
|
4930
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
4931
|
+
strokeLinecap: "round",
|
4932
|
+
strokeLinejoin: "round",
|
4933
|
+
d: "M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244"
|
4934
|
+
}));
|
4935
|
+
}
|
4936
|
+
const ForwardRef$2 = /*#__PURE__*/ React__namespace.forwardRef(LinkIcon);
|
4937
|
+
|
4571
4938
|
function ActionButton({ item, triggerAddButton, triggerItemSelected, existingRelations, itemType, collection = 'items', customStyle, }) {
|
4572
4939
|
const hasUserPermission = useHasUserPermission();
|
4573
|
-
const [modalOpen, setModalOpen] =
|
4574
|
-
const [search, setSearch] =
|
4940
|
+
const [modalOpen, setModalOpen] = React.useState(false);
|
4941
|
+
const [search, setSearch] = React.useState('');
|
4575
4942
|
const getItemTags = useGetItemTags();
|
4576
4943
|
const items = useItems();
|
4577
4944
|
const filterdItems = items
|
@@ -4587,12 +4954,12 @@ function ActionButton({ item, triggerAddButton, triggerItemSelected, existingRel
|
|
4587
4954
|
}, style: {
|
4588
4955
|
backgroundColor,
|
4589
4956
|
color: '#fff',
|
4590
|
-
}, children: jsxRuntime.jsx(
|
4957
|
+
}, children: jsxRuntime.jsx(ForwardRef$2, { className: 'tw-h-5 tw-w-5 tw-stroke-[2.5]' }) })), triggerAddButton && (jsxRuntime.jsx("button", { tabIndex: 0, className: 'tw-z-500 tw-btn tw-btn-circle tw-shadow tw-mt-2', onClick: () => {
|
4591
4958
|
triggerAddButton();
|
4592
4959
|
}, style: {
|
4593
4960
|
backgroundColor,
|
4594
4961
|
color: '#fff',
|
4595
|
-
}, children: jsxRuntime.jsx(
|
4962
|
+
}, children: jsxRuntime.jsx(ForwardRef$5, { className: 'tw-w-5 tw-h-5 tw-stroke-[2.5]' }) }))] }), jsxRuntime.jsxs(DialogModal, { title: 'Select', isOpened: modalOpen, onClose: () => setModalOpen(false), className: 'tw-w-xl sm:tw-w-2xl tw-min-h-80 tw-bg-base-200', children: [jsxRuntime.jsx(TextInput, { defaultValue: '', placeholder: '\uD83D\uDD0D Search', containerStyle: 'lg:col-span-2 tw-m-4 ', updateFormValue: (val) => {
|
4596
4963
|
setSearch(val);
|
4597
4964
|
} }), jsxRuntime.jsx("div", { className: 'tw-grid tw-grid-cols-1 sm:tw-grid-cols-2', children: filterdItems
|
4598
4965
|
.filter((item) => {
|
@@ -4606,33 +4973,58 @@ function ActionButton({ item, triggerAddButton, triggerItemSelected, existingRel
|
|
4606
4973
|
}, children: jsxRuntime.jsx(HeaderView, { item: i, hideMenu: true }) }, i.id))) })] })] })) }));
|
4607
4974
|
}
|
4608
4975
|
|
4976
|
+
function LinkSlashIcon({
|
4977
|
+
title,
|
4978
|
+
titleId,
|
4979
|
+
...props
|
4980
|
+
}, svgRef) {
|
4981
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
4982
|
+
xmlns: "http://www.w3.org/2000/svg",
|
4983
|
+
fill: "none",
|
4984
|
+
viewBox: "0 0 24 24",
|
4985
|
+
strokeWidth: 1.5,
|
4986
|
+
stroke: "currentColor",
|
4987
|
+
"aria-hidden": "true",
|
4988
|
+
"data-slot": "icon",
|
4989
|
+
ref: svgRef,
|
4990
|
+
"aria-labelledby": titleId
|
4991
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
4992
|
+
id: titleId
|
4993
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
4994
|
+
strokeLinecap: "round",
|
4995
|
+
strokeLinejoin: "round",
|
4996
|
+
d: "M13.181 8.68a4.503 4.503 0 0 1 1.903 6.405m-9.768-2.782L3.56 14.06a4.5 4.5 0 0 0 6.364 6.365l3.129-3.129m5.614-5.615 1.757-1.757a4.5 4.5 0 0 0-6.364-6.365l-4.5 4.5c-.258.26-.479.541-.661.84m1.903 6.405a4.495 4.495 0 0 1-1.242-.88 4.483 4.483 0 0 1-1.062-1.683m6.587 2.345 5.907 5.907m-5.907-5.907L8.898 8.898M2.991 2.99 8.898 8.9"
|
4997
|
+
}));
|
4998
|
+
}
|
4999
|
+
const ForwardRef$1 = /*#__PURE__*/ React__namespace.forwardRef(LinkSlashIcon);
|
5000
|
+
|
4609
5001
|
function LinkedItemsHeaderView({ item, unlinkCallback, loading, unlinkPermission, }) {
|
4610
5002
|
const appState = useAppState();
|
4611
5003
|
const avatar = appState.assetsApi.url + item.image;
|
4612
5004
|
const title = item.name;
|
4613
5005
|
const subtitle = item.subname;
|
4614
|
-
|
4615
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("div", { className: 'tw-flex tw-flex-row', children: [jsxRuntime.jsx("div", { className: 'tw-grow tw-max-w-[calc(100%-60px)] }', children: jsxRuntime.jsxs("div", { className: 'flex items-center', children: [avatar && (jsxRuntime.jsx("img", { className: 'tw-w-10 tw-inline tw-rounded-full', src: avatar, alt: item.name + ' logo' })), jsxRuntime.jsxs("div", { className: `${avatar ? 'tw-ml-2' : ''} tw-overflow-hidden`, children: [jsxRuntime.jsx("div", { className: 'tw-text-xl tw-font-semibold tw-truncate', children: title }), subtitle && (jsxRuntime.jsx("div", { className: 'tw-text-xs tw-truncate tw-text-gray-500 ', children: subtitle }))] })] }) }), jsxRuntime.jsx("div", { className: 'tw-col-span-1', onClick: (e) => e.stopPropagation(), children: unlinkPermission && (jsxRuntime.jsxs("div", { className: 'tw-dropdown tw-dropdown-bottom', children: [jsxRuntime.jsx("label", { tabIndex: 0, className: ' tw-btn tw-m-1 tw-leading-3 tw-border-none tw-min-h-0 tw-h-6', children: jsxRuntime.jsx(
|
5006
|
+
React.useEffect(() => { }, [item]);
|
5007
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsxs("div", { className: 'tw-flex tw-flex-row', children: [jsxRuntime.jsx("div", { className: 'tw-grow tw-max-w-[calc(100%-60px)] }', children: jsxRuntime.jsxs("div", { className: 'flex items-center', children: [avatar && (jsxRuntime.jsx("img", { className: 'tw-w-10 tw-inline tw-rounded-full', src: avatar, alt: item.name + ' logo' })), jsxRuntime.jsxs("div", { className: `${avatar ? 'tw-ml-2' : ''} tw-overflow-hidden`, children: [jsxRuntime.jsx("div", { className: 'tw-text-xl tw-font-semibold tw-truncate', children: title }), subtitle && (jsxRuntime.jsx("div", { className: 'tw-text-xs tw-truncate tw-text-gray-500 ', children: subtitle }))] })] }) }), jsxRuntime.jsx("div", { className: 'tw-col-span-1', onClick: (e) => e.stopPropagation(), children: unlinkPermission && (jsxRuntime.jsxs("div", { className: 'tw-dropdown tw-dropdown-bottom', children: [jsxRuntime.jsx("label", { tabIndex: 0, className: ' tw-btn tw-m-1 tw-leading-3 tw-border-none tw-min-h-0 tw-h-6', children: jsxRuntime.jsx(ForwardRef$9, { className: 'tw-h-5 tw-w-5' }) }), jsxRuntime.jsx("ul", { tabIndex: 0, className: 'tw-dropdown-content tw-menu tw-p-2 tw-shadow tw-bg-base-100 tw-rounded-box tw-z-1000', children: (jsxRuntime.jsx("li", { children: jsxRuntime.jsx("a", { className: 'tw-cursor-pointer !tw-text-error', onClick: () => unlinkCallback(item.id), children: loading ? (jsxRuntime.jsx("span", { className: 'tw-loading tw-loading-spinner tw-loading-sm' })) : (jsxRuntime.jsx(ForwardRef$1, { className: 'tw-h-5 tw-w-5 tw-stroke-[3]' })) }) })) })] })) })] }) }));
|
4616
5008
|
}
|
4617
5009
|
|
4618
5010
|
const TabsView = ({ attestations, item, offers, needs, relations, updatePermission, loading, linkItem, unlinkItem, }) => {
|
4619
5011
|
const addFilterTag = useAddFilterTag();
|
4620
|
-
const [activeTab, setActiveTab] =
|
5012
|
+
const [activeTab, setActiveTab] = React.useState();
|
4621
5013
|
const navigate = reactRouterDom.useNavigate();
|
4622
|
-
const [addItemPopupType] =
|
5014
|
+
const [addItemPopupType] = React.useState('');
|
4623
5015
|
const items = useItems();
|
4624
5016
|
const appState = useAppState();
|
4625
5017
|
const getUserProfile = (id) => {
|
4626
5018
|
return items.find((i) => i.user_created?.id === id && i.layer?.itemType.name === appState.userType);
|
4627
5019
|
};
|
4628
|
-
|
5020
|
+
React.useEffect(() => {
|
4629
5021
|
scroll();
|
4630
5022
|
}, [addItemPopupType]);
|
4631
5023
|
function scroll() {
|
4632
5024
|
tabRef.current?.scrollIntoView();
|
4633
5025
|
}
|
4634
|
-
const tabRef =
|
4635
|
-
const updateActiveTab =
|
5026
|
+
const tabRef = React.useRef(null);
|
5027
|
+
const updateActiveTab = React.useCallback((id) => {
|
4636
5028
|
setActiveTab(id);
|
4637
5029
|
const params = new URLSearchParams(window.location.search);
|
4638
5030
|
params.set('tab', `${id}`);
|
@@ -4641,7 +5033,7 @@ const TabsView = ({ attestations, item, offers, needs, relations, updatePermissi
|
|
4641
5033
|
},
|
4642
5034
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
4643
5035
|
[location.pathname]);
|
4644
|
-
|
5036
|
+
React.useEffect(() => {
|
4645
5037
|
const params = new URLSearchParams(location.search);
|
4646
5038
|
const urlTab = params.get('tab');
|
4647
5039
|
setActiveTab(urlTab ? Number(urlTab) : 1);
|
@@ -4661,13 +5053,13 @@ const TabsView = ({ attestations, item, offers, needs, relations, updatePermissi
|
|
4661
5053
|
* @category Profile
|
4662
5054
|
*/
|
4663
5055
|
function ProfileView({ attestationApi }) {
|
4664
|
-
const [item, setItem] =
|
4665
|
-
const [updatePermission, setUpdatePermission] =
|
4666
|
-
const [relations, setRelations] =
|
4667
|
-
const [offers, setOffers] =
|
4668
|
-
const [needs, setNeeds] =
|
4669
|
-
const [loading, setLoading] =
|
4670
|
-
const [template, setTemplate] =
|
5056
|
+
const [item, setItem] = React.useState();
|
5057
|
+
const [updatePermission, setUpdatePermission] = React.useState(false);
|
5058
|
+
const [relations, setRelations] = React.useState([]);
|
5059
|
+
const [offers, setOffers] = React.useState([]);
|
5060
|
+
const [needs, setNeeds] = React.useState([]);
|
5061
|
+
const [loading, setLoading] = React.useState(false);
|
5062
|
+
const [template, setTemplate] = React.useState('');
|
4671
5063
|
const location = reactRouterDom.useLocation();
|
4672
5064
|
const items = useItems();
|
4673
5065
|
const updateItem = useUpdateItem();
|
@@ -4681,8 +5073,8 @@ function ProfileView({ attestationApi }) {
|
|
4681
5073
|
const clusterRef = useClusterRef();
|
4682
5074
|
const leafletRefs = useLeafletRefs();
|
4683
5075
|
const appState = useAppState();
|
4684
|
-
const [attestations, setAttestations] =
|
4685
|
-
|
5076
|
+
const [attestations, setAttestations] = React.useState([]);
|
5077
|
+
React.useEffect(() => {
|
4686
5078
|
if (attestationApi) {
|
4687
5079
|
attestationApi
|
4688
5080
|
.getItems()
|
@@ -4699,12 +5091,12 @@ function ProfileView({ attestationApi }) {
|
|
4699
5091
|
});
|
4700
5092
|
}
|
4701
5093
|
}, [attestationApi]);
|
4702
|
-
|
5094
|
+
React.useEffect(() => {
|
4703
5095
|
const itemId = location.pathname.split('/')[2];
|
4704
5096
|
const item = items.find((i) => i.id === itemId);
|
4705
5097
|
item && setItem(item);
|
4706
5098
|
}, [items, location]);
|
4707
|
-
|
5099
|
+
React.useEffect(() => {
|
4708
5100
|
setOffers([]);
|
4709
5101
|
setNeeds([]);
|
4710
5102
|
setRelations([]);
|
@@ -4722,7 +5114,7 @@ function ProfileView({ attestationApi }) {
|
|
4722
5114
|
});
|
4723
5115
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
4724
5116
|
}, [item, items]);
|
4725
|
-
|
5117
|
+
React.useEffect(() => {
|
4726
5118
|
const setMap = (marker, x) => {
|
4727
5119
|
map.setView(new leaflet.LatLng(item?.position?.coordinates[1], item?.position?.coordinates[0] + x / 4), undefined);
|
4728
5120
|
setTimeout(() => {
|
@@ -4763,15 +5155,15 @@ function ProfileView({ attestationApi }) {
|
|
4763
5155
|
return parent;
|
4764
5156
|
}
|
4765
5157
|
};
|
4766
|
-
|
5158
|
+
React.useEffect(() => {
|
4767
5159
|
item && hasUserPermission('items', 'update', item) && setUpdatePermission(true);
|
4768
5160
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
4769
5161
|
}, [item]);
|
4770
|
-
|
5162
|
+
React.useEffect(() => {
|
4771
5163
|
selectPosition && map.closePopup();
|
4772
5164
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
4773
5165
|
}, [selectPosition]);
|
4774
|
-
|
5166
|
+
React.useEffect(() => {
|
4775
5167
|
setTemplate(item?.layer?.itemType.template ?? appState.userType);
|
4776
5168
|
}, [appState.userType, item]);
|
4777
5169
|
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: item && (jsxRuntime.jsx(MapOverlayPage, { className: `!tw-p-0 tw-mx-4 tw-mt-4 tw-mb-4 md:tw-w-[calc(50%-32px)] tw-w-[calc(100%-32px)] tw-min-w-80 tw-max-w-3xl !tw-left-0 sm:!tw-left-auto tw-top-0 tw-bottom-0 tw-transition-opacity tw-duration-500 ${!selectPosition ? 'tw-opacity-100 tw-pointer-events-auto' : 'tw-opacity-0 tw-pointer-events-none'}`, children: jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: 'tw-px-6 tw-pt-6', children: jsxRuntime.jsx(HeaderView, { api: item.layer?.api, item: item, deleteCallback: (e) => handleDelete(e, item, setLoading, removeItem, map, navigate), editCallback: () => navigate('/edit-item/' + item.id), setPositionCallback: () => {
|
@@ -4781,14 +5173,41 @@ function ProfileView({ attestationApi }) {
|
|
4781
5173
|
}, big: true, truncateSubname: false }) }), template === 'onepager' && jsxRuntime.jsx(OnepagerView, { item: item }), template === 'simple' && jsxRuntime.jsx(SimpleView, { item: item }), template === 'flex' && jsxRuntime.jsx(FlexView, { item: item }), template === 'tabs' && (jsxRuntime.jsx(TabsView, { attestations: attestations, item: item, loading: loading, offers: offers, needs: needs, relations: relations, updatePermission: updatePermission, linkItem: (id) => linkItem(id, item, updateItem), unlinkItem: (id) => unlinkItem(id, item, updateItem) }))] }) }, item.id)) }));
|
4782
5174
|
}
|
4783
5175
|
|
5176
|
+
function ArrowUpTrayIcon({
|
5177
|
+
title,
|
5178
|
+
titleId,
|
5179
|
+
...props
|
5180
|
+
}, svgRef) {
|
5181
|
+
return /*#__PURE__*/React__namespace.createElement("svg", Object.assign({
|
5182
|
+
xmlns: "http://www.w3.org/2000/svg",
|
5183
|
+
fill: "none",
|
5184
|
+
viewBox: "0 0 24 24",
|
5185
|
+
strokeWidth: 1.5,
|
5186
|
+
stroke: "currentColor",
|
5187
|
+
"aria-hidden": "true",
|
5188
|
+
"data-slot": "icon",
|
5189
|
+
ref: svgRef,
|
5190
|
+
"aria-labelledby": titleId
|
5191
|
+
}, props), title ? /*#__PURE__*/React__namespace.createElement("title", {
|
5192
|
+
id: titleId
|
5193
|
+
}, title) : null, /*#__PURE__*/React__namespace.createElement("path", {
|
5194
|
+
strokeLinecap: "round",
|
5195
|
+
strokeLinejoin: "round",
|
5196
|
+
d: "M3 16.5v2.25A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75V16.5m-13.5-9L12 3m0 0 4.5 4.5M12 3v13.5"
|
5197
|
+
}));
|
5198
|
+
}
|
5199
|
+
const ForwardRef = /*#__PURE__*/ React__namespace.forwardRef(ArrowUpTrayIcon);
|
5200
|
+
|
5201
|
+
var UserSVG = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMCIgdmlld0JveD0iMCAwIDE1MCAxNTAiIGNsYXNzPSJ0dy13LTIwIHR3LWgtMjAgdHctcm91bmRlZC1mdWxsIiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogcmdiKDIzOCwgMjM4LCAyMzgpOyI+PHBhdGggZmlsbD0iI2NjYyIgZD0iTSAxMDQuNjg3MzEsNTYuNjg5MzUzIEMgMTAyLjE5NDM1LDgwLjY0MDQ5MyA5My4xMDQ5ODEsOTcuMjY4NzUgNzQuMzcyMTk2LDk3LjI2ODc1IDU1LjYzOTQwMiw5Ny4yNjg3NSA0Ni45ODg4MjMsODIuMzA4MDM0IDQ0LjA1NzAwNSw1Ny4yODk5NDEgNDEuNjIzMzE0LDM0LjkzODgzOCA1NS42Mzk0MDIsMTUuODAwMTUyIDc0LjM3MjE5NiwxNS44MDAxNTIgYyAxOC43MzI3ODUsMCAzMi40NTE5NDQsMTguNDkzOTcxIDMwLjMxNTExNCw0MC44ODkyMDEgeiI+PC9wYXRoPjxwYXRoIGZpbGw9IiNjY2MiIGQ9Ik0gOTIuNTY3NSA4OS42MDQ4IEMgOTAuNzk0ODQgOTMuNDc4OTMgODkuMzk4OTMgMTAyLjQ1MDQgOTQuODY0NzggMTA2LjkwMzkgQyAxMDMuOTM3NSAxMTQuMjk2MyAxMDYuNzA2NCAxMTYuNDcyMyAxMTguMzExNyAxMTguOTQ2MiBDIDE0NC4wNDMyIDEyNC40MzE0IDE0MS42NDkyIDEzOC4xNTQzIDE0Ni41MjQ0IDE0OS4yMjA2IEwgNC4yNjg0NDQgMTQ5LjEwMjMgQyA4LjQ3MjIyMyAxMzguNjUxOCA2LjUwNTc5OSAxMjQuNzgxMiAzMi40MDA1MSAxMTguMzg3IEMgNDEuODA5OTIgMTE2LjA2MzUgNDUuNjY1MTMgMTEzLjg4MjMgNTMuNTg2NTkgMTA3LjAxNTggQyA1OC41Mjc0NCAxMDIuNzMyOSA1Ny41MjU4MyA5My45OTI2NyA1Ni40MzA4NCA4OS4yNjkyNiBDIDUyLjQ5Mjc1IDg4LjgzMDExIDk0LjE3MzkgODguMTQwNTQgOTIuNTY3NSA4OS42MDQ4IHoiPjwvcGF0aD48L3N2Zz4=';
|
5202
|
+
|
4784
5203
|
const AvatarWidget = ({ avatar, setAvatar }) => {
|
4785
|
-
const [crop, setCrop] =
|
4786
|
-
const [image, setImage] =
|
4787
|
-
const [cropModalOpen, setCropModalOpen] =
|
4788
|
-
const [cropping, setCropping] =
|
5204
|
+
const [crop, setCrop] = React.useState();
|
5205
|
+
const [image, setImage] = React.useState('');
|
5206
|
+
const [cropModalOpen, setCropModalOpen] = React.useState(false);
|
5207
|
+
const [cropping, setCropping] = React.useState(false);
|
4789
5208
|
const appState = useAppState();
|
4790
|
-
const imgRef =
|
4791
|
-
const onImageChange =
|
5209
|
+
const imgRef = React.useRef(null);
|
5210
|
+
const onImageChange = React.useCallback((event) => {
|
4792
5211
|
const file = event.target.files && event.target.files[0];
|
4793
5212
|
if (file) {
|
4794
5213
|
const validFormats = ['image/jpeg', 'image/png'];
|
@@ -4809,7 +5228,7 @@ const AvatarWidget = ({ avatar, setAvatar }) => {
|
|
4809
5228
|
alert('No file selected or an error occurred while selecting the file.');
|
4810
5229
|
}
|
4811
5230
|
}, []);
|
4812
|
-
const onImageLoad =
|
5231
|
+
const onImageLoad = React.useCallback((e) => {
|
4813
5232
|
const { width, height } = e.currentTarget;
|
4814
5233
|
setCrop(centerAspectCrop(width, height, 1));
|
4815
5234
|
}, []);
|
@@ -4842,7 +5261,7 @@ const AvatarWidget = ({ avatar, setAvatar }) => {
|
|
4842
5261
|
await resizedImage.decode();
|
4843
5262
|
return resizedImage;
|
4844
5263
|
}
|
4845
|
-
const renderCrop =
|
5264
|
+
const renderCrop = React.useCallback(async () => {
|
4846
5265
|
const image = imgRef.current;
|
4847
5266
|
if (crop && image) {
|
4848
5267
|
const resizedImage = await resizeImage(image, 1024, 1024); // Bildgröße vor dem Zuschneiden reduzieren
|
@@ -4864,7 +5283,7 @@ const AvatarWidget = ({ avatar, setAvatar }) => {
|
|
4864
5283
|
}
|
4865
5284
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
4866
5285
|
}, [crop]);
|
4867
|
-
const resizeBlob =
|
5286
|
+
const resizeBlob = React.useCallback(async (blob) => {
|
4868
5287
|
const img = new Image();
|
4869
5288
|
img.src = URL.createObjectURL(blob);
|
4870
5289
|
await img.decode();
|
@@ -4875,7 +5294,7 @@ const AvatarWidget = ({ avatar, setAvatar }) => {
|
|
4875
5294
|
const asset = await appState.assetsApi.upload(resizedBlob, 'avatar');
|
4876
5295
|
setAvatar(asset.id);
|
4877
5296
|
}, [appState.assetsApi, setAvatar]);
|
4878
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!cropping ? (jsxRuntime.jsxs("label", { className: 'custom-file-upload', children: [jsxRuntime.jsx("input", { type: 'file', accept: 'image/*', className: 'tw-file-input tw-w-full tw-max-w-xs', onChange: onImageChange }), jsxRuntime.jsx("div", { className: 'button tw-btn tw-btn-lg tw-btn-circle tw-animate-none', children: jsxRuntime.jsx(
|
5297
|
+
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [!cropping ? (jsxRuntime.jsxs("label", { className: 'custom-file-upload', children: [jsxRuntime.jsx("input", { type: 'file', accept: 'image/*', className: 'tw-file-input tw-w-full tw-max-w-xs', onChange: onImageChange }), jsxRuntime.jsx("div", { className: 'button tw-btn tw-btn-lg tw-btn-circle tw-animate-none', children: jsxRuntime.jsx(ForwardRef, { className: 'tw-w-6 tw-h-6' }) }), avatar ? (jsxRuntime.jsx("div", { className: 'tw-h-20 tw-w-20', children: jsxRuntime.jsx("img", { src: appState.assetsApi.url + avatar, className: 'tw-h-20 tw-w-20 tw-rounded-full' }) })) : (jsxRuntime.jsx("div", { className: 'tw-h-20 tw-w-20', children: jsxRuntime.jsx("img", { src: UserSVG, className: 'tw-rounded-full' }) }))] })) : (jsxRuntime.jsx("div", { className: 'tw-w-20 tw-flex tw-items-center tw-justify-center', children: jsxRuntime.jsx("span", { className: 'tw-loading tw-loading-spinner' }) })), jsxRuntime.jsxs(DialogModal, { title: '', isOpened: cropModalOpen, onClose: () => {
|
4879
5298
|
setCropModalOpen(false);
|
4880
5299
|
setImage('');
|
4881
5300
|
}, closeOnClickOutside: false, children: [jsxRuntime.jsx(reactImageCrop.ReactCrop, { crop: crop, onChange: (c) => setCrop(c), aspect: 1, children: jsxRuntime.jsx("img", { src: image, ref: imgRef, onLoad: onImageLoad }) }), jsxRuntime.jsx("button", { className: 'tw-btn tw-btn-primary', onClick: () => {
|
@@ -4894,7 +5313,7 @@ styleInject(css_248z);
|
|
4894
5313
|
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
4895
5314
|
// Improved version of https://usehooks.com/useOnClickOutside/
|
4896
5315
|
const useClickOutside = (ref, handler) => {
|
4897
|
-
|
5316
|
+
React.useEffect(() => {
|
4898
5317
|
let startedInside = false;
|
4899
5318
|
let startedWhenMounted = false;
|
4900
5319
|
const listener = (event) => {
|
@@ -4923,12 +5342,12 @@ const useClickOutside = (ref, handler) => {
|
|
4923
5342
|
|
4924
5343
|
// eslint-disable-next-line react/prop-types
|
4925
5344
|
const ColorPicker = ({ color, onChange, className }) => {
|
4926
|
-
const popover =
|
4927
|
-
const [isOpen, toggle] =
|
4928
|
-
const close =
|
5345
|
+
const popover = React.useRef(null);
|
5346
|
+
const [isOpen, toggle] = React.useState(false);
|
5347
|
+
const close = React.useCallback(() => toggle(false), []);
|
4929
5348
|
useClickOutside(popover, close);
|
4930
|
-
const colorPickerRef =
|
4931
|
-
|
5349
|
+
const colorPickerRef = React.useRef(null);
|
5350
|
+
React.useEffect(() => {
|
4932
5351
|
// Füge dem Color-Picker explizit Event-Listener hinzu
|
4933
5352
|
const colorPickerElement = colorPickerRef.current;
|
4934
5353
|
if (colorPickerElement) {
|
@@ -4979,7 +5398,7 @@ const ComboBoxInput = ({ id, options, value, onValueChange }) => {
|
|
4979
5398
|
};
|
4980
5399
|
|
4981
5400
|
const GroupSubheaderForm = ({ state, setState, groupStates, groupTypes, }) => {
|
4982
|
-
|
5401
|
+
React.useEffect(() => {
|
4983
5402
|
if (groupTypes && groupStates) {
|
4984
5403
|
const groupType = groupTypes.find((gt) => gt.groupTypes_id.name === state.group_type);
|
4985
5404
|
const customImage = !groupTypes.some((gt) => gt.groupTypes_id.image === state.image || !state.image);
|
@@ -5015,16 +5434,18 @@ const ProfileStartEndForm = ({ item, setState, }) => {
|
|
5015
5434
|
})) }));
|
5016
5435
|
};
|
5017
5436
|
|
5437
|
+
var MarkdownSVG = 'data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJwogICAgICBhcmlhLWhpZGRlbj0ndHJ1ZScKICAgICAgaGVpZ2h0PScxNicKICAgICAgdmlld0JveD0nMCAwIDE2IDE2JwogICAgICB2ZXJzaW9uPScxLjEnCiAgICAgIHdpZHRoPScxNicKICAgICAgZGF0YS12aWV3LWNvbXBvbmVudD0ndHJ1ZScKICAgICAgY2xhc3NOYW1lPSdvY3RpY29uIG9jdGljb24tbWFya2Rvd24nCiAgICAgIGZpbGw9J3JnYigxNTYgMTYzIDE3NSknCj4KICA8cGF0aCBkPSdNMTQuODUgM2MuNjMgMCAxLjE1LjUyIDEuMTQgMS4xNXY3LjdjMCAuNjMtLjUxIDEuMTUtMS4xNSAxLjE1SDEuMTVDLjUyIDEzIDAgMTIuNDggMCAxMS44NFY0LjE1QzAgMy41Mi41MiAzIDEuMTUgM1pNOSAxMVY1SDdMNS41IDcgNCA1SDJ2NmgyVjhsMS41IDEuOTJMNyA4djNabTIuOTkuNUwxNC41IDhIMTNWNWgtMnYzSDkuNVonPjwvcGF0aD4KPC9zdmc+';
|
5438
|
+
|
5018
5439
|
const MarkdownHint = () => {
|
5019
|
-
const [expended, setExpended] =
|
5020
|
-
return (jsxRuntime.jsxs("div", { onClick: () => setExpended(true), title: 'Markdown is supported', className: 'flex tw-flex-row tw-text-gray-400 tw-cursor-pointer tw-items-center', children: [jsxRuntime.jsx("
|
5440
|
+
const [expended, setExpended] = React.useState(false);
|
5441
|
+
return (jsxRuntime.jsxs("div", { onClick: () => setExpended(true), title: 'Markdown is supported', className: 'flex tw-flex-row tw-text-gray-400 tw-cursor-pointer tw-items-center', children: [jsxRuntime.jsx("img", { src: MarkdownSVG, alt: 'Markdown', className: 'octicon octicon-markdown tw-gray-400' }), expended && (jsxRuntime.jsxs("a", { href: 'https://www.markdownguide.org/cheat-sheet/#basic-syntax', target: '_blank', rel: 'noreferrer', children: [jsxRuntime.jsx("span", { className: 'Button-label tw-ml-1', children: "Markdown is support" }), ' '] }))] }));
|
5021
5442
|
};
|
5022
5443
|
|
5023
5444
|
const ProfileTextForm = ({ state, setState,
|
5024
5445
|
// Is this really used?
|
5025
5446
|
dataField, heading, size, hideInputLabel, required, }) => {
|
5026
|
-
const [field, setField] =
|
5027
|
-
|
5447
|
+
const [field, setField] = React.useState(dataField || 'text');
|
5448
|
+
React.useEffect(() => {
|
5028
5449
|
if (!dataField) {
|
5029
5450
|
setField('text');
|
5030
5451
|
}
|
@@ -5069,15 +5490,15 @@ const SimpleForm = ({ state, setState }) => {
|
|
5069
5490
|
};
|
5070
5491
|
|
5071
5492
|
const Autocomplete = ({ inputProps, suggestions, onSelected, pushFilteredSuggestions, setFocus, }) => {
|
5072
|
-
const [filteredSuggestions, setFilteredSuggestions] =
|
5073
|
-
const [heighlightedSuggestion, setHeighlightedSuggestion] =
|
5074
|
-
|
5493
|
+
const [filteredSuggestions, setFilteredSuggestions] = React.useState([]);
|
5494
|
+
const [heighlightedSuggestion, setHeighlightedSuggestion] = React.useState(0);
|
5495
|
+
React.useEffect(() => {
|
5075
5496
|
pushFilteredSuggestions && setFilteredSuggestions(pushFilteredSuggestions);
|
5076
5497
|
}, [pushFilteredSuggestions]);
|
5077
|
-
|
5498
|
+
React.useEffect(() => {
|
5078
5499
|
setFocus && inputRef.current?.focus();
|
5079
5500
|
}, [setFocus]);
|
5080
|
-
const inputRef =
|
5501
|
+
const inputRef = React.useRef();
|
5081
5502
|
const getSuggestions = (value) => {
|
5082
5503
|
const inputValue = value.trim().toLowerCase();
|
5083
5504
|
const inputLength = inputValue.length;
|
@@ -5122,13 +5543,13 @@ const Autocomplete = ({ inputProps, suggestions, onSelected, pushFilteredSuggest
|
|
5122
5543
|
|
5123
5544
|
// eslint-disable-next-line react/prop-types
|
5124
5545
|
const TagsWidget = ({ placeholder, containerStyle, defaultTags, onUpdate }) => {
|
5125
|
-
const [input, setInput] =
|
5126
|
-
const [isKeyReleased, setIsKeyReleased] =
|
5546
|
+
const [input, setInput] = React.useState('');
|
5547
|
+
const [isKeyReleased, setIsKeyReleased] = React.useState(false);
|
5127
5548
|
const tags = useTags();
|
5128
|
-
const [pushFilteredSuggestions, setPushFilteredSuggestions] =
|
5129
|
-
const [focusInput, setFocusInput] =
|
5130
|
-
const [currentTags, setCurrentTags] =
|
5131
|
-
|
5549
|
+
const [pushFilteredSuggestions, setPushFilteredSuggestions] = React.useState([]);
|
5550
|
+
const [focusInput, setFocusInput] = React.useState(false);
|
5551
|
+
const [currentTags, setCurrentTags] = React.useState(defaultTags);
|
5552
|
+
React.useEffect(() => {
|
5132
5553
|
setCurrentTags(defaultTags);
|
5133
5554
|
}, [defaultTags]);
|
5134
5555
|
const onChange = (e) => {
|
@@ -5202,10 +5623,10 @@ const TagsWidget = ({ placeholder, containerStyle, defaultTags, onUpdate }) => {
|
|
5202
5623
|
};
|
5203
5624
|
|
5204
5625
|
const TabsForm = ({ item, state, setState, updatePermission, linkItem, unlinkItem, loading, setUrlParams, }) => {
|
5205
|
-
const [activeTab, setActiveTab] =
|
5626
|
+
const [activeTab, setActiveTab] = React.useState(1);
|
5206
5627
|
const navigate = reactRouterDom.useNavigate();
|
5207
5628
|
const updateItem = useUpdateItem();
|
5208
|
-
const updateActiveTab =
|
5629
|
+
const updateActiveTab = React.useCallback((id) => {
|
5209
5630
|
setActiveTab(id);
|
5210
5631
|
const params = new URLSearchParams(window.location.search);
|
5211
5632
|
params.set('tab', `${id}`);
|
@@ -5215,7 +5636,7 @@ const TabsForm = ({ item, state, setState, updatePermission, linkItem, unlinkIte
|
|
5215
5636
|
},
|
5216
5637
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
5217
5638
|
[location.pathname]);
|
5218
|
-
|
5639
|
+
React.useEffect(() => {
|
5219
5640
|
const params = new URLSearchParams(location.search);
|
5220
5641
|
const urlTab = params.get('tab');
|
5221
5642
|
setActiveTab(urlTab ? Number(urlTab) : 1);
|
@@ -5247,7 +5668,7 @@ const TabsForm = ({ item, state, setState, updatePermission, linkItem, unlinkIte
|
|
5247
5668
|
* @category Profile
|
5248
5669
|
*/
|
5249
5670
|
function ProfileForm() {
|
5250
|
-
const [state, setState] =
|
5671
|
+
const [state, setState] = React.useState({
|
5251
5672
|
color: '',
|
5252
5673
|
id: '',
|
5253
5674
|
group_type: 'wuerdekompass',
|
@@ -5266,9 +5687,9 @@ function ProfileForm() {
|
|
5266
5687
|
start: '',
|
5267
5688
|
end: '',
|
5268
5689
|
});
|
5269
|
-
const [updatePermission, setUpdatePermission] =
|
5270
|
-
const [loading, setLoading] =
|
5271
|
-
const [item, setItem] =
|
5690
|
+
const [updatePermission, setUpdatePermission] = React.useState(false);
|
5691
|
+
const [loading, setLoading] = React.useState(false);
|
5692
|
+
const [item, setItem] = React.useState({});
|
5272
5693
|
const { user } = useAuth();
|
5273
5694
|
const updateItem = useUpdateItem();
|
5274
5695
|
const addItem = useAddItem();
|
@@ -5281,11 +5702,11 @@ function ProfileForm() {
|
|
5281
5702
|
const getItemTags = useGetItemTags();
|
5282
5703
|
const items = useItems();
|
5283
5704
|
const appState = useAppState();
|
5284
|
-
const [urlParams, setUrlParams] =
|
5285
|
-
|
5705
|
+
const [urlParams, setUrlParams] = React.useState(new URLSearchParams(location.search));
|
5706
|
+
React.useEffect(() => {
|
5286
5707
|
item && hasUserPermission('items', 'update', item) && setUpdatePermission(true);
|
5287
5708
|
}, [hasUserPermission, item]);
|
5288
|
-
|
5709
|
+
React.useEffect(() => {
|
5289
5710
|
const itemId = location.pathname.split('/')[2];
|
5290
5711
|
const item = items.find((i) => i.id === itemId);
|
5291
5712
|
item && setItem(item);
|
@@ -5307,7 +5728,7 @@ function ProfileForm() {
|
|
5307
5728
|
}
|
5308
5729
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
5309
5730
|
}, [items]);
|
5310
|
-
|
5731
|
+
React.useEffect(() => {
|
5311
5732
|
const newColor = item.color ??
|
5312
5733
|
(getItemTags(item) && getItemTags(item)[0]?.color
|
5313
5734
|
? getItemTags(item)[0].color
|
@@ -5352,8 +5773,8 @@ function ProfileForm() {
|
|
5352
5773
|
});
|
5353
5774
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
5354
5775
|
}, [item, tags, items]);
|
5355
|
-
const [template, setTemplate] =
|
5356
|
-
|
5776
|
+
const [template, setTemplate] = React.useState('');
|
5777
|
+
React.useEffect(() => {
|
5357
5778
|
setTemplate(item.layer?.itemType.template ?? appState.userType);
|
5358
5779
|
}, [appState.userType, item]);
|
5359
5780
|
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: jsxRuntime.jsx(MapOverlayPage, { backdrop: true, className: 'tw-mx-4 tw-mt-4 tw-mb-4 tw-overflow-x-hidden tw-w-[calc(100%-32px)] md:tw-w-[calc(50%-32px)] tw-max-w-3xl !tw-left-auto tw-top-0 tw-bottom-0', children: jsxRuntime.jsx("form", { className: 'tw-h-full', onSubmit: (e) => {
|
@@ -5370,7 +5791,7 @@ function ProfileForm() {
|
|
5370
5791
|
* @category Gaming
|
5371
5792
|
*/
|
5372
5793
|
function Modal({ children, showOnStartup, }) {
|
5373
|
-
|
5794
|
+
React.useEffect(() => {
|
5374
5795
|
if (showOnStartup) {
|
5375
5796
|
window.my_modal_3.showModal();
|
5376
5797
|
}
|
@@ -5386,18 +5807,18 @@ function Quests() {
|
|
5386
5807
|
const questsOpen = useQuestsOpen();
|
5387
5808
|
const setQuestsOpen = useSetQuestOpen();
|
5388
5809
|
const { isAuthenticated, user } = useAuth();
|
5389
|
-
|
5810
|
+
React.useEffect(() => {
|
5390
5811
|
setQuestsOpen(false);
|
5391
5812
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
5392
5813
|
}, []);
|
5393
|
-
const [profile, setProfie] =
|
5814
|
+
const [profile, setProfie] = React.useState();
|
5394
5815
|
const items = useItems();
|
5395
|
-
|
5816
|
+
React.useEffect(() => {
|
5396
5817
|
setProfie(items.find((i) => i.user_created?.id === user?.id &&
|
5397
5818
|
i.layer?.userProfileLayer &&
|
5398
5819
|
i.user_created?.id != null));
|
5399
5820
|
}, [items, user]);
|
5400
|
-
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: questsOpen ? (jsxRuntime.jsx("div", { className: 'tw-card tw-w-48 tw-bg-base-100 tw-shadow-xl tw-absolute tw-bottom-4 tw-left-4 tw-z-[2000]', children: jsxRuntime.jsxs("div", { className: 'tw-card-body tw-p-4 tw-pt-0', children: [jsxRuntime.jsx("div", { className: 'tw-card-actions tw-justify-end', children: jsxRuntime.jsx("label", { className: 'tw-btn tw-btn-sm tw-btn-circle tw-btn-ghost tw-absolute tw-right-1 tw-top-1', onClick: () => setQuestsOpen(false), children: "\u2715" }) }), jsxRuntime.jsxs("h2", { className: 'tw-card-title tw-m-auto ', children: ["Level 1", jsxRuntime.jsx(
|
5821
|
+
return (jsxRuntime.jsx(jsxRuntime.Fragment, { children: questsOpen ? (jsxRuntime.jsx("div", { className: 'tw-card tw-w-48 tw-bg-base-100 tw-shadow-xl tw-absolute tw-bottom-4 tw-left-4 tw-z-[2000]', children: jsxRuntime.jsxs("div", { className: 'tw-card-body tw-p-4 tw-pt-0', children: [jsxRuntime.jsx("div", { className: 'tw-card-actions tw-justify-end', children: jsxRuntime.jsx("label", { className: 'tw-btn tw-btn-sm tw-btn-circle tw-btn-ghost tw-absolute tw-right-1 tw-top-1', onClick: () => setQuestsOpen(false), children: "\u2715" }) }), jsxRuntime.jsxs("h2", { className: 'tw-card-title tw-m-auto ', children: ["Level 1", jsxRuntime.jsx(QuestionMarkIcon, {})] }), jsxRuntime.jsxs("ul", { className: 'tw-flex-row', children: [jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("label", { className: 'tw-label tw-justify-normal tw-pt-1 tw-pb-0', children: [jsxRuntime.jsx("input", { type: 'checkbox', readOnly: true, className: 'tw-checkbox tw-checkbox-xs tw-checkbox-success', checked: isAuthenticated || false }), jsxRuntime.jsx("span", { className: 'tw-text-sm tw-label-text tw-mx-2', children: "Sign Up" })] }) }), jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("label", { className: 'tw-label tw-justify-normal tw-pt-1 tw-pb-0', children: [jsxRuntime.jsx("input", { type: 'checkbox', readOnly: true, className: 'tw-checkbox tw-checkbox-xs tw-checkbox-success', checked: !!profile?.text }), jsxRuntime.jsx("span", { className: 'tw-text-sm tw-label-text tw-mx-2', children: "Fill Profile" })] }) }), jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("label", { className: 'tw-label tw-justify-normal tw-pt-1 tw-pb-0', children: [jsxRuntime.jsx("input", { type: 'checkbox', readOnly: true, className: 'tw-checkbox tw-checkbox-xs tw-checkbox-success', checked: !!profile?.image }), jsxRuntime.jsx("span", { className: 'tw-text-sm tw-label-text tw-mx-2', children: "Upload Avatar" })] }) })] }), ' '] }) })) : ('') }));
|
5401
5822
|
}
|
5402
5823
|
|
5403
5824
|
exports.AppShell = AppShell;
|