@valbuild/ui 0.13.0 → 0.13.4

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.
@@ -49193,25 +49193,25 @@ function toLexicalNode(node) {
49193
49193
  }
49194
49194
  function toLexicalHeadingNode(heading) {
49195
49195
  const node = LexicalRichText_1.$createHeadingNode(heading.tag);
49196
- node.setFormat(heading.format);
49197
- node.setIndent(heading.indent);
49198
- node.setDirection(heading.direction);
49196
+ node.setFormat(heading.format || "");
49197
+ node.setIndent(heading.indent || 0);
49198
+ node.setDirection(heading.direction || "ltr");
49199
49199
  node.append(...heading.children.map((child) => toLexicalNode(child)));
49200
49200
  return node;
49201
49201
  }
49202
49202
  function toLexicalParagraphNode(paragraph) {
49203
49203
  const node = Lexical_1.$createParagraphNode();
49204
- node.setFormat(paragraph.format);
49205
- node.setIndent(paragraph.indent);
49206
- node.setDirection(paragraph.direction);
49204
+ node.setFormat(paragraph.format || "");
49205
+ node.setIndent(paragraph.indent || 0);
49206
+ node.setDirection(paragraph.direction || "ltr");
49207
49207
  node.append(...paragraph.children.map((child) => toLexicalNode(child)));
49208
49208
  return node;
49209
49209
  }
49210
49210
  function toLexicalListItemNode(listItem) {
49211
49211
  const node = LexicalList_1.$createListItemNode();
49212
- node.setFormat(listItem.format);
49213
- node.setIndent(listItem.indent);
49214
- node.setDirection(listItem.direction);
49212
+ node.setFormat(listItem.format || "");
49213
+ node.setIndent(listItem.indent || 0);
49214
+ node.setDirection(listItem.direction || "ltr");
49215
49215
  node.setValue(listItem.value);
49216
49216
  node.setChecked(listItem.checked);
49217
49217
  node.append(...listItem.children.map((child) => toLexicalNode(child)));
@@ -49219,9 +49219,9 @@ function toLexicalListItemNode(listItem) {
49219
49219
  }
49220
49220
  function toLexicalListNode(list) {
49221
49221
  const node = LexicalList_1.$createListNode(list.listType, list.start);
49222
- node.setFormat(list.format);
49223
- node.setIndent(list.indent);
49224
- node.setDirection(list.direction);
49222
+ node.setFormat(list.format || "");
49223
+ node.setIndent(list.indent || 0);
49224
+ node.setDirection(list.direction || "ltr");
49225
49225
  node.append(...list.children.map((child) => toLexicalNode(child)));
49226
49226
  return node;
49227
49227
  }
@@ -49230,8 +49230,8 @@ function toLexicalTextNode(text) {
49230
49230
  node.setFormat(text.format);
49231
49231
  text.indent && node.setIndent(text.indent);
49232
49232
  text.direction && node.setDirection(text.direction);
49233
- node.setStyle(text.style);
49234
- node.setDetail(text.detail);
49233
+ node.setStyle(text.style || "");
49234
+ node.setDetail(text.detail || 0);
49235
49235
  return node;
49236
49236
  }
49237
49237
  const RichTextEditor = ({
@@ -49256,7 +49256,7 @@ const RichTextEditor = ({
49256
49256
  underline: "underline",
49257
49257
  italic: "italic",
49258
49258
  strikethrough: "line-through",
49259
- underlineStrikethrough: "underlined-line-through"
49259
+ underlineStrikethrough: "underline line-through"
49260
49260
  },
49261
49261
  list: {
49262
49262
  listitem: "ml-[20px]",
@@ -49281,7 +49281,7 @@ const RichTextEditor = ({
49281
49281
  LexicalRichTextPlugin_1.RichTextPlugin,
49282
49282
  {
49283
49283
  contentEditable: /* @__PURE__ */ jsxRuntime.jsx(LexicalContentEditable, { className: "relative bg-fill flex flex-col h-full w-full min-h-[200px] text-primary outline-none" }),
49284
- placeholder: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-[calc(58px+1rem)] left-4 text-base/25 ", children: "Enter some text..." }),
49284
+ placeholder: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute top-[calc(58px+1rem)] left-4 text-base/25 text-primary", children: "Enter some text..." }),
49285
49285
  ErrorBoundary: LexicalErrorBoundary_1
49286
49286
  }
49287
49287
  ),
@@ -50791,7 +50791,7 @@ function ValWindow({
50791
50791
  onClose,
50792
50792
  children
50793
50793
  }) {
50794
- const [draggedPosition, isInitialized, ref, onMouseDown] = useDrag({
50794
+ const [draggedPosition, isInitialized, dragRef, onMouseDownDrag] = useDrag({
50795
50795
  position
50796
50796
  });
50797
50797
  React.useEffect(() => {
@@ -50805,26 +50805,30 @@ function ValWindow({
50805
50805
  document.removeEventListener("keyup", closeOnEscape);
50806
50806
  };
50807
50807
  }, []);
50808
+ const [size, resizeRef, onMouseDownResize] = useResize();
50808
50809
  return /* @__PURE__ */ jsxRuntime.jsxs(
50809
50810
  "div",
50810
50811
  {
50811
50812
  className: classNames(
50812
- "absolute h-[100svh] w-full tablet:w-auto tablet:h-auto tablet:rounded bg-base drop-shadow-2xl min-w-[320px] transition-opacity duration-300 delay-75 tablet:max-w-[50ch] max-w-full",
50813
+ "absolute h-[100svh] w-full tablet:w-auto tablet:h-auto tablet:min-h-fit tablet:rounded bg-base drop-shadow-2xl min-w-[320px] transition-opacity duration-300 delay-75 max-w-full",
50813
50814
  {
50814
50815
  "opacity-0": !(isInitialized || isInitializedProp),
50815
50816
  "opacity-100": isInitialized || isInitializedProp
50816
50817
  }
50817
50818
  ),
50819
+ ref: resizeRef,
50818
50820
  style: {
50819
50821
  left: draggedPosition.left,
50820
- top: draggedPosition.top
50822
+ top: draggedPosition.top,
50823
+ width: size == null ? void 0 : size.width,
50824
+ height: size == null ? void 0 : size.height
50821
50825
  },
50822
50826
  children: [
50823
50827
  /* @__PURE__ */ jsxRuntime.jsxs(
50824
50828
  "div",
50825
50829
  {
50826
- ref,
50827
- className: "relative flex justify-center px-2 py-2 text-primary",
50830
+ ref: dragRef,
50831
+ className: "relative flex justify-center px-2 pt-2 text-primary pb-[16px]",
50828
50832
  children: [
50829
50833
  /* @__PURE__ */ jsxRuntime.jsx(
50830
50834
  AlignJustify$1,
@@ -50834,7 +50838,7 @@ function ValWindow({
50834
50838
  onMouseDown: (e) => {
50835
50839
  e.preventDefault();
50836
50840
  e.stopPropagation();
50837
- onMouseDown();
50841
+ onMouseDownDrag();
50838
50842
  }
50839
50843
  }
50840
50844
  ),
@@ -50849,11 +50853,63 @@ function ValWindow({
50849
50853
  ]
50850
50854
  }
50851
50855
  ),
50852
- children
50856
+ children,
50857
+ /* @__PURE__ */ jsxRuntime.jsx(
50858
+ "div",
50859
+ {
50860
+ className: "absolute bottom-0 right-0 hidden ml-auto select-none tablet:block text-border cursor-nwse-resize",
50861
+ style: {
50862
+ height: 16,
50863
+ width: 16
50864
+ },
50865
+ onMouseDown: onMouseDownResize,
50866
+ children: /* @__PURE__ */ jsxRuntime.jsx(
50867
+ "svg",
50868
+ {
50869
+ height: "18",
50870
+ viewBox: "0 0 18 18",
50871
+ width: "18",
50872
+ xmlns: "http://www.w3.org/2000/svg",
50873
+ children: /* @__PURE__ */ jsxRuntime.jsx(
50874
+ "path",
50875
+ {
50876
+ d: "m14.228 16.227a1 1 0 0 1 -.707-1.707l1-1a1 1 0 0 1 1.416 1.414l-1 1a1 1 0 0 1 -.707.293zm-5.638 0a1 1 0 0 1 -.707-1.707l6.638-6.638a1 1 0 0 1 1.416 1.414l-6.638 6.638a1 1 0 0 1 -.707.293zm-5.84 0a1 1 0 0 1 -.707-1.707l12.477-12.477a1 1 0 1 1 1.415 1.414l-12.478 12.477a1 1 0 0 1 -.707.293z",
50877
+ fill: "currentColor"
50878
+ }
50879
+ )
50880
+ }
50881
+ )
50882
+ }
50883
+ )
50853
50884
  ]
50854
50885
  }
50855
50886
  );
50856
50887
  }
50888
+ function useResize() {
50889
+ const ref = React.useRef(null);
50890
+ const [size, setSize] = React.useState();
50891
+ const handler = (mouseDownEvent) => {
50892
+ var _a;
50893
+ const startSize = (_a = ref.current) == null ? void 0 : _a.getBoundingClientRect();
50894
+ const startPosition = { x: mouseDownEvent.pageX, y: mouseDownEvent.pageY };
50895
+ function onMouseMove(mouseMoveEvent) {
50896
+ if (startSize) {
50897
+ const nextWidth = startSize.width - startPosition.x + mouseMoveEvent.pageX;
50898
+ const nextHeight = startSize.height - startPosition.y + mouseMoveEvent.pageY;
50899
+ setSize({
50900
+ width: nextWidth,
50901
+ height: nextHeight
50902
+ });
50903
+ }
50904
+ }
50905
+ function onMouseUp() {
50906
+ document.body.removeEventListener("mousemove", onMouseMove);
50907
+ }
50908
+ document.body.addEventListener("mousemove", onMouseMove);
50909
+ document.body.addEventListener("mouseup", onMouseUp, { once: true });
50910
+ };
50911
+ return [size, ref, handler];
50912
+ }
50857
50913
  function useDrag({
50858
50914
  position: initPosition
50859
50915
  }) {
@@ -50929,7 +50985,7 @@ function ValOverlay({
50929
50985
  editMode && valWindow && /* @__PURE__ */ jsxRuntime.jsx(ValWindow, { onClose: closeValWindow, position: valWindow.position, children: /* @__PURE__ */ jsxRuntime.jsx(Form, { onSubmit: valWindow.onSubmit, inputs: valWindow.inputs }) })
50930
50986
  ] });
50931
50987
  }
50932
- const styleCss = "/*\n Need to explicitly set config path, otherwise it may fail to resolve when\n built from outside packages/ui.\n*/\n\n/*\n ! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: currentColor; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: 'Roboto', sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n display: none;\n}\n\n/* For use with Shadow DOM, copied from the TailwindCSS prelude */\n\n:host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n font-family: Roboto, system-ui, -apple-system, BlinkMacSystemFont,\n \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Open Sans\",\n \"Helvetica Neue\", sans-serif;\n font-feature-settings: normal;\n margin: 0;\n\n /* theme properties - if updated remember to update the .storybook/theme.css file as well */\n --val-theme-white: #fcfcfc;\n --val-theme-light-gray: #d6d6d6;\n --val-theme-dark-gray: #575757;\n --val-theme-medium-black: #303030;\n --val-theme-warm-black: #1a1a1a;\n --val-theme-yellow: #ffff00;\n --val-theme-red: #f02929;\n --val-theme-green: #1ced1c;\n\n /* light theme */\n --val-theme-base: var(--val-theme-white);\n --val-theme-highlight: var(--val-theme-yellow);\n --val-theme-border: var(--val-theme-light-gray);\n --val-theme-fill: var(--val-theme-light-gray);\n --val-theme-primary: var(--val-theme-warm-black);\n }\n\n/* dark theme */\n\n*[data-mode=\"dark\"] {\n --val-theme-base: var(--val-theme-warm-black);\n --val-theme-highlight: var(--val-theme-yellow);\n --val-theme-border: var(--val-theme-dark-gray);\n --val-theme-fill: var(--val-theme-medium-black);\n --val-theme-primary: var(--val-theme-white);\n }\n\n/* text area auto-grow */\n\n.grow-wrap {\n /* easy way to plop the elements on top of each other and have them both sized based on the tallest one's height */\n display: grid;\n }\n\n.grow-wrap::after {\n /* Note the weird space! Needed to preventy jumpy behavior */\n content: attr(data-replicated-value) \" \";\n\n /* This is how textarea text behaves */\n white-space: pre-wrap;\n\n /* Hidden from view, clicks, and screen readers */\n visibility: hidden;\n }\n\n.grow-wrap > textarea {\n /* Firefox shows scrollbar on growth, you can hide like this. */\n overflow: hidden;\n }\n\n.grow-wrap > textarea,\n .grow-wrap::after {\n /* Identical styling required!! */\n border: 1px solid black;\n padding: 0.5rem;\n font: inherit;\n\n /* Place on top of each other */\n grid-area: 1 / 1 / 2 / 2;\n }\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.inset-0 {\n inset: 0px;\n}\n.bottom-4 {\n bottom: 16px;\n}\n.bottom-\\[-75\\%\\] {\n bottom: -75%;\n}\n.left-0 {\n left: 0px;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-4 {\n left: 16px;\n}\n.left-\\[50\\%\\] {\n left: 50%;\n}\n.right-0 {\n right: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.top-\\[50\\%\\] {\n top: 50%;\n}\n.top-\\[calc\\(58px\\+1rem\\)\\] {\n top: calc(58px + 1rem);\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.mb-4 {\n margin-bottom: 16px;\n}\n.ml-2 {\n margin-left: 8px;\n}\n.ml-\\[20px\\] {\n margin-left: 20px;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mt-2 {\n margin-top: 8px;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.hidden {\n display: none;\n}\n.h-0 {\n height: 0px;\n}\n.h-\\[100svh\\] {\n height: 100svh;\n}\n.h-\\[14px\\] {\n height: 14px;\n}\n.h-\\[40px\\] {\n height: 40px;\n}\n.h-fit {\n height: -moz-fit-content;\n height: fit-content;\n}\n.h-full {\n height: 100%;\n}\n.max-h-\\[300px\\] {\n max-height: 300px;\n}\n.min-h-\\[200px\\] {\n min-height: 200px;\n}\n.min-h-\\[300px\\] {\n min-height: 300px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-\\[14px\\] {\n width: 14px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.min-w-\\[320px\\] {\n min-width: 320px;\n}\n.min-w-\\[500px\\] {\n min-width: 500px;\n}\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n.max-w-full {\n max-width: 100%;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[-90deg\\] {\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[90deg\\] {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-scale-x-100 {\n --tw-scale-x: -1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-grab {\n cursor: grab;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.list-disc {\n list-style-type: disc;\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-1 {\n gap: 4px;\n}\n.gap-2 {\n gap: 8px;\n}\n.overflow-scroll {\n overflow: scroll;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-sm {\n border-radius: 0.125rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-base {\n border-color: var(--val-theme-base);\n}\n.border-border {\n border-color: var(--val-theme-border);\n}\n.border-dark-gray {\n --tw-border-opacity: 1;\n border-color: rgb(87 87 87 / var(--tw-border-opacity));\n}\n.border-highlight {\n border-color: var(--val-theme-highlight);\n}\n.border-primary {\n border-color: var(--val-theme-primary);\n}\n.border-warm-black {\n --tw-border-opacity: 1;\n border-color: rgb(26 26 26 / var(--tw-border-opacity));\n}\n.bg-base {\n background-color: var(--val-theme-base);\n}\n.bg-border {\n background-color: var(--val-theme-border);\n}\n.bg-fill {\n background-color: var(--val-theme-fill);\n}\n.bg-highlight {\n background-color: var(--val-theme-highlight);\n}\n.bg-yellow {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 0 / var(--tw-bg-opacity));\n}\n.stroke-\\[2px\\] {\n stroke-width: 2px;\n}\n.stroke-\\[3px\\] {\n stroke-width: 3px;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.p-2 {\n padding: 8px;\n}\n.p-4 {\n padding: 16px;\n}\n.px-2 {\n padding-left: 8px;\n padding-right: 8px;\n}\n.px-4 {\n padding-left: 16px;\n padding-right: 16px;\n}\n.px-\\[12px\\] {\n padding-left: 12px;\n padding-right: 12px;\n}\n.px-\\[24px\\] {\n padding-left: 24px;\n padding-right: 24px;\n}\n.py-1 {\n padding-top: 4px;\n padding-bottom: 4px;\n}\n.py-2 {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.py-4 {\n padding-top: 16px;\n padding-bottom: 16px;\n}\n.py-\\[2px\\] {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.py-\\[8px\\] {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.pt-4 {\n padding-top: 16px;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.font-sans {\n font-family: 'Roboto', sans-serif;\n}\n.font-serif {\n font-family: 'JetBrains Mono', monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-\\[14px\\] {\n font-size: 14px;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.font-\\[12px\\] {\n font-weight: 12px;\n}\n.font-\\[500\\] {\n font-weight: 500;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-semibold {\n font-weight: 600;\n}\n.italic {\n font-style: italic;\n}\n.tracking-\\[0\\.04em\\] {\n letter-spacing: 0.04em;\n}\n.text-base {\n color: var(--val-theme-base);\n}\n.text-fill {\n color: var(--val-theme-fill);\n}\n.text-primary {\n color: var(--val-theme-primary);\n}\n.text-red {\n --tw-text-opacity: 1;\n color: rgb(240 41 41 / var(--tw-text-opacity));\n}\n.text-warm-black {\n --tw-text-opacity: 1;\n color: rgb(26 26 26 / var(--tw-text-opacity));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(252 252 252 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.drop-shadow-2xl {\n --tw-drop-shadow: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.delay-75 {\n transition-delay: 75ms;\n}\n.duration-150 {\n transition-duration: 150ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.hover\\:border-highlight:hover {\n border-color: var(--val-theme-highlight);\n}\n.hover\\:bg-base:hover {\n background-color: var(--val-theme-base);\n}\n.hover\\:bg-warm-black:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(26 26 26 / var(--tw-bg-opacity));\n}\n.hover\\:text-highlight:hover {\n color: var(--val-theme-highlight);\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(252 252 252 / var(--tw-text-opacity));\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-visible\\:border-highlight:focus-visible {\n border-color: var(--val-theme-highlight);\n}\n.focus-visible\\:outline-highlight:focus-visible {\n outline-color: var(--val-theme-highlight);\n}\n.disabled\\:bg-fill:disabled {\n background-color: var(--val-theme-fill);\n}\n.disabled\\:text-base:disabled {\n font-size: 1rem;\n line-height: 1.5rem;\n color: var(--val-theme-base);\n}\n.group:hover .group-hover\\:block {\n display: block;\n}\n:is([data-mode=\"dark\"] .dark\\:border-white) {\n --tw-border-opacity: 1;\n border-color: rgb(252 252 252 / var(--tw-border-opacity));\n}\n:is([data-mode=\"dark\"] .hover\\:dark\\:bg-yellow):hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 0 / var(--tw-bg-opacity));\n}\n:is([data-mode=\"dark\"] .hover\\:dark\\:text-dark-gray):hover {\n --tw-text-opacity: 1;\n color: rgb(87 87 87 / var(--tw-text-opacity));\n}\n@media (min-width: 640px) {\n\n .tablet\\:block {\n display: block;\n }\n\n .tablet\\:h-auto {\n height: auto;\n }\n\n .tablet\\:w-auto {\n width: auto;\n }\n\n .tablet\\:max-w-\\[50ch\\] {\n max-width: 50ch;\n }\n\n .tablet\\:rounded {\n border-radius: 0.25rem;\n }\n}\n";
50988
+ const styleCss = "/*\n Need to explicitly set config path, otherwise it may fail to resolve when\n built from outside packages/ui.\n*/\n\n/*\n ! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: currentColor; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: 'Roboto', sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n display: none;\n}\n\n/* For use with Shadow DOM, copied from the TailwindCSS prelude */\n\n:host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n font-family: Roboto, system-ui, -apple-system, BlinkMacSystemFont,\n \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Open Sans\",\n \"Helvetica Neue\", sans-serif;\n font-feature-settings: normal;\n margin: 0;\n\n /* theme properties - if updated remember to update the .storybook/theme.css file as well */\n --val-theme-white: #fcfcfc;\n --val-theme-light-gray: #d6d6d6;\n --val-theme-dark-gray: #575757;\n --val-theme-medium-black: #303030;\n --val-theme-warm-black: #1a1a1a;\n --val-theme-yellow: #ffff00;\n --val-theme-red: #f02929;\n --val-theme-green: #1ced1c;\n\n /* light theme */\n --val-theme-base: var(--val-theme-white);\n --val-theme-highlight: var(--val-theme-yellow);\n --val-theme-border: var(--val-theme-light-gray);\n --val-theme-fill: var(--val-theme-light-gray);\n --val-theme-primary: var(--val-theme-warm-black);\n }\n\n/* dark theme */\n\n*[data-mode=\"dark\"] {\n --val-theme-base: var(--val-theme-warm-black);\n --val-theme-highlight: var(--val-theme-yellow);\n --val-theme-border: var(--val-theme-dark-gray);\n --val-theme-fill: var(--val-theme-medium-black);\n --val-theme-primary: var(--val-theme-white);\n }\n\n/* text area auto-grow */\n\n.grow-wrap {\n /* easy way to plop the elements on top of each other and have them both sized based on the tallest one's height */\n display: grid;\n }\n\n.grow-wrap::after {\n /* Note the weird space! Needed to preventy jumpy behavior */\n content: attr(data-replicated-value) \" \";\n\n /* This is how textarea text behaves */\n white-space: pre-wrap;\n\n /* Hidden from view, clicks, and screen readers */\n visibility: hidden;\n }\n\n.grow-wrap > textarea {\n /* Firefox shows scrollbar on growth, you can hide like this. */\n overflow: hidden;\n }\n\n.grow-wrap > textarea,\n .grow-wrap::after {\n /* Identical styling required!! */\n border: 1px solid black;\n padding: 0.5rem;\n font: inherit;\n\n /* Place on top of each other */\n grid-area: 1 / 1 / 2 / 2;\n }\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.inset-0 {\n inset: 0px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-4 {\n bottom: 16px;\n}\n.bottom-\\[-75\\%\\] {\n bottom: -75%;\n}\n.left-0 {\n left: 0px;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-4 {\n left: 16px;\n}\n.left-\\[50\\%\\] {\n left: 50%;\n}\n.right-0 {\n right: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.top-\\[50\\%\\] {\n top: 50%;\n}\n.top-\\[calc\\(58px\\+1rem\\)\\] {\n top: calc(58px + 1rem);\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.mb-4 {\n margin-bottom: 16px;\n}\n.ml-2 {\n margin-left: 8px;\n}\n.ml-\\[20px\\] {\n margin-left: 20px;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mt-2 {\n margin-top: 8px;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.hidden {\n display: none;\n}\n.h-0 {\n height: 0px;\n}\n.h-\\[100svh\\] {\n height: 100svh;\n}\n.h-\\[14px\\] {\n height: 14px;\n}\n.h-\\[40px\\] {\n height: 40px;\n}\n.h-fit {\n height: -moz-fit-content;\n height: fit-content;\n}\n.h-full {\n height: 100%;\n}\n.max-h-\\[300px\\] {\n max-height: 300px;\n}\n.min-h-\\[200px\\] {\n min-height: 200px;\n}\n.min-h-\\[300px\\] {\n min-height: 300px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-\\[14px\\] {\n width: 14px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.min-w-\\[320px\\] {\n min-width: 320px;\n}\n.min-w-\\[500px\\] {\n min-width: 500px;\n}\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n.max-w-full {\n max-width: 100%;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[-90deg\\] {\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[90deg\\] {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-scale-x-100 {\n --tw-scale-x: -1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-grab {\n cursor: grab;\n}\n.cursor-nwse-resize {\n cursor: nwse-resize;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.list-disc {\n list-style-type: disc;\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-1 {\n gap: 4px;\n}\n.gap-2 {\n gap: 8px;\n}\n.overflow-scroll {\n overflow: scroll;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-sm {\n border-radius: 0.125rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-base {\n border-color: var(--val-theme-base);\n}\n.border-border {\n border-color: var(--val-theme-border);\n}\n.border-dark-gray {\n --tw-border-opacity: 1;\n border-color: rgb(87 87 87 / var(--tw-border-opacity));\n}\n.border-highlight {\n border-color: var(--val-theme-highlight);\n}\n.border-primary {\n border-color: var(--val-theme-primary);\n}\n.border-warm-black {\n --tw-border-opacity: 1;\n border-color: rgb(26 26 26 / var(--tw-border-opacity));\n}\n.bg-base {\n background-color: var(--val-theme-base);\n}\n.bg-border {\n background-color: var(--val-theme-border);\n}\n.bg-fill {\n background-color: var(--val-theme-fill);\n}\n.bg-highlight {\n background-color: var(--val-theme-highlight);\n}\n.bg-yellow {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 0 / var(--tw-bg-opacity));\n}\n.stroke-\\[2px\\] {\n stroke-width: 2px;\n}\n.stroke-\\[3px\\] {\n stroke-width: 3px;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.p-2 {\n padding: 8px;\n}\n.p-4 {\n padding: 16px;\n}\n.px-2 {\n padding-left: 8px;\n padding-right: 8px;\n}\n.px-4 {\n padding-left: 16px;\n padding-right: 16px;\n}\n.px-\\[12px\\] {\n padding-left: 12px;\n padding-right: 12px;\n}\n.px-\\[24px\\] {\n padding-left: 24px;\n padding-right: 24px;\n}\n.py-1 {\n padding-top: 4px;\n padding-bottom: 4px;\n}\n.py-2 {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.py-4 {\n padding-top: 16px;\n padding-bottom: 16px;\n}\n.py-\\[2px\\] {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.py-\\[8px\\] {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.pb-\\[16px\\] {\n padding-bottom: 16px;\n}\n.pt-2 {\n padding-top: 8px;\n}\n.pt-4 {\n padding-top: 16px;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.font-sans {\n font-family: 'Roboto', sans-serif;\n}\n.font-serif {\n font-family: 'JetBrains Mono', monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-\\[14px\\] {\n font-size: 14px;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.font-\\[12px\\] {\n font-weight: 12px;\n}\n.font-\\[500\\] {\n font-weight: 500;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-semibold {\n font-weight: 600;\n}\n.italic {\n font-style: italic;\n}\n.tracking-\\[0\\.04em\\] {\n letter-spacing: 0.04em;\n}\n.text-base {\n color: var(--val-theme-base);\n}\n.text-border {\n color: var(--val-theme-border);\n}\n.text-fill {\n color: var(--val-theme-fill);\n}\n.text-primary {\n color: var(--val-theme-primary);\n}\n.text-red {\n --tw-text-opacity: 1;\n color: rgb(240 41 41 / var(--tw-text-opacity));\n}\n.text-warm-black {\n --tw-text-opacity: 1;\n color: rgb(26 26 26 / var(--tw-text-opacity));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(252 252 252 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.drop-shadow-2xl {\n --tw-drop-shadow: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.delay-75 {\n transition-delay: 75ms;\n}\n.duration-150 {\n transition-duration: 150ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.hover\\:border-highlight:hover {\n border-color: var(--val-theme-highlight);\n}\n.hover\\:bg-base:hover {\n background-color: var(--val-theme-base);\n}\n.hover\\:bg-warm-black:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(26 26 26 / var(--tw-bg-opacity));\n}\n.hover\\:text-highlight:hover {\n color: var(--val-theme-highlight);\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(252 252 252 / var(--tw-text-opacity));\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-visible\\:border-highlight:focus-visible {\n border-color: var(--val-theme-highlight);\n}\n.focus-visible\\:outline-highlight:focus-visible {\n outline-color: var(--val-theme-highlight);\n}\n.disabled\\:bg-fill:disabled {\n background-color: var(--val-theme-fill);\n}\n.disabled\\:text-base:disabled {\n font-size: 1rem;\n line-height: 1.5rem;\n color: var(--val-theme-base);\n}\n.group:hover .group-hover\\:block {\n display: block;\n}\n:is([data-mode=\"dark\"] .dark\\:border-white) {\n --tw-border-opacity: 1;\n border-color: rgb(252 252 252 / var(--tw-border-opacity));\n}\n:is([data-mode=\"dark\"] .hover\\:dark\\:bg-yellow):hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 0 / var(--tw-bg-opacity));\n}\n:is([data-mode=\"dark\"] .hover\\:dark\\:text-dark-gray):hover {\n --tw-text-opacity: 1;\n color: rgb(87 87 87 / var(--tw-text-opacity));\n}\n@media (min-width: 640px) {\n\n .tablet\\:block {\n display: block;\n }\n\n .tablet\\:h-auto {\n height: auto;\n }\n\n .tablet\\:min-h-fit {\n min-height: -moz-fit-content;\n min-height: fit-content;\n }\n\n .tablet\\:w-auto {\n width: auto;\n }\n\n .tablet\\:rounded {\n border-radius: 0.25rem;\n }\n}\n";
50933
50989
  function Style() {
50934
50990
  return /* @__PURE__ */ jsxRuntime.jsx("style", { children: styleCss });
50935
50991
  }
@@ -49191,25 +49191,25 @@ function toLexicalNode(node) {
49191
49191
  }
49192
49192
  function toLexicalHeadingNode(heading) {
49193
49193
  const node = LexicalRichText_1.$createHeadingNode(heading.tag);
49194
- node.setFormat(heading.format);
49195
- node.setIndent(heading.indent);
49196
- node.setDirection(heading.direction);
49194
+ node.setFormat(heading.format || "");
49195
+ node.setIndent(heading.indent || 0);
49196
+ node.setDirection(heading.direction || "ltr");
49197
49197
  node.append(...heading.children.map((child) => toLexicalNode(child)));
49198
49198
  return node;
49199
49199
  }
49200
49200
  function toLexicalParagraphNode(paragraph) {
49201
49201
  const node = Lexical_1.$createParagraphNode();
49202
- node.setFormat(paragraph.format);
49203
- node.setIndent(paragraph.indent);
49204
- node.setDirection(paragraph.direction);
49202
+ node.setFormat(paragraph.format || "");
49203
+ node.setIndent(paragraph.indent || 0);
49204
+ node.setDirection(paragraph.direction || "ltr");
49205
49205
  node.append(...paragraph.children.map((child) => toLexicalNode(child)));
49206
49206
  return node;
49207
49207
  }
49208
49208
  function toLexicalListItemNode(listItem) {
49209
49209
  const node = LexicalList_1.$createListItemNode();
49210
- node.setFormat(listItem.format);
49211
- node.setIndent(listItem.indent);
49212
- node.setDirection(listItem.direction);
49210
+ node.setFormat(listItem.format || "");
49211
+ node.setIndent(listItem.indent || 0);
49212
+ node.setDirection(listItem.direction || "ltr");
49213
49213
  node.setValue(listItem.value);
49214
49214
  node.setChecked(listItem.checked);
49215
49215
  node.append(...listItem.children.map((child) => toLexicalNode(child)));
@@ -49217,9 +49217,9 @@ function toLexicalListItemNode(listItem) {
49217
49217
  }
49218
49218
  function toLexicalListNode(list) {
49219
49219
  const node = LexicalList_1.$createListNode(list.listType, list.start);
49220
- node.setFormat(list.format);
49221
- node.setIndent(list.indent);
49222
- node.setDirection(list.direction);
49220
+ node.setFormat(list.format || "");
49221
+ node.setIndent(list.indent || 0);
49222
+ node.setDirection(list.direction || "ltr");
49223
49223
  node.append(...list.children.map((child) => toLexicalNode(child)));
49224
49224
  return node;
49225
49225
  }
@@ -49228,8 +49228,8 @@ function toLexicalTextNode(text) {
49228
49228
  node.setFormat(text.format);
49229
49229
  text.indent && node.setIndent(text.indent);
49230
49230
  text.direction && node.setDirection(text.direction);
49231
- node.setStyle(text.style);
49232
- node.setDetail(text.detail);
49231
+ node.setStyle(text.style || "");
49232
+ node.setDetail(text.detail || 0);
49233
49233
  return node;
49234
49234
  }
49235
49235
  const RichTextEditor = ({
@@ -49254,7 +49254,7 @@ const RichTextEditor = ({
49254
49254
  underline: "underline",
49255
49255
  italic: "italic",
49256
49256
  strikethrough: "line-through",
49257
- underlineStrikethrough: "underlined-line-through"
49257
+ underlineStrikethrough: "underline line-through"
49258
49258
  },
49259
49259
  list: {
49260
49260
  listitem: "ml-[20px]",
@@ -49279,7 +49279,7 @@ const RichTextEditor = ({
49279
49279
  LexicalRichTextPlugin_1.RichTextPlugin,
49280
49280
  {
49281
49281
  contentEditable: /* @__PURE__ */ jsx(LexicalContentEditable, { className: "relative bg-fill flex flex-col h-full w-full min-h-[200px] text-primary outline-none" }),
49282
- placeholder: /* @__PURE__ */ jsx("div", { className: "absolute top-[calc(58px+1rem)] left-4 text-base/25 ", children: "Enter some text..." }),
49282
+ placeholder: /* @__PURE__ */ jsx("div", { className: "absolute top-[calc(58px+1rem)] left-4 text-base/25 text-primary", children: "Enter some text..." }),
49283
49283
  ErrorBoundary: LexicalErrorBoundary_1
49284
49284
  }
49285
49285
  ),
@@ -50789,7 +50789,7 @@ function ValWindow({
50789
50789
  onClose,
50790
50790
  children
50791
50791
  }) {
50792
- const [draggedPosition, isInitialized, ref, onMouseDown] = useDrag({
50792
+ const [draggedPosition, isInitialized, dragRef, onMouseDownDrag] = useDrag({
50793
50793
  position
50794
50794
  });
50795
50795
  useEffect(() => {
@@ -50803,26 +50803,30 @@ function ValWindow({
50803
50803
  document.removeEventListener("keyup", closeOnEscape);
50804
50804
  };
50805
50805
  }, []);
50806
+ const [size, resizeRef, onMouseDownResize] = useResize();
50806
50807
  return /* @__PURE__ */ jsxs(
50807
50808
  "div",
50808
50809
  {
50809
50810
  className: classNames(
50810
- "absolute h-[100svh] w-full tablet:w-auto tablet:h-auto tablet:rounded bg-base drop-shadow-2xl min-w-[320px] transition-opacity duration-300 delay-75 tablet:max-w-[50ch] max-w-full",
50811
+ "absolute h-[100svh] w-full tablet:w-auto tablet:h-auto tablet:min-h-fit tablet:rounded bg-base drop-shadow-2xl min-w-[320px] transition-opacity duration-300 delay-75 max-w-full",
50811
50812
  {
50812
50813
  "opacity-0": !(isInitialized || isInitializedProp),
50813
50814
  "opacity-100": isInitialized || isInitializedProp
50814
50815
  }
50815
50816
  ),
50817
+ ref: resizeRef,
50816
50818
  style: {
50817
50819
  left: draggedPosition.left,
50818
- top: draggedPosition.top
50820
+ top: draggedPosition.top,
50821
+ width: size == null ? void 0 : size.width,
50822
+ height: size == null ? void 0 : size.height
50819
50823
  },
50820
50824
  children: [
50821
50825
  /* @__PURE__ */ jsxs(
50822
50826
  "div",
50823
50827
  {
50824
- ref,
50825
- className: "relative flex justify-center px-2 py-2 text-primary",
50828
+ ref: dragRef,
50829
+ className: "relative flex justify-center px-2 pt-2 text-primary pb-[16px]",
50826
50830
  children: [
50827
50831
  /* @__PURE__ */ jsx(
50828
50832
  AlignJustify$1,
@@ -50832,7 +50836,7 @@ function ValWindow({
50832
50836
  onMouseDown: (e) => {
50833
50837
  e.preventDefault();
50834
50838
  e.stopPropagation();
50835
- onMouseDown();
50839
+ onMouseDownDrag();
50836
50840
  }
50837
50841
  }
50838
50842
  ),
@@ -50847,11 +50851,63 @@ function ValWindow({
50847
50851
  ]
50848
50852
  }
50849
50853
  ),
50850
- children
50854
+ children,
50855
+ /* @__PURE__ */ jsx(
50856
+ "div",
50857
+ {
50858
+ className: "absolute bottom-0 right-0 hidden ml-auto select-none tablet:block text-border cursor-nwse-resize",
50859
+ style: {
50860
+ height: 16,
50861
+ width: 16
50862
+ },
50863
+ onMouseDown: onMouseDownResize,
50864
+ children: /* @__PURE__ */ jsx(
50865
+ "svg",
50866
+ {
50867
+ height: "18",
50868
+ viewBox: "0 0 18 18",
50869
+ width: "18",
50870
+ xmlns: "http://www.w3.org/2000/svg",
50871
+ children: /* @__PURE__ */ jsx(
50872
+ "path",
50873
+ {
50874
+ d: "m14.228 16.227a1 1 0 0 1 -.707-1.707l1-1a1 1 0 0 1 1.416 1.414l-1 1a1 1 0 0 1 -.707.293zm-5.638 0a1 1 0 0 1 -.707-1.707l6.638-6.638a1 1 0 0 1 1.416 1.414l-6.638 6.638a1 1 0 0 1 -.707.293zm-5.84 0a1 1 0 0 1 -.707-1.707l12.477-12.477a1 1 0 1 1 1.415 1.414l-12.478 12.477a1 1 0 0 1 -.707.293z",
50875
+ fill: "currentColor"
50876
+ }
50877
+ )
50878
+ }
50879
+ )
50880
+ }
50881
+ )
50851
50882
  ]
50852
50883
  }
50853
50884
  );
50854
50885
  }
50886
+ function useResize() {
50887
+ const ref = useRef(null);
50888
+ const [size, setSize] = useState();
50889
+ const handler = (mouseDownEvent) => {
50890
+ var _a;
50891
+ const startSize = (_a = ref.current) == null ? void 0 : _a.getBoundingClientRect();
50892
+ const startPosition = { x: mouseDownEvent.pageX, y: mouseDownEvent.pageY };
50893
+ function onMouseMove(mouseMoveEvent) {
50894
+ if (startSize) {
50895
+ const nextWidth = startSize.width - startPosition.x + mouseMoveEvent.pageX;
50896
+ const nextHeight = startSize.height - startPosition.y + mouseMoveEvent.pageY;
50897
+ setSize({
50898
+ width: nextWidth,
50899
+ height: nextHeight
50900
+ });
50901
+ }
50902
+ }
50903
+ function onMouseUp() {
50904
+ document.body.removeEventListener("mousemove", onMouseMove);
50905
+ }
50906
+ document.body.addEventListener("mousemove", onMouseMove);
50907
+ document.body.addEventListener("mouseup", onMouseUp, { once: true });
50908
+ };
50909
+ return [size, ref, handler];
50910
+ }
50855
50911
  function useDrag({
50856
50912
  position: initPosition
50857
50913
  }) {
@@ -50927,7 +50983,7 @@ function ValOverlay({
50927
50983
  editMode && valWindow && /* @__PURE__ */ jsx(ValWindow, { onClose: closeValWindow, position: valWindow.position, children: /* @__PURE__ */ jsx(Form, { onSubmit: valWindow.onSubmit, inputs: valWindow.inputs }) })
50928
50984
  ] });
50929
50985
  }
50930
- const styleCss = "/*\n Need to explicitly set config path, otherwise it may fail to resolve when\n built from outside packages/ui.\n*/\n\n/*\n ! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: currentColor; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: 'Roboto', sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n display: none;\n}\n\n/* For use with Shadow DOM, copied from the TailwindCSS prelude */\n\n:host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n font-family: Roboto, system-ui, -apple-system, BlinkMacSystemFont,\n \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Open Sans\",\n \"Helvetica Neue\", sans-serif;\n font-feature-settings: normal;\n margin: 0;\n\n /* theme properties - if updated remember to update the .storybook/theme.css file as well */\n --val-theme-white: #fcfcfc;\n --val-theme-light-gray: #d6d6d6;\n --val-theme-dark-gray: #575757;\n --val-theme-medium-black: #303030;\n --val-theme-warm-black: #1a1a1a;\n --val-theme-yellow: #ffff00;\n --val-theme-red: #f02929;\n --val-theme-green: #1ced1c;\n\n /* light theme */\n --val-theme-base: var(--val-theme-white);\n --val-theme-highlight: var(--val-theme-yellow);\n --val-theme-border: var(--val-theme-light-gray);\n --val-theme-fill: var(--val-theme-light-gray);\n --val-theme-primary: var(--val-theme-warm-black);\n }\n\n/* dark theme */\n\n*[data-mode=\"dark\"] {\n --val-theme-base: var(--val-theme-warm-black);\n --val-theme-highlight: var(--val-theme-yellow);\n --val-theme-border: var(--val-theme-dark-gray);\n --val-theme-fill: var(--val-theme-medium-black);\n --val-theme-primary: var(--val-theme-white);\n }\n\n/* text area auto-grow */\n\n.grow-wrap {\n /* easy way to plop the elements on top of each other and have them both sized based on the tallest one's height */\n display: grid;\n }\n\n.grow-wrap::after {\n /* Note the weird space! Needed to preventy jumpy behavior */\n content: attr(data-replicated-value) \" \";\n\n /* This is how textarea text behaves */\n white-space: pre-wrap;\n\n /* Hidden from view, clicks, and screen readers */\n visibility: hidden;\n }\n\n.grow-wrap > textarea {\n /* Firefox shows scrollbar on growth, you can hide like this. */\n overflow: hidden;\n }\n\n.grow-wrap > textarea,\n .grow-wrap::after {\n /* Identical styling required!! */\n border: 1px solid black;\n padding: 0.5rem;\n font: inherit;\n\n /* Place on top of each other */\n grid-area: 1 / 1 / 2 / 2;\n }\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.inset-0 {\n inset: 0px;\n}\n.bottom-4 {\n bottom: 16px;\n}\n.bottom-\\[-75\\%\\] {\n bottom: -75%;\n}\n.left-0 {\n left: 0px;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-4 {\n left: 16px;\n}\n.left-\\[50\\%\\] {\n left: 50%;\n}\n.right-0 {\n right: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.top-\\[50\\%\\] {\n top: 50%;\n}\n.top-\\[calc\\(58px\\+1rem\\)\\] {\n top: calc(58px + 1rem);\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.mb-4 {\n margin-bottom: 16px;\n}\n.ml-2 {\n margin-left: 8px;\n}\n.ml-\\[20px\\] {\n margin-left: 20px;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mt-2 {\n margin-top: 8px;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.hidden {\n display: none;\n}\n.h-0 {\n height: 0px;\n}\n.h-\\[100svh\\] {\n height: 100svh;\n}\n.h-\\[14px\\] {\n height: 14px;\n}\n.h-\\[40px\\] {\n height: 40px;\n}\n.h-fit {\n height: -moz-fit-content;\n height: fit-content;\n}\n.h-full {\n height: 100%;\n}\n.max-h-\\[300px\\] {\n max-height: 300px;\n}\n.min-h-\\[200px\\] {\n min-height: 200px;\n}\n.min-h-\\[300px\\] {\n min-height: 300px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-\\[14px\\] {\n width: 14px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.min-w-\\[320px\\] {\n min-width: 320px;\n}\n.min-w-\\[500px\\] {\n min-width: 500px;\n}\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n.max-w-full {\n max-width: 100%;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[-90deg\\] {\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[90deg\\] {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-scale-x-100 {\n --tw-scale-x: -1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-grab {\n cursor: grab;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.list-disc {\n list-style-type: disc;\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-1 {\n gap: 4px;\n}\n.gap-2 {\n gap: 8px;\n}\n.overflow-scroll {\n overflow: scroll;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-sm {\n border-radius: 0.125rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-base {\n border-color: var(--val-theme-base);\n}\n.border-border {\n border-color: var(--val-theme-border);\n}\n.border-dark-gray {\n --tw-border-opacity: 1;\n border-color: rgb(87 87 87 / var(--tw-border-opacity));\n}\n.border-highlight {\n border-color: var(--val-theme-highlight);\n}\n.border-primary {\n border-color: var(--val-theme-primary);\n}\n.border-warm-black {\n --tw-border-opacity: 1;\n border-color: rgb(26 26 26 / var(--tw-border-opacity));\n}\n.bg-base {\n background-color: var(--val-theme-base);\n}\n.bg-border {\n background-color: var(--val-theme-border);\n}\n.bg-fill {\n background-color: var(--val-theme-fill);\n}\n.bg-highlight {\n background-color: var(--val-theme-highlight);\n}\n.bg-yellow {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 0 / var(--tw-bg-opacity));\n}\n.stroke-\\[2px\\] {\n stroke-width: 2px;\n}\n.stroke-\\[3px\\] {\n stroke-width: 3px;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.p-2 {\n padding: 8px;\n}\n.p-4 {\n padding: 16px;\n}\n.px-2 {\n padding-left: 8px;\n padding-right: 8px;\n}\n.px-4 {\n padding-left: 16px;\n padding-right: 16px;\n}\n.px-\\[12px\\] {\n padding-left: 12px;\n padding-right: 12px;\n}\n.px-\\[24px\\] {\n padding-left: 24px;\n padding-right: 24px;\n}\n.py-1 {\n padding-top: 4px;\n padding-bottom: 4px;\n}\n.py-2 {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.py-4 {\n padding-top: 16px;\n padding-bottom: 16px;\n}\n.py-\\[2px\\] {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.py-\\[8px\\] {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.pt-4 {\n padding-top: 16px;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.font-sans {\n font-family: 'Roboto', sans-serif;\n}\n.font-serif {\n font-family: 'JetBrains Mono', monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-\\[14px\\] {\n font-size: 14px;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.font-\\[12px\\] {\n font-weight: 12px;\n}\n.font-\\[500\\] {\n font-weight: 500;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-semibold {\n font-weight: 600;\n}\n.italic {\n font-style: italic;\n}\n.tracking-\\[0\\.04em\\] {\n letter-spacing: 0.04em;\n}\n.text-base {\n color: var(--val-theme-base);\n}\n.text-fill {\n color: var(--val-theme-fill);\n}\n.text-primary {\n color: var(--val-theme-primary);\n}\n.text-red {\n --tw-text-opacity: 1;\n color: rgb(240 41 41 / var(--tw-text-opacity));\n}\n.text-warm-black {\n --tw-text-opacity: 1;\n color: rgb(26 26 26 / var(--tw-text-opacity));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(252 252 252 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.drop-shadow-2xl {\n --tw-drop-shadow: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.delay-75 {\n transition-delay: 75ms;\n}\n.duration-150 {\n transition-duration: 150ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.hover\\:border-highlight:hover {\n border-color: var(--val-theme-highlight);\n}\n.hover\\:bg-base:hover {\n background-color: var(--val-theme-base);\n}\n.hover\\:bg-warm-black:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(26 26 26 / var(--tw-bg-opacity));\n}\n.hover\\:text-highlight:hover {\n color: var(--val-theme-highlight);\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(252 252 252 / var(--tw-text-opacity));\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-visible\\:border-highlight:focus-visible {\n border-color: var(--val-theme-highlight);\n}\n.focus-visible\\:outline-highlight:focus-visible {\n outline-color: var(--val-theme-highlight);\n}\n.disabled\\:bg-fill:disabled {\n background-color: var(--val-theme-fill);\n}\n.disabled\\:text-base:disabled {\n font-size: 1rem;\n line-height: 1.5rem;\n color: var(--val-theme-base);\n}\n.group:hover .group-hover\\:block {\n display: block;\n}\n:is([data-mode=\"dark\"] .dark\\:border-white) {\n --tw-border-opacity: 1;\n border-color: rgb(252 252 252 / var(--tw-border-opacity));\n}\n:is([data-mode=\"dark\"] .hover\\:dark\\:bg-yellow):hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 0 / var(--tw-bg-opacity));\n}\n:is([data-mode=\"dark\"] .hover\\:dark\\:text-dark-gray):hover {\n --tw-text-opacity: 1;\n color: rgb(87 87 87 / var(--tw-text-opacity));\n}\n@media (min-width: 640px) {\n\n .tablet\\:block {\n display: block;\n }\n\n .tablet\\:h-auto {\n height: auto;\n }\n\n .tablet\\:w-auto {\n width: auto;\n }\n\n .tablet\\:max-w-\\[50ch\\] {\n max-width: 50ch;\n }\n\n .tablet\\:rounded {\n border-radius: 0.25rem;\n }\n}\n";
50986
+ const styleCss = "/*\n Need to explicitly set config path, otherwise it may fail to resolve when\n built from outside packages/ui.\n*/\n\n/*\n ! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: currentColor; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: 'Roboto', sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n display: none;\n}\n\n/* For use with Shadow DOM, copied from the TailwindCSS prelude */\n\n:host {\n line-height: 1.5;\n -webkit-text-size-adjust: 100%;\n -moz-tab-size: 4;\n -o-tab-size: 4;\n tab-size: 4;\n font-family: Roboto, system-ui, -apple-system, BlinkMacSystemFont,\n \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Open Sans\",\n \"Helvetica Neue\", sans-serif;\n font-feature-settings: normal;\n margin: 0;\n\n /* theme properties - if updated remember to update the .storybook/theme.css file as well */\n --val-theme-white: #fcfcfc;\n --val-theme-light-gray: #d6d6d6;\n --val-theme-dark-gray: #575757;\n --val-theme-medium-black: #303030;\n --val-theme-warm-black: #1a1a1a;\n --val-theme-yellow: #ffff00;\n --val-theme-red: #f02929;\n --val-theme-green: #1ced1c;\n\n /* light theme */\n --val-theme-base: var(--val-theme-white);\n --val-theme-highlight: var(--val-theme-yellow);\n --val-theme-border: var(--val-theme-light-gray);\n --val-theme-fill: var(--val-theme-light-gray);\n --val-theme-primary: var(--val-theme-warm-black);\n }\n\n/* dark theme */\n\n*[data-mode=\"dark\"] {\n --val-theme-base: var(--val-theme-warm-black);\n --val-theme-highlight: var(--val-theme-yellow);\n --val-theme-border: var(--val-theme-dark-gray);\n --val-theme-fill: var(--val-theme-medium-black);\n --val-theme-primary: var(--val-theme-white);\n }\n\n/* text area auto-grow */\n\n.grow-wrap {\n /* easy way to plop the elements on top of each other and have them both sized based on the tallest one's height */\n display: grid;\n }\n\n.grow-wrap::after {\n /* Note the weird space! Needed to preventy jumpy behavior */\n content: attr(data-replicated-value) \" \";\n\n /* This is how textarea text behaves */\n white-space: pre-wrap;\n\n /* Hidden from view, clicks, and screen readers */\n visibility: hidden;\n }\n\n.grow-wrap > textarea {\n /* Firefox shows scrollbar on growth, you can hide like this. */\n overflow: hidden;\n }\n\n.grow-wrap > textarea,\n .grow-wrap::after {\n /* Identical styling required!! */\n border: 1px solid black;\n padding: 0.5rem;\n font: inherit;\n\n /* Place on top of each other */\n grid-area: 1 / 1 / 2 / 2;\n }\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.inset-0 {\n inset: 0px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-4 {\n bottom: 16px;\n}\n.bottom-\\[-75\\%\\] {\n bottom: -75%;\n}\n.left-0 {\n left: 0px;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-4 {\n left: 16px;\n}\n.left-\\[50\\%\\] {\n left: 50%;\n}\n.right-0 {\n right: 0px;\n}\n.top-0 {\n top: 0px;\n}\n.top-\\[50\\%\\] {\n top: 50%;\n}\n.top-\\[calc\\(58px\\+1rem\\)\\] {\n top: calc(58px + 1rem);\n}\n.z-10 {\n z-index: 10;\n}\n.z-20 {\n z-index: 20;\n}\n.mb-4 {\n margin-bottom: 16px;\n}\n.ml-2 {\n margin-left: 8px;\n}\n.ml-\\[20px\\] {\n margin-left: 20px;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mt-2 {\n margin-top: 8px;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.hidden {\n display: none;\n}\n.h-0 {\n height: 0px;\n}\n.h-\\[100svh\\] {\n height: 100svh;\n}\n.h-\\[14px\\] {\n height: 14px;\n}\n.h-\\[40px\\] {\n height: 40px;\n}\n.h-fit {\n height: -moz-fit-content;\n height: fit-content;\n}\n.h-full {\n height: 100%;\n}\n.max-h-\\[300px\\] {\n max-height: 300px;\n}\n.min-h-\\[200px\\] {\n min-height: 200px;\n}\n.min-h-\\[300px\\] {\n min-height: 300px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-\\[14px\\] {\n width: 14px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.min-w-\\[320px\\] {\n min-width: 320px;\n}\n.min-w-\\[500px\\] {\n min-width: 500px;\n}\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n.max-w-full {\n max-width: 100%;\n}\n.-translate-x-1\\/2 {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[-90deg\\] {\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[90deg\\] {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-scale-x-100 {\n --tw-scale-x: -1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-grab {\n cursor: grab;\n}\n.cursor-nwse-resize {\n cursor: nwse-resize;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.list-disc {\n list-style-type: disc;\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-1 {\n gap: 4px;\n}\n.gap-2 {\n gap: 8px;\n}\n.overflow-scroll {\n overflow: scroll;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-lg {\n border-radius: 0.5rem;\n}\n.rounded-md {\n border-radius: 0.375rem;\n}\n.rounded-sm {\n border-radius: 0.125rem;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-base {\n border-color: var(--val-theme-base);\n}\n.border-border {\n border-color: var(--val-theme-border);\n}\n.border-dark-gray {\n --tw-border-opacity: 1;\n border-color: rgb(87 87 87 / var(--tw-border-opacity));\n}\n.border-highlight {\n border-color: var(--val-theme-highlight);\n}\n.border-primary {\n border-color: var(--val-theme-primary);\n}\n.border-warm-black {\n --tw-border-opacity: 1;\n border-color: rgb(26 26 26 / var(--tw-border-opacity));\n}\n.bg-base {\n background-color: var(--val-theme-base);\n}\n.bg-border {\n background-color: var(--val-theme-border);\n}\n.bg-fill {\n background-color: var(--val-theme-fill);\n}\n.bg-highlight {\n background-color: var(--val-theme-highlight);\n}\n.bg-yellow {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 0 / var(--tw-bg-opacity));\n}\n.stroke-\\[2px\\] {\n stroke-width: 2px;\n}\n.stroke-\\[3px\\] {\n stroke-width: 3px;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.p-2 {\n padding: 8px;\n}\n.p-4 {\n padding: 16px;\n}\n.px-2 {\n padding-left: 8px;\n padding-right: 8px;\n}\n.px-4 {\n padding-left: 16px;\n padding-right: 16px;\n}\n.px-\\[12px\\] {\n padding-left: 12px;\n padding-right: 12px;\n}\n.px-\\[24px\\] {\n padding-left: 24px;\n padding-right: 24px;\n}\n.py-1 {\n padding-top: 4px;\n padding-bottom: 4px;\n}\n.py-2 {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.py-4 {\n padding-top: 16px;\n padding-bottom: 16px;\n}\n.py-\\[2px\\] {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.py-\\[8px\\] {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n.pb-\\[16px\\] {\n padding-bottom: 16px;\n}\n.pt-2 {\n padding-top: 8px;\n}\n.pt-4 {\n padding-top: 16px;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.font-sans {\n font-family: 'Roboto', sans-serif;\n}\n.font-serif {\n font-family: 'JetBrains Mono', monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-\\[14px\\] {\n font-size: 14px;\n}\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.font-\\[12px\\] {\n font-weight: 12px;\n}\n.font-\\[500\\] {\n font-weight: 500;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-semibold {\n font-weight: 600;\n}\n.italic {\n font-style: italic;\n}\n.tracking-\\[0\\.04em\\] {\n letter-spacing: 0.04em;\n}\n.text-base {\n color: var(--val-theme-base);\n}\n.text-border {\n color: var(--val-theme-border);\n}\n.text-fill {\n color: var(--val-theme-fill);\n}\n.text-primary {\n color: var(--val-theme-primary);\n}\n.text-red {\n --tw-text-opacity: 1;\n color: rgb(240 41 41 / var(--tw-text-opacity));\n}\n.text-warm-black {\n --tw-text-opacity: 1;\n color: rgb(26 26 26 / var(--tw-text-opacity));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(252 252 252 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.drop-shadow-2xl {\n --tw-drop-shadow: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.delay-75 {\n transition-delay: 75ms;\n}\n.duration-150 {\n transition-duration: 150ms;\n}\n.duration-300 {\n transition-duration: 300ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.hover\\:border-highlight:hover {\n border-color: var(--val-theme-highlight);\n}\n.hover\\:bg-base:hover {\n background-color: var(--val-theme-base);\n}\n.hover\\:bg-warm-black:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(26 26 26 / var(--tw-bg-opacity));\n}\n.hover\\:text-highlight:hover {\n color: var(--val-theme-highlight);\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(252 252 252 / var(--tw-text-opacity));\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-visible\\:border-highlight:focus-visible {\n border-color: var(--val-theme-highlight);\n}\n.focus-visible\\:outline-highlight:focus-visible {\n outline-color: var(--val-theme-highlight);\n}\n.disabled\\:bg-fill:disabled {\n background-color: var(--val-theme-fill);\n}\n.disabled\\:text-base:disabled {\n font-size: 1rem;\n line-height: 1.5rem;\n color: var(--val-theme-base);\n}\n.group:hover .group-hover\\:block {\n display: block;\n}\n:is([data-mode=\"dark\"] .dark\\:border-white) {\n --tw-border-opacity: 1;\n border-color: rgb(252 252 252 / var(--tw-border-opacity));\n}\n:is([data-mode=\"dark\"] .hover\\:dark\\:bg-yellow):hover {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 0 / var(--tw-bg-opacity));\n}\n:is([data-mode=\"dark\"] .hover\\:dark\\:text-dark-gray):hover {\n --tw-text-opacity: 1;\n color: rgb(87 87 87 / var(--tw-text-opacity));\n}\n@media (min-width: 640px) {\n\n .tablet\\:block {\n display: block;\n }\n\n .tablet\\:h-auto {\n height: auto;\n }\n\n .tablet\\:min-h-fit {\n min-height: -moz-fit-content;\n min-height: fit-content;\n }\n\n .tablet\\:w-auto {\n width: auto;\n }\n\n .tablet\\:rounded {\n border-radius: 0.25rem;\n }\n}\n";
50931
50987
  function Style() {
50932
50988
  return /* @__PURE__ */ jsx("style", { children: styleCss });
50933
50989
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@valbuild/ui",
3
- "version": "0.13.0",
3
+ "version": "0.13.4",
4
4
  "sideEffects": false,
5
5
  "scripts": {
6
6
  "typecheck": "tsc --noEmit",
@@ -65,27 +65,27 @@ function toLexicalNode(node: ValNode): LexicalNode {
65
65
 
66
66
  function toLexicalHeadingNode(heading: ValHeadingNode): LexicalNode {
67
67
  const node = $createHeadingNode(heading.tag);
68
- node.setFormat(heading.format);
69
- node.setIndent(heading.indent);
70
- node.setDirection(heading.direction);
68
+ node.setFormat(heading.format || "");
69
+ node.setIndent(heading.indent || 0);
70
+ node.setDirection(heading.direction || "ltr");
71
71
  node.append(...heading.children.map((child) => toLexicalNode(child)));
72
72
  return node;
73
73
  }
74
74
 
75
75
  function toLexicalParagraphNode(paragraph: ValParagraphNode): LexicalNode {
76
76
  const node = $createParagraphNode();
77
- node.setFormat(paragraph.format);
78
- node.setIndent(paragraph.indent);
79
- node.setDirection(paragraph.direction);
77
+ node.setFormat(paragraph.format || "");
78
+ node.setIndent(paragraph.indent || 0);
79
+ node.setDirection(paragraph.direction || "ltr");
80
80
  node.append(...paragraph.children.map((child) => toLexicalNode(child)));
81
81
  return node;
82
82
  }
83
83
 
84
84
  function toLexicalListItemNode(listItem: ValListItemNode): LexicalNode {
85
85
  const node = $createListItemNode();
86
- node.setFormat(listItem.format);
87
- node.setIndent(listItem.indent);
88
- node.setDirection(listItem.direction);
86
+ node.setFormat(listItem.format || "");
87
+ node.setIndent(listItem.indent || 0);
88
+ node.setDirection(listItem.direction || "ltr");
89
89
  node.setValue(listItem.value);
90
90
  node.setChecked(listItem.checked);
91
91
  node.append(...listItem.children.map((child) => toLexicalNode(child)));
@@ -94,9 +94,9 @@ function toLexicalListItemNode(listItem: ValListItemNode): LexicalNode {
94
94
 
95
95
  function toLexicalListNode(list: ValListNode): LexicalNode {
96
96
  const node = $createListNode(list.listType, list.start);
97
- node.setFormat(list.format);
98
- node.setIndent(list.indent);
99
- node.setDirection(list.direction);
97
+ node.setFormat(list.format || "");
98
+ node.setIndent(list.indent || 0);
99
+ node.setDirection(list.direction || "ltr");
100
100
  node.append(...list.children.map((child) => toLexicalNode(child)));
101
101
  return node;
102
102
  }
@@ -106,8 +106,8 @@ function toLexicalTextNode(text: ValTextNode): LexicalNode {
106
106
  node.setFormat(text.format as any); // TODO: why is text.format numbers when we are trying it out?
107
107
  text.indent && node.setIndent(text.indent);
108
108
  text.direction && node.setDirection(text.direction);
109
- node.setStyle(text.style);
110
- node.setDetail(text.detail);
109
+ node.setStyle(text.style || "");
110
+ node.setDetail(text.detail || 0);
111
111
  return node;
112
112
  }
113
113
 
@@ -133,7 +133,7 @@ export const RichTextEditor: FC<RichTextEditorProps> = ({
133
133
  underline: "underline",
134
134
  italic: "italic",
135
135
  strikethrough: "line-through",
136
- underlineStrikethrough: "underlined-line-through",
136
+ underlineStrikethrough: "underline line-through",
137
137
  },
138
138
  list: {
139
139
  listitem: "ml-[20px]",
@@ -161,7 +161,7 @@ export const RichTextEditor: FC<RichTextEditorProps> = ({
161
161
  <LexicalContentEditable className="relative bg-fill flex flex-col h-full w-full min-h-[200px] text-primary outline-none" />
162
162
  }
163
163
  placeholder={
164
- <div className="absolute top-[calc(58px+1rem)] left-4 text-base/25 ">
164
+ <div className="absolute top-[calc(58px+1rem)] left-4 text-base/25 text-primary">
165
165
  Enter some text...
166
166
  </div>
167
167
  }
@@ -1,4 +1,5 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react";
2
+ import { RichText as RichTextType, SourcePath } from "@valbuild/core";
2
3
  import { RichTextEditor } from "../exports";
3
4
  import { FormContainer } from "./forms/FormContainer";
4
5
  import { ImageForm } from "./forms/ImageForm";
@@ -72,34 +73,37 @@ export const RichText: Story = {
72
73
  }}
73
74
  >
74
75
  <RichTextEditor
75
- richtext={{
76
- children: [
77
- {
78
- children: [
79
- {
80
- detail: 0,
81
- format: 0,
82
- mode: "normal",
83
- style: "",
84
- text: "Heading 1",
85
- type: "text",
86
- version: 1,
87
- },
88
- ],
89
- direction: "ltr",
90
- format: "",
91
- indent: 0,
92
- type: "heading",
93
- version: 1,
94
- tag: "h1",
95
- },
96
- ],
97
- direction: "ltr",
98
- format: "",
99
- indent: 0,
100
- type: "root",
101
- version: 1,
102
- }}
76
+ richtext={
77
+ {
78
+ valPath: "/foo" as SourcePath,
79
+ children: [
80
+ {
81
+ children: [
82
+ {
83
+ detail: 0,
84
+ format: 0,
85
+ mode: "normal",
86
+ style: "",
87
+ text: "Heading 1",
88
+ type: "text",
89
+ version: 1,
90
+ },
91
+ ],
92
+ direction: "ltr",
93
+ format: "",
94
+ indent: 0,
95
+ type: "heading",
96
+ version: 1,
97
+ tag: "h1",
98
+ },
99
+ ],
100
+ direction: "ltr",
101
+ format: "",
102
+ indent: 0,
103
+ type: "root",
104
+ version: 1,
105
+ } as RichTextType
106
+ }
103
107
  />
104
108
  </FormContainer>
105
109
  ),
@@ -15,7 +15,7 @@ export function ValWindow({
15
15
  onClose,
16
16
  children,
17
17
  }: ValWindowProps): React.ReactElement {
18
- const [draggedPosition, isInitialized, ref, onMouseDown] = useDrag({
18
+ const [draggedPosition, isInitialized, dragRef, onMouseDownDrag] = useDrag({
19
19
  position,
20
20
  });
21
21
  useEffect(() => {
@@ -29,23 +29,29 @@ export function ValWindow({
29
29
  document.removeEventListener("keyup", closeOnEscape);
30
30
  };
31
31
  }, []);
32
+
33
+ //
34
+ const [size, resizeRef, onMouseDownResize] = useResize();
32
35
  return (
33
36
  <div
34
37
  className={classNames(
35
- "absolute h-[100svh] w-full tablet:w-auto tablet:h-auto tablet:rounded bg-base drop-shadow-2xl min-w-[320px] transition-opacity duration-300 delay-75 tablet:max-w-[50ch] max-w-full",
38
+ "absolute h-[100svh] w-full tablet:w-auto tablet:h-auto tablet:min-h-fit tablet:rounded bg-base drop-shadow-2xl min-w-[320px] transition-opacity duration-300 delay-75 max-w-full",
36
39
  {
37
40
  "opacity-0": !(isInitialized || isInitializedProp),
38
41
  "opacity-100": isInitialized || isInitializedProp,
39
42
  }
40
43
  )}
44
+ ref={resizeRef}
41
45
  style={{
42
46
  left: draggedPosition.left,
43
47
  top: draggedPosition.top,
48
+ width: size?.width,
49
+ height: size?.height,
44
50
  }}
45
51
  >
46
52
  <div
47
- ref={ref}
48
- className="relative flex justify-center px-2 py-2 text-primary"
53
+ ref={dragRef}
54
+ className="relative flex justify-center px-2 pt-2 text-primary pb-[16px]"
49
55
  >
50
56
  <AlignJustify
51
57
  size={16}
@@ -53,7 +59,7 @@ export function ValWindow({
53
59
  onMouseDown={(e) => {
54
60
  e.preventDefault();
55
61
  e.stopPropagation();
56
- onMouseDown();
62
+ onMouseDownDrag();
57
63
  }}
58
64
  />
59
65
  <button
@@ -64,10 +70,59 @@ export function ValWindow({
64
70
  </button>
65
71
  </div>
66
72
  {children}
73
+ <div
74
+ className="absolute bottom-0 right-0 hidden ml-auto select-none tablet:block text-border cursor-nwse-resize"
75
+ style={{
76
+ height: 16,
77
+ width: 16,
78
+ }}
79
+ onMouseDown={onMouseDownResize}
80
+ >
81
+ <svg
82
+ height="18"
83
+ viewBox="0 0 18 18"
84
+ width="18"
85
+ xmlns="http://www.w3.org/2000/svg"
86
+ >
87
+ <path
88
+ d="m14.228 16.227a1 1 0 0 1 -.707-1.707l1-1a1 1 0 0 1 1.416 1.414l-1 1a1 1 0 0 1 -.707.293zm-5.638 0a1 1 0 0 1 -.707-1.707l6.638-6.638a1 1 0 0 1 1.416 1.414l-6.638 6.638a1 1 0 0 1 -.707.293zm-5.84 0a1 1 0 0 1 -.707-1.707l12.477-12.477a1 1 0 1 1 1.415 1.414l-12.478 12.477a1 1 0 0 1 -.707.293z"
89
+ fill="currentColor"
90
+ />
91
+ </svg>
92
+ </div>
67
93
  </div>
68
94
  );
69
95
  }
70
96
 
97
+ function useResize() {
98
+ const ref = useRef<HTMLDivElement>(null);
99
+ const [size, setSize] = useState<{ height: number; width: number }>();
100
+
101
+ const handler = (mouseDownEvent: React.MouseEvent) => {
102
+ const startSize = ref.current?.getBoundingClientRect();
103
+
104
+ const startPosition = { x: mouseDownEvent.pageX, y: mouseDownEvent.pageY };
105
+ function onMouseMove(mouseMoveEvent: MouseEvent) {
106
+ if (startSize) {
107
+ const nextWidth =
108
+ startSize.width - startPosition.x + mouseMoveEvent.pageX;
109
+ const nextHeight =
110
+ startSize.height - startPosition.y + mouseMoveEvent.pageY;
111
+ setSize({
112
+ width: nextWidth,
113
+ height: nextHeight,
114
+ });
115
+ }
116
+ }
117
+ function onMouseUp() {
118
+ document.body.removeEventListener("mousemove", onMouseMove);
119
+ }
120
+ document.body.addEventListener("mousemove", onMouseMove);
121
+ document.body.addEventListener("mouseup", onMouseUp, { once: true });
122
+ };
123
+ return [size, ref, handler] as const;
124
+ }
125
+
71
126
  function useDrag({
72
127
  position: initPosition,
73
128
  }: {
@@ -3,6 +3,7 @@ import {
3
3
  RichTextEditorProps,
4
4
  } from "../components/RichTextEditor/RichTextEditor";
5
5
  import { Meta, Story } from "@storybook/react";
6
+ import { RichText, SourcePath } from "@valbuild/core";
6
7
 
7
8
  export default {
8
9
  title: "RichTextEditor",
@@ -17,6 +18,7 @@ export const DropdownStory = Template.bind({});
17
18
 
18
19
  DropdownStory.args = {
19
20
  richtext: {
21
+ valPath: "/test" as SourcePath,
20
22
  children: [
21
23
  {
22
24
  children: [
@@ -310,5 +312,5 @@ DropdownStory.args = {
310
312
  indent: 0,
311
313
  type: "root",
312
314
  version: 1,
313
- },
315
+ } as RichText,
314
316
  };