@jbpark/live-editor 3.0.1 → 3.1.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.
Files changed (43) hide show
  1. package/README.ko.md +3 -2
  2. package/README.md +3 -2
  3. package/dist/{ast-D6R-dsk0.js → ast-CIe-mhh_.js} +416 -177
  4. package/dist/ast-CIe-mhh_.js.map +1 -0
  5. package/dist/{boundary-BF7iZp6e.js → boundary-BTP1nfG6.js} +2 -2
  6. package/dist/{boundary-BF7iZp6e.js.map → boundary-BTP1nfG6.js.map} +1 -1
  7. package/dist/{context-DH70wj9d.js → context-649REFsj.js} +2 -2
  8. package/dist/{context-DH70wj9d.js.map → context-649REFsj.js.map} +1 -1
  9. package/dist/core-D3q5rpuz.js +77 -0
  10. package/dist/core-D3q5rpuz.js.map +1 -0
  11. package/dist/dnd/index.d.ts +2 -2
  12. package/dist/dnd/index.js +2 -2
  13. package/dist/{dnd-CZJjzuTC.js → dnd-BnXoytb5.js} +385 -398
  14. package/dist/dnd-BnXoytb5.js.map +1 -0
  15. package/dist/editor/index.d.ts +1 -1
  16. package/dist/editor/index.js +2 -2
  17. package/dist/{editor-Ct9wuhLm.js → editor-DQSoTCe8.js} +2 -2
  18. package/dist/{editor-Ct9wuhLm.js.map → editor-DQSoTCe8.js.map} +1 -1
  19. package/dist/error/index.js +2 -2
  20. package/dist/{error-lsJey-it.js → error-CO0EbMlA.js} +2 -2
  21. package/dist/{error-lsJey-it.js.map → error-CO0EbMlA.js.map} +1 -1
  22. package/dist/{index-C4TBkJBG.d.ts → index-Ck3akHag.d.ts} +2 -2
  23. package/dist/{index-Bqc5kUAG.d.ts → index-DswWDEXZ.d.ts} +27 -3
  24. package/dist/{index-GuEiafMN.d.ts → index-DxbG789f.d.ts} +25 -2
  25. package/dist/index.d.ts +3 -3
  26. package/dist/index.js +5 -5
  27. package/dist/preview/index.js +1 -1
  28. package/dist/{preview-CNVXyDgY.js → preview-DFH-z_JL.js} +4 -4
  29. package/dist/{preview-CNVXyDgY.js.map → preview-DFH-z_JL.js.map} +1 -1
  30. package/dist/provider/index.js +1 -1
  31. package/dist/style.css +105 -123
  32. package/dist/{use-dynamic-tailwind-C0Onss1A.js → use-dynamic-tailwind-DqqQu2de.js} +2 -2
  33. package/dist/{use-dynamic-tailwind-C0Onss1A.js.map → use-dynamic-tailwind-DqqQu2de.js.map} +1 -1
  34. package/dist/utils/ast/index.d.ts +2 -2
  35. package/dist/utils/ast/index.js +2 -2
  36. package/dist/utils/index.js +1 -1
  37. package/dist/{utils-BwEgY5pe.js → utils-WyxPYZGh.js} +12 -10
  38. package/dist/{utils-BwEgY5pe.js.map → utils-WyxPYZGh.js.map} +1 -1
  39. package/package.json +2 -2
  40. package/dist/ast-D6R-dsk0.js.map +0 -1
  41. package/dist/core-CbuS_p_d.js +0 -123
  42. package/dist/core-CbuS_p_d.js.map +0 -1
  43. package/dist/dnd-CZJjzuTC.js.map +0 -1
@@ -12,6 +12,7 @@ interface DataAttrNode {
12
12
  dataAttributes: Attribute[];
13
13
  textContent: string;
14
14
  rawChildren?: string;
15
+ source?: string;
15
16
  loc?: {
16
17
  start: {
17
18
  line: number;
@@ -151,6 +152,28 @@ declare const bulkUpdate: (raw: string, entries: {
151
152
  property?: string;
152
153
  }[]) => UpdateResult;
153
154
  //#endregion
155
+ //#region src/utils/ast/children.d.ts
156
+ type ChildrenAction = {
157
+ type: 'move';
158
+ from: number;
159
+ to: number;
160
+ } | {
161
+ type: 'move-selected';
162
+ indices: number[];
163
+ direction: 'up' | 'down';
164
+ } | {
165
+ type: 'remove' | 'duplicate';
166
+ indices: number[];
167
+ } | {
168
+ type: 'append';
169
+ };
170
+ interface ChildrenEdit {
171
+ kind: 'children-edit';
172
+ expected: string[];
173
+ action: ChildrenAction;
174
+ }
175
+ declare const getChildrenSignatures: (nodes: DataAttrNode[]) => string[];
176
+ //#endregion
154
177
  //#region node_modules/.pnpm/@babel+parser@7.29.8/node_modules/@babel/parser/typings/babel-parser.d.ts
155
178
  declare class Position {
156
179
  line: number;
@@ -189,5 +212,5 @@ interface ValidationResult {
189
212
  }
190
213
  declare const validateBindingValue: (binding: BindingItem, value: unknown) => ValidationResult;
191
214
  //#endregion
192
- export { flattenEditableValue as A, BindingOption as B, EditablePathSegment as C, createNodeFromValue as D, arrayExpressionToCode as E, getCurrentValue as F, EditableNodeValueType as G, BindingRenderMap as H, getStructuredValue as I, ExtractedNodeValue as K, parseBinding as L, parseValue as M, setEditableValue as N, extractNodeValue as O, findEditableChildren as P, parseBindingExpression as R, generateCode as S, EditableValueEntry as T, BindingType as U, BindingRenderLeaf as V, DataAttrNode as W, moveArrayItems as _, replaceIds as a, updateArrayItemProperty as b, bulkUpdate as c, extract as d, ArrayItem as f, moveArrayItem as g, duplicateArrayItems as h, fillIds as i, parseArrayExpression as j, extractObjectProperties as k, update as l, appendArrayItem as m, validateBindingValue as n, UpdateFailure as o, ItemKind as p, NodeValueType as q, clone as r, UpdateResult as s, ValidationResult as t, clearExtractCache as u, parseItems as v, EditablePrimitive as w, updateArrayItemValue as x, removeArrayItems as y, BindingItem as z };
193
- //# sourceMappingURL=index-GuEiafMN.d.ts.map
215
+ export { createNodeFromValue as A, parseBinding as B, updateArrayItemProperty as C, EditablePrimitive as D, EditablePathSegment as E, parseValue as F, BindingRenderMap as G, BindingItem as H, setEditableValue as I, EditableNodeValueType as J, BindingType as K, findEditableChildren as L, extractObjectProperties as M, flattenEditableValue as N, EditableValueEntry as O, parseArrayExpression as P, getCurrentValue as R, removeArrayItems as S, generateCode as T, BindingOption as U, parseBindingExpression as V, BindingRenderLeaf as W, NodeValueType as X, ExtractedNodeValue as Y, appendArrayItem as _, replaceIds as a, moveArrayItems as b, getChildrenSignatures as c, bulkUpdate as d, update as f, ItemKind as g, ArrayItem as h, fillIds as i, extractNodeValue as j, arrayExpressionToCode as k, UpdateFailure as l, extract as m, validateBindingValue as n, ChildrenAction as o, clearExtractCache as p, DataAttrNode as q, clone as r, ChildrenEdit as s, ValidationResult as t, UpdateResult as u, duplicateArrayItems as v, updateArrayItemValue as w, parseItems as x, moveArrayItem as y, getStructuredValue as z };
216
+ //# sourceMappingURL=index-DxbG789f.d.ts.map
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { v as Section } from "./document-J9Lo9p81.js";
2
2
  import { t as FrameProps } from "./index-DpDU1IAw.js";
3
- import { A as Props, D as DndPanel, E as DndPalette, O as PanelBinding, S as Panel, T as DraggableItemProps, _ as Canvas, b as Layout, f as FieldProps, i as ItemsEditorItem, k as PanelNodeChange, n as ItemsEditor, p as DndLayout, s as ItemsEditorOptions, t as Dnd, x as Palette } from "./index-Bqc5kUAG.js";
4
- import { a as Props$2, n as EditorRenderData, r as Props$1, t as Editor } from "./index-C4TBkJBG.js";
3
+ import { A as DndPanel, C as Layout, M as PanelNodeChange, N as Props, O as DraggableItemProps, T as Panel, a as ItemsEditor, b as Canvas, g as DndLayout, h as FieldProps, j as PanelBinding, k as DndPalette, s as ItemsEditorItem, t as Dnd, u as ItemsEditorOptions, w as Palette } from "./index-DswWDEXZ.js";
4
+ import { a as Props$2, n as EditorRenderData, r as Props$1, t as Editor } from "./index-Ck3akHag.js";
5
5
  import { a as Props$5, n as Props$4, o as Props$3, s as ErrorBoundary, t as Error } from "./index-CCynrS6c.js";
6
6
  import { n as Props$6, t as Preview } from "./index-lgHdCda5.js";
7
7
  //#region src/index.d.ts
@@ -17,7 +17,7 @@ declare const App: {
17
17
  Guard: ({ children, onError }: Props$5) => import("react").JSX.Element;
18
18
  };
19
19
  Editor: (({ defaultValue, value: _value, debounce, onChange: _onChange, renderEditor, fragment, prettierOptions, ...props }: Props$1) => string | number | bigint | boolean | Iterable<import("react").ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<import("react").ReactNode> | null | undefined> | import("react").JSX.Element | null | undefined) & {
20
- Core: ({ value, theme, height, className, prettierOptions, fragment, raw, onChange, onSave: _onSave, onError, ...props }: Props$2) => import("react").JSX.Element;
20
+ Core: ({ value, theme, height, className, prettierOptions, fragment, raw, onChange, onSave, onError, ...props }: Props$2) => import("react").JSX.Element;
21
21
  };
22
22
  Dnd: (({ value: _value, props, modules, onChange: _onChange, className, items, frame, dynamicTailwind, provider, children, ...restProps }: Props) => import("react").JSX.Element) & {
23
23
  DraggableItem: ({ item, children }: DraggableItemProps) => import("react").ReactNode;
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { t as ContextProvider } from "./context-DH70wj9d.js";
2
- import { t as Dnd } from "./dnd-CZJjzuTC.js";
3
- import { t as Editor } from "./editor-Ct9wuhLm.js";
4
- import { t as Error } from "./error-lsJey-it.js";
5
- import { t as Preview } from "./preview-CNVXyDgY.js";
1
+ import { t as ContextProvider } from "./context-649REFsj.js";
2
+ import { t as Dnd } from "./dnd-BnXoytb5.js";
3
+ import { t as Editor } from "./editor-DQSoTCe8.js";
4
+ import { t as Error } from "./error-CO0EbMlA.js";
5
+ import { t as Preview } from "./preview-DFH-z_JL.js";
6
6
  import { jsx } from "react/jsx-runtime";
7
7
  //#region src/index.tsx
8
8
  const App = ({ children }) => {
@@ -1,2 +1,2 @@
1
- import { t as Preview } from "../preview-CNVXyDgY.js";
1
+ import { t as Preview } from "../preview-DFH-z_JL.js";
2
2
  export { Preview as default };
@@ -1,7 +1,7 @@
1
- import { r as cn } from "./utils-BwEgY5pe.js";
1
+ import { r as cn } from "./utils-WyxPYZGh.js";
2
2
  import { i as usePreview, r as useError } from "./states-Ci1AvoQ9.js";
3
- import { n as useCompiledModule, r as Frame, t as useDynamicTailwind } from "./use-dynamic-tailwind-C0Onss1A.js";
4
- import { t as Error } from "./error-lsJey-it.js";
3
+ import { n as useCompiledModule, r as Frame, t as useDynamicTailwind } from "./use-dynamic-tailwind-DqqQu2de.js";
4
+ import { t as Error } from "./error-CO0EbMlA.js";
5
5
  import { useMemo } from "react";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
7
  //#region src/components/preview/client.tsx
@@ -79,4 +79,4 @@ const Preview = ({ code, props = {}, modules = {}, dynamicTailwind = false, prov
79
79
  //#endregion
80
80
  export { Preview as t };
81
81
 
82
- //# sourceMappingURL=preview-CNVXyDgY.js.map
82
+ //# sourceMappingURL=preview-DFH-z_JL.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"preview-CNVXyDgY.js","names":["LiveError"],"sources":["../src/components/preview/client.tsx","../src/components/preview/preview.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { useError, usePreview } from '~/components/context/states';\nimport LiveError from '~/components/error';\nimport Frame, { type FrameProps } from '~/components/frame';\nimport { cn } from '~/utils';\n\nimport { type Props } from './preview';\nimport { useCompiledModule } from './use-compiled-module';\nimport { useDynamicTailwind } from './use-dynamic-tailwind';\n\nconst Client = ({\n code: _code = '',\n className,\n showError,\n props = {},\n modules = {},\n frame,\n dynamicTailwind = false,\n provider,\n}: Props) => {\n const { code } = usePreview();\n const { error, setError } = useError();\n const isError = !!showError && !!error;\n\n const classNames = cn(isError && 'hidden', className);\n\n const effectiveCode = _code || code;\n\n const module = useCompiledModule(effectiveCode, modules);\n\n // Attached to the wrapper below; scans the rendered DOM so classes coming\n // from an imported component are picked up too. See the hook for details.\n const { ref: contentRef, css: dynamicCSS } = useDynamicTailwind(\n effectiveCode,\n dynamicTailwind,\n );\n\n const componentProps = useMemo(\n () => ({\n ...props,\n }),\n [props],\n );\n\n const renderProvider = (component: React.ReactNode) => {\n return provider ? provider(component) : component;\n };\n\n if (module && module.error) {\n return (\n <>\n <div className={cn('relative h-full w-full', classNames)}>\n <LiveError message={module.error} title=\"Compile Error\" />\n </div>\n <LiveError.Runtime open={isError} />\n </>\n );\n }\n\n const Component = module?.exports?.default;\n\n if (!Component) {\n return null;\n }\n\n return (\n <>\n {frame ? (\n <div className={cn('h-full w-full', classNames)}>\n <Frame {...(frame as FrameProps)}>\n {container => (\n <div ref={contentRef} style={{ display: 'contents' }}>\n <LiveError.Boundary\n resetKeys={[effectiveCode]}\n onError={(e: Error) => setError(e.message)}\n >\n {renderProvider(\n <LiveError.Guard onError={e => setError(e.message)}>\n <Component {...componentProps} container={container} />\n {dynamicTailwind && dynamicCSS && (\n <style>{dynamicCSS}</style>\n )}\n </LiveError.Guard>,\n )}\n </LiveError.Boundary>\n </div>\n )}\n </Frame>\n </div>\n ) : (\n <div\n ref={contentRef}\n className={cn(\n 'relative h-full w-full overflow-x-hidden overflow-y-auto',\n classNames,\n )}\n style={{\n isolation: 'isolate',\n transform: 'translateZ(0)',\n containerType: 'inline-size',\n }}\n >\n <LiveError.Boundary\n resetKeys={[effectiveCode]}\n onError={e => setError(e.message)}\n >\n {renderProvider(\n <LiveError.Guard onError={e => setError(e.message)}>\n <Component {...componentProps} />\n {dynamicTailwind && dynamicCSS && <style>{dynamicCSS}</style>}\n </LiveError.Guard>,\n )}\n </LiveError.Boundary>\n </div>\n )}\n <LiveError.Runtime open={isError} />\n </>\n );\n};\n\nexport default Client;\n","import type React from 'react';\n\nimport type { FrameProps } from '../frame';\nimport Client from './client';\n\nexport interface Props extends React.ComponentPropsWithRef<'div'> {\n code?: string;\n showError?: boolean;\n props?: Record<string, unknown>;\n container?: HTMLElement | null;\n frame?: boolean | FrameProps;\n modules?: Record<string, unknown>;\n dynamicTailwind?: boolean;\n provider?: (children: React.ReactNode) => React.ReactNode;\n}\n\n// A thin wrapper around Client, which does the actual compiling, error\n// handling, and frame wrapping. This used to have its own duplicate\n// compile-and-render branch for the `code` prop that never wrapped its\n// output in <Frame>, so `frame` was silently ignored whenever `code` was\n// passed — see #187. Client already handles `code` (falling back to\n// context when absent) and `frame`, so there is only one render path now.\nconst Preview = ({\n code,\n props = {},\n modules = {},\n dynamicTailwind = false,\n provider,\n ...restProps\n}: Props) => {\n return (\n <Client\n code={code}\n props={props}\n modules={modules}\n dynamicTailwind={dynamicTailwind}\n provider={provider}\n {...restProps}\n />\n );\n};\n\nexport default Preview;\n"],"mappings":";;;;;;;AAaA,MAAM,UAAU,EACd,MAAM,QAAQ,IACd,WACA,WACA,QAAQ,CAAC,GACT,UAAU,CAAC,GACX,OACA,kBAAkB,OAClB,eACW;CACX,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,EAAE,OAAO,aAAa,SAAS;CACrC,MAAM,UAAU,CAAC,CAAC,aAAa,CAAC,CAAC;CAEjC,MAAM,aAAa,GAAG,WAAW,UAAU,SAAS;CAEpD,MAAM,gBAAgB,SAAS;CAE/B,MAAM,SAAS,kBAAkB,eAAe,OAAO;CAIvD,MAAM,EAAE,KAAK,YAAY,KAAK,eAAe,mBAC3C,eACA,eACF;CAEA,MAAM,iBAAiB,eACd,EACL,GAAG,MACL,IACA,CAAC,KAAK,CACR;CAEA,MAAM,kBAAkB,cAA+B;EACrD,OAAO,WAAW,SAAS,SAAS,IAAI;CAC1C;CAEA,IAAI,UAAU,OAAO,OACnB,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,OAAD;EAAK,WAAW,GAAG,0BAA0B,UAAU;EACrD,UAAA,oBAACA,OAAD;GAAW,SAAS,OAAO;GAAO,OAAM;EAAiB,CAAA;CACtD,CAAA,GACL,oBAACA,MAAU,SAAX,EAAmB,MAAM,QAAU,CAAA,CACnC,EAAA,CAAA;CAIN,MAAM,YAAY,QAAQ,SAAS;CAEnC,IAAI,CAAC,WACH,OAAO;CAGT,OACE,qBAAA,UAAA,EAAA,UAAA,CACG,QACC,oBAAC,OAAD;EAAK,WAAW,GAAG,iBAAiB,UAAU;EAC5C,UAAA,oBAAC,OAAD;GAAO,GAAK;GACT,WAAA,cACC,oBAAC,OAAD;IAAK,KAAK;IAAY,OAAO,EAAE,SAAS,WAAW;IACjD,UAAA,oBAACA,MAAU,UAAX;KACE,WAAW,CAAC,aAAa;KACzB,UAAU,MAAa,SAAS,EAAE,OAAO;KAExC,UAAA,eACC,qBAACA,MAAU,OAAX;MAAiB,UAAS,MAAK,SAAS,EAAE,OAAO;MAAjD,UAAA,CACE,oBAAC,WAAD;OAAW,GAAI;OAA2B;MAAY,CAAA,GACrD,mBAAmB,cAClB,oBAAC,SAAD,EAAA,UAAQ,WAAkB,CAAA,CAEb;KACnB,CAAA,CAAA;IACkB,CAAA;GACjB,CAAA;EAEF,CAAA;CACJ,CAAA,IAEL,oBAAC,OAAD;EACE,KAAK;EACL,WAAW,GACT,4DACA,UACF;EACA,OAAO;GACL,WAAW;GACX,WAAW;GACX,eAAe;EACjB;EAEA,UAAA,oBAACA,MAAU,UAAX;GACE,WAAW,CAAC,aAAa;GACzB,UAAS,MAAK,SAAS,EAAE,OAAO;GAE/B,UAAA,eACC,qBAACA,MAAU,OAAX;IAAiB,UAAS,MAAK,SAAS,EAAE,OAAO;IAAjD,UAAA,CACE,oBAAC,WAAD,EAAW,GAAI,eAAiB,CAAA,GAC/B,mBAAmB,cAAc,oBAAC,SAAD,EAAA,UAAQ,WAAkB,CAAA,CAC7C;GACnB,CAAA,CAAA;EACkB,CAAA;CACjB,CAAA,GAEP,oBAACA,MAAU,SAAX,EAAmB,MAAM,QAAU,CAAA,CACnC,EAAA,CAAA;AAEN;;;ACnGA,MAAM,WAAW,EACf,MACA,QAAQ,CAAC,GACT,UAAU,CAAC,GACX,kBAAkB,OAClB,UACA,GAAG,gBACQ;CACX,OACE,oBAAC,QAAD;EACQ;EACC;EACE;EACQ;EACP;EACV,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"preview-DFH-z_JL.js","names":["LiveError"],"sources":["../src/components/preview/client.tsx","../src/components/preview/preview.tsx"],"sourcesContent":["'use client';\n\nimport { useMemo } from 'react';\n\nimport { useError, usePreview } from '~/components/context/states';\nimport LiveError from '~/components/error';\nimport Frame, { type FrameProps } from '~/components/frame';\nimport { cn } from '~/utils';\n\nimport { type Props } from './preview';\nimport { useCompiledModule } from './use-compiled-module';\nimport { useDynamicTailwind } from './use-dynamic-tailwind';\n\nconst Client = ({\n code: _code = '',\n className,\n showError,\n props = {},\n modules = {},\n frame,\n dynamicTailwind = false,\n provider,\n}: Props) => {\n const { code } = usePreview();\n const { error, setError } = useError();\n const isError = !!showError && !!error;\n\n const classNames = cn(isError && 'hidden', className);\n\n const effectiveCode = _code || code;\n\n const module = useCompiledModule(effectiveCode, modules);\n\n // Attached to the wrapper below; scans the rendered DOM so classes coming\n // from an imported component are picked up too. See the hook for details.\n const { ref: contentRef, css: dynamicCSS } = useDynamicTailwind(\n effectiveCode,\n dynamicTailwind,\n );\n\n const componentProps = useMemo(\n () => ({\n ...props,\n }),\n [props],\n );\n\n const renderProvider = (component: React.ReactNode) => {\n return provider ? provider(component) : component;\n };\n\n if (module && module.error) {\n return (\n <>\n <div className={cn('relative h-full w-full', classNames)}>\n <LiveError message={module.error} title=\"Compile Error\" />\n </div>\n <LiveError.Runtime open={isError} />\n </>\n );\n }\n\n const Component = module?.exports?.default;\n\n if (!Component) {\n return null;\n }\n\n return (\n <>\n {frame ? (\n <div className={cn('h-full w-full', classNames)}>\n <Frame {...(frame as FrameProps)}>\n {container => (\n <div ref={contentRef} style={{ display: 'contents' }}>\n <LiveError.Boundary\n resetKeys={[effectiveCode]}\n onError={(e: Error) => setError(e.message)}\n >\n {renderProvider(\n <LiveError.Guard onError={e => setError(e.message)}>\n <Component {...componentProps} container={container} />\n {dynamicTailwind && dynamicCSS && (\n <style>{dynamicCSS}</style>\n )}\n </LiveError.Guard>,\n )}\n </LiveError.Boundary>\n </div>\n )}\n </Frame>\n </div>\n ) : (\n <div\n ref={contentRef}\n className={cn(\n 'relative h-full w-full overflow-x-hidden overflow-y-auto',\n classNames,\n )}\n style={{\n isolation: 'isolate',\n transform: 'translateZ(0)',\n containerType: 'inline-size',\n }}\n >\n <LiveError.Boundary\n resetKeys={[effectiveCode]}\n onError={e => setError(e.message)}\n >\n {renderProvider(\n <LiveError.Guard onError={e => setError(e.message)}>\n <Component {...componentProps} />\n {dynamicTailwind && dynamicCSS && <style>{dynamicCSS}</style>}\n </LiveError.Guard>,\n )}\n </LiveError.Boundary>\n </div>\n )}\n <LiveError.Runtime open={isError} />\n </>\n );\n};\n\nexport default Client;\n","import type React from 'react';\n\nimport type { FrameProps } from '../frame';\nimport Client from './client';\n\nexport interface Props extends React.ComponentPropsWithRef<'div'> {\n code?: string;\n showError?: boolean;\n props?: Record<string, unknown>;\n container?: HTMLElement | null;\n frame?: boolean | FrameProps;\n modules?: Record<string, unknown>;\n dynamicTailwind?: boolean;\n provider?: (children: React.ReactNode) => React.ReactNode;\n}\n\n// A thin wrapper around Client, which does the actual compiling, error\n// handling, and frame wrapping. This used to have its own duplicate\n// compile-and-render branch for the `code` prop that never wrapped its\n// output in <Frame>, so `frame` was silently ignored whenever `code` was\n// passed — see #187. Client already handles `code` (falling back to\n// context when absent) and `frame`, so there is only one render path now.\nconst Preview = ({\n code,\n props = {},\n modules = {},\n dynamicTailwind = false,\n provider,\n ...restProps\n}: Props) => {\n return (\n <Client\n code={code}\n props={props}\n modules={modules}\n dynamicTailwind={dynamicTailwind}\n provider={provider}\n {...restProps}\n />\n );\n};\n\nexport default Preview;\n"],"mappings":";;;;;;;AAaA,MAAM,UAAU,EACd,MAAM,QAAQ,IACd,WACA,WACA,QAAQ,CAAC,GACT,UAAU,CAAC,GACX,OACA,kBAAkB,OAClB,eACW;CACX,MAAM,EAAE,SAAS,WAAW;CAC5B,MAAM,EAAE,OAAO,aAAa,SAAS;CACrC,MAAM,UAAU,CAAC,CAAC,aAAa,CAAC,CAAC;CAEjC,MAAM,aAAa,GAAG,WAAW,UAAU,SAAS;CAEpD,MAAM,gBAAgB,SAAS;CAE/B,MAAM,SAAS,kBAAkB,eAAe,OAAO;CAIvD,MAAM,EAAE,KAAK,YAAY,KAAK,eAAe,mBAC3C,eACA,eACF;CAEA,MAAM,iBAAiB,eACd,EACL,GAAG,MACL,IACA,CAAC,KAAK,CACR;CAEA,MAAM,kBAAkB,cAA+B;EACrD,OAAO,WAAW,SAAS,SAAS,IAAI;CAC1C;CAEA,IAAI,UAAU,OAAO,OACnB,OACE,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,OAAD;EAAK,WAAW,GAAG,0BAA0B,UAAU;EACrD,UAAA,oBAACA,OAAD;GAAW,SAAS,OAAO;GAAO,OAAM;EAAiB,CAAA;CACtD,CAAA,GACL,oBAACA,MAAU,SAAX,EAAmB,MAAM,QAAU,CAAA,CACnC,EAAA,CAAA;CAIN,MAAM,YAAY,QAAQ,SAAS;CAEnC,IAAI,CAAC,WACH,OAAO;CAGT,OACE,qBAAA,UAAA,EAAA,UAAA,CACG,QACC,oBAAC,OAAD;EAAK,WAAW,GAAG,iBAAiB,UAAU;EAC5C,UAAA,oBAAC,OAAD;GAAO,GAAK;GACT,WAAA,cACC,oBAAC,OAAD;IAAK,KAAK;IAAY,OAAO,EAAE,SAAS,WAAW;IACjD,UAAA,oBAACA,MAAU,UAAX;KACE,WAAW,CAAC,aAAa;KACzB,UAAU,MAAa,SAAS,EAAE,OAAO;KAExC,UAAA,eACC,qBAACA,MAAU,OAAX;MAAiB,UAAS,MAAK,SAAS,EAAE,OAAO;MAAjD,UAAA,CACE,oBAAC,WAAD;OAAW,GAAI;OAA2B;MAAY,CAAA,GACrD,mBAAmB,cAClB,oBAAC,SAAD,EAAA,UAAQ,WAAkB,CAAA,CAEb;KACnB,CAAA,CAAA;IACkB,CAAA;GACjB,CAAA;EAEF,CAAA;CACJ,CAAA,IAEL,oBAAC,OAAD;EACE,KAAK;EACL,WAAW,GACT,4DACA,UACF;EACA,OAAO;GACL,WAAW;GACX,WAAW;GACX,eAAe;EACjB;EAEA,UAAA,oBAACA,MAAU,UAAX;GACE,WAAW,CAAC,aAAa;GACzB,UAAS,MAAK,SAAS,EAAE,OAAO;GAE/B,UAAA,eACC,qBAACA,MAAU,OAAX;IAAiB,UAAS,MAAK,SAAS,EAAE,OAAO;IAAjD,UAAA,CACE,oBAAC,WAAD,EAAW,GAAI,eAAiB,CAAA,GAC/B,mBAAmB,cAAc,oBAAC,SAAD,EAAA,UAAQ,WAAkB,CAAA,CAC7C;GACnB,CAAA,CAAA;EACkB,CAAA;CACjB,CAAA,GAEP,oBAACA,MAAU,SAAX,EAAmB,MAAM,QAAU,CAAA,CACnC,EAAA,CAAA;AAEN;;;ACnGA,MAAM,WAAW,EACf,MACA,QAAQ,CAAC,GACT,UAAU,CAAC,GACX,kBAAkB,OAClB,UACA,GAAG,gBACQ;CACX,OACE,oBAAC,QAAD;EACQ;EACC;EACE;EACQ;EACP;EACV,GAAI;CACL,CAAA;AAEL"}
@@ -1,2 +1,2 @@
1
- import { t as ContextProvider } from "../context-DH70wj9d.js";
1
+ import { t as ContextProvider } from "../context-649REFsj.js";
2
2
  export { ContextProvider as default };
package/dist/style.css CHANGED
@@ -516,13 +516,28 @@
516
516
  @layer ui-kit {
517
517
  @layer theme {
518
518
  :root, :host {
519
- --font-sans: var(--font-geist-sans);
520
- --font-mono: var(--font-geist-mono);
519
+ --font-sans: var(--ui-font-sans, var(--font-geist-sans));
520
+ --font-mono: var(--ui-font-mono, var(--font-geist-mono));
521
521
  --color-red-400: oklch(70.4% .191 22.216);
522
+ --color-red-500: oklch(63.7% .237 25.331);
523
+ --color-orange-500: oklch(70.5% .213 47.604);
524
+ --color-orange-600: oklch(64.6% .222 41.116);
525
+ --color-amber-500: oklch(76.9% .188 70.08);
522
526
  --color-yellow-400: oklch(85.2% .199 91.936);
527
+ --color-yellow-500: oklch(79.5% .184 86.047);
528
+ --color-yellow-600: oklch(68.1% .162 75.834);
529
+ --color-lime-500: oklch(76.8% .233 130.85);
523
530
  --color-green-400: oklch(79.2% .209 151.711);
531
+ --color-green-500: oklch(72.3% .219 149.579);
532
+ --color-green-600: oklch(62.7% .194 149.214);
533
+ --color-cyan-500: oklch(71.5% .143 215.221);
524
534
  --color-blue-400: oklch(70.7% .165 254.624);
535
+ --color-blue-500: oklch(62.3% .214 259.815);
525
536
  --color-blue-600: oklch(54.6% .245 262.881);
537
+ --color-indigo-500: oklch(58.5% .233 277.117);
538
+ --color-purple-500: oklch(62.7% .265 303.9);
539
+ --color-fuchsia-500: oklch(66.7% .295 322.15);
540
+ --color-pink-500: oklch(65.6% .241 354.308);
526
541
  --color-gray-100: oklch(96.7% .003 264.542);
527
542
  --color-gray-200: oklch(92.8% .006 264.531);
528
543
  --color-gray-300: oklch(87.2% .01 258.338);
@@ -607,93 +622,91 @@
607
622
  }
608
623
 
609
624
  @layer components {
610
- [data-slot="button"][data-color] {
611
- --btn-fg: white;
612
- --btn-border: var(--btn-bg);
613
- --btn-bg-hover: var(--btn-bg);
614
-
615
- @supports (color: color-mix(in lab, red, red)) {
616
- --btn-bg-hover: color-mix(in oklch, var(--btn-bg), black 12%);
617
- }
618
-
619
- --btn-bg-active: var(--btn-bg);
620
-
621
- @supports (color: color-mix(in lab, red, red)) {
622
- --btn-bg-active: color-mix(in oklch, var(--btn-bg), black 22%);
623
- }
625
+ :is([data-slot="button"], [data-slot="tag"])[data-color="blue"] {
626
+ --preset-color: var(--color-blue-500);
624
627
  }
625
628
 
626
- [data-slot="button"][data-color="yellow"], [data-slot="button"][data-color="lime"], [data-slot="button"][data-color="gold"] {
627
- --btn-fg: black;
629
+ :is([data-slot="button"], [data-slot="tag"])[data-color="purple"] {
630
+ --preset-color: var(--color-purple-500);
628
631
  }
629
632
 
630
- [data-slot="button"][data-color="default"] {
631
- --btn-bg: var(--muted);
632
- --btn-border: var(--muted-foreground);
633
+ :is([data-slot="button"], [data-slot="tag"])[data-color="cyan"] {
634
+ --preset-color: var(--color-cyan-500);
633
635
  }
634
636
 
635
- [data-slot="button"][data-color="primary"] {
636
- --btn-bg: var(--primary);
637
- --btn-fg: var(--primary-foreground);
637
+ :is([data-slot="button"], [data-slot="tag"])[data-color="green"] {
638
+ --preset-color: var(--color-green-500);
638
639
  }
639
640
 
640
- [data-slot="button"][data-color="danger"] {
641
- --btn-bg: var(--destructive);
641
+ :is([data-slot="button"], [data-slot="tag"])[data-color="fuchsia"] {
642
+ --preset-color: var(--color-fuchsia-500);
642
643
  }
643
644
 
644
- [data-slot="button"][data-color="blue"] {
645
- --btn-bg: #3b82f6;
645
+ :is([data-slot="button"], [data-slot="tag"])[data-color="pink"] {
646
+ --preset-color: var(--color-pink-500);
646
647
  }
647
648
 
648
- [data-slot="button"][data-color="purple"] {
649
- --btn-bg: #a855f7;
649
+ :is([data-slot="button"], [data-slot="tag"])[data-color="red"] {
650
+ --preset-color: var(--color-red-500);
650
651
  }
651
652
 
652
- [data-slot="button"][data-color="cyan"] {
653
- --btn-bg: #06b6d4;
653
+ :is([data-slot="button"], [data-slot="tag"])[data-color="orange"] {
654
+ --preset-color: var(--color-orange-500);
654
655
  }
655
656
 
656
- [data-slot="button"][data-color="green"] {
657
- --btn-bg: #22c55e;
657
+ :is([data-slot="button"], [data-slot="tag"])[data-color="yellow"] {
658
+ --preset-color: var(--color-yellow-500);
658
659
  }
659
660
 
660
- [data-slot="button"][data-color="magenta"] {
661
- --btn-bg: #d946ef;
661
+ :is([data-slot="button"], [data-slot="tag"])[data-color="indigo"] {
662
+ --preset-color: var(--color-indigo-500);
662
663
  }
663
664
 
664
- [data-slot="button"][data-color="pink"] {
665
- --btn-bg: #ec4899;
665
+ :is([data-slot="button"], [data-slot="tag"])[data-color="lime"] {
666
+ --preset-color: var(--color-lime-500);
666
667
  }
667
668
 
668
- [data-slot="button"][data-color="red"] {
669
- --btn-bg: #ef4444;
669
+ :is([data-slot="button"], [data-slot="tag"])[data-color="amber"] {
670
+ --preset-color: var(--color-amber-500);
670
671
  }
671
672
 
672
- [data-slot="button"][data-color="orange"] {
673
- --btn-bg: #f97316;
674
- }
673
+ [data-slot="button"][data-color] {
674
+ --btn-bg: var(--preset-color);
675
+ --btn-fg: white;
676
+ --btn-border: var(--btn-bg);
677
+ --btn-bg-hover: var(--btn-bg);
678
+
679
+ @supports (color: color-mix(in lab, red, red)) {
680
+ --btn-bg-hover: color-mix(in oklch, var(--btn-bg), black 12%);
681
+ }
675
682
 
676
- [data-slot="button"][data-color="yellow"] {
677
- --btn-bg: #eab308;
683
+ --btn-bg-active: var(--btn-bg);
684
+
685
+ @supports (color: color-mix(in lab, red, red)) {
686
+ --btn-bg-active: color-mix(in oklch, var(--btn-bg), black 22%);
687
+ }
678
688
  }
679
689
 
680
- [data-slot="button"][data-color="volcano"] {
681
- --btn-bg: #ea580c;
690
+ [data-slot="button"][data-color="yellow"], [data-slot="button"][data-color="lime"], [data-slot="button"][data-color="amber"] {
691
+ --btn-fg: black;
682
692
  }
683
693
 
684
- [data-slot="button"][data-color="geekblue"] {
685
- --btn-bg: #6366f1;
694
+ [data-slot="button"][data-color="default"] {
695
+ --btn-bg: var(--muted);
696
+ --btn-border: var(--muted-foreground);
686
697
  }
687
698
 
688
- [data-slot="button"][data-color="lime"] {
689
- --btn-bg: #84cc16;
699
+ [data-slot="button"][data-color="primary"] {
700
+ --btn-bg: var(--primary);
701
+ --btn-fg: var(--primary-foreground);
690
702
  }
691
703
 
692
- [data-slot="button"][data-color="gold"] {
693
- --btn-bg: #f59e0b;
704
+ [data-slot="button"][data-color="danger"] {
705
+ --btn-bg: var(--destructive);
694
706
  }
695
707
 
696
- [data-slot="badge"][data-color] {
708
+ [data-slot="tag"][data-color] {
709
+ --tag-bg: var(--preset-color);
697
710
  --tag-fg: var(--tag-bg);
698
711
  --tag-tint: var(--tag-bg);
699
712
 
@@ -702,92 +715,40 @@
702
715
  }
703
716
  }
704
717
 
705
- [data-slot="badge"][data-color="default"] {
718
+ [data-slot="tag"][data-color="default"] {
706
719
  --tag-bg: var(--border);
707
720
  --tag-tint: var(--muted);
708
721
  --tag-fg: var(--muted-foreground);
709
722
  }
710
723
 
711
- [data-slot="badge"][data-color="default"][data-variant="outlined"] {
724
+ [data-slot="tag"][data-color="default"][data-variant="outlined"] {
712
725
  --tag-fg: var(--foreground);
713
726
  }
714
727
 
715
- [data-slot="badge"][data-color="primary"] {
728
+ [data-slot="tag"][data-color="primary"] {
716
729
  --tag-bg: var(--primary);
717
730
  }
718
731
 
719
- [data-slot="badge"][data-color="danger"] {
732
+ [data-slot="tag"][data-color="danger"] {
720
733
  --tag-bg: var(--destructive);
721
734
  }
722
735
 
723
- [data-slot="badge"][data-color="success"] {
724
- --tag-bg: oklch(72.3% .219 149.579);
725
- --tag-fg: oklch(62.7% .194 149.214);
726
- }
727
-
728
- [data-slot="badge"][data-color="warning"] {
729
- --tag-bg: oklch(79.5% .184 86.047);
730
- --tag-fg: oklch(68.1% .162 75.834);
731
- }
732
-
733
- :is(.dark, [data-theme="dark"]) [data-slot="badge"][data-color="success"] {
734
- --tag-fg: oklch(79.2% .209 151.711);
735
- }
736
-
737
- :is(.dark, [data-theme="dark"]) [data-slot="badge"][data-color="warning"] {
738
- --tag-fg: oklch(85.2% .199 91.936);
739
- }
740
-
741
- [data-slot="badge"][data-color="blue"] {
742
- --tag-bg: #3b82f6;
743
- }
744
-
745
- [data-slot="badge"][data-color="purple"] {
746
- --tag-bg: #a855f7;
747
- }
748
-
749
- [data-slot="badge"][data-color="cyan"] {
750
- --tag-bg: #06b6d4;
751
- }
752
-
753
- [data-slot="badge"][data-color="green"] {
754
- --tag-bg: #22c55e;
755
- }
756
-
757
- [data-slot="badge"][data-color="magenta"] {
758
- --tag-bg: #d946ef;
759
- }
760
-
761
- [data-slot="badge"][data-color="pink"] {
762
- --tag-bg: #ec4899;
763
- }
764
-
765
- [data-slot="badge"][data-color="red"] {
766
- --tag-bg: #ef4444;
736
+ [data-slot="tag"][data-color="success"] {
737
+ --tag-bg: var(--color-green-500);
738
+ --tag-fg: var(--color-green-600);
767
739
  }
768
740
 
769
- [data-slot="badge"][data-color="orange"] {
770
- --tag-bg: #f97316;
741
+ [data-slot="tag"][data-color="warning"] {
742
+ --tag-bg: var(--color-yellow-500);
743
+ --tag-fg: var(--color-yellow-600);
771
744
  }
772
745
 
773
- [data-slot="badge"][data-color="yellow"] {
774
- --tag-bg: #eab308;
746
+ :is(.dark, [data-theme="dark"]) [data-slot="tag"][data-color="success"] {
747
+ --tag-fg: var(--color-green-400);
775
748
  }
776
749
 
777
- [data-slot="badge"][data-color="volcano"] {
778
- --tag-bg: #ea580c;
779
- }
780
-
781
- [data-slot="badge"][data-color="geekblue"] {
782
- --tag-bg: #6366f1;
783
- }
784
-
785
- [data-slot="badge"][data-color="lime"] {
786
- --tag-bg: #84cc16;
787
- }
788
-
789
- [data-slot="badge"][data-color="gold"] {
790
- --tag-bg: #f59e0b;
750
+ :is(.dark, [data-theme="dark"]) [data-slot="tag"][data-color="warning"] {
751
+ --tag-fg: var(--color-yellow-400);
791
752
  }
792
753
 
793
754
  [data-slot="col"] {
@@ -982,6 +943,10 @@
982
943
  z-index: 50;
983
944
  }
984
945
 
946
+ .z-1000 {
947
+ z-index: 1000;
948
+ }
949
+
985
950
  .z-10000 {
986
951
  z-index: 10000;
987
952
  }
@@ -2046,6 +2011,10 @@
2046
2011
  background-color: var(--card);
2047
2012
  }
2048
2013
 
2014
+ .bg-chart-1 {
2015
+ background-color: var(--chart-1);
2016
+ }
2017
+
2049
2018
  .bg-destructive {
2050
2019
  background-color: var(--destructive);
2051
2020
  }
@@ -2082,6 +2051,10 @@
2082
2051
  background-color: var(--secondary);
2083
2052
  }
2084
2053
 
2054
+ .bg-sidebar {
2055
+ background-color: var(--sidebar);
2056
+ }
2057
+
2085
2058
  .bg-transparent {
2086
2059
  background-color: #0000;
2087
2060
  }
@@ -2251,7 +2224,7 @@
2251
2224
  }
2252
2225
 
2253
2226
  .font-mono {
2254
- font-family: var(--font-geist-mono);
2227
+ font-family: var(--ui-font-mono, var(--font-geist-mono));
2255
2228
  }
2256
2229
 
2257
2230
  .text-2xl {
@@ -2537,6 +2510,11 @@
2537
2510
  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, );
2538
2511
  }
2539
2512
 
2513
+ .invert {
2514
+ --tw-invert: invert(100%);
2515
+ 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, );
2516
+ }
2517
+
2540
2518
  .filter {
2541
2519
  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, );
2542
2520
  }
@@ -3996,7 +3974,7 @@
3996
3974
  }
3997
3975
 
3998
3976
  .\[\&_\.tiptap_code\]\:font-mono .tiptap code {
3999
- font-family: var(--font-geist-mono);
3977
+ font-family: var(--ui-font-mono, var(--font-geist-mono));
4000
3978
  }
4001
3979
 
4002
3980
  .\[\&_\.tiptap_code\]\:text-\[0\.85em\] .tiptap code {
@@ -4141,7 +4119,7 @@
4141
4119
  }
4142
4120
 
4143
4121
  .\[\&_\.tiptap_pre\]\:font-mono .tiptap pre {
4144
- font-family: var(--font-geist-mono);
4122
+ font-family: var(--ui-font-mono, var(--font-geist-mono));
4145
4123
  }
4146
4124
 
4147
4125
  .\[\&_\.tiptap_pre\]\:text-sm .tiptap pre {
@@ -4392,6 +4370,10 @@
4392
4370
  a.\[a\&\]\:hover\:text-accent-foreground:hover {
4393
4371
  color: var(--accent-foreground);
4394
4372
  }
4373
+
4374
+ a.\[a\&\]\:hover\:underline:hover {
4375
+ text-decoration-line: underline;
4376
+ }
4395
4377
  }
4396
4378
  }
4397
4379
 
@@ -1,4 +1,4 @@
1
- import { i as compile, l as getCachedScriptBlob, t as baseModules } from "./utils-BwEgY5pe.js";
1
+ import { i as compile, l as getCachedScriptBlob, t as baseModules } from "./utils-WyxPYZGh.js";
2
2
  import { t as generateTailwindCSSFromDOM } from "./tailwind-CbjdLyVX.js";
3
3
  import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -456,4 +456,4 @@ const useDynamicTailwind = (code, enabled) => {
456
456
  //#endregion
457
457
  export { useCompiledModule as n, Frame as r, useDynamicTailwind as t };
458
458
 
459
- //# sourceMappingURL=use-dynamic-tailwind-C0Onss1A.js.map
459
+ //# sourceMappingURL=use-dynamic-tailwind-DqqQu2de.js.map