@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.
- package/dist/valbuild-ui.cjs.js +880 -489
- package/dist/valbuild-ui.esm.js +880 -489
- package/package.json +3 -3
- package/server/.tmp/assets/index-gPuJOraZ.css +1 -0
- package/server/.tmp/assets/index-k8iMLNYr.js +201 -0
- package/server/.tmp/index.html +2 -2
- package/server/dist/valbuild-ui-main.cjs.js +15472 -15090
- package/server/dist/valbuild-ui-main.esm.js +15472 -15090
- package/server/dist/valbuild-ui-server.cjs.js +1 -1
- package/server/dist/valbuild-ui-server.esm.js +1 -1
- package/server/.tmp/assets/index-ktSR2XYf.js +0 -201
- package/server/.tmp/assets/index-q5ozHWoP.css +0 -1
package/dist/valbuild-ui.esm.js
CHANGED
|
@@ -50831,7 +50831,7 @@ var Schema = /* @__PURE__ */ function() {
|
|
|
50831
50831
|
return Schema2;
|
|
50832
50832
|
}();
|
|
50833
50833
|
var GetSchema = Symbol("GetSchema");
|
|
50834
|
-
var Path = Symbol("Path");
|
|
50834
|
+
var Path$1 = Symbol("Path");
|
|
50835
50835
|
var GetSource = Symbol("GetSource");
|
|
50836
50836
|
function getSchema(selector) {
|
|
50837
50837
|
return selector[GetSchema];
|
|
@@ -50862,82 +50862,7 @@ var Sym = /* @__PURE__ */ function(_Expr2) {
|
|
|
50862
50862
|
new Sym("()");
|
|
50863
50863
|
var VAL_EXTENSION = "_type";
|
|
50864
50864
|
var FILE_REF_PROP = "_ref";
|
|
50865
|
-
|
|
50866
|
-
_inherits(ImageSchema2, _Schema);
|
|
50867
|
-
var _super = _createSuper(ImageSchema2);
|
|
50868
|
-
function ImageSchema2(options) {
|
|
50869
|
-
var _this;
|
|
50870
|
-
var opt = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
|
|
50871
|
-
_classCallCheck(this, ImageSchema2);
|
|
50872
|
-
_this = _super.call(this);
|
|
50873
|
-
_this.options = options;
|
|
50874
|
-
_this.opt = opt;
|
|
50875
|
-
return _this;
|
|
50876
|
-
}
|
|
50877
|
-
_createClass(ImageSchema2, [{
|
|
50878
|
-
key: "validate",
|
|
50879
|
-
value: function validate(path, src) {
|
|
50880
|
-
if (this.opt && (src === null || src === void 0)) {
|
|
50881
|
-
return false;
|
|
50882
|
-
}
|
|
50883
|
-
if (src === null || src === void 0) {
|
|
50884
|
-
return _defineProperty$5({}, path, [{
|
|
50885
|
-
message: "Non-optional image was null or undefined.",
|
|
50886
|
-
value: src
|
|
50887
|
-
}]);
|
|
50888
|
-
}
|
|
50889
|
-
if (typeof src[FILE_REF_PROP] !== "string") {
|
|
50890
|
-
return _defineProperty$5({}, path, [{
|
|
50891
|
-
message: "Image did not have a file reference string. Got: ".concat(_typeof(src[FILE_REF_PROP])),
|
|
50892
|
-
value: src
|
|
50893
|
-
}]);
|
|
50894
|
-
}
|
|
50895
|
-
if (src[VAL_EXTENSION] !== "file") {
|
|
50896
|
-
return _defineProperty$5({}, path, [{
|
|
50897
|
-
message: "Image did not have the valid file extension type. Got: ".concat(src[VAL_EXTENSION]),
|
|
50898
|
-
value: src
|
|
50899
|
-
}]);
|
|
50900
|
-
}
|
|
50901
|
-
if (src.metadata) {
|
|
50902
|
-
return _defineProperty$5({}, path, [{
|
|
50903
|
-
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).",
|
|
50904
|
-
// 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.
|
|
50905
|
-
value: src,
|
|
50906
|
-
fixes: ["image:replace-metadata"]
|
|
50907
|
-
}]);
|
|
50908
|
-
}
|
|
50909
|
-
return _defineProperty$5({}, path, [{
|
|
50910
|
-
message: "Could not validate Image metadata.",
|
|
50911
|
-
value: src,
|
|
50912
|
-
fixes: ["image:add-metadata"]
|
|
50913
|
-
}]);
|
|
50914
|
-
}
|
|
50915
|
-
}, {
|
|
50916
|
-
key: "assert",
|
|
50917
|
-
value: function assert(src) {
|
|
50918
|
-
if (this.opt && (src === null || src === void 0)) {
|
|
50919
|
-
return true;
|
|
50920
|
-
}
|
|
50921
|
-
return (src === null || src === void 0 ? void 0 : src[FILE_REF_PROP]) === "image" && (src === null || src === void 0 ? void 0 : src[VAL_EXTENSION]) === "file";
|
|
50922
|
-
}
|
|
50923
|
-
}, {
|
|
50924
|
-
key: "optional",
|
|
50925
|
-
value: function optional() {
|
|
50926
|
-
return new ImageSchema2(this.options, true);
|
|
50927
|
-
}
|
|
50928
|
-
}, {
|
|
50929
|
-
key: "serialize",
|
|
50930
|
-
value: function serialize() {
|
|
50931
|
-
return {
|
|
50932
|
-
type: "image",
|
|
50933
|
-
options: this.options,
|
|
50934
|
-
opt: this.opt
|
|
50935
|
-
};
|
|
50936
|
-
}
|
|
50937
|
-
}]);
|
|
50938
|
-
return ImageSchema2;
|
|
50939
|
-
}(Schema);
|
|
50940
|
-
var convertFileSource = function convertFileSource2(src) {
|
|
50865
|
+
function convertFileSource(src) {
|
|
50941
50866
|
var _src$metadata2;
|
|
50942
50867
|
if (!src[FILE_REF_PROP].startsWith("/public")) {
|
|
50943
50868
|
var _src$metadata;
|
|
@@ -50950,15 +50875,15 @@ var convertFileSource = function convertFileSource2(src) {
|
|
|
50950
50875
|
url: src[FILE_REF_PROP].slice("/public".length) + "?sha256=".concat((_src$metadata2 = src.metadata) === null || _src$metadata2 === void 0 ? void 0 : _src$metadata2.sha256),
|
|
50951
50876
|
metadata: src.metadata
|
|
50952
50877
|
};
|
|
50953
|
-
}
|
|
50878
|
+
}
|
|
50954
50879
|
function isSerializedVal(val) {
|
|
50955
50880
|
return _typeof(val) === "object" && val !== null && val !== void 0 && ("val" in val || "valPath" in val);
|
|
50956
50881
|
}
|
|
50957
50882
|
function isVal(val) {
|
|
50958
|
-
return _typeof(val) === "object" && val !== null && val !== void 0 && Path in val && "val" in val;
|
|
50883
|
+
return _typeof(val) === "object" && val !== null && val !== void 0 && Path$1 in val && "val" in val;
|
|
50959
50884
|
}
|
|
50960
50885
|
function getValPath(valOrSelector) {
|
|
50961
|
-
return valOrSelector[Path];
|
|
50886
|
+
return valOrSelector[Path$1];
|
|
50962
50887
|
}
|
|
50963
50888
|
function hasOwn$1(obj, prop) {
|
|
50964
50889
|
return Object.prototype.hasOwnProperty.call(obj, prop);
|
|
@@ -50970,7 +50895,7 @@ function _andThen(f, source, path) {
|
|
|
50970
50895
|
return newSelectorProxy(source, path);
|
|
50971
50896
|
}
|
|
50972
50897
|
function isSelector(source) {
|
|
50973
|
-
return _typeof(source) === "object" && source !== null && (GetSource in source || Path in source);
|
|
50898
|
+
return _typeof(source) === "object" && source !== null && (GetSource in source || Path$1 in source);
|
|
50974
50899
|
}
|
|
50975
50900
|
function newSelectorProxy(source, path, moduleSchema) {
|
|
50976
50901
|
if (_typeof(source) === "object") {
|
|
@@ -50999,7 +50924,7 @@ function newSelectorProxy(source, path, moduleSchema) {
|
|
|
50999
50924
|
if (prop === GetSource) {
|
|
51000
50925
|
return true;
|
|
51001
50926
|
}
|
|
51002
|
-
if (prop === Path) {
|
|
50927
|
+
if (prop === Path$1) {
|
|
51003
50928
|
return true;
|
|
51004
50929
|
}
|
|
51005
50930
|
if (prop === "andThen") {
|
|
@@ -51014,7 +50939,7 @@ function newSelectorProxy(source, path, moduleSchema) {
|
|
|
51014
50939
|
if (prop === GetSource) {
|
|
51015
50940
|
return source;
|
|
51016
50941
|
}
|
|
51017
|
-
if (prop === Path) {
|
|
50942
|
+
if (prop === Path$1) {
|
|
51018
50943
|
return path;
|
|
51019
50944
|
}
|
|
51020
50945
|
if (prop === GetSchema) {
|
|
@@ -51081,7 +51006,7 @@ function newSelectorProxy(source, path, moduleSchema) {
|
|
|
51081
51006
|
andThen: function andThen(f) {
|
|
51082
51007
|
return _andThen(f, source === void 0 ? null : source, path);
|
|
51083
51008
|
}
|
|
51084
|
-
}, GetSource, source === void 0 ? null : source), Path, path), GetSchema, moduleSchema);
|
|
51009
|
+
}, GetSource, source === void 0 ? null : source), Path$1, path), GetSchema, moduleSchema);
|
|
51085
51010
|
}
|
|
51086
51011
|
}
|
|
51087
51012
|
function createValPathOfItem$1(arrayPath, prop) {
|
|
@@ -51091,7 +51016,7 @@ function createValPathOfItem$1(arrayPath, prop) {
|
|
|
51091
51016
|
return arrayPath && "".concat(arrayPath, ".").concat(JSON.stringify(prop));
|
|
51092
51017
|
}
|
|
51093
51018
|
function unValify(valueOrSelector) {
|
|
51094
|
-
if (_typeof(valueOrSelector) === "object" && (GetSource in valueOrSelector || Path in valueOrSelector)) {
|
|
51019
|
+
if (_typeof(valueOrSelector) === "object" && (GetSource in valueOrSelector || Path$1 in valueOrSelector)) {
|
|
51095
51020
|
var selectorValue = valueOrSelector[GetSource];
|
|
51096
51021
|
return selectorValue;
|
|
51097
51022
|
}
|
|
@@ -51551,6 +51476,81 @@ var RichTextSchema = /* @__PURE__ */ function(_Schema) {
|
|
|
51551
51476
|
}]);
|
|
51552
51477
|
return RichTextSchema2;
|
|
51553
51478
|
}(Schema);
|
|
51479
|
+
var ImageSchema = /* @__PURE__ */ function(_Schema) {
|
|
51480
|
+
_inherits(ImageSchema2, _Schema);
|
|
51481
|
+
var _super = _createSuper(ImageSchema2);
|
|
51482
|
+
function ImageSchema2(options) {
|
|
51483
|
+
var _this;
|
|
51484
|
+
var opt = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
|
|
51485
|
+
_classCallCheck(this, ImageSchema2);
|
|
51486
|
+
_this = _super.call(this);
|
|
51487
|
+
_this.options = options;
|
|
51488
|
+
_this.opt = opt;
|
|
51489
|
+
return _this;
|
|
51490
|
+
}
|
|
51491
|
+
_createClass(ImageSchema2, [{
|
|
51492
|
+
key: "validate",
|
|
51493
|
+
value: function validate(path, src) {
|
|
51494
|
+
if (this.opt && (src === null || src === void 0)) {
|
|
51495
|
+
return false;
|
|
51496
|
+
}
|
|
51497
|
+
if (src === null || src === void 0) {
|
|
51498
|
+
return _defineProperty$5({}, path, [{
|
|
51499
|
+
message: "Non-optional image was null or undefined.",
|
|
51500
|
+
value: src
|
|
51501
|
+
}]);
|
|
51502
|
+
}
|
|
51503
|
+
if (typeof src[FILE_REF_PROP] !== "string") {
|
|
51504
|
+
return _defineProperty$5({}, path, [{
|
|
51505
|
+
message: "Image did not have a file reference string. Got: ".concat(_typeof(src[FILE_REF_PROP])),
|
|
51506
|
+
value: src
|
|
51507
|
+
}]);
|
|
51508
|
+
}
|
|
51509
|
+
if (src[VAL_EXTENSION] !== "file") {
|
|
51510
|
+
return _defineProperty$5({}, path, [{
|
|
51511
|
+
message: "Image did not have the valid file extension type. Got: ".concat(src[VAL_EXTENSION]),
|
|
51512
|
+
value: src
|
|
51513
|
+
}]);
|
|
51514
|
+
}
|
|
51515
|
+
if (src.metadata) {
|
|
51516
|
+
return _defineProperty$5({}, path, [{
|
|
51517
|
+
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).",
|
|
51518
|
+
// 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.
|
|
51519
|
+
value: src,
|
|
51520
|
+
fixes: ["image:replace-metadata"]
|
|
51521
|
+
}]);
|
|
51522
|
+
}
|
|
51523
|
+
return _defineProperty$5({}, path, [{
|
|
51524
|
+
message: "Could not validate Image metadata.",
|
|
51525
|
+
value: src,
|
|
51526
|
+
fixes: ["image:add-metadata"]
|
|
51527
|
+
}]);
|
|
51528
|
+
}
|
|
51529
|
+
}, {
|
|
51530
|
+
key: "assert",
|
|
51531
|
+
value: function assert(src) {
|
|
51532
|
+
if (this.opt && (src === null || src === void 0)) {
|
|
51533
|
+
return true;
|
|
51534
|
+
}
|
|
51535
|
+
return (src === null || src === void 0 ? void 0 : src[FILE_REF_PROP]) === "image" && (src === null || src === void 0 ? void 0 : src[VAL_EXTENSION]) === "file";
|
|
51536
|
+
}
|
|
51537
|
+
}, {
|
|
51538
|
+
key: "optional",
|
|
51539
|
+
value: function optional() {
|
|
51540
|
+
return new ImageSchema2(this.options, true);
|
|
51541
|
+
}
|
|
51542
|
+
}, {
|
|
51543
|
+
key: "serialize",
|
|
51544
|
+
value: function serialize() {
|
|
51545
|
+
return {
|
|
51546
|
+
type: "image",
|
|
51547
|
+
options: this.options,
|
|
51548
|
+
opt: this.opt
|
|
51549
|
+
};
|
|
51550
|
+
}
|
|
51551
|
+
}]);
|
|
51552
|
+
return ImageSchema2;
|
|
51553
|
+
}(Schema);
|
|
51554
51554
|
var RecordSchema = /* @__PURE__ */ function(_Schema) {
|
|
51555
51555
|
_inherits(RecordSchema2, _Schema);
|
|
51556
51556
|
var _super = _createSuper(RecordSchema2);
|
|
@@ -51827,6 +51827,96 @@ function parsePath$1(input) {
|
|
|
51827
51827
|
}
|
|
51828
51828
|
return result2;
|
|
51829
51829
|
}
|
|
51830
|
+
var StringSchema = /* @__PURE__ */ function(_Schema) {
|
|
51831
|
+
_inherits(StringSchema2, _Schema);
|
|
51832
|
+
var _super = _createSuper(StringSchema2);
|
|
51833
|
+
function StringSchema2(options) {
|
|
51834
|
+
var _this;
|
|
51835
|
+
var opt = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
|
|
51836
|
+
var isRaw = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;
|
|
51837
|
+
_classCallCheck(this, StringSchema2);
|
|
51838
|
+
_this = _super.call(this);
|
|
51839
|
+
_this.options = options;
|
|
51840
|
+
_this.opt = opt;
|
|
51841
|
+
_this.isRaw = isRaw;
|
|
51842
|
+
return _this;
|
|
51843
|
+
}
|
|
51844
|
+
_createClass(StringSchema2, [{
|
|
51845
|
+
key: "validate",
|
|
51846
|
+
value: function validate(path, src) {
|
|
51847
|
+
var _this$options, _this$options2, _this$options3;
|
|
51848
|
+
if (this.opt && (src === null || src === void 0)) {
|
|
51849
|
+
return false;
|
|
51850
|
+
}
|
|
51851
|
+
if (typeof src !== "string") {
|
|
51852
|
+
return _defineProperty$5({}, path, [{
|
|
51853
|
+
message: "Expected 'string', got '".concat(_typeof(src), "'"),
|
|
51854
|
+
value: src
|
|
51855
|
+
}]);
|
|
51856
|
+
}
|
|
51857
|
+
var errors = [];
|
|
51858
|
+
if ((_this$options = this.options) !== null && _this$options !== void 0 && _this$options.maxLength && src.length > this.options.maxLength) {
|
|
51859
|
+
errors.push({
|
|
51860
|
+
message: "Expected string to be at most ".concat(this.options.maxLength, " characters long, got ").concat(src.length),
|
|
51861
|
+
value: src
|
|
51862
|
+
});
|
|
51863
|
+
}
|
|
51864
|
+
if ((_this$options2 = this.options) !== null && _this$options2 !== void 0 && _this$options2.minLength && src.length < this.options.minLength) {
|
|
51865
|
+
errors.push({
|
|
51866
|
+
message: "Expected string to be at least ".concat(this.options.minLength, " characters long, got ").concat(src.length),
|
|
51867
|
+
value: src
|
|
51868
|
+
});
|
|
51869
|
+
}
|
|
51870
|
+
if ((_this$options3 = this.options) !== null && _this$options3 !== void 0 && _this$options3.regexp && !this.options.regexp.test(src)) {
|
|
51871
|
+
errors.push({
|
|
51872
|
+
message: "Expected string to match reg exp: ".concat(this.options.regexp.toString(), ", got '").concat(src, "'"),
|
|
51873
|
+
value: src
|
|
51874
|
+
});
|
|
51875
|
+
}
|
|
51876
|
+
if (errors.length > 0) {
|
|
51877
|
+
return _defineProperty$5({}, path, errors);
|
|
51878
|
+
}
|
|
51879
|
+
return false;
|
|
51880
|
+
}
|
|
51881
|
+
}, {
|
|
51882
|
+
key: "assert",
|
|
51883
|
+
value: function assert(src) {
|
|
51884
|
+
if (this.opt && (src === null || src === void 0)) {
|
|
51885
|
+
return true;
|
|
51886
|
+
}
|
|
51887
|
+
return typeof src === "string";
|
|
51888
|
+
}
|
|
51889
|
+
}, {
|
|
51890
|
+
key: "optional",
|
|
51891
|
+
value: function optional() {
|
|
51892
|
+
return new StringSchema2(this.options, true, this.isRaw);
|
|
51893
|
+
}
|
|
51894
|
+
}, {
|
|
51895
|
+
key: "raw",
|
|
51896
|
+
value: function raw() {
|
|
51897
|
+
return new StringSchema2(this.options, this.opt, true);
|
|
51898
|
+
}
|
|
51899
|
+
}, {
|
|
51900
|
+
key: "serialize",
|
|
51901
|
+
value: function serialize() {
|
|
51902
|
+
var _this$options4, _this$options5, _this$options6;
|
|
51903
|
+
return {
|
|
51904
|
+
type: "string",
|
|
51905
|
+
options: {
|
|
51906
|
+
maxLength: (_this$options4 = this.options) === null || _this$options4 === void 0 ? void 0 : _this$options4.maxLength,
|
|
51907
|
+
minLength: (_this$options5 = this.options) === null || _this$options5 === void 0 ? void 0 : _this$options5.minLength,
|
|
51908
|
+
regexp: ((_this$options6 = this.options) === null || _this$options6 === void 0 ? void 0 : _this$options6.regexp) && {
|
|
51909
|
+
source: this.options.regexp.source,
|
|
51910
|
+
flags: this.options.regexp.flags
|
|
51911
|
+
}
|
|
51912
|
+
},
|
|
51913
|
+
opt: this.opt,
|
|
51914
|
+
raw: this.isRaw
|
|
51915
|
+
};
|
|
51916
|
+
}
|
|
51917
|
+
}]);
|
|
51918
|
+
return StringSchema2;
|
|
51919
|
+
}(Schema);
|
|
51830
51920
|
function getVal(selector) {
|
|
51831
51921
|
return newValProxy(serializedValOfSelectorSource(selector));
|
|
51832
51922
|
}
|
|
@@ -51849,7 +51939,7 @@ function serializedValOfSelectorSource(selector) {
|
|
|
51849
51939
|
var isObject = isObjectOrObjectSelector(child);
|
|
51850
51940
|
if (isArray) {
|
|
51851
51941
|
var array = GetSource in child ? child[GetSource] : child;
|
|
51852
|
-
var valPath = Path in child ? child[Path] : void 0;
|
|
51942
|
+
var valPath = Path$1 in child ? child[Path$1] : void 0;
|
|
51853
51943
|
return {
|
|
51854
51944
|
val: array.map(function(item, i) {
|
|
51855
51945
|
return rec(isSelector(item) ? item : newSelectorProxy(item, createValPathOfItem$1(valPath, i)));
|
|
@@ -51858,7 +51948,7 @@ function serializedValOfSelectorSource(selector) {
|
|
|
51858
51948
|
};
|
|
51859
51949
|
} else if (isObject) {
|
|
51860
51950
|
var obj = GetSource in child ? child[GetSource] : child;
|
|
51861
|
-
var _valPath = Path in child ? child[Path] : void 0;
|
|
51951
|
+
var _valPath = Path$1 in child ? child[Path$1] : void 0;
|
|
51862
51952
|
return {
|
|
51863
51953
|
val: obj !== null && Object.fromEntries(Object.entries(obj).map(function(_ref) {
|
|
51864
51954
|
var _ref2 = _slicedToArray$1(_ref, 2), key = _ref2[0], value = _ref2[1];
|
|
@@ -51869,7 +51959,7 @@ function serializedValOfSelectorSource(selector) {
|
|
|
51869
51959
|
} else if (isSelector(child)) {
|
|
51870
51960
|
return {
|
|
51871
51961
|
val: rec(child[GetSource]),
|
|
51872
|
-
valPath: child[Path]
|
|
51962
|
+
valPath: child[Path$1]
|
|
51873
51963
|
};
|
|
51874
51964
|
} else {
|
|
51875
51965
|
return child;
|
|
@@ -51911,13 +52001,13 @@ function newValProxy(val) {
|
|
|
51911
52001
|
if (prop === "val") {
|
|
51912
52002
|
return true;
|
|
51913
52003
|
}
|
|
51914
|
-
if (prop === Path) {
|
|
52004
|
+
if (prop === Path$1) {
|
|
51915
52005
|
return true;
|
|
51916
52006
|
}
|
|
51917
52007
|
return hasOwn(target, prop);
|
|
51918
52008
|
},
|
|
51919
52009
|
get: function get(target, prop) {
|
|
51920
|
-
if (prop === Path) {
|
|
52010
|
+
if (prop === Path$1) {
|
|
51921
52011
|
return val.valPath;
|
|
51922
52012
|
}
|
|
51923
52013
|
if (prop === "val") {
|
|
@@ -51938,7 +52028,7 @@ function newValProxy(val) {
|
|
|
51938
52028
|
});
|
|
51939
52029
|
}
|
|
51940
52030
|
default:
|
|
51941
|
-
return _defineProperty$5(_defineProperty$5({}, Path, val.valPath), "val", val.val);
|
|
52031
|
+
return _defineProperty$5(_defineProperty$5({}, Path$1, val.valPath), "val", val.val);
|
|
51942
52032
|
}
|
|
51943
52033
|
}
|
|
51944
52034
|
function hasOwn(obj, prop) {
|
|
@@ -54563,14 +54653,16 @@ function fromLexicalImageNode(node, files) {
|
|
|
54563
54653
|
return _defineProperty$4(_defineProperty$4(_defineProperty$4({}, VAL_EXTENSION, "file"), FILE_REF_PROP, filePath), "metadata", {
|
|
54564
54654
|
width: node.width || 0,
|
|
54565
54655
|
height: node.height || 0,
|
|
54566
|
-
sha256: sha256 || ""
|
|
54656
|
+
sha256: sha256 || "",
|
|
54657
|
+
mimeType
|
|
54567
54658
|
});
|
|
54568
54659
|
} else {
|
|
54569
54660
|
var _sha = getParam("sha256", node.src);
|
|
54570
54661
|
return _defineProperty$4(_defineProperty$4(_defineProperty$4({}, VAL_EXTENSION, "file"), FILE_REF_PROP, "/public".concat(node.src.split("?")[0])), "metadata", {
|
|
54571
54662
|
width: node.width || 0,
|
|
54572
54663
|
height: node.height || 0,
|
|
54573
|
-
sha256: _sha || ""
|
|
54664
|
+
sha256: _sha || "",
|
|
54665
|
+
mimeType: node.mimeType || ""
|
|
54574
54666
|
});
|
|
54575
54667
|
}
|
|
54576
54668
|
}
|
|
@@ -54673,7 +54765,8 @@ function toLexicalImageNode(node) {
|
|
|
54673
54765
|
type: "image",
|
|
54674
54766
|
src: url,
|
|
54675
54767
|
width: node.width,
|
|
54676
|
-
height: node.height
|
|
54768
|
+
height: node.height,
|
|
54769
|
+
mimeType: node.mimeType
|
|
54677
54770
|
// TODO: altText
|
|
54678
54771
|
});
|
|
54679
54772
|
}
|
|
@@ -54868,12 +54961,13 @@ function parseTokens(tokens, sourceNodes, cursor) {
|
|
|
54868
54961
|
children: subChildren
|
|
54869
54962
|
});
|
|
54870
54963
|
} else if (sourceNode._type === "file") {
|
|
54871
|
-
var _sourceNode$metadata, _sourceNode$metadata2;
|
|
54964
|
+
var _sourceNode$metadata, _sourceNode$metadata2, _sourceNode$metadata3;
|
|
54872
54965
|
children.push({
|
|
54873
54966
|
tag: "img",
|
|
54874
54967
|
src: Internal.convertFileSource(sourceNode).url,
|
|
54875
54968
|
width: (_sourceNode$metadata = sourceNode.metadata) === null || _sourceNode$metadata === void 0 ? void 0 : _sourceNode$metadata.width,
|
|
54876
54969
|
height: (_sourceNode$metadata2 = sourceNode.metadata) === null || _sourceNode$metadata2 === void 0 ? void 0 : _sourceNode$metadata2.height,
|
|
54970
|
+
mimeType: (_sourceNode$metadata3 = sourceNode.metadata) === null || _sourceNode$metadata3 === void 0 ? void 0 : _sourceNode$metadata3.mimeType,
|
|
54877
54971
|
children: []
|
|
54878
54972
|
});
|
|
54879
54973
|
}
|
|
@@ -56359,7 +56453,7 @@ const Toolbar = ({
|
|
|
56359
56453
|
}
|
|
56360
56454
|
});
|
|
56361
56455
|
}, [activeEditor]);
|
|
56362
|
-
return /* @__PURE__ */ jsxs("div", { className: "sticky top-0 flex flex-col px-4 py-2 border-
|
|
56456
|
+
return /* @__PURE__ */ jsxs("div", { className: "sticky top-0 flex flex-col px-4 py-2 border rounded-md rounded-b-none border-input bg-background", children: [
|
|
56363
56457
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-row gap-1", children: [
|
|
56364
56458
|
/* @__PURE__ */ jsx(
|
|
56365
56459
|
Dropdown$1,
|
|
@@ -56451,7 +56545,7 @@ const Toolbar = ({
|
|
|
56451
56545
|
{
|
|
56452
56546
|
type: "text",
|
|
56453
56547
|
placeholder: "Enter URL",
|
|
56454
|
-
className: "w-1/3 px-2 text-primary",
|
|
56548
|
+
className: "w-1/3 px-2 bg-background text-primary",
|
|
56455
56549
|
value: url,
|
|
56456
56550
|
onChange: (ev) => {
|
|
56457
56551
|
ev.preventDefault();
|
|
@@ -56488,12 +56582,10 @@ const Toolbar$1 = Toolbar;
|
|
|
56488
56582
|
function onError(error) {
|
|
56489
56583
|
console.error(error);
|
|
56490
56584
|
}
|
|
56491
|
-
const TOOLBAR_HEIGHT = 28;
|
|
56492
56585
|
const RichTextEditor = ({
|
|
56493
56586
|
richtext,
|
|
56494
56587
|
onEditor
|
|
56495
56588
|
}) => {
|
|
56496
|
-
const { windowSize } = useValOverlayContext();
|
|
56497
56589
|
const prePopulatedState = (editor) => {
|
|
56498
56590
|
editor.setEditorState(
|
|
56499
56591
|
editor.parseEditorState({
|
|
@@ -56536,17 +56628,8 @@ const RichTextEditor = ({
|
|
|
56536
56628
|
/* @__PURE__ */ jsx(
|
|
56537
56629
|
LexicalRichTextPlugin_1.RichTextPlugin,
|
|
56538
56630
|
{
|
|
56539
|
-
contentEditable: /* @__PURE__ */ jsx(
|
|
56540
|
-
|
|
56541
|
-
{
|
|
56542
|
-
className: "font-sans border-b text-primary border-highlight",
|
|
56543
|
-
style: {
|
|
56544
|
-
minHeight: (windowSize == null ? void 0 : windowSize.innerHeight) ? (windowSize == null ? void 0 : windowSize.innerHeight) - TOOLBAR_HEIGHT : void 0
|
|
56545
|
-
},
|
|
56546
|
-
children: /* @__PURE__ */ jsx(LexicalContentEditable, { className: "p-4 outline-none bg-fill" })
|
|
56547
|
-
}
|
|
56548
|
-
),
|
|
56549
|
-
placeholder: /* @__PURE__ */ jsx("div", { className: "", children: "Enter some text..." }),
|
|
56631
|
+
contentEditable: /* @__PURE__ */ jsx("div", { className: "px-3 py-2 text-sm border-b rounded-md rounded-t-none border-x border-input bg-background ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", children: /* @__PURE__ */ jsx(LexicalContentEditable, { className: "p-4 outline-none bg-fill" }) }),
|
|
56632
|
+
placeholder: /* @__PURE__ */ jsx("p", { className: "" }),
|
|
56550
56633
|
ErrorBoundary: LexicalErrorBoundary$1
|
|
56551
56634
|
}
|
|
56552
56635
|
),
|
|
@@ -56611,17 +56694,22 @@ const LogIn = createLucideIcon("LogIn", [
|
|
|
56611
56694
|
["polyline", { points: "10 17 15 12 10 7", key: "1ail0h" }],
|
|
56612
56695
|
["line", { x1: "15", x2: "3", y1: "12", y2: "12", key: "v6grx8" }]
|
|
56613
56696
|
]);
|
|
56614
|
-
const
|
|
56615
|
-
["
|
|
56616
|
-
["
|
|
56617
|
-
["
|
|
56618
|
-
["
|
|
56697
|
+
const Maximize2 = createLucideIcon("Maximize2", [
|
|
56698
|
+
["polyline", { points: "15 3 21 3 21 9", key: "mznyad" }],
|
|
56699
|
+
["polyline", { points: "9 21 3 21 3 15", key: "1avn1i" }],
|
|
56700
|
+
["line", { x1: "21", x2: "14", y1: "3", y2: "10", key: "ota7mn" }],
|
|
56701
|
+
["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }]
|
|
56619
56702
|
]);
|
|
56620
|
-
const
|
|
56621
|
-
["
|
|
56622
|
-
["
|
|
56623
|
-
["
|
|
56624
|
-
|
|
56703
|
+
const Menu = createLucideIcon("Menu", [
|
|
56704
|
+
["line", { x1: "4", x2: "20", y1: "12", y2: "12", key: "1e0a9i" }],
|
|
56705
|
+
["line", { x1: "4", x2: "20", y1: "6", y2: "6", key: "1owob3" }],
|
|
56706
|
+
["line", { x1: "4", x2: "20", y1: "18", y2: "18", key: "yk5zj1" }]
|
|
56707
|
+
]);
|
|
56708
|
+
const Minimize2 = createLucideIcon("Minimize2", [
|
|
56709
|
+
["polyline", { points: "4 14 10 14 10 20", key: "11kfnr" }],
|
|
56710
|
+
["polyline", { points: "20 10 14 10 14 4", key: "rlmsce" }],
|
|
56711
|
+
["line", { x1: "14", x2: "21", y1: "10", y2: "3", key: "o5lafz" }],
|
|
56712
|
+
["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }]
|
|
56625
56713
|
]);
|
|
56626
56714
|
const Moon = createLucideIcon("Moon", [
|
|
56627
56715
|
["path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z", key: "a7tn18" }]
|
|
@@ -56661,20 +56749,35 @@ const PREV_URL_KEY = "valbuild:urlBeforeNavigation";
|
|
|
56661
56749
|
function ValMenu({
|
|
56662
56750
|
api,
|
|
56663
56751
|
patches,
|
|
56752
|
+
direction,
|
|
56664
56753
|
onCommit
|
|
56665
56754
|
}) {
|
|
56666
56755
|
const { theme: theme2, setTheme, editMode, setEditMode, session } = useValOverlayContext();
|
|
56667
56756
|
if (session.status === "success" && session.data.mode === "unauthorized") {
|
|
56668
|
-
return /* @__PURE__ */ jsxs(
|
|
56669
|
-
|
|
56670
|
-
|
|
56671
|
-
|
|
56757
|
+
return /* @__PURE__ */ jsxs(
|
|
56758
|
+
SingleItemMenu,
|
|
56759
|
+
{
|
|
56760
|
+
direction,
|
|
56761
|
+
href: api.getLoginUrl(window.location.href),
|
|
56762
|
+
children: [
|
|
56763
|
+
/* @__PURE__ */ jsx("span", { children: "Login" }),
|
|
56764
|
+
/* @__PURE__ */ jsx(LogIn, { size: 18 })
|
|
56765
|
+
]
|
|
56766
|
+
}
|
|
56767
|
+
);
|
|
56672
56768
|
}
|
|
56673
56769
|
if (session.status === "success" && !session.data.enabled) {
|
|
56674
|
-
return /* @__PURE__ */ jsxs(
|
|
56675
|
-
|
|
56676
|
-
|
|
56677
|
-
|
|
56770
|
+
return /* @__PURE__ */ jsxs(
|
|
56771
|
+
SingleItemMenu,
|
|
56772
|
+
{
|
|
56773
|
+
direction,
|
|
56774
|
+
href: api.getEnableUrl(window.location.href),
|
|
56775
|
+
children: [
|
|
56776
|
+
/* @__PURE__ */ jsx("span", { children: "Enable" }),
|
|
56777
|
+
/* @__PURE__ */ jsx(LogIn, { size: 18 })
|
|
56778
|
+
]
|
|
56779
|
+
}
|
|
56780
|
+
);
|
|
56678
56781
|
}
|
|
56679
56782
|
const [patchCount, setPatchCount] = useState();
|
|
56680
56783
|
useEffect(() => {
|
|
@@ -56684,9 +56787,9 @@ function ValMenu({
|
|
|
56684
56787
|
}
|
|
56685
56788
|
setPatchCount(patchCount2);
|
|
56686
56789
|
}, [patches]);
|
|
56687
|
-
return /* @__PURE__ */ jsxs(MenuContainer, { children: [
|
|
56790
|
+
return /* @__PURE__ */ jsxs(MenuContainer, { direction, children: [
|
|
56688
56791
|
/* @__PURE__ */ jsx(
|
|
56689
|
-
MenuButton,
|
|
56792
|
+
MenuButton$1,
|
|
56690
56793
|
{
|
|
56691
56794
|
active: editMode === "hover",
|
|
56692
56795
|
onClick: () => {
|
|
@@ -56696,7 +56799,7 @@ function ValMenu({
|
|
|
56696
56799
|
}
|
|
56697
56800
|
),
|
|
56698
56801
|
/* @__PURE__ */ jsx(
|
|
56699
|
-
MenuButton,
|
|
56802
|
+
MenuButton$1,
|
|
56700
56803
|
{
|
|
56701
56804
|
onClick: () => {
|
|
56702
56805
|
setTheme(theme2 === "dark" ? "light" : "dark");
|
|
@@ -56708,7 +56811,7 @@ function ValMenu({
|
|
|
56708
56811
|
}
|
|
56709
56812
|
),
|
|
56710
56813
|
/* @__PURE__ */ jsx(
|
|
56711
|
-
MenuButton,
|
|
56814
|
+
MenuButton$1,
|
|
56712
56815
|
{
|
|
56713
56816
|
active: editMode === "full",
|
|
56714
56817
|
onClick: () => {
|
|
@@ -56720,11 +56823,11 @@ function ValMenu({
|
|
|
56720
56823
|
window.location.href = prevUrl || "/";
|
|
56721
56824
|
}
|
|
56722
56825
|
},
|
|
56723
|
-
children: /* @__PURE__ */ jsx("div", { className: "h-[24px] w-[24px] flex justify-center items-center", children: editMode === "full" ? /* @__PURE__ */ jsx(
|
|
56826
|
+
children: /* @__PURE__ */ jsx("div", { className: "h-[24px] w-[24px] flex justify-center items-center", children: editMode === "full" ? /* @__PURE__ */ jsx(Minimize2, { size: 15 }) : /* @__PURE__ */ jsx(Maximize2, { size: 15 }) })
|
|
56724
56827
|
}
|
|
56725
56828
|
),
|
|
56726
56829
|
patchCount !== void 0 && session.status === "success" && session.data.mode === "proxy" && /* @__PURE__ */ jsx(
|
|
56727
|
-
MenuButton,
|
|
56830
|
+
MenuButton$1,
|
|
56728
56831
|
{
|
|
56729
56832
|
onClick: () => {
|
|
56730
56833
|
if (patchCount > 0) {
|
|
@@ -56752,16 +56855,42 @@ function ValMenu({
|
|
|
56752
56855
|
}
|
|
56753
56856
|
function SingleItemMenu({
|
|
56754
56857
|
href,
|
|
56858
|
+
direction,
|
|
56755
56859
|
children
|
|
56756
56860
|
}) {
|
|
56757
|
-
return /* @__PURE__ */ jsx(
|
|
56861
|
+
return /* @__PURE__ */ jsx(
|
|
56862
|
+
"div",
|
|
56863
|
+
{
|
|
56864
|
+
className: classNames(
|
|
56865
|
+
"flex items-start justify-center w-full h-full font-sans border rounded-full gap-3 text-primary border-fill bg-gradient-to-br from-background/90 from-40% to-background backdrop-blur-lg drop-shadow-2xl",
|
|
56866
|
+
{
|
|
56867
|
+
"flex-col items-start": direction === "vertical",
|
|
56868
|
+
"flex-row items-center": direction === "horizontal"
|
|
56869
|
+
}
|
|
56870
|
+
),
|
|
56871
|
+
children: /* @__PURE__ */ jsx("a", { className, href, children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center px-2 gap-y-2", children }) })
|
|
56872
|
+
}
|
|
56873
|
+
);
|
|
56758
56874
|
}
|
|
56759
56875
|
function MenuContainer({
|
|
56760
|
-
children
|
|
56876
|
+
children,
|
|
56877
|
+
direction
|
|
56761
56878
|
}) {
|
|
56762
|
-
return /* @__PURE__ */ jsx(
|
|
56879
|
+
return /* @__PURE__ */ jsx(
|
|
56880
|
+
"div",
|
|
56881
|
+
{
|
|
56882
|
+
className: classNames(
|
|
56883
|
+
"flex justify-center w-full h-full px-2 py-2 font-sans border rounded-full gap-3 text-primary border-fill bg-gradient-to-br from-background/90 from-40% to-background backdrop-blur-lg drop-shadow-2xl",
|
|
56884
|
+
{
|
|
56885
|
+
"flex-col items-start": direction === "vertical",
|
|
56886
|
+
"flex-row items-center": direction === "horizontal"
|
|
56887
|
+
}
|
|
56888
|
+
),
|
|
56889
|
+
children
|
|
56890
|
+
}
|
|
56891
|
+
);
|
|
56763
56892
|
}
|
|
56764
|
-
function MenuButton({
|
|
56893
|
+
function MenuButton$1({
|
|
56765
56894
|
active,
|
|
56766
56895
|
onClick,
|
|
56767
56896
|
children
|
|
@@ -56770,7 +56899,7 @@ function MenuButton({
|
|
|
56770
56899
|
"button",
|
|
56771
56900
|
{
|
|
56772
56901
|
className: classNames(className, {
|
|
56773
|
-
"bg-accent drop-shadow-[
|
|
56902
|
+
"bg-accent text-accent-foreground drop-shadow-[0px_0px_12px_hsl(var(--accent))]": active
|
|
56774
56903
|
}),
|
|
56775
56904
|
onClick,
|
|
56776
56905
|
children
|
|
@@ -62358,14 +62487,21 @@ const twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
|
|
|
62358
62487
|
function cn(...inputs) {
|
|
62359
62488
|
return twMerge(clsx(inputs));
|
|
62360
62489
|
}
|
|
62361
|
-
const ScrollArea = React$3.forwardRef(({ className: className2, children, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
62490
|
+
const ScrollArea = React$3.forwardRef(({ className: className2, children, innerRef, ...props }, ref) => /* @__PURE__ */ jsxs(
|
|
62362
62491
|
$57acba87d6e25586$export$be92b6f5f03c0fe9,
|
|
62363
62492
|
{
|
|
62364
62493
|
ref,
|
|
62365
62494
|
className: cn("relative overflow-hidden", className2),
|
|
62366
62495
|
...props,
|
|
62367
62496
|
children: [
|
|
62368
|
-
/* @__PURE__ */ jsx(
|
|
62497
|
+
/* @__PURE__ */ jsx(
|
|
62498
|
+
$57acba87d6e25586$export$d5c6c08dc2d3ca7,
|
|
62499
|
+
{
|
|
62500
|
+
className: "h-full w-full rounded-[inherit]",
|
|
62501
|
+
ref: innerRef,
|
|
62502
|
+
children
|
|
62503
|
+
}
|
|
62504
|
+
),
|
|
62369
62505
|
/* @__PURE__ */ jsx(ScrollBar, {}),
|
|
62370
62506
|
/* @__PURE__ */ jsx($57acba87d6e25586$export$ac61190d9fc311a9, {})
|
|
62371
62507
|
]
|
|
@@ -62396,8 +62532,8 @@ const ScrollBar = React$3.forwardRef(({ className: className2, orientation = "ve
|
|
|
62396
62532
|
}
|
|
62397
62533
|
));
|
|
62398
62534
|
ScrollBar.displayName = $57acba87d6e25586$export$2fabd85d0eba3c57.displayName;
|
|
62399
|
-
const MIN_WIDTH =
|
|
62400
|
-
const MIN_HEIGHT =
|
|
62535
|
+
const MIN_WIDTH = 400;
|
|
62536
|
+
const MIN_HEIGHT = 250;
|
|
62401
62537
|
function ValWindow({
|
|
62402
62538
|
position,
|
|
62403
62539
|
onClose,
|
|
@@ -62420,15 +62556,13 @@ function ValWindow({
|
|
|
62420
62556
|
const { windowSize, setWindowSize } = useValOverlayContext();
|
|
62421
62557
|
useEffect(() => {
|
|
62422
62558
|
var _a, _b;
|
|
62423
|
-
|
|
62424
|
-
|
|
62425
|
-
|
|
62426
|
-
|
|
62427
|
-
|
|
62428
|
-
|
|
62429
|
-
|
|
62430
|
-
}, [windowSize]);
|
|
62431
|
-
const bottomRef = useRef(null);
|
|
62559
|
+
setWindowSize({
|
|
62560
|
+
height: window.innerHeight - 30,
|
|
62561
|
+
width: MIN_WIDTH,
|
|
62562
|
+
innerHeight: window.innerHeight - 30 - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
|
|
62563
|
+
});
|
|
62564
|
+
}, []);
|
|
62565
|
+
const bottomRef = useRef(null);
|
|
62432
62566
|
return /* @__PURE__ */ jsx(
|
|
62433
62567
|
Resizable,
|
|
62434
62568
|
{
|
|
@@ -62439,7 +62573,7 @@ function ValWindow({
|
|
|
62439
62573
|
var _a, _b;
|
|
62440
62574
|
return setWindowSize({
|
|
62441
62575
|
...size2,
|
|
62442
|
-
innerHeight:
|
|
62576
|
+
innerHeight: size2.height - (64 + (((_b = (_a = bottomRef.current) == null ? void 0 : _a.getBoundingClientRect()) == null ? void 0 : _b.height) || 0))
|
|
62443
62577
|
});
|
|
62444
62578
|
},
|
|
62445
62579
|
handle: /* @__PURE__ */ jsx("div", { className: "fixed bottom-0 right-0 cursor-se-resize", children: /* @__PURE__ */ jsx(
|
|
@@ -62473,14 +62607,16 @@ function ValWindow({
|
|
|
62473
62607
|
width: (windowSize == null ? void 0 : windowSize.width) || MIN_WIDTH,
|
|
62474
62608
|
height: (windowSize == null ? void 0 : windowSize.height) || MIN_HEIGHT,
|
|
62475
62609
|
left: draggedPosition.left,
|
|
62476
|
-
top: draggedPosition.top
|
|
62610
|
+
top: draggedPosition.top,
|
|
62611
|
+
right: draggedPosition.right,
|
|
62612
|
+
bottom: draggedPosition.bottom
|
|
62477
62613
|
},
|
|
62478
62614
|
children: [
|
|
62479
62615
|
/* @__PURE__ */ jsxs(
|
|
62480
62616
|
"div",
|
|
62481
62617
|
{
|
|
62482
62618
|
ref: dragRef,
|
|
62483
|
-
className: "relative flex items-center justify-center px-2
|
|
62619
|
+
className: "relative flex items-center justify-center px-2 py-2 text-primary",
|
|
62484
62620
|
children: [
|
|
62485
62621
|
/* @__PURE__ */ jsx(
|
|
62486
62622
|
AlignJustify,
|
|
@@ -62505,56 +62641,32 @@ function ValWindow({
|
|
|
62505
62641
|
]
|
|
62506
62642
|
}
|
|
62507
62643
|
),
|
|
62508
|
-
/* @__PURE__ */ jsxs(
|
|
62509
|
-
|
|
62510
|
-
|
|
62511
|
-
|
|
62512
|
-
|
|
62513
|
-
|
|
62514
|
-
|
|
62515
|
-
|
|
62516
|
-
|
|
62517
|
-
|
|
62518
|
-
|
|
62519
|
-
|
|
62520
|
-
|
|
62521
|
-
|
|
62522
|
-
height: windowSize == null ? void 0 : windowSize.innerHeight
|
|
62523
|
-
},
|
|
62524
|
-
children: Array.isArray(children) ? children.slice(1, -1) : children
|
|
62525
|
-
}
|
|
62526
|
-
),
|
|
62527
|
-
/* @__PURE__ */ jsx("div", { ref: bottomRef, className: "w-full px-4 pb-0", children: Array.isArray(children) && children.slice(-1) })
|
|
62528
|
-
]
|
|
62529
|
-
}
|
|
62530
|
-
)
|
|
62644
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
62645
|
+
Array.isArray(children) && children.slice(0, 1),
|
|
62646
|
+
/* @__PURE__ */ jsx(
|
|
62647
|
+
ScrollArea,
|
|
62648
|
+
{
|
|
62649
|
+
className: "relative",
|
|
62650
|
+
style: {
|
|
62651
|
+
height: windowSize == null ? void 0 : windowSize.innerHeight
|
|
62652
|
+
},
|
|
62653
|
+
children: Array.isArray(children) ? children.slice(1, -1) : children
|
|
62654
|
+
}
|
|
62655
|
+
),
|
|
62656
|
+
/* @__PURE__ */ jsx("div", { ref: bottomRef, className: "w-full px-4 pb-0", children: Array.isArray(children) && children.slice(-1) })
|
|
62657
|
+
] })
|
|
62531
62658
|
]
|
|
62532
62659
|
}
|
|
62533
62660
|
)
|
|
62534
62661
|
}
|
|
62535
62662
|
);
|
|
62536
62663
|
}
|
|
62537
|
-
function useDrag({
|
|
62538
|
-
position: initPosition
|
|
62539
|
-
}) {
|
|
62664
|
+
function useDrag({ position: initPosition }) {
|
|
62540
62665
|
var _a, _b;
|
|
62541
|
-
const [position, setPosition] = useState({ left:
|
|
62666
|
+
const [position, setPosition] = useState({ left: window.innerWidth - MIN_WIDTH - (24 + 50), top: 16 });
|
|
62542
62667
|
useEffect(() => {
|
|
62543
|
-
var _a2, _b2;
|
|
62544
62668
|
if (initPosition) {
|
|
62545
|
-
|
|
62546
|
-
const top = initPosition.top - 16;
|
|
62547
|
-
setPosition({
|
|
62548
|
-
left: left < 0 ? 0 : left,
|
|
62549
|
-
top: top < 0 ? 0 : top
|
|
62550
|
-
});
|
|
62551
|
-
} else {
|
|
62552
|
-
const left = window.innerWidth / 2 - MIN_WIDTH / 2 - window.scrollX;
|
|
62553
|
-
const top = window.innerHeight / 2 - MIN_HEIGHT / 2 + window.scrollY;
|
|
62554
|
-
setPosition({
|
|
62555
|
-
left,
|
|
62556
|
-
top
|
|
62557
|
-
});
|
|
62669
|
+
setPosition(initPosition);
|
|
62558
62670
|
}
|
|
62559
62671
|
}, [initPosition]);
|
|
62560
62672
|
const [mouseDown, setMouseDown] = useState(false);
|
|
@@ -62568,8 +62680,8 @@ function useDrag({
|
|
|
62568
62680
|
if (mouseDown) {
|
|
62569
62681
|
e.preventDefault();
|
|
62570
62682
|
e.stopPropagation();
|
|
62571
|
-
const left = -((((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2) + e.
|
|
62572
|
-
const top = -((((_d = (_c = ref == null ? void 0 : ref.current) == null ? void 0 : _c.getBoundingClientRect()) == null ? void 0 : _d.height) || 0) / 2) + +e.
|
|
62683
|
+
const left = -((((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.getBoundingClientRect()) == null ? void 0 : _b2.width) || 0) / 2) + e.clientX;
|
|
62684
|
+
const top = -((((_d = (_c = ref == null ? void 0 : ref.current) == null ? void 0 : _c.getBoundingClientRect()) == null ? void 0 : _d.height) || 0) / 2) + +e.clientY;
|
|
62573
62685
|
setPosition({
|
|
62574
62686
|
left: left < 0 ? 0 : left,
|
|
62575
62687
|
top: top < 0 ? 0 : top
|
|
@@ -62747,6 +62859,7 @@ function Grid({ children }) {
|
|
|
62747
62859
|
const x = useRef(0);
|
|
62748
62860
|
const dragRef = useRef(null);
|
|
62749
62861
|
const originalWidth = useRef(0);
|
|
62862
|
+
const [showMobileLeftMenu, setShowMobileLeftMenu] = useState(true);
|
|
62750
62863
|
const handleMouseUp = () => {
|
|
62751
62864
|
isResizing.current = false;
|
|
62752
62865
|
dragRef.current = null;
|
|
@@ -62787,17 +62900,40 @@ function Grid({ children }) {
|
|
|
62787
62900
|
document.removeEventListener("mousemove", handleMouseMove);
|
|
62788
62901
|
};
|
|
62789
62902
|
}, []);
|
|
62790
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex h-screen", children: [
|
|
62903
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative flex h-screen", children: [
|
|
62791
62904
|
/* @__PURE__ */ jsxs(
|
|
62792
62905
|
"div",
|
|
62793
62906
|
{
|
|
62794
62907
|
ref: leftColRef,
|
|
62795
|
-
className:
|
|
62796
|
-
|
|
62908
|
+
className: classNames(
|
|
62909
|
+
"absolute top-0 left-0 border-r border-border md:relative z-[1] bg-gradient-to-br from-card from-50% to-background",
|
|
62910
|
+
{
|
|
62911
|
+
"w-[300px]": showMobileLeftMenu,
|
|
62912
|
+
"w-0 md:w-[300px]": !showMobileLeftMenu
|
|
62913
|
+
}
|
|
62914
|
+
),
|
|
62797
62915
|
children: [
|
|
62798
62916
|
/* @__PURE__ */ jsxs(Grid.Column, { children: [
|
|
62799
|
-
|
|
62800
|
-
|
|
62917
|
+
/* @__PURE__ */ jsx(
|
|
62918
|
+
MenuButton,
|
|
62919
|
+
{
|
|
62920
|
+
showOnMobile: !showMobileLeftMenu,
|
|
62921
|
+
onClick: () => {
|
|
62922
|
+
setShowMobileLeftMenu(!showMobileLeftMenu);
|
|
62923
|
+
},
|
|
62924
|
+
children: header1
|
|
62925
|
+
}
|
|
62926
|
+
),
|
|
62927
|
+
/* @__PURE__ */ jsx(
|
|
62928
|
+
ScrollArea,
|
|
62929
|
+
{
|
|
62930
|
+
style: { height: "calc(100vh - 50px)" },
|
|
62931
|
+
onClick: () => {
|
|
62932
|
+
setShowMobileLeftMenu(false);
|
|
62933
|
+
},
|
|
62934
|
+
children: body1
|
|
62935
|
+
}
|
|
62936
|
+
)
|
|
62801
62937
|
] }),
|
|
62802
62938
|
/* @__PURE__ */ jsx(
|
|
62803
62939
|
"div",
|
|
@@ -62816,7 +62952,28 @@ function Grid({ children }) {
|
|
|
62816
62952
|
"w-full": !header3 && !body3
|
|
62817
62953
|
}),
|
|
62818
62954
|
children: /* @__PURE__ */ jsxs(Grid.Column, { children: [
|
|
62819
|
-
|
|
62955
|
+
/* @__PURE__ */ jsxs("span", { className: "flex w-full border-b border-border", children: [
|
|
62956
|
+
/* @__PURE__ */ jsx(
|
|
62957
|
+
MenuButton,
|
|
62958
|
+
{
|
|
62959
|
+
className: "md:hidden",
|
|
62960
|
+
showOnMobile: showMobileLeftMenu,
|
|
62961
|
+
onClick: () => {
|
|
62962
|
+
setShowMobileLeftMenu(!showMobileLeftMenu);
|
|
62963
|
+
},
|
|
62964
|
+
children: header1
|
|
62965
|
+
}
|
|
62966
|
+
),
|
|
62967
|
+
/* @__PURE__ */ jsx(
|
|
62968
|
+
"span",
|
|
62969
|
+
{
|
|
62970
|
+
className: classNames({
|
|
62971
|
+
"pl-[300px] md:pl-0": showMobileLeftMenu
|
|
62972
|
+
}),
|
|
62973
|
+
children: header2
|
|
62974
|
+
}
|
|
62975
|
+
)
|
|
62976
|
+
] }),
|
|
62820
62977
|
/* @__PURE__ */ jsx(ScrollArea, { style: { height: "calc(100vh - 50px)" }, children: body2 })
|
|
62821
62978
|
] })
|
|
62822
62979
|
}
|
|
@@ -62844,111 +63001,30 @@ function Grid({ children }) {
|
|
|
62844
63001
|
)
|
|
62845
63002
|
] });
|
|
62846
63003
|
}
|
|
62847
|
-
|
|
62848
|
-
|
|
62849
|
-
|
|
62850
|
-
|
|
62851
|
-
|
|
62852
|
-
|
|
62853
|
-
};
|
|
62854
|
-
const Section = ({ className: className2 }) => {
|
|
63004
|
+
function MenuButton({
|
|
63005
|
+
className: className2,
|
|
63006
|
+
showOnMobile,
|
|
63007
|
+
onClick,
|
|
63008
|
+
children
|
|
63009
|
+
}) {
|
|
62855
63010
|
return /* @__PURE__ */ jsxs(
|
|
62856
|
-
"
|
|
63011
|
+
"div",
|
|
62857
63012
|
{
|
|
62858
|
-
|
|
62859
|
-
|
|
62860
|
-
|
|
62861
|
-
className: className2,
|
|
62862
|
-
fill: "currentColor",
|
|
62863
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
63013
|
+
className: classNames("flex items-center px-4 md:px-4", className2, {
|
|
63014
|
+
"hidden md:flex": showOnMobile
|
|
63015
|
+
}),
|
|
62864
63016
|
children: [
|
|
62865
|
-
/* @__PURE__ */
|
|
62866
|
-
|
|
62867
|
-
"path",
|
|
62868
|
-
{
|
|
62869
|
-
fillRule: "evenodd",
|
|
62870
|
-
clipRule: "evenodd",
|
|
62871
|
-
d: "M9 1.5H0V0.5H9V1.5Z",
|
|
62872
|
-
fill: "currentColor"
|
|
62873
|
-
}
|
|
62874
|
-
),
|
|
62875
|
-
/* @__PURE__ */ jsx(
|
|
62876
|
-
"path",
|
|
62877
|
-
{
|
|
62878
|
-
fillRule: "evenodd",
|
|
62879
|
-
clipRule: "evenodd",
|
|
62880
|
-
d: "M9 9.5H0V8.5H9V9.5Z",
|
|
62881
|
-
fill: "currentColor"
|
|
62882
|
-
}
|
|
62883
|
-
)
|
|
62884
|
-
] }),
|
|
62885
|
-
/* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: "clip0_1222_1618", children: /* @__PURE__ */ jsx(
|
|
62886
|
-
"rect",
|
|
62887
|
-
{
|
|
62888
|
-
width: "9",
|
|
62889
|
-
height: "9",
|
|
62890
|
-
fill: "white",
|
|
62891
|
-
transform: "translate(0 0.5)"
|
|
62892
|
-
}
|
|
62893
|
-
) }) })
|
|
63017
|
+
/* @__PURE__ */ jsx("button", { className: "md:hidden", onClick, children: /* @__PURE__ */ jsx(Menu, {}) }),
|
|
63018
|
+
/* @__PURE__ */ jsx("span", { className: "flex items-center justify-between w-full", children })
|
|
62894
63019
|
]
|
|
62895
63020
|
}
|
|
62896
63021
|
);
|
|
62897
|
-
};
|
|
62898
|
-
const Section$1 = Section;
|
|
62899
|
-
const TextIcon = ({ className: className2 }) => {
|
|
62900
|
-
return /* @__PURE__ */ jsx(
|
|
62901
|
-
"svg",
|
|
62902
|
-
{
|
|
62903
|
-
width: "9",
|
|
62904
|
-
height: "10",
|
|
62905
|
-
viewBox: "0 0 9 10",
|
|
62906
|
-
fill: "currentColor",
|
|
62907
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
62908
|
-
className: className2,
|
|
62909
|
-
children: /* @__PURE__ */ jsx("g", { clipPath: "url(#clip0_1229_1625)", children: /* @__PURE__ */ jsx("path", { d: "M0.0145513 0.5H8.98545L9 3.18569H8.57074C8.43007 2.2276 8.02749 1.57948 7.36298 1.24133C6.98949 1.05491 6.43169 0.953035 5.68957 0.935694V7.94581C5.68957 8.43569 5.78416 8.76084 5.97332 8.92124C6.16734 9.08165 6.5675 9.16185 7.17381 9.16185V9.5H1.86257V9.16185C2.44462 9.16185 2.83023 9.08165 3.0194 8.92124C3.21342 8.7565 3.31043 8.43136 3.31043 7.94581V0.935694C2.58286 0.953035 2.02506 1.05491 1.63703 1.24133C0.92401 1.58815 0.521423 2.23627 0.429264 3.18569H0L0.0145513 0.5Z" }) })
|
|
62910
|
-
}
|
|
62911
|
-
);
|
|
62912
|
-
};
|
|
62913
|
-
const TextIcon$1 = TextIcon;
|
|
62914
|
-
function Tree({ children, rootPath }) {
|
|
62915
|
-
return /* @__PURE__ */ jsx("div", { className: "flex flex-col w-full py-2 text-xs", children: Children.map(children, (child) => {
|
|
62916
|
-
return cloneElement$1(child, {
|
|
62917
|
-
paths: [rootPath]
|
|
62918
|
-
});
|
|
62919
|
-
}) });
|
|
62920
63022
|
}
|
|
62921
|
-
|
|
62922
|
-
children
|
|
62923
|
-
|
|
62924
|
-
|
|
62925
|
-
|
|
62926
|
-
type,
|
|
62927
|
-
setActivePath
|
|
62928
|
-
}) => {
|
|
62929
|
-
const paddingLeft = level * 30;
|
|
62930
|
-
const logo = type === "string" ? /* @__PURE__ */ jsx(TextIcon$1, {}) : type === "image" ? /* @__PURE__ */ jsx(ImageIcon$1, { className: "h-[9px] w-[9px]" }) : /* @__PURE__ */ jsx(Section$1, {});
|
|
62931
|
-
return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
|
|
62932
|
-
/* @__PURE__ */ jsx(
|
|
62933
|
-
"button",
|
|
62934
|
-
{
|
|
62935
|
-
className: "flex justify-between w-full group py-2 text-xs font-[400] shrink-0",
|
|
62936
|
-
onClick: () => {
|
|
62937
|
-
setActivePath && setActivePath(path);
|
|
62938
|
-
},
|
|
62939
|
-
style: { paddingLeft },
|
|
62940
|
-
children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2", children: [
|
|
62941
|
-
logo,
|
|
62942
|
-
/* @__PURE__ */ jsx("p", { children: path })
|
|
62943
|
-
] })
|
|
62944
|
-
}
|
|
62945
|
-
),
|
|
62946
|
-
children && /* @__PURE__ */ jsx(Fragment$1, { children: Children.map(children, (child) => {
|
|
62947
|
-
return cloneElement$1(child, {
|
|
62948
|
-
level: level + 1,
|
|
62949
|
-
paths: [...paths, path]
|
|
62950
|
-
});
|
|
62951
|
-
}) })
|
|
63023
|
+
Grid.Column = ({ children, className: className2 }) => {
|
|
63024
|
+
const [header, body] = Children.toArray(children);
|
|
63025
|
+
return /* @__PURE__ */ jsxs("div", { className: classNames("flex flex-col", className2), children: [
|
|
63026
|
+
/* @__PURE__ */ jsx("div", { className: "flex items-center border-b border-border", children: header }),
|
|
63027
|
+
body
|
|
62952
63028
|
] });
|
|
62953
63029
|
};
|
|
62954
63030
|
const falsyToString = (value) => typeof value === "boolean" ? "".concat(value) : value === 0 ? "0" : value;
|
|
@@ -67452,8 +67528,10 @@ function ValFormField({
|
|
|
67452
67528
|
return /* @__PURE__ */ jsx(
|
|
67453
67529
|
StringField,
|
|
67454
67530
|
{
|
|
67531
|
+
path,
|
|
67455
67532
|
defaultValue: source,
|
|
67456
67533
|
disabled,
|
|
67534
|
+
schema,
|
|
67457
67535
|
registerPatchCallback,
|
|
67458
67536
|
onSubmit
|
|
67459
67537
|
}
|
|
@@ -67528,7 +67606,13 @@ function ValFormField({
|
|
|
67528
67606
|
}
|
|
67529
67607
|
return /* @__PURE__ */ jsxs("div", { children: [
|
|
67530
67608
|
"Unsupported schema: ",
|
|
67531
|
-
schema.type
|
|
67609
|
+
schema.type,
|
|
67610
|
+
" (source type: ",
|
|
67611
|
+
typeof source,
|
|
67612
|
+
" source:",
|
|
67613
|
+
" ",
|
|
67614
|
+
JSON.stringify(source),
|
|
67615
|
+
")"
|
|
67532
67616
|
] });
|
|
67533
67617
|
}
|
|
67534
67618
|
function createImagePatch(path, data, filename, metadata) {
|
|
@@ -67571,17 +67655,29 @@ function createImagePatch(path, data, filename, metadata) {
|
|
|
67571
67655
|
}
|
|
67572
67656
|
];
|
|
67573
67657
|
}
|
|
67658
|
+
function createImageMetadataPatch(path, metadata) {
|
|
67659
|
+
const metadataPath = path + "/metadata";
|
|
67660
|
+
return [
|
|
67661
|
+
{
|
|
67662
|
+
value: metadata,
|
|
67663
|
+
op: "replace",
|
|
67664
|
+
path: metadataPath
|
|
67665
|
+
}
|
|
67666
|
+
];
|
|
67667
|
+
}
|
|
67574
67668
|
function ImageField({
|
|
67575
67669
|
path,
|
|
67576
67670
|
defaultValue,
|
|
67577
67671
|
onSubmit,
|
|
67578
67672
|
registerPatchCallback
|
|
67579
67673
|
}) {
|
|
67674
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;
|
|
67580
67675
|
const [data, setData] = useState(
|
|
67581
67676
|
null
|
|
67582
67677
|
);
|
|
67583
67678
|
const [loading, setLoading] = useState(false);
|
|
67584
67679
|
const [metadata, setMetadata] = useState();
|
|
67680
|
+
const [hotspot, setHotspot] = useState();
|
|
67585
67681
|
const [url, setUrl] = useState();
|
|
67586
67682
|
useEffect(() => {
|
|
67587
67683
|
setUrl(defaultValue && Internal.convertFileSource(defaultValue).url);
|
|
@@ -67598,56 +67694,143 @@ function ImageField({
|
|
|
67598
67694
|
});
|
|
67599
67695
|
}
|
|
67600
67696
|
}, [data, defaultValue]);
|
|
67697
|
+
useEffect(() => {
|
|
67698
|
+
var _a2;
|
|
67699
|
+
if (hotspot) {
|
|
67700
|
+
if (metadata) {
|
|
67701
|
+
const newMetadata = {
|
|
67702
|
+
...metadata,
|
|
67703
|
+
hotspot
|
|
67704
|
+
};
|
|
67705
|
+
setMetadata(newMetadata);
|
|
67706
|
+
} else if (defaultValue == null ? void 0 : defaultValue.metadata) {
|
|
67707
|
+
setMetadata({
|
|
67708
|
+
...defaultValue.metadata,
|
|
67709
|
+
hotspot
|
|
67710
|
+
});
|
|
67711
|
+
} else {
|
|
67712
|
+
console.error("Neither image metadata nor value is set");
|
|
67713
|
+
}
|
|
67714
|
+
} else {
|
|
67715
|
+
if ((_a2 = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _a2.hotspot) {
|
|
67716
|
+
setHotspot(defaultValue.metadata.hotspot);
|
|
67717
|
+
}
|
|
67718
|
+
}
|
|
67719
|
+
}, [hotspot, defaultValue]);
|
|
67601
67720
|
return /* @__PURE__ */ jsxs(FieldContainer, { children: [
|
|
67602
|
-
/* @__PURE__ */ jsx(
|
|
67603
|
-
|
|
67721
|
+
/* @__PURE__ */ jsx(
|
|
67722
|
+
"div",
|
|
67723
|
+
{
|
|
67724
|
+
className: "flex flex-col max-w-4xl p-2 border border-b-0 rounded-sm rounded-b-none gap-y-4 bg-background text-foreground border-input",
|
|
67725
|
+
children: data || url ? /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
67726
|
+
hotspot && /* @__PURE__ */ jsx(
|
|
67727
|
+
"div",
|
|
67728
|
+
{
|
|
67729
|
+
className: "rounded-full h-[12px] w-[12px] bg-background mix-blend-difference border-accent border-2 absolute pointer-events-none",
|
|
67730
|
+
style: {
|
|
67731
|
+
top: `${hotspot.y * 100}%`,
|
|
67732
|
+
left: `${hotspot.x * 100}%`
|
|
67733
|
+
}
|
|
67734
|
+
}
|
|
67735
|
+
),
|
|
67736
|
+
/* @__PURE__ */ jsx(
|
|
67737
|
+
"img",
|
|
67738
|
+
{
|
|
67739
|
+
src: (data == null ? void 0 : data.src) || url,
|
|
67740
|
+
draggable: false,
|
|
67741
|
+
className: "w-full",
|
|
67742
|
+
style: {
|
|
67743
|
+
cursor: "crosshair"
|
|
67744
|
+
},
|
|
67745
|
+
onClick: (ev) => {
|
|
67746
|
+
const { width: width2, height: height2, left, top } = ev.currentTarget.getBoundingClientRect();
|
|
67747
|
+
const hotspotX = (ev.clientX - 6 - left) / width2;
|
|
67748
|
+
const hotspotY = (ev.clientY - 6 - top) / height2;
|
|
67749
|
+
setHotspot({
|
|
67750
|
+
x: hotspotX,
|
|
67751
|
+
y: hotspotY,
|
|
67752
|
+
width: 1,
|
|
67753
|
+
height: 1
|
|
67754
|
+
});
|
|
67755
|
+
}
|
|
67756
|
+
}
|
|
67757
|
+
)
|
|
67758
|
+
] }) : /* @__PURE__ */ jsx("div", { children: "Select image below" })
|
|
67759
|
+
},
|
|
67760
|
+
path
|
|
67761
|
+
),
|
|
67762
|
+
/* @__PURE__ */ jsxs("div", { className: "w-full p-4 border border-t-0 rounded-b-sm bg-background border-input", children: [
|
|
67763
|
+
/* @__PURE__ */ jsx(
|
|
67764
|
+
"label",
|
|
67765
|
+
{
|
|
67766
|
+
htmlFor: `img_input:${path}`,
|
|
67767
|
+
className: "block w-full px-1 py-2 text-sm text-center rounded-md cursor-pointer bg-primary text-background",
|
|
67768
|
+
children: "Update"
|
|
67769
|
+
}
|
|
67770
|
+
),
|
|
67604
67771
|
/* @__PURE__ */ jsx(
|
|
67605
67772
|
"input",
|
|
67606
67773
|
{
|
|
67774
|
+
hidden: true,
|
|
67607
67775
|
id: `img_input:${path}`,
|
|
67608
67776
|
type: "file",
|
|
67609
|
-
hidden: true,
|
|
67610
67777
|
onChange: (ev) => {
|
|
67611
67778
|
readImage(ev).then((res) => {
|
|
67612
67779
|
setData({ src: res.src, filename: res.filename });
|
|
67613
|
-
if (res.width && res.height) {
|
|
67780
|
+
if (res.width && res.height && res.mimeType) {
|
|
67614
67781
|
setMetadata({
|
|
67615
67782
|
sha256: res.sha256,
|
|
67616
67783
|
width: res.width,
|
|
67617
|
-
height: res.height
|
|
67784
|
+
height: res.height,
|
|
67785
|
+
mimeType: res.mimeType,
|
|
67786
|
+
hotspot
|
|
67618
67787
|
});
|
|
67619
67788
|
} else {
|
|
67620
67789
|
setMetadata(void 0);
|
|
67790
|
+
setHotspot(void 0);
|
|
67621
67791
|
}
|
|
67622
67792
|
}).catch((err2) => {
|
|
67623
67793
|
console.error(err2.message);
|
|
67624
67794
|
setData(null);
|
|
67795
|
+
setHotspot(void 0);
|
|
67625
67796
|
setMetadata(void 0);
|
|
67626
67797
|
});
|
|
67627
67798
|
}
|
|
67628
67799
|
}
|
|
67629
67800
|
)
|
|
67630
|
-
] })
|
|
67631
|
-
onSubmit &&
|
|
67801
|
+
] }),
|
|
67802
|
+
onSubmit && /* @__PURE__ */ jsx(
|
|
67632
67803
|
SubmitButton,
|
|
67633
67804
|
{
|
|
67634
67805
|
loading,
|
|
67806
|
+
enabled: !!data || ((_b = (_a = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _a.hotspot) == null ? void 0 : _b.height) !== (hotspot == null ? void 0 : hotspot.height) || ((_d = (_c = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _c.hotspot) == null ? void 0 : _d.width) !== (hotspot == null ? void 0 : hotspot.width) || ((_f = (_e = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _e.hotspot) == null ? void 0 : _f.x) !== (hotspot == null ? void 0 : hotspot.x) || ((_h = (_g = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _g.hotspot) == null ? void 0 : _h.y) !== (hotspot == null ? void 0 : hotspot.y) || ((_i = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _i.width) !== (metadata == null ? void 0 : metadata.width) || ((_j = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _j.height) !== (metadata == null ? void 0 : metadata.height) || ((_k = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _k.mimeType) !== (metadata == null ? void 0 : metadata.mimeType) || ((_l = defaultValue == null ? void 0 : defaultValue.metadata) == null ? void 0 : _l.sha256) !== (metadata == null ? void 0 : metadata.sha256),
|
|
67635
67807
|
onClick: () => {
|
|
67636
|
-
|
|
67637
|
-
|
|
67638
|
-
(
|
|
67639
|
-
|
|
67640
|
-
|
|
67641
|
-
|
|
67642
|
-
|
|
67643
|
-
|
|
67808
|
+
if (data) {
|
|
67809
|
+
setLoading(true);
|
|
67810
|
+
onSubmit(
|
|
67811
|
+
(path2) => Promise.resolve(
|
|
67812
|
+
createImagePatch(
|
|
67813
|
+
path2,
|
|
67814
|
+
data.src,
|
|
67815
|
+
data.filename ?? null,
|
|
67816
|
+
metadata
|
|
67817
|
+
)
|
|
67644
67818
|
)
|
|
67645
|
-
)
|
|
67646
|
-
|
|
67647
|
-
|
|
67648
|
-
|
|
67649
|
-
|
|
67650
|
-
})
|
|
67819
|
+
).finally(() => {
|
|
67820
|
+
setLoading(false);
|
|
67821
|
+
setData(null);
|
|
67822
|
+
setMetadata(void 0);
|
|
67823
|
+
});
|
|
67824
|
+
} else if (metadata) {
|
|
67825
|
+
setLoading(true);
|
|
67826
|
+
onSubmit(
|
|
67827
|
+
(path2) => Promise.resolve(createImageMetadataPatch(path2, metadata))
|
|
67828
|
+
).finally(() => {
|
|
67829
|
+
setLoading(false);
|
|
67830
|
+
setData(null);
|
|
67831
|
+
setMetadata(void 0);
|
|
67832
|
+
});
|
|
67833
|
+
}
|
|
67651
67834
|
}
|
|
67652
67835
|
}
|
|
67653
67836
|
)
|
|
@@ -67699,6 +67882,15 @@ function RichTextField({
|
|
|
67699
67882
|
editor.registerDecoratorListener(() => {
|
|
67700
67883
|
setDidChange(true);
|
|
67701
67884
|
});
|
|
67885
|
+
editor.registerMutationListener(LexicalLink_1.LinkNode, () => {
|
|
67886
|
+
setDidChange(true);
|
|
67887
|
+
});
|
|
67888
|
+
editor.registerMutationListener(ImageNode, () => {
|
|
67889
|
+
setDidChange(true);
|
|
67890
|
+
});
|
|
67891
|
+
editor.registerMutationListener(LexicalExports.TextNode, () => {
|
|
67892
|
+
setDidChange(true);
|
|
67893
|
+
});
|
|
67702
67894
|
}
|
|
67703
67895
|
}, [editor]);
|
|
67704
67896
|
useEffect(() => {
|
|
@@ -67719,10 +67911,11 @@ function RichTextField({
|
|
|
67719
67911
|
}
|
|
67720
67912
|
}
|
|
67721
67913
|
),
|
|
67722
|
-
onSubmit &&
|
|
67914
|
+
onSubmit && /* @__PURE__ */ jsx(
|
|
67723
67915
|
SubmitButton,
|
|
67724
67916
|
{
|
|
67725
67917
|
loading: loading || !editor,
|
|
67918
|
+
enabled: didChange,
|
|
67726
67919
|
onClick: () => {
|
|
67727
67920
|
if (editor) {
|
|
67728
67921
|
setLoading(true);
|
|
@@ -67804,10 +67997,11 @@ function KeyOfField({
|
|
|
67804
67997
|
]
|
|
67805
67998
|
}
|
|
67806
67999
|
),
|
|
67807
|
-
onSubmit &&
|
|
68000
|
+
onSubmit && /* @__PURE__ */ jsx(
|
|
67808
68001
|
SubmitButton,
|
|
67809
68002
|
{
|
|
67810
68003
|
loading,
|
|
68004
|
+
enabled: defaultValue !== value,
|
|
67811
68005
|
onClick: () => {
|
|
67812
68006
|
setLoading(true);
|
|
67813
68007
|
onSubmit(async (path) => [
|
|
@@ -67861,10 +68055,11 @@ function NumberField({
|
|
|
67861
68055
|
type: "number"
|
|
67862
68056
|
}
|
|
67863
68057
|
),
|
|
67864
|
-
onSubmit &&
|
|
68058
|
+
onSubmit && /* @__PURE__ */ jsx(
|
|
67865
68059
|
SubmitButton,
|
|
67866
68060
|
{
|
|
67867
68061
|
loading,
|
|
68062
|
+
enabled: defaultValue !== value,
|
|
67868
68063
|
onClick: () => {
|
|
67869
68064
|
setLoading(true);
|
|
67870
68065
|
onSubmit(async (path) => {
|
|
@@ -67887,6 +68082,8 @@ function NumberField({
|
|
|
67887
68082
|
function StringField({
|
|
67888
68083
|
disabled,
|
|
67889
68084
|
defaultValue,
|
|
68085
|
+
path,
|
|
68086
|
+
schema,
|
|
67890
68087
|
registerPatchCallback,
|
|
67891
68088
|
onSubmit
|
|
67892
68089
|
}) {
|
|
@@ -67898,18 +68095,28 @@ function StringField({
|
|
|
67898
68095
|
const ref = useRef(null);
|
|
67899
68096
|
useEffect(() => {
|
|
67900
68097
|
if (registerPatchCallback) {
|
|
67901
|
-
registerPatchCallback(async (
|
|
68098
|
+
registerPatchCallback(async (path2) => {
|
|
67902
68099
|
var _a;
|
|
67903
68100
|
return [
|
|
67904
68101
|
{
|
|
67905
68102
|
op: "replace",
|
|
67906
|
-
path,
|
|
68103
|
+
path: path2,
|
|
67907
68104
|
value: ((_a = ref.current) == null ? void 0 : _a.value) || ""
|
|
67908
68105
|
}
|
|
67909
68106
|
];
|
|
67910
68107
|
});
|
|
67911
68108
|
}
|
|
67912
68109
|
}, []);
|
|
68110
|
+
const actualSchema = new StringSchema(
|
|
68111
|
+
schema.options ? {
|
|
68112
|
+
...schema.options,
|
|
68113
|
+
regexp: schema.options.regexp ? new RegExp(
|
|
68114
|
+
schema.options.regexp.source,
|
|
68115
|
+
schema.options.regexp.flags
|
|
68116
|
+
) : void 0
|
|
68117
|
+
} : void 0
|
|
68118
|
+
);
|
|
68119
|
+
const validationErrors = actualSchema.validate(path, value);
|
|
67913
68120
|
return /* @__PURE__ */ jsxs(FieldContainer, { children: [
|
|
67914
68121
|
/* @__PURE__ */ jsx(
|
|
67915
68122
|
Input,
|
|
@@ -67920,18 +68127,20 @@ function StringField({
|
|
|
67920
68127
|
onChange: (e) => setValue(e.target.value)
|
|
67921
68128
|
}
|
|
67922
68129
|
),
|
|
67923
|
-
onSubmit &&
|
|
68130
|
+
onSubmit && /* @__PURE__ */ jsx(
|
|
67924
68131
|
SubmitButton,
|
|
67925
68132
|
{
|
|
68133
|
+
validationErrors: validationErrors && validationErrors[path],
|
|
67926
68134
|
loading,
|
|
68135
|
+
enabled: defaultValue !== value && !validationErrors,
|
|
67927
68136
|
onClick: () => {
|
|
67928
68137
|
setLoading(true);
|
|
67929
|
-
onSubmit(async (
|
|
68138
|
+
onSubmit(async (path2) => {
|
|
67930
68139
|
var _a;
|
|
67931
68140
|
return [
|
|
67932
68141
|
{
|
|
67933
68142
|
op: "replace",
|
|
67934
|
-
path,
|
|
68143
|
+
path: path2,
|
|
67935
68144
|
value: ((_a = ref.current) == null ? void 0 : _a.value) || ""
|
|
67936
68145
|
}
|
|
67937
68146
|
];
|
|
@@ -67943,14 +68152,24 @@ function StringField({
|
|
|
67943
68152
|
)
|
|
67944
68153
|
] });
|
|
67945
68154
|
}
|
|
68155
|
+
function InlineValidationErrors({ errors }) {
|
|
68156
|
+
return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-y-1 p-2 rounded-md text-sm text-destructive-foreground bg-destructive", children: errors.map((error, i) => /* @__PURE__ */ jsx("div", { children: error.message }, i)) });
|
|
68157
|
+
}
|
|
67946
68158
|
function FieldContainer({ children }) {
|
|
67947
|
-
return /* @__PURE__ */ jsx("div", { className: "relative p-4
|
|
68159
|
+
return /* @__PURE__ */ jsx("div", { className: "relative p-4", children });
|
|
67948
68160
|
}
|
|
67949
68161
|
function SubmitButton({
|
|
67950
68162
|
loading,
|
|
68163
|
+
enabled,
|
|
68164
|
+
validationErrors,
|
|
67951
68165
|
onClick
|
|
67952
68166
|
}) {
|
|
67953
|
-
|
|
68167
|
+
const { session } = useValOverlayContext();
|
|
68168
|
+
const isProxy = session.status === "success" && session.data.mode === "proxy";
|
|
68169
|
+
return /* @__PURE__ */ jsx("div", { className: "sticky bottom-0 m-4 ml-0", children: /* @__PURE__ */ jsxs("div", { className: "flex justify-between w-full gap-2 py-2 text-sm", children: [
|
|
68170
|
+
validationErrors ? /* @__PURE__ */ jsx(InlineValidationErrors, { errors: validationErrors || [] }) : /* @__PURE__ */ jsx("span", {}),
|
|
68171
|
+
/* @__PURE__ */ jsx(Button, { disabled: loading || !enabled, onClick, children: loading ? isProxy ? "Staging..." : "Saving..." : isProxy ? "Stage" : "Save" })
|
|
68172
|
+
] }) });
|
|
67954
68173
|
}
|
|
67955
68174
|
const Logo = ({ className: className2 }) => {
|
|
67956
68175
|
return /* @__PURE__ */ jsxs(
|
|
@@ -67967,7 +68186,7 @@ const Logo = ({ className: className2 }) => {
|
|
|
67967
68186
|
"path",
|
|
67968
68187
|
{
|
|
67969
68188
|
d: "M5 5.36426C5 5.16309 5.16309 5 5.36426 5H17.6581C17.8593 5 18.0223 5.16309 18.0223 5.36426V28.4949C18.0223 28.696 17.8593 28.8591 17.6581 28.8591H5.36426C5.16309 28.8591 5 28.696 5 28.4949V5.36426Z",
|
|
67970
|
-
fill: "
|
|
68189
|
+
fill: "hsl(var(--accent))"
|
|
67971
68190
|
}
|
|
67972
68191
|
) }),
|
|
67973
68192
|
/* @__PURE__ */ jsx("g", { filter: "url(#filter1_i_21_1677)", children: /* @__PURE__ */ jsx("circle", { cx: "11.4656", cy: "23.7595", r: "2.18557", fill: "currentColor" }) }),
|
|
@@ -72421,6 +72640,33 @@ function useSession(api) {
|
|
|
72421
72640
|
}, [sessionResetId]);
|
|
72422
72641
|
return session;
|
|
72423
72642
|
}
|
|
72643
|
+
function Path({ children }) {
|
|
72644
|
+
const segs = children.split("/").filter((seg) => seg);
|
|
72645
|
+
return segs.map((seg, i) => {
|
|
72646
|
+
if (i !== segs.length - 1) {
|
|
72647
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
72648
|
+
/* @__PURE__ */ jsx("span", { children: seg }),
|
|
72649
|
+
/* @__PURE__ */ jsx("span", { className: "px-[2px] text-muted", children: "/" })
|
|
72650
|
+
] }, `${children}/${seg}`);
|
|
72651
|
+
}
|
|
72652
|
+
return /* @__PURE__ */ jsx(Seg, { children: seg }, children);
|
|
72653
|
+
});
|
|
72654
|
+
}
|
|
72655
|
+
function Seg({ children }) {
|
|
72656
|
+
if (children.includes(".")) {
|
|
72657
|
+
const segs = children.split(".");
|
|
72658
|
+
return segs.map((seg, i) => {
|
|
72659
|
+
if (i !== segs.length - 1) {
|
|
72660
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
72661
|
+
/* @__PURE__ */ jsx("span", { children: i === 0 ? seg : JSON.parse(seg) }),
|
|
72662
|
+
/* @__PURE__ */ jsx("span", { className: "px-[2px] text-muted", children: "." })
|
|
72663
|
+
] }, `${children}.${seg}`);
|
|
72664
|
+
}
|
|
72665
|
+
return /* @__PURE__ */ jsx("span", { children: i === 0 ? seg : JSON.parse(seg) }, children);
|
|
72666
|
+
});
|
|
72667
|
+
}
|
|
72668
|
+
return /* @__PURE__ */ jsx("span", { children });
|
|
72669
|
+
}
|
|
72424
72670
|
const ValModulesContext = React__default.createContext(null);
|
|
72425
72671
|
const useValModuleFromPath = (sourcePath) => {
|
|
72426
72672
|
var _a, _b;
|
|
@@ -72571,12 +72817,13 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
|
|
|
72571
72817
|
"div",
|
|
72572
72818
|
{
|
|
72573
72819
|
id: "val-fullscreen-container",
|
|
72574
|
-
className: "relative font-serif antialiased",
|
|
72820
|
+
className: "relative w-full h-[100] overflow-hidden font-serif antialiased bg-background text-primary",
|
|
72575
72821
|
"data-mode": theme2,
|
|
72576
72822
|
children: [
|
|
72577
|
-
/* @__PURE__ */ jsx("div", { className: "fixed -translate-
|
|
72823
|
+
/* @__PURE__ */ jsx("div", { className: "fixed -translate-y-1/2 right-4 top-1/2 z-overlay", children: /* @__PURE__ */ jsx(
|
|
72578
72824
|
ValMenu,
|
|
72579
72825
|
{
|
|
72826
|
+
direction: "vertical",
|
|
72580
72827
|
api,
|
|
72581
72828
|
patches,
|
|
72582
72829
|
onCommit: () => setPatchResetId((prev) => prev + 1)
|
|
@@ -72589,18 +72836,19 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
|
|
|
72589
72836
|
value: {
|
|
72590
72837
|
hoverElem: hoverElemRef == null ? void 0 : hoverElemRef.current
|
|
72591
72838
|
},
|
|
72592
|
-
children: /* @__PURE__ */ jsx("div", { className: "text-primary
|
|
72839
|
+
children: /* @__PURE__ */ jsx("div", { className: "text-primary", children: /* @__PURE__ */ jsxs(Grid, { children: [
|
|
72593
72840
|
/* @__PURE__ */ jsx("div", { className: "px-4 h-[50px] flex items-center justify-center", children: /* @__PURE__ */ jsx(Logo$1, {}) }),
|
|
72594
72841
|
/* @__PURE__ */ jsx(ScrollArea, { className: "px-4", children: modules ? /* @__PURE__ */ jsx(
|
|
72595
72842
|
PathTree,
|
|
72596
72843
|
{
|
|
72844
|
+
selectedPath,
|
|
72597
72845
|
paths: Object.keys(modules),
|
|
72598
72846
|
setSelectedModuleId: (path) => {
|
|
72599
72847
|
navigate(path);
|
|
72600
72848
|
}
|
|
72601
72849
|
}
|
|
72602
72850
|
) : !error && /* @__PURE__ */ jsx("div", { className: "py-4", children: "Loading..." }) }),
|
|
72603
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start
|
|
72851
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start h-[50px] gap-2 font-serif text-xs", children: [
|
|
72604
72852
|
/* @__PURE__ */ jsx(
|
|
72605
72853
|
"button",
|
|
72606
72854
|
{
|
|
@@ -72610,10 +72858,10 @@ Showing stack trace of: 1. ${fatalErrors[0].message}`;
|
|
|
72610
72858
|
children: /* @__PURE__ */ jsx(ChevronLeft, {})
|
|
72611
72859
|
}
|
|
72612
72860
|
),
|
|
72613
|
-
/* @__PURE__ */ jsx("
|
|
72861
|
+
/* @__PURE__ */ jsx("span", { children: /* @__PURE__ */ jsx(Path, { children: selectedPath || "/" }) })
|
|
72614
72862
|
] }),
|
|
72615
72863
|
/* @__PURE__ */ jsxs("div", { className: "p-4", children: [
|
|
72616
|
-
error && /* @__PURE__ */ jsxs("div", { className: "text-lg text-destructive-foreground", children: [
|
|
72864
|
+
error && /* @__PURE__ */ jsxs("div", { className: "p-4 text-lg bg-destructive text-destructive-foreground max-w-xl", children: [
|
|
72617
72865
|
"ERROR: ",
|
|
72618
72866
|
error
|
|
72619
72867
|
] }),
|
|
@@ -72682,7 +72930,7 @@ function AnyVal({
|
|
|
72682
72930
|
initOnSubmit,
|
|
72683
72931
|
top
|
|
72684
72932
|
}) {
|
|
72685
|
-
if (
|
|
72933
|
+
if (schema.opt) {
|
|
72686
72934
|
return /* @__PURE__ */ jsx(
|
|
72687
72935
|
ValOptional,
|
|
72688
72936
|
{
|
|
@@ -72695,6 +72943,18 @@ function AnyVal({
|
|
|
72695
72943
|
}
|
|
72696
72944
|
);
|
|
72697
72945
|
}
|
|
72946
|
+
if (source === null) {
|
|
72947
|
+
return /* @__PURE__ */ jsx(
|
|
72948
|
+
ValDefaultOf,
|
|
72949
|
+
{
|
|
72950
|
+
source,
|
|
72951
|
+
schema,
|
|
72952
|
+
path,
|
|
72953
|
+
setSelectedPath,
|
|
72954
|
+
initOnSubmit
|
|
72955
|
+
}
|
|
72956
|
+
);
|
|
72957
|
+
}
|
|
72698
72958
|
if (schema.type === "object") {
|
|
72699
72959
|
if (typeof source !== "object" || isJsonArray(source)) {
|
|
72700
72960
|
return /* @__PURE__ */ jsxs("div", { children: [
|
|
@@ -72720,15 +72980,18 @@ function AnyVal({
|
|
|
72720
72980
|
typeof source
|
|
72721
72981
|
] });
|
|
72722
72982
|
}
|
|
72723
|
-
return /* @__PURE__ */
|
|
72724
|
-
|
|
72725
|
-
|
|
72726
|
-
|
|
72727
|
-
|
|
72728
|
-
|
|
72729
|
-
|
|
72730
|
-
|
|
72731
|
-
|
|
72983
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
72984
|
+
field ? /* @__PURE__ */ jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsx(Path, { children: path }),
|
|
72985
|
+
/* @__PURE__ */ jsx(
|
|
72986
|
+
ValList,
|
|
72987
|
+
{
|
|
72988
|
+
source,
|
|
72989
|
+
path,
|
|
72990
|
+
schema,
|
|
72991
|
+
setSelectedPath
|
|
72992
|
+
}
|
|
72993
|
+
)
|
|
72994
|
+
] });
|
|
72732
72995
|
} else if (schema.type === "record") {
|
|
72733
72996
|
if (typeof source !== "object") {
|
|
72734
72997
|
return /* @__PURE__ */ jsxs("div", { children: [
|
|
@@ -72744,18 +73007,38 @@ function AnyVal({
|
|
|
72744
73007
|
schema.type
|
|
72745
73008
|
] });
|
|
72746
73009
|
}
|
|
72747
|
-
return /* @__PURE__ */
|
|
72748
|
-
|
|
72749
|
-
|
|
72750
|
-
|
|
72751
|
-
|
|
72752
|
-
|
|
72753
|
-
|
|
72754
|
-
|
|
72755
|
-
|
|
73010
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
73011
|
+
field ? /* @__PURE__ */ jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsx(Path, { children: path }),
|
|
73012
|
+
/* @__PURE__ */ jsx(
|
|
73013
|
+
ValRecord,
|
|
73014
|
+
{
|
|
73015
|
+
source,
|
|
73016
|
+
path,
|
|
73017
|
+
schema,
|
|
73018
|
+
setSelectedPath
|
|
73019
|
+
}
|
|
73020
|
+
)
|
|
73021
|
+
] });
|
|
73022
|
+
} else if ((schema == null ? void 0 : schema.type) === "union") {
|
|
73023
|
+
if (schema.key && typeof source === "object" && !isJsonArray(source)) {
|
|
73024
|
+
return /* @__PURE__ */ jsx(
|
|
73025
|
+
ValTaggedUnion,
|
|
73026
|
+
{
|
|
73027
|
+
tag: schema.key,
|
|
73028
|
+
source,
|
|
73029
|
+
path,
|
|
73030
|
+
schema,
|
|
73031
|
+
initOnSubmit,
|
|
73032
|
+
setSelectedPath,
|
|
73033
|
+
top
|
|
73034
|
+
}
|
|
73035
|
+
);
|
|
73036
|
+
}
|
|
73037
|
+
} else if ((schema == null ? void 0 : schema.type) === "literal") {
|
|
73038
|
+
return /* @__PURE__ */ jsx(Fragment$1, {});
|
|
72756
73039
|
}
|
|
72757
73040
|
return /* @__PURE__ */ jsxs("div", { className: "py-2 gap-y-4", children: [
|
|
72758
|
-
/* @__PURE__ */ jsx("div", { className: "text-left", children: field
|
|
73041
|
+
field ? /* @__PURE__ */ jsx("div", { className: "text-left", children: field }) : /* @__PURE__ */ jsx(Path, { children: path }),
|
|
72759
73042
|
/* @__PURE__ */ jsx(
|
|
72760
73043
|
ValFormField,
|
|
72761
73044
|
{
|
|
@@ -72768,6 +73051,97 @@ function AnyVal({
|
|
|
72768
73051
|
)
|
|
72769
73052
|
] });
|
|
72770
73053
|
}
|
|
73054
|
+
function ValTaggedUnion({
|
|
73055
|
+
tag,
|
|
73056
|
+
path,
|
|
73057
|
+
source,
|
|
73058
|
+
schema,
|
|
73059
|
+
setSelectedPath,
|
|
73060
|
+
initOnSubmit,
|
|
73061
|
+
top
|
|
73062
|
+
}) {
|
|
73063
|
+
const [currentKey, setCurrentKey] = useState(null);
|
|
73064
|
+
const [current, setCurrent] = useState(null);
|
|
73065
|
+
const keys = schema.items.flatMap((item) => {
|
|
73066
|
+
if (item.type === "object" && item.items[tag]) {
|
|
73067
|
+
const maybeLiteral = item.items[tag];
|
|
73068
|
+
if (maybeLiteral.type === "literal") {
|
|
73069
|
+
return [maybeLiteral.value];
|
|
73070
|
+
}
|
|
73071
|
+
}
|
|
73072
|
+
return [];
|
|
73073
|
+
});
|
|
73074
|
+
useEffect(() => {
|
|
73075
|
+
if (!currentKey) {
|
|
73076
|
+
const maybeCurrentKey = source == null ? void 0 : source[tag];
|
|
73077
|
+
if (maybeCurrentKey && typeof maybeCurrentKey === "string") {
|
|
73078
|
+
setCurrentKey(maybeCurrentKey);
|
|
73079
|
+
}
|
|
73080
|
+
} else {
|
|
73081
|
+
const sourceKey = source[tag];
|
|
73082
|
+
const unionSchema = schema.items.find((item) => {
|
|
73083
|
+
if (item.type === "object" && item.items[tag]) {
|
|
73084
|
+
const maybeLiteral = item.items[tag];
|
|
73085
|
+
if (maybeLiteral.type === "literal") {
|
|
73086
|
+
return maybeLiteral.value === currentKey;
|
|
73087
|
+
}
|
|
73088
|
+
return false;
|
|
73089
|
+
}
|
|
73090
|
+
});
|
|
73091
|
+
if (sourceKey && typeof sourceKey === "string" && unionSchema) {
|
|
73092
|
+
setCurrent({ source, schema: unionSchema });
|
|
73093
|
+
} else {
|
|
73094
|
+
console.error(
|
|
73095
|
+
"Could not find source or schema of key",
|
|
73096
|
+
currentKey,
|
|
73097
|
+
source,
|
|
73098
|
+
schema
|
|
73099
|
+
);
|
|
73100
|
+
setCurrent(null);
|
|
73101
|
+
}
|
|
73102
|
+
}
|
|
73103
|
+
}, [currentKey, source, schema, keys]);
|
|
73104
|
+
if (keys.length !== schema.items.length) {
|
|
73105
|
+
console.warn("Not all items have tag:", tag);
|
|
73106
|
+
}
|
|
73107
|
+
const loading = false;
|
|
73108
|
+
return /* @__PURE__ */ jsxs(
|
|
73109
|
+
"div",
|
|
73110
|
+
{
|
|
73111
|
+
className: classNames("flex flex-col gap-y-8", {
|
|
73112
|
+
"border-l-2 border-border pl-6": !top
|
|
73113
|
+
}),
|
|
73114
|
+
children: [
|
|
73115
|
+
/* @__PURE__ */ jsxs(
|
|
73116
|
+
Select,
|
|
73117
|
+
{
|
|
73118
|
+
defaultValue: currentKey ?? void 0,
|
|
73119
|
+
disabled: loading,
|
|
73120
|
+
onValueChange: (key) => {
|
|
73121
|
+
setCurrentKey(key);
|
|
73122
|
+
},
|
|
73123
|
+
children: [
|
|
73124
|
+
/* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, { placeholder: "Select type" }) }),
|
|
73125
|
+
/* @__PURE__ */ jsx(SelectContent, { children: keys.map((tag2) => /* @__PURE__ */ jsx(SelectItem, { value: tag2.toString(), children: tag2.toString() }, tag2)) })
|
|
73126
|
+
]
|
|
73127
|
+
}
|
|
73128
|
+
),
|
|
73129
|
+
current && /* @__PURE__ */ jsx(
|
|
73130
|
+
AnyVal,
|
|
73131
|
+
{
|
|
73132
|
+
path,
|
|
73133
|
+
source: current.source,
|
|
73134
|
+
schema: current.schema,
|
|
73135
|
+
setSelectedPath,
|
|
73136
|
+
initOnSubmit,
|
|
73137
|
+
top
|
|
73138
|
+
}
|
|
73139
|
+
)
|
|
73140
|
+
]
|
|
73141
|
+
},
|
|
73142
|
+
path
|
|
73143
|
+
);
|
|
73144
|
+
}
|
|
72771
73145
|
function ValObject({
|
|
72772
73146
|
path,
|
|
72773
73147
|
source,
|
|
@@ -72788,7 +73162,7 @@ function ValObject({
|
|
|
72788
73162
|
AnyVal,
|
|
72789
73163
|
{
|
|
72790
73164
|
path: subPath,
|
|
72791
|
-
source: source[key],
|
|
73165
|
+
source: (source == null ? void 0 : source[key]) ?? null,
|
|
72792
73166
|
schema: property,
|
|
72793
73167
|
setSelectedPath,
|
|
72794
73168
|
field: key,
|
|
@@ -73111,8 +73485,8 @@ function ValOptional({
|
|
|
73111
73485
|
field
|
|
73112
73486
|
}) {
|
|
73113
73487
|
const [enable, setEnable] = useState(source !== null);
|
|
73114
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-
|
|
73115
|
-
|
|
73488
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-y-2", children: [
|
|
73489
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-start gap-x-4", children: [
|
|
73116
73490
|
/* @__PURE__ */ jsx(
|
|
73117
73491
|
Switch,
|
|
73118
73492
|
{
|
|
@@ -73122,16 +73496,8 @@ function ValOptional({
|
|
|
73122
73496
|
}
|
|
73123
73497
|
}
|
|
73124
73498
|
),
|
|
73125
|
-
/* @__PURE__ */ jsx("span", { children: field })
|
|
73126
|
-
] })
|
|
73127
|
-
Switch,
|
|
73128
|
-
{
|
|
73129
|
-
checked: enable,
|
|
73130
|
-
onClick: () => {
|
|
73131
|
-
setEnable((prev) => !prev);
|
|
73132
|
-
}
|
|
73133
|
-
}
|
|
73134
|
-
),
|
|
73499
|
+
/* @__PURE__ */ jsx("span", { children: field ? field : /* @__PURE__ */ jsx(Path, { children: path }) })
|
|
73500
|
+
] }),
|
|
73135
73501
|
enable && /* @__PURE__ */ jsx(
|
|
73136
73502
|
ValDefaultOf,
|
|
73137
73503
|
{
|
|
@@ -73200,61 +73566,62 @@ function ValDefaultOf({
|
|
|
73200
73566
|
function isJsonArray(source) {
|
|
73201
73567
|
return Array.isArray(source);
|
|
73202
73568
|
}
|
|
73203
|
-
function
|
|
73204
|
-
const
|
|
73569
|
+
function dirPaths(paths) {
|
|
73570
|
+
const res = {};
|
|
73205
73571
|
paths.forEach((path) => {
|
|
73206
|
-
const
|
|
73207
|
-
|
|
73208
|
-
|
|
73209
|
-
|
|
73210
|
-
current[part] = {};
|
|
73572
|
+
const allParts = path.split("/").filter((part) => part !== "");
|
|
73573
|
+
if (allParts.length === 1) {
|
|
73574
|
+
if (!res[""]) {
|
|
73575
|
+
res[""] = [];
|
|
73211
73576
|
}
|
|
73212
|
-
|
|
73213
|
-
})
|
|
73577
|
+
res[""].push(allParts[0]);
|
|
73578
|
+
} else if (allParts.length > 1) {
|
|
73579
|
+
const dir = allParts.slice(0, allParts.length - 1).join("/");
|
|
73580
|
+
const file = allParts.slice(-1)[0];
|
|
73581
|
+
if (!res[dir]) {
|
|
73582
|
+
res[dir] = [];
|
|
73583
|
+
}
|
|
73584
|
+
res[dir].push(file);
|
|
73585
|
+
}
|
|
73214
73586
|
});
|
|
73215
|
-
return
|
|
73587
|
+
return res;
|
|
73216
73588
|
}
|
|
73217
73589
|
function PathTree({
|
|
73590
|
+
selectedPath,
|
|
73218
73591
|
paths,
|
|
73219
73592
|
setSelectedModuleId
|
|
73220
73593
|
}) {
|
|
73221
|
-
const tree =
|
|
73222
|
-
|
|
73223
|
-
|
|
73224
|
-
{
|
|
73225
|
-
|
|
73226
|
-
|
|
73227
|
-
|
|
73228
|
-
|
|
73229
|
-
|
|
73230
|
-
|
|
73231
|
-
}
|
|
73232
|
-
|
|
73233
|
-
|
|
73234
|
-
|
|
73235
|
-
|
|
73236
|
-
|
|
73237
|
-
|
|
73238
|
-
|
|
73239
|
-
|
|
73240
|
-
|
|
73241
|
-
|
|
73242
|
-
|
|
73243
|
-
|
|
73244
|
-
|
|
73245
|
-
|
|
73246
|
-
|
|
73247
|
-
|
|
73248
|
-
|
|
73249
|
-
|
|
73250
|
-
|
|
73251
|
-
|
|
73252
|
-
tree: childTree,
|
|
73253
|
-
moduleId: `${moduleId}/${childName}`,
|
|
73254
|
-
setSelectedModuleId
|
|
73255
|
-
}
|
|
73256
|
-
) }, `${moduleId}/${childName}`))
|
|
73257
|
-
] });
|
|
73594
|
+
const tree = dirPaths(paths);
|
|
73595
|
+
const selectedModuleId = selectedPath && Internal.splitModuleIdAndModulePath(selectedPath)[0];
|
|
73596
|
+
return /* @__PURE__ */ jsx("div", { className: "flex flex-col w-full py-2 text-xs", children: Object.entries(tree).map(([dir, files]) => {
|
|
73597
|
+
return /* @__PURE__ */ jsxs("div", { className: "px-4 py-2", children: [
|
|
73598
|
+
dir && /* @__PURE__ */ jsx("div", { className: "font-bold", children: /* @__PURE__ */ jsx(Path, { children: dir }) }),
|
|
73599
|
+
/* @__PURE__ */ jsx(
|
|
73600
|
+
"div",
|
|
73601
|
+
{
|
|
73602
|
+
className: classNames({
|
|
73603
|
+
"flex flex-col py-2 justify-start items-start": !!dir
|
|
73604
|
+
}),
|
|
73605
|
+
children: files.map((file) => {
|
|
73606
|
+
const moduleId = `/${dir}/${file}`;
|
|
73607
|
+
return /* @__PURE__ */ jsx(
|
|
73608
|
+
"button",
|
|
73609
|
+
{
|
|
73610
|
+
className: classNames("block px-2 py-1 rounded-full", {
|
|
73611
|
+
"bg-accent text-accent-foreground": selectedModuleId === moduleId
|
|
73612
|
+
}),
|
|
73613
|
+
onClick: () => {
|
|
73614
|
+
setSelectedModuleId(moduleId);
|
|
73615
|
+
},
|
|
73616
|
+
children: file
|
|
73617
|
+
},
|
|
73618
|
+
moduleId
|
|
73619
|
+
);
|
|
73620
|
+
})
|
|
73621
|
+
}
|
|
73622
|
+
)
|
|
73623
|
+
] }, `/${dir}`);
|
|
73624
|
+
}) });
|
|
73258
73625
|
}
|
|
73259
73626
|
const theme = {
|
|
73260
73627
|
tags: {
|
|
@@ -73446,76 +73813,90 @@ function ValOverlay({
|
|
|
73446
73813
|
windowSize,
|
|
73447
73814
|
setWindowSize
|
|
73448
73815
|
},
|
|
73449
|
-
children: /* @__PURE__ */ jsxs(
|
|
73450
|
-
|
|
73451
|
-
|
|
73452
|
-
|
|
73453
|
-
|
|
73454
|
-
|
|
73455
|
-
|
|
73456
|
-
|
|
73457
|
-
|
|
73458
|
-
|
|
73459
|
-
|
|
73460
|
-
|
|
73461
|
-
|
|
73462
|
-
|
|
73463
|
-
|
|
73464
|
-
setHoverTarget,
|
|
73465
|
-
setEditMode,
|
|
73466
|
-
setWindowTarget
|
|
73467
|
-
}
|
|
73468
|
-
),
|
|
73469
|
-
editMode === "window" && windowTarget && /* @__PURE__ */ jsx(
|
|
73470
|
-
ValWindow,
|
|
73471
|
-
{
|
|
73472
|
-
onClose: () => {
|
|
73473
|
-
setWindowTarget(null);
|
|
73474
|
-
setEditMode("hover");
|
|
73475
|
-
},
|
|
73476
|
-
children: /* @__PURE__ */ jsx(
|
|
73477
|
-
"div",
|
|
73816
|
+
children: /* @__PURE__ */ jsxs(
|
|
73817
|
+
"div",
|
|
73818
|
+
{
|
|
73819
|
+
"data-mode": theme2,
|
|
73820
|
+
className: "font-serif antialiased",
|
|
73821
|
+
style: {
|
|
73822
|
+
position: "fixed",
|
|
73823
|
+
top: 0,
|
|
73824
|
+
left: 0,
|
|
73825
|
+
zIndex: 8999
|
|
73826
|
+
// 1 less than the NextJS error z-index: 9000
|
|
73827
|
+
},
|
|
73828
|
+
children: [
|
|
73829
|
+
/* @__PURE__ */ jsx("div", { className: "fixed -translate-y-1/2 right-4 top-1/2 z-overlay", children: /* @__PURE__ */ jsx(
|
|
73830
|
+
ValMenu,
|
|
73478
73831
|
{
|
|
73479
|
-
|
|
73480
|
-
|
|
73481
|
-
|
|
73832
|
+
direction: "vertical",
|
|
73833
|
+
api,
|
|
73834
|
+
patches,
|
|
73835
|
+
onCommit: () => {
|
|
73836
|
+
setPatchResetId((patchResetId) => patchResetId + 1);
|
|
73837
|
+
}
|
|
73838
|
+
}
|
|
73839
|
+
) }),
|
|
73840
|
+
session.status === "success" && session.data.enabled && editMode === "hover" && hoverTarget.path && /* @__PURE__ */ jsx(
|
|
73841
|
+
ValHover,
|
|
73842
|
+
{
|
|
73843
|
+
hoverTarget,
|
|
73844
|
+
setHoverTarget,
|
|
73845
|
+
setEditMode,
|
|
73846
|
+
setWindowTarget
|
|
73847
|
+
}
|
|
73848
|
+
),
|
|
73849
|
+
editMode === "window" && windowTarget && /* @__PURE__ */ jsx(
|
|
73850
|
+
ValWindow,
|
|
73851
|
+
{
|
|
73852
|
+
onClose: () => {
|
|
73853
|
+
setWindowTarget(null);
|
|
73854
|
+
setEditMode("hover");
|
|
73482
73855
|
},
|
|
73483
|
-
children:
|
|
73484
|
-
|
|
73485
|
-
|
|
73486
|
-
|
|
73487
|
-
|
|
73488
|
-
|
|
73489
|
-
] }, path);
|
|
73490
|
-
}
|
|
73491
|
-
const { source, schema } = data.data;
|
|
73492
|
-
if (!source || !schema) {
|
|
73493
|
-
return /* @__PURE__ */ jsxs("div", { children: [
|
|
73494
|
-
"Module: ",
|
|
73495
|
-
path,
|
|
73496
|
-
" is missing source or schema"
|
|
73497
|
-
] });
|
|
73498
|
-
}
|
|
73499
|
-
return /* @__PURE__ */ jsx(
|
|
73500
|
-
AnyVal,
|
|
73501
|
-
{
|
|
73502
|
-
initOnSubmit,
|
|
73503
|
-
path,
|
|
73504
|
-
schema,
|
|
73505
|
-
source,
|
|
73506
|
-
setSelectedPath: () => {
|
|
73507
|
-
},
|
|
73508
|
-
field: path,
|
|
73509
|
-
top: true
|
|
73856
|
+
children: /* @__PURE__ */ jsx(
|
|
73857
|
+
"div",
|
|
73858
|
+
{
|
|
73859
|
+
className: "p-4",
|
|
73860
|
+
style: {
|
|
73861
|
+
maxHeight: windowSize == null ? void 0 : windowSize.innerHeight
|
|
73510
73862
|
},
|
|
73511
|
-
path
|
|
73512
|
-
|
|
73513
|
-
|
|
73863
|
+
children: Object.entries(formData).map(([path, data]) => {
|
|
73864
|
+
if (data.status !== "success") {
|
|
73865
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
73866
|
+
path,
|
|
73867
|
+
": ",
|
|
73868
|
+
data.status
|
|
73869
|
+
] }, path);
|
|
73870
|
+
}
|
|
73871
|
+
const { source, schema } = data.data;
|
|
73872
|
+
if (!source || !schema) {
|
|
73873
|
+
return /* @__PURE__ */ jsxs("div", { children: [
|
|
73874
|
+
"Module: ",
|
|
73875
|
+
path,
|
|
73876
|
+
" is missing source or schema"
|
|
73877
|
+
] });
|
|
73878
|
+
}
|
|
73879
|
+
return /* @__PURE__ */ jsx(
|
|
73880
|
+
AnyVal,
|
|
73881
|
+
{
|
|
73882
|
+
initOnSubmit,
|
|
73883
|
+
path,
|
|
73884
|
+
schema,
|
|
73885
|
+
source,
|
|
73886
|
+
setSelectedPath: () => {
|
|
73887
|
+
},
|
|
73888
|
+
top: true
|
|
73889
|
+
},
|
|
73890
|
+
path
|
|
73891
|
+
);
|
|
73892
|
+
})
|
|
73893
|
+
}
|
|
73894
|
+
)
|
|
73514
73895
|
}
|
|
73515
73896
|
)
|
|
73516
|
-
|
|
73517
|
-
|
|
73518
|
-
|
|
73897
|
+
]
|
|
73898
|
+
}
|
|
73899
|
+
)
|
|
73519
73900
|
}
|
|
73520
73901
|
);
|
|
73521
73902
|
}
|
|
@@ -73582,7 +73963,7 @@ function ValHover({
|
|
|
73582
73963
|
"div",
|
|
73583
73964
|
{
|
|
73584
73965
|
id: "val-hover",
|
|
73585
|
-
className: "fixed border-2 cursor-pointer z-overlay-hover border-
|
|
73966
|
+
className: "fixed border-2 cursor-pointer z-overlay-hover border-accent",
|
|
73586
73967
|
style: {
|
|
73587
73968
|
top: rect == null ? void 0 : rect.top,
|
|
73588
73969
|
left: rect == null ? void 0 : rect.left,
|
|
@@ -73603,7 +73984,7 @@ function ValHover({
|
|
|
73603
73984
|
children: /* @__PURE__ */ jsx("div", { className: "flex items-center justify-end w-full text-xs", children: /* @__PURE__ */ jsx(
|
|
73604
73985
|
"div",
|
|
73605
73986
|
{
|
|
73606
|
-
className: "flex items-center justify-center px-3 py-1 text-
|
|
73987
|
+
className: "flex items-center justify-center px-3 py-1 text-accent-foreground bg-accent border-l-2 border-b-2 border-accent",
|
|
73607
73988
|
style: {
|
|
73608
73989
|
maxHeight: (rect == null ? void 0 : rect.height) && rect.height - 4,
|
|
73609
73990
|
fontSize: (rect == null ? void 0 : rect.height) && rect.height <= 16 ? rect.height - 4 : void 0
|
|
@@ -73647,9 +74028,19 @@ function useHoverTarget(editMode) {
|
|
|
73647
74028
|
setTargetRect(targetElement.getBoundingClientRect());
|
|
73648
74029
|
}
|
|
73649
74030
|
};
|
|
74031
|
+
const observer = new ResizeObserver(() => {
|
|
74032
|
+
if (targetElement) {
|
|
74033
|
+
setTargetRect(targetElement.getBoundingClientRect());
|
|
74034
|
+
}
|
|
74035
|
+
});
|
|
74036
|
+
const valUIElement = document.getElementById("val-ui");
|
|
74037
|
+
if (targetElement && valUIElement) {
|
|
74038
|
+
observer.observe(valUIElement);
|
|
74039
|
+
}
|
|
73650
74040
|
document.addEventListener("scroll", scrollListener, { passive: true });
|
|
73651
74041
|
return () => {
|
|
73652
74042
|
document.removeEventListener("scroll", scrollListener);
|
|
74043
|
+
observer.disconnect();
|
|
73653
74044
|
};
|
|
73654
74045
|
}, [targetElement]);
|
|
73655
74046
|
return [
|
|
@@ -73696,7 +74087,7 @@ function useInitEditMode() {
|
|
|
73696
74087
|
}, []);
|
|
73697
74088
|
return [editMode, setEditMode];
|
|
73698
74089
|
}
|
|
73699
|
-
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";
|
|
74090
|
+
const styleCss = "/*\n Need to explicitly set config path, otherwise it may fail to resolve when\n built from outside packages/ui.\n*/\n\n/*\n ! tailwindcss v3.3.5 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box; /* 1 */\n border-width: 0; /* 2 */\n border-style: solid; /* 2 */\n border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n line-height: 1.5; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n -moz-tab-size: 4; /* 3 */\n -o-tab-size: 4;\n tab-size: 4; /* 3 */\n font-family: 'Roboto', sans-serif; /* 4 */\n font-feature-settings: normal; /* 5 */\n font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0; /* 1 */\n line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0; /* 1 */\n color: inherit; /* 2 */\n border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0; /* 1 */\n border-color: inherit; /* 2 */\n border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-feature-settings: inherit; /* 1 */\n font-variation-settings: inherit; /* 1 */\n font-size: 100%; /* 1 */\n font-weight: inherit; /* 1 */\n line-height: inherit; /* 1 */\n color: inherit; /* 1 */\n margin: 0; /* 2 */\n padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n -webkit-appearance: button; /* 1 */\n background-color: transparent; /* 2 */\n background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1; /* 1 */\n color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block; /* 1 */\n vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden] {\n display: none;\n}\n\n/* :host for use with Shadow DOM, copied from the TailwindCSS prelude */\n\n:host {\n --background: 0 0% 100%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 0 0% 57.3%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 273 60% 51%;\n --accent-foreground: 110 10% 94%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 214.3 31.8% 91.4%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n }\n\n:root {\n --background: 110 10% 94%;\n --foreground: 222.2 84% 4.9%;\n\n --card: 0 0% 100%;\n --card-foreground: 222.2 84% 4.9%;\n\n --popover: 0 0% 100%;\n --popover-foreground: 222.2 84% 4.9%;\n\n --primary: 222.2 47.4% 11.2%;\n --primary-foreground: 210 40% 98%;\n\n --secondary: 210 40% 96.1%;\n --secondary-foreground: 222.2 47.4% 11.2%;\n\n --muted: 0 0% 57.3%;\n --muted-foreground: 215.4 16.3% 46.9%;\n\n --accent: 273 60% 51%;\n --accent-foreground: 110 10% 94%;\n\n --destructive: 0 84.2% 60.2%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 214.3 31.8% 91.4%;\n --input: 212.7 9.1% 76.3%;\n --ring: 222.2 84% 4.9%;\n\n --radius: 0.5rem;\n }\n\n/* dark theme */\n\n*[data-mode=\"dark\"] {\n --background: 0 0% 4%;\n --foreground: 210 40% 98%;\n\n --card: 222.2 84% 4.9%;\n --card-foreground: 210 40% 98%;\n\n --popover: 222.2 84% 4.9%;\n --popover-foreground: 210 40% 98%;\n\n --primary: 210 40% 98%;\n --primary-foreground: 222.2 47.4% 11.2%;\n\n --secondary: 217.2 32.6% 17.5%;\n --secondary-foreground: 210 40% 98%;\n\n --muted: 178 23% 76%;\n --muted-foreground: 215 20.2% 65.1%;\n\n --accent: 159 60% 51%;\n --accent-foreground: 210 40% 98%;\n\n --destructive: 0 62.8% 30.6%;\n --destructive-foreground: 210 40% 98%;\n\n --border: 217.2 32.6% 17.5%;\n --input: 217.2 32.6% 17.5%;\n --ring: 212.7 26.8% 83.9%;\n }\n\n* {\n border-color: hsl(var(--border));\n}\n\nbody {\n background-color: hsl(var(--background));\n color: hsl(var(--foreground));\n}\n\n*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border-width: 0;\n}\n.pointer-events-none {\n pointer-events: none;\n}\n.invisible {\n visibility: hidden;\n}\n.static {\n position: static;\n}\n.fixed {\n position: fixed;\n}\n.absolute {\n position: absolute;\n}\n.relative {\n position: relative;\n}\n.sticky {\n position: sticky;\n}\n.inset-0 {\n inset: 0px;\n}\n.inset-y-0 {\n top: 0px;\n bottom: 0px;\n}\n.-left-2 {\n left: -0.5rem;\n}\n.-right-\\[10px\\] {\n right: -10px;\n}\n.-top-\\[10px\\] {\n top: -10px;\n}\n.-top-\\[4px\\] {\n top: -4px;\n}\n.bottom-0 {\n bottom: 0px;\n}\n.left-0 {\n left: 0px;\n}\n.left-1 {\n left: 0.25rem;\n}\n.left-2 {\n left: 0.5rem;\n}\n.left-\\[50\\%\\] {\n left: 50%;\n}\n.right-0 {\n right: 0px;\n}\n.right-1 {\n right: 0.25rem;\n}\n.right-4 {\n right: 1rem;\n}\n.right-\\[16px\\] {\n right: 16px;\n}\n.top-0 {\n top: 0px;\n}\n.top-1\\/2 {\n top: 50%;\n}\n.top-4 {\n top: 1rem;\n}\n.top-\\[50\\%\\] {\n top: 50%;\n}\n.z-50 {\n z-index: 50;\n}\n.z-\\[1\\] {\n z-index: 1;\n}\n.z-\\[5\\] {\n z-index: 5;\n}\n.z-overlay {\n z-index: 4;\n}\n.m-4 {\n margin: 1rem;\n}\n.-mx-1 {\n margin-left: -0.25rem;\n margin-right: -0.25rem;\n}\n.-my-2 {\n margin-top: -0.5rem;\n margin-bottom: -0.5rem;\n}\n.-my-\\[100px\\] {\n margin-top: -100px;\n margin-bottom: -100px;\n}\n.mx-2 {\n margin-left: 0.5rem;\n margin-right: 0.5rem;\n}\n.my-1 {\n margin-top: 0.25rem;\n margin-bottom: 0.25rem;\n}\n.mb-4 {\n margin-bottom: 1rem;\n}\n.ml-0 {\n margin-left: 0px;\n}\n.ml-2 {\n margin-left: 0.5rem;\n}\n.ml-4 {\n margin-left: 1rem;\n}\n.ml-\\[20px\\] {\n margin-left: 20px;\n}\n.ml-auto {\n margin-left: auto;\n}\n.mr-2 {\n margin-right: 0.5rem;\n}\n.mt-2 {\n margin-top: 0.5rem;\n}\n.block {\n display: block;\n}\n.inline {\n display: inline;\n}\n.flex {\n display: flex;\n}\n.inline-flex {\n display: inline-flex;\n}\n.table {\n display: table;\n}\n.grid {\n display: grid;\n}\n.hidden {\n display: none;\n}\n.aspect-square {\n aspect-ratio: 1 / 1;\n}\n.h-10 {\n height: 2.5rem;\n}\n.h-11 {\n height: 2.75rem;\n}\n.h-2 {\n height: 0.5rem;\n}\n.h-2\\.5 {\n height: 0.625rem;\n}\n.h-3 {\n height: 0.75rem;\n}\n.h-3\\.5 {\n height: 0.875rem;\n}\n.h-4 {\n height: 1rem;\n}\n.h-7 {\n height: 1.75rem;\n}\n.h-9 {\n height: 2.25rem;\n}\n.h-\\[100\\] {\n height: 100;\n}\n.h-\\[12px\\] {\n height: 12px;\n}\n.h-\\[14px\\] {\n height: 14px;\n}\n.h-\\[18px\\] {\n height: 18px;\n}\n.h-\\[1px\\] {\n height: 1px;\n}\n.h-\\[20px\\] {\n height: 20px;\n}\n.h-\\[22px\\] {\n height: 22px;\n}\n.h-\\[24px\\] {\n height: 24px;\n}\n.h-\\[32px\\] {\n height: 32px;\n}\n.h-\\[50px\\] {\n height: 50px;\n}\n.h-\\[75px\\] {\n height: 75px;\n}\n.h-\\[9px\\] {\n height: 9px;\n}\n.h-\\[var\\(--radix-select-trigger-height\\)\\] {\n height: var(--radix-select-trigger-height);\n}\n.h-full {\n height: 100%;\n}\n.h-px {\n height: 1px;\n}\n.h-screen {\n height: 100vh;\n}\n.max-h-\\[300px\\] {\n max-height: 300px;\n}\n.min-h-\\[200px\\] {\n min-height: 200px;\n}\n.min-h-\\[300px\\] {\n min-height: 300px;\n}\n.min-h-screen {\n min-height: 100vh;\n}\n.w-0 {\n width: 0px;\n}\n.w-1\\/3 {\n width: 33.333333%;\n}\n.w-10 {\n width: 2.5rem;\n}\n.w-2 {\n width: 0.5rem;\n}\n.w-2\\.5 {\n width: 0.625rem;\n}\n.w-3 {\n width: 0.75rem;\n}\n.w-3\\.5 {\n width: 0.875rem;\n}\n.w-4 {\n width: 1rem;\n}\n.w-5 {\n width: 1.25rem;\n}\n.w-7 {\n width: 1.75rem;\n}\n.w-72 {\n width: 18rem;\n}\n.w-9 {\n width: 2.25rem;\n}\n.w-\\[12px\\] {\n width: 12px;\n}\n.w-\\[14px\\] {\n width: 14px;\n}\n.w-\\[1px\\] {\n width: 1px;\n}\n.w-\\[20px\\] {\n width: 20px;\n}\n.w-\\[24px\\] {\n width: 24px;\n}\n.w-\\[300px\\] {\n width: 300px;\n}\n.w-\\[32px\\] {\n width: 32px;\n}\n.w-\\[44px\\] {\n width: 44px;\n}\n.w-\\[9px\\] {\n width: 9px;\n}\n.w-fit {\n width: -moz-fit-content;\n width: fit-content;\n}\n.w-full {\n width: 100%;\n}\n.w-screen {\n width: 100vw;\n}\n.min-w-0 {\n min-width: 0px;\n}\n.min-w-\\[320px\\] {\n min-width: 320px;\n}\n.min-w-\\[500px\\] {\n min-width: 500px;\n}\n.min-w-\\[8rem\\] {\n min-width: 8rem;\n}\n.min-w-\\[var\\(--radix-select-trigger-width\\)\\] {\n min-width: var(--radix-select-trigger-width);\n}\n.max-w-4xl {\n max-width: 56rem;\n}\n.max-w-\\[1000px\\] {\n max-width: 1000px;\n}\n.max-w-\\[10vw\\] {\n max-width: 10vw;\n}\n.max-w-\\[300px\\] {\n max-width: 300px;\n}\n.max-w-\\[90vw\\] {\n max-width: 90vw;\n}\n.max-w-lg {\n max-width: 32rem;\n}\n.max-w-xl {\n max-width: 36rem;\n}\n.flex-1 {\n flex: 1 1 0%;\n}\n.flex-auto {\n flex: 1 1 auto;\n}\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n.shrink-0 {\n flex-shrink: 0;\n}\n.flex-grow {\n flex-grow: 1;\n}\n.border-collapse {\n border-collapse: collapse;\n}\n.-translate-y-1\\/2 {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-x-\\[-50\\%\\] {\n --tw-translate-x: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.translate-y-\\[-50\\%\\] {\n --tw-translate-y: -50%;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.-rotate-90 {\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-90 {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[-90deg\\] {\n --tw-rotate: -90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.rotate-\\[90deg\\] {\n --tw-rotate: 90deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.cursor-col-resize {\n cursor: col-resize;\n}\n.cursor-default {\n cursor: default;\n}\n.cursor-grab {\n cursor: grab;\n}\n.cursor-pointer {\n cursor: pointer;\n}\n.cursor-se-resize {\n cursor: se-resize;\n}\n.touch-none {\n touch-action: none;\n}\n.select-none {\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n.resize-none {\n resize: none;\n}\n.resize {\n resize: both;\n}\n.list-decimal {\n list-style-type: decimal;\n}\n.list-disc {\n list-style-type: disc;\n}\n.grid-cols-\\[min-content_1fr\\] {\n grid-template-columns: min-content 1fr;\n}\n.grid-rows-\\[1fr\\2c _min-content\\] {\n grid-template-rows: 1fr min-content;\n}\n.flex-row {\n flex-direction: row;\n}\n.flex-col {\n flex-direction: column;\n}\n.flex-col-reverse {\n flex-direction: column-reverse;\n}\n.items-start {\n align-items: flex-start;\n}\n.items-center {\n align-items: center;\n}\n.justify-start {\n justify-content: flex-start;\n}\n.justify-end {\n justify-content: flex-end;\n}\n.justify-center {\n justify-content: center;\n}\n.justify-between {\n justify-content: space-between;\n}\n.gap-1 {\n gap: 0.25rem;\n}\n.gap-2 {\n gap: 0.5rem;\n}\n.gap-3 {\n gap: 0.75rem;\n}\n.gap-4 {\n gap: 1rem;\n}\n.gap-5 {\n gap: 1.25rem;\n}\n.gap-\\[0\\.5em\\] {\n gap: 0.5em;\n}\n.gap-\\[36px\\] {\n gap: 36px;\n}\n.gap-x-4 {\n -moz-column-gap: 1rem;\n column-gap: 1rem;\n}\n.gap-y-1 {\n row-gap: 0.25rem;\n}\n.gap-y-2 {\n row-gap: 0.5rem;\n}\n.gap-y-4 {\n row-gap: 1rem;\n}\n.gap-y-8 {\n row-gap: 2rem;\n}\n.space-x-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.25rem * var(--tw-space-x-reverse));\n margin-left: calc(0.25rem * calc(1 - var(--tw-space-x-reverse)));\n}\n.space-y-1 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.25rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.25rem * var(--tw-space-y-reverse));\n}\n.space-y-1\\.5 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.375rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.375rem * var(--tw-space-y-reverse));\n}\n.space-y-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0.5rem * var(--tw-space-y-reverse));\n}\n.space-y-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(1rem * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(1rem * var(--tw-space-y-reverse));\n}\n.overflow-auto {\n overflow: auto;\n}\n.overflow-hidden {\n overflow: hidden;\n}\n.overflow-clip {\n overflow: clip;\n}\n.overflow-scroll {\n overflow: scroll;\n}\n.overflow-y-auto {\n overflow-y: auto;\n}\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n.overflow-y-scroll {\n overflow-y: scroll;\n}\n.truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.whitespace-nowrap {\n white-space: nowrap;\n}\n.rounded {\n border-radius: 0.25rem;\n}\n.rounded-\\[inherit\\] {\n border-radius: inherit;\n}\n.rounded-full {\n border-radius: 9999px;\n}\n.rounded-lg {\n border-radius: var(--radius);\n}\n.rounded-md {\n border-radius: calc(var(--radius) - 2px);\n}\n.rounded-sm {\n border-radius: calc(var(--radius) - 4px);\n}\n.rounded-b-none {\n border-bottom-right-radius: 0px;\n border-bottom-left-radius: 0px;\n}\n.rounded-b-sm {\n border-bottom-right-radius: calc(var(--radius) - 4px);\n border-bottom-left-radius: calc(var(--radius) - 4px);\n}\n.rounded-t-none {\n border-top-left-radius: 0px;\n border-top-right-radius: 0px;\n}\n.border {\n border-width: 1px;\n}\n.border-2 {\n border-width: 2px;\n}\n.border-\\[2px\\] {\n border-width: 2px;\n}\n.border-x {\n border-left-width: 1px;\n border-right-width: 1px;\n}\n.border-y {\n border-top-width: 1px;\n border-bottom-width: 1px;\n}\n.border-b {\n border-bottom-width: 1px;\n}\n.border-b-0 {\n border-bottom-width: 0px;\n}\n.border-b-2 {\n border-bottom-width: 2px;\n}\n.border-l {\n border-left-width: 1px;\n}\n.border-l-2 {\n border-left-width: 2px;\n}\n.border-r {\n border-right-width: 1px;\n}\n.border-t {\n border-top-width: 1px;\n}\n.border-t-0 {\n border-top-width: 0px;\n}\n.border-accent {\n border-color: hsl(var(--accent));\n}\n.border-border {\n border-color: hsl(var(--border));\n}\n.border-gray-400 {\n --tw-border-opacity: 1;\n border-color: rgb(156 163 175 / var(--tw-border-opacity));\n}\n.border-input {\n border-color: hsl(var(--input));\n}\n.border-primary {\n border-color: hsl(var(--primary));\n}\n.border-transparent {\n border-color: transparent;\n}\n.border-l-transparent {\n border-left-color: transparent;\n}\n.border-t-transparent {\n border-top-color: transparent;\n}\n.bg-accent {\n background-color: hsl(var(--accent));\n}\n.bg-background {\n background-color: hsl(var(--background));\n}\n.bg-background\\/80 {\n background-color: hsl(var(--background) / 0.8);\n}\n.bg-border {\n background-color: hsl(var(--border));\n}\n.bg-card {\n background-color: hsl(var(--card));\n}\n.bg-card-foreground {\n background-color: hsl(var(--card-foreground));\n}\n.bg-destructive {\n background-color: hsl(var(--destructive));\n}\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity));\n}\n.bg-gray-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(107 114 128 / var(--tw-bg-opacity));\n}\n.bg-muted {\n background-color: hsl(var(--muted));\n}\n.bg-popover {\n background-color: hsl(var(--popover));\n}\n.bg-primary {\n background-color: hsl(var(--primary));\n}\n.bg-red-500 {\n --tw-bg-opacity: 1;\n background-color: rgb(239 68 68 / var(--tw-bg-opacity));\n}\n.bg-secondary {\n background-color: hsl(var(--secondary));\n}\n.bg-transparent {\n background-color: transparent;\n}\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.bg-gradient-to-b {\n background-image: linear-gradient(to bottom, var(--tw-gradient-stops));\n}\n.bg-gradient-to-br {\n background-image: linear-gradient(to bottom right, var(--tw-gradient-stops));\n}\n.from-background\\/90 {\n --tw-gradient-from: hsl(var(--background) / 0.9) var(--tw-gradient-from-position);\n --tw-gradient-to: hsl(var(--background) / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-card {\n --tw-gradient-from: hsl(var(--card)) var(--tw-gradient-from-position);\n --tw-gradient-to: hsl(var(--card) / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-transparent {\n --tw-gradient-from: transparent var(--tw-gradient-from-position);\n --tw-gradient-to: rgb(0 0 0 / 0) var(--tw-gradient-to-position);\n --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to);\n}\n.from-40\\% {\n --tw-gradient-from-position: 40%;\n}\n.from-50\\% {\n --tw-gradient-from-position: 50%;\n}\n.to-background {\n --tw-gradient-to: hsl(var(--background)) var(--tw-gradient-to-position);\n}\n.fill-current {\n fill: currentColor;\n}\n.fill-white {\n fill: #fff;\n}\n.stroke-\\[2px\\] {\n stroke-width: 2px;\n}\n.stroke-\\[3px\\] {\n stroke-width: 3px;\n}\n.object-contain {\n -o-object-fit: contain;\n object-fit: contain;\n}\n.p-0 {\n padding: 0px;\n}\n.p-1 {\n padding: 0.25rem;\n}\n.p-10 {\n padding: 2.5rem;\n}\n.p-2 {\n padding: 0.5rem;\n}\n.p-3 {\n padding: 0.75rem;\n}\n.p-4 {\n padding: 1rem;\n}\n.p-6 {\n padding: 1.5rem;\n}\n.p-\\[1px\\] {\n padding: 1px;\n}\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.px-2\\.5 {\n padding-left: 0.625rem;\n padding-right: 0.625rem;\n}\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n.px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n}\n.px-5 {\n padding-left: 1.25rem;\n padding-right: 1.25rem;\n}\n.px-8 {\n padding-left: 2rem;\n padding-right: 2rem;\n}\n.px-\\[24px\\] {\n padding-left: 24px;\n padding-right: 24px;\n}\n.px-\\[2px\\] {\n padding-left: 2px;\n padding-right: 2px;\n}\n.py-1 {\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n}\n.py-1\\.5 {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n.py-6 {\n padding-top: 1.5rem;\n padding-bottom: 1.5rem;\n}\n.py-7 {\n padding-top: 1.75rem;\n padding-bottom: 1.75rem;\n}\n.py-\\[2px\\] {\n padding-top: 2px;\n padding-bottom: 2px;\n}\n.pb-0 {\n padding-bottom: 0px;\n}\n.pb-20 {\n padding-bottom: 5rem;\n}\n.pb-4 {\n padding-bottom: 1rem;\n}\n.pl-0 {\n padding-left: 0px;\n}\n.pl-6 {\n padding-left: 1.5rem;\n}\n.pl-8 {\n padding-left: 2rem;\n}\n.pl-\\[300px\\] {\n padding-left: 300px;\n}\n.pr-2 {\n padding-right: 0.5rem;\n}\n.pt-0 {\n padding-top: 0px;\n}\n.pt-1 {\n padding-top: 0.25rem;\n}\n.pt-2 {\n padding-top: 0.5rem;\n}\n.pt-4 {\n padding-top: 1rem;\n}\n.text-left {\n text-align: left;\n}\n.text-center {\n text-align: center;\n}\n.text-start {\n text-align: start;\n}\n.font-sans {\n font-family: 'Roboto', sans-serif;\n}\n.font-serif {\n font-family: 'Space Mono', monospace;\n}\n.text-2xl {\n font-size: 1.5rem;\n line-height: 2rem;\n}\n.text-3xl {\n font-size: 1.875rem;\n line-height: 2.25rem;\n}\n.text-4xl {\n font-size: 2.25rem;\n line-height: 2.5rem;\n}\n.text-\\[0\\.8rem\\] {\n font-size: 0.8rem;\n}\n.text-\\[12px\\] {\n font-size: 12px;\n}\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.text-xl {\n font-size: 1.25rem;\n line-height: 1.75rem;\n}\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.font-\\[12px\\] {\n font-weight: 12px;\n}\n.font-\\[400\\] {\n font-weight: 400;\n}\n.font-\\[500\\] {\n font-weight: 500;\n}\n.font-\\[550\\] {\n font-weight: 550;\n}\n.font-bold {\n font-weight: 700;\n}\n.font-extrabold {\n font-weight: 800;\n}\n.font-medium {\n font-weight: 500;\n}\n.font-normal {\n font-weight: 400;\n}\n.font-semibold {\n font-weight: 600;\n}\n.uppercase {\n text-transform: uppercase;\n}\n.italic {\n font-style: italic;\n}\n.leading-4 {\n line-height: 1rem;\n}\n.leading-none {\n line-height: 1;\n}\n.tracking-\\[0\\.04em\\] {\n letter-spacing: 0.04em;\n}\n.tracking-tight {\n letter-spacing: -0.025em;\n}\n.tracking-wider {\n letter-spacing: 0.05em;\n}\n.tracking-widest {\n letter-spacing: 0.1em;\n}\n.text-accent {\n color: hsl(var(--accent));\n}\n.text-accent-foreground {\n color: hsl(var(--accent-foreground));\n}\n.text-background {\n color: hsl(var(--background));\n}\n.text-card-foreground {\n color: hsl(var(--card-foreground));\n}\n.text-current {\n color: currentColor;\n}\n.text-destructive {\n color: hsl(var(--destructive));\n}\n.text-destructive-foreground {\n color: hsl(var(--destructive-foreground));\n}\n.text-foreground {\n color: hsl(var(--foreground));\n}\n.text-muted {\n color: hsl(var(--muted));\n}\n.text-muted-foreground {\n color: hsl(var(--muted-foreground));\n}\n.text-popover-foreground {\n color: hsl(var(--popover-foreground));\n}\n.text-primary {\n color: hsl(var(--primary));\n}\n.text-primary-foreground {\n color: hsl(var(--primary-foreground));\n}\n.text-secondary-foreground {\n color: hsl(var(--secondary-foreground));\n}\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.underline {\n text-decoration-line: underline;\n}\n.line-through {\n text-decoration-line: line-through;\n}\n.underline-offset-4 {\n text-underline-offset: 4px;\n}\n.antialiased {\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.opacity-0 {\n opacity: 0;\n}\n.opacity-100 {\n opacity: 1;\n}\n.opacity-50 {\n opacity: 0.5;\n}\n.opacity-60 {\n opacity: 0.6;\n}\n.opacity-70 {\n opacity: 0.7;\n}\n.opacity-75 {\n opacity: 0.75;\n}\n.mix-blend-difference {\n mix-blend-mode: difference;\n}\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-md {\n --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.shadow-sm {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.outline-none {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.outline {\n outline-style: solid;\n}\n.ring-0 {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.ring-offset-background {\n --tw-ring-offset-color: hsl(var(--background));\n}\n.drop-shadow-2xl {\n --tw-drop-shadow: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.drop-shadow-\\[0px_0px_12px_hsl\\(var\\(--accent\\)\\)\\] {\n --tw-drop-shadow: drop-shadow(0px 0px 12px hsl(var(--accent)));\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n.backdrop-blur-lg {\n --tw-backdrop-blur: blur(16px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.backdrop-blur-sm {\n --tw-backdrop-blur: blur(4px);\n -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);\n}\n.transition-all {\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n.duration-150 {\n transition-duration: 150ms;\n}\n.duration-200 {\n transition-duration: 200ms;\n}\n.ease-in-out {\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n@keyframes enter {\n\n from {\n opacity: var(--tw-enter-opacity, 1);\n transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0) scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0));\n }\n}\n@keyframes exit {\n\n to {\n opacity: var(--tw-exit-opacity, 1);\n transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0) scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0));\n }\n}\n.animate-in {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n}\n.fade-in-0 {\n --tw-enter-opacity: 0;\n}\n.zoom-in-95 {\n --tw-enter-scale: .95;\n}\n.duration-150 {\n animation-duration: 150ms;\n}\n.duration-200 {\n animation-duration: 200ms;\n}\n.ease-in-out {\n animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.file\\:border-0::file-selector-button {\n border-width: 0px;\n}\n.file\\:bg-transparent::file-selector-button {\n background-color: transparent;\n}\n.file\\:text-sm::file-selector-button {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n.file\\:font-medium::file-selector-button {\n font-weight: 500;\n}\n.placeholder\\:text-muted-foreground::-moz-placeholder {\n color: hsl(var(--muted-foreground));\n}\n.placeholder\\:text-muted-foreground::placeholder {\n color: hsl(var(--muted-foreground));\n}\n.focus-within\\:relative:focus-within {\n position: relative;\n}\n.hover\\:w-\\[2px\\]:hover {\n width: 2px;\n}\n.hover\\:w-\\[3px\\]:hover {\n width: 3px;\n}\n.hover\\:cursor-pointer:hover {\n cursor: pointer;\n}\n.hover\\:rounded-lg:hover {\n border-radius: var(--radius);\n}\n.hover\\:bg-accent:hover {\n background-color: hsl(var(--accent));\n}\n.hover\\:bg-border:hover {\n background-color: hsl(var(--border));\n}\n.hover\\:bg-destructive\\/90:hover {\n background-color: hsl(var(--destructive) / 0.9);\n}\n.hover\\:bg-muted:hover {\n background-color: hsl(var(--muted));\n}\n.hover\\:bg-primary:hover {\n background-color: hsl(var(--primary));\n}\n.hover\\:bg-primary\\/90:hover {\n background-color: hsl(var(--primary) / 0.9);\n}\n.hover\\:bg-red-700:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(185 28 28 / var(--tw-bg-opacity));\n}\n.hover\\:bg-secondary\\/80:hover {\n background-color: hsl(var(--secondary) / 0.8);\n}\n.hover\\:text-accent-foreground:hover {\n color: hsl(var(--accent-foreground));\n}\n.hover\\:text-muted-foreground:hover {\n color: hsl(var(--muted-foreground));\n}\n.hover\\:text-primary-foreground:hover {\n color: hsl(var(--primary-foreground));\n}\n.hover\\:text-white:hover {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity));\n}\n.hover\\:underline:hover {\n text-decoration-line: underline;\n}\n.hover\\:opacity-100:hover {\n opacity: 1;\n}\n.focus\\:bg-accent:focus {\n background-color: hsl(var(--accent));\n}\n.focus\\:bg-primary:focus {\n background-color: hsl(var(--primary));\n}\n.focus\\:text-accent-foreground:focus {\n color: hsl(var(--accent-foreground));\n}\n.focus\\:text-primary-foreground:focus {\n color: hsl(var(--primary-foreground));\n}\n.focus\\:outline-none:focus {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus\\:ring-2:focus {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus\\:ring-ring:focus {\n --tw-ring-color: hsl(var(--ring));\n}\n.focus\\:ring-offset-2:focus {\n --tw-ring-offset-width: 2px;\n}\n.focus-visible\\:outline-none:focus-visible {\n outline: 2px solid transparent;\n outline-offset: 2px;\n}\n.focus-visible\\:outline-accent:focus-visible {\n outline-color: hsl(var(--accent));\n}\n.focus-visible\\:ring-2:focus-visible {\n --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);\n --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);\n box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);\n}\n.focus-visible\\:ring-ring:focus-visible {\n --tw-ring-color: hsl(var(--ring));\n}\n.focus-visible\\:ring-offset-2:focus-visible {\n --tw-ring-offset-width: 2px;\n}\n.focus-visible\\:ring-offset-background:focus-visible {\n --tw-ring-offset-color: hsl(var(--background));\n}\n.disabled\\:pointer-events-none:disabled {\n pointer-events: none;\n}\n.disabled\\:cursor-not-allowed:disabled {\n cursor: not-allowed;\n}\n.disabled\\:text-background:disabled {\n color: hsl(var(--background));\n}\n.disabled\\:opacity-50:disabled {\n opacity: 0.5;\n}\n.peer:disabled ~ .peer-disabled\\:cursor-not-allowed {\n cursor: not-allowed;\n}\n.peer:disabled ~ .peer-disabled\\:opacity-70 {\n opacity: 0.7;\n}\n.aria-selected\\:bg-accent[aria-selected=\"true\"] {\n background-color: hsl(var(--accent));\n}\n.aria-selected\\:text-accent-foreground[aria-selected=\"true\"] {\n color: hsl(var(--accent-foreground));\n}\n.aria-selected\\:opacity-100[aria-selected=\"true\"] {\n opacity: 1;\n}\n.data-\\[disabled\\]\\:pointer-events-none[data-disabled] {\n pointer-events: none;\n}\n.data-\\[side\\=bottom\\]\\:translate-y-1[data-side=bottom] {\n --tw-translate-y: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[side\\=left\\]\\:-translate-x-1[data-side=left] {\n --tw-translate-x: -0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[side\\=right\\]\\:translate-x-1[data-side=right] {\n --tw-translate-x: 0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[side\\=top\\]\\:-translate-y-1[data-side=top] {\n --tw-translate-y: -0.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[state\\=checked\\]\\:translate-x-5[data-state=checked] {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.data-\\[state\\=unchecked\\]\\:translate-x-0[data-state=unchecked] {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n@keyframes accordion-up {\n\n from {\n height: var(--radix-accordion-content-height);\n }\n\n to {\n height: 0;\n }\n}\n.data-\\[state\\=closed\\]\\:animate-accordion-up[data-state=closed] {\n animation: accordion-up 0.2s ease-out;\n}\n@keyframes accordion-down {\n\n from {\n height: 0;\n }\n\n to {\n height: var(--radix-accordion-content-height);\n }\n}\n.data-\\[state\\=open\\]\\:animate-accordion-down[data-state=open] {\n animation: accordion-down 0.2s ease-out;\n}\n.data-\\[state\\=active\\]\\:bg-background[data-state=active] {\n background-color: hsl(var(--background));\n}\n.data-\\[state\\=checked\\]\\:bg-accent[data-state=checked] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=checked\\]\\:bg-primary[data-state=checked] {\n background-color: hsl(var(--primary));\n}\n.data-\\[state\\=on\\]\\:bg-accent[data-state=on] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=open\\]\\:bg-accent[data-state=open] {\n background-color: hsl(var(--accent));\n}\n.data-\\[state\\=unchecked\\]\\:bg-primary[data-state=unchecked] {\n background-color: hsl(var(--primary));\n}\n.data-\\[state\\=active\\]\\:text-foreground[data-state=active] {\n color: hsl(var(--foreground));\n}\n.data-\\[state\\=checked\\]\\:text-primary-foreground[data-state=checked] {\n color: hsl(var(--primary-foreground));\n}\n.data-\\[state\\=on\\]\\:text-accent-foreground[data-state=on] {\n color: hsl(var(--accent-foreground));\n}\n.data-\\[state\\=open\\]\\:text-muted-foreground[data-state=open] {\n color: hsl(var(--muted-foreground));\n}\n.data-\\[disabled\\]\\:opacity-50[data-disabled] {\n opacity: 0.5;\n}\n.data-\\[state\\=active\\]\\:shadow-sm[data-state=active] {\n --tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);\n --tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n.data-\\[state\\=open\\]\\:animate-in[data-state=open] {\n animation-name: enter;\n animation-duration: 150ms;\n --tw-enter-opacity: initial;\n --tw-enter-scale: initial;\n --tw-enter-rotate: initial;\n --tw-enter-translate-x: initial;\n --tw-enter-translate-y: initial;\n}\n.data-\\[state\\=closed\\]\\:animate-out[data-state=closed] {\n animation-name: exit;\n animation-duration: 150ms;\n --tw-exit-opacity: initial;\n --tw-exit-scale: initial;\n --tw-exit-rotate: initial;\n --tw-exit-translate-x: initial;\n --tw-exit-translate-y: initial;\n}\n.data-\\[state\\=closed\\]\\:fade-out-0[data-state=closed] {\n --tw-exit-opacity: 0;\n}\n.data-\\[state\\=open\\]\\:fade-in-0[data-state=open] {\n --tw-enter-opacity: 0;\n}\n.data-\\[state\\=closed\\]\\:zoom-out-95[data-state=closed] {\n --tw-exit-scale: .95;\n}\n.data-\\[state\\=open\\]\\:zoom-in-95[data-state=open] {\n --tw-enter-scale: .95;\n}\n.data-\\[side\\=bottom\\]\\:slide-in-from-top-2[data-side=bottom] {\n --tw-enter-translate-y: -0.5rem;\n}\n.data-\\[side\\=left\\]\\:slide-in-from-right-2[data-side=left] {\n --tw-enter-translate-x: 0.5rem;\n}\n.data-\\[side\\=right\\]\\:slide-in-from-left-2[data-side=right] {\n --tw-enter-translate-x: -0.5rem;\n}\n.data-\\[side\\=top\\]\\:slide-in-from-bottom-2[data-side=top] {\n --tw-enter-translate-y: 0.5rem;\n}\n.data-\\[state\\=closed\\]\\:slide-out-to-left-1\\/2[data-state=closed] {\n --tw-exit-translate-x: -50%;\n}\n.data-\\[state\\=closed\\]\\:slide-out-to-top-\\[48\\%\\][data-state=closed] {\n --tw-exit-translate-y: -48%;\n}\n.data-\\[state\\=open\\]\\:slide-in-from-left-1\\/2[data-state=open] {\n --tw-enter-translate-x: -50%;\n}\n.data-\\[state\\=open\\]\\:slide-in-from-top-\\[48\\%\\][data-state=open] {\n --tw-enter-translate-y: -48%;\n}\n:is([data-mode=\"dark\"] .dark\\:border-white) {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity));\n}\n@media (min-width: 640px) {\n\n .sm\\:mt-0 {\n margin-top: 0px;\n }\n\n .sm\\:block {\n display: block;\n }\n\n .sm\\:flex-row {\n flex-direction: row;\n }\n\n .sm\\:justify-end {\n justify-content: flex-end;\n }\n\n .sm\\:space-x-2 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(0.5rem * var(--tw-space-x-reverse));\n margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .sm\\:space-x-4 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-x-reverse: 0;\n margin-right: calc(1rem * var(--tw-space-x-reverse));\n margin-left: calc(1rem * calc(1 - var(--tw-space-x-reverse)));\n }\n\n .sm\\:space-y-0 > :not([hidden]) ~ :not([hidden]) {\n --tw-space-y-reverse: 0;\n margin-top: calc(0px * calc(1 - var(--tw-space-y-reverse)));\n margin-bottom: calc(0px * var(--tw-space-y-reverse));\n }\n\n .sm\\:rounded-lg {\n border-radius: var(--radius);\n }\n\n .sm\\:p-0 {\n padding: 0px;\n }\n\n .sm\\:text-left {\n text-align: left;\n }\n}\n@media (min-width: 768px) {\n\n .md\\:relative {\n position: relative;\n }\n\n .md\\:flex {\n display: flex;\n }\n\n .md\\:hidden {\n display: none;\n }\n\n .md\\:w-\\[300px\\] {\n width: 300px;\n }\n\n .md\\:w-full {\n width: 100%;\n }\n\n .md\\:px-4 {\n padding-left: 1rem;\n padding-right: 1rem;\n }\n\n .md\\:pl-0 {\n padding-left: 0px;\n }\n}\n.\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:bg-accent:has([aria-selected]) {\n background-color: hsl(var(--accent));\n}\n.first\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-l-md:has([aria-selected]):first-child {\n border-top-left-radius: calc(var(--radius) - 2px);\n border-bottom-left-radius: calc(var(--radius) - 2px);\n}\n.last\\:\\[\\&\\:has\\(\\[aria-selected\\]\\)\\]\\:rounded-r-md:has([aria-selected]):last-child {\n border-top-right-radius: calc(var(--radius) - 2px);\n border-bottom-right-radius: calc(var(--radius) - 2px);\n}\n.\\[\\&\\[data-state\\=open\\]\\>svg\\]\\:rotate-180[data-state=open]>svg {\n --tw-rotate: 180deg;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:px-2 [cmdk-group-heading] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:py-1\\.5 [cmdk-group-heading] {\n padding-top: 0.375rem;\n padding-bottom: 0.375rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-xs [cmdk-group-heading] {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:font-medium [cmdk-group-heading] {\n font-weight: 500;\n}\n.\\[\\&_\\[cmdk-group-heading\\]\\]\\:text-muted-foreground [cmdk-group-heading] {\n color: hsl(var(--muted-foreground));\n}\n.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:pt-0 [cmdk-group]:not([hidden]) ~[cmdk-group] {\n padding-top: 0px;\n}\n.\\[\\&_\\[cmdk-group\\]\\]\\:px-2 [cmdk-group] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:h-5 [cmdk-input-wrapper] svg {\n height: 1.25rem;\n}\n.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:w-5 [cmdk-input-wrapper] svg {\n width: 1.25rem;\n}\n.\\[\\&_\\[cmdk-input\\]\\]\\:h-12 [cmdk-input] {\n height: 3rem;\n}\n.\\[\\&_\\[cmdk-item\\]\\]\\:px-2 [cmdk-item] {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n.\\[\\&_\\[cmdk-item\\]\\]\\:py-3 [cmdk-item] {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n.\\[\\&_\\[cmdk-item\\]_svg\\]\\:h-5 [cmdk-item] svg {\n height: 1.25rem;\n}\n.\\[\\&_\\[cmdk-item\\]_svg\\]\\:w-5 [cmdk-item] svg {\n width: 1.25rem;\n}\n";
|
|
73700
74091
|
function Style() {
|
|
73701
74092
|
return /* @__PURE__ */ jsx("style", { children: styleCss });
|
|
73702
74093
|
}
|