@valbuild/ui 0.45.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -50831,7 +50831,7 @@ var Schema = /* @__PURE__ */ function() {
50831
50831
  return Schema2;
50832
50832
  }();
50833
50833
  var GetSchema = Symbol("GetSchema");
50834
- var Path = Symbol("Path");
50834
+ var Path$1 = Symbol("Path");
50835
50835
  var GetSource = Symbol("GetSource");
50836
50836
  function getSchema(selector) {
50837
50837
  return selector[GetSchema];
@@ -50880,10 +50880,10 @@ function isSerializedVal(val) {
50880
50880
  return _typeof(val) === "object" && val !== null && val !== void 0 && ("val" in val || "valPath" in val);
50881
50881
  }
50882
50882
  function isVal(val) {
50883
- return _typeof(val) === "object" && val !== null && val !== void 0 && Path in val && "val" in val;
50883
+ return _typeof(val) === "object" && val !== null && val !== void 0 && Path$1 in val && "val" in val;
50884
50884
  }
50885
50885
  function getValPath(valOrSelector) {
50886
- return valOrSelector[Path];
50886
+ return valOrSelector[Path$1];
50887
50887
  }
50888
50888
  function hasOwn$1(obj, prop) {
50889
50889
  return Object.prototype.hasOwnProperty.call(obj, prop);
@@ -50895,7 +50895,7 @@ function _andThen(f, source, path) {
50895
50895
  return newSelectorProxy(source, path);
50896
50896
  }
50897
50897
  function isSelector(source) {
50898
- return _typeof(source) === "object" && source !== null && (GetSource in source || Path in source);
50898
+ return _typeof(source) === "object" && source !== null && (GetSource in source || Path$1 in source);
50899
50899
  }
50900
50900
  function newSelectorProxy(source, path, moduleSchema) {
50901
50901
  if (_typeof(source) === "object") {
@@ -50924,7 +50924,7 @@ function newSelectorProxy(source, path, moduleSchema) {
50924
50924
  if (prop === GetSource) {
50925
50925
  return true;
50926
50926
  }
50927
- if (prop === Path) {
50927
+ if (prop === Path$1) {
50928
50928
  return true;
50929
50929
  }
50930
50930
  if (prop === "andThen") {
@@ -50939,7 +50939,7 @@ function newSelectorProxy(source, path, moduleSchema) {
50939
50939
  if (prop === GetSource) {
50940
50940
  return source;
50941
50941
  }
50942
- if (prop === Path) {
50942
+ if (prop === Path$1) {
50943
50943
  return path;
50944
50944
  }
50945
50945
  if (prop === GetSchema) {
@@ -51006,7 +51006,7 @@ function newSelectorProxy(source, path, moduleSchema) {
51006
51006
  andThen: function andThen(f) {
51007
51007
  return _andThen(f, source === void 0 ? null : source, path);
51008
51008
  }
51009
- }, GetSource, source === void 0 ? null : source), Path, path), GetSchema, moduleSchema);
51009
+ }, GetSource, source === void 0 ? null : source), Path$1, path), GetSchema, moduleSchema);
51010
51010
  }
51011
51011
  }
51012
51012
  function createValPathOfItem$1(arrayPath, prop) {
@@ -51016,7 +51016,7 @@ function createValPathOfItem$1(arrayPath, prop) {
51016
51016
  return arrayPath && "".concat(arrayPath, ".").concat(JSON.stringify(prop));
51017
51017
  }
51018
51018
  function unValify(valueOrSelector) {
51019
- if (_typeof(valueOrSelector) === "object" && (GetSource in valueOrSelector || Path in valueOrSelector)) {
51019
+ if (_typeof(valueOrSelector) === "object" && (GetSource in valueOrSelector || Path$1 in valueOrSelector)) {
51020
51020
  var selectorValue = valueOrSelector[GetSource];
51021
51021
  return selectorValue;
51022
51022
  }
@@ -51827,6 +51827,96 @@ function parsePath$1(input) {
51827
51827
  }
51828
51828
  return result2;
51829
51829
  }
51830
+ var StringSchema = /* @__PURE__ */ function(_Schema) {
51831
+ _inherits(StringSchema2, _Schema);
51832
+ var _super = _createSuper(StringSchema2);
51833
+ function StringSchema2(options) {
51834
+ var _this;
51835
+ var opt = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
51836
+ var isRaw = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;
51837
+ _classCallCheck(this, StringSchema2);
51838
+ _this = _super.call(this);
51839
+ _this.options = options;
51840
+ _this.opt = opt;
51841
+ _this.isRaw = isRaw;
51842
+ return _this;
51843
+ }
51844
+ _createClass(StringSchema2, [{
51845
+ key: "validate",
51846
+ value: function validate(path, src) {
51847
+ var _this$options, _this$options2, _this$options3;
51848
+ if (this.opt && (src === null || src === void 0)) {
51849
+ return false;
51850
+ }
51851
+ if (typeof src !== "string") {
51852
+ return _defineProperty$5({}, path, [{
51853
+ message: "Expected 'string', got '".concat(_typeof(src), "'"),
51854
+ value: src
51855
+ }]);
51856
+ }
51857
+ var errors = [];
51858
+ if ((_this$options = this.options) !== null && _this$options !== void 0 && _this$options.maxLength && src.length > this.options.maxLength) {
51859
+ errors.push({
51860
+ message: "Expected string to be at most ".concat(this.options.maxLength, " characters long, got ").concat(src.length),
51861
+ value: src
51862
+ });
51863
+ }
51864
+ if ((_this$options2 = this.options) !== null && _this$options2 !== void 0 && _this$options2.minLength && src.length < this.options.minLength) {
51865
+ errors.push({
51866
+ message: "Expected string to be at least ".concat(this.options.minLength, " characters long, got ").concat(src.length),
51867
+ value: src
51868
+ });
51869
+ }
51870
+ if ((_this$options3 = this.options) !== null && _this$options3 !== void 0 && _this$options3.regexp && !this.options.regexp.test(src)) {
51871
+ errors.push({
51872
+ message: "Expected string to match reg exp: ".concat(this.options.regexp.toString(), ", got '").concat(src, "'"),
51873
+ value: src
51874
+ });
51875
+ }
51876
+ if (errors.length > 0) {
51877
+ return _defineProperty$5({}, path, errors);
51878
+ }
51879
+ return false;
51880
+ }
51881
+ }, {
51882
+ key: "assert",
51883
+ value: function assert(src) {
51884
+ if (this.opt && (src === null || src === void 0)) {
51885
+ return true;
51886
+ }
51887
+ return typeof src === "string";
51888
+ }
51889
+ }, {
51890
+ key: "optional",
51891
+ value: function optional() {
51892
+ return new StringSchema2(this.options, true, this.isRaw);
51893
+ }
51894
+ }, {
51895
+ key: "raw",
51896
+ value: function raw() {
51897
+ return new StringSchema2(this.options, this.opt, true);
51898
+ }
51899
+ }, {
51900
+ key: "serialize",
51901
+ value: function serialize() {
51902
+ var _this$options4, _this$options5, _this$options6;
51903
+ return {
51904
+ type: "string",
51905
+ options: {
51906
+ maxLength: (_this$options4 = this.options) === null || _this$options4 === void 0 ? void 0 : _this$options4.maxLength,
51907
+ minLength: (_this$options5 = this.options) === null || _this$options5 === void 0 ? void 0 : _this$options5.minLength,
51908
+ regexp: ((_this$options6 = this.options) === null || _this$options6 === void 0 ? void 0 : _this$options6.regexp) && {
51909
+ source: this.options.regexp.source,
51910
+ flags: this.options.regexp.flags
51911
+ }
51912
+ },
51913
+ opt: this.opt,
51914
+ raw: this.isRaw
51915
+ };
51916
+ }
51917
+ }]);
51918
+ return StringSchema2;
51919
+ }(Schema);
51830
51920
  function getVal(selector) {
51831
51921
  return newValProxy(serializedValOfSelectorSource(selector));
51832
51922
  }
@@ -51849,7 +51939,7 @@ function serializedValOfSelectorSource(selector) {
51849
51939
  var isObject = isObjectOrObjectSelector(child);
51850
51940
  if (isArray) {
51851
51941
  var array = GetSource in child ? child[GetSource] : child;
51852
- var valPath = Path in child ? child[Path] : void 0;
51942
+ var valPath = Path$1 in child ? child[Path$1] : void 0;
51853
51943
  return {
51854
51944
  val: array.map(function(item, i) {
51855
51945
  return rec(isSelector(item) ? item : newSelectorProxy(item, createValPathOfItem$1(valPath, i)));
@@ -51858,7 +51948,7 @@ function serializedValOfSelectorSource(selector) {
51858
51948
  };
51859
51949
  } else if (isObject) {
51860
51950
  var obj = GetSource in child ? child[GetSource] : child;
51861
- var _valPath = Path in child ? child[Path] : void 0;
51951
+ var _valPath = Path$1 in child ? child[Path$1] : void 0;
51862
51952
  return {
51863
51953
  val: obj !== null && Object.fromEntries(Object.entries(obj).map(function(_ref) {
51864
51954
  var _ref2 = _slicedToArray$1(_ref, 2), key = _ref2[0], value = _ref2[1];
@@ -51869,7 +51959,7 @@ function serializedValOfSelectorSource(selector) {
51869
51959
  } else if (isSelector(child)) {
51870
51960
  return {
51871
51961
  val: rec(child[GetSource]),
51872
- valPath: child[Path]
51962
+ valPath: child[Path$1]
51873
51963
  };
51874
51964
  } else {
51875
51965
  return child;
@@ -51911,13 +52001,13 @@ function newValProxy(val) {
51911
52001
  if (prop === "val") {
51912
52002
  return true;
51913
52003
  }
51914
- if (prop === Path) {
52004
+ if (prop === Path$1) {
51915
52005
  return true;
51916
52006
  }
51917
52007
  return hasOwn(target, prop);
51918
52008
  },
51919
52009
  get: function get(target, prop) {
51920
- if (prop === Path) {
52010
+ if (prop === Path$1) {
51921
52011
  return val.valPath;
51922
52012
  }
51923
52013
  if (prop === "val") {
@@ -51938,7 +52028,7 @@ function newValProxy(val) {
51938
52028
  });
51939
52029
  }
51940
52030
  default:
51941
- return _defineProperty$5(_defineProperty$5({}, Path, val.valPath), "val", val.val);
52031
+ return _defineProperty$5(_defineProperty$5({}, Path$1, val.valPath), "val", val.val);
51942
52032
  }
51943
52033
  }
51944
52034
  function hasOwn(obj, prop) {
@@ -56363,7 +56453,7 @@ const Toolbar = ({
56363
56453
  }
56364
56454
  });
56365
56455
  }, [activeEditor]);
56366
- return /* @__PURE__ */ jsxs("div", { className: "sticky top-0 flex flex-col px-4 py-2 border-b bg-background border-highlight", children: [
56456
+ return /* @__PURE__ */ jsxs("div", { className: "sticky top-0 flex flex-col px-4 py-2 border rounded-md rounded-b-none border-input bg-background", children: [
56367
56457
  /* @__PURE__ */ jsxs("div", { className: "flex flex-row gap-1", children: [
56368
56458
  /* @__PURE__ */ jsx(
56369
56459
  Dropdown$1,
@@ -56492,12 +56582,10 @@ const Toolbar$1 = Toolbar;
56492
56582
  function onError(error) {
56493
56583
  console.error(error);
56494
56584
  }
56495
- const TOOLBAR_HEIGHT = 28;
56496
56585
  const RichTextEditor = ({
56497
56586
  richtext,
56498
56587
  onEditor
56499
56588
  }) => {
56500
- const { windowSize } = useValOverlayContext();
56501
56589
  const prePopulatedState = (editor) => {
56502
56590
  editor.setEditorState(
56503
56591
  editor.parseEditorState({
@@ -56540,17 +56628,8 @@ const RichTextEditor = ({
56540
56628
  /* @__PURE__ */ jsx(
56541
56629
  LexicalRichTextPlugin_1.RichTextPlugin,
56542
56630
  {
56543
- contentEditable: /* @__PURE__ */ jsx(
56544
- "div",
56545
- {
56546
- className: "font-sans border-b text-primary border-highlight",
56547
- style: {
56548
- minHeight: (windowSize == null ? void 0 : windowSize.innerHeight) ? (windowSize == null ? void 0 : windowSize.innerHeight) - TOOLBAR_HEIGHT : void 0
56549
- },
56550
- children: /* @__PURE__ */ jsx(LexicalContentEditable, { className: "p-4 outline-none bg-fill" })
56551
- }
56552
- ),
56553
- placeholder: /* @__PURE__ */ jsx("div", { className: "", children: "Enter some text..." }),
56631
+ contentEditable: /* @__PURE__ */ jsx("div", { className: "px-3 py-2 text-sm border-b rounded-md rounded-t-none border-x border-input bg-background ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", children: /* @__PURE__ */ jsx(LexicalContentEditable, { className: "p-4 outline-none bg-fill" }) }),
56632
+ placeholder: /* @__PURE__ */ jsx("p", { className: "" }),
56554
56633
  ErrorBoundary: LexicalErrorBoundary$1
56555
56634
  }
56556
56635
  ),
@@ -56615,17 +56694,22 @@ const LogIn = createLucideIcon("LogIn", [
56615
56694
  ["polyline", { points: "10 17 15 12 10 7", key: "1ail0h" }],
56616
56695
  ["line", { x1: "15", x2: "3", y1: "12", y2: "12", key: "v6grx8" }]
56617
56696
  ]);
56618
- const Maximize = createLucideIcon("Maximize", [
56619
- ["path", { d: "M8 3H5a2 2 0 0 0-2 2v3", key: "1dcmit" }],
56620
- ["path", { d: "M21 8V5a2 2 0 0 0-2-2h-3", key: "1e4gt3" }],
56621
- ["path", { d: "M3 16v3a2 2 0 0 0 2 2h3", key: "wsl5sc" }],
56622
- ["path", { d: "M16 21h3a2 2 0 0 0 2-2v-3", key: "18trek" }]
56697
+ const Maximize2 = createLucideIcon("Maximize2", [
56698
+ ["polyline", { points: "15 3 21 3 21 9", key: "mznyad" }],
56699
+ ["polyline", { points: "9 21 3 21 3 15", key: "1avn1i" }],
56700
+ ["line", { x1: "21", x2: "14", y1: "3", y2: "10", key: "ota7mn" }],
56701
+ ["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }]
56623
56702
  ]);
56624
- const Minimize = createLucideIcon("Minimize", [
56625
- ["path", { d: "M8 3v3a2 2 0 0 1-2 2H3", key: "hohbtr" }],
56626
- ["path", { d: "M21 8h-3a2 2 0 0 1-2-2V3", key: "5jw1f3" }],
56627
- ["path", { d: "M3 16h3a2 2 0 0 1 2 2v3", key: "198tvr" }],
56628
- ["path", { d: "M16 21v-3a2 2 0 0 1 2-2h3", key: "ph8mxp" }]
56703
+ const Menu = createLucideIcon("Menu", [
56704
+ ["line", { x1: "4", x2: "20", y1: "12", y2: "12", key: "1e0a9i" }],
56705
+ ["line", { x1: "4", x2: "20", y1: "6", y2: "6", key: "1owob3" }],
56706
+ ["line", { x1: "4", x2: "20", y1: "18", y2: "18", key: "yk5zj1" }]
56707
+ ]);
56708
+ const Minimize2 = createLucideIcon("Minimize2", [
56709
+ ["polyline", { points: "4 14 10 14 10 20", key: "11kfnr" }],
56710
+ ["polyline", { points: "20 10 14 10 14 4", key: "rlmsce" }],
56711
+ ["line", { x1: "14", x2: "21", y1: "10", y2: "3", key: "o5lafz" }],
56712
+ ["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }]
56629
56713
  ]);
56630
56714
  const Moon = createLucideIcon("Moon", [
56631
56715
  ["path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z", key: "a7tn18" }]
@@ -56665,20 +56749,35 @@ const PREV_URL_KEY = "valbuild:urlBeforeNavigation";
56665
56749
  function ValMenu({
56666
56750
  api,
56667
56751
  patches,
56752
+ direction,
56668
56753
  onCommit
56669
56754
  }) {
56670
56755
  const { theme: theme2, setTheme, editMode, setEditMode, session } = useValOverlayContext();
56671
56756
  if (session.status === "success" && session.data.mode === "unauthorized") {
56672
- return /* @__PURE__ */ jsxs(SingleItemMenu, { href: api.getLoginUrl(window.location.href), children: [
56673
- /* @__PURE__ */ jsx("span", { children: "Login" }),
56674
- /* @__PURE__ */ jsx(LogIn, { size: 18 })
56675
- ] });
56757
+ return /* @__PURE__ */ jsxs(
56758
+ SingleItemMenu,
56759
+ {
56760
+ direction,
56761
+ href: api.getLoginUrl(window.location.href),
56762
+ children: [
56763
+ /* @__PURE__ */ jsx("span", { children: "Login" }),
56764
+ /* @__PURE__ */ jsx(LogIn, { size: 18 })
56765
+ ]
56766
+ }
56767
+ );
56676
56768
  }
56677
56769
  if (session.status === "success" && !session.data.enabled) {
56678
- return /* @__PURE__ */ jsxs(SingleItemMenu, { href: api.getEnableUrl(window.location.href), children: [
56679
- /* @__PURE__ */ jsx("span", { children: "Enable" }),
56680
- /* @__PURE__ */ jsx(LogIn, { size: 18 })
56681
- ] });
56770
+ return /* @__PURE__ */ jsxs(
56771
+ SingleItemMenu,
56772
+ {
56773
+ direction,
56774
+ href: api.getEnableUrl(window.location.href),
56775
+ children: [
56776
+ /* @__PURE__ */ jsx("span", { children: "Enable" }),
56777
+ /* @__PURE__ */ jsx(LogIn, { size: 18 })
56778
+ ]
56779
+ }
56780
+ );
56682
56781
  }
56683
56782
  const [patchCount, setPatchCount] = useState();
56684
56783
  useEffect(() => {
@@ -56688,9 +56787,9 @@ function ValMenu({
56688
56787
  }
56689
56788
  setPatchCount(patchCount2);
56690
56789
  }, [patches]);
56691
- return /* @__PURE__ */ jsxs(MenuContainer, { children: [
56790
+ return /* @__PURE__ */ jsxs(MenuContainer, { direction, children: [
56692
56791
  /* @__PURE__ */ jsx(
56693
- MenuButton,
56792
+ MenuButton$1,
56694
56793
  {
56695
56794
  active: editMode === "hover",
56696
56795
  onClick: () => {
@@ -56700,7 +56799,7 @@ function ValMenu({
56700
56799
  }
56701
56800
  ),
56702
56801
  /* @__PURE__ */ jsx(
56703
- MenuButton,
56802
+ MenuButton$1,
56704
56803
  {
56705
56804
  onClick: () => {
56706
56805
  setTheme(theme2 === "dark" ? "light" : "dark");
@@ -56712,7 +56811,7 @@ function ValMenu({
56712
56811
  }
56713
56812
  ),
56714
56813
  /* @__PURE__ */ jsx(
56715
- MenuButton,
56814
+ MenuButton$1,
56716
56815
  {
56717
56816
  active: editMode === "full",
56718
56817
  onClick: () => {
@@ -56724,11 +56823,11 @@ function ValMenu({
56724
56823
  window.location.href = prevUrl || "/";
56725
56824
  }
56726
56825
  },
56727
- children: /* @__PURE__ */ jsx("div", { className: "h-[24px] w-[24px] flex justify-center items-center", children: editMode === "full" ? /* @__PURE__ */ jsx(Minimize, { size: 15 }) : /* @__PURE__ */ jsx(Maximize, { size: 15 }) })
56826
+ children: /* @__PURE__ */ jsx("div", { className: "h-[24px] w-[24px] flex justify-center items-center", children: editMode === "full" ? /* @__PURE__ */ jsx(Minimize2, { size: 15 }) : /* @__PURE__ */ jsx(Maximize2, { size: 15 }) })
56728
56827
  }
56729
56828
  ),
56730
56829
  patchCount !== void 0 && session.status === "success" && session.data.mode === "proxy" && /* @__PURE__ */ jsx(
56731
- MenuButton,
56830
+ MenuButton$1,
56732
56831
  {
56733
56832
  onClick: () => {
56734
56833
  if (patchCount > 0) {
@@ -56756,16 +56855,42 @@ function ValMenu({
56756
56855
  }
56757
56856
  function SingleItemMenu({
56758
56857
  href,
56858
+ direction,
56759
56859
  children
56760
56860
  }) {
56761
- return /* @__PURE__ */ jsx("div", { className: "flex flex-row items-center justify-center w-full h-full font-sans border-2 rounded-full gap-x-3 text-primary bg-background border-fill", children: /* @__PURE__ */ jsx("a", { className, href, children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center px-2 gap-x-2", children }) }) });
56861
+ return /* @__PURE__ */ jsx(
56862
+ "div",
56863
+ {
56864
+ className: classNames(
56865
+ "flex items-start justify-center w-full h-full font-sans border rounded-full gap-3 text-primary border-fill bg-gradient-to-br from-background/90 from-40% to-background backdrop-blur-lg drop-shadow-2xl",
56866
+ {
56867
+ "flex-col items-start": direction === "vertical",
56868
+ "flex-row items-center": direction === "horizontal"
56869
+ }
56870
+ ),
56871
+ children: /* @__PURE__ */ jsx("a", { className, href, children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center px-2 gap-y-2", children }) })
56872
+ }
56873
+ );
56762
56874
  }
56763
56875
  function MenuContainer({
56764
- children
56876
+ children,
56877
+ direction
56765
56878
  }) {
56766
- return /* @__PURE__ */ jsx("div", { className: "flex flex-row items-center justify-center w-full h-full px-2 py-2 font-sans border-2 rounded-full gap-x-3 text-primary bg-background border-fill", children });
56879
+ return /* @__PURE__ */ jsx(
56880
+ "div",
56881
+ {
56882
+ className: classNames(
56883
+ "flex justify-center w-full h-full px-2 py-2 font-sans border rounded-full gap-3 text-primary border-fill bg-gradient-to-br from-background/90 from-40% to-background backdrop-blur-lg drop-shadow-2xl",
56884
+ {
56885
+ "flex-col items-start": direction === "vertical",
56886
+ "flex-row items-center": direction === "horizontal"
56887
+ }
56888
+ ),
56889
+ children
56890
+ }
56891
+ );
56767
56892
  }
56768
- function MenuButton({
56893
+ function MenuButton$1({
56769
56894
  active,
56770
56895
  onClick,
56771
56896
  children
@@ -56774,7 +56899,7 @@ function MenuButton({
56774
56899
  "button",
56775
56900
  {
56776
56901
  className: classNames(className, {
56777
- "bg-accent drop-shadow-[0px_0px_12px_rgba(56,205,152,0.60)]": active
56902
+ "bg-accent text-accent-foreground drop-shadow-[0px_0px_12px_hsl(var(--accent))]": active
56778
56903
  }),
56779
56904
  onClick,
56780
56905
  children
@@ -62362,14 +62487,21 @@ const twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
62362
62487
  function cn(...inputs) {
62363
62488
  return twMerge(clsx(inputs));
62364
62489
  }
62365
- const ScrollArea = React$3.forwardRef(({ className: className2, children, ...props }, ref) => /* @__PURE__ */ jsxs(
62490
+ const ScrollArea = React$3.forwardRef(({ className: className2, children, innerRef, ...props }, ref) => /* @__PURE__ */ jsxs(
62366
62491
  $57acba87d6e25586$export$be92b6f5f03c0fe9,
62367
62492
  {
62368
62493
  ref,
62369
62494
  className: cn("relative overflow-hidden", className2),
62370
62495
  ...props,
62371
62496
  children: [
62372
- /* @__PURE__ */ jsx($57acba87d6e25586$export$d5c6c08dc2d3ca7, { className: "h-full w-full rounded-[inherit]", children }),
62497
+ /* @__PURE__ */ jsx(
62498
+ $57acba87d6e25586$export$d5c6c08dc2d3ca7,
62499
+ {
62500
+ className: "h-full w-full rounded-[inherit]",
62501
+ ref: innerRef,
62502
+ children
62503
+ }
62504
+ ),
62373
62505
  /* @__PURE__ */ jsx(ScrollBar, {}),
62374
62506
  /* @__PURE__ */ jsx($57acba87d6e25586$export$ac61190d9fc311a9, {})
62375
62507
  ]
@@ -62400,8 +62532,8 @@ const ScrollBar = React$3.forwardRef(({ className: className2, orientation = "ve
62400
62532
  }
62401
62533
  ));
62402
62534
  ScrollBar.displayName = $57acba87d6e25586$export$2fabd85d0eba3c57.displayName;
62403
- const MIN_WIDTH = 320;
62404
- const MIN_HEIGHT = 320;
62535
+ const MIN_WIDTH = 400;
62536
+ const MIN_HEIGHT = 250;
62405
62537
  function ValWindow({
62406
62538
  position,
62407
62539
  onClose,
@@ -62424,14 +62556,12 @@ function ValWindow({
62424
62556
  const { windowSize, setWindowSize } = useValOverlayContext();
62425
62557
  useEffect(() => {
62426
62558
  var _a, _b;
62427
- if (!windowSize) {
62428
- setWindowSize({
62429
- height: MIN_HEIGHT,
62430
- width: MIN_WIDTH,
62431
- innerHeight: MIN_HEIGHT - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62432
- });
62433
- }
62434
- }, [windowSize]);
62559
+ setWindowSize({
62560
+ height: window.innerHeight - 30,
62561
+ width: MIN_WIDTH,
62562
+ innerHeight: window.innerHeight - 30 - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62563
+ });
62564
+ }, []);
62435
62565
  const bottomRef = useRef(null);
62436
62566
  return /* @__PURE__ */ jsx(
62437
62567
  Resizable,
@@ -62443,7 +62573,7 @@ function ValWindow({
62443
62573
  var _a, _b;
62444
62574
  return setWindowSize({
62445
62575
  ...size2,
62446
- innerHeight: ((windowSize == null ? void 0 : windowSize.height) || MIN_HEIGHT) - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62576
+ innerHeight: size2.height - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62447
62577
  });
62448
62578
  },
62449
62579
  handle: /* @__PURE__ */ jsx("div", { className: "fixed bottom-0 right-0 cursor-se-resize", children: /* @__PURE__ */ jsx(
@@ -62477,14 +62607,16 @@ function ValWindow({
62477
62607
  width: (windowSize == null ? void 0 : windowSize.width) || MIN_WIDTH,
62478
62608
  height: (windowSize == null ? void 0 : windowSize.height) || MIN_HEIGHT,
62479
62609
  left: draggedPosition.left,
62480
- top: draggedPosition.top
62610
+ top: draggedPosition.top,
62611
+ right: draggedPosition.right,
62612
+ bottom: draggedPosition.bottom
62481
62613
  },
62482
62614
  children: [
62483
62615
  /* @__PURE__ */ jsxs(
62484
62616
  "div",
62485
62617
  {
62486
62618
  ref: dragRef,
62487
- className: "relative flex items-center justify-center px-2 pt-2 text-primary",
62619
+ className: "relative flex items-center justify-center px-2 py-2 text-primary",
62488
62620
  children: [
62489
62621
  /* @__PURE__ */ jsx(
62490
62622
  AlignJustify,
@@ -62509,56 +62641,32 @@ function ValWindow({
62509
62641
  ]
62510
62642
  }
62511
62643
  ),
62512
- /* @__PURE__ */ jsxs(
62513
- "form",
62514
- {
62515
- className: "h-full",
62516
- onSubmit: (ev) => {
62517
- ev.preventDefault();
62518
- },
62519
- children: [
62520
- Array.isArray(children) && children.slice(0, 1),
62521
- /* @__PURE__ */ jsx(
62522
- ScrollArea,
62523
- {
62524
- className: "relative",
62525
- style: {
62526
- height: windowSize == null ? void 0 : windowSize.innerHeight
62527
- },
62528
- children: Array.isArray(children) ? children.slice(1, -1) : children
62529
- }
62530
- ),
62531
- /* @__PURE__ */ jsx("div", { ref: bottomRef, className: "w-full px-4 pb-0", children: Array.isArray(children) && children.slice(-1) })
62532
- ]
62533
- }
62534
- )
62644
+ /* @__PURE__ */ jsxs("div", { children: [
62645
+ Array.isArray(children) && children.slice(0, 1),
62646
+ /* @__PURE__ */ jsx(
62647
+ ScrollArea,
62648
+ {
62649
+ className: "relative",
62650
+ style: {
62651
+ height: windowSize == null ? void 0 : windowSize.innerHeight
62652
+ },
62653
+ children: Array.isArray(children) ? children.slice(1, -1) : children
62654
+ }
62655
+ ),
62656
+ /* @__PURE__ */ jsx("div", { ref: bottomRef, className: "w-full px-4 pb-0", children: Array.isArray(children) && children.slice(-1) })
62657
+ ] })
62535
62658
  ]
62536
62659
  }
62537
62660
  )
62538
62661
  }
62539
62662
  );
62540
62663
  }
62541
- function useDrag({
62542
- position: initPosition
62543
- }) {
62664
+ function useDrag({ position: initPosition }) {
62544
62665
  var _a, _b;
62545
- const [position, setPosition] = useState({ left: 0, top: 0 });
62666
+ const [position, setPosition] = useState({ left: window.innerWidth - MIN_WIDTH - (24 + 50), top: 16 });
62546
62667
  useEffect(() => {
62547
- var _a2, _b2;
62548
62668
  if (initPosition) {
62549
- const left = initPosition.left - (((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2;
62550
- const top = initPosition.top - 16;
62551
- setPosition({
62552
- left: left < 0 ? 0 : left,
62553
- top: top < 0 ? 0 : top
62554
- });
62555
- } else {
62556
- const left = window.innerWidth / 2 - MIN_WIDTH / 2 - window.scrollX;
62557
- const top = window.innerHeight / 2 - MIN_HEIGHT / 2 + window.scrollY;
62558
- setPosition({
62559
- left,
62560
- top
62561
- });
62669
+ setPosition(initPosition);
62562
62670
  }
62563
62671
  }, [initPosition]);
62564
62672
  const [mouseDown, setMouseDown] = useState(false);
@@ -62572,8 +62680,8 @@ function useDrag({
62572
62680
  if (mouseDown) {
62573
62681
  e.preventDefault();
62574
62682
  e.stopPropagation();
62575
- const left = -((((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2) + e.pageX;
62576
- const top = -((((_d = (_c = ref == null ? void 0 : ref.current) == null ? void 0 : _c.getBoundingClientRect()) == null ? void 0 : _d.height) || 0) / 2) + +e.pageY;
62683
+ const left = -((((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2) + e.clientX;
62684
+ const top = -((((_d = (_c = ref == null ? void 0 : ref.current) == null ? void 0 : _c.getBoundingClientRect()) == null ? void 0 : _d.height) || 0) / 2) + +e.clientY;
62577
62685
  setPosition({
62578
62686
  left: left < 0 ? 0 : left,
62579
62687
  top: top < 0 ? 0 : top
@@ -62751,6 +62859,7 @@ function Grid({ children }) {
62751
62859
  const x = useRef(0);
62752
62860
  const dragRef = useRef(null);
62753
62861
  const originalWidth = useRef(0);
62862
+ const [showMobileLeftMenu, setShowMobileLeftMenu] = useState(true);
62754
62863
  const handleMouseUp = () => {
62755
62864
  isResizing.current = false;
62756
62865
  dragRef.current = null;
@@ -62791,17 +62900,40 @@ function Grid({ children }) {
62791
62900
  document.removeEventListener("mousemove", handleMouseMove);
62792
62901
  };
62793
62902
  }, []);
62794
- return /* @__PURE__ */ jsxs("div", { className: "flex h-screen", children: [
62903
+ return /* @__PURE__ */ jsxs("div", { className: "relative flex h-screen", children: [
62795
62904
  /* @__PURE__ */ jsxs(
62796
62905
  "div",
62797
62906
  {
62798
62907
  ref: leftColRef,
62799
- className: "relative border-r border-border",
62800
- style: { width: 300 },
62908
+ className: classNames(
62909
+ "absolute top-0 left-0 border-r border-border md:relative z-[1] bg-gradient-to-br from-card from-50% to-background",
62910
+ {
62911
+ "w-[300px]": showMobileLeftMenu,
62912
+ "w-0 md:w-[300px]": !showMobileLeftMenu
62913
+ }
62914
+ ),
62801
62915
  children: [
62802
62916
  /* @__PURE__ */ jsxs(Grid.Column, { children: [
62803
- header1,
62804
- /* @__PURE__ */ jsx(ScrollArea, { style: { height: "calc(100vh - 50px)" }, children: body1 })
62917
+ /* @__PURE__ */ jsx(
62918
+ MenuButton,
62919
+ {
62920
+ showOnMobile: !showMobileLeftMenu,
62921
+ onClick: () => {
62922
+ setShowMobileLeftMenu(!showMobileLeftMenu);
62923
+ },
62924
+ children: header1
62925
+ }
62926
+ ),
62927
+ /* @__PURE__ */ jsx(
62928
+ ScrollArea,
62929
+ {
62930
+ style: { height: "calc(100vh - 50px)" },
62931
+ onClick: () => {
62932
+ setShowMobileLeftMenu(false);
62933
+ },
62934
+ children: body1
62935
+ }
62936
+ )
62805
62937
  ] }),
62806
62938
  /* @__PURE__ */ jsx(
62807
62939
  "div",
@@ -62820,7 +62952,28 @@ function Grid({ children }) {
62820
62952
  "w-full": !header3 && !body3
62821
62953
  }),
62822
62954
  children: /* @__PURE__ */ jsxs(Grid.Column, { children: [
62823
- header2,
62955
+ /* @__PURE__ */ jsxs("span", { className: "flex w-full border-b border-border", children: [
62956
+ /* @__PURE__ */ jsx(
62957
+ MenuButton,
62958
+ {
62959
+ className: "md:hidden",
62960
+ showOnMobile: showMobileLeftMenu,
62961
+ onClick: () => {
62962
+ setShowMobileLeftMenu(!showMobileLeftMenu);
62963
+ },
62964
+ children: header1
62965
+ }
62966
+ ),
62967
+ /* @__PURE__ */ jsx(
62968
+ "span",
62969
+ {
62970
+ className: classNames({
62971
+ "pl-[300px] md:pl-0": showMobileLeftMenu
62972
+ }),
62973
+ children: header2
62974
+ }
62975
+ )
62976
+ ] }),
62824
62977
  /* @__PURE__ */ jsx(ScrollArea, { style: { height: "calc(100vh - 50px)" }, children: body2 })
62825
62978
  ] })
62826
62979
  }
@@ -62848,111 +63001,30 @@ function Grid({ children }) {
62848
63001
  )
62849
63002
  ] });
62850
63003
  }
62851
- Grid.Column = ({ children }) => {
62852
- const [header, body] = Children.toArray(children);
62853
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
62854
- /* @__PURE__ */ jsx("div", { className: "flex items-center border-b border-border", children: header }),
62855
- body
62856
- ] });
62857
- };
62858
- const Section = ({ className: className2 }) => {
63004
+ function MenuButton({
63005
+ className: className2,
63006
+ showOnMobile,
63007
+ onClick,
63008
+ children
63009
+ }) {
62859
63010
  return /* @__PURE__ */ jsxs(
62860
- "svg",
63011
+ "div",
62861
63012
  {
62862
- width: "9",
62863
- height: "10",
62864
- viewBox: "0 0 9 10",
62865
- className: className2,
62866
- fill: "currentColor",
62867
- xmlns: "http://www.w3.org/2000/svg",
63013
+ className: classNames("flex items-center px-4 md:px-4", className2, {
63014
+ "hidden md:flex": showOnMobile
63015
+ }),
62868
63016
  children: [
62869
- /* @__PURE__ */ jsxs("g", { clipPath: "url(#clip0_1222_1618)", children: [
62870
- /* @__PURE__ */ jsx(
62871
- "path",
62872
- {
62873
- fillRule: "evenodd",
62874
- clipRule: "evenodd",
62875
- d: "M9 1.5H0V0.5H9V1.5Z",
62876
- fill: "currentColor"
62877
- }
62878
- ),
62879
- /* @__PURE__ */ jsx(
62880
- "path",
62881
- {
62882
- fillRule: "evenodd",
62883
- clipRule: "evenodd",
62884
- d: "M9 9.5H0V8.5H9V9.5Z",
62885
- fill: "currentColor"
62886
- }
62887
- )
62888
- ] }),
62889
- /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: "clip0_1222_1618", children: /* @__PURE__ */ jsx(
62890
- "rect",
62891
- {
62892
- width: "9",
62893
- height: "9",
62894
- fill: "white",
62895
- transform: "translate(0 0.5)"
62896
- }
62897
- ) }) })
63017
+ /* @__PURE__ */ jsx("button", { className: "md:hidden", onClick, children: /* @__PURE__ */ jsx(Menu, {}) }),
63018
+ /* @__PURE__ */ jsx("span", { className: "flex items-center justify-between w-full", children })
62898
63019
  ]
62899
63020
  }
62900
63021
  );
62901
- };
62902
- const Section$1 = Section;
62903
- const TextIcon = ({ className: className2 }) => {
62904
- return /* @__PURE__ */ jsx(
62905
- "svg",
62906
- {
62907
- width: "9",
62908
- height: "10",
62909
- viewBox: "0 0 9 10",
62910
- fill: "currentColor",
62911
- xmlns: "http://www.w3.org/2000/svg",
62912
- className: className2,
62913
- children: /* @__PURE__ */ jsx("g", { clipPath: "url(#clip0_1229_1625)", children: /* @__PURE__ */ jsx("path", { d: "M0.0145513 0.5H8.98545L9 3.18569H8.57074C8.43007 2.2276 8.02749 1.57948 7.36298 1.24133C6.98949 1.05491 6.43169 0.953035 5.68957 0.935694V7.94581C5.68957 8.43569 5.78416 8.76084 5.97332 8.92124C6.16734 9.08165 6.5675 9.16185 7.17381 9.16185V9.5H1.86257V9.16185C2.44462 9.16185 2.83023 9.08165 3.0194 8.92124C3.21342 8.7565 3.31043 8.43136 3.31043 7.94581V0.935694C2.58286 0.953035 2.02506 1.05491 1.63703 1.24133C0.92401 1.58815 0.521423 2.23627 0.429264 3.18569H0L0.0145513 0.5Z" }) })
62914
- }
62915
- );
62916
- };
62917
- const TextIcon$1 = TextIcon;
62918
- function Tree({ children, rootPath }) {
62919
- return /* @__PURE__ */ jsx("div", { className: "flex flex-col w-full py-2 text-xs", children: Children.map(children, (child) => {
62920
- return cloneElement$1(child, {
62921
- paths: [rootPath]
62922
- });
62923
- }) });
62924
63022
  }
62925
- Tree.Node = ({
62926
- children,
62927
- paths = [],
62928
- path,
62929
- level = 1,
62930
- type,
62931
- setActivePath
62932
- }) => {
62933
- const paddingLeft = level * 30;
62934
- const logo = type === "string" ? /* @__PURE__ */ jsx(TextIcon$1, {}) : type === "image" ? /* @__PURE__ */ jsx(ImageIcon$1, { className: "h-[9px] w-[9px]" }) : /* @__PURE__ */ jsx(Section$1, {});
62935
- return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
62936
- /* @__PURE__ */ jsx(
62937
- "button",
62938
- {
62939
- className: "flex justify-between w-full group py-2 text-xs font-[400] shrink-0",
62940
- onClick: () => {
62941
- setActivePath && setActivePath(path);
62942
- },
62943
- style: { paddingLeft },
62944
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2", children: [
62945
- logo,
62946
- /* @__PURE__ */ jsx("p", { children: path })
62947
- ] })
62948
- }
62949
- ),
62950
- children && /* @__PURE__ */ jsx(Fragment$1, { children: Children.map(children, (child) => {
62951
- return cloneElement$1(child, {
62952
- level: level + 1,
62953
- paths: [...paths, path]
62954
- });
62955
- }) })
63023
+ Grid.Column = ({ children, className: className2 }) => {
63024
+ const [header, body] = Children.toArray(children);
63025
+ return /* @__PURE__ */ jsxs("div", { className: classNames("flex flex-col", className2), children: [
63026
+ /* @__PURE__ */ jsx("div", { className: "flex items-center border-b border-border", children: header }),
63027
+ body
62956
63028
  ] });
62957
63029
  };
62958
63030
  const falsyToString = (value) => typeof value === "boolean" ? "".concat(value) : value === 0 ? "0" : value;
@@ -67456,8 +67528,10 @@ function ValFormField({
67456
67528
  return /* @__PURE__ */ jsx(
67457
67529
  StringField,
67458
67530
  {
67531
+ path,
67459
67532
  defaultValue: source,
67460
67533
  disabled,
67534
+ schema,
67461
67535
  registerPatchCallback,
67462
67536
  onSubmit
67463
67537
  }
@@ -67532,7 +67606,13 @@ function ValFormField({
67532
67606
  }
67533
67607
  return /* @__PURE__ */ jsxs("div", { children: [
67534
67608
  "Unsupported schema: ",
67535
- schema.type
67609
+ schema.type,
67610
+ " (source type: ",
67611
+ typeof source,
67612
+ " source:",
67613
+ " ",
67614
+ JSON.stringify(source),
67615
+ ")"
67536
67616
  ] });
67537
67617
  }
67538
67618
  function createImagePatch(path, data, filename, metadata) {
@@ -67591,6 +67671,7 @@ function ImageField({
67591
67671
  onSubmit,
67592
67672
  registerPatchCallback
67593
67673
  }) {
67674
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
67594
67675
  const [data, setData] = useState(
67595
67676
  null
67596
67677
  );
@@ -67614,7 +67695,7 @@ function ImageField({
67614
67695
  }
67615
67696
  }, [data, defaultValue]);
67616
67697
  useEffect(() => {
67617
- var _a;
67698
+ var _a2;
67618
67699
  if (hotspot) {
67619
67700
  if (metadata) {
67620
67701
  const newMetadata = {
@@ -67631,111 +67712,125 @@ function ImageField({
67631
67712
  console.error("Neither image metadata nor value is set");
67632
67713
  }
67633
67714
  } else {
67634
- if ((_a = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _a.hotspot) {
67715
+ if ((_a2 = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _a2.hotspot) {
67635
67716
  setHotspot(defaultValue.metadata.hotspot);
67636
67717
  }
67637
67718
  }
67638
67719
  }, [hotspot, defaultValue]);
67639
67720
  return /* @__PURE__ */ jsxs(FieldContainer, { children: [
67640
- /* @__PURE__ */ jsxs("div", { className: "flex flex-col max-w-4xl p-4 gap-y-4", children: [
67641
- data || url ? /* @__PURE__ */ jsxs("div", { className: "relative", children: [
67642
- hotspot && /* @__PURE__ */ jsx(
67643
- "div",
67644
- {
67645
- className: "rounded-full h-[20px] w-[20px] bg-accent absolute",
67646
- style: {
67647
- top: `${hotspot.y * 100}%`,
67648
- left: `${hotspot.x * 100}%`
67721
+ /* @__PURE__ */ jsx(
67722
+ "div",
67723
+ {
67724
+ className: "flex flex-col max-w-4xl p-2 border border-b-0 rounded-sm rounded-b-none gap-y-4 bg-background text-foreground border-input",
67725
+ children: data || url ? /* @__PURE__ */ jsxs("div", { className: "relative", children: [
67726
+ hotspot && /* @__PURE__ */ jsx(
67727
+ "div",
67728
+ {
67729
+ className: "rounded-full h-[12px] w-[12px] bg-background mix-blend-difference border-accent border-2 absolute pointer-events-none",
67730
+ style: {
67731
+ top: `${hotspot.y * 100}%`,
67732
+ left: `${hotspot.x * 100}%`
67733
+ }
67649
67734
  }
67650
- }
67651
- ),
67652
- /* @__PURE__ */ jsx(
67653
- "img",
67654
- {
67655
- src: (data == null ? void 0 : data.src) || url,
67656
- className: "w-full cursor-crosshair",
67657
- onClick: (ev) => {
67658
- const x = ev.nativeEvent.offsetX;
67659
- const y = ev.nativeEvent.offsetY;
67660
- const width2 = ev.currentTarget.clientWidth;
67661
- const height2 = ev.currentTarget.clientHeight;
67662
- const hotspotX = Math.round(x / width2 * 100) / 100;
67663
- const hotspotY = Math.round(y / height2 * 100) / 100;
67664
- setHotspot({ x: hotspotX, y: hotspotY, width: 1, height: 1 });
67735
+ ),
67736
+ /* @__PURE__ */ jsx(
67737
+ "img",
67738
+ {
67739
+ src: (data == null ? void 0 : data.src) || url,
67740
+ draggable: false,
67741
+ className: "w-full",
67742
+ style: {
67743
+ cursor: "crosshair"
67744
+ },
67745
+ onClick: (ev) => {
67746
+ const { width: width2, height: height2, left, top } = ev.currentTarget.getBoundingClientRect();
67747
+ const hotspotX = (ev.clientX - 6 - left) / width2;
67748
+ const hotspotY = (ev.clientY - 6 - top) / height2;
67749
+ setHotspot({
67750
+ x: hotspotX,
67751
+ y: hotspotY,
67752
+ width: 1,
67753
+ height: 1
67754
+ });
67755
+ }
67665
67756
  }
67666
- }
67667
- )
67668
- ] }) : /* @__PURE__ */ jsx("div", { children: "Select image below" }),
67669
- /* @__PURE__ */ jsxs("label", { htmlFor: `img_input:${path}`, className: "", children: [
67670
- /* @__PURE__ */ jsx("div", { className: "px-1 py-2 text-center rounded-md bg-primary text-background", children: "Update image" }),
67671
- /* @__PURE__ */ jsx(
67672
- "input",
67673
- {
67674
- hidden: true,
67675
- id: `img_input:${path}`,
67676
- type: "file",
67677
- onChange: (ev) => {
67678
- readImage(ev).then((res) => {
67679
- setData({ src: res.src, filename: res.filename });
67680
- if (res.width && res.height && res.mimeType) {
67681
- setMetadata({
67682
- sha256: res.sha256,
67683
- width: res.width,
67684
- height: res.height,
67685
- mimeType: res.mimeType,
67686
- hotspot
67687
- });
67688
- } else {
67689
- setMetadata(void 0);
67690
- setHotspot(void 0);
67691
- }
67692
- }).catch((err2) => {
67693
- console.error(err2.message);
67694
- setData(null);
67695
- setHotspot(void 0);
67757
+ )
67758
+ ] }) : /* @__PURE__ */ jsx("div", { children: "Select image below" })
67759
+ },
67760
+ path
67761
+ ),
67762
+ /* @__PURE__ */ jsxs("div", { className: "w-full p-4 border border-t-0 rounded-b-sm bg-background border-input", children: [
67763
+ /* @__PURE__ */ jsx(
67764
+ "label",
67765
+ {
67766
+ htmlFor: `img_input:${path}`,
67767
+ className: "block w-full px-1 py-2 text-sm text-center rounded-md cursor-pointer bg-primary text-background",
67768
+ children: "Update"
67769
+ }
67770
+ ),
67771
+ /* @__PURE__ */ jsx(
67772
+ "input",
67773
+ {
67774
+ hidden: true,
67775
+ id: `img_input:${path}`,
67776
+ type: "file",
67777
+ onChange: (ev) => {
67778
+ readImage(ev).then((res) => {
67779
+ setData({ src: res.src, filename: res.filename });
67780
+ if (res.width && res.height && res.mimeType) {
67781
+ setMetadata({
67782
+ sha256: res.sha256,
67783
+ width: res.width,
67784
+ height: res.height,
67785
+ mimeType: res.mimeType,
67786
+ hotspot
67787
+ });
67788
+ } else {
67696
67789
  setMetadata(void 0);
67697
- });
67698
- }
67790
+ setHotspot(void 0);
67791
+ }
67792
+ }).catch((err2) => {
67793
+ console.error(err2.message);
67794
+ setData(null);
67795
+ setHotspot(void 0);
67796
+ setMetadata(void 0);
67797
+ });
67699
67798
  }
67700
- )
67701
- ] })
67702
- ] }, path),
67703
- onSubmit && data && /* @__PURE__ */ jsx(
67704
- SubmitButton,
67705
- {
67706
- loading,
67707
- onClick: () => {
67708
- setLoading(true);
67709
- onSubmit(
67710
- (path2) => Promise.resolve(
67711
- createImagePatch(
67712
- path2,
67713
- data.src,
67714
- data.filename ?? null,
67715
- metadata
67716
- )
67717
- )
67718
- ).finally(() => {
67719
- setLoading(false);
67720
- setData(null);
67721
- setMetadata(void 0);
67722
- });
67723
67799
  }
67724
- }
67725
- ),
67726
- onSubmit && !data && metadata && /* @__PURE__ */ jsx(
67800
+ )
67801
+ ] }),
67802
+ onSubmit && /* @__PURE__ */ jsx(
67727
67803
  SubmitButton,
67728
67804
  {
67729
67805
  loading,
67806
+ enabled: !!data || ((_b = (_a = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _a.hotspot) == null ? void 0 : _b.height) !== (hotspot == null ? void 0 : hotspot.height) || ((_d = (_c = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _c.hotspot) == null ? void 0 : _d.width) !== (hotspot == null ? void 0 : hotspot.width) || ((_f = (_e = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _e.hotspot) == null ? void 0 : _f.x) !== (hotspot == null ? void 0 : hotspot.x) || ((_h = (_g = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _g.hotspot) == null ? void 0 : _h.y) !== (hotspot == null ? void 0 : hotspot.y) || ((_i = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _i.width) !== (metadata == null ? void 0 : metadata.width) || ((_j = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _j.height) !== (metadata == null ? void 0 : metadata.height) || ((_k = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _k.mimeType) !== (metadata == null ? void 0 : metadata.mimeType) || ((_l = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _l.sha256) !== (metadata == null ? void 0 : metadata.sha256),
67730
67807
  onClick: () => {
67731
- setLoading(true);
67732
- onSubmit(
67733
- (path2) => Promise.resolve(createImageMetadataPatch(path2, metadata))
67734
- ).finally(() => {
67735
- setLoading(false);
67736
- setData(null);
67737
- setMetadata(void 0);
67738
- });
67808
+ if (data) {
67809
+ setLoading(true);
67810
+ onSubmit(
67811
+ (path2) => Promise.resolve(
67812
+ createImagePatch(
67813
+ path2,
67814
+ data.src,
67815
+ data.filename ?? null,
67816
+ metadata
67817
+ )
67818
+ )
67819
+ ).finally(() => {
67820
+ setLoading(false);
67821
+ setData(null);
67822
+ setMetadata(void 0);
67823
+ });
67824
+ } else if (metadata) {
67825
+ setLoading(true);
67826
+ onSubmit(
67827
+ (path2) => Promise.resolve(createImageMetadataPatch(path2, metadata))
67828
+ ).finally(() => {
67829
+ setLoading(false);
67830
+ setData(null);
67831
+ setMetadata(void 0);
67832
+ });
67833
+ }
67739
67834
  }
67740
67835
  }
67741
67836
  )
@@ -67816,10 +67911,11 @@ function RichTextField({
67816
67911
  }
67817
67912
  }
67818
67913
  ),
67819
- onSubmit && didChange && /* @__PURE__ */ jsx(
67914
+ onSubmit && /* @__PURE__ */ jsx(
67820
67915
  SubmitButton,
67821
67916
  {
67822
67917
  loading: loading || !editor,
67918
+ enabled: didChange,
67823
67919
  onClick: () => {
67824
67920
  if (editor) {
67825
67921
  setLoading(true);
@@ -67901,10 +67997,11 @@ function KeyOfField({
67901
67997
  ]
67902
67998
  }
67903
67999
  ),
67904
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsx(
68000
+ onSubmit && /* @__PURE__ */ jsx(
67905
68001
  SubmitButton,
67906
68002
  {
67907
68003
  loading,
68004
+ enabled: defaultValue !== value,
67908
68005
  onClick: () => {
67909
68006
  setLoading(true);
67910
68007
  onSubmit(async (path) => [
@@ -67958,10 +68055,11 @@ function NumberField({
67958
68055
  type: "number"
67959
68056
  }
67960
68057
  ),
67961
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsx(
68058
+ onSubmit && /* @__PURE__ */ jsx(
67962
68059
  SubmitButton,
67963
68060
  {
67964
68061
  loading,
68062
+ enabled: defaultValue !== value,
67965
68063
  onClick: () => {
67966
68064
  setLoading(true);
67967
68065
  onSubmit(async (path) => {
@@ -67984,6 +68082,8 @@ function NumberField({
67984
68082
  function StringField({
67985
68083
  disabled,
67986
68084
  defaultValue,
68085
+ path,
68086
+ schema,
67987
68087
  registerPatchCallback,
67988
68088
  onSubmit
67989
68089
  }) {
@@ -67995,18 +68095,28 @@ function StringField({
67995
68095
  const ref = useRef(null);
67996
68096
  useEffect(() => {
67997
68097
  if (registerPatchCallback) {
67998
- registerPatchCallback(async (path) => {
68098
+ registerPatchCallback(async (path2) => {
67999
68099
  var _a;
68000
68100
  return [
68001
68101
  {
68002
68102
  op: "replace",
68003
- path,
68103
+ path: path2,
68004
68104
  value: ((_a = ref.current) == null ? void 0 : _a.value) || ""
68005
68105
  }
68006
68106
  ];
68007
68107
  });
68008
68108
  }
68009
68109
  }, []);
68110
+ const actualSchema = new StringSchema(
68111
+ schema.options ? {
68112
+ ...schema.options,
68113
+ regexp: schema.options.regexp ? new RegExp(
68114
+ schema.options.regexp.source,
68115
+ schema.options.regexp.flags
68116
+ ) : void 0
68117
+ } : void 0
68118
+ );
68119
+ const validationErrors = actualSchema.validate(path, value);
68010
68120
  return /* @__PURE__ */ jsxs(FieldContainer, { children: [
68011
68121
  /* @__PURE__ */ jsx(
68012
68122
  Input,
@@ -68017,18 +68127,20 @@ function StringField({
68017
68127
  onChange: (e) => setValue(e.target.value)
68018
68128
  }
68019
68129
  ),
68020
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsx(
68130
+ onSubmit && /* @__PURE__ */ jsx(
68021
68131
  SubmitButton,
68022
68132
  {
68133
+ validationErrors: validationErrors && validationErrors[path],
68023
68134
  loading,
68135
+ enabled: defaultValue !== value && !validationErrors,
68024
68136
  onClick: () => {
68025
68137
  setLoading(true);
68026
- onSubmit(async (path) => {
68138
+ onSubmit(async (path2) => {
68027
68139
  var _a;
68028
68140
  return [
68029
68141
  {
68030
68142
  op: "replace",
68031
- path,
68143
+ path: path2,
68032
68144
  value: ((_a = ref.current) == null ? void 0 : _a.value) || ""
68033
68145
  }
68034
68146
  ];
@@ -68040,14 +68152,24 @@ function StringField({
68040
68152
  )
68041
68153
  ] });
68042
68154
  }
68155
+ function InlineValidationErrors({ errors }) {
68156
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-y-1 p-2 rounded-md text-sm text-destructive-foreground bg-destructive", children: errors.map((error, i) => /* @__PURE__ */ jsx("div", { children: error.message }, i)) });
68157
+ }
68043
68158
  function FieldContainer({ children }) {
68044
- return /* @__PURE__ */ jsx("div", { className: "relative p-4 border rounded border-card", children });
68159
+ return /* @__PURE__ */ jsx("div", { className: "relative p-4", children });
68045
68160
  }
68046
68161
  function SubmitButton({
68047
68162
  loading,
68163
+ enabled,
68164
+ validationErrors,
68048
68165
  onClick
68049
68166
  }) {
68050
- return /* @__PURE__ */ jsx("div", { className: "sticky bottom-0", children: /* @__PURE__ */ jsx("div", { className: "flex justify-end w-full py-2", children: /* @__PURE__ */ jsx(Button, { disabled: loading, onClick, children: loading ? "Saving..." : "Save" }) }) });
68167
+ const { session } = useValOverlayContext();
68168
+ const isProxy = session.status === "success" && session.data.mode === "proxy";
68169
+ return /* @__PURE__ */ jsx("div", { className: "sticky bottom-0 m-4 ml-0", children: /* @__PURE__ */ jsxs("div", { className: "flex justify-between w-full gap-2 py-2 text-sm", children: [
68170
+ validationErrors ? /* @__PURE__ */ jsx(InlineValidationErrors, { errors: validationErrors || [] }) : /* @__PURE__ */ jsx("span", {}),
68171
+ /* @__PURE__ */ jsx(Button, { disabled: loading || !enabled, onClick, children: loading ? isProxy ? "Staging..." : "Saving..." : isProxy ? "Stage" : "Save" })
68172
+ ] }) });
68051
68173
  }
68052
68174
  const Logo = ({ className: className2 }) => {
68053
68175
  return /* @__PURE__ */ jsxs(
@@ -68064,7 +68186,7 @@ const Logo = ({ className: className2 }) => {
68064
68186
  "path",
68065
68187
  {
68066
68188
  d: "M5 5.36426C5 5.16309 5.16309 5 5.36426 5H17.6581C17.8593 5 18.0223 5.16309 18.0223 5.36426V28.4949C18.0223 28.696 17.8593 28.8591 17.6581 28.8591H5.36426C5.16309 28.8591 5 28.696 5 28.4949V5.36426Z",
68067
- fill: "#38CD98"
68189
+ fill: "hsl(var(--accent))"
68068
68190
  }
68069
68191
  ) }),
68070
68192
  /* @__PURE__ */ jsx("g", { filter: "url(#filter1_i_21_1677)", children: /* @__PURE__ */ jsx("circle", { cx: "11.4656", cy: "23.7595", r: "2.18557", fill: "currentColor" }) }),
@@ -72518,6 +72640,33 @@ function useSession(api) {
72518
72640
  }, [sessionResetId]);
72519
72641
  return session;
72520
72642
  }
72643
+ function Path({ children }) {
72644
+ const segs = children.split("/").filter((seg) => seg);
72645
+ return segs.map((seg, i) => {
72646
+ if (i !== segs.length - 1) {
72647
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
72648
+ /* @__PURE__ */ jsx("span", { children: seg }),
72649
+ /* @__PURE__ */ jsx("span", { className: "px-[2px] text-muted", children: "/" })
72650
+ ] }, `${children}/${seg}`);
72651
+ }
72652
+ return /* @__PURE__ */ jsx(Seg, { children: seg }, children);
72653
+ });
72654
+ }
72655
+ function Seg({ children }) {
72656
+ if (children.includes(".")) {
72657
+ const segs = children.split(".");
72658
+ return segs.map((seg, i) => {
72659
+ if (i !== segs.length - 1) {
72660
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
72661
+ /* @__PURE__ */ jsx("span", { children: i === 0 ? seg : JSON.parse(seg) }),
72662
+ /* @__PURE__ */ jsx("span", { className: "px-[2px] text-muted", children: "." })
72663
+ ] }, `${children}.${seg}`);
72664
+ }
72665
+ return /* @__PURE__ */ jsx("span", { children: i === 0 ? seg : JSON.parse(seg) }, children);
72666
+ });
72667
+ }
72668
+ return /* @__PURE__ */ jsx("span", { children });
72669
+ }
72521
72670
  const ValModulesContext = React__default.createContext(null);
72522
72671
  const useValModuleFromPath = (sourcePath) => {
72523
72672
  var _a, _b;
@@ -72668,12 +72817,13 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72668
72817
  "div",
72669
72818
  {
72670
72819
  id: "val-fullscreen-container",
72671
- className: "relative font-serif antialiased",
72820
+ className: "relative w-full h-[100] overflow-hidden font-serif antialiased bg-background text-primary",
72672
72821
  "data-mode": theme2,
72673
72822
  children: [
72674
- /* @__PURE__ */ jsx("div", { className: "fixed -translate-x-1/2 z-overlay left-1/2 bottom-4", children: /* @__PURE__ */ jsx(
72823
+ /* @__PURE__ */ jsx("div", { className: "fixed -translate-y-1/2 right-4 top-1/2 z-overlay", children: /* @__PURE__ */ jsx(
72675
72824
  ValMenu,
72676
72825
  {
72826
+ direction: "vertical",
72677
72827
  api,
72678
72828
  patches,
72679
72829
  onCommit: () => setPatchResetId((prev) => prev + 1)
@@ -72686,18 +72836,19 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72686
72836
  value: {
72687
72837
  hoverElem: hoverElemRef == null ? void 0 : hoverElemRef.current
72688
72838
  },
72689
- children: /* @__PURE__ */ jsx("div", { className: "text-primary bg-background", children: /* @__PURE__ */ jsxs(Grid, { children: [
72839
+ children: /* @__PURE__ */ jsx("div", { className: "text-primary", children: /* @__PURE__ */ jsxs(Grid, { children: [
72690
72840
  /* @__PURE__ */ jsx("div", { className: "px-4 h-[50px] flex items-center justify-center", children: /* @__PURE__ */ jsx(Logo$1, {}) }),
72691
72841
  /* @__PURE__ */ jsx(ScrollArea, { className: "px-4", children: modules ? /* @__PURE__ */ jsx(
72692
72842
  PathTree,
72693
72843
  {
72844
+ selectedPath,
72694
72845
  paths: Object.keys(modules),
72695
72846
  setSelectedModuleId: (path) => {
72696
72847
  navigate(path);
72697
72848
  }
72698
72849
  }
72699
72850
  ) : !error && /* @__PURE__ */ jsx("div", { className: "py-4", children: "Loading..." }) }),
72700
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start w-full h-[50px] gap-2 font-serif text-xs", children: [
72851
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start h-[50px] gap-2 font-serif text-xs", children: [
72701
72852
  /* @__PURE__ */ jsx(
72702
72853
  "button",
72703
72854
  {
@@ -72707,10 +72858,10 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72707
72858
  children: /* @__PURE__ */ jsx(ChevronLeft, {})
72708
72859
  }
72709
72860
  ),
72710
- /* @__PURE__ */ jsx("p", { children: selectedPath || "/" })
72861
+ /* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Path, { children: selectedPath || "/" }) })
72711
72862
  ] }),
72712
72863
  /* @__PURE__ */ jsxs("div", { className: "p-4", children: [
72713
- error && /* @__PURE__ */ jsxs("div", { className: "text-lg text-destructive-foreground", children: [
72864
+ error && /* @__PURE__ */ jsxs("div", { className: "p-4 text-lg bg-destructive text-destructive-foreground max-w-xl", children: [
72714
72865
  "ERROR: ",
72715
72866
  error
72716
72867
  ] }),
@@ -72779,7 +72930,7 @@ function AnyVal({
72779
72930
  initOnSubmit,
72780
72931
  top
72781
72932
  }) {
72782
- if (source === null || schema.opt) {
72933
+ if (schema.opt) {
72783
72934
  return /* @__PURE__ */ jsx(
72784
72935
  ValOptional,
72785
72936
  {
@@ -72792,6 +72943,18 @@ function AnyVal({
72792
72943
  }
72793
72944
  );
72794
72945
  }
72946
+ if (source === null) {
72947
+ return /* @__PURE__ */ jsx(
72948
+ ValDefaultOf,
72949
+ {
72950
+ source,
72951
+ schema,
72952
+ path,
72953
+ setSelectedPath,
72954
+ initOnSubmit
72955
+ }
72956
+ );
72957
+ }
72795
72958
  if (schema.type === "object") {
72796
72959
  if (typeof source !== "object" || isJsonArray(source)) {
72797
72960
  return /* @__PURE__ */ jsxs("div", { children: [
@@ -72817,15 +72980,18 @@ function AnyVal({
72817
72980
  typeof source
72818
72981
  ] });
72819
72982
  }
72820
- return /* @__PURE__ */ jsx(
72821
- ValList,
72822
- {
72823
- source,
72824
- path,
72825
- schema,
72826
- setSelectedPath
72827
- }
72828
- );
72983
+ return /* @__PURE__ */ jsxs("div", { children: [
72984
+ field ? /* @__PURE__ */ jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsx(Path, { children: path }),
72985
+ /* @__PURE__ */ jsx(
72986
+ ValList,
72987
+ {
72988
+ source,
72989
+ path,
72990
+ schema,
72991
+ setSelectedPath
72992
+ }
72993
+ )
72994
+ ] });
72829
72995
  } else if (schema.type === "record") {
72830
72996
  if (typeof source !== "object") {
72831
72997
  return /* @__PURE__ */ jsxs("div", { children: [
@@ -72841,18 +73007,38 @@ function AnyVal({
72841
73007
  schema.type
72842
73008
  ] });
72843
73009
  }
72844
- return /* @__PURE__ */ jsx(
72845
- ValRecord,
72846
- {
72847
- source,
72848
- path,
72849
- schema,
72850
- setSelectedPath
72851
- }
72852
- );
73010
+ return /* @__PURE__ */ jsxs("div", { children: [
73011
+ field ? /* @__PURE__ */ jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsx(Path, { children: path }),
73012
+ /* @__PURE__ */ jsx(
73013
+ ValRecord,
73014
+ {
73015
+ source,
73016
+ path,
73017
+ schema,
73018
+ setSelectedPath
73019
+ }
73020
+ )
73021
+ ] });
73022
+ } else if ((schema == null ? void 0 : schema.type) === "union") {
73023
+ if (schema.key && typeof source === "object" && !isJsonArray(source)) {
73024
+ return /* @__PURE__ */ jsx(
73025
+ ValTaggedUnion,
73026
+ {
73027
+ tag: schema.key,
73028
+ source,
73029
+ path,
73030
+ schema,
73031
+ initOnSubmit,
73032
+ setSelectedPath,
73033
+ top
73034
+ }
73035
+ );
73036
+ }
73037
+ } else if ((schema == null ? void 0 : schema.type) === "literal") {
73038
+ return /* @__PURE__ */ jsx(Fragment$1, {});
72853
73039
  }
72854
73040
  return /* @__PURE__ */ jsxs("div", { className: "py-2 gap-y-4", children: [
72855
- /* @__PURE__ */ jsx("div", { className: "text-left", children: field || path }),
73041
+ field ? /* @__PURE__ */ jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsx(Path, { children: path }),
72856
73042
  /* @__PURE__ */ jsx(
72857
73043
  ValFormField,
72858
73044
  {
@@ -72865,6 +73051,97 @@ function AnyVal({
72865
73051
  )
72866
73052
  ] });
72867
73053
  }
73054
+ function ValTaggedUnion({
73055
+ tag,
73056
+ path,
73057
+ source,
73058
+ schema,
73059
+ setSelectedPath,
73060
+ initOnSubmit,
73061
+ top
73062
+ }) {
73063
+ const [currentKey, setCurrentKey] = useState(null);
73064
+ const [current, setCurrent] = useState(null);
73065
+ const keys = schema.items.flatMap((item) => {
73066
+ if (item.type === "object" && item.items[tag]) {
73067
+ const maybeLiteral = item.items[tag];
73068
+ if (maybeLiteral.type === "literal") {
73069
+ return [maybeLiteral.value];
73070
+ }
73071
+ }
73072
+ return [];
73073
+ });
73074
+ useEffect(() => {
73075
+ if (!currentKey) {
73076
+ const maybeCurrentKey = source == null ? void 0 : source[tag];
73077
+ if (maybeCurrentKey && typeof maybeCurrentKey === "string") {
73078
+ setCurrentKey(maybeCurrentKey);
73079
+ }
73080
+ } else {
73081
+ const sourceKey = source[tag];
73082
+ const unionSchema = schema.items.find((item) => {
73083
+ if (item.type === "object" && item.items[tag]) {
73084
+ const maybeLiteral = item.items[tag];
73085
+ if (maybeLiteral.type === "literal") {
73086
+ return maybeLiteral.value === currentKey;
73087
+ }
73088
+ return false;
73089
+ }
73090
+ });
73091
+ if (sourceKey && typeof sourceKey === "string" && unionSchema) {
73092
+ setCurrent({ source, schema: unionSchema });
73093
+ } else {
73094
+ console.error(
73095
+ "Could not find source or schema of key",
73096
+ currentKey,
73097
+ source,
73098
+ schema
73099
+ );
73100
+ setCurrent(null);
73101
+ }
73102
+ }
73103
+ }, [currentKey, source, schema, keys]);
73104
+ if (keys.length !== schema.items.length) {
73105
+ console.warn("Not all items have tag:", tag);
73106
+ }
73107
+ const loading = false;
73108
+ return /* @__PURE__ */ jsxs(
73109
+ "div",
73110
+ {
73111
+ className: classNames("flex flex-col gap-y-8", {
73112
+ "border-l-2 border-border pl-6": !top
73113
+ }),
73114
+ children: [
73115
+ /* @__PURE__ */ jsxs(
73116
+ Select,
73117
+ {
73118
+ defaultValue: currentKey ?? void 0,
73119
+ disabled: loading,
73120
+ onValueChange: (key) => {
73121
+ setCurrentKey(key);
73122
+ },
73123
+ children: [
73124
+ /* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select type" }) }),
73125
+ /* @__PURE__ */ jsx(SelectContent, { children: keys.map((tag2) => /* @__PURE__ */ jsx(SelectItem, { value: tag2.toString(), children: tag2.toString() }, tag2)) })
73126
+ ]
73127
+ }
73128
+ ),
73129
+ current && /* @__PURE__ */ jsx(
73130
+ AnyVal,
73131
+ {
73132
+ path,
73133
+ source: current.source,
73134
+ schema: current.schema,
73135
+ setSelectedPath,
73136
+ initOnSubmit,
73137
+ top
73138
+ }
73139
+ )
73140
+ ]
73141
+ },
73142
+ path
73143
+ );
73144
+ }
72868
73145
  function ValObject({
72869
73146
  path,
72870
73147
  source,
@@ -72885,7 +73162,7 @@ function ValObject({
72885
73162
  AnyVal,
72886
73163
  {
72887
73164
  path: subPath,
72888
- source: source[key],
73165
+ source: (source == null ? void 0 : source[key]) ?? null,
72889
73166
  schema: property,
72890
73167
  setSelectedPath,
72891
73168
  field: key,
@@ -73208,8 +73485,8 @@ function ValOptional({
73208
73485
  field
73209
73486
  }) {
73210
73487
  const [enable, setEnable] = useState(source !== null);
73211
- return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-6", children: [
73212
- field ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start gap-x-4", children: [
73488
+ return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
73489
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start gap-x-4", children: [
73213
73490
  /* @__PURE__ */ jsx(
73214
73491
  Switch,
73215
73492
  {
@@ -73219,16 +73496,8 @@ function ValOptional({
73219
73496
  }
73220
73497
  }
73221
73498
  ),
73222
- /* @__PURE__ */ jsx("span", { children: field })
73223
- ] }) : /* @__PURE__ */ jsx(
73224
- Switch,
73225
- {
73226
- checked: enable,
73227
- onClick: () => {
73228
- setEnable((prev) => !prev);
73229
- }
73230
- }
73231
- ),
73499
+ /* @__PURE__ */ jsx("span", { children: field ? field : /* @__PURE__ */ jsx(Path, { children: path }) })
73500
+ ] }),
73232
73501
  enable && /* @__PURE__ */ jsx(
73233
73502
  ValDefaultOf,
73234
73503
  {
@@ -73297,61 +73566,62 @@ function ValDefaultOf({
73297
73566
  function isJsonArray(source) {
73298
73567
  return Array.isArray(source);
73299
73568
  }
73300
- function pathsToTree(paths) {
73301
- const tree = {};
73569
+ function dirPaths(paths) {
73570
+ const res = {};
73302
73571
  paths.forEach((path) => {
73303
- const parts = path.split("/").filter((part) => part !== "");
73304
- let current = tree;
73305
- parts.forEach((part) => {
73306
- if (!current[part]) {
73307
- current[part] = {};
73572
+ const allParts = path.split("/").filter((part) => part !== "");
73573
+ if (allParts.length === 1) {
73574
+ if (!res[""]) {
73575
+ res[""] = [];
73308
73576
  }
73309
- current = current[part];
73310
- });
73577
+ res[""].push(allParts[0]);
73578
+ } else if (allParts.length > 1) {
73579
+ const dir = allParts.slice(0, allParts.length - 1).join("/");
73580
+ const file = allParts.slice(-1)[0];
73581
+ if (!res[dir]) {
73582
+ res[dir] = [];
73583
+ }
73584
+ res[dir].push(file);
73585
+ }
73311
73586
  });
73312
- return tree;
73587
+ return res;
73313
73588
  }
73314
73589
  function PathTree({
73590
+ selectedPath,
73315
73591
  paths,
73316
73592
  setSelectedModuleId
73317
73593
  }) {
73318
- const tree = pathsToTree(paths);
73319
- return /* @__PURE__ */ jsx(Tree, { children: Object.entries(tree).map(([name, subTree]) => /* @__PURE__ */ jsx("div", { className: "px-4 py-2", children: /* @__PURE__ */ jsx(
73320
- PathNode,
73321
- {
73322
- name,
73323
- tree: subTree,
73324
- moduleId: `/${name}`,
73325
- setSelectedModuleId
73326
- }
73327
- ) }, `/${name}`)) });
73328
- }
73329
- function PathNode({
73330
- name,
73331
- tree,
73332
- moduleId,
73333
- setSelectedModuleId
73334
- }) {
73335
- return /* @__PURE__ */ jsxs("div", { children: [
73336
- /* @__PURE__ */ jsx(
73337
- "button",
73338
- {
73339
- onClick: () => {
73340
- setSelectedModuleId(moduleId);
73341
- },
73342
- children: name
73343
- }
73344
- ),
73345
- Object.entries(tree).map(([childName, childTree]) => /* @__PURE__ */ jsx("div", { className: "px-4 py-1", children: /* @__PURE__ */ jsx(
73346
- PathNode,
73347
- {
73348
- name: childName,
73349
- tree: childTree,
73350
- moduleId: `${moduleId}/${childName}`,
73351
- setSelectedModuleId
73352
- }
73353
- ) }, `${moduleId}/${childName}`))
73354
- ] });
73594
+ const tree = dirPaths(paths);
73595
+ const selectedModuleId = selectedPath && Internal.splitModuleIdAndModulePath(selectedPath)[0];
73596
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-col w-full py-2 text-xs", children: Object.entries(tree).map(([dir, files]) => {
73597
+ return /* @__PURE__ */ jsxs("div", { className: "px-4 py-2", children: [
73598
+ dir && /* @__PURE__ */ jsx("div", { className: "font-bold", children: /* @__PURE__ */ jsx(Path, { children: dir }) }),
73599
+ /* @__PURE__ */ jsx(
73600
+ "div",
73601
+ {
73602
+ className: classNames({
73603
+ "flex flex-col py-2 justify-start items-start": !!dir
73604
+ }),
73605
+ children: files.map((file) => {
73606
+ const moduleId = `/${dir}/${file}`;
73607
+ return /* @__PURE__ */ jsx(
73608
+ "button",
73609
+ {
73610
+ className: classNames("block px-2 py-1 rounded-full", {
73611
+ "bg-accent text-accent-foreground": selectedModuleId === moduleId
73612
+ }),
73613
+ onClick: () => {
73614
+ setSelectedModuleId(moduleId);
73615
+ },
73616
+ children: file
73617
+ },
73618
+ moduleId
73619
+ );
73620
+ })
73621
+ }
73622
+ )
73623
+ ] }, `/${dir}`);
73624
+ }) });
73355
73625
  }
73356
73626
  const theme = {
73357
73627
  tags: {
@@ -73543,76 +73813,90 @@ function ValOverlay({
73543
73813
  windowSize,
73544
73814
  setWindowSize
73545
73815
  },
73546
- children: /* @__PURE__ */ jsxs("div", { "data-mode": theme2, className: "antialiased", children: [
73547
- /* @__PURE__ */ jsx("div", { className: "fixed -translate-x-1/2 z-overlay left-1/2 bottom-4", children: /* @__PURE__ */ jsx(
73548
- ValMenu,
73549
- {
73550
- api,
73551
- patches,
73552
- onCommit: () => {
73553
- setPatchResetId((patchResetId) => patchResetId + 1);
73554
- }
73555
- }
73556
- ) }),
73557
- session.status === "success" && session.data.enabled && editMode === "hover" && hoverTarget.path && /* @__PURE__ */ jsx(
73558
- ValHover,
73559
- {
73560
- hoverTarget,
73561
- setHoverTarget,
73562
- setEditMode,
73563
- setWindowTarget
73564
- }
73565
- ),
73566
- editMode === "window" && windowTarget && /* @__PURE__ */ jsx(
73567
- ValWindow,
73568
- {
73569
- onClose: () => {
73570
- setWindowTarget(null);
73571
- setEditMode("hover");
73572
- },
73573
- children: /* @__PURE__ */ jsx(
73574
- "div",
73816
+ children: /* @__PURE__ */ jsxs(
73817
+ "div",
73818
+ {
73819
+ "data-mode": theme2,
73820
+ className: "font-serif antialiased",
73821
+ style: {
73822
+ position: "fixed",
73823
+ top: 0,
73824
+ left: 0,
73825
+ zIndex: 8999
73826
+ // 1 less than the NextJS error z-index: 9000
73827
+ },
73828
+ children: [
73829
+ /* @__PURE__ */ jsx("div", { className: "fixed -translate-y-1/2 right-4 top-1/2 z-overlay", children: /* @__PURE__ */ jsx(
73830
+ ValMenu,
73575
73831
  {
73576
- className: "p-4",
73577
- style: {
73578
- maxHeight: windowSize == null ? void 0 : windowSize.innerHeight
73832
+ direction: "vertical",
73833
+ api,
73834
+ patches,
73835
+ onCommit: () => {
73836
+ setPatchResetId((patchResetId) => patchResetId + 1);
73837
+ }
73838
+ }
73839
+ ) }),
73840
+ session.status === "success" && session.data.enabled && editMode === "hover" && hoverTarget.path && /* @__PURE__ */ jsx(
73841
+ ValHover,
73842
+ {
73843
+ hoverTarget,
73844
+ setHoverTarget,
73845
+ setEditMode,
73846
+ setWindowTarget
73847
+ }
73848
+ ),
73849
+ editMode === "window" && windowTarget && /* @__PURE__ */ jsx(
73850
+ ValWindow,
73851
+ {
73852
+ onClose: () => {
73853
+ setWindowTarget(null);
73854
+ setEditMode("hover");
73579
73855
  },
73580
- children: Object.entries(formData).map(([path, data]) => {
73581
- if (data.status !== "success") {
73582
- return /* @__PURE__ */ jsxs("div", { children: [
73583
- path,
73584
- ": ",
73585
- data.status
73586
- ] }, path);
73587
- }
73588
- const { source, schema } = data.data;
73589
- if (!source || !schema) {
73590
- return /* @__PURE__ */ jsxs("div", { children: [
73591
- "Module: ",
73592
- path,
73593
- " is missing source or schema"
73594
- ] });
73595
- }
73596
- return /* @__PURE__ */ jsx(
73597
- AnyVal,
73598
- {
73599
- initOnSubmit,
73600
- path,
73601
- schema,
73602
- source,
73603
- setSelectedPath: () => {
73604
- },
73605
- field: path,
73606
- top: true
73856
+ children: /* @__PURE__ */ jsx(
73857
+ "div",
73858
+ {
73859
+ className: "p-4",
73860
+ style: {
73861
+ maxHeight: windowSize == null ? void 0 : windowSize.innerHeight
73607
73862
  },
73608
- path
73609
- );
73610
- })
73863
+ children: Object.entries(formData).map(([path, data]) => {
73864
+ if (data.status !== "success") {
73865
+ return /* @__PURE__ */ jsxs("div", { children: [
73866
+ path,
73867
+ ": ",
73868
+ data.status
73869
+ ] }, path);
73870
+ }
73871
+ const { source, schema } = data.data;
73872
+ if (!source || !schema) {
73873
+ return /* @__PURE__ */ jsxs("div", { children: [
73874
+ "Module: ",
73875
+ path,
73876
+ " is missing source or schema"
73877
+ ] });
73878
+ }
73879
+ return /* @__PURE__ */ jsx(
73880
+ AnyVal,
73881
+ {
73882
+ initOnSubmit,
73883
+ path,
73884
+ schema,
73885
+ source,
73886
+ setSelectedPath: () => {
73887
+ },
73888
+ top: true
73889
+ },
73890
+ path
73891
+ );
73892
+ })
73893
+ }
73894
+ )
73611
73895
  }
73612
73896
  )
73613
- }
73614
- )
73615
- ] })
73897
+ ]
73898
+ }
73899
+ )
73616
73900
  }
73617
73901
  );
73618
73902
  }
@@ -73679,7 +73963,7 @@ function ValHover({
73679
73963
  "div",
73680
73964
  {
73681
73965
  id: "val-hover",
73682
- className: "fixed border-2 cursor-pointer z-overlay-hover border-highlight drop-shadow-[0px_0px_12px_rgba(56,205,152,0.60)]",
73966
+ className: "fixed border-2 cursor-pointer z-overlay-hover border-accent",
73683
73967
  style: {
73684
73968
  top: rect == null ? void 0 : rect.top,
73685
73969
  left: rect == null ? void 0 : rect.left,
@@ -73700,7 +73984,7 @@ function ValHover({
73700
73984
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-end w-full text-xs", children: /* @__PURE__ */ jsx(
73701
73985
  "div",
73702
73986
  {
73703
- className: "flex items-center justify-center px-3 py-1 text-primary bg-highlight",
73987
+ className: "flex items-center justify-center px-3 py-1 text-accent-foreground bg-accent border-l-2 border-b-2 border-accent",
73704
73988
  style: {
73705
73989
  maxHeight: (rect == null ? void 0 : rect.height) && rect.height - 4,
73706
73990
  fontSize: (rect == null ? void 0 : rect.height) && rect.height <= 16 ? rect.height - 4 : void 0
@@ -73744,9 +74028,19 @@ function useHoverTarget(editMode) {
73744
74028
  setTargetRect(targetElement.getBoundingClientRect());
73745
74029
  }
73746
74030
  };
74031
+ const observer = new ResizeObserver(() => {
74032
+ if (targetElement) {
74033
+ setTargetRect(targetElement.getBoundingClientRect());
74034
+ }
74035
+ });
74036
+ const valUIElement = document.getElementById("val-ui");
74037
+ if (targetElement && valUIElement) {
74038
+ observer.observe(valUIElement);
74039
+ }
73747
74040
  document.addEventListener("scroll", scrollListener, { passive: true });
73748
74041
  return () => {
73749
74042
  document.removeEventListener("scroll", scrollListener);
74043
+ observer.disconnect();
73750
74044
  };
73751
74045
  }, [targetElement]);
73752
74046
  return [
@@ -73793,7 +74087,7 @@ function useInitEditMode() {
73793
74087
  }, []);
73794
74088
  return [editMode, setEditMode];
73795
74089
  }
73796
- 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.5 | 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: #e5e7eb; /* 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-feature-settings: inherit; /* 1 */\n font-variation-settings: 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/*\nReset default styling for dialogs.\n*/\n\ndialog {\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/* :host for use with Shadow DOM, copied from the TailwindCSS prelude */\n\n:host {\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 0 0% 57.3%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 159, 60%, 51%, 1;\n --accent-foreground: 222.2 47.4% 11.2%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n }\n\n:root {\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 0 0% 57.3%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 159, 60%, 51%, 1;\n --accent-foreground: 222.2 47.4% 11.2%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n }\n\n/* dark theme */\n\n*[data-mode=\"dark\"] {\n --background: 0 0% 4%;\n --foreground: 210 40% 98%;\n\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n\n --primary: 210 40% 98%;\n --primary-foreground: 222.2 47.4% 11.2%;\n\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n\n --muted: 178, 23%, 76%, 1;\n --muted-foreground: 215 20.2% 65.1%;\n\n --accent: 159, 60%, 51%, 1;\n --accent-foreground: 210 40% 98%;\n\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 212.7 26.8% 83.9%;\n }\n\n* {\n border-color: hsl(var(--border));\n}\n\nbody {\n background-color: hsl(var(--background));\n color: hsl(var(--foreground));\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.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.invisible {\n visibility: hidden;\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.sticky {\n position: sticky;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-left-2 {\n left: -0.5rem;\n}\n.-right-\\[10px\\] {\n right: -10px;\n}\n.-top-\\[10px\\] {\n top: -10px;\n}\n.-top-\\[4px\\] {\n top: -4px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.bottom-4 {\n bottom: 1rem;\n}\n.left-0 {\n left: 0px;\n}\n.left-1 {\n left: 0.25rem;\n}\n.left-1\\/2 {\n left: 50%;\n}\n.left-2 {\n left: 0.5rem;\n}\n.left-\\[50\\%\\] {\n left: 50%;\n}\n.right-0 {\n right: 0px;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-\\[16px\\] {\n right: 16px;\n}\n.top-0 {\n top: 0px;\n}\n.top-4 {\n top: 1rem;\n}\n.top-\\[50\\%\\] {\n top: 50%;\n}\n.z-50 {\n z-index: 50;\n}\n.z-\\[5\\] {\n z-index: 5;\n}\n.z-overlay {\n z-index: 4;\n}\n.-mx-1 {\n margin-left: -0.25rem;\n margin-right: -0.25rem;\n}\n.-my-2 {\n margin-top: -0.5rem;\n margin-bottom: -0.5rem;\n}\n.-my-\\[100px\\] {\n margin-top: -100px;\n margin-bottom: -100px;\n}\n.mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-\\[20px\\] {\n margin-left: 20px;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.block {\n display: block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.aspect-square {\n aspect-ratio: 1 / 1;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-11 {\n height: 2.75rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-2\\.5 {\n height: 0.625rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\.5 {\n height: 0.875rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-9 {\n height: 2.25rem;\n}\n.h-\\[14px\\] {\n height: 14px;\n}\n.h-\\[18px\\] {\n height: 18px;\n}\n.h-\\[1px\\] {\n height: 1px;\n}\n.h-\\[20px\\] {\n height: 20px;\n}\n.h-\\[22px\\] {\n height: 22px;\n}\n.h-\\[24px\\] {\n height: 24px;\n}\n.h-\\[32px\\] {\n height: 32px;\n}\n.h-\\[50px\\] {\n height: 50px;\n}\n.h-\\[75px\\] {\n height: 75px;\n}\n.h-\\[9px\\] {\n height: 9px;\n}\n.h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n}\n.h-full {\n height: 100%;\n}\n.h-px {\n height: 1px;\n}\n.h-screen {\n height: 100vh;\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-1\\/3 {\n width: 33.333333%;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-2 {\n width: 0.5rem;\n}\n.w-2\\.5 {\n width: 0.625rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\.5 {\n width: 0.875rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-\\[14px\\] {\n width: 14px;\n}\n.w-\\[1px\\] {\n width: 1px;\n}\n.w-\\[20px\\] {\n width: 20px;\n}\n.w-\\[24px\\] {\n width: 24px;\n}\n.w-\\[32px\\] {\n width: 32px;\n}\n.w-\\[44px\\] {\n width: 44px;\n}\n.w-\\[9px\\] {\n width: 9px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-\\[320px\\] {\n min-width: 320px;\n}\n.min-w-\\[500px\\] {\n min-width: 500px;\n}\n.min-w-\\[8rem\\] {\n min-width: 8rem;\n}\n.min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n}\n.max-w-4xl {\n max-width: 56rem;\n}\n.max-w-\\[1000px\\] {\n max-width: 1000px;\n}\n.max-w-\\[10vw\\] {\n max-width: 10vw;\n}\n.max-w-\\[300px\\] {\n max-width: 300px;\n}\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-auto {\n flex: 1 1 auto;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.border-collapse {\n border-collapse: collapse;\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.translate-x-\\[-50\\%\\] {\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.translate-y-\\[-50\\%\\] {\n --tw-translate-y: -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-90 {\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-90 {\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.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.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-col-resize {\n cursor: col-resize;\n}\n.cursor-crosshair {\n cursor: crosshair;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-grab {\n cursor: grab;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.cursor-se-resize {\n cursor: se-resize;\n}\n.touch-none {\n touch-action: none;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.resize-none {\n resize: 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.grid-cols-\\[min-content_1fr\\] {\n grid-template-columns: min-content 1fr;\n}\n.grid-rows-\\[1fr\\2c _min-content\\] {\n grid-template-rows: 1fr min-content;\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-col-reverse {\n flex-direction: column-reverse;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.justify-start {\n justify-content: flex-start;\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: 0.25rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-5 {\n gap: 1.25rem;\n}\n.gap-\\[0\\.5em\\] {\n gap: 0.5em;\n}\n.gap-\\[36px\\] {\n gap: 36px;\n}\n.gap-x-2 {\n -moz-column-gap: 0.5rem;\n column-gap: 0.5rem;\n}\n.gap-x-3 {\n -moz-column-gap: 0.75rem;\n column-gap: 0.75rem;\n}\n.gap-x-4 {\n -moz-column-gap: 1rem;\n column-gap: 1rem;\n}\n.gap-y-2 {\n row-gap: 0.5rem;\n}\n.gap-y-4 {\n row-gap: 1rem;\n}\n.gap-y-6 {\n row-gap: 1.5rem;\n}\n.gap-y-8 {\n row-gap: 2rem;\n}\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-clip {\n overflow: clip;\n}\n.overflow-scroll {\n overflow: scroll;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n.overflow-y-scroll {\n overflow-y: scroll;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-\\[inherit\\] {\n border-radius: inherit;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: var(--radius);\n}\n.rounded-md {\n border-radius: calc(var(--radius) - 2px);\n}\n.rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-\\[2px\\] {\n border-width: 2px;\n}\n.border-y {\n border-top-width: 1px;\n border-bottom-width: 1px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-l {\n border-left-width: 1px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-accent {\n border-color: hsl(var(--accent));\n}\n.border-border {\n border-color: hsl(var(--border));\n}\n.border-card {\n border-color: hsl(var(--card));\n}\n.border-gray-400 {\n --tw-border-opacity: 1;\n border-color: rgb(156 163 175 / var(--tw-border-opacity));\n}\n.border-input {\n border-color: hsl(var(--input));\n}\n.border-primary {\n border-color: hsl(var(--primary));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-l-transparent {\n border-left-color: transparent;\n}\n.border-t-transparent {\n border-top-color: transparent;\n}\n.bg-accent {\n background-color: hsl(var(--accent));\n}\n.bg-background {\n background-color: hsl(var(--background));\n}\n.bg-background\\/80 {\n background-color: hsl(var(--background) / 0.8);\n}\n.bg-border {\n background-color: hsl(var(--border));\n}\n.bg-card {\n background-color: hsl(var(--card));\n}\n.bg-card-foreground {\n background-color: hsl(var(--card-foreground));\n}\n.bg-destructive {\n background-color: hsl(var(--destructive));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n.bg-muted {\n background-color: hsl(var(--muted));\n}\n.bg-popover {\n background-color: hsl(var(--popover));\n}\n.bg-primary {\n background-color: hsl(var(--primary));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.bg-secondary {\n background-color: hsl(var(--secondary));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-gradient-to-b {\n background-image: linear-gradient(to bottom, var(--tw-gradient-stops));\n}\n.bg-gradient-to-br {\n background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));\n}\n.from-background\\/90 {\n --tw-gradient-from: hsl(var(--background) / 0.9) var(--tw-gradient-from-position);\n --tw-gradient-to: hsl(var(--background) / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-transparent {\n --tw-gradient-from: transparent var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-40\\% {\n --tw-gradient-from-position: 40%;\n}\n.to-background {\n --tw-gradient-to: hsl(var(--background)) var(--tw-gradient-to-position);\n}\n.fill-current {\n fill: currentColor;\n}\n.fill-white {\n fill: #fff;\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-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-10 {\n padding: 2.5rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-\\[1px\\] {\n padding: 1px;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.px-\\[24px\\] {\n padding-left: 24px;\n padding-right: 24px;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-7 {\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n}\n.py-\\[2px\\] {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.pb-0 {\n padding-bottom: 0px;\n}\n.pb-20 {\n padding-bottom: 5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pl-6 {\n padding-left: 1.5rem;\n}\n.pl-8 {\n padding-left: 2rem;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pt-0 {\n padding-top: 0px;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-start {\n text-align: start;\n}\n.font-sans {\n font-family: 'Roboto', sans-serif;\n}\n.font-serif {\n font-family: 'Space 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-\\[0\\.8rem\\] {\n font-size: 0.8rem;\n}\n.text-\\[12px\\] {\n font-size: 12px;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-\\[12px\\] {\n font-weight: 12px;\n}\n.font-\\[400\\] {\n font-weight: 400;\n}\n.font-\\[500\\] {\n font-weight: 500;\n}\n.font-\\[550\\] {\n font-weight: 550;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.italic {\n font-style: italic;\n}\n.leading-4 {\n line-height: 1rem;\n}\n.leading-none {\n line-height: 1;\n}\n.tracking-\\[0\\.04em\\] {\n letter-spacing: 0.04em;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.tracking-widest {\n letter-spacing: 0.1em;\n}\n.text-accent {\n color: hsl(var(--accent));\n}\n.text-accent-foreground {\n color: hsl(var(--accent-foreground));\n}\n.text-background {\n color: hsl(var(--background));\n}\n.text-card-foreground {\n color: hsl(var(--card-foreground));\n}\n.text-current {\n color: currentColor;\n}\n.text-destructive {\n color: hsl(var(--destructive));\n}\n.text-destructive-foreground {\n color: hsl(var(--destructive-foreground));\n}\n.text-foreground {\n color: hsl(var(--foreground));\n}\n.text-muted {\n color: hsl(var(--muted));\n}\n.text-muted-foreground {\n color: hsl(var(--muted-foreground));\n}\n.text-popover-foreground {\n color: hsl(var(--popover-foreground));\n}\n.text-primary {\n color: hsl(var(--primary));\n}\n.text-primary-foreground {\n color: hsl(var(--primary-foreground));\n}\n.text-secondary-foreground {\n color: hsl(var(--secondary-foreground));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.underline-offset-4 {\n text-underline-offset: 4px;\n}\n.antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-70 {\n opacity: 0.7;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px 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.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.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px 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.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 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.outline {\n outline-style: solid;\n}\n.ring-0 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-offset-background {\n --tw-ring-offset-color: hsl(var(--background));\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.drop-shadow-\\[0px_0px_12px_rgba\\(56\\2c 205\\2c 152\\2c 0\\.60\\)\\] {\n --tw-drop-shadow: drop-shadow(0px 0px 12px rgba(56,205,152,0.60));\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.filter {\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.backdrop-blur-lg {\n --tw-backdrop-blur: blur(16px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\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-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\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.duration-150 {\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n@keyframes enter {\n\n from {\n opacity: var(--tw-enter-opacity, 1);\n transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));\n }\n}\n@keyframes exit {\n\n to {\n opacity: var(--tw-exit-opacity, 1);\n transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));\n }\n}\n.animate-in {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n}\n.fade-in-0 {\n --tw-enter-opacity: 0;\n}\n.zoom-in-95 {\n --tw-enter-scale: .95;\n}\n.duration-150 {\n animation-duration: 150ms;\n}\n.duration-200 {\n animation-duration: 200ms;\n}\n.ease-in-out {\n animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.file\\:border-0::file-selector-button {\n border-width: 0px;\n}\n.file\\:bg-transparent::file-selector-button {\n background-color: transparent;\n}\n.file\\:text-sm::file-selector-button {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.file\\:font-medium::file-selector-button {\n font-weight: 500;\n}\n.placeholder\\:text-muted-foreground::-moz-placeholder {\n color: hsl(var(--muted-foreground));\n}\n.placeholder\\:text-muted-foreground::placeholder {\n color: hsl(var(--muted-foreground));\n}\n.focus-within\\:relative:focus-within {\n position: relative;\n}\n.hover\\:w-\\[2px\\]:hover {\n width: 2px;\n}\n.hover\\:w-\\[3px\\]:hover {\n width: 3px;\n}\n.hover\\:cursor-pointer:hover {\n cursor: pointer;\n}\n.hover\\:rounded-lg:hover {\n border-radius: var(--radius);\n}\n.hover\\:bg-accent:hover {\n background-color: hsl(var(--accent));\n}\n.hover\\:bg-border:hover {\n background-color: hsl(var(--border));\n}\n.hover\\:bg-destructive\\/90:hover {\n background-color: hsl(var(--destructive) / 0.9);\n}\n.hover\\:bg-muted:hover {\n background-color: hsl(var(--muted));\n}\n.hover\\:bg-primary:hover {\n background-color: hsl(var(--primary));\n}\n.hover\\:bg-primary\\/90:hover {\n background-color: hsl(var(--primary) / 0.9);\n}\n.hover\\:bg-red-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(185 28 28 / var(--tw-bg-opacity));\n}\n.hover\\:bg-secondary\\/80:hover {\n background-color: hsl(var(--secondary) / 0.8);\n}\n.hover\\:text-accent-foreground:hover {\n color: hsl(var(--accent-foreground));\n}\n.hover\\:text-muted-foreground:hover {\n color: hsl(var(--muted-foreground));\n}\n.hover\\:text-primary-foreground:hover {\n color: hsl(var(--primary-foreground));\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n.hover\\:opacity-100:hover {\n opacity: 1;\n}\n.focus\\:bg-accent:focus {\n background-color: hsl(var(--accent));\n}\n.focus\\:bg-primary:focus {\n background-color: hsl(var(--primary));\n}\n.focus\\:text-accent-foreground:focus {\n color: hsl(var(--accent-foreground));\n}\n.focus\\:text-primary-foreground:focus {\n color: hsl(var(--primary-foreground));\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus\\:ring-ring:focus {\n --tw-ring-color: hsl(var(--ring));\n}\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n.focus-visible\\:outline-none:focus-visible {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-visible\\:outline-accent:focus-visible {\n outline-color: hsl(var(--accent));\n}\n.focus-visible\\:ring-2:focus-visible {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus-visible\\:ring-ring:focus-visible {\n --tw-ring-color: hsl(var(--ring));\n}\n.focus-visible\\:ring-offset-2:focus-visible {\n --tw-ring-offset-width: 2px;\n}\n.focus-visible\\:ring-offset-background:focus-visible {\n --tw-ring-offset-color: hsl(var(--background));\n}\n.disabled\\:pointer-events-none:disabled {\n pointer-events: none;\n}\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n.disabled\\:text-background:disabled {\n color: hsl(var(--background));\n}\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n.peer:disabled ~ .peer-disabled\\:cursor-not-allowed {\n cursor: not-allowed;\n}\n.peer:disabled ~ .peer-disabled\\:opacity-70 {\n opacity: 0.7;\n}\n.aria-selected\\:bg-accent[aria-selected=\"true\"] {\n background-color: hsl(var(--accent));\n}\n.aria-selected\\:text-accent-foreground[aria-selected=\"true\"] {\n color: hsl(var(--accent-foreground));\n}\n.aria-selected\\:opacity-100[aria-selected=\"true\"] {\n opacity: 1;\n}\n.data-\\[disabled\\]\\:pointer-events-none[data-disabled] {\n pointer-events: none;\n}\n.data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom] {\n --tw-translate-y: 0.25rem;\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.data-\\[side\\=left\\]\\:-translate-x-1[data-side=left] {\n --tw-translate-x: -0.25rem;\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.data-\\[side\\=right\\]\\:translate-x-1[data-side=right] {\n --tw-translate-x: 0.25rem;\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.data-\\[side\\=top\\]\\:-translate-y-1[data-side=top] {\n --tw-translate-y: -0.25rem;\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.data-\\[state\\=checked\\]\\:translate-x-5[data-state=checked] {\n --tw-translate-x: 1.25rem;\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.data-\\[state\\=unchecked\\]\\:translate-x-0[data-state=unchecked] {\n --tw-translate-x: 0px;\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@keyframes accordion-up {\n\n from {\n height: var(--radix-accordion-content-height);\n }\n\n to {\n height: 0;\n }\n}\n.data-\\[state\\=closed\\]\\:animate-accordion-up[data-state=closed] {\n animation: accordion-up 0.2s ease-out;\n}\n@keyframes accordion-down {\n\n from {\n height: 0;\n }\n\n to {\n height: var(--radix-accordion-content-height);\n }\n}\n.data-\\[state\\=open\\]\\:animate-accordion-down[data-state=open] {\n animation: accordion-down 0.2s ease-out;\n}\n.data-\\[state\\=active\\]\\:bg-background[data-state=active] {\n background-color: hsl(var(--background));\n}\n.data-\\[state\\=checked\\]\\:bg-accent[data-state=checked] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=checked\\]\\:bg-primary[data-state=checked] {\n background-color: hsl(var(--primary));\n}\n.data-\\[state\\=on\\]\\:bg-accent[data-state=on] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=open\\]\\:bg-accent[data-state=open] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=unchecked\\]\\:bg-primary[data-state=unchecked] {\n background-color: hsl(var(--primary));\n}\n.data-\\[state\\=active\\]\\:text-foreground[data-state=active] {\n color: hsl(var(--foreground));\n}\n.data-\\[state\\=checked\\]\\:text-primary-foreground[data-state=checked] {\n color: hsl(var(--primary-foreground));\n}\n.data-\\[state\\=on\\]\\:text-accent-foreground[data-state=on] {\n color: hsl(var(--accent-foreground));\n}\n.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open] {\n color: hsl(var(--muted-foreground));\n}\n.data-\\[disabled\\]\\:opacity-50[data-disabled] {\n opacity: 0.5;\n}\n.data-\\[state\\=active\\]\\:shadow-sm[data-state=active] {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 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.data-\\[state\\=open\\]\\:animate-in[data-state=open] {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n}\n.data-\\[state\\=closed\\]\\:animate-out[data-state=closed] {\n animation-name: exit;\n animation-duration: 150ms;\n --tw-exit-opacity: initial;\n --tw-exit-scale: initial;\n --tw-exit-rotate: initial;\n --tw-exit-translate-x: initial;\n --tw-exit-translate-y: initial;\n}\n.data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed] {\n --tw-exit-opacity: 0;\n}\n.data-\\[state\\=open\\]\\:fade-in-0[data-state=open] {\n --tw-enter-opacity: 0;\n}\n.data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed] {\n --tw-exit-scale: .95;\n}\n.data-\\[state\\=open\\]\\:zoom-in-95[data-state=open] {\n --tw-enter-scale: .95;\n}\n.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom] {\n --tw-enter-translate-y: -0.5rem;\n}\n.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left] {\n --tw-enter-translate-x: 0.5rem;\n}\n.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right] {\n --tw-enter-translate-x: -0.5rem;\n}\n.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top] {\n --tw-enter-translate-y: 0.5rem;\n}\n.data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state=closed] {\n --tw-exit-translate-x: -50%;\n}\n.data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state=closed] {\n --tw-exit-translate-y: -48%;\n}\n.data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state=open] {\n --tw-enter-translate-x: -50%;\n}\n.data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state=open] {\n --tw-enter-translate-y: -48%;\n}\n:is([data-mode=\"dark\"] .dark\\:border-white) {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity));\n}\n@media (min-width: 640px) {\n\n .sm\\:mt-0 {\n margin-top: 0px;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.5rem * var(--tw-space-x-reverse));\n margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .sm\\:space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .sm\\:space-y-0 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0px * var(--tw-space-y-reverse));\n }\n\n .sm\\:rounded-lg {\n border-radius: var(--radius);\n }\n\n .sm\\:p-0 {\n padding: 0px;\n }\n\n .sm\\:text-left {\n text-align: left;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:w-full {\n width: 100%;\n }\n}\n.\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:bg-accent:has([aria-selected]) {\n background-color: hsl(var(--accent));\n}\n.first\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-l-md:has([aria-selected]):first-child {\n border-top-left-radius: calc(var(--radius) - 2px);\n border-bottom-left-radius: calc(var(--radius) - 2px);\n}\n.last\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-r-md:has([aria-selected]):last-child {\n border-top-right-radius: calc(var(--radius) - 2px);\n border-bottom-right-radius: calc(var(--radius) - 2px);\n}\n.\\[\\&\\[data-state\\=open\\]\\>svg\\]\\:rotate-180[data-state=open]>svg {\n --tw-rotate: 180deg;\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.\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading] {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs [cmdk-group-heading] {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading] {\n font-weight: 500;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground [cmdk-group-heading] {\n color: hsl(var(--muted-foreground));\n}\n.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 [cmdk-group]:not([hidden]) ~[cmdk-group] {\n padding-top: 0px;\n}\n.\\[\\&_\\[cmdk-group\\]\\]\\:px-2 [cmdk-group] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 [cmdk-input-wrapper] svg {\n height: 1.25rem;\n}\n.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 [cmdk-input-wrapper] svg {\n width: 1.25rem;\n}\n.\\[\\&_\\[cmdk-input\\]\\]\\:h-12 [cmdk-input] {\n height: 3rem;\n}\n.\\[\\&_\\[cmdk-item\\]\\]\\:px-2 [cmdk-item] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-item\\]\\]\\:py-3 [cmdk-item] {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 [cmdk-item] svg {\n height: 1.25rem;\n}\n.\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 [cmdk-item] svg {\n width: 1.25rem;\n}\n";
74090
+ 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.5 | 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: #e5e7eb; /* 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-feature-settings: inherit; /* 1 */\n font-variation-settings: 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/*\nReset default styling for dialogs.\n*/\n\ndialog {\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/* :host for use with Shadow DOM, copied from the TailwindCSS prelude */\n\n:host {\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 0 0% 57.3%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 273 60% 51%;\n --accent-foreground: 110 10% 94%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n }\n\n:root {\n --background: 110 10% 94%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 0 0% 57.3%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 273 60% 51%;\n --accent-foreground: 110 10% 94%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 212.7 9.1% 76.3%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n }\n\n/* dark theme */\n\n*[data-mode=\"dark\"] {\n --background: 0 0% 4%;\n --foreground: 210 40% 98%;\n\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n\n --primary: 210 40% 98%;\n --primary-foreground: 222.2 47.4% 11.2%;\n\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n\n --muted: 178 23% 76%;\n --muted-foreground: 215 20.2% 65.1%;\n\n --accent: 159 60% 51%;\n --accent-foreground: 210 40% 98%;\n\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 212.7 26.8% 83.9%;\n }\n\n* {\n border-color: hsl(var(--border));\n}\n\nbody {\n background-color: hsl(var(--background));\n color: hsl(var(--foreground));\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.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.invisible {\n visibility: hidden;\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.sticky {\n position: sticky;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-left-2 {\n left: -0.5rem;\n}\n.-right-\\[10px\\] {\n right: -10px;\n}\n.-top-\\[10px\\] {\n top: -10px;\n}\n.-top-\\[4px\\] {\n top: -4px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.left-0 {\n left: 0px;\n}\n.left-1 {\n left: 0.25rem;\n}\n.left-2 {\n left: 0.5rem;\n}\n.left-\\[50\\%\\] {\n left: 50%;\n}\n.right-0 {\n right: 0px;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-\\[16px\\] {\n right: 16px;\n}\n.top-0 {\n top: 0px;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-4 {\n top: 1rem;\n}\n.top-\\[50\\%\\] {\n top: 50%;\n}\n.z-50 {\n z-index: 50;\n}\n.z-\\[1\\] {\n z-index: 1;\n}\n.z-\\[5\\] {\n z-index: 5;\n}\n.z-overlay {\n z-index: 4;\n}\n.m-4 {\n margin: 1rem;\n}\n.-mx-1 {\n margin-left: -0.25rem;\n margin-right: -0.25rem;\n}\n.-my-2 {\n margin-top: -0.5rem;\n margin-bottom: -0.5rem;\n}\n.-my-\\[100px\\] {\n margin-top: -100px;\n margin-bottom: -100px;\n}\n.mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.ml-0 {\n margin-left: 0px;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-\\[20px\\] {\n margin-left: 20px;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.block {\n display: block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.aspect-square {\n aspect-ratio: 1 / 1;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-11 {\n height: 2.75rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-2\\.5 {\n height: 0.625rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\.5 {\n height: 0.875rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-9 {\n height: 2.25rem;\n}\n.h-\\[100\\] {\n height: 100;\n}\n.h-\\[12px\\] {\n height: 12px;\n}\n.h-\\[14px\\] {\n height: 14px;\n}\n.h-\\[18px\\] {\n height: 18px;\n}\n.h-\\[1px\\] {\n height: 1px;\n}\n.h-\\[20px\\] {\n height: 20px;\n}\n.h-\\[22px\\] {\n height: 22px;\n}\n.h-\\[24px\\] {\n height: 24px;\n}\n.h-\\[32px\\] {\n height: 32px;\n}\n.h-\\[50px\\] {\n height: 50px;\n}\n.h-\\[75px\\] {\n height: 75px;\n}\n.h-\\[9px\\] {\n height: 9px;\n}\n.h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n}\n.h-full {\n height: 100%;\n}\n.h-px {\n height: 1px;\n}\n.h-screen {\n height: 100vh;\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-1\\/3 {\n width: 33.333333%;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-2 {\n width: 0.5rem;\n}\n.w-2\\.5 {\n width: 0.625rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\.5 {\n width: 0.875rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-\\[12px\\] {\n width: 12px;\n}\n.w-\\[14px\\] {\n width: 14px;\n}\n.w-\\[1px\\] {\n width: 1px;\n}\n.w-\\[20px\\] {\n width: 20px;\n}\n.w-\\[24px\\] {\n width: 24px;\n}\n.w-\\[300px\\] {\n width: 300px;\n}\n.w-\\[32px\\] {\n width: 32px;\n}\n.w-\\[44px\\] {\n width: 44px;\n}\n.w-\\[9px\\] {\n width: 9px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-\\[320px\\] {\n min-width: 320px;\n}\n.min-w-\\[500px\\] {\n min-width: 500px;\n}\n.min-w-\\[8rem\\] {\n min-width: 8rem;\n}\n.min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n}\n.max-w-4xl {\n max-width: 56rem;\n}\n.max-w-\\[1000px\\] {\n max-width: 1000px;\n}\n.max-w-\\[10vw\\] {\n max-width: 10vw;\n}\n.max-w-\\[300px\\] {\n max-width: 300px;\n}\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-auto {\n flex: 1 1 auto;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.border-collapse {\n border-collapse: collapse;\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -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.translate-x-\\[-50\\%\\] {\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.translate-y-\\[-50\\%\\] {\n --tw-translate-y: -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-90 {\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-90 {\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.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.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-col-resize {\n cursor: col-resize;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-grab {\n cursor: grab;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.cursor-se-resize {\n cursor: se-resize;\n}\n.touch-none {\n touch-action: none;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.resize-none {\n resize: 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.grid-cols-\\[min-content_1fr\\] {\n grid-template-columns: min-content 1fr;\n}\n.grid-rows-\\[1fr\\2c _min-content\\] {\n grid-template-rows: 1fr min-content;\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-col-reverse {\n flex-direction: column-reverse;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.justify-start {\n justify-content: flex-start;\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: 0.25rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-5 {\n gap: 1.25rem;\n}\n.gap-\\[0\\.5em\\] {\n gap: 0.5em;\n}\n.gap-\\[36px\\] {\n gap: 36px;\n}\n.gap-x-4 {\n -moz-column-gap: 1rem;\n column-gap: 1rem;\n}\n.gap-y-1 {\n row-gap: 0.25rem;\n}\n.gap-y-2 {\n row-gap: 0.5rem;\n}\n.gap-y-4 {\n row-gap: 1rem;\n}\n.gap-y-8 {\n row-gap: 2rem;\n}\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-clip {\n overflow: clip;\n}\n.overflow-scroll {\n overflow: scroll;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n.overflow-y-scroll {\n overflow-y: scroll;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-\\[inherit\\] {\n border-radius: inherit;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: var(--radius);\n}\n.rounded-md {\n border-radius: calc(var(--radius) - 2px);\n}\n.rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n}\n.rounded-b-none {\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.rounded-b-sm {\n border-bottom-right-radius: calc(var(--radius) - 4px);\n border-bottom-left-radius: calc(var(--radius) - 4px);\n}\n.rounded-t-none {\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-\\[2px\\] {\n border-width: 2px;\n}\n.border-x {\n border-left-width: 1px;\n border-right-width: 1px;\n}\n.border-y {\n border-top-width: 1px;\n border-bottom-width: 1px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-b-0 {\n border-bottom-width: 0px;\n}\n.border-b-2 {\n border-bottom-width: 2px;\n}\n.border-l {\n border-left-width: 1px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-t-0 {\n border-top-width: 0px;\n}\n.border-accent {\n border-color: hsl(var(--accent));\n}\n.border-border {\n border-color: hsl(var(--border));\n}\n.border-gray-400 {\n --tw-border-opacity: 1;\n border-color: rgb(156 163 175 / var(--tw-border-opacity));\n}\n.border-input {\n border-color: hsl(var(--input));\n}\n.border-primary {\n border-color: hsl(var(--primary));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-l-transparent {\n border-left-color: transparent;\n}\n.border-t-transparent {\n border-top-color: transparent;\n}\n.bg-accent {\n background-color: hsl(var(--accent));\n}\n.bg-background {\n background-color: hsl(var(--background));\n}\n.bg-background\\/80 {\n background-color: hsl(var(--background) / 0.8);\n}\n.bg-border {\n background-color: hsl(var(--border));\n}\n.bg-card {\n background-color: hsl(var(--card));\n}\n.bg-card-foreground {\n background-color: hsl(var(--card-foreground));\n}\n.bg-destructive {\n background-color: hsl(var(--destructive));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n.bg-muted {\n background-color: hsl(var(--muted));\n}\n.bg-popover {\n background-color: hsl(var(--popover));\n}\n.bg-primary {\n background-color: hsl(var(--primary));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.bg-secondary {\n background-color: hsl(var(--secondary));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-gradient-to-b {\n background-image: linear-gradient(to bottom, var(--tw-gradient-stops));\n}\n.bg-gradient-to-br {\n background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));\n}\n.from-background\\/90 {\n --tw-gradient-from: hsl(var(--background) / 0.9) var(--tw-gradient-from-position);\n --tw-gradient-to: hsl(var(--background) / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-card {\n --tw-gradient-from: hsl(var(--card)) var(--tw-gradient-from-position);\n --tw-gradient-to: hsl(var(--card) / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-transparent {\n --tw-gradient-from: transparent var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-40\\% {\n --tw-gradient-from-position: 40%;\n}\n.from-50\\% {\n --tw-gradient-from-position: 50%;\n}\n.to-background {\n --tw-gradient-to: hsl(var(--background)) var(--tw-gradient-to-position);\n}\n.fill-current {\n fill: currentColor;\n}\n.fill-white {\n fill: #fff;\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-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-10 {\n padding: 2.5rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-\\[1px\\] {\n padding: 1px;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.px-\\[24px\\] {\n padding-left: 24px;\n padding-right: 24px;\n}\n.px-\\[2px\\] {\n padding-left: 2px;\n padding-right: 2px;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-7 {\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n}\n.py-\\[2px\\] {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.pb-0 {\n padding-bottom: 0px;\n}\n.pb-20 {\n padding-bottom: 5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pl-0 {\n padding-left: 0px;\n}\n.pl-6 {\n padding-left: 1.5rem;\n}\n.pl-8 {\n padding-left: 2rem;\n}\n.pl-\\[300px\\] {\n padding-left: 300px;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pt-0 {\n padding-top: 0px;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-start {\n text-align: start;\n}\n.font-sans {\n font-family: 'Roboto', sans-serif;\n}\n.font-serif {\n font-family: 'Space 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-\\[0\\.8rem\\] {\n font-size: 0.8rem;\n}\n.text-\\[12px\\] {\n font-size: 12px;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-\\[12px\\] {\n font-weight: 12px;\n}\n.font-\\[400\\] {\n font-weight: 400;\n}\n.font-\\[500\\] {\n font-weight: 500;\n}\n.font-\\[550\\] {\n font-weight: 550;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.italic {\n font-style: italic;\n}\n.leading-4 {\n line-height: 1rem;\n}\n.leading-none {\n line-height: 1;\n}\n.tracking-\\[0\\.04em\\] {\n letter-spacing: 0.04em;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.tracking-widest {\n letter-spacing: 0.1em;\n}\n.text-accent {\n color: hsl(var(--accent));\n}\n.text-accent-foreground {\n color: hsl(var(--accent-foreground));\n}\n.text-background {\n color: hsl(var(--background));\n}\n.text-card-foreground {\n color: hsl(var(--card-foreground));\n}\n.text-current {\n color: currentColor;\n}\n.text-destructive {\n color: hsl(var(--destructive));\n}\n.text-destructive-foreground {\n color: hsl(var(--destructive-foreground));\n}\n.text-foreground {\n color: hsl(var(--foreground));\n}\n.text-muted {\n color: hsl(var(--muted));\n}\n.text-muted-foreground {\n color: hsl(var(--muted-foreground));\n}\n.text-popover-foreground {\n color: hsl(var(--popover-foreground));\n}\n.text-primary {\n color: hsl(var(--primary));\n}\n.text-primary-foreground {\n color: hsl(var(--primary-foreground));\n}\n.text-secondary-foreground {\n color: hsl(var(--secondary-foreground));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.underline-offset-4 {\n text-underline-offset: 4px;\n}\n.antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-70 {\n opacity: 0.7;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.mix-blend-difference {\n mix-blend-mode: difference;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px 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.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.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px 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.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 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.outline {\n outline-style: solid;\n}\n.ring-0 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-offset-background {\n --tw-ring-offset-color: hsl(var(--background));\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.drop-shadow-\\[0px_0px_12px_hsl\\(var\\(--accent\\)\\)\\] {\n --tw-drop-shadow: drop-shadow(0px 0px 12px hsl(var(--accent)));\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.filter {\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.backdrop-blur-lg {\n --tw-backdrop-blur: blur(16px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\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-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\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.duration-150 {\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n@keyframes enter {\n\n from {\n opacity: var(--tw-enter-opacity, 1);\n transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));\n }\n}\n@keyframes exit {\n\n to {\n opacity: var(--tw-exit-opacity, 1);\n transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));\n }\n}\n.animate-in {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n}\n.fade-in-0 {\n --tw-enter-opacity: 0;\n}\n.zoom-in-95 {\n --tw-enter-scale: .95;\n}\n.duration-150 {\n animation-duration: 150ms;\n}\n.duration-200 {\n animation-duration: 200ms;\n}\n.ease-in-out {\n animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.file\\:border-0::file-selector-button {\n border-width: 0px;\n}\n.file\\:bg-transparent::file-selector-button {\n background-color: transparent;\n}\n.file\\:text-sm::file-selector-button {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.file\\:font-medium::file-selector-button {\n font-weight: 500;\n}\n.placeholder\\:text-muted-foreground::-moz-placeholder {\n color: hsl(var(--muted-foreground));\n}\n.placeholder\\:text-muted-foreground::placeholder {\n color: hsl(var(--muted-foreground));\n}\n.focus-within\\:relative:focus-within {\n position: relative;\n}\n.hover\\:w-\\[2px\\]:hover {\n width: 2px;\n}\n.hover\\:w-\\[3px\\]:hover {\n width: 3px;\n}\n.hover\\:cursor-pointer:hover {\n cursor: pointer;\n}\n.hover\\:rounded-lg:hover {\n border-radius: var(--radius);\n}\n.hover\\:bg-accent:hover {\n background-color: hsl(var(--accent));\n}\n.hover\\:bg-border:hover {\n background-color: hsl(var(--border));\n}\n.hover\\:bg-destructive\\/90:hover {\n background-color: hsl(var(--destructive) / 0.9);\n}\n.hover\\:bg-muted:hover {\n background-color: hsl(var(--muted));\n}\n.hover\\:bg-primary:hover {\n background-color: hsl(var(--primary));\n}\n.hover\\:bg-primary\\/90:hover {\n background-color: hsl(var(--primary) / 0.9);\n}\n.hover\\:bg-red-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(185 28 28 / var(--tw-bg-opacity));\n}\n.hover\\:bg-secondary\\/80:hover {\n background-color: hsl(var(--secondary) / 0.8);\n}\n.hover\\:text-accent-foreground:hover {\n color: hsl(var(--accent-foreground));\n}\n.hover\\:text-muted-foreground:hover {\n color: hsl(var(--muted-foreground));\n}\n.hover\\:text-primary-foreground:hover {\n color: hsl(var(--primary-foreground));\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n.hover\\:opacity-100:hover {\n opacity: 1;\n}\n.focus\\:bg-accent:focus {\n background-color: hsl(var(--accent));\n}\n.focus\\:bg-primary:focus {\n background-color: hsl(var(--primary));\n}\n.focus\\:text-accent-foreground:focus {\n color: hsl(var(--accent-foreground));\n}\n.focus\\:text-primary-foreground:focus {\n color: hsl(var(--primary-foreground));\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus\\:ring-ring:focus {\n --tw-ring-color: hsl(var(--ring));\n}\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n.focus-visible\\:outline-none:focus-visible {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-visible\\:outline-accent:focus-visible {\n outline-color: hsl(var(--accent));\n}\n.focus-visible\\:ring-2:focus-visible {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus-visible\\:ring-ring:focus-visible {\n --tw-ring-color: hsl(var(--ring));\n}\n.focus-visible\\:ring-offset-2:focus-visible {\n --tw-ring-offset-width: 2px;\n}\n.focus-visible\\:ring-offset-background:focus-visible {\n --tw-ring-offset-color: hsl(var(--background));\n}\n.disabled\\:pointer-events-none:disabled {\n pointer-events: none;\n}\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n.disabled\\:text-background:disabled {\n color: hsl(var(--background));\n}\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n.peer:disabled ~ .peer-disabled\\:cursor-not-allowed {\n cursor: not-allowed;\n}\n.peer:disabled ~ .peer-disabled\\:opacity-70 {\n opacity: 0.7;\n}\n.aria-selected\\:bg-accent[aria-selected=\"true\"] {\n background-color: hsl(var(--accent));\n}\n.aria-selected\\:text-accent-foreground[aria-selected=\"true\"] {\n color: hsl(var(--accent-foreground));\n}\n.aria-selected\\:opacity-100[aria-selected=\"true\"] {\n opacity: 1;\n}\n.data-\\[disabled\\]\\:pointer-events-none[data-disabled] {\n pointer-events: none;\n}\n.data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom] {\n --tw-translate-y: 0.25rem;\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.data-\\[side\\=left\\]\\:-translate-x-1[data-side=left] {\n --tw-translate-x: -0.25rem;\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.data-\\[side\\=right\\]\\:translate-x-1[data-side=right] {\n --tw-translate-x: 0.25rem;\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.data-\\[side\\=top\\]\\:-translate-y-1[data-side=top] {\n --tw-translate-y: -0.25rem;\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.data-\\[state\\=checked\\]\\:translate-x-5[data-state=checked] {\n --tw-translate-x: 1.25rem;\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.data-\\[state\\=unchecked\\]\\:translate-x-0[data-state=unchecked] {\n --tw-translate-x: 0px;\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@keyframes accordion-up {\n\n from {\n height: var(--radix-accordion-content-height);\n }\n\n to {\n height: 0;\n }\n}\n.data-\\[state\\=closed\\]\\:animate-accordion-up[data-state=closed] {\n animation: accordion-up 0.2s ease-out;\n}\n@keyframes accordion-down {\n\n from {\n height: 0;\n }\n\n to {\n height: var(--radix-accordion-content-height);\n }\n}\n.data-\\[state\\=open\\]\\:animate-accordion-down[data-state=open] {\n animation: accordion-down 0.2s ease-out;\n}\n.data-\\[state\\=active\\]\\:bg-background[data-state=active] {\n background-color: hsl(var(--background));\n}\n.data-\\[state\\=checked\\]\\:bg-accent[data-state=checked] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=checked\\]\\:bg-primary[data-state=checked] {\n background-color: hsl(var(--primary));\n}\n.data-\\[state\\=on\\]\\:bg-accent[data-state=on] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=open\\]\\:bg-accent[data-state=open] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=unchecked\\]\\:bg-primary[data-state=unchecked] {\n background-color: hsl(var(--primary));\n}\n.data-\\[state\\=active\\]\\:text-foreground[data-state=active] {\n color: hsl(var(--foreground));\n}\n.data-\\[state\\=checked\\]\\:text-primary-foreground[data-state=checked] {\n color: hsl(var(--primary-foreground));\n}\n.data-\\[state\\=on\\]\\:text-accent-foreground[data-state=on] {\n color: hsl(var(--accent-foreground));\n}\n.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open] {\n color: hsl(var(--muted-foreground));\n}\n.data-\\[disabled\\]\\:opacity-50[data-disabled] {\n opacity: 0.5;\n}\n.data-\\[state\\=active\\]\\:shadow-sm[data-state=active] {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 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.data-\\[state\\=open\\]\\:animate-in[data-state=open] {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n}\n.data-\\[state\\=closed\\]\\:animate-out[data-state=closed] {\n animation-name: exit;\n animation-duration: 150ms;\n --tw-exit-opacity: initial;\n --tw-exit-scale: initial;\n --tw-exit-rotate: initial;\n --tw-exit-translate-x: initial;\n --tw-exit-translate-y: initial;\n}\n.data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed] {\n --tw-exit-opacity: 0;\n}\n.data-\\[state\\=open\\]\\:fade-in-0[data-state=open] {\n --tw-enter-opacity: 0;\n}\n.data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed] {\n --tw-exit-scale: .95;\n}\n.data-\\[state\\=open\\]\\:zoom-in-95[data-state=open] {\n --tw-enter-scale: .95;\n}\n.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom] {\n --tw-enter-translate-y: -0.5rem;\n}\n.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left] {\n --tw-enter-translate-x: 0.5rem;\n}\n.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right] {\n --tw-enter-translate-x: -0.5rem;\n}\n.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top] {\n --tw-enter-translate-y: 0.5rem;\n}\n.data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state=closed] {\n --tw-exit-translate-x: -50%;\n}\n.data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state=closed] {\n --tw-exit-translate-y: -48%;\n}\n.data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state=open] {\n --tw-enter-translate-x: -50%;\n}\n.data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state=open] {\n --tw-enter-translate-y: -48%;\n}\n:is([data-mode=\"dark\"] .dark\\:border-white) {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity));\n}\n@media (min-width: 640px) {\n\n .sm\\:mt-0 {\n margin-top: 0px;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.5rem * var(--tw-space-x-reverse));\n margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .sm\\:space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .sm\\:space-y-0 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0px * var(--tw-space-y-reverse));\n }\n\n .sm\\:rounded-lg {\n border-radius: var(--radius);\n }\n\n .sm\\:p-0 {\n padding: 0px;\n }\n\n .sm\\:text-left {\n text-align: left;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:relative {\n position: relative;\n }\n\n .md\\:flex {\n display: flex;\n }\n\n .md\\:hidden {\n display: none;\n }\n\n .md\\:w-\\[300px\\] {\n width: 300px;\n }\n\n .md\\:w-full {\n width: 100%;\n }\n\n .md\\:px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n\n .md\\:pl-0 {\n padding-left: 0px;\n }\n}\n.\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:bg-accent:has([aria-selected]) {\n background-color: hsl(var(--accent));\n}\n.first\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-l-md:has([aria-selected]):first-child {\n border-top-left-radius: calc(var(--radius) - 2px);\n border-bottom-left-radius: calc(var(--radius) - 2px);\n}\n.last\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-r-md:has([aria-selected]):last-child {\n border-top-right-radius: calc(var(--radius) - 2px);\n border-bottom-right-radius: calc(var(--radius) - 2px);\n}\n.\\[\\&\\[data-state\\=open\\]\\>svg\\]\\:rotate-180[data-state=open]>svg {\n --tw-rotate: 180deg;\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.\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading] {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs [cmdk-group-heading] {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading] {\n font-weight: 500;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground [cmdk-group-heading] {\n color: hsl(var(--muted-foreground));\n}\n.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 [cmdk-group]:not([hidden]) ~[cmdk-group] {\n padding-top: 0px;\n}\n.\\[\\&_\\[cmdk-group\\]\\]\\:px-2 [cmdk-group] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 [cmdk-input-wrapper] svg {\n height: 1.25rem;\n}\n.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 [cmdk-input-wrapper] svg {\n width: 1.25rem;\n}\n.\\[\\&_\\[cmdk-input\\]\\]\\:h-12 [cmdk-input] {\n height: 3rem;\n}\n.\\[\\&_\\[cmdk-item\\]\\]\\:px-2 [cmdk-item] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-item\\]\\]\\:py-3 [cmdk-item] {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 [cmdk-item] svg {\n height: 1.25rem;\n}\n.\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 [cmdk-item] svg {\n width: 1.25rem;\n}\n";
73797
74091
  function Style() {
73798
74092
  return /* @__PURE__ */ jsx("style", { children: styleCss });
73799
74093
  }