storybook-addon-playroom 7.0.0 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,57 @@
1
+ import { createUrl } from 'playroom';
2
+ import reactElementToJSXString from 'react-element-to-jsx-string';
3
+ import { useGlobals } from 'storybook/preview-api';
4
+
5
+ // src/constants.ts
6
+ var PARAM_KEY = `playroom`;
7
+ var getOptions = ({
8
+ url = "http://localhost:9000",
9
+ code = "",
10
+ disable = false,
11
+ includeDecorators = false,
12
+ reactElementToJSXStringOptions = { sortProps: false }
13
+ } = {}) => ({
14
+ url,
15
+ code,
16
+ disable,
17
+ includeDecorators,
18
+ reactElementToJSXStringOptions
19
+ });
20
+ var getGlobals = (globals) => globals[PARAM_KEY];
21
+ var setGlobals = (updateGlobals, globals) => updateGlobals({ [PARAM_KEY]: globals });
22
+
23
+ // src/withGlobals.ts
24
+ var updateCodeUrl = ([globals, updateGlobals], codeUrl) => getGlobals(globals).codeUrl !== codeUrl && setGlobals(updateGlobals, { codeUrl });
25
+ var withGlobals = (StoryFn, context) => {
26
+ const globals = useGlobals();
27
+ const story = StoryFn();
28
+ const { parameters, undecoratedStoryFn, viewMode } = context;
29
+ if (viewMode !== "story") return story;
30
+ const {
31
+ url,
32
+ code,
33
+ disable,
34
+ includeDecorators,
35
+ reactElementToJSXStringOptions
36
+ } = getOptions(parameters[PARAM_KEY]);
37
+ if (disable) {
38
+ updateCodeUrl(globals, void 0);
39
+ return story;
40
+ }
41
+ const storyCode = includeDecorators ? story : undecoratedStoryFn(context);
42
+ const jsxString = code || reactElementToJSXString(storyCode, reactElementToJSXStringOptions);
43
+ const codeUrl = url && createUrl({ baseUrl: url, code: jsxString });
44
+ updateCodeUrl(globals, codeUrl);
45
+ return story;
46
+ };
47
+
48
+ // src/preview.ts
49
+ var preview = {
50
+ decorators: [withGlobals],
51
+ initialGlobals: {
52
+ [PARAM_KEY]: false
53
+ }
54
+ };
55
+ var preview_default = preview;
56
+
57
+ export { preview_default };
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
- declare const _default: {};
1
+ import * as storybook_internal_csf from 'storybook/internal/csf';
2
+
3
+ declare const _default: () => storybook_internal_csf.PreviewAddon<storybook_internal_csf.AddonTypes>;
2
4
 
3
5
  export { _default as default };
package/dist/index.js CHANGED
@@ -1,2 +1,6 @@
1
- var e={};export{e as default};//# sourceMappingURL=index.js.map
2
- //# sourceMappingURL=index.js.map
1
+ import { preview_default } from './chunk-RBM5CMSM.js';
2
+ import { definePreviewAddon } from 'storybook/internal/csf';
3
+
4
+ var index_default = () => definePreviewAddon(preview_default);
5
+
6
+ export { index_default as default };
package/dist/manager.js CHANGED
@@ -1,2 +1,38 @@
1
- import a,{memo}from'react';import {useGlobals,addons,types}from'storybook/manager-api';import {styled}from'storybook/theming';var o="storybook/playroom",e=`${o}/tab`,s="playroom";var f=styled.p({textAlign:"center"}),A=styled.iframe({border:"0 none",height:"100%",width:"100%"}),n=memo(({active:r})=>{let[l]=useGlobals(),{codeUrl:t}=l[s]??{};return r?t?a.createElement(A,{key:t,allowFullScreen:true,src:t,title:"Playroom"}):a.createElement(f,null,"Playroom has been disabled for this story."):null});addons.register(o,()=>{addons.add(e,{type:types.TAB,title:"Playroom",render:({active:r})=>a.createElement(n,{active:!!r})});});//# sourceMappingURL=manager.js.map
2
- //# sourceMappingURL=manager.js.map
1
+ import React, { memo } from 'react';
2
+ import { useGlobals, addons, types } from 'storybook/manager-api';
3
+ import { styled } from 'storybook/theming';
4
+
5
+ // src/manager.tsx
6
+
7
+ // src/constants.ts
8
+ var ADDON_ID = "storybook/playroom";
9
+ var TAB_ID = `${ADDON_ID}/tab`;
10
+ var PARAM_KEY = `playroom`;
11
+ var Message = styled.p({
12
+ textAlign: "center"
13
+ });
14
+ var Iframe = styled.iframe({
15
+ border: "0 none",
16
+ height: "100%",
17
+ width: "100%"
18
+ });
19
+ var Tab = memo(({ active }) => {
20
+ const [globals] = useGlobals();
21
+ const { codeUrl } = globals[PARAM_KEY] ?? {};
22
+ if (!active) {
23
+ return null;
24
+ }
25
+ if (!codeUrl) {
26
+ return /* @__PURE__ */ React.createElement(Message, null, "Playroom has been disabled for this story.");
27
+ }
28
+ return /* @__PURE__ */ React.createElement(Iframe, { key: codeUrl, allowFullScreen: true, src: codeUrl, title: "Playroom" });
29
+ });
30
+
31
+ // src/manager.tsx
32
+ addons.register(ADDON_ID, () => {
33
+ addons.add(TAB_ID, {
34
+ type: types.TAB,
35
+ title: "Playroom",
36
+ render: ({ active }) => /* @__PURE__ */ React.createElement(Tab, { active: !!active })
37
+ });
38
+ });
package/dist/preview.js CHANGED
@@ -1,3 +1 @@
1
- import {createUrl}from'playroom';import A from'react-element-to-jsx-string';import {useGlobals}from'storybook/preview-api';var r="playroom";var p=({url:o="http://localhost:9000",code:t="",disable:e=false,includeDecorators:s=false,reactElementToJSXStringOptions:n={sortProps:false}}={})=>({url:o,code:t,disable:e,includeDecorators:s,reactElementToJSXStringOptions:n}),c=o=>o[r],m=(o,t)=>o({[r]:t});var b=([o,t],e)=>c(o).codeUrl!==e&&m(t,{codeUrl:e}),d=(o,t)=>{let e=useGlobals(),{parameters:s,undecoratedStoryFn:n}=t,{url:a,code:y,disable:f,includeDecorators:u,reactElementToJSXStringOptions:S}=p(s[r]),l=o();if(f)return b(e,void 0),l;let G=u?l:n(t),R=y||A(G,S),g=a&&createUrl({baseUrl:a,code:R});return b(e,g),l};var O={decorators:[d],initialGlobals:{[r]:false}},w=O;
2
- export{w as default};//# sourceMappingURL=preview.js.map
3
- //# sourceMappingURL=preview.js.map
1
+ export { preview_default as default } from './chunk-RBM5CMSM.js';
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "storybook-addon-playroom",
3
- "version": "7.0.0",
3
+ "version": "8.0.0",
4
4
  "description": "Design with Playroom inside Storybook, using each story source as a starting point",
5
5
  "keywords": [
6
- "storybook-addons",
6
+ "storybook-addon",
7
7
  "design",
8
8
  "playroom",
9
9
  "react",
@@ -27,13 +27,11 @@
27
27
  "exports": {
28
28
  ".": {
29
29
  "types": "./dist/index.d.ts",
30
- "import": "./dist/index.js",
31
- "require": "./dist/index.cjs"
30
+ "default": "./dist/index.js"
32
31
  },
33
32
  "./preview": {
34
- "types": "./dist/index.d.ts",
35
- "import": "./dist/preview.js",
36
- "require": "./dist/preview.cjs"
33
+ "types": "./dist/preview.d.ts",
34
+ "default": "./dist/preview.js"
37
35
  },
38
36
  "./manager": "./dist/manager.js",
39
37
  "./package.json": "./package.json"
@@ -63,12 +61,12 @@
63
61
  "type-check": "tsc --noEmit"
64
62
  },
65
63
  "dependencies": {
66
- "playroom": "^0.44.0",
64
+ "playroom": "^1.0.0",
67
65
  "react-element-to-jsx-string": "^15.0.0"
68
66
  },
69
67
  "devDependencies": {
70
68
  "@skypack/package-check": "^0.2.0",
71
- "@storybook/react-vite": "^9.0.0",
69
+ "@storybook/react-vite": "^10.0.0",
72
70
  "@types/node": "^24.0.0",
73
71
  "@types/react": "^18.0.0",
74
72
  "@vitejs/plugin-react": "^5.0.0",
@@ -80,24 +78,22 @@
80
78
  "react": "^18.0.0",
81
79
  "react-dom": "^18.0.0",
82
80
  "rimraf": "^6.0.0",
83
- "storybook": "^9.0.0",
81
+ "storybook": "^10.0.0",
84
82
  "style-loader": "^4.0.0",
85
83
  "tsup": "^8.0.0",
86
84
  "typescript": "^5.3.0",
87
85
  "vite": "^7.0.0"
88
86
  },
89
87
  "peerDependencies": {
90
- "storybook": "^9.0.0"
88
+ "storybook": "^10.0.0"
91
89
  },
92
90
  "bundler": {
93
- "exportEntries": [
94
- "src/index.ts"
95
- ],
96
91
  "managerEntries": [
97
92
  "src/manager.tsx"
98
93
  ],
99
94
  "previewEntries": [
100
- "src/preview.ts"
95
+ "src/preview.ts",
96
+ "src/index.ts"
101
97
  ]
102
98
  },
103
99
  "storybook": {
package/dist/index.cjs DELETED
@@ -1,2 +0,0 @@
1
- 'use strict';var e={};module.exports=e;//# sourceMappingURL=index.cjs.map
2
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["index_default"],"mappings":"aACA,IAAOA,EAAQ","file":"index.cjs","sourcesContent":["// make it work with --isolatedModules\nexport default {}\n"]}
package/dist/index.d.cts DELETED
@@ -1,3 +0,0 @@
1
- declare const _default: {};
2
-
3
- export { _default as default };
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["index_default"],"mappings":"AACA,IAAOA,EAAQ","file":"index.js","sourcesContent":["// make it work with --isolatedModules\nexport default {}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/Tab.tsx","../src/manager.tsx"],"names":["ADDON_ID","TAB_ID","PARAM_KEY","Message","styled","Iframe","Tab","memo","active","globals","useGlobals","codeUrl","React","addons","types"],"mappings":"8HAAO,IAAMA,CAAAA,CAAW,oBAAA,CACXC,CAAAA,CAAS,GAAGD,CAAQ,CAAA,IAAA,CAAA,CACpBE,CAAAA,CAAY,UAAA,CCQzB,IAAMC,CAAAA,CAAUC,MAAAA,CAAO,CAAA,CAAE,CACvB,SAAA,CAAW,QACb,CAAC,CAAA,CAEKC,CAAAA,CAASD,OAAO,MAAA,CAAO,CAC3B,MAAA,CAAQ,QAAA,CACR,MAAA,CAAQ,MAAA,CACR,KAAA,CAAO,MACT,CAAC,CAAA,CAEYE,CAAAA,CAAMC,IAAAA,CAAe,CAAC,CAAE,MAAA,CAAAC,CAAO,CAAA,GAAM,CAChD,GAAM,CAACC,CAAO,CAAA,CAAIC,UAAAA,EAAW,CACvB,CAAE,OAAA,CAAAC,CAAQ,CAAA,CAAIF,CAAAA,CAAQP,CAAS,CAAA,EAAK,EAAC,CAE3C,OAAKM,EAIAG,CAAAA,CAIEC,CAAAA,CAAA,aAAA,CAACP,CAAAA,CAAA,CAAO,GAAA,CAAKM,CAAAA,CAAS,eAAA,CAAe,KAAC,GAAA,CAAKA,CAAAA,CAAS,KAAA,CAAM,UAAA,CAAW,CAAA,CAHnEC,CAAAA,CAAA,aAAA,CAACT,CAAAA,CAAA,KAAQ,4CAA0C,CAAA,CAJnD,IAQX,CAAC,CAAA,CC3BDU,MAAAA,CAAO,QAAA,CAASb,CAAAA,CAAU,IAAM,CAC9Ba,MAAAA,CAAO,GAAA,CAAIZ,CAAAA,CAAQ,CACjB,IAAA,CAAMa,KAAAA,CAAM,GAAA,CACZ,MAAO,UAAA,CACP,MAAA,CAAQ,CAAC,CAAE,MAAA,CAAAN,CAAO,CAAA,GAAMI,CAAAA,CAAA,cAACN,CAAAA,CAAA,CAAI,MAAA,CAAQ,CAAC,CAACE,CAAAA,CAAQ,CACjD,CAAC,EACH,CAAC,CAAA","file":"manager.js","sourcesContent":["export const ADDON_ID = 'storybook/playroom'\nexport const TAB_ID = `${ADDON_ID}/tab`\nexport const PARAM_KEY = `playroom`\n\nexport const EVENTS = {\n UPDATE: `${ADDON_ID}/update`,\n}\n","import React, { memo } from 'react'\nimport { useGlobals } from 'storybook/manager-api'\nimport { styled } from 'storybook/theming'\n\nimport { PARAM_KEY } from './constants'\n\ninterface TabProps {\n active: boolean\n}\n\nconst Message = styled.p({\n textAlign: 'center',\n})\n\nconst Iframe = styled.iframe({\n border: '0 none',\n height: '100%',\n width: '100%',\n})\n\nexport const Tab = memo<TabProps>(({ active }) => {\n const [globals] = useGlobals()\n const { codeUrl } = globals[PARAM_KEY] ?? {}\n\n if (!active) {\n return null\n }\n\n if (!codeUrl) {\n return <Message>Playroom has been disabled for this story.</Message>\n }\n\n return <Iframe key={codeUrl} allowFullScreen src={codeUrl} title=\"Playroom\" />\n})\n","import React from 'react'\nimport { addons, types } from 'storybook/manager-api'\n\nimport { ADDON_ID, PARAM_KEY, TAB_ID } from './constants'\nimport { Tab } from './Tab'\n\naddons.register(ADDON_ID, () => {\n addons.add(TAB_ID, {\n type: types.TAB,\n title: 'Playroom',\n render: ({ active }) => <Tab active={!!active} />,\n })\n})\n"]}
package/dist/preview.cjs DELETED
@@ -1,3 +0,0 @@
1
- 'use strict';var playroom=require('playroom'),A=require('react-element-to-jsx-string'),previewApi=require('storybook/preview-api');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var A__default=/*#__PURE__*/_interopDefault(A);var r="playroom";var p=({url:o="http://localhost:9000",code:t="",disable:e=false,includeDecorators:s=false,reactElementToJSXStringOptions:n={sortProps:false}}={})=>({url:o,code:t,disable:e,includeDecorators:s,reactElementToJSXStringOptions:n}),c=o=>o[r],m=(o,t)=>o({[r]:t});var b=([o,t],e)=>c(o).codeUrl!==e&&m(t,{codeUrl:e}),d=(o,t)=>{let e=previewApi.useGlobals(),{parameters:s,undecoratedStoryFn:n}=t,{url:a,code:y,disable:f,includeDecorators:u,reactElementToJSXStringOptions:S}=p(s[r]),l=o();if(f)return b(e,void 0),l;let G=u?l:n(t),R=y||A__default.default(G,S),g=a&&playroom.createUrl({baseUrl:a,code:R});return b(e,g),l};var O={decorators:[d],initialGlobals:{[r]:false}},w=O;
2
- module.exports=w;//# sourceMappingURL=preview.cjs.map
3
- //# sourceMappingURL=preview.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/utils.tsx","../src/withGlobals.ts","../src/preview.ts"],"names":["PARAM_KEY","getOptions","url","code","disable","includeDecorators","reactElementToJSXStringOptions","getGlobals","globals","setGlobals","updateGlobals","updateCodeUrl","codeUrl","withGlobals","StoryFn","context","useGlobals","parameters","undecoratedStoryFn","story","storyCode","jsxString","reactElementToJSXString","createUrl","preview","preview_default"],"mappings":"mPAAO,IAEMA,CAAAA,CAAY,WCiBlB,IAAMC,EAAa,CAAC,CACzB,IAAAC,CAAAA,CAAM,uBAAA,CACN,KAAAC,CAAAA,CAAO,EAAA,CACP,QAAAC,CAAAA,CAAU,KAAA,CACV,iBAAA,CAAAC,CAAAA,CAAoB,KAAA,CACpB,8BAAA,CAAAC,EAAiC,CAAE,SAAA,CAAW,KAAM,CACtD,CAAA,CAAa,EAAC,IAA0B,CACtC,IAAAJ,CAAAA,CACA,IAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,kBAAAC,CAAAA,CACA,8BAAA,CAAAC,CACF,CAAA,CAAA,CAEaC,CAAAA,CAAcC,GACzBA,CAAAA,CAAQR,CAAS,EAENS,CAAAA,CAAa,CAACC,EAA8BF,CAAAA,GACvDE,CAAAA,CAAc,CAAE,CAACV,CAAS,EAAGQ,CAAQ,CAAC,ECxBxC,IAAMG,CAAAA,CAAgB,CACpB,CAACH,CAAAA,CAASE,CAAa,CAAA,CACvBE,CAAAA,GAEAL,CAAAA,CAAWC,CAAO,CAAA,CAAE,OAAA,GAAYI,GAChCH,CAAAA,CAAWC,CAAAA,CAAe,CAAE,OAAA,CAAAE,CAAQ,CAAC,CAAA,CAE1BC,CAAAA,CAAc,CACzBC,CAAAA,CACAC,CAAAA,GACG,CACH,IAAMP,CAAAA,CAAUQ,uBAAW,CACrB,CAAE,WAAAC,CAAAA,CAAY,kBAAA,CAAAC,CAAmB,CAAA,CAAIH,CAAAA,CACrC,CACJ,GAAA,CAAAb,CAAAA,CACA,KAAAC,CAAAA,CACA,OAAA,CAAAC,EACA,iBAAA,CAAAC,CAAAA,CACA,+BAAAC,CACF,CAAA,CAAIL,EAAWgB,CAAAA,CAAWjB,CAAS,CAAC,CAAA,CAE9BmB,CAAAA,CAAQL,GAAQ,CAEtB,GAAIV,CAAAA,CACF,OAAAO,CAAAA,CAAcH,CAAAA,CAAS,MAAS,CAAA,CACzBW,CAAAA,CAGT,IAAMC,CAAAA,CAAYf,CAAAA,CACdc,EACCD,CAAAA,CAAmBH,CAAO,EACzBM,CAAAA,CACJlB,CAAAA,EAAQmB,mBAAwBF,CAAAA,CAAWd,CAA8B,EACrEM,CAAAA,CAAUV,CAAAA,EAAOqB,mBAAU,CAAE,OAAA,CAASrB,CAAAA,CAAK,IAAA,CAAMmB,CAAU,CAAC,EAElE,OAAAV,CAAAA,CAAcH,EAASI,CAAO,CAAA,CACvBO,CACT,CAAA,CC7CA,IAAMK,EAAwC,CAC5C,UAAA,CAAY,CAACX,CAAW,CAAA,CACxB,eAAgB,CACd,CAACb,CAAS,EAAG,KACf,CACF,CAAA,CAEOyB,CAAAA,CAAQD","file":"preview.cjs","sourcesContent":["export const ADDON_ID = 'storybook/playroom'\nexport const TAB_ID = `${ADDON_ID}/tab`\nexport const PARAM_KEY = `playroom`\n\nexport const EVENTS = {\n UPDATE: `${ADDON_ID}/update`,\n}\n","import { type useGlobals } from 'storybook/preview-api'\nimport { type Options as ReactElementToJSXStringOptions } from 'react-element-to-jsx-string'\n\nimport { PARAM_KEY } from './constants'\n\ntype Options = {\n url?: string\n code?: string\n disable?: boolean\n includeDecorators?: boolean\n reactElementToJSXStringOptions?: ReactElementToJSXStringOptions\n}\n\ntype Globals = {\n codeUrl?: string\n}\n\ntype UseGlobals = ReturnType<typeof useGlobals>\n\nexport const getOptions = ({\n url = 'http://localhost:9000',\n code = '',\n disable = false,\n includeDecorators = false,\n reactElementToJSXStringOptions = { sortProps: false },\n}: Options = {}): Required<Options> => ({\n url,\n code,\n disable,\n includeDecorators,\n reactElementToJSXStringOptions,\n})\n\nexport const getGlobals = (globals: UseGlobals[0]): Globals =>\n globals[PARAM_KEY]\n\nexport const setGlobals = (updateGlobals: UseGlobals[1], globals: Globals) =>\n updateGlobals({ [PARAM_KEY]: globals })\n","import { createUrl } from 'playroom'\nimport type { ReactElement } from 'react'\nimport reactElementToJSXString from 'react-element-to-jsx-string'\nimport type {\n Renderer,\n PartialStoryFn as StoryFunction,\n StoryContext,\n} from 'storybook/internal/types'\nimport { useGlobals } from 'storybook/preview-api'\n\nimport { PARAM_KEY } from './constants'\nimport { getGlobals, getOptions, setGlobals } from './utils'\n\nconst updateCodeUrl = (\n [globals, updateGlobals]: ReturnType<typeof useGlobals>,\n codeUrl: string | undefined,\n) =>\n getGlobals(globals).codeUrl !== codeUrl &&\n setGlobals(updateGlobals, { codeUrl })\n\nexport const withGlobals = (\n StoryFn: StoryFunction<Renderer>,\n context: StoryContext<Renderer>,\n) => {\n const globals = useGlobals()\n const { parameters, undecoratedStoryFn } = context\n const {\n url,\n code,\n disable,\n includeDecorators,\n reactElementToJSXStringOptions,\n } = getOptions(parameters[PARAM_KEY])\n\n const story = StoryFn() as ReactElement\n\n if (disable) {\n updateCodeUrl(globals, undefined)\n return story\n }\n\n const storyCode = includeDecorators\n ? story\n : (undecoratedStoryFn(context) as ReactElement)\n const jsxString =\n code || reactElementToJSXString(storyCode, reactElementToJSXStringOptions)\n const codeUrl = url && createUrl({ baseUrl: url, code: jsxString })\n\n updateCodeUrl(globals, codeUrl)\n return story\n}\n","import type { Renderer, ProjectAnnotations } from 'storybook/internal/types'\n\nimport { PARAM_KEY } from './constants'\nimport { withGlobals } from './withGlobals'\n\nconst preview: ProjectAnnotations<Renderer> = {\n decorators: [withGlobals],\n initialGlobals: {\n [PARAM_KEY]: false,\n },\n}\n\nexport default preview\n"]}
@@ -1,5 +0,0 @@
1
- import { ProjectAnnotations, Renderer } from 'storybook/internal/types';
2
-
3
- declare const preview: ProjectAnnotations<Renderer>;
4
-
5
- export { preview as default };
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/utils.tsx","../src/withGlobals.ts","../src/preview.ts"],"names":["PARAM_KEY","getOptions","url","code","disable","includeDecorators","reactElementToJSXStringOptions","getGlobals","globals","setGlobals","updateGlobals","updateCodeUrl","codeUrl","withGlobals","StoryFn","context","useGlobals","parameters","undecoratedStoryFn","story","storyCode","jsxString","reactElementToJSXString","createUrl","preview","preview_default"],"mappings":"2HAAO,IAEMA,CAAAA,CAAY,WCiBlB,IAAMC,EAAa,CAAC,CACzB,IAAAC,CAAAA,CAAM,uBAAA,CACN,KAAAC,CAAAA,CAAO,EAAA,CACP,QAAAC,CAAAA,CAAU,KAAA,CACV,iBAAA,CAAAC,CAAAA,CAAoB,KAAA,CACpB,8BAAA,CAAAC,EAAiC,CAAE,SAAA,CAAW,KAAM,CACtD,CAAA,CAAa,EAAC,IAA0B,CACtC,IAAAJ,CAAAA,CACA,IAAA,CAAAC,EACA,OAAA,CAAAC,CAAAA,CACA,kBAAAC,CAAAA,CACA,8BAAA,CAAAC,CACF,CAAA,CAAA,CAEaC,CAAAA,CAAcC,GACzBA,CAAAA,CAAQR,CAAS,EAENS,CAAAA,CAAa,CAACC,EAA8BF,CAAAA,GACvDE,CAAAA,CAAc,CAAE,CAACV,CAAS,EAAGQ,CAAQ,CAAC,ECxBxC,IAAMG,CAAAA,CAAgB,CACpB,CAACH,CAAAA,CAASE,CAAa,CAAA,CACvBE,CAAAA,GAEAL,CAAAA,CAAWC,CAAO,CAAA,CAAE,OAAA,GAAYI,GAChCH,CAAAA,CAAWC,CAAAA,CAAe,CAAE,OAAA,CAAAE,CAAQ,CAAC,CAAA,CAE1BC,CAAAA,CAAc,CACzBC,CAAAA,CACAC,CAAAA,GACG,CACH,IAAMP,CAAAA,CAAUQ,YAAW,CACrB,CAAE,WAAAC,CAAAA,CAAY,kBAAA,CAAAC,CAAmB,CAAA,CAAIH,CAAAA,CACrC,CACJ,GAAA,CAAAb,CAAAA,CACA,KAAAC,CAAAA,CACA,OAAA,CAAAC,EACA,iBAAA,CAAAC,CAAAA,CACA,+BAAAC,CACF,CAAA,CAAIL,EAAWgB,CAAAA,CAAWjB,CAAS,CAAC,CAAA,CAE9BmB,CAAAA,CAAQL,GAAQ,CAEtB,GAAIV,CAAAA,CACF,OAAAO,CAAAA,CAAcH,CAAAA,CAAS,MAAS,CAAA,CACzBW,CAAAA,CAGT,IAAMC,CAAAA,CAAYf,CAAAA,CACdc,EACCD,CAAAA,CAAmBH,CAAO,EACzBM,CAAAA,CACJlB,CAAAA,EAAQmB,EAAwBF,CAAAA,CAAWd,CAA8B,EACrEM,CAAAA,CAAUV,CAAAA,EAAOqB,UAAU,CAAE,OAAA,CAASrB,CAAAA,CAAK,IAAA,CAAMmB,CAAU,CAAC,EAElE,OAAAV,CAAAA,CAAcH,EAASI,CAAO,CAAA,CACvBO,CACT,CAAA,CC7CA,IAAMK,EAAwC,CAC5C,UAAA,CAAY,CAACX,CAAW,CAAA,CACxB,eAAgB,CACd,CAACb,CAAS,EAAG,KACf,CACF,CAAA,CAEOyB,CAAAA,CAAQD","file":"preview.js","sourcesContent":["export const ADDON_ID = 'storybook/playroom'\nexport const TAB_ID = `${ADDON_ID}/tab`\nexport const PARAM_KEY = `playroom`\n\nexport const EVENTS = {\n UPDATE: `${ADDON_ID}/update`,\n}\n","import { type useGlobals } from 'storybook/preview-api'\nimport { type Options as ReactElementToJSXStringOptions } from 'react-element-to-jsx-string'\n\nimport { PARAM_KEY } from './constants'\n\ntype Options = {\n url?: string\n code?: string\n disable?: boolean\n includeDecorators?: boolean\n reactElementToJSXStringOptions?: ReactElementToJSXStringOptions\n}\n\ntype Globals = {\n codeUrl?: string\n}\n\ntype UseGlobals = ReturnType<typeof useGlobals>\n\nexport const getOptions = ({\n url = 'http://localhost:9000',\n code = '',\n disable = false,\n includeDecorators = false,\n reactElementToJSXStringOptions = { sortProps: false },\n}: Options = {}): Required<Options> => ({\n url,\n code,\n disable,\n includeDecorators,\n reactElementToJSXStringOptions,\n})\n\nexport const getGlobals = (globals: UseGlobals[0]): Globals =>\n globals[PARAM_KEY]\n\nexport const setGlobals = (updateGlobals: UseGlobals[1], globals: Globals) =>\n updateGlobals({ [PARAM_KEY]: globals })\n","import { createUrl } from 'playroom'\nimport type { ReactElement } from 'react'\nimport reactElementToJSXString from 'react-element-to-jsx-string'\nimport type {\n Renderer,\n PartialStoryFn as StoryFunction,\n StoryContext,\n} from 'storybook/internal/types'\nimport { useGlobals } from 'storybook/preview-api'\n\nimport { PARAM_KEY } from './constants'\nimport { getGlobals, getOptions, setGlobals } from './utils'\n\nconst updateCodeUrl = (\n [globals, updateGlobals]: ReturnType<typeof useGlobals>,\n codeUrl: string | undefined,\n) =>\n getGlobals(globals).codeUrl !== codeUrl &&\n setGlobals(updateGlobals, { codeUrl })\n\nexport const withGlobals = (\n StoryFn: StoryFunction<Renderer>,\n context: StoryContext<Renderer>,\n) => {\n const globals = useGlobals()\n const { parameters, undecoratedStoryFn } = context\n const {\n url,\n code,\n disable,\n includeDecorators,\n reactElementToJSXStringOptions,\n } = getOptions(parameters[PARAM_KEY])\n\n const story = StoryFn() as ReactElement\n\n if (disable) {\n updateCodeUrl(globals, undefined)\n return story\n }\n\n const storyCode = includeDecorators\n ? story\n : (undecoratedStoryFn(context) as ReactElement)\n const jsxString =\n code || reactElementToJSXString(storyCode, reactElementToJSXStringOptions)\n const codeUrl = url && createUrl({ baseUrl: url, code: jsxString })\n\n updateCodeUrl(globals, codeUrl)\n return story\n}\n","import type { Renderer, ProjectAnnotations } from 'storybook/internal/types'\n\nimport { PARAM_KEY } from './constants'\nimport { withGlobals } from './withGlobals'\n\nconst preview: ProjectAnnotations<Renderer> = {\n decorators: [withGlobals],\n initialGlobals: {\n [PARAM_KEY]: false,\n },\n}\n\nexport default preview\n"]}