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.
Files changed (121) hide show
  1. package/README.md +117 -20
  2. package/bin/commands/build.mjs +1 -11
  3. package/bin/commands/deploy.mjs +7 -1
  4. package/bin/commands/dev.mjs +175 -12
  5. package/bin/commands/new.mjs +211 -0
  6. package/bin/commands/pull.mjs +1 -1
  7. package/bin/commands/push.mjs +36 -13
  8. package/bin/lib/patterns.mjs +25 -0
  9. package/bin/sunpeak.js +15 -232
  10. package/dist/chatgpt/index.cjs +1 -1
  11. package/dist/chatgpt/index.js +1 -1
  12. package/dist/index.cjs +1 -1
  13. package/dist/index.js +2 -2
  14. package/dist/mcp/entry.cjs +1 -1
  15. package/dist/mcp/entry.js +1 -1
  16. package/dist/mcp/favicon.d.ts +2 -0
  17. package/dist/mcp/index.cjs +3 -1
  18. package/dist/mcp/index.cjs.map +1 -1
  19. package/dist/mcp/index.d.ts +1 -0
  20. package/dist/mcp/index.js +3 -1
  21. package/dist/{server-BLKltt88.js → server-BI9Y531R.js} +31 -3
  22. package/dist/{server-BLKltt88.js.map → server-BI9Y531R.js.map} +1 -1
  23. package/dist/{server-D_oRdZjX.cjs → server-CcLDAGBE.cjs} +31 -3
  24. package/dist/{server-D_oRdZjX.cjs.map → server-CcLDAGBE.cjs.map} +1 -1
  25. package/dist/{simulator-url-B6DZi3vV.cjs → simulator-url-CYMOGoB1.cjs} +5 -5
  26. package/dist/{simulator-url-B6DZi3vV.cjs.map → simulator-url-CYMOGoB1.cjs.map} +1 -1
  27. package/dist/{simulator-url-izFV6mji.js → simulator-url-DG79-dU3.js} +4 -4
  28. package/dist/{simulator-url-izFV6mji.js.map → simulator-url-DG79-dU3.js.map} +1 -1
  29. package/package.json +1 -1
  30. package/template/.sunpeak/dev.tsx +4 -4
  31. package/template/README.md +25 -27
  32. package/template/_gitignore +4 -0
  33. package/template/dist/albums/albums.json +1 -1
  34. package/template/dist/carousel/carousel.json +1 -1
  35. package/template/dist/map/map.json +1 -1
  36. package/template/dist/review/review.json +1 -1
  37. package/template/index.html +0 -1
  38. package/template/node_modules/.vite/deps/_metadata.json +22 -22
  39. package/template/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  40. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Avatar.js +96 -0
  41. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Avatar.js.map +7 -0
  42. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Button.js +625 -0
  43. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Button.js.map +7 -0
  44. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Checkbox.js +33 -0
  45. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Checkbox.js.map +7 -0
  46. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Icon.js +1498 -0
  47. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Icon.js.map +7 -0
  48. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Input.js +13 -0
  49. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Input.js.map +7 -0
  50. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_SegmentedControl.js +103 -0
  51. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_SegmentedControl.js.map +7 -0
  52. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Select.js +3680 -0
  53. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Select.js.map +7 -0
  54. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Textarea.js +95 -0
  55. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_components_Textarea.js.map +7 -0
  56. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_theme.js +45 -0
  57. package/template/node_modules/.vite-mcp/deps_temp_992accd8/@openai_apps-sdk-ui_theme.js.map +7 -0
  58. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-2UDYPUBJ.js +15201 -0
  59. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-2UDYPUBJ.js.map +7 -0
  60. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-6QVG4F2X.js +93 -0
  61. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-6QVG4F2X.js.map +7 -0
  62. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-BUOVMFCD.js +1004 -0
  63. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-BUOVMFCD.js.map +7 -0
  64. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-CNYJBM5F.js +21 -0
  65. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-CNYJBM5F.js.map +7 -0
  66. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-EGRHWZRV.js +1 -0
  67. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-EGRHWZRV.js.map +7 -0
  68. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-ILHRZGIS.js +46 -0
  69. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-ILHRZGIS.js.map +7 -0
  70. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JAGHY6H6.js +231 -0
  71. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JAGHY6H6.js.map +7 -0
  72. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JGVISENQ.js +292 -0
  73. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-JGVISENQ.js.map +7 -0
  74. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-P5LK4A7U.js +112 -0
  75. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-P5LK4A7U.js.map +7 -0
  76. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-QPJAV452.js +13 -0
  77. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-QPJAV452.js.map +7 -0
  78. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-RYYR2YMB.js +111 -0
  79. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-RYYR2YMB.js.map +7 -0
  80. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-UM3ZGDFR.js +4480 -0
  81. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-UM3ZGDFR.js.map +7 -0
  82. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-XZTIOEPG.js +280 -0
  83. package/template/node_modules/.vite-mcp/deps_temp_992accd8/chunk-XZTIOEPG.js.map +7 -0
  84. package/template/node_modules/.vite-mcp/deps_temp_992accd8/clsx.js +10 -0
  85. package/template/node_modules/.vite-mcp/deps_temp_992accd8/clsx.js.map +7 -0
  86. package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-react.js +1712 -0
  87. package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-react.js.map +7 -0
  88. package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-wheel-gestures.js +589 -0
  89. package/template/node_modules/.vite-mcp/deps_temp_992accd8/embla-carousel-wheel-gestures.js.map +7 -0
  90. package/template/node_modules/.vite-mcp/deps_temp_992accd8/mapbox-gl.js +32835 -0
  91. package/template/node_modules/.vite-mcp/deps_temp_992accd8/mapbox-gl.js.map +7 -0
  92. package/template/node_modules/.vite-mcp/deps_temp_992accd8/package.json +3 -0
  93. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom.js +7 -0
  94. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom.js.map +7 -0
  95. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom_client.js +20217 -0
  96. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react-dom_client.js.map +7 -0
  97. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react.js +6 -0
  98. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react.js.map +7 -0
  99. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-dev-runtime.js +278 -0
  100. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-dev-runtime.js.map +7 -0
  101. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-runtime.js +7 -0
  102. package/template/node_modules/.vite-mcp/deps_temp_992accd8/react_jsx-runtime.js.map +7 -0
  103. package/template/node_modules/.vite-mcp/deps_temp_992accd8/tailwind-merge.js +3095 -0
  104. package/template/node_modules/.vite-mcp/deps_temp_992accd8/tailwind-merge.js.map +7 -0
  105. package/template/package.json +0 -1
  106. package/template/vitest.config.ts +1 -1
  107. package/bin/commands/mcp.mjs +0 -244
  108. package/template/public/favicon.ico +0 -0
  109. package/template/src/resources/albums/albums-show-simulation.json +0 -131
  110. package/template/src/resources/carousel/carousel-show-simulation.json +0 -68
  111. package/template/src/resources/map/map-show-simulation.json +0 -123
  112. package/template/src/resources/review/review-diff-simulation.json +0 -80
  113. package/template/src/resources/review/review-post-simulation.json +0 -56
  114. package/template/src/resources/review/review-purchase-simulation.json +0 -88
  115. /package/template/{src/test → tests}/setup.ts +0 -0
  116. /package/template/{dist → tests/simulations}/albums/albums-show-simulation.json +0 -0
  117. /package/template/{dist → tests/simulations}/carousel/carousel-show-simulation.json +0 -0
  118. /package/template/{dist → tests/simulations}/map/map-show-simulation.json +0 -0
  119. /package/template/{dist → tests/simulations}/review/review-diff-simulation.json +0 -0
  120. /package/template/{dist → tests/simulations}/review/review-post-simulation.json +0 -0
  121. /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
+ }