@valbuild/ui 0.44.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.
@@ -50849,7 +50849,7 @@ var Schema = /* @__PURE__ */ function() {
50849
50849
  return Schema2;
50850
50850
  }();
50851
50851
  var GetSchema = Symbol("GetSchema");
50852
- var Path = Symbol("Path");
50852
+ var Path$1 = Symbol("Path");
50853
50853
  var GetSource = Symbol("GetSource");
50854
50854
  function getSchema(selector) {
50855
50855
  return selector[GetSchema];
@@ -50880,82 +50880,7 @@ var Sym = /* @__PURE__ */ function(_Expr2) {
50880
50880
  new Sym("()");
50881
50881
  var VAL_EXTENSION = "_type";
50882
50882
  var FILE_REF_PROP = "_ref";
50883
- var ImageSchema = /* @__PURE__ */ function(_Schema) {
50884
- _inherits(ImageSchema2, _Schema);
50885
- var _super = _createSuper(ImageSchema2);
50886
- function ImageSchema2(options) {
50887
- var _this;
50888
- var opt = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
50889
- _classCallCheck(this, ImageSchema2);
50890
- _this = _super.call(this);
50891
- _this.options = options;
50892
- _this.opt = opt;
50893
- return _this;
50894
- }
50895
- _createClass(ImageSchema2, [{
50896
- key: "validate",
50897
- value: function validate(path, src) {
50898
- if (this.opt && (src === null || src === void 0)) {
50899
- return false;
50900
- }
50901
- if (src === null || src === void 0) {
50902
- return _defineProperty$5({}, path, [{
50903
- message: "Non-optional image was null or undefined.",
50904
- value: src
50905
- }]);
50906
- }
50907
- if (typeof src[FILE_REF_PROP] !== "string") {
50908
- return _defineProperty$5({}, path, [{
50909
- message: "Image did not have a file reference string. Got: ".concat(_typeof(src[FILE_REF_PROP])),
50910
- value: src
50911
- }]);
50912
- }
50913
- if (src[VAL_EXTENSION] !== "file") {
50914
- return _defineProperty$5({}, path, [{
50915
- message: "Image did not have the valid file extension type. Got: ".concat(src[VAL_EXTENSION]),
50916
- value: src
50917
- }]);
50918
- }
50919
- if (src.metadata) {
50920
- return _defineProperty$5({}, path, [{
50921
- message: "Found metadata, but it could not be validated. Image metadata must be an object with the required props: width (positive number), height (positive number) and sha256 (string of length 64 of the base16 hash).",
50922
- // These validation errors will have to be picked up by logic outside of this package and revalidated. Reasons: 1) we have to read files to verify the metadata, which is handled differently in different runtimes (Browser, QuickJS, Node.js); 2) we want to keep this package dependency free.
50923
- value: src,
50924
- fixes: ["image:replace-metadata"]
50925
- }]);
50926
- }
50927
- return _defineProperty$5({}, path, [{
50928
- message: "Could not validate Image metadata.",
50929
- value: src,
50930
- fixes: ["image:add-metadata"]
50931
- }]);
50932
- }
50933
- }, {
50934
- key: "assert",
50935
- value: function assert(src) {
50936
- if (this.opt && (src === null || src === void 0)) {
50937
- return true;
50938
- }
50939
- return (src === null || src === void 0 ? void 0 : src[FILE_REF_PROP]) === "image" && (src === null || src === void 0 ? void 0 : src[VAL_EXTENSION]) === "file";
50940
- }
50941
- }, {
50942
- key: "optional",
50943
- value: function optional() {
50944
- return new ImageSchema2(this.options, true);
50945
- }
50946
- }, {
50947
- key: "serialize",
50948
- value: function serialize() {
50949
- return {
50950
- type: "image",
50951
- options: this.options,
50952
- opt: this.opt
50953
- };
50954
- }
50955
- }]);
50956
- return ImageSchema2;
50957
- }(Schema);
50958
- var convertFileSource = function convertFileSource2(src) {
50883
+ function convertFileSource(src) {
50959
50884
  var _src$metadata2;
50960
50885
  if (!src[FILE_REF_PROP].startsWith("/public")) {
50961
50886
  var _src$metadata;
@@ -50968,15 +50893,15 @@ var convertFileSource = function convertFileSource2(src) {
50968
50893
  url: src[FILE_REF_PROP].slice("/public".length) + "?sha256=".concat((_src$metadata2 = src.metadata) === null || _src$metadata2 === void 0 ? void 0 : _src$metadata2.sha256),
50969
50894
  metadata: src.metadata
50970
50895
  };
50971
- };
50896
+ }
50972
50897
  function isSerializedVal(val) {
50973
50898
  return _typeof(val) === "object" && val !== null && val !== void 0 && ("val" in val || "valPath" in val);
50974
50899
  }
50975
50900
  function isVal(val) {
50976
- return _typeof(val) === "object" && val !== null && val !== void 0 && Path in val && "val" in val;
50901
+ return _typeof(val) === "object" && val !== null && val !== void 0 && Path$1 in val && "val" in val;
50977
50902
  }
50978
50903
  function getValPath(valOrSelector) {
50979
- return valOrSelector[Path];
50904
+ return valOrSelector[Path$1];
50980
50905
  }
50981
50906
  function hasOwn$1(obj, prop) {
50982
50907
  return Object.prototype.hasOwnProperty.call(obj, prop);
@@ -50988,7 +50913,7 @@ function _andThen(f, source, path) {
50988
50913
  return newSelectorProxy(source, path);
50989
50914
  }
50990
50915
  function isSelector(source) {
50991
- return _typeof(source) === "object" && source !== null && (GetSource in source || Path in source);
50916
+ return _typeof(source) === "object" && source !== null && (GetSource in source || Path$1 in source);
50992
50917
  }
50993
50918
  function newSelectorProxy(source, path, moduleSchema) {
50994
50919
  if (_typeof(source) === "object") {
@@ -51017,7 +50942,7 @@ function newSelectorProxy(source, path, moduleSchema) {
51017
50942
  if (prop === GetSource) {
51018
50943
  return true;
51019
50944
  }
51020
- if (prop === Path) {
50945
+ if (prop === Path$1) {
51021
50946
  return true;
51022
50947
  }
51023
50948
  if (prop === "andThen") {
@@ -51032,7 +50957,7 @@ function newSelectorProxy(source, path, moduleSchema) {
51032
50957
  if (prop === GetSource) {
51033
50958
  return source;
51034
50959
  }
51035
- if (prop === Path) {
50960
+ if (prop === Path$1) {
51036
50961
  return path;
51037
50962
  }
51038
50963
  if (prop === GetSchema) {
@@ -51099,7 +51024,7 @@ function newSelectorProxy(source, path, moduleSchema) {
51099
51024
  andThen: function andThen(f) {
51100
51025
  return _andThen(f, source === void 0 ? null : source, path);
51101
51026
  }
51102
- }, GetSource, source === void 0 ? null : source), Path, path), GetSchema, moduleSchema);
51027
+ }, GetSource, source === void 0 ? null : source), Path$1, path), GetSchema, moduleSchema);
51103
51028
  }
51104
51029
  }
51105
51030
  function createValPathOfItem$1(arrayPath, prop) {
@@ -51109,7 +51034,7 @@ function createValPathOfItem$1(arrayPath, prop) {
51109
51034
  return arrayPath && "".concat(arrayPath, ".").concat(JSON.stringify(prop));
51110
51035
  }
51111
51036
  function unValify(valueOrSelector) {
51112
- if (_typeof(valueOrSelector) === "object" && (GetSource in valueOrSelector || Path in valueOrSelector)) {
51037
+ if (_typeof(valueOrSelector) === "object" && (GetSource in valueOrSelector || Path$1 in valueOrSelector)) {
51113
51038
  var selectorValue = valueOrSelector[GetSource];
51114
51039
  return selectorValue;
51115
51040
  }
@@ -51569,6 +51494,81 @@ var RichTextSchema = /* @__PURE__ */ function(_Schema) {
51569
51494
  }]);
51570
51495
  return RichTextSchema2;
51571
51496
  }(Schema);
51497
+ var ImageSchema = /* @__PURE__ */ function(_Schema) {
51498
+ _inherits(ImageSchema2, _Schema);
51499
+ var _super = _createSuper(ImageSchema2);
51500
+ function ImageSchema2(options) {
51501
+ var _this;
51502
+ var opt = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
51503
+ _classCallCheck(this, ImageSchema2);
51504
+ _this = _super.call(this);
51505
+ _this.options = options;
51506
+ _this.opt = opt;
51507
+ return _this;
51508
+ }
51509
+ _createClass(ImageSchema2, [{
51510
+ key: "validate",
51511
+ value: function validate(path, src) {
51512
+ if (this.opt && (src === null || src === void 0)) {
51513
+ return false;
51514
+ }
51515
+ if (src === null || src === void 0) {
51516
+ return _defineProperty$5({}, path, [{
51517
+ message: "Non-optional image was null or undefined.",
51518
+ value: src
51519
+ }]);
51520
+ }
51521
+ if (typeof src[FILE_REF_PROP] !== "string") {
51522
+ return _defineProperty$5({}, path, [{
51523
+ message: "Image did not have a file reference string. Got: ".concat(_typeof(src[FILE_REF_PROP])),
51524
+ value: src
51525
+ }]);
51526
+ }
51527
+ if (src[VAL_EXTENSION] !== "file") {
51528
+ return _defineProperty$5({}, path, [{
51529
+ message: "Image did not have the valid file extension type. Got: ".concat(src[VAL_EXTENSION]),
51530
+ value: src
51531
+ }]);
51532
+ }
51533
+ if (src.metadata) {
51534
+ return _defineProperty$5({}, path, [{
51535
+ message: "Found metadata, but it could not be validated. Image metadata must be an object with the required props: width (positive number), height (positive number) and sha256 (string of length 64 of the base16 hash).",
51536
+ // These validation errors will have to be picked up by logic outside of this package and revalidated. Reasons: 1) we have to read files to verify the metadata, which is handled differently in different runtimes (Browser, QuickJS, Node.js); 2) we want to keep this package dependency free.
51537
+ value: src,
51538
+ fixes: ["image:replace-metadata"]
51539
+ }]);
51540
+ }
51541
+ return _defineProperty$5({}, path, [{
51542
+ message: "Could not validate Image metadata.",
51543
+ value: src,
51544
+ fixes: ["image:add-metadata"]
51545
+ }]);
51546
+ }
51547
+ }, {
51548
+ key: "assert",
51549
+ value: function assert(src) {
51550
+ if (this.opt && (src === null || src === void 0)) {
51551
+ return true;
51552
+ }
51553
+ return (src === null || src === void 0 ? void 0 : src[FILE_REF_PROP]) === "image" && (src === null || src === void 0 ? void 0 : src[VAL_EXTENSION]) === "file";
51554
+ }
51555
+ }, {
51556
+ key: "optional",
51557
+ value: function optional() {
51558
+ return new ImageSchema2(this.options, true);
51559
+ }
51560
+ }, {
51561
+ key: "serialize",
51562
+ value: function serialize() {
51563
+ return {
51564
+ type: "image",
51565
+ options: this.options,
51566
+ opt: this.opt
51567
+ };
51568
+ }
51569
+ }]);
51570
+ return ImageSchema2;
51571
+ }(Schema);
51572
51572
  var RecordSchema = /* @__PURE__ */ function(_Schema) {
51573
51573
  _inherits(RecordSchema2, _Schema);
51574
51574
  var _super = _createSuper(RecordSchema2);
@@ -51845,6 +51845,96 @@ function parsePath$1(input) {
51845
51845
  }
51846
51846
  return result2;
51847
51847
  }
51848
+ var StringSchema = /* @__PURE__ */ function(_Schema) {
51849
+ _inherits(StringSchema2, _Schema);
51850
+ var _super = _createSuper(StringSchema2);
51851
+ function StringSchema2(options) {
51852
+ var _this;
51853
+ var opt = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
51854
+ var isRaw = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;
51855
+ _classCallCheck(this, StringSchema2);
51856
+ _this = _super.call(this);
51857
+ _this.options = options;
51858
+ _this.opt = opt;
51859
+ _this.isRaw = isRaw;
51860
+ return _this;
51861
+ }
51862
+ _createClass(StringSchema2, [{
51863
+ key: "validate",
51864
+ value: function validate(path, src) {
51865
+ var _this$options, _this$options2, _this$options3;
51866
+ if (this.opt && (src === null || src === void 0)) {
51867
+ return false;
51868
+ }
51869
+ if (typeof src !== "string") {
51870
+ return _defineProperty$5({}, path, [{
51871
+ message: "Expected 'string', got '".concat(_typeof(src), "'"),
51872
+ value: src
51873
+ }]);
51874
+ }
51875
+ var errors = [];
51876
+ if ((_this$options = this.options) !== null && _this$options !== void 0 && _this$options.maxLength && src.length > this.options.maxLength) {
51877
+ errors.push({
51878
+ message: "Expected string to be at most ".concat(this.options.maxLength, " characters long, got ").concat(src.length),
51879
+ value: src
51880
+ });
51881
+ }
51882
+ if ((_this$options2 = this.options) !== null && _this$options2 !== void 0 && _this$options2.minLength && src.length < this.options.minLength) {
51883
+ errors.push({
51884
+ message: "Expected string to be at least ".concat(this.options.minLength, " characters long, got ").concat(src.length),
51885
+ value: src
51886
+ });
51887
+ }
51888
+ if ((_this$options3 = this.options) !== null && _this$options3 !== void 0 && _this$options3.regexp && !this.options.regexp.test(src)) {
51889
+ errors.push({
51890
+ message: "Expected string to match reg exp: ".concat(this.options.regexp.toString(), ", got '").concat(src, "'"),
51891
+ value: src
51892
+ });
51893
+ }
51894
+ if (errors.length > 0) {
51895
+ return _defineProperty$5({}, path, errors);
51896
+ }
51897
+ return false;
51898
+ }
51899
+ }, {
51900
+ key: "assert",
51901
+ value: function assert(src) {
51902
+ if (this.opt && (src === null || src === void 0)) {
51903
+ return true;
51904
+ }
51905
+ return typeof src === "string";
51906
+ }
51907
+ }, {
51908
+ key: "optional",
51909
+ value: function optional() {
51910
+ return new StringSchema2(this.options, true, this.isRaw);
51911
+ }
51912
+ }, {
51913
+ key: "raw",
51914
+ value: function raw() {
51915
+ return new StringSchema2(this.options, this.opt, true);
51916
+ }
51917
+ }, {
51918
+ key: "serialize",
51919
+ value: function serialize() {
51920
+ var _this$options4, _this$options5, _this$options6;
51921
+ return {
51922
+ type: "string",
51923
+ options: {
51924
+ maxLength: (_this$options4 = this.options) === null || _this$options4 === void 0 ? void 0 : _this$options4.maxLength,
51925
+ minLength: (_this$options5 = this.options) === null || _this$options5 === void 0 ? void 0 : _this$options5.minLength,
51926
+ regexp: ((_this$options6 = this.options) === null || _this$options6 === void 0 ? void 0 : _this$options6.regexp) && {
51927
+ source: this.options.regexp.source,
51928
+ flags: this.options.regexp.flags
51929
+ }
51930
+ },
51931
+ opt: this.opt,
51932
+ raw: this.isRaw
51933
+ };
51934
+ }
51935
+ }]);
51936
+ return StringSchema2;
51937
+ }(Schema);
51848
51938
  function getVal(selector) {
51849
51939
  return newValProxy(serializedValOfSelectorSource(selector));
51850
51940
  }
@@ -51867,7 +51957,7 @@ function serializedValOfSelectorSource(selector) {
51867
51957
  var isObject = isObjectOrObjectSelector(child);
51868
51958
  if (isArray) {
51869
51959
  var array = GetSource in child ? child[GetSource] : child;
51870
- var valPath = Path in child ? child[Path] : void 0;
51960
+ var valPath = Path$1 in child ? child[Path$1] : void 0;
51871
51961
  return {
51872
51962
  val: array.map(function(item, i) {
51873
51963
  return rec(isSelector(item) ? item : newSelectorProxy(item, createValPathOfItem$1(valPath, i)));
@@ -51876,7 +51966,7 @@ function serializedValOfSelectorSource(selector) {
51876
51966
  };
51877
51967
  } else if (isObject) {
51878
51968
  var obj = GetSource in child ? child[GetSource] : child;
51879
- var _valPath = Path in child ? child[Path] : void 0;
51969
+ var _valPath = Path$1 in child ? child[Path$1] : void 0;
51880
51970
  return {
51881
51971
  val: obj !== null && Object.fromEntries(Object.entries(obj).map(function(_ref) {
51882
51972
  var _ref2 = _slicedToArray$1(_ref, 2), key = _ref2[0], value = _ref2[1];
@@ -51887,7 +51977,7 @@ function serializedValOfSelectorSource(selector) {
51887
51977
  } else if (isSelector(child)) {
51888
51978
  return {
51889
51979
  val: rec(child[GetSource]),
51890
- valPath: child[Path]
51980
+ valPath: child[Path$1]
51891
51981
  };
51892
51982
  } else {
51893
51983
  return child;
@@ -51929,13 +52019,13 @@ function newValProxy(val) {
51929
52019
  if (prop === "val") {
51930
52020
  return true;
51931
52021
  }
51932
- if (prop === Path) {
52022
+ if (prop === Path$1) {
51933
52023
  return true;
51934
52024
  }
51935
52025
  return hasOwn(target, prop);
51936
52026
  },
51937
52027
  get: function get(target, prop) {
51938
- if (prop === Path) {
52028
+ if (prop === Path$1) {
51939
52029
  return val.valPath;
51940
52030
  }
51941
52031
  if (prop === "val") {
@@ -51956,7 +52046,7 @@ function newValProxy(val) {
51956
52046
  });
51957
52047
  }
51958
52048
  default:
51959
- return _defineProperty$5(_defineProperty$5({}, Path, val.valPath), "val", val.val);
52049
+ return _defineProperty$5(_defineProperty$5({}, Path$1, val.valPath), "val", val.val);
51960
52050
  }
51961
52051
  }
51962
52052
  function hasOwn(obj, prop) {
@@ -54581,14 +54671,16 @@ function fromLexicalImageNode(node, files) {
54581
54671
  return _defineProperty$4(_defineProperty$4(_defineProperty$4({}, VAL_EXTENSION, "file"), FILE_REF_PROP, filePath), "metadata", {
54582
54672
  width: node.width || 0,
54583
54673
  height: node.height || 0,
54584
- sha256: sha256 || ""
54674
+ sha256: sha256 || "",
54675
+ mimeType
54585
54676
  });
54586
54677
  } else {
54587
54678
  var _sha = getParam("sha256", node.src);
54588
54679
  return _defineProperty$4(_defineProperty$4(_defineProperty$4({}, VAL_EXTENSION, "file"), FILE_REF_PROP, "/public".concat(node.src.split("?")[0])), "metadata", {
54589
54680
  width: node.width || 0,
54590
54681
  height: node.height || 0,
54591
- sha256: _sha || ""
54682
+ sha256: _sha || "",
54683
+ mimeType: node.mimeType || ""
54592
54684
  });
54593
54685
  }
54594
54686
  }
@@ -54691,7 +54783,8 @@ function toLexicalImageNode(node) {
54691
54783
  type: "image",
54692
54784
  src: url,
54693
54785
  width: node.width,
54694
- height: node.height
54786
+ height: node.height,
54787
+ mimeType: node.mimeType
54695
54788
  // TODO: altText
54696
54789
  });
54697
54790
  }
@@ -54886,12 +54979,13 @@ function parseTokens(tokens, sourceNodes, cursor) {
54886
54979
  children: subChildren
54887
54980
  });
54888
54981
  } else if (sourceNode._type === "file") {
54889
- var _sourceNode$metadata, _sourceNode$metadata2;
54982
+ var _sourceNode$metadata, _sourceNode$metadata2, _sourceNode$metadata3;
54890
54983
  children.push({
54891
54984
  tag: "img",
54892
54985
  src: Internal.convertFileSource(sourceNode).url,
54893
54986
  width: (_sourceNode$metadata = sourceNode.metadata) === null || _sourceNode$metadata === void 0 ? void 0 : _sourceNode$metadata.width,
54894
54987
  height: (_sourceNode$metadata2 = sourceNode.metadata) === null || _sourceNode$metadata2 === void 0 ? void 0 : _sourceNode$metadata2.height,
54988
+ mimeType: (_sourceNode$metadata3 = sourceNode.metadata) === null || _sourceNode$metadata3 === void 0 ? void 0 : _sourceNode$metadata3.mimeType,
54895
54989
  children: []
54896
54990
  });
54897
54991
  }
@@ -56377,7 +56471,7 @@ const Toolbar = ({
56377
56471
  }
56378
56472
  });
56379
56473
  }, [activeEditor]);
56380
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 flex flex-col px-4 py-2 border-b backdrop-blur-3xl bg-background/10 border-highlight", children: [
56474
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky top-0 flex flex-col px-4 py-2 border rounded-md rounded-b-none border-input bg-background", children: [
56381
56475
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-row gap-1", children: [
56382
56476
  /* @__PURE__ */ jsxRuntime.jsx(
56383
56477
  Dropdown$1,
@@ -56469,7 +56563,7 @@ const Toolbar = ({
56469
56563
  {
56470
56564
  type: "text",
56471
56565
  placeholder: "Enter URL",
56472
- className: "w-1/3 px-2 text-primary",
56566
+ className: "w-1/3 px-2 bg-background text-primary",
56473
56567
  value: url,
56474
56568
  onChange: (ev) => {
56475
56569
  ev.preventDefault();
@@ -56506,12 +56600,10 @@ const Toolbar$1 = Toolbar;
56506
56600
  function onError(error) {
56507
56601
  console.error(error);
56508
56602
  }
56509
- const TOOLBAR_HEIGHT = 28;
56510
56603
  const RichTextEditor = ({
56511
56604
  richtext,
56512
56605
  onEditor
56513
56606
  }) => {
56514
- const { windowSize } = useValOverlayContext();
56515
56607
  const prePopulatedState = (editor) => {
56516
56608
  editor.setEditorState(
56517
56609
  editor.parseEditorState({
@@ -56554,17 +56646,8 @@ const RichTextEditor = ({
56554
56646
  /* @__PURE__ */ jsxRuntime.jsx(
56555
56647
  LexicalRichTextPlugin_1.RichTextPlugin,
56556
56648
  {
56557
- contentEditable: /* @__PURE__ */ jsxRuntime.jsx(
56558
- "div",
56559
- {
56560
- className: "font-sans border-b text-primary border-highlight",
56561
- style: {
56562
- minHeight: (windowSize == null ? void 0 : windowSize.innerHeight) ? (windowSize == null ? void 0 : windowSize.innerHeight) - TOOLBAR_HEIGHT : void 0
56563
- },
56564
- children: /* @__PURE__ */ jsxRuntime.jsx(LexicalContentEditable, { className: "p-4 outline-none bg-fill" })
56565
- }
56566
- ),
56567
- placeholder: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "", children: "Enter some text..." }),
56649
+ contentEditable: /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsx(LexicalContentEditable, { className: "p-4 outline-none bg-fill" }) }),
56650
+ placeholder: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "" }),
56568
56651
  ErrorBoundary: LexicalErrorBoundary$1
56569
56652
  }
56570
56653
  ),
@@ -56629,17 +56712,22 @@ const LogIn = createLucideIcon("LogIn", [
56629
56712
  ["polyline", { points: "10 17 15 12 10 7", key: "1ail0h" }],
56630
56713
  ["line", { x1: "15", x2: "3", y1: "12", y2: "12", key: "v6grx8" }]
56631
56714
  ]);
56632
- const Maximize = createLucideIcon("Maximize", [
56633
- ["path", { d: "M8 3H5a2 2 0 0 0-2 2v3", key: "1dcmit" }],
56634
- ["path", { d: "M21 8V5a2 2 0 0 0-2-2h-3", key: "1e4gt3" }],
56635
- ["path", { d: "M3 16v3a2 2 0 0 0 2 2h3", key: "wsl5sc" }],
56636
- ["path", { d: "M16 21h3a2 2 0 0 0 2-2v-3", key: "18trek" }]
56715
+ const Maximize2 = createLucideIcon("Maximize2", [
56716
+ ["polyline", { points: "15 3 21 3 21 9", key: "mznyad" }],
56717
+ ["polyline", { points: "9 21 3 21 3 15", key: "1avn1i" }],
56718
+ ["line", { x1: "21", x2: "14", y1: "3", y2: "10", key: "ota7mn" }],
56719
+ ["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }]
56637
56720
  ]);
56638
- const Minimize = createLucideIcon("Minimize", [
56639
- ["path", { d: "M8 3v3a2 2 0 0 1-2 2H3", key: "hohbtr" }],
56640
- ["path", { d: "M21 8h-3a2 2 0 0 1-2-2V3", key: "5jw1f3" }],
56641
- ["path", { d: "M3 16h3a2 2 0 0 1 2 2v3", key: "198tvr" }],
56642
- ["path", { d: "M16 21v-3a2 2 0 0 1 2-2h3", key: "ph8mxp" }]
56721
+ const Menu = createLucideIcon("Menu", [
56722
+ ["line", { x1: "4", x2: "20", y1: "12", y2: "12", key: "1e0a9i" }],
56723
+ ["line", { x1: "4", x2: "20", y1: "6", y2: "6", key: "1owob3" }],
56724
+ ["line", { x1: "4", x2: "20", y1: "18", y2: "18", key: "yk5zj1" }]
56725
+ ]);
56726
+ const Minimize2 = createLucideIcon("Minimize2", [
56727
+ ["polyline", { points: "4 14 10 14 10 20", key: "11kfnr" }],
56728
+ ["polyline", { points: "20 10 14 10 14 4", key: "rlmsce" }],
56729
+ ["line", { x1: "14", x2: "21", y1: "10", y2: "3", key: "o5lafz" }],
56730
+ ["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }]
56643
56731
  ]);
56644
56732
  const Moon = createLucideIcon("Moon", [
56645
56733
  ["path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z", key: "a7tn18" }]
@@ -56679,20 +56767,35 @@ const PREV_URL_KEY = "valbuild:urlBeforeNavigation";
56679
56767
  function ValMenu({
56680
56768
  api,
56681
56769
  patches,
56770
+ direction,
56682
56771
  onCommit
56683
56772
  }) {
56684
56773
  const { theme: theme2, setTheme, editMode, setEditMode, session } = useValOverlayContext();
56685
56774
  if (session.status === "success" && session.data.mode === "unauthorized") {
56686
- return /* @__PURE__ */ jsxRuntime.jsxs(SingleItemMenu, { href: api.getLoginUrl(window.location.href), children: [
56687
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Login" }),
56688
- /* @__PURE__ */ jsxRuntime.jsx(LogIn, { size: 18 })
56689
- ] });
56775
+ return /* @__PURE__ */ jsxRuntime.jsxs(
56776
+ SingleItemMenu,
56777
+ {
56778
+ direction,
56779
+ href: api.getLoginUrl(window.location.href),
56780
+ children: [
56781
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Login" }),
56782
+ /* @__PURE__ */ jsxRuntime.jsx(LogIn, { size: 18 })
56783
+ ]
56784
+ }
56785
+ );
56690
56786
  }
56691
56787
  if (session.status === "success" && !session.data.enabled) {
56692
- return /* @__PURE__ */ jsxRuntime.jsxs(SingleItemMenu, { href: api.getEnableUrl(window.location.href), children: [
56693
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Enable" }),
56694
- /* @__PURE__ */ jsxRuntime.jsx(LogIn, { size: 18 })
56695
- ] });
56788
+ return /* @__PURE__ */ jsxRuntime.jsxs(
56789
+ SingleItemMenu,
56790
+ {
56791
+ direction,
56792
+ href: api.getEnableUrl(window.location.href),
56793
+ children: [
56794
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Enable" }),
56795
+ /* @__PURE__ */ jsxRuntime.jsx(LogIn, { size: 18 })
56796
+ ]
56797
+ }
56798
+ );
56696
56799
  }
56697
56800
  const [patchCount, setPatchCount] = React$3.useState();
56698
56801
  React$3.useEffect(() => {
@@ -56702,9 +56805,9 @@ function ValMenu({
56702
56805
  }
56703
56806
  setPatchCount(patchCount2);
56704
56807
  }, [patches]);
56705
- return /* @__PURE__ */ jsxRuntime.jsxs(MenuContainer, { children: [
56808
+ return /* @__PURE__ */ jsxRuntime.jsxs(MenuContainer, { direction, children: [
56706
56809
  /* @__PURE__ */ jsxRuntime.jsx(
56707
- MenuButton,
56810
+ MenuButton$1,
56708
56811
  {
56709
56812
  active: editMode === "hover",
56710
56813
  onClick: () => {
@@ -56714,7 +56817,7 @@ function ValMenu({
56714
56817
  }
56715
56818
  ),
56716
56819
  /* @__PURE__ */ jsxRuntime.jsx(
56717
- MenuButton,
56820
+ MenuButton$1,
56718
56821
  {
56719
56822
  onClick: () => {
56720
56823
  setTheme(theme2 === "dark" ? "light" : "dark");
@@ -56726,7 +56829,7 @@ function ValMenu({
56726
56829
  }
56727
56830
  ),
56728
56831
  /* @__PURE__ */ jsxRuntime.jsx(
56729
- MenuButton,
56832
+ MenuButton$1,
56730
56833
  {
56731
56834
  active: editMode === "full",
56732
56835
  onClick: () => {
@@ -56738,11 +56841,11 @@ function ValMenu({
56738
56841
  window.location.href = prevUrl || "/";
56739
56842
  }
56740
56843
  },
56741
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-[24px] w-[24px] flex justify-center items-center", children: editMode === "full" ? /* @__PURE__ */ jsxRuntime.jsx(Minimize, { size: 15 }) : /* @__PURE__ */ jsxRuntime.jsx(Maximize, { size: 15 }) })
56844
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-[24px] w-[24px] flex justify-center items-center", children: editMode === "full" ? /* @__PURE__ */ jsxRuntime.jsx(Minimize2, { size: 15 }) : /* @__PURE__ */ jsxRuntime.jsx(Maximize2, { size: 15 }) })
56742
56845
  }
56743
56846
  ),
56744
56847
  patchCount !== void 0 && session.status === "success" && session.data.mode === "proxy" && /* @__PURE__ */ jsxRuntime.jsx(
56745
- MenuButton,
56848
+ MenuButton$1,
56746
56849
  {
56747
56850
  onClick: () => {
56748
56851
  if (patchCount > 0) {
@@ -56770,16 +56873,42 @@ function ValMenu({
56770
56873
  }
56771
56874
  function SingleItemMenu({
56772
56875
  href,
56876
+ direction,
56773
56877
  children
56774
56878
  }) {
56775
- return /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsx("a", { className, href, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center px-2 gap-x-2", children }) }) });
56879
+ return /* @__PURE__ */ jsxRuntime.jsx(
56880
+ "div",
56881
+ {
56882
+ className: classNames(
56883
+ "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",
56884
+ {
56885
+ "flex-col items-start": direction === "vertical",
56886
+ "flex-row items-center": direction === "horizontal"
56887
+ }
56888
+ ),
56889
+ children: /* @__PURE__ */ jsxRuntime.jsx("a", { className, href, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center px-2 gap-y-2", children }) })
56890
+ }
56891
+ );
56776
56892
  }
56777
56893
  function MenuContainer({
56778
- children
56894
+ children,
56895
+ direction
56779
56896
  }) {
56780
- return /* @__PURE__ */ jsxRuntime.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 });
56897
+ return /* @__PURE__ */ jsxRuntime.jsx(
56898
+ "div",
56899
+ {
56900
+ className: classNames(
56901
+ "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",
56902
+ {
56903
+ "flex-col items-start": direction === "vertical",
56904
+ "flex-row items-center": direction === "horizontal"
56905
+ }
56906
+ ),
56907
+ children
56908
+ }
56909
+ );
56781
56910
  }
56782
- function MenuButton({
56911
+ function MenuButton$1({
56783
56912
  active,
56784
56913
  onClick,
56785
56914
  children
@@ -56788,7 +56917,7 @@ function MenuButton({
56788
56917
  "button",
56789
56918
  {
56790
56919
  className: classNames(className, {
56791
- "bg-accent drop-shadow-[0px_0px_12px_rgba(56,205,152,0.60)]": active
56920
+ "bg-accent text-accent-foreground drop-shadow-[0px_0px_12px_hsl(var(--accent))]": active
56792
56921
  }),
56793
56922
  onClick,
56794
56923
  children
@@ -62376,14 +62505,21 @@ const twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
62376
62505
  function cn(...inputs) {
62377
62506
  return twMerge(clsx(inputs));
62378
62507
  }
62379
- const ScrollArea = React__namespace.forwardRef(({ className: className2, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
62508
+ const ScrollArea = React__namespace.forwardRef(({ className: className2, children, innerRef, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
62380
62509
  $57acba87d6e25586$export$be92b6f5f03c0fe9,
62381
62510
  {
62382
62511
  ref,
62383
62512
  className: cn("relative overflow-hidden", className2),
62384
62513
  ...props,
62385
62514
  children: [
62386
- /* @__PURE__ */ jsxRuntime.jsx($57acba87d6e25586$export$d5c6c08dc2d3ca7, { className: "h-full w-full rounded-[inherit]", children }),
62515
+ /* @__PURE__ */ jsxRuntime.jsx(
62516
+ $57acba87d6e25586$export$d5c6c08dc2d3ca7,
62517
+ {
62518
+ className: "h-full w-full rounded-[inherit]",
62519
+ ref: innerRef,
62520
+ children
62521
+ }
62522
+ ),
62387
62523
  /* @__PURE__ */ jsxRuntime.jsx(ScrollBar, {}),
62388
62524
  /* @__PURE__ */ jsxRuntime.jsx($57acba87d6e25586$export$ac61190d9fc311a9, {})
62389
62525
  ]
@@ -62414,8 +62550,8 @@ const ScrollBar = React__namespace.forwardRef(({ className: className2, orientat
62414
62550
  }
62415
62551
  ));
62416
62552
  ScrollBar.displayName = $57acba87d6e25586$export$2fabd85d0eba3c57.displayName;
62417
- const MIN_WIDTH = 320;
62418
- const MIN_HEIGHT = 320;
62553
+ const MIN_WIDTH = 400;
62554
+ const MIN_HEIGHT = 250;
62419
62555
  function ValWindow({
62420
62556
  position,
62421
62557
  onClose,
@@ -62438,15 +62574,13 @@ function ValWindow({
62438
62574
  const { windowSize, setWindowSize } = useValOverlayContext();
62439
62575
  React$3.useEffect(() => {
62440
62576
  var _a, _b;
62441
- if (!windowSize) {
62442
- setWindowSize({
62443
- height: MIN_HEIGHT,
62444
- width: MIN_WIDTH,
62445
- innerHeight: MIN_HEIGHT - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62446
- });
62447
- }
62448
- }, [windowSize]);
62449
- const bottomRef = React$3.useRef(null);
62577
+ setWindowSize({
62578
+ height: window.innerHeight - 30,
62579
+ width: MIN_WIDTH,
62580
+ innerHeight: window.innerHeight - 30 - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62581
+ });
62582
+ }, []);
62583
+ const bottomRef = React$3.useRef(null);
62450
62584
  return /* @__PURE__ */ jsxRuntime.jsx(
62451
62585
  Resizable,
62452
62586
  {
@@ -62457,7 +62591,7 @@ function ValWindow({
62457
62591
  var _a, _b;
62458
62592
  return setWindowSize({
62459
62593
  ...size2,
62460
- 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))
62594
+ innerHeight: size2.height - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
62461
62595
  });
62462
62596
  },
62463
62597
  handle: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed bottom-0 right-0 cursor-se-resize", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -62491,14 +62625,16 @@ function ValWindow({
62491
62625
  width: (windowSize == null ? void 0 : windowSize.width) || MIN_WIDTH,
62492
62626
  height: (windowSize == null ? void 0 : windowSize.height) || MIN_HEIGHT,
62493
62627
  left: draggedPosition.left,
62494
- top: draggedPosition.top
62628
+ top: draggedPosition.top,
62629
+ right: draggedPosition.right,
62630
+ bottom: draggedPosition.bottom
62495
62631
  },
62496
62632
  children: [
62497
62633
  /* @__PURE__ */ jsxRuntime.jsxs(
62498
62634
  "div",
62499
62635
  {
62500
62636
  ref: dragRef,
62501
- className: "relative flex items-center justify-center px-2 pt-2 text-primary",
62637
+ className: "relative flex items-center justify-center px-2 py-2 text-primary",
62502
62638
  children: [
62503
62639
  /* @__PURE__ */ jsxRuntime.jsx(
62504
62640
  AlignJustify,
@@ -62523,56 +62659,32 @@ function ValWindow({
62523
62659
  ]
62524
62660
  }
62525
62661
  ),
62526
- /* @__PURE__ */ jsxRuntime.jsxs(
62527
- "form",
62528
- {
62529
- className: "h-full",
62530
- onSubmit: (ev) => {
62531
- ev.preventDefault();
62532
- },
62533
- children: [
62534
- Array.isArray(children) && children.slice(0, 1),
62535
- /* @__PURE__ */ jsxRuntime.jsx(
62536
- ScrollArea,
62537
- {
62538
- className: "relative",
62539
- style: {
62540
- height: windowSize == null ? void 0 : windowSize.innerHeight
62541
- },
62542
- children: Array.isArray(children) ? children.slice(1, -1) : children
62543
- }
62544
- ),
62545
- /* @__PURE__ */ jsxRuntime.jsx("div", { ref: bottomRef, className: "w-full px-4 pb-0", children: Array.isArray(children) && children.slice(-1) })
62546
- ]
62547
- }
62548
- )
62662
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
62663
+ Array.isArray(children) && children.slice(0, 1),
62664
+ /* @__PURE__ */ jsxRuntime.jsx(
62665
+ ScrollArea,
62666
+ {
62667
+ className: "relative",
62668
+ style: {
62669
+ height: windowSize == null ? void 0 : windowSize.innerHeight
62670
+ },
62671
+ children: Array.isArray(children) ? children.slice(1, -1) : children
62672
+ }
62673
+ ),
62674
+ /* @__PURE__ */ jsxRuntime.jsx("div", { ref: bottomRef, className: "w-full px-4 pb-0", children: Array.isArray(children) && children.slice(-1) })
62675
+ ] })
62549
62676
  ]
62550
62677
  }
62551
62678
  )
62552
62679
  }
62553
62680
  );
62554
62681
  }
62555
- function useDrag({
62556
- position: initPosition
62557
- }) {
62682
+ function useDrag({ position: initPosition }) {
62558
62683
  var _a, _b;
62559
- const [position, setPosition] = React$3.useState({ left: 0, top: 0 });
62684
+ const [position, setPosition] = React$3.useState({ left: window.innerWidth - MIN_WIDTH - (24 + 50), top: 16 });
62560
62685
  React$3.useEffect(() => {
62561
- var _a2, _b2;
62562
62686
  if (initPosition) {
62563
- const left = initPosition.left - (((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2;
62564
- const top = initPosition.top - 16;
62565
- setPosition({
62566
- left: left < 0 ? 0 : left,
62567
- top: top < 0 ? 0 : top
62568
- });
62569
- } else {
62570
- const left = window.innerWidth / 2 - MIN_WIDTH / 2 - window.scrollX;
62571
- const top = window.innerHeight / 2 - MIN_HEIGHT / 2 + window.scrollY;
62572
- setPosition({
62573
- left,
62574
- top
62575
- });
62687
+ setPosition(initPosition);
62576
62688
  }
62577
62689
  }, [initPosition]);
62578
62690
  const [mouseDown, setMouseDown] = React$3.useState(false);
@@ -62586,8 +62698,8 @@ function useDrag({
62586
62698
  if (mouseDown) {
62587
62699
  e.preventDefault();
62588
62700
  e.stopPropagation();
62589
- const left = -((((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2) + e.pageX;
62590
- const top = -((((_d = (_c = ref == null ? void 0 : ref.current) == null ? void 0 : _c.getBoundingClientRect()) == null ? void 0 : _d.height) || 0) / 2) + +e.pageY;
62701
+ const left = -((((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2) + e.clientX;
62702
+ const top = -((((_d = (_c = ref == null ? void 0 : ref.current) == null ? void 0 : _c.getBoundingClientRect()) == null ? void 0 : _d.height) || 0) / 2) + +e.clientY;
62591
62703
  setPosition({
62592
62704
  left: left < 0 ? 0 : left,
62593
62705
  top: top < 0 ? 0 : top
@@ -62765,6 +62877,7 @@ function Grid({ children }) {
62765
62877
  const x = React$3.useRef(0);
62766
62878
  const dragRef = React$3.useRef(null);
62767
62879
  const originalWidth = React$3.useRef(0);
62880
+ const [showMobileLeftMenu, setShowMobileLeftMenu] = React$3.useState(true);
62768
62881
  const handleMouseUp = () => {
62769
62882
  isResizing.current = false;
62770
62883
  dragRef.current = null;
@@ -62805,17 +62918,40 @@ function Grid({ children }) {
62805
62918
  document.removeEventListener("mousemove", handleMouseMove);
62806
62919
  };
62807
62920
  }, []);
62808
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex h-screen", children: [
62921
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex h-screen", children: [
62809
62922
  /* @__PURE__ */ jsxRuntime.jsxs(
62810
62923
  "div",
62811
62924
  {
62812
62925
  ref: leftColRef,
62813
- className: "relative border-r border-border",
62814
- style: { width: 300 },
62926
+ className: classNames(
62927
+ "absolute top-0 left-0 border-r border-border md:relative z-[1] bg-gradient-to-br from-card from-50% to-background",
62928
+ {
62929
+ "w-[300px]": showMobileLeftMenu,
62930
+ "w-0 md:w-[300px]": !showMobileLeftMenu
62931
+ }
62932
+ ),
62815
62933
  children: [
62816
62934
  /* @__PURE__ */ jsxRuntime.jsxs(Grid.Column, { children: [
62817
- header1,
62818
- /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { style: { height: "calc(100vh - 50px)" }, children: body1 })
62935
+ /* @__PURE__ */ jsxRuntime.jsx(
62936
+ MenuButton,
62937
+ {
62938
+ showOnMobile: !showMobileLeftMenu,
62939
+ onClick: () => {
62940
+ setShowMobileLeftMenu(!showMobileLeftMenu);
62941
+ },
62942
+ children: header1
62943
+ }
62944
+ ),
62945
+ /* @__PURE__ */ jsxRuntime.jsx(
62946
+ ScrollArea,
62947
+ {
62948
+ style: { height: "calc(100vh - 50px)" },
62949
+ onClick: () => {
62950
+ setShowMobileLeftMenu(false);
62951
+ },
62952
+ children: body1
62953
+ }
62954
+ )
62819
62955
  ] }),
62820
62956
  /* @__PURE__ */ jsxRuntime.jsx(
62821
62957
  "div",
@@ -62834,7 +62970,28 @@ function Grid({ children }) {
62834
62970
  "w-full": !header3 && !body3
62835
62971
  }),
62836
62972
  children: /* @__PURE__ */ jsxRuntime.jsxs(Grid.Column, { children: [
62837
- header2,
62973
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex w-full border-b border-border", children: [
62974
+ /* @__PURE__ */ jsxRuntime.jsx(
62975
+ MenuButton,
62976
+ {
62977
+ className: "md:hidden",
62978
+ showOnMobile: showMobileLeftMenu,
62979
+ onClick: () => {
62980
+ setShowMobileLeftMenu(!showMobileLeftMenu);
62981
+ },
62982
+ children: header1
62983
+ }
62984
+ ),
62985
+ /* @__PURE__ */ jsxRuntime.jsx(
62986
+ "span",
62987
+ {
62988
+ className: classNames({
62989
+ "pl-[300px] md:pl-0": showMobileLeftMenu
62990
+ }),
62991
+ children: header2
62992
+ }
62993
+ )
62994
+ ] }),
62838
62995
  /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { style: { height: "calc(100vh - 50px)" }, children: body2 })
62839
62996
  ] })
62840
62997
  }
@@ -62862,111 +63019,30 @@ function Grid({ children }) {
62862
63019
  )
62863
63020
  ] });
62864
63021
  }
62865
- Grid.Column = ({ children }) => {
62866
- const [header, body] = React$3.Children.toArray(children);
62867
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
62868
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center border-b border-border", children: header }),
62869
- body
62870
- ] });
62871
- };
62872
- const Section = ({ className: className2 }) => {
63022
+ function MenuButton({
63023
+ className: className2,
63024
+ showOnMobile,
63025
+ onClick,
63026
+ children
63027
+ }) {
62873
63028
  return /* @__PURE__ */ jsxRuntime.jsxs(
62874
- "svg",
63029
+ "div",
62875
63030
  {
62876
- width: "9",
62877
- height: "10",
62878
- viewBox: "0 0 9 10",
62879
- className: className2,
62880
- fill: "currentColor",
62881
- xmlns: "http://www.w3.org/2000/svg",
63031
+ className: classNames("flex items-center px-4 md:px-4", className2, {
63032
+ "hidden md:flex": showOnMobile
63033
+ }),
62882
63034
  children: [
62883
- /* @__PURE__ */ jsxRuntime.jsxs("g", { clipPath: "url(#clip0_1222_1618)", children: [
62884
- /* @__PURE__ */ jsxRuntime.jsx(
62885
- "path",
62886
- {
62887
- fillRule: "evenodd",
62888
- clipRule: "evenodd",
62889
- d: "M9 1.5H0V0.5H9V1.5Z",
62890
- fill: "currentColor"
62891
- }
62892
- ),
62893
- /* @__PURE__ */ jsxRuntime.jsx(
62894
- "path",
62895
- {
62896
- fillRule: "evenodd",
62897
- clipRule: "evenodd",
62898
- d: "M9 9.5H0V8.5H9V9.5Z",
62899
- fill: "currentColor"
62900
- }
62901
- )
62902
- ] }),
62903
- /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsx("clipPath", { id: "clip0_1222_1618", children: /* @__PURE__ */ jsxRuntime.jsx(
62904
- "rect",
62905
- {
62906
- width: "9",
62907
- height: "9",
62908
- fill: "white",
62909
- transform: "translate(0 0.5)"
62910
- }
62911
- ) }) })
63035
+ /* @__PURE__ */ jsxRuntime.jsx("button", { className: "md:hidden", onClick, children: /* @__PURE__ */ jsxRuntime.jsx(Menu, {}) }),
63036
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex items-center justify-between w-full", children })
62912
63037
  ]
62913
63038
  }
62914
63039
  );
62915
- };
62916
- const Section$1 = Section;
62917
- const TextIcon = ({ className: className2 }) => {
62918
- return /* @__PURE__ */ jsxRuntime.jsx(
62919
- "svg",
62920
- {
62921
- width: "9",
62922
- height: "10",
62923
- viewBox: "0 0 9 10",
62924
- fill: "currentColor",
62925
- xmlns: "http://www.w3.org/2000/svg",
62926
- className: className2,
62927
- children: /* @__PURE__ */ jsxRuntime.jsx("g", { clipPath: "url(#clip0_1229_1625)", children: /* @__PURE__ */ jsxRuntime.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" }) })
62928
- }
62929
- );
62930
- };
62931
- const TextIcon$1 = TextIcon;
62932
- function Tree({ children, rootPath }) {
62933
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col w-full py-2 text-xs", children: React$3.Children.map(children, (child) => {
62934
- return React$3.cloneElement(child, {
62935
- paths: [rootPath]
62936
- });
62937
- }) });
62938
63040
  }
62939
- Tree.Node = ({
62940
- children,
62941
- paths = [],
62942
- path,
62943
- level = 1,
62944
- type,
62945
- setActivePath
62946
- }) => {
62947
- const paddingLeft = level * 30;
62948
- const logo = type === "string" ? /* @__PURE__ */ jsxRuntime.jsx(TextIcon$1, {}) : type === "image" ? /* @__PURE__ */ jsxRuntime.jsx(ImageIcon$1, { className: "h-[9px] w-[9px]" }) : /* @__PURE__ */ jsxRuntime.jsx(Section$1, {});
62949
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full", children: [
62950
- /* @__PURE__ */ jsxRuntime.jsx(
62951
- "button",
62952
- {
62953
- className: "flex justify-between w-full group py-2 text-xs font-[400] shrink-0",
62954
- onClick: () => {
62955
- setActivePath && setActivePath(path);
62956
- },
62957
- style: { paddingLeft },
62958
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2", children: [
62959
- logo,
62960
- /* @__PURE__ */ jsxRuntime.jsx("p", { children: path })
62961
- ] })
62962
- }
62963
- ),
62964
- children && /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: React$3.Children.map(children, (child) => {
62965
- return React$3.cloneElement(child, {
62966
- level: level + 1,
62967
- paths: [...paths, path]
62968
- });
62969
- }) })
63041
+ Grid.Column = ({ children, className: className2 }) => {
63042
+ const [header, body] = React$3.Children.toArray(children);
63043
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classNames("flex flex-col", className2), children: [
63044
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center border-b border-border", children: header }),
63045
+ body
62970
63046
  ] });
62971
63047
  };
62972
63048
  const falsyToString = (value) => typeof value === "boolean" ? "".concat(value) : value === 0 ? "0" : value;
@@ -67470,8 +67546,10 @@ function ValFormField({
67470
67546
  return /* @__PURE__ */ jsxRuntime.jsx(
67471
67547
  StringField,
67472
67548
  {
67549
+ path,
67473
67550
  defaultValue: source,
67474
67551
  disabled,
67552
+ schema,
67475
67553
  registerPatchCallback,
67476
67554
  onSubmit
67477
67555
  }
@@ -67546,7 +67624,13 @@ function ValFormField({
67546
67624
  }
67547
67625
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
67548
67626
  "Unsupported schema: ",
67549
- schema.type
67627
+ schema.type,
67628
+ " (source type: ",
67629
+ typeof source,
67630
+ " source:",
67631
+ " ",
67632
+ JSON.stringify(source),
67633
+ ")"
67550
67634
  ] });
67551
67635
  }
67552
67636
  function createImagePatch(path, data, filename, metadata) {
@@ -67589,17 +67673,29 @@ function createImagePatch(path, data, filename, metadata) {
67589
67673
  }
67590
67674
  ];
67591
67675
  }
67676
+ function createImageMetadataPatch(path, metadata) {
67677
+ const metadataPath = path + "/metadata";
67678
+ return [
67679
+ {
67680
+ value: metadata,
67681
+ op: "replace",
67682
+ path: metadataPath
67683
+ }
67684
+ ];
67685
+ }
67592
67686
  function ImageField({
67593
67687
  path,
67594
67688
  defaultValue,
67595
67689
  onSubmit,
67596
67690
  registerPatchCallback
67597
67691
  }) {
67692
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
67598
67693
  const [data, setData] = React$3.useState(
67599
67694
  null
67600
67695
  );
67601
67696
  const [loading, setLoading] = React$3.useState(false);
67602
67697
  const [metadata, setMetadata] = React$3.useState();
67698
+ const [hotspot, setHotspot] = React$3.useState();
67603
67699
  const [url, setUrl] = React$3.useState();
67604
67700
  React$3.useEffect(() => {
67605
67701
  setUrl(defaultValue && Internal.convertFileSource(defaultValue).url);
@@ -67616,56 +67712,143 @@ function ImageField({
67616
67712
  });
67617
67713
  }
67618
67714
  }, [data, defaultValue]);
67715
+ React$3.useEffect(() => {
67716
+ var _a2;
67717
+ if (hotspot) {
67718
+ if (metadata) {
67719
+ const newMetadata = {
67720
+ ...metadata,
67721
+ hotspot
67722
+ };
67723
+ setMetadata(newMetadata);
67724
+ } else if (defaultValue == null ? void 0 : defaultValue.metadata) {
67725
+ setMetadata({
67726
+ ...defaultValue.metadata,
67727
+ hotspot
67728
+ });
67729
+ } else {
67730
+ console.error("Neither image metadata nor value is set");
67731
+ }
67732
+ } else {
67733
+ if ((_a2 = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _a2.hotspot) {
67734
+ setHotspot(defaultValue.metadata.hotspot);
67735
+ }
67736
+ }
67737
+ }, [hotspot, defaultValue]);
67619
67738
  return /* @__PURE__ */ jsxRuntime.jsxs(FieldContainer, { children: [
67620
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "max-w-4xl p-4", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { htmlFor: `img_input:${path}`, className: "", children: [
67621
- data || url ? /* @__PURE__ */ jsxRuntime.jsx("img", { src: (data == null ? void 0 : data.src) || url }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Empty" }),
67739
+ /* @__PURE__ */ jsxRuntime.jsx(
67740
+ "div",
67741
+ {
67742
+ 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",
67743
+ children: data || url ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
67744
+ hotspot && /* @__PURE__ */ jsxRuntime.jsx(
67745
+ "div",
67746
+ {
67747
+ className: "rounded-full h-[12px] w-[12px] bg-background mix-blend-difference border-accent border-2 absolute pointer-events-none",
67748
+ style: {
67749
+ top: `${hotspot.y * 100}%`,
67750
+ left: `${hotspot.x * 100}%`
67751
+ }
67752
+ }
67753
+ ),
67754
+ /* @__PURE__ */ jsxRuntime.jsx(
67755
+ "img",
67756
+ {
67757
+ src: (data == null ? void 0 : data.src) || url,
67758
+ draggable: false,
67759
+ className: "w-full",
67760
+ style: {
67761
+ cursor: "crosshair"
67762
+ },
67763
+ onClick: (ev) => {
67764
+ const { width: width2, height: height2, left, top } = ev.currentTarget.getBoundingClientRect();
67765
+ const hotspotX = (ev.clientX - 6 - left) / width2;
67766
+ const hotspotY = (ev.clientY - 6 - top) / height2;
67767
+ setHotspot({
67768
+ x: hotspotX,
67769
+ y: hotspotY,
67770
+ width: 1,
67771
+ height: 1
67772
+ });
67773
+ }
67774
+ }
67775
+ )
67776
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { children: "Select image below" })
67777
+ },
67778
+ path
67779
+ ),
67780
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full p-4 border border-t-0 rounded-b-sm bg-background border-input", children: [
67781
+ /* @__PURE__ */ jsxRuntime.jsx(
67782
+ "label",
67783
+ {
67784
+ htmlFor: `img_input:${path}`,
67785
+ className: "block w-full px-1 py-2 text-sm text-center rounded-md cursor-pointer bg-primary text-background",
67786
+ children: "Update"
67787
+ }
67788
+ ),
67622
67789
  /* @__PURE__ */ jsxRuntime.jsx(
67623
67790
  "input",
67624
67791
  {
67792
+ hidden: true,
67625
67793
  id: `img_input:${path}`,
67626
67794
  type: "file",
67627
- hidden: true,
67628
67795
  onChange: (ev) => {
67629
67796
  readImage(ev).then((res) => {
67630
67797
  setData({ src: res.src, filename: res.filename });
67631
- if (res.width && res.height) {
67798
+ if (res.width && res.height && res.mimeType) {
67632
67799
  setMetadata({
67633
67800
  sha256: res.sha256,
67634
67801
  width: res.width,
67635
- height: res.height
67802
+ height: res.height,
67803
+ mimeType: res.mimeType,
67804
+ hotspot
67636
67805
  });
67637
67806
  } else {
67638
67807
  setMetadata(void 0);
67808
+ setHotspot(void 0);
67639
67809
  }
67640
67810
  }).catch((err2) => {
67641
67811
  console.error(err2.message);
67642
67812
  setData(null);
67813
+ setHotspot(void 0);
67643
67814
  setMetadata(void 0);
67644
67815
  });
67645
67816
  }
67646
67817
  }
67647
67818
  )
67648
- ] }) }, path),
67649
- onSubmit && data && /* @__PURE__ */ jsxRuntime.jsx(
67819
+ ] }),
67820
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67650
67821
  SubmitButton,
67651
67822
  {
67652
67823
  loading,
67824
+ 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),
67653
67825
  onClick: () => {
67654
- setLoading(true);
67655
- onSubmit(
67656
- (path2) => Promise.resolve(
67657
- createImagePatch(
67658
- path2,
67659
- data.src,
67660
- data.filename ?? null,
67661
- metadata
67826
+ if (data) {
67827
+ setLoading(true);
67828
+ onSubmit(
67829
+ (path2) => Promise.resolve(
67830
+ createImagePatch(
67831
+ path2,
67832
+ data.src,
67833
+ data.filename ?? null,
67834
+ metadata
67835
+ )
67662
67836
  )
67663
- )
67664
- ).finally(() => {
67665
- setLoading(false);
67666
- setData(null);
67667
- setMetadata(void 0);
67668
- });
67837
+ ).finally(() => {
67838
+ setLoading(false);
67839
+ setData(null);
67840
+ setMetadata(void 0);
67841
+ });
67842
+ } else if (metadata) {
67843
+ setLoading(true);
67844
+ onSubmit(
67845
+ (path2) => Promise.resolve(createImageMetadataPatch(path2, metadata))
67846
+ ).finally(() => {
67847
+ setLoading(false);
67848
+ setData(null);
67849
+ setMetadata(void 0);
67850
+ });
67851
+ }
67669
67852
  }
67670
67853
  }
67671
67854
  )
@@ -67717,6 +67900,15 @@ function RichTextField({
67717
67900
  editor.registerDecoratorListener(() => {
67718
67901
  setDidChange(true);
67719
67902
  });
67903
+ editor.registerMutationListener(LexicalLink_1.LinkNode, () => {
67904
+ setDidChange(true);
67905
+ });
67906
+ editor.registerMutationListener(ImageNode, () => {
67907
+ setDidChange(true);
67908
+ });
67909
+ editor.registerMutationListener(LexicalExports.TextNode, () => {
67910
+ setDidChange(true);
67911
+ });
67720
67912
  }
67721
67913
  }, [editor]);
67722
67914
  React$3.useEffect(() => {
@@ -67737,10 +67929,11 @@ function RichTextField({
67737
67929
  }
67738
67930
  }
67739
67931
  ),
67740
- onSubmit && didChange && /* @__PURE__ */ jsxRuntime.jsx(
67932
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67741
67933
  SubmitButton,
67742
67934
  {
67743
67935
  loading: loading || !editor,
67936
+ enabled: didChange,
67744
67937
  onClick: () => {
67745
67938
  if (editor) {
67746
67939
  setLoading(true);
@@ -67822,10 +68015,11 @@ function KeyOfField({
67822
68015
  ]
67823
68016
  }
67824
68017
  ),
67825
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsxRuntime.jsx(
68018
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67826
68019
  SubmitButton,
67827
68020
  {
67828
68021
  loading,
68022
+ enabled: defaultValue !== value,
67829
68023
  onClick: () => {
67830
68024
  setLoading(true);
67831
68025
  onSubmit(async (path) => [
@@ -67879,10 +68073,11 @@ function NumberField({
67879
68073
  type: "number"
67880
68074
  }
67881
68075
  ),
67882
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsxRuntime.jsx(
68076
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67883
68077
  SubmitButton,
67884
68078
  {
67885
68079
  loading,
68080
+ enabled: defaultValue !== value,
67886
68081
  onClick: () => {
67887
68082
  setLoading(true);
67888
68083
  onSubmit(async (path) => {
@@ -67905,6 +68100,8 @@ function NumberField({
67905
68100
  function StringField({
67906
68101
  disabled,
67907
68102
  defaultValue,
68103
+ path,
68104
+ schema,
67908
68105
  registerPatchCallback,
67909
68106
  onSubmit
67910
68107
  }) {
@@ -67916,18 +68113,28 @@ function StringField({
67916
68113
  const ref = React$3.useRef(null);
67917
68114
  React$3.useEffect(() => {
67918
68115
  if (registerPatchCallback) {
67919
- registerPatchCallback(async (path) => {
68116
+ registerPatchCallback(async (path2) => {
67920
68117
  var _a;
67921
68118
  return [
67922
68119
  {
67923
68120
  op: "replace",
67924
- path,
68121
+ path: path2,
67925
68122
  value: ((_a = ref.current) == null ? void 0 : _a.value) || ""
67926
68123
  }
67927
68124
  ];
67928
68125
  });
67929
68126
  }
67930
68127
  }, []);
68128
+ const actualSchema = new StringSchema(
68129
+ schema.options ? {
68130
+ ...schema.options,
68131
+ regexp: schema.options.regexp ? new RegExp(
68132
+ schema.options.regexp.source,
68133
+ schema.options.regexp.flags
68134
+ ) : void 0
68135
+ } : void 0
68136
+ );
68137
+ const validationErrors = actualSchema.validate(path, value);
67931
68138
  return /* @__PURE__ */ jsxRuntime.jsxs(FieldContainer, { children: [
67932
68139
  /* @__PURE__ */ jsxRuntime.jsx(
67933
68140
  Input,
@@ -67938,18 +68145,20 @@ function StringField({
67938
68145
  onChange: (e) => setValue(e.target.value)
67939
68146
  }
67940
68147
  ),
67941
- onSubmit && defaultValue !== value && /* @__PURE__ */ jsxRuntime.jsx(
68148
+ onSubmit && /* @__PURE__ */ jsxRuntime.jsx(
67942
68149
  SubmitButton,
67943
68150
  {
68151
+ validationErrors: validationErrors && validationErrors[path],
67944
68152
  loading,
68153
+ enabled: defaultValue !== value && !validationErrors,
67945
68154
  onClick: () => {
67946
68155
  setLoading(true);
67947
- onSubmit(async (path) => {
68156
+ onSubmit(async (path2) => {
67948
68157
  var _a;
67949
68158
  return [
67950
68159
  {
67951
68160
  op: "replace",
67952
- path,
68161
+ path: path2,
67953
68162
  value: ((_a = ref.current) == null ? void 0 : _a.value) || ""
67954
68163
  }
67955
68164
  ];
@@ -67961,14 +68170,24 @@ function StringField({
67961
68170
  )
67962
68171
  ] });
67963
68172
  }
68173
+ function InlineValidationErrors({ errors }) {
68174
+ return /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsx("div", { children: error.message }, i)) });
68175
+ }
67964
68176
  function FieldContainer({ children }) {
67965
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative p-4 border rounded border-card", children });
68177
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative p-4", children });
67966
68178
  }
67967
68179
  function SubmitButton({
67968
68180
  loading,
68181
+ enabled,
68182
+ validationErrors,
67969
68183
  onClick
67970
68184
  }) {
67971
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky bottom-0", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end w-full py-2", children: /* @__PURE__ */ jsxRuntime.jsx(Button, { disabled: loading, onClick, children: loading ? "Saving..." : "Save" }) }) });
68185
+ const { session } = useValOverlayContext();
68186
+ const isProxy = session.status === "success" && session.data.mode === "proxy";
68187
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sticky bottom-0 m-4 ml-0", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex justify-between w-full gap-2 py-2 text-sm", children: [
68188
+ validationErrors ? /* @__PURE__ */ jsxRuntime.jsx(InlineValidationErrors, { errors: validationErrors || [] }) : /* @__PURE__ */ jsxRuntime.jsx("span", {}),
68189
+ /* @__PURE__ */ jsxRuntime.jsx(Button, { disabled: loading || !enabled, onClick, children: loading ? isProxy ? "Staging..." : "Saving..." : isProxy ? "Stage" : "Save" })
68190
+ ] }) });
67972
68191
  }
67973
68192
  const Logo = ({ className: className2 }) => {
67974
68193
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -67985,7 +68204,7 @@ const Logo = ({ className: className2 }) => {
67985
68204
  "path",
67986
68205
  {
67987
68206
  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",
67988
- fill: "#38CD98"
68207
+ fill: "hsl(var(--accent))"
67989
68208
  }
67990
68209
  ) }),
67991
68210
  /* @__PURE__ */ jsxRuntime.jsx("g", { filter: "url(#filter1_i_21_1677)", children: /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "11.4656", cy: "23.7595", r: "2.18557", fill: "currentColor" }) }),
@@ -72439,6 +72658,33 @@ function useSession(api) {
72439
72658
  }, [sessionResetId]);
72440
72659
  return session;
72441
72660
  }
72661
+ function Path({ children }) {
72662
+ const segs = children.split("/").filter((seg) => seg);
72663
+ return segs.map((seg, i) => {
72664
+ if (i !== segs.length - 1) {
72665
+ return /* @__PURE__ */ jsxRuntime.jsxs(React$3.Fragment, { children: [
72666
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: seg }),
72667
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-[2px] text-muted", children: "/" })
72668
+ ] }, `${children}/${seg}`);
72669
+ }
72670
+ return /* @__PURE__ */ jsxRuntime.jsx(Seg, { children: seg }, children);
72671
+ });
72672
+ }
72673
+ function Seg({ children }) {
72674
+ if (children.includes(".")) {
72675
+ const segs = children.split(".");
72676
+ return segs.map((seg, i) => {
72677
+ if (i !== segs.length - 1) {
72678
+ return /* @__PURE__ */ jsxRuntime.jsxs(React$3.Fragment, { children: [
72679
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: i === 0 ? seg : JSON.parse(seg) }),
72680
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-[2px] text-muted", children: "." })
72681
+ ] }, `${children}.${seg}`);
72682
+ }
72683
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { children: i === 0 ? seg : JSON.parse(seg) }, children);
72684
+ });
72685
+ }
72686
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { children });
72687
+ }
72442
72688
  const ValModulesContext = React$3.createContext(null);
72443
72689
  const useValModuleFromPath = (sourcePath) => {
72444
72690
  var _a, _b;
@@ -72589,12 +72835,13 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72589
72835
  "div",
72590
72836
  {
72591
72837
  id: "val-fullscreen-container",
72592
- className: "relative font-serif antialiased",
72838
+ className: "relative w-full h-[100] overflow-hidden font-serif antialiased bg-background text-primary",
72593
72839
  "data-mode": theme2,
72594
72840
  children: [
72595
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-x-1/2 z-overlay left-1/2 bottom-4", children: /* @__PURE__ */ jsxRuntime.jsx(
72841
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-y-1/2 right-4 top-1/2 z-overlay", children: /* @__PURE__ */ jsxRuntime.jsx(
72596
72842
  ValMenu,
72597
72843
  {
72844
+ direction: "vertical",
72598
72845
  api,
72599
72846
  patches,
72600
72847
  onCommit: () => setPatchResetId((prev) => prev + 1)
@@ -72607,18 +72854,19 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72607
72854
  value: {
72608
72855
  hoverElem: hoverElemRef == null ? void 0 : hoverElemRef.current
72609
72856
  },
72610
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-primary bg-background", children: /* @__PURE__ */ jsxRuntime.jsxs(Grid, { children: [
72857
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-primary", children: /* @__PURE__ */ jsxRuntime.jsxs(Grid, { children: [
72611
72858
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 h-[50px] flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(Logo$1, {}) }),
72612
72859
  /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "px-4", children: modules ? /* @__PURE__ */ jsxRuntime.jsx(
72613
72860
  PathTree,
72614
72861
  {
72862
+ selectedPath,
72615
72863
  paths: Object.keys(modules),
72616
72864
  setSelectedModuleId: (path) => {
72617
72865
  navigate(path);
72618
72866
  }
72619
72867
  }
72620
72868
  ) : !error && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "py-4", children: "Loading..." }) }),
72621
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-start w-full h-[50px] gap-2 font-serif text-xs", children: [
72869
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-start h-[50px] gap-2 font-serif text-xs", children: [
72622
72870
  /* @__PURE__ */ jsxRuntime.jsx(
72623
72871
  "button",
72624
72872
  {
@@ -72628,10 +72876,10 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
72628
72876
  children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft, {})
72629
72877
  }
72630
72878
  ),
72631
- /* @__PURE__ */ jsxRuntime.jsx("p", { children: selectedPath || "/" })
72879
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: /* @__PURE__ */ jsxRuntime.jsx(Path, { children: selectedPath || "/" }) })
72632
72880
  ] }),
72633
72881
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4", children: [
72634
- error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-lg text-destructive-foreground", children: [
72882
+ error && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "p-4 text-lg bg-destructive text-destructive-foreground max-w-xl", children: [
72635
72883
  "ERROR: ",
72636
72884
  error
72637
72885
  ] }),
@@ -72700,7 +72948,7 @@ function AnyVal({
72700
72948
  initOnSubmit,
72701
72949
  top
72702
72950
  }) {
72703
- if (source === null || schema.opt) {
72951
+ if (schema.opt) {
72704
72952
  return /* @__PURE__ */ jsxRuntime.jsx(
72705
72953
  ValOptional,
72706
72954
  {
@@ -72713,6 +72961,18 @@ function AnyVal({
72713
72961
  }
72714
72962
  );
72715
72963
  }
72964
+ if (source === null) {
72965
+ return /* @__PURE__ */ jsxRuntime.jsx(
72966
+ ValDefaultOf,
72967
+ {
72968
+ source,
72969
+ schema,
72970
+ path,
72971
+ setSelectedPath,
72972
+ initOnSubmit
72973
+ }
72974
+ );
72975
+ }
72716
72976
  if (schema.type === "object") {
72717
72977
  if (typeof source !== "object" || isJsonArray(source)) {
72718
72978
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -72738,15 +72998,18 @@ function AnyVal({
72738
72998
  typeof source
72739
72999
  ] });
72740
73000
  }
72741
- return /* @__PURE__ */ jsxRuntime.jsx(
72742
- ValList,
72743
- {
72744
- source,
72745
- path,
72746
- schema,
72747
- setSelectedPath
72748
- }
72749
- );
73001
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73002
+ field ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }),
73003
+ /* @__PURE__ */ jsxRuntime.jsx(
73004
+ ValList,
73005
+ {
73006
+ source,
73007
+ path,
73008
+ schema,
73009
+ setSelectedPath
73010
+ }
73011
+ )
73012
+ ] });
72750
73013
  } else if (schema.type === "record") {
72751
73014
  if (typeof source !== "object") {
72752
73015
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
@@ -72762,18 +73025,38 @@ function AnyVal({
72762
73025
  schema.type
72763
73026
  ] });
72764
73027
  }
72765
- return /* @__PURE__ */ jsxRuntime.jsx(
72766
- ValRecord,
72767
- {
72768
- source,
72769
- path,
72770
- schema,
72771
- setSelectedPath
72772
- }
72773
- );
73028
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73029
+ field ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }),
73030
+ /* @__PURE__ */ jsxRuntime.jsx(
73031
+ ValRecord,
73032
+ {
73033
+ source,
73034
+ path,
73035
+ schema,
73036
+ setSelectedPath
73037
+ }
73038
+ )
73039
+ ] });
73040
+ } else if ((schema == null ? void 0 : schema.type) === "union") {
73041
+ if (schema.key && typeof source === "object" && !isJsonArray(source)) {
73042
+ return /* @__PURE__ */ jsxRuntime.jsx(
73043
+ ValTaggedUnion,
73044
+ {
73045
+ tag: schema.key,
73046
+ source,
73047
+ path,
73048
+ schema,
73049
+ initOnSubmit,
73050
+ setSelectedPath,
73051
+ top
73052
+ }
73053
+ );
73054
+ }
73055
+ } else if ((schema == null ? void 0 : schema.type) === "literal") {
73056
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, {});
72774
73057
  }
72775
73058
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-2 gap-y-4", children: [
72776
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field || path }),
73059
+ field ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }),
72777
73060
  /* @__PURE__ */ jsxRuntime.jsx(
72778
73061
  ValFormField,
72779
73062
  {
@@ -72786,6 +73069,97 @@ function AnyVal({
72786
73069
  )
72787
73070
  ] });
72788
73071
  }
73072
+ function ValTaggedUnion({
73073
+ tag,
73074
+ path,
73075
+ source,
73076
+ schema,
73077
+ setSelectedPath,
73078
+ initOnSubmit,
73079
+ top
73080
+ }) {
73081
+ const [currentKey, setCurrentKey] = React$3.useState(null);
73082
+ const [current, setCurrent] = React$3.useState(null);
73083
+ const keys = schema.items.flatMap((item) => {
73084
+ if (item.type === "object" && item.items[tag]) {
73085
+ const maybeLiteral = item.items[tag];
73086
+ if (maybeLiteral.type === "literal") {
73087
+ return [maybeLiteral.value];
73088
+ }
73089
+ }
73090
+ return [];
73091
+ });
73092
+ React$3.useEffect(() => {
73093
+ if (!currentKey) {
73094
+ const maybeCurrentKey = source == null ? void 0 : source[tag];
73095
+ if (maybeCurrentKey && typeof maybeCurrentKey === "string") {
73096
+ setCurrentKey(maybeCurrentKey);
73097
+ }
73098
+ } else {
73099
+ const sourceKey = source[tag];
73100
+ const unionSchema = schema.items.find((item) => {
73101
+ if (item.type === "object" && item.items[tag]) {
73102
+ const maybeLiteral = item.items[tag];
73103
+ if (maybeLiteral.type === "literal") {
73104
+ return maybeLiteral.value === currentKey;
73105
+ }
73106
+ return false;
73107
+ }
73108
+ });
73109
+ if (sourceKey && typeof sourceKey === "string" && unionSchema) {
73110
+ setCurrent({ source, schema: unionSchema });
73111
+ } else {
73112
+ console.error(
73113
+ "Could not find source or schema of key",
73114
+ currentKey,
73115
+ source,
73116
+ schema
73117
+ );
73118
+ setCurrent(null);
73119
+ }
73120
+ }
73121
+ }, [currentKey, source, schema, keys]);
73122
+ if (keys.length !== schema.items.length) {
73123
+ console.warn("Not all items have tag:", tag);
73124
+ }
73125
+ const loading = false;
73126
+ return /* @__PURE__ */ jsxRuntime.jsxs(
73127
+ "div",
73128
+ {
73129
+ className: classNames("flex flex-col gap-y-8", {
73130
+ "border-l-2 border-border pl-6": !top
73131
+ }),
73132
+ children: [
73133
+ /* @__PURE__ */ jsxRuntime.jsxs(
73134
+ Select,
73135
+ {
73136
+ defaultValue: currentKey ?? void 0,
73137
+ disabled: loading,
73138
+ onValueChange: (key) => {
73139
+ setCurrentKey(key);
73140
+ },
73141
+ children: [
73142
+ /* @__PURE__ */ jsxRuntime.jsx(SelectTrigger, { children: /* @__PURE__ */ jsxRuntime.jsx(SelectValue, { placeholder: "Select type" }) }),
73143
+ /* @__PURE__ */ jsxRuntime.jsx(SelectContent, { children: keys.map((tag2) => /* @__PURE__ */ jsxRuntime.jsx(SelectItem, { value: tag2.toString(), children: tag2.toString() }, tag2)) })
73144
+ ]
73145
+ }
73146
+ ),
73147
+ current && /* @__PURE__ */ jsxRuntime.jsx(
73148
+ AnyVal,
73149
+ {
73150
+ path,
73151
+ source: current.source,
73152
+ schema: current.schema,
73153
+ setSelectedPath,
73154
+ initOnSubmit,
73155
+ top
73156
+ }
73157
+ )
73158
+ ]
73159
+ },
73160
+ path
73161
+ );
73162
+ }
72789
73163
  function ValObject({
72790
73164
  path,
72791
73165
  source,
@@ -72806,7 +73180,7 @@ function ValObject({
72806
73180
  AnyVal,
72807
73181
  {
72808
73182
  path: subPath,
72809
- source: source[key],
73183
+ source: (source == null ? void 0 : source[key]) ?? null,
72810
73184
  schema: property,
72811
73185
  setSelectedPath,
72812
73186
  field: key,
@@ -73129,8 +73503,8 @@ function ValOptional({
73129
73503
  field
73130
73504
  }) {
73131
73505
  const [enable, setEnable] = React$3.useState(source !== null);
73132
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-6", children: [
73133
- field ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-start gap-x-4", children: [
73506
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-2", children: [
73507
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-start gap-x-4", children: [
73134
73508
  /* @__PURE__ */ jsxRuntime.jsx(
73135
73509
  Switch,
73136
73510
  {
@@ -73140,16 +73514,8 @@ function ValOptional({
73140
73514
  }
73141
73515
  }
73142
73516
  ),
73143
- /* @__PURE__ */ jsxRuntime.jsx("span", { children: field })
73144
- ] }) : /* @__PURE__ */ jsxRuntime.jsx(
73145
- Switch,
73146
- {
73147
- checked: enable,
73148
- onClick: () => {
73149
- setEnable((prev) => !prev);
73150
- }
73151
- }
73152
- ),
73517
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: field ? field : /* @__PURE__ */ jsxRuntime.jsx(Path, { children: path }) })
73518
+ ] }),
73153
73519
  enable && /* @__PURE__ */ jsxRuntime.jsx(
73154
73520
  ValDefaultOf,
73155
73521
  {
@@ -73218,61 +73584,62 @@ function ValDefaultOf({
73218
73584
  function isJsonArray(source) {
73219
73585
  return Array.isArray(source);
73220
73586
  }
73221
- function pathsToTree(paths) {
73222
- const tree = {};
73587
+ function dirPaths(paths) {
73588
+ const res = {};
73223
73589
  paths.forEach((path) => {
73224
- const parts = path.split("/").filter((part) => part !== "");
73225
- let current = tree;
73226
- parts.forEach((part) => {
73227
- if (!current[part]) {
73228
- current[part] = {};
73590
+ const allParts = path.split("/").filter((part) => part !== "");
73591
+ if (allParts.length === 1) {
73592
+ if (!res[""]) {
73593
+ res[""] = [];
73229
73594
  }
73230
- current = current[part];
73231
- });
73595
+ res[""].push(allParts[0]);
73596
+ } else if (allParts.length > 1) {
73597
+ const dir = allParts.slice(0, allParts.length - 1).join("/");
73598
+ const file = allParts.slice(-1)[0];
73599
+ if (!res[dir]) {
73600
+ res[dir] = [];
73601
+ }
73602
+ res[dir].push(file);
73603
+ }
73232
73604
  });
73233
- return tree;
73605
+ return res;
73234
73606
  }
73235
73607
  function PathTree({
73608
+ selectedPath,
73236
73609
  paths,
73237
73610
  setSelectedModuleId
73238
73611
  }) {
73239
- const tree = pathsToTree(paths);
73240
- return /* @__PURE__ */ jsxRuntime.jsx(Tree, { children: Object.entries(tree).map(([name, subTree]) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-2", children: /* @__PURE__ */ jsxRuntime.jsx(
73241
- PathNode,
73242
- {
73243
- name,
73244
- tree: subTree,
73245
- moduleId: `/${name}`,
73246
- setSelectedModuleId
73247
- }
73248
- ) }, `/${name}`)) });
73249
- }
73250
- function PathNode({
73251
- name,
73252
- tree,
73253
- moduleId,
73254
- setSelectedModuleId
73255
- }) {
73256
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73257
- /* @__PURE__ */ jsxRuntime.jsx(
73258
- "button",
73259
- {
73260
- onClick: () => {
73261
- setSelectedModuleId(moduleId);
73262
- },
73263
- children: name
73264
- }
73265
- ),
73266
- Object.entries(tree).map(([childName, childTree]) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-4 py-1", children: /* @__PURE__ */ jsxRuntime.jsx(
73267
- PathNode,
73268
- {
73269
- name: childName,
73270
- tree: childTree,
73271
- moduleId: `${moduleId}/${childName}`,
73272
- setSelectedModuleId
73273
- }
73274
- ) }, `${moduleId}/${childName}`))
73275
- ] });
73612
+ const tree = dirPaths(paths);
73613
+ const selectedModuleId = selectedPath && Internal.splitModuleIdAndModulePath(selectedPath)[0];
73614
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col w-full py-2 text-xs", children: Object.entries(tree).map(([dir, files]) => {
73615
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "px-4 py-2", children: [
73616
+ dir && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "font-bold", children: /* @__PURE__ */ jsxRuntime.jsx(Path, { children: dir }) }),
73617
+ /* @__PURE__ */ jsxRuntime.jsx(
73618
+ "div",
73619
+ {
73620
+ className: classNames({
73621
+ "flex flex-col py-2 justify-start items-start": !!dir
73622
+ }),
73623
+ children: files.map((file) => {
73624
+ const moduleId = `/${dir}/${file}`;
73625
+ return /* @__PURE__ */ jsxRuntime.jsx(
73626
+ "button",
73627
+ {
73628
+ className: classNames("block px-2 py-1 rounded-full", {
73629
+ "bg-accent text-accent-foreground": selectedModuleId === moduleId
73630
+ }),
73631
+ onClick: () => {
73632
+ setSelectedModuleId(moduleId);
73633
+ },
73634
+ children: file
73635
+ },
73636
+ moduleId
73637
+ );
73638
+ })
73639
+ }
73640
+ )
73641
+ ] }, `/${dir}`);
73642
+ }) });
73276
73643
  }
73277
73644
  const theme = {
73278
73645
  tags: {
@@ -73464,76 +73831,90 @@ function ValOverlay({
73464
73831
  windowSize,
73465
73832
  setWindowSize
73466
73833
  },
73467
- children: /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-mode": theme2, className: "antialiased", children: [
73468
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-x-1/2 z-overlay left-1/2 bottom-4", children: /* @__PURE__ */ jsxRuntime.jsx(
73469
- ValMenu,
73470
- {
73471
- api,
73472
- patches,
73473
- onCommit: () => {
73474
- setPatchResetId((patchResetId) => patchResetId + 1);
73475
- }
73476
- }
73477
- ) }),
73478
- session.status === "success" && session.data.enabled && editMode === "hover" && hoverTarget.path && /* @__PURE__ */ jsxRuntime.jsx(
73479
- ValHover,
73480
- {
73481
- hoverTarget,
73482
- setHoverTarget,
73483
- setEditMode,
73484
- setWindowTarget
73485
- }
73486
- ),
73487
- editMode === "window" && windowTarget && /* @__PURE__ */ jsxRuntime.jsx(
73488
- ValWindow,
73489
- {
73490
- onClose: () => {
73491
- setWindowTarget(null);
73492
- setEditMode("hover");
73493
- },
73494
- children: /* @__PURE__ */ jsxRuntime.jsx(
73495
- "div",
73834
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
73835
+ "div",
73836
+ {
73837
+ "data-mode": theme2,
73838
+ className: "font-serif antialiased",
73839
+ style: {
73840
+ position: "fixed",
73841
+ top: 0,
73842
+ left: 0,
73843
+ zIndex: 8999
73844
+ // 1 less than the NextJS error z-index: 9000
73845
+ },
73846
+ children: [
73847
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed -translate-y-1/2 right-4 top-1/2 z-overlay", children: /* @__PURE__ */ jsxRuntime.jsx(
73848
+ ValMenu,
73496
73849
  {
73497
- className: "p-4",
73498
- style: {
73499
- maxHeight: windowSize == null ? void 0 : windowSize.innerHeight
73850
+ direction: "vertical",
73851
+ api,
73852
+ patches,
73853
+ onCommit: () => {
73854
+ setPatchResetId((patchResetId) => patchResetId + 1);
73855
+ }
73856
+ }
73857
+ ) }),
73858
+ session.status === "success" && session.data.enabled && editMode === "hover" && hoverTarget.path && /* @__PURE__ */ jsxRuntime.jsx(
73859
+ ValHover,
73860
+ {
73861
+ hoverTarget,
73862
+ setHoverTarget,
73863
+ setEditMode,
73864
+ setWindowTarget
73865
+ }
73866
+ ),
73867
+ editMode === "window" && windowTarget && /* @__PURE__ */ jsxRuntime.jsx(
73868
+ ValWindow,
73869
+ {
73870
+ onClose: () => {
73871
+ setWindowTarget(null);
73872
+ setEditMode("hover");
73500
73873
  },
73501
- children: Object.entries(formData).map(([path, data]) => {
73502
- if (data.status !== "success") {
73503
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73504
- path,
73505
- ": ",
73506
- data.status
73507
- ] }, path);
73508
- }
73509
- const { source, schema } = data.data;
73510
- if (!source || !schema) {
73511
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73512
- "Module: ",
73513
- path,
73514
- " is missing source or schema"
73515
- ] });
73516
- }
73517
- return /* @__PURE__ */ jsxRuntime.jsx(
73518
- AnyVal,
73519
- {
73520
- initOnSubmit,
73521
- path,
73522
- schema,
73523
- source,
73524
- setSelectedPath: () => {
73525
- },
73526
- field: path,
73527
- top: true
73874
+ children: /* @__PURE__ */ jsxRuntime.jsx(
73875
+ "div",
73876
+ {
73877
+ className: "p-4",
73878
+ style: {
73879
+ maxHeight: windowSize == null ? void 0 : windowSize.innerHeight
73528
73880
  },
73529
- path
73530
- );
73531
- })
73881
+ children: Object.entries(formData).map(([path, data]) => {
73882
+ if (data.status !== "success") {
73883
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73884
+ path,
73885
+ ": ",
73886
+ data.status
73887
+ ] }, path);
73888
+ }
73889
+ const { source, schema } = data.data;
73890
+ if (!source || !schema) {
73891
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
73892
+ "Module: ",
73893
+ path,
73894
+ " is missing source or schema"
73895
+ ] });
73896
+ }
73897
+ return /* @__PURE__ */ jsxRuntime.jsx(
73898
+ AnyVal,
73899
+ {
73900
+ initOnSubmit,
73901
+ path,
73902
+ schema,
73903
+ source,
73904
+ setSelectedPath: () => {
73905
+ },
73906
+ top: true
73907
+ },
73908
+ path
73909
+ );
73910
+ })
73911
+ }
73912
+ )
73532
73913
  }
73533
73914
  )
73534
- }
73535
- )
73536
- ] })
73915
+ ]
73916
+ }
73917
+ )
73537
73918
  }
73538
73919
  );
73539
73920
  }
@@ -73600,7 +73981,7 @@ function ValHover({
73600
73981
  "div",
73601
73982
  {
73602
73983
  id: "val-hover",
73603
- className: "fixed border-2 cursor-pointer z-overlay-hover border-highlight drop-shadow-[0px_0px_12px_rgba(56,205,152,0.60)]",
73984
+ className: "fixed border-2 cursor-pointer z-overlay-hover border-accent",
73604
73985
  style: {
73605
73986
  top: rect == null ? void 0 : rect.top,
73606
73987
  left: rect == null ? void 0 : rect.left,
@@ -73621,7 +74002,7 @@ function ValHover({
73621
74002
  children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-end w-full text-xs", children: /* @__PURE__ */ jsxRuntime.jsx(
73622
74003
  "div",
73623
74004
  {
73624
- className: "flex items-center justify-center px-3 py-1 text-primary bg-highlight",
74005
+ className: "flex items-center justify-center px-3 py-1 text-accent-foreground bg-accent border-l-2 border-b-2 border-accent",
73625
74006
  style: {
73626
74007
  maxHeight: (rect == null ? void 0 : rect.height) && rect.height - 4,
73627
74008
  fontSize: (rect == null ? void 0 : rect.height) && rect.height <= 16 ? rect.height - 4 : void 0
@@ -73665,9 +74046,19 @@ function useHoverTarget(editMode) {
73665
74046
  setTargetRect(targetElement.getBoundingClientRect());
73666
74047
  }
73667
74048
  };
74049
+ const observer = new ResizeObserver(() => {
74050
+ if (targetElement) {
74051
+ setTargetRect(targetElement.getBoundingClientRect());
74052
+ }
74053
+ });
74054
+ const valUIElement = document.getElementById("val-ui");
74055
+ if (targetElement && valUIElement) {
74056
+ observer.observe(valUIElement);
74057
+ }
73668
74058
  document.addEventListener("scroll", scrollListener, { passive: true });
73669
74059
  return () => {
73670
74060
  document.removeEventListener("scroll", scrollListener);
74061
+ observer.disconnect();
73671
74062
  };
73672
74063
  }, [targetElement]);
73673
74064
  return [
@@ -73714,7 +74105,7 @@ function useInitEditMode() {
73714
74105
  }, []);
73715
74106
  return [editMode, setEditMode];
73716
74107
  }
73717
- 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-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\\/10 {\n background-color: hsl(var(--background) / 0.1);\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-3xl {\n --tw-backdrop-blur: blur(64px);\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-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";
74108
+ 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";
73718
74109
  function Style() {
73719
74110
  return /* @__PURE__ */ jsxRuntime.jsx("style", { children: styleCss });
73720
74111
  }