sunpeak 0.10.7 → 0.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +117 -20
- package/bin/commands/build.mjs +1 -11
- package/bin/commands/deploy.mjs +7 -1
- package/bin/commands/dev.mjs +175 -12
- package/bin/commands/new.mjs +211 -0
- package/bin/commands/pull.mjs +1 -1
- package/bin/commands/push.mjs +36 -13
- package/bin/lib/patterns.mjs +25 -0
- package/bin/sunpeak.js +15 -232
- package/dist/chatgpt/index.cjs +1 -1
- package/dist/chatgpt/index.js +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +2 -2
- package/dist/mcp/entry.cjs +1 -1
- package/dist/mcp/entry.js +1 -1
- package/dist/mcp/favicon.d.ts +2 -0
- package/dist/mcp/index.cjs +3 -1
- package/dist/mcp/index.cjs.map +1 -1
- package/dist/mcp/index.d.ts +1 -0
- package/dist/mcp/index.js +3 -1
- package/dist/{server-BLKltt88.js → server-BI9Y531R.js} +31 -3
- package/dist/{server-BLKltt88.js.map → server-BI9Y531R.js.map} +1 -1
- package/dist/{server-D_oRdZjX.cjs → server-CcLDAGBE.cjs} +31 -3
- package/dist/{server-D_oRdZjX.cjs.map → server-CcLDAGBE.cjs.map} +1 -1
- package/dist/{simulator-url-B6DZi3vV.cjs → simulator-url-CYMOGoB1.cjs} +5 -5
- package/dist/{simulator-url-B6DZi3vV.cjs.map → simulator-url-CYMOGoB1.cjs.map} +1 -1
- package/dist/{simulator-url-izFV6mji.js → simulator-url-DG79-dU3.js} +4 -4
- package/dist/{simulator-url-izFV6mji.js.map → simulator-url-DG79-dU3.js.map} +1 -1
- package/package.json +1 -1
- package/template/.sunpeak/dev.tsx +4 -4
- package/template/README.md +25 -27
- package/template/_gitignore +4 -0
- package/template/dist/albums/albums.json +1 -1
- package/template/dist/carousel/carousel.json +1 -1
- package/template/dist/map/map.json +1 -1
- package/template/dist/review/review.json +1 -1
- package/template/index.html +0 -1
- package/template/node_modules/.vite/deps/_metadata.json +22 -22
- package/template/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Avatar.js +96 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Avatar.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Button.js +625 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Button.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Checkbox.js +33 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Checkbox.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Icon.js +1498 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Icon.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Input.js +13 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Input.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_SegmentedControl.js +103 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_SegmentedControl.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Select.js +3680 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Select.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Textarea.js +95 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Textarea.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_theme.js +45 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_theme.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-2UDYPUBJ.js +15201 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-2UDYPUBJ.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-6QVG4F2X.js +93 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-6QVG4F2X.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-BUOVMFCD.js +1004 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-BUOVMFCD.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-CNYJBM5F.js +21 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-CNYJBM5F.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-EGRHWZRV.js +1 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-EGRHWZRV.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-ILHRZGIS.js +46 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-ILHRZGIS.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JAGHY6H6.js +231 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JAGHY6H6.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JGVISENQ.js +292 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JGVISENQ.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-P5LK4A7U.js +112 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-P5LK4A7U.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-QPJAV452.js +13 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-QPJAV452.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-RYYR2YMB.js +111 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-RYYR2YMB.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-UM3ZGDFR.js +4480 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-UM3ZGDFR.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-XZTIOEPG.js +280 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-XZTIOEPG.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/clsx.js +10 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/clsx.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-react.js +1712 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-react.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-wheel-gestures.js +589 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-wheel-gestures.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/mapbox-gl.js +32835 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/mapbox-gl.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/package.json +3 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom.js +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom_client.js +20217 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom_client.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react.js +6 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-dev-runtime.js +278 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-dev-runtime.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-runtime.js +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-runtime.js.map +7 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/tailwind-merge.js +3095 -0
- package/template/node_modules/.vite-mcp/deps_temp_992accd8/tailwind-merge.js.map +7 -0
- package/template/package.json +0 -1
- package/template/vitest.config.ts +1 -1
- package/bin/commands/mcp.mjs +0 -244
- package/template/public/favicon.ico +0 -0
- package/template/src/resources/albums/albums-show-simulation.json +0 -131
- package/template/src/resources/carousel/carousel-show-simulation.json +0 -68
- package/template/src/resources/map/map-show-simulation.json +0 -123
- package/template/src/resources/review/review-diff-simulation.json +0 -80
- package/template/src/resources/review/review-post-simulation.json +0 -56
- package/template/src/resources/review/review-purchase-simulation.json +0 -88
- /package/template/{src/test → tests}/setup.ts +0 -0
- /package/template/{dist → tests/simulations}/albums/albums-show-simulation.json +0 -0
- /package/template/{dist → tests/simulations}/carousel/carousel-show-simulation.json +0 -0
- /package/template/{dist → tests/simulations}/map/map-show-simulation.json +0 -0
- /package/template/{dist → tests/simulations}/review/review-diff-simulation.json +0 -0
- /package/template/{dist → tests/simulations}/review/review-post-simulation.json +0 -0
- /package/template/{dist → tests/simulations}/review/review-purchase-simulation.json +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/src/components/Textarea/Textarea.tsx"],
|
|
4
|
+
"sourcesContent": ["\"use client\"\n\nimport clsx from \"clsx\"\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\"\nimport { mergeRefs } from \"react-merge-refs\"\nimport { toCssVariables } from \"../../lib/helpers\"\nimport { type ControlSize, type Sizes, type Variants } from \"../../types\"\nimport s from \"./Textarea.module.css\"\n\nexport type TextareaProps = {\n /**\n * Visual style of the textarea\n * @default outline\n */\n variant?: Variants<\"outline\" | \"soft\">\n /**\n * Controls the size of the textarea\n *\n * | 3xs | 2xs | xs | sm | md | lg | xl | 2xl | 3xl |\n * | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- | ------- |\n * | `22px` | `24px` | `26px` | `28px` | `32px` | `36px` | `40px` | `44px` | `48px` |\n *\n * @default md\n */\n size?: ControlSize\n /**\n * Controls gutter on the edges of the textarea, defaults to value from `size`.\n *\n * | 2xs | xs | sm | md | lg | xl |\n * | ------ | ------ | ------ | ------ | ------ | ------ |\n * | `6px` | `8px` | `10px` | `12px` | `14px` | `16px` |\n */\n gutterSize?: Sizes<\"2xs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\">\n /**\n * Disables the textarea visually and from interactions\n * @default false\n */\n disabled?: boolean\n /**\n * Mark the textarea as invalid\n * @default false\n */\n invalid?: boolean\n /**\n * Allow autofill extensions to appear in the textarea\n * @default false\n */\n allowAutofillExtensions?: boolean\n /**\n * Select all contents of the textarea when mounted.\n * @default false\n */\n autoSelect?: boolean\n /** Callback invoked when the textarea is autofilled by the browser */\n onAutofill?: () => void\n /**\n * Default number of rows to display\n * @default 3\n */\n rows?: number\n /**\n * Automatically adjust the height of the textarea based on its contents.\n * @default false\n */\n autoResize?: boolean\n /**\n * Maximum number of rows that can be displayed when autoResize is enabled.\n * @default Math.max(rows, 10)\n */\n maxRows?: number\n /** Ref for the textarea */\n ref?: React.Ref<HTMLTextAreaElement | null>\n} & Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"disabled\" | \"size\">\n\nexport const Textarea = (props: TextareaProps) => {\n const textAreaRef = useRef<HTMLTextAreaElement | null>(null)\n const inputIdSuffix = useId()\n // Prevent 1Password from appearing: 1Password won't display if it thinks this field is for searching\n // Allow user to override this for connecting to labels.\n const onePasswordPreventionId = `search-ui-input-${inputIdSuffix}`\n const {\n id,\n name,\n variant = \"outline\",\n size = \"md\",\n gutterSize,\n className,\n autoComplete,\n disabled = false,\n readOnly = false,\n invalid = false,\n // Default to `true` when presence of `name`\n allowAutofillExtensions = !!name,\n onFocus,\n onBlur,\n onAnimationStart,\n onAutofill,\n autoSelect,\n rows = 3,\n maxRows,\n autoResize,\n ref,\n onChange,\n ...restProps\n } = props\n\n const [focused, setFocused] = useState<boolean>(false)\n const computedMaxRows = autoResize ? Math.max(maxRows ?? 10, rows) : rows\n\n useEffect(() => {\n if (autoSelect) {\n textAreaRef.current?.select()\n }\n }, [autoSelect])\n\n const handleAnimationStart = (evt: React.AnimationEvent<HTMLTextAreaElement>) => {\n onAnimationStart?.(evt)\n if (evt.animationName === \"native-autofill-in\") {\n onAutofill?.()\n }\n }\n\n const autosizeTextarea = useCallback(() => {\n if (!autoResize || !textAreaRef.current || computedMaxRows === undefined) return\n textAreaRef.current.style.height = \"0px\"\n const scrollHeight = textAreaRef.current.scrollHeight\n textAreaRef.current.style.height = scrollHeight + \"px\"\n }, [autoResize, computedMaxRows])\n\n // Resize if value changes outside of user input - e.g. form reset\n useEffect(() => {\n autosizeTextarea()\n }, [props.value, rows, autosizeTextarea])\n\n return (\n <div\n className={clsx(s.Container, className)}\n data-variant={variant}\n data-size={size}\n data-gutter-size={gutterSize}\n data-focused={focused}\n data-disabled={disabled ? \"\" : undefined}\n data-readonly={readOnly ? \"\" : undefined}\n data-invalid={invalid ? \"\" : undefined}\n style={toCssVariables({\n \"textarea-min-rows\": `${rows}`,\n \"textarea-max-rows\": `${computedMaxRows}`,\n })}\n >\n <textarea\n {...restProps}\n onChange={(evt) => {\n onChange?.(evt)\n autosizeTextarea()\n }}\n ref={mergeRefs([textAreaRef, ref])}\n id={id || (allowAutofillExtensions ? undefined : onePasswordPreventionId)}\n className={s.Textarea}\n name={name}\n readOnly={readOnly}\n disabled={disabled}\n rows={rows}\n onFocus={(evt) => {\n setFocused(true)\n onFocus?.(evt)\n }}\n onBlur={(evt) => {\n setFocused(false)\n onBlur?.(evt)\n }}\n onAnimationStart={handleAnimationStart}\n // Prevent LastPass and 1Password from appearing\n data-lpignore={allowAutofillExtensions ? undefined : true}\n data-1p-ignore={allowAutofillExtensions ? undefined : true}\n />\n </div>\n )\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;AAGA,mBAAgE;AAIhE,OAAO,OAAO;AAmEP,IAAM,WAAW,CAAC,UAAwB;AAC/C,QAAM,kBAAc,qBAAmC,IAAI;AAC3D,QAAM,oBAAgB,oBAAK;AAG3B,QAAM,0BAA0B,mBAAmB,aAAa;AAChE,QAAM;IACJ;IACA;IACA,UAAU;IACV,OAAO;IACP;IACA;IACA;IACA,WAAW;IACX,WAAW;IACX,UAAU;;IAEV,0BAA0B,CAAC,CAAC;IAC5B;IACA;IACA;IACA;IACA;IACA,OAAO;IACP;IACA;IACA;IACA;IACA,GAAG;EAAS,IACV;AAEJ,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAkB,KAAK;AACrD,QAAM,kBAAkB,aAAa,KAAK,IAAI,WAAW,IAAI,IAAI,IAAI;AAErE,8BAAU,MAAK;AA7GjB;AA8GI,QAAI,YAAY;AACd,wBAAY,YAAZ,mBAAqB;IACvB;EACF,GAAG,CAAC,UAAU,CAAC;AAEf,QAAM,uBAAuB,CAAC,QAAkD;AAC9E,yDAAmB;AACnB,QAAI,IAAI,kBAAkB,sBAAsB;AAC9C;IACF;EACF;AAEA,QAAM,uBAAmB,0BAAY,MAAK;AACxC,QAAI,CAAC,cAAc,CAAC,YAAY,WAAW,oBAAoB;AAAW;AAC1E,gBAAY,QAAQ,MAAM,SAAS;AACnC,UAAM,eAAe,YAAY,QAAQ;AACzC,gBAAY,QAAQ,MAAM,SAAS,eAAe;EACpD,GAAG,CAAC,YAAY,eAAe,CAAC;AAGhC,8BAAU,MAAK;AACb,qBAAgB;EAClB,GAAG,CAAC,MAAM,OAAO,MAAM,gBAAgB,CAAC;AAExC,aACE,mBAAAA,KAAA,OAAA,EACE,WAAW,aAAK,EAAE,WAAW,SAAS,GAAC,gBACzB,SAAO,aACV,MAAI,oBACG,YAAU,gBACd,SAAO,iBACN,WAAW,KAAK,QAAS,iBACzB,WAAW,KAAK,QAAS,gBAC1B,UAAU,KAAK,QAC7B,OAAO,eAAe;IACpB,qBAAqB,GAAG,IAAI;IAC5B,qBAAqB,GAAG,eAAe;GACxC,GAAC,cAEF,mBAAAA,KAAA,YAAA,EAAA,GACM,WACJ,UAAU,CAAC,QAAO;AAChB,yCAAW;AACX,qBAAgB;EAClB,GACA,KAAK,EAAU,CAAC,aAAa,GAAG,CAAC,GACjC,IAAI,OAAO,0BAA0B,SAAY,0BACjD,WAAW,EAAE,UACb,MACA,UACA,UACA,MACA,SAAS,CAAC,QAAO;AACf,eAAW,IAAI;AACf,uCAAU;EACZ,GACA,QAAQ,CAAC,QAAO;AACd,eAAW,KAAK;AAChB,qCAAS;EACX,GACA,kBAAkB,sBAAoB,iBAEvB,0BAA0B,SAAY,MAAI,kBACzC,0BAA0B,SAAY,KAAI,CAAA,EAC1D,CAAA;AAGR;",
|
|
6
|
+
"names": ["_jsx"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
require_react
|
|
3
|
+
} from "./chunk-BUOVMFCD.js";
|
|
4
|
+
import {
|
|
5
|
+
__toESM
|
|
6
|
+
} from "./chunk-ILHRZGIS.js";
|
|
7
|
+
|
|
8
|
+
// ../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/dist/es/lib/theme.js
|
|
9
|
+
var import_react = __toESM(require_react());
|
|
10
|
+
function useDocumentTheme() {
|
|
11
|
+
const [theme, setTheme] = (0, import_react.useState)(getDocumentTheme);
|
|
12
|
+
(0, import_react.useEffect)(() => {
|
|
13
|
+
const observer = new MutationObserver(() => {
|
|
14
|
+
setTheme(getDocumentTheme());
|
|
15
|
+
});
|
|
16
|
+
observer.observe(document.documentElement, {
|
|
17
|
+
attributes: true,
|
|
18
|
+
attributeFilter: ["data-theme", "class"],
|
|
19
|
+
characterData: false,
|
|
20
|
+
childList: false,
|
|
21
|
+
subtree: false
|
|
22
|
+
});
|
|
23
|
+
return () => observer.disconnect();
|
|
24
|
+
});
|
|
25
|
+
return theme;
|
|
26
|
+
}
|
|
27
|
+
function getDocumentTheme() {
|
|
28
|
+
const theme = document.documentElement.getAttribute("data-theme");
|
|
29
|
+
if (theme === "dark" || theme === "light") {
|
|
30
|
+
return theme;
|
|
31
|
+
}
|
|
32
|
+
const darkMode = document.documentElement.classList.contains("dark");
|
|
33
|
+
return darkMode ? "dark" : "light";
|
|
34
|
+
}
|
|
35
|
+
function applyDocumentTheme(theme) {
|
|
36
|
+
const htmlTag = document.documentElement;
|
|
37
|
+
htmlTag.setAttribute("data-theme", theme);
|
|
38
|
+
htmlTag.style.colorScheme = theme;
|
|
39
|
+
}
|
|
40
|
+
export {
|
|
41
|
+
applyDocumentTheme,
|
|
42
|
+
getDocumentTheme,
|
|
43
|
+
useDocumentTheme
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=@openai_apps-sdk-ui_theme.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../node_modules/.pnpm/@openai+apps-sdk-ui@0.2.1_@types+react-dom@19.2.3_@types+react@19.2.8__@types+react@19._10810175a7ab45acace17e46639bb69b/node_modules/@openai/apps-sdk-ui/src/lib/theme.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useEffect, useState } from \"react\"\n\nexport type DocumentTheme = \"light\" | \"dark\"\n\nexport function useDocumentTheme() {\n const [theme, setTheme] = useState<\"dark\" | \"light\">(getDocumentTheme)\n\n useEffect(() => {\n const observer = new MutationObserver(() => {\n setTheme(getDocumentTheme())\n })\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"data-theme\", \"class\"],\n characterData: false,\n childList: false,\n subtree: false,\n })\n\n return () => observer.disconnect()\n })\n\n return theme\n}\n\nexport function getDocumentTheme() {\n const theme = document.documentElement.getAttribute(\"data-theme\")\n\n if (theme === \"dark\" || theme === \"light\") {\n return theme\n }\n\n const darkMode = document.documentElement.classList.contains(\"dark\")\n\n return darkMode ? \"dark\" : \"light\"\n}\n\nexport function applyDocumentTheme(theme: \"light\" | \"dark\") {\n const htmlTag = document.documentElement\n htmlTag.setAttribute(\"data-theme\", theme)\n htmlTag.style.colorScheme = theme\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;AAAA,mBAAoC;AAI9B,SAAU,mBAAgB;AAC9B,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAA2B,gBAAgB;AAErE,8BAAU,MAAK;AACb,UAAM,WAAW,IAAI,iBAAiB,MAAK;AACzC,eAAS,iBAAgB,CAAE;IAC7B,CAAC;AAED,aAAS,QAAQ,SAAS,iBAAiB;MACzC,YAAY;MACZ,iBAAiB,CAAC,cAAc,OAAO;MACvC,eAAe;MACf,WAAW;MACX,SAAS;KACV;AAED,WAAO,MAAM,SAAS,WAAU;EAClC,CAAC;AAED,SAAO;AACT;AAEM,SAAU,mBAAgB;AAC9B,QAAM,QAAQ,SAAS,gBAAgB,aAAa,YAAY;AAEhE,MAAI,UAAU,UAAU,UAAU,SAAS;AACzC,WAAO;EACT;AAEA,QAAM,WAAW,SAAS,gBAAgB,UAAU,SAAS,MAAM;AAEnE,SAAO,WAAW,SAAS;AAC7B;AAEM,SAAU,mBAAmB,OAAuB;AACxD,QAAM,UAAU,SAAS;AACzB,UAAQ,aAAa,cAAc,KAAK;AACxC,UAAQ,MAAM,cAAc;AAC9B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|