@wirechunk/cli 0.0.9 → 0.1.1
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/README.md +75 -0
- package/build/main.js +510 -447
- package/package.json +2 -18
package/build/main.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import EventEmitter from "node:events";
|
|
3
3
|
import require$$1$1, { spawn } from "node:child_process";
|
|
4
|
-
import require$$2$2, { resolve as resolve$1 } from "node:path";
|
|
4
|
+
import require$$2$2, { resolve as resolve$1, dirname } from "node:path";
|
|
5
5
|
import require$$3$1, { readFileSync, existsSync } from "node:fs";
|
|
6
6
|
import process$2 from "node:process";
|
|
7
7
|
import os from "node:os";
|
|
@@ -31,7 +31,7 @@ import require$$0$d from "os";
|
|
|
31
31
|
import require$$1$4 from "tty";
|
|
32
32
|
import require$$0$e from "constants";
|
|
33
33
|
import require$$5$1 from "assert";
|
|
34
|
-
import require$$2$4 from "node:url";
|
|
34
|
+
import require$$2$4, { fileURLToPath } from "node:url";
|
|
35
35
|
import require$$2$3 from "node:string_decoder";
|
|
36
36
|
import require$$0$f from "zlib";
|
|
37
37
|
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
|
@@ -4016,7 +4016,7 @@ const applyStyle = (self2, string2) => {
|
|
|
4016
4016
|
return openAll + string2 + closeAll;
|
|
4017
4017
|
};
|
|
4018
4018
|
Object.defineProperties(createChalk.prototype, styles);
|
|
4019
|
-
const chalk = createChalk();
|
|
4019
|
+
const chalk$1 = createChalk();
|
|
4020
4020
|
createChalk({ level: stderrColor ? stderrColor.level : 0 });
|
|
4021
4021
|
const validatePasswordComplexity = (password) => {
|
|
4022
4022
|
if (password.length < 10) {
|
|
@@ -6314,7 +6314,7 @@ function partial$1(Class, schema, mask) {
|
|
|
6314
6314
|
});
|
|
6315
6315
|
return clone$1(schema, def);
|
|
6316
6316
|
}
|
|
6317
|
-
function required$
|
|
6317
|
+
function required$4(Class, schema, mask) {
|
|
6318
6318
|
const def = mergeDefs$1(schema._zod.def, {
|
|
6319
6319
|
get shape() {
|
|
6320
6320
|
const oldShape = schema._zod.def.shape;
|
|
@@ -6834,7 +6834,7 @@ let Doc$1 = class Doc {
|
|
|
6834
6834
|
return new F(...args, lines.join("\n"));
|
|
6835
6835
|
}
|
|
6836
6836
|
};
|
|
6837
|
-
const version$
|
|
6837
|
+
const version$2 = {
|
|
6838
6838
|
major: 4,
|
|
6839
6839
|
minor: 1,
|
|
6840
6840
|
patch: 13
|
|
@@ -6844,7 +6844,7 @@ const $ZodType$1 = /* @__PURE__ */ $constructor$1("$ZodType", (inst, def) => {
|
|
|
6844
6844
|
inst ?? (inst = {});
|
|
6845
6845
|
inst._zod.def = def;
|
|
6846
6846
|
inst._zod.bag = inst._zod.bag || {};
|
|
6847
|
-
inst._zod.version = version$
|
|
6847
|
+
inst._zod.version = version$2;
|
|
6848
6848
|
const checks = [...inst._zod.def.checks ?? []];
|
|
6849
6849
|
if (inst._zod.traits.has("$ZodCheck")) {
|
|
6850
6850
|
checks.unshift(inst);
|
|
@@ -8055,7 +8055,7 @@ const ZodObject$2 = /* @__PURE__ */ $constructor$1("ZodObject", (inst, def) => {
|
|
|
8055
8055
|
inst.pick = (mask) => pick$1(inst, mask);
|
|
8056
8056
|
inst.omit = (mask) => omit$1(inst, mask);
|
|
8057
8057
|
inst.partial = (...args) => partial$1(ZodOptional$2, inst, args[0]);
|
|
8058
|
-
inst.required = (...args) => required$
|
|
8058
|
+
inst.required = (...args) => required$4(ZodNonOptional$1, inst, args[0]);
|
|
8059
8059
|
});
|
|
8060
8060
|
function object$1(shape, params) {
|
|
8061
8061
|
const def = {
|
|
@@ -14944,7 +14944,7 @@ function requireLib$5() {
|
|
|
14944
14944
|
})(lib$5);
|
|
14945
14945
|
return lib$5;
|
|
14946
14946
|
}
|
|
14947
|
-
var libExports$
|
|
14947
|
+
var libExports$2 = requireLib$5();
|
|
14948
14948
|
var postgresInterval$2;
|
|
14949
14949
|
var hasRequiredPostgresInterval$2;
|
|
14950
14950
|
function requirePostgresInterval$2() {
|
|
@@ -15158,7 +15158,7 @@ function requirePostgresInterval$2() {
|
|
|
15158
15158
|
var postgresIntervalExports = requirePostgresInterval$2();
|
|
15159
15159
|
const parseInterval = /* @__PURE__ */ getDefaultExportFromCjs(postgresIntervalExports);
|
|
15160
15160
|
const intervalParser = (value) => {
|
|
15161
|
-
return value === null ? value : libExports$
|
|
15161
|
+
return value === null ? value : libExports$2.toSeconds(libExports$2.parse(parseInterval(value).toISOString()));
|
|
15162
15162
|
};
|
|
15163
15163
|
const createIntervalTypeParser = () => {
|
|
15164
15164
|
return {
|
|
@@ -20856,8 +20856,8 @@ function requireLib$3() {
|
|
|
20856
20856
|
})(lib$4);
|
|
20857
20857
|
return lib$4.exports;
|
|
20858
20858
|
}
|
|
20859
|
-
var libExports = requireLib$3();
|
|
20860
|
-
const pg = /* @__PURE__ */ getDefaultExportFromCjs(libExports);
|
|
20859
|
+
var libExports$1 = requireLib$3();
|
|
20860
|
+
const pg = /* @__PURE__ */ getDefaultExportFromCjs(libExports$1);
|
|
20861
20861
|
const Client = pg.Client;
|
|
20862
20862
|
pg.Pool;
|
|
20863
20863
|
pg.Connection;
|
|
@@ -23360,7 +23360,7 @@ function partial(Class, schema, mask) {
|
|
|
23360
23360
|
});
|
|
23361
23361
|
return clone(schema, def);
|
|
23362
23362
|
}
|
|
23363
|
-
function required$
|
|
23363
|
+
function required$3(Class, schema, mask) {
|
|
23364
23364
|
const def = mergeDefs(schema._zod.def, {
|
|
23365
23365
|
get shape() {
|
|
23366
23366
|
const oldShape = schema._zod.def.shape;
|
|
@@ -23897,7 +23897,7 @@ class Doc2 {
|
|
|
23897
23897
|
return new F(...args, lines.join("\n"));
|
|
23898
23898
|
}
|
|
23899
23899
|
}
|
|
23900
|
-
const version = {
|
|
23900
|
+
const version$1 = {
|
|
23901
23901
|
major: 4,
|
|
23902
23902
|
minor: 1,
|
|
23903
23903
|
patch: 13
|
|
@@ -23907,7 +23907,7 @@ const $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
|
|
|
23907
23907
|
inst ?? (inst = {});
|
|
23908
23908
|
inst._zod.def = def;
|
|
23909
23909
|
inst._zod.bag = inst._zod.bag || {};
|
|
23910
|
-
inst._zod.version = version;
|
|
23910
|
+
inst._zod.version = version$1;
|
|
23911
23911
|
const checks = [...inst._zod.def.checks ?? []];
|
|
23912
23912
|
if (inst._zod.traits.has("$ZodCheck")) {
|
|
23913
23913
|
checks.unshift(inst);
|
|
@@ -25778,7 +25778,7 @@ const ZodObject2 = /* @__PURE__ */ $constructor("ZodObject", (inst, def) => {
|
|
|
25778
25778
|
inst.pick = (mask) => pick(inst, mask);
|
|
25779
25779
|
inst.omit = (mask) => omit(inst, mask);
|
|
25780
25780
|
inst.partial = (...args) => partial(ZodOptional2, inst, args[0]);
|
|
25781
|
-
inst.required = (...args) => required$
|
|
25781
|
+
inst.required = (...args) => required$3(ZodNonOptional, inst, args[0]);
|
|
25782
25782
|
});
|
|
25783
25783
|
function object(shape, params) {
|
|
25784
25784
|
const def = {
|
|
@@ -26007,9 +26007,11 @@ function superRefine(fn) {
|
|
|
26007
26007
|
const localhostRegex1 = /localhost:\d{2,4}$/;
|
|
26008
26008
|
const localhostRegex2 = /localhost$/;
|
|
26009
26009
|
const isLocalhost = (domain) => localhostRegex1.test(domain) || localhostRegex2.test(domain);
|
|
26010
|
+
const envModeSymbol = Symbol("envMode");
|
|
26011
|
+
const mainEnvFilePathSymbol = Symbol("mainEnvFilePath");
|
|
26012
|
+
const mainEnvFileExistsSymbol = Symbol("mainEnvFileExists");
|
|
26010
26013
|
const envFilePath = ".env";
|
|
26011
26014
|
const envLocalFilePath = ".env.local";
|
|
26012
|
-
const hasEnvFile = existsSync(envFilePath);
|
|
26013
26015
|
const requireApiToken = (env2) => {
|
|
26014
26016
|
if (!env2.WIRECHUNK_API_TOKEN) {
|
|
26015
26017
|
console.error(
|
|
@@ -26023,10 +26025,10 @@ const requireCoreDbUrl = (env2) => {
|
|
|
26023
26025
|
const url = env2.WIRECHUNK_CORE_DATABASE_URL;
|
|
26024
26026
|
if (!url) {
|
|
26025
26027
|
const message = "Missing WIRECHUNK_CORE_DATABASE_URL in environment";
|
|
26026
|
-
if (
|
|
26028
|
+
if (env2[mainEnvFileExistsSymbol]) {
|
|
26027
26029
|
console.error(message);
|
|
26028
26030
|
} else {
|
|
26029
|
-
console.error(`${message}, no ${
|
|
26031
|
+
console.error(`${message}, no ${env2[mainEnvFilePathSymbol]} file found`);
|
|
26030
26032
|
}
|
|
26031
26033
|
process$2.exit(1);
|
|
26032
26034
|
}
|
|
@@ -26045,16 +26047,20 @@ const coreServerUrlFromEnv = (env2) => {
|
|
|
26045
26047
|
};
|
|
26046
26048
|
const parseEnv = async (envMode) => {
|
|
26047
26049
|
const env2 = {};
|
|
26048
|
-
|
|
26049
|
-
|
|
26050
|
-
Object.assign(env2, parseEnv$1(envFileRaw));
|
|
26051
|
-
}
|
|
26050
|
+
const mainEnvFilePath = envMode ? `.env.${envMode}` : envFilePath;
|
|
26051
|
+
const mainEnvFileExists = existsSync(mainEnvFilePath);
|
|
26052
26052
|
if (envMode) {
|
|
26053
|
-
|
|
26054
|
-
|
|
26055
|
-
|
|
26053
|
+
if (existsSync(envFilePath)) {
|
|
26054
|
+
const envFileRaw = await readFile(envFilePath, "utf8");
|
|
26055
|
+
Object.assign(env2, parseEnv$1(envFileRaw));
|
|
26056
|
+
}
|
|
26057
|
+
if (mainEnvFileExists) {
|
|
26058
|
+
const modeFileRaw = await readFile(mainEnvFilePath, "utf8");
|
|
26056
26059
|
Object.assign(env2, parseEnv$1(modeFileRaw));
|
|
26057
26060
|
}
|
|
26061
|
+
} else if (mainEnvFileExists) {
|
|
26062
|
+
const envFileRaw = await readFile(mainEnvFilePath, "utf8");
|
|
26063
|
+
Object.assign(env2, parseEnv$1(envFileRaw));
|
|
26058
26064
|
}
|
|
26059
26065
|
if (existsSync(envLocalFilePath)) {
|
|
26060
26066
|
const envLocalFileRaw = await readFile(envLocalFilePath, "utf8");
|
|
@@ -26070,7 +26076,10 @@ const parseEnv = async (envMode) => {
|
|
|
26070
26076
|
Object.assign(env2, process$2.env);
|
|
26071
26077
|
return {
|
|
26072
26078
|
...env2,
|
|
26073
|
-
WIRECHUNK_CORE_SERVER_URL: coreServerUrlFromEnv(env2)
|
|
26079
|
+
WIRECHUNK_CORE_SERVER_URL: coreServerUrlFromEnv(env2),
|
|
26080
|
+
[envModeSymbol]: envMode,
|
|
26081
|
+
[mainEnvFilePathSymbol]: mainEnvFilePath,
|
|
26082
|
+
[mainEnvFileExistsSymbol]: mainEnvFileExists
|
|
26074
26083
|
};
|
|
26075
26084
|
};
|
|
26076
26085
|
var dist$1 = {};
|
|
@@ -26858,304 +26867,21 @@ WIRECHUNK_PLATFORM_ID=${result2.platformId}
|
|
|
26858
26867
|
);
|
|
26859
26868
|
}
|
|
26860
26869
|
};
|
|
26861
|
-
const
|
|
26862
|
-
function validate25(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
|
|
26863
|
-
let vErrors = null;
|
|
26864
|
-
let errors2 = 0;
|
|
26865
|
-
const evaluated0 = validate25.evaluated;
|
|
26866
|
-
if (evaluated0.dynamicProps) {
|
|
26867
|
-
evaluated0.props = void 0;
|
|
26868
|
-
}
|
|
26869
|
-
if (evaluated0.dynamicItems) {
|
|
26870
|
-
evaluated0.items = void 0;
|
|
26871
|
-
}
|
|
26872
|
-
{
|
|
26873
|
-
if (data && typeof data == "object" && !Array.isArray(data)) {
|
|
26874
|
-
let missing0;
|
|
26875
|
-
if (data.name === void 0 && (missing0 = "name")) {
|
|
26876
|
-
validate25.errors = [
|
|
26877
|
-
{
|
|
26878
|
-
instancePath,
|
|
26879
|
-
schemaPath: "#/required",
|
|
26880
|
-
keyword: "required",
|
|
26881
|
-
params: { missingProperty: missing0 },
|
|
26882
|
-
message: "must have required property '" + missing0 + "'"
|
|
26883
|
-
}
|
|
26884
|
-
];
|
|
26885
|
-
return false;
|
|
26886
|
-
} else {
|
|
26887
|
-
if (data.name !== void 0) {
|
|
26888
|
-
const _errs1 = errors2;
|
|
26889
|
-
if (typeof data.name !== "string") {
|
|
26890
|
-
validate25.errors = [
|
|
26891
|
-
{
|
|
26892
|
-
instancePath: instancePath + "/name",
|
|
26893
|
-
schemaPath: "#/properties/name/type",
|
|
26894
|
-
keyword: "type",
|
|
26895
|
-
params: { type: "string" },
|
|
26896
|
-
message: "must be string"
|
|
26897
|
-
}
|
|
26898
|
-
];
|
|
26899
|
-
return false;
|
|
26900
|
-
}
|
|
26901
|
-
var valid0 = _errs1 === errors2;
|
|
26902
|
-
} else {
|
|
26903
|
-
var valid0 = true;
|
|
26904
|
-
}
|
|
26905
|
-
if (valid0) {
|
|
26906
|
-
if (data.server !== void 0) {
|
|
26907
|
-
let data1 = data.server;
|
|
26908
|
-
const _errs3 = errors2;
|
|
26909
|
-
{
|
|
26910
|
-
if (data1 && typeof data1 == "object" && !Array.isArray(data1)) {
|
|
26911
|
-
if (data1.enable !== void 0) {
|
|
26912
|
-
const _errs5 = errors2;
|
|
26913
|
-
if (typeof data1.enable !== "boolean") {
|
|
26914
|
-
validate25.errors = [
|
|
26915
|
-
{
|
|
26916
|
-
instancePath: instancePath + "/server/enable",
|
|
26917
|
-
schemaPath: "#/properties/server/properties/enable/type",
|
|
26918
|
-
keyword: "type",
|
|
26919
|
-
params: { type: "boolean" },
|
|
26920
|
-
message: "must be boolean"
|
|
26921
|
-
}
|
|
26922
|
-
];
|
|
26923
|
-
return false;
|
|
26924
|
-
}
|
|
26925
|
-
var valid1 = _errs5 === errors2;
|
|
26926
|
-
} else {
|
|
26927
|
-
var valid1 = true;
|
|
26928
|
-
}
|
|
26929
|
-
if (valid1) {
|
|
26930
|
-
if (data1.database !== void 0) {
|
|
26931
|
-
let data3 = data1.database;
|
|
26932
|
-
const _errs7 = errors2;
|
|
26933
|
-
{
|
|
26934
|
-
if (data3 && typeof data3 == "object" && !Array.isArray(data3)) {
|
|
26935
|
-
if (data3.enable !== void 0) {
|
|
26936
|
-
if (typeof data3.enable !== "boolean") {
|
|
26937
|
-
validate25.errors = [
|
|
26938
|
-
{
|
|
26939
|
-
instancePath: instancePath + "/server/database/enable",
|
|
26940
|
-
schemaPath: "#/properties/server/properties/database/properties/enable/type",
|
|
26941
|
-
keyword: "type",
|
|
26942
|
-
params: { type: "boolean" },
|
|
26943
|
-
message: "must be boolean"
|
|
26944
|
-
}
|
|
26945
|
-
];
|
|
26946
|
-
return false;
|
|
26947
|
-
}
|
|
26948
|
-
}
|
|
26949
|
-
} else {
|
|
26950
|
-
validate25.errors = [
|
|
26951
|
-
{
|
|
26952
|
-
instancePath: instancePath + "/server/database",
|
|
26953
|
-
schemaPath: "#/properties/server/properties/database/type",
|
|
26954
|
-
keyword: "type",
|
|
26955
|
-
params: { type: "object" },
|
|
26956
|
-
message: "must be object"
|
|
26957
|
-
}
|
|
26958
|
-
];
|
|
26959
|
-
return false;
|
|
26960
|
-
}
|
|
26961
|
-
}
|
|
26962
|
-
var valid1 = _errs7 === errors2;
|
|
26963
|
-
} else {
|
|
26964
|
-
var valid1 = true;
|
|
26965
|
-
}
|
|
26966
|
-
}
|
|
26967
|
-
} else {
|
|
26968
|
-
validate25.errors = [
|
|
26969
|
-
{
|
|
26970
|
-
instancePath: instancePath + "/server",
|
|
26971
|
-
schemaPath: "#/properties/server/type",
|
|
26972
|
-
keyword: "type",
|
|
26973
|
-
params: { type: "object" },
|
|
26974
|
-
message: "must be object"
|
|
26975
|
-
}
|
|
26976
|
-
];
|
|
26977
|
-
return false;
|
|
26978
|
-
}
|
|
26979
|
-
}
|
|
26980
|
-
var valid0 = _errs3 === errors2;
|
|
26981
|
-
} else {
|
|
26982
|
-
var valid0 = true;
|
|
26983
|
-
}
|
|
26984
|
-
if (valid0) {
|
|
26985
|
-
if (data.components !== void 0) {
|
|
26986
|
-
let data5 = data.components;
|
|
26987
|
-
const _errs11 = errors2;
|
|
26988
|
-
{
|
|
26989
|
-
if (data5 && typeof data5 == "object" && !Array.isArray(data5)) {
|
|
26990
|
-
for (const key0 in data5) {
|
|
26991
|
-
let data6 = data5[key0];
|
|
26992
|
-
const _errs14 = errors2;
|
|
26993
|
-
{
|
|
26994
|
-
if (data6 && typeof data6 == "object" && !Array.isArray(data6)) {
|
|
26995
|
-
let missing1;
|
|
26996
|
-
if (data6.path === void 0 && (missing1 = "path")) {
|
|
26997
|
-
validate25.errors = [
|
|
26998
|
-
{
|
|
26999
|
-
instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1"),
|
|
27000
|
-
schemaPath: "#/properties/components/additionalProperties/required",
|
|
27001
|
-
keyword: "required",
|
|
27002
|
-
params: { missingProperty: missing1 },
|
|
27003
|
-
message: "must have required property '" + missing1 + "'"
|
|
27004
|
-
}
|
|
27005
|
-
];
|
|
27006
|
-
return false;
|
|
27007
|
-
} else {
|
|
27008
|
-
if (data6.path !== void 0) {
|
|
27009
|
-
const _errs16 = errors2;
|
|
27010
|
-
if (typeof data6.path !== "string") {
|
|
27011
|
-
validate25.errors = [
|
|
27012
|
-
{
|
|
27013
|
-
instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1") + "/path",
|
|
27014
|
-
schemaPath: "#/properties/components/additionalProperties/properties/path/type",
|
|
27015
|
-
keyword: "type",
|
|
27016
|
-
params: { type: "string" },
|
|
27017
|
-
message: "must be string"
|
|
27018
|
-
}
|
|
27019
|
-
];
|
|
27020
|
-
return false;
|
|
27021
|
-
}
|
|
27022
|
-
var valid4 = _errs16 === errors2;
|
|
27023
|
-
} else {
|
|
27024
|
-
var valid4 = true;
|
|
27025
|
-
}
|
|
27026
|
-
if (valid4) {
|
|
27027
|
-
if (data6.description !== void 0) {
|
|
27028
|
-
const _errs18 = errors2;
|
|
27029
|
-
if (typeof data6.description !== "string") {
|
|
27030
|
-
validate25.errors = [
|
|
27031
|
-
{
|
|
27032
|
-
instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1") + "/description",
|
|
27033
|
-
schemaPath: "#/properties/components/additionalProperties/properties/description/type",
|
|
27034
|
-
keyword: "type",
|
|
27035
|
-
params: { type: "string" },
|
|
27036
|
-
message: "must be string"
|
|
27037
|
-
}
|
|
27038
|
-
];
|
|
27039
|
-
return false;
|
|
27040
|
-
}
|
|
27041
|
-
var valid4 = _errs18 === errors2;
|
|
27042
|
-
} else {
|
|
27043
|
-
var valid4 = true;
|
|
27044
|
-
}
|
|
27045
|
-
if (valid4) {
|
|
27046
|
-
if (data6.supports !== void 0) {
|
|
27047
|
-
let data9 = data6.supports;
|
|
27048
|
-
const _errs20 = errors2;
|
|
27049
|
-
{
|
|
27050
|
-
if (data9 && typeof data9 == "object" && !Array.isArray(data9)) {
|
|
27051
|
-
if (data9.children !== void 0) {
|
|
27052
|
-
if (typeof data9.children !== "boolean") {
|
|
27053
|
-
validate25.errors = [
|
|
27054
|
-
{
|
|
27055
|
-
instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1") + "/supports/children",
|
|
27056
|
-
schemaPath: "#/properties/components/additionalProperties/properties/supports/properties/children/type",
|
|
27057
|
-
keyword: "type",
|
|
27058
|
-
params: { type: "boolean" },
|
|
27059
|
-
message: "must be boolean"
|
|
27060
|
-
}
|
|
27061
|
-
];
|
|
27062
|
-
return false;
|
|
27063
|
-
}
|
|
27064
|
-
}
|
|
27065
|
-
} else {
|
|
27066
|
-
validate25.errors = [
|
|
27067
|
-
{
|
|
27068
|
-
instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1") + "/supports",
|
|
27069
|
-
schemaPath: "#/properties/components/additionalProperties/properties/supports/type",
|
|
27070
|
-
keyword: "type",
|
|
27071
|
-
params: { type: "object" },
|
|
27072
|
-
message: "must be object"
|
|
27073
|
-
}
|
|
27074
|
-
];
|
|
27075
|
-
return false;
|
|
27076
|
-
}
|
|
27077
|
-
}
|
|
27078
|
-
var valid4 = _errs20 === errors2;
|
|
27079
|
-
} else {
|
|
27080
|
-
var valid4 = true;
|
|
27081
|
-
}
|
|
27082
|
-
}
|
|
27083
|
-
}
|
|
27084
|
-
}
|
|
27085
|
-
} else {
|
|
27086
|
-
validate25.errors = [
|
|
27087
|
-
{
|
|
27088
|
-
instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1"),
|
|
27089
|
-
schemaPath: "#/properties/components/additionalProperties/type",
|
|
27090
|
-
keyword: "type",
|
|
27091
|
-
params: { type: "object" },
|
|
27092
|
-
message: "must be object"
|
|
27093
|
-
}
|
|
27094
|
-
];
|
|
27095
|
-
return false;
|
|
27096
|
-
}
|
|
27097
|
-
}
|
|
27098
|
-
var valid3 = _errs14 === errors2;
|
|
27099
|
-
if (!valid3) {
|
|
27100
|
-
break;
|
|
27101
|
-
}
|
|
27102
|
-
}
|
|
27103
|
-
} else {
|
|
27104
|
-
validate25.errors = [
|
|
27105
|
-
{
|
|
27106
|
-
instancePath: instancePath + "/components",
|
|
27107
|
-
schemaPath: "#/properties/components/type",
|
|
27108
|
-
keyword: "type",
|
|
27109
|
-
params: { type: "object" },
|
|
27110
|
-
message: "must be object"
|
|
27111
|
-
}
|
|
27112
|
-
];
|
|
27113
|
-
return false;
|
|
27114
|
-
}
|
|
27115
|
-
}
|
|
27116
|
-
var valid0 = _errs11 === errors2;
|
|
27117
|
-
} else {
|
|
27118
|
-
var valid0 = true;
|
|
27119
|
-
}
|
|
27120
|
-
}
|
|
27121
|
-
}
|
|
27122
|
-
}
|
|
27123
|
-
} else {
|
|
27124
|
-
validate25.errors = [
|
|
27125
|
-
{
|
|
27126
|
-
instancePath,
|
|
27127
|
-
schemaPath: "#/type",
|
|
27128
|
-
keyword: "type",
|
|
27129
|
-
params: { type: "object" },
|
|
27130
|
-
message: "must be object"
|
|
27131
|
-
}
|
|
27132
|
-
];
|
|
27133
|
-
return false;
|
|
27134
|
-
}
|
|
27135
|
-
}
|
|
27136
|
-
validate25.errors = vErrors;
|
|
27137
|
-
return errors2 === 0;
|
|
27138
|
-
}
|
|
27139
|
-
validate25.evaluated = {
|
|
27140
|
-
props: { name: true, server: true, components: true },
|
|
27141
|
-
dynamicProps: false,
|
|
27142
|
-
dynamicItems: false
|
|
27143
|
-
};
|
|
27144
|
-
const type$b = "array";
|
|
27145
|
-
const items$2 = /* @__PURE__ */ JSON.parse(`{"anyOf":[{"title":"BoxComponent","description":"An element for wrapping children elements.","type":"object","properties":{"type":{"const":"Box"},"elementId":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"tag":{"description":"The HTML tag to use for the element. Defaults to div.","type":"string","enum":["article","aside","blockquote","code","div","fieldset","footer","h1","h2","h3","h4","h5","h6","header","label","legend","li","main","nav","ol","p","pre","section","span","ul"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"ButtonComponent","type":"object","properties":{"type":{"const":"Button"},"id":{"type":"string","minLength":1},"onClick":{"description":"Defaults to submitForm.","anyOf":[{"type":"object","properties":{"type":{"const":"emitEvent"},"eventType":{"description":"A string representing a custom event type, to reference in other components that listen for events.","type":"string"}},"required":["type","eventType"]},{"type":"object","properties":{"type":{"type":"string","enum":["goBack","goBackFormStep","removeRepeatingGroupInputItem","resetForm","submitForm"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["decrementQueryParameter","incrementQueryParameter"]},"defaultValue":{"type":"number"},"parameter":{"type":"string"}},"required":["type","defaultValue","parameter"]}]},"size":{"description":"Controls the size of the button. Options are: '1' (12px font size), '2' (default, 14px font size), '3' (16px font size), and '4' (18px font size).","type":"string","enum":["1","2","3","4"]},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"variant":{"description":"Controls the visual style of the button. Options are: 'solid' (default, filled background), 'soft' (lighter background, --accent-a11 text), 'surface' (subtle background, solid border, --accent-a11 text), 'outline' (transparent background, solid border, --accent-a11 text), and 'ghost' (no background, no border, --accent-a11 text, behaves like text in layout with negative margins).","type":"string","enum":["solid","soft","surface","outline","ghost"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"CalendlyEmbedComponent","description":"An embedded Calendly scheduling widget.","type":"object","properties":{"type":{"const":"CalendlyEmbed"},"id":{"type":"string","minLength":1},"queryParameters":{"type":"array","items":{"type":"object","properties":{"id":{"description":"A random unique string for identification.","type":"string"},"parameter":{"type":"string"},"value":{"$ref":"#/$defs/componentStringValueSource"}},"required":["id","parameter","value"]}},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"url":{"$ref":"#/$defs/componentStringValueSource"}},"additionalProperties":false,"required":["type","id"]},{"title":"CheckboxGroupInputComponent","description":"A group of checkboxes for selecting one or more options, represented as an array of strings in form data.","type":"object","properties":{"type":{"const":"CheckboxGroupInput"},"displayType":{"description":"The style to use for items. For indicators, each item is rendered with a checkbox icon, and its children are rendered inside a label that refers to the checkbox input element. For cards, there is default styling with each item's border color indicating whether it is checked. Defaults to indicators.","type":"string","enum":["indicators","cards"]},"id":{"type":"string","minLength":1},"itemsContainerStyles":{"$ref":"#/$defs/componentStyleRules"},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"required":{"type":"boolean"},"showIndicators":{"description":"Whether to show indicators for each item. Applies only if displayType is indicators. Defaults to true.","type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"CheckboxGroupInputItemComponent","description":"A checkbox item within a checkbox group input.","type":"object","properties":{"type":{"const":"CheckboxGroupInputItem"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"value":{"$ref":"#/$defs/componentStringValueSource"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"CheckboxInputComponent","description":"A standalone checkbox. Represented as either a boolean or a string in form data. If value is set to a string and is not an empty string, it is used as the value for the input when the box is checked. Otherwise, a boolean is set as the value when the box is checked or unchecked.","type":"object","properties":{"type":{"const":"CheckboxInput"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"value":{"$ref":"#/$defs/componentStringValueSource"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"CollapsiblePanelComponent","description":"A panel that can be collapsed or expanded.","type":"object","properties":{"type":{"const":"CollapsiblePanel"},"header":{"description":"The text displayed in the clickable header.","type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"triggerButtonStyles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"CompletableVideoInputComponent","type":"object","properties":{"type":{"const":"CompletableVideoInput"},"collapseCompleted":{"description":"By default, collapseCompleted is false.","type":"boolean"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"id":{"type":"string","minLength":1},"initiallyCollapsed":{"description":"Default initialCollapsed is false.","type":"boolean"},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"required":{"type":"boolean"},"showHeader":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"src":{"type":"string"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"ConditionalLogicComponent","type":"object","properties":{"type":{"const":"ConditionalLogic"},"condition":{"$ref":"#/$defs/expressionBooleanExpression"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"CourseComponent","type":"object","properties":{"type":{"const":"Course"},"courseId":{"description":"If set, a Course is used instead of the legacy Plan.","type":"string"},"emptyNotesMessage":{"type":"string"},"enableNotes":{"type":"boolean"},"id":{"type":"string","minLength":1},"planId":{"type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"CurrentYearComponent","description":"Displays the current year.","type":"object","properties":{"type":{"const":"CurrentYear"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"CustomComponentComponent","description":"A custom component (a saved fragment of components).","type":"object","properties":{"type":{"const":"CustomComponent"},"customComponentId":{"description":"The ID of the custom component to display.","type":"string"},"customProps":{"$ref":"#/$defs/contextData"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","customComponentId","id"]},{"title":"DashboardComponent","description":"A dashboard layout with a header, sidebar, and main content area.","type":"object","properties":{"type":{"const":"Dashboard"},"collapseSidebarOnPaths":{"description":"An array of path patterns as globs. If set, the sidebar will automatically be collapsed on matching paths.","type":"array","items":{"type":"string"}},"extraNavItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"id":{"type":"string","minLength":1},"mainNavItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"DateInputComponent","type":"object","properties":{"type":{"const":"DateInput"},"clearable":{"type":"boolean"},"dayPlaceholder":{"type":"string"},"id":{"type":"string","minLength":1},"inputElementStyles":{"$ref":"#/$defs/componentStyleRules"},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"maximumDate":{"anyOf":[{"type":"object","properties":{"type":{"const":"today"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"date"},"value":{"type":"string"}},"required":["type","value"]}]},"minimumDate":{"anyOf":[{"type":"object","properties":{"type":{"const":"today"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"date"},"value":{"type":"string"}},"required":["type","value"]}]},"monthPlaceholder":{"type":"string"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"style":{"type":"string","enum":["Calendar","3Fields"]},"styles":{"$ref":"#/$defs/componentStyleRules"},"yearPlaceholder":{"type":"string"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"DialogComponent","type":"object","properties":{"type":{"const":"Dialog"},"closeOnBackdropClick":{"description":"Whether the dialog can be closed by clicking the backdrop. Defaults to true.","type":"boolean"},"hideTriggers":{"description":"A list of events that will trigger the dialog to be hidden.","type":"array","items":{"$ref":"#/$defs/componentTrigger"}},"id":{"type":"string","minLength":1},"showTriggers":{"description":"A list of events that will trigger the dialog to be shown.","type":"array","items":{"$ref":"#/$defs/componentTrigger"}},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"DocumentComponent","description":"A component that displays a document that can be downloaded.","type":"object","properties":{"type":{"const":"Document"},"documentId":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"DropdownInputComponent","type":"object","properties":{"type":{"const":"DropdownInput"},"clearable":{"description":"Clearable is ignored if the input is required. When the input is not required, it may or may not be clearable. The default is false.","type":"boolean"},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"options":{"description":"The options to show. Each option's value is both the label displayed and the value.","type":"array","items":{"type":"object","properties":{"key":{"type":"number"},"value":{"type":"string"}},"required":["key","value"]}},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name","options"]},{"title":"FormComponent","type":"object","properties":{"type":{"const":"Form"},"formId":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"FormStepComponent","description":"Represents the current step in a multi-step form.","type":"object","properties":{"type":{"const":"FormStep"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"GooglePlaceInputComponent","description":"A map with a search field that lets you select a Place in Google Maps.","type":"object","properties":{"type":{"const":"GooglePlaceInput"},"id":{"type":"string","minLength":1},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","name"]},{"title":"HeaderComponent","description":"A header component with navigation items and a slot for other components. Children components must have either the LeftContent or RightContent slot property set to be rendered. No default styling is applied to children. Notice that children for either the left or right need to be enabled explicitly on mobile screens (up to 767px wide) with the showLeftContentOnMobile or showRightContentOnMobile properties. The navAlign property specifies the alignment of the navigation items element: if Center, then the nav is centered; if Left, then the nav is on the left but immediately to the right of the children with the LeftContent slot, if any; if Right, then the nav is on the right but immediately to the left of the children with the RightContent slot, if any.","type":"object","properties":{"type":{"const":"Header"},"contentMaxWidth":{"$ref":"#/$defs/componentWidth"},"id":{"type":"string","minLength":1},"navAlign":{"$ref":"#/$defs/componentAlign"},"navItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"showLeftContentOnMobile":{"description":"If true, the left content is shown on mobile. Defaults to false.","type":"boolean"},"showRightContentOnMobile":{"description":"If true, the right content is shown on mobile. Defaults to false.","type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"sticky":{"description":"If true, the header is sticky upon scrolling. Defaults to false.","type":"boolean"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"HelpTicketsPortalComponent","description":"A portal for help tickets.","type":"object","properties":{"type":{"const":"HelpTicketsPortal"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"HTMLComponent","description":"A component that renders raw HTML.","type":"object","properties":{"type":{"const":"HTML"},"html":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"IconComponent","type":"object","properties":{"type":{"const":"Icon"},"alt":{"description":"The alternative text for the icon. This should be provided only for icons that serve some purpose on their own other than decoration. Decorative icons should omit alt text to avoid unnecessary screen reader announcements.","type":"string"},"ariaHidden":{"description":"If true, the icon is hidden from the accessibility tree. This should be set to true for purely decorative icons.","type":"boolean"},"icon":{"type":"object","properties":{"type":{"const":"Direct"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"MaterialSymbols"},"value":{"type":"object","properties":{"fill":{"description":"If true, the icon's filled variant is used. Defaults to false.","type":"boolean"},"name":{"description":"The name of the icon. Must be one of the defined Material Symbols.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"opticalSize":{"description":"The optical size of the icon, for optimizing the appearance at different sizes. For icons rendered at 34px width or smaller, use 20. For icons rendered at bigger than 34px width, use 48. This is also the default width and height of the icon in pixels. Can be used together with CSS width and height properties. Defaults to 20.","type":"number","enum":[20,48]},"style":{"description":"The style of the icon. The outlined style is a sort of hybrid of rounded and sharp, and depending on the icon it may look exactly the same as either the rounded or sharp style. Defaults to outlined.","type":"string","enum":["outlined","rounded","sharp"]},"weight":{"description":"The weight of the icon. Similar to font-weight in that 200 is lighter and 600 is heavier. Defaults to 400.","type":"number","enum":[200,400,600]}}}},"required":["type"]}]}},"required":["type"]},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"ImageComponent","description":"A component that displays an image.","type":"object","properties":{"type":{"const":"Image"},"alt":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"src":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageFeaturedImage","SiteLogo"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Asset"},"assetId":{"type":"string"},"variantId":{"description":"Optional ID of a specific variant to use. Should not be set together with variantIds. If not provided and variantIds is also not provided or is empty, the image is rendered with a srcset including all variants by default.","type":"string"},"variantIds":{"description":"Optional IDs of specific variants to use in the srcset attribute. Should not be set together with variantId.","type":"array","items":{"type":"string"}}},"required":["type"]}]},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"LessonNotesFieldComponent","description":"A text field for users to save notes related to a lesson (for courses).","type":"object","properties":{"type":{"const":"LessonNotesField"},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label"]},{"title":"LinkComponent","description":"A link.","type":"object","properties":{"type":{"const":"Link"},"id":{"type":"string","minLength":1},"linkStyle":{"description":"Controls the visual style of the link. When \\"Button\\", renders a Button component with asChild prop and a Link inside.","type":"string","enum":["Text","Button"]},"protocol":{"description":"Adds the specified protocol prefix to the href attribute's value.","type":"string","enum":["mailto","tel","sms"]},"size":{"description":"Controls the size of the button. Options are: '1' (12px font size), '2' (default, 14px font size), '3' (16px font size), and '4' (18px font size).","type":"string","enum":["1","2","3","4"]},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"target":{"type":"string","enum":["_blank","_self","_parent","_top"]},"to":{"description":"The URL that the link points to. A router link will be rendered for a path without a host (using the History API). A regular link will be rendered for a full URL.","$ref":"#/$defs/componentStringValueSource"},"variant":{"description":"Controls the visual style of the button. Options are: 'solid' (default, filled background), 'soft' (lighter background, --accent-a11 text), 'surface' (subtle background, solid border, --accent-a11 text), 'outline' (transparent background, solid border, --accent-a11 text), and 'ghost' (no background, no border, --accent-a11 text, behaves like text in layout with negative margins).","type":"string","enum":["solid","soft","surface","outline","ghost"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"MapComponent","description":"A component that displays a map. The focus property is the place to display. It can be the name of a location (the way it appears on Google Maps), an address, or a place ID with the prefix 'place_id:'.","type":"object","properties":{"type":{"const":"Map"},"focus":{"$ref":"#/$defs/componentNullableStringValueSource"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"MoveUserPlanComponent","description":"A component for a user to move between sequence stages.","type":"object","properties":{"type":{"const":"MoveUserPlan"},"id":{"type":"string","minLength":1},"nextButtonLabel":{"type":"string"},"previousButtonLabel":{"type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"MultiOrgViewComponent","description":"A view for viewing all the orgs under a subscription, including all the users of each org and their training progress.","type":"object","properties":{"type":{"const":"MultiOrgView"},"id":{"type":"string","minLength":1},"showUserTrainingProgress":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"userTrainingProgressContentPlanIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressCourseIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressSequenceIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"required":["type","id"]},{"title":"MultipleChoiceInputComponent","type":"object","properties":{"type":{"const":"MultipleChoiceInput"},"answerIndex":{"type":"number"},"choices":{"type":"array","items":{"type":"string"}},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"question":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"MultiSelectInputComponent","type":"object","properties":{"type":{"const":"MultiSelectInput"},"answerIndices":{"type":"array","items":{"type":"number"}},"choices":{"type":"array","items":{"type":"string"}},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"question":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"NumberInputComponent","type":"object","properties":{"type":{"const":"NumberInput"},"format":{"type":"string","enum":["Number","Currency","Integer"]},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"maxDecimalDigits":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"OrderFormComponent","description":"An order form for checking out for a subscription.","type":"object","properties":{"type":{"const":"OrderForm"},"checkoutOptions":{"description":"The products to display in the form. Each product may optionally have a condition that needs to evaluate to true for the product to be displayed.","type":"array","items":{"type":"object","properties":{"condition":{"$ref":"#/$defs/expressionBooleanExpression"},"subscriptionPlanId":{"type":"string"}},"required":["subscriptionPlanId"]}},"enablePhoneNumber":{"description":"Whether to enable a phone number input field. Defaults to true.","type":"boolean"},"enablePromoCode":{"description":"Whether to enable a promo code input field. If set to Stripe, only Stripe promo codes are allowed. If set to Custom, only custom promo codes are allowed. Defaults to none.","type":"string","enum":["Stripe","Custom"]},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"OrgBillingSettingsComponent","description":"Org billing settings dashboard.","type":"object","properties":{"type":{"const":"OrgBillingSettings"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"OrgSitePagesComponent","description":"Shows the pages of an org site and allows authorized users to activate and edit pages.","type":"object","properties":{"type":{"const":"OrgSitePages"},"defaultPageTemplatePreviewImageUrl":{"type":"string"},"id":{"type":"string","minLength":1},"pageTemplates":{"type":"object","properties":{"filter":{"type":"string","enum":["include","exclude"]},"ids":{"type":"array","items":{"type":"string"}}},"required":["filter","ids"]},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"OrgSiteReviewsComponent","description":"Organization site reviews component.","type":"object","properties":{"type":{"const":"OrgSiteReviews"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"OrganizationTeamComponent","description":"Organization team/members dashboard.","type":"object","properties":{"type":{"const":"OrganizationTeam"},"id":{"type":"string","minLength":1},"showUserTrainingProgress":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"userTrainingProgressContentPlanIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressCourseIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"required":["type","id"]},{"title":"PageComponent","description":"Represents the current page when rendered inside a layout.","type":"object","properties":{"type":{"const":"Page"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"PlainTextComponent","type":"object","properties":{"type":{"const":"PlainText"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"tag":{"description":"The HTML tag to use for the element. Defaults to span.","type":"string","enum":["code","div","h1","h2","h3","h4","h5","h6","label","legend","li","p","span"]},"text":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]}},"additionalProperties":false,"required":["type","id"]},{"title":"PopoverComponent","type":"object","properties":{"type":{"const":"Popover"},"hideTriggers":{"description":"A list of events that will trigger the popover to be hidden.","type":"array","items":{"$ref":"#/$defs/componentTrigger"}},"id":{"type":"string","minLength":1},"showTriggers":{"description":"A list of events that will trigger the popover to be shown.","type":"array","items":{"$ref":"#/$defs/componentTrigger"}},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"ProductItemGuardComponent","description":"Ensures that a user is signed in and belongs to an org that has access to the specified product item in an active subscription. Otherwise, the component shows a default message, a custom children, or nothing, depending on how it is configured. The styling applies only to the default message.","type":"object","properties":{"type":{"const":"ProductItemGuard"},"accessDeniedMode":{"description":"The default accessDeniedMode is DefaultMessage. A custom message is defined through children with an AccessDenied slot key.","type":"string","enum":["CustomMessage","DefaultMessage","Empty"]},"id":{"type":"string","minLength":1},"productItem":{"description":"The product item to require. If not set, this component does not require anything and displays its children.","type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"ProvidePropsComponent","type":"object","properties":{"type":{"const":"ProvideProps"},"id":{"type":"string","minLength":1},"props":{"type":"array","items":{"type":"object","properties":{"id":{"description":"A random unique string for identification.","type":"string"},"name":{"description":"The name of the prop to provide.","type":"string"},"source":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Number"},"value":{"type":"number"}},"required":["type","value"]},{"type":"object","properties":{"type":{"const":"String"},"value":{"type":"string"}},"required":["type","value"]}]}},"required":["type","value"]},{"description":"The output is a function of the input using one of the built-in format functions.","type":"object","properties":{"type":{"const":"Transform"},"format":{"type":"string","enum":["Phone number (###) ###-####","Phone number ###-###-####","U.S. State abbreviation spelled out"]},"inputPropName":{"description":"Used only in transform mode.","type":"string"}},"required":["type"]},{"description":"Produce the output prop from the LiquidJS template.","type":"object","properties":{"type":{"const":"Template"},"template":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"CustomField"},"fieldName":{"type":"string"},"object":{"description":"The object from which to read the specified field. For a page template being previewed, when the object is 'Page' the custom fields are taken instead from the page template.","type":"string","enum":["Site","Page","User"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]}},"required":["id","name","source"]}},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"QueryComponent","description":"A component that queries data and provides it as props to its children. Supports pagination and provides metadata about the query results.","type":"object","properties":{"type":{"const":"Query"},"id":{"type":"string","minLength":1},"pageLimitSource":{"description":"The source of the page limit. Defaults to a Direct value of 20.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"number"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type","parameter"]}]},"pageNumberSource":{"description":"The source of the page number. Defaults to QueryParameter 'page'. Pagination is 1-based (i.e., the first page is page 1).","anyOf":[{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type","parameter"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"props":{"description":"Configuration for the props that will be provided to children components.","type":"object","properties":{"items":{"description":"The prop name for the array of items returned by the query. Defaults to 'items'.","type":"string"},"currentPage":{"description":"The prop name for the current page number. Defaults to 'currentPage'.","type":"string"},"hasNextPage":{"description":"The prop name for whether there is a next page. Defaults to 'hasNextPage'.","type":"string"},"hasPreviousPage":{"description":"The prop name for whether there is a previous page. Defaults to 'hasPreviousPage'.","type":"string"},"pageLimit":{"description":"The prop name for the actual number of items per page (returned by the server). Defaults to 'pageLimit'.","type":"string"},"totalItemsCount":{"description":"The prop name for the total number of items matching the filter. Defaults to 'totalItemsCount'.","type":"string"},"totalPagesCount":{"description":"The prop name for the total number of pages. Defaults to 'totalPagesCount'.","type":"string"}}},"slot":{"$ref":"#/$defs/componentSlot"},"source":{"description":"The data source configuration for the query.","anyOf":[{"description":"Fetch pages matching a set of filter conditions. Only published pages are included. Each element will be an object with the following properties: 'id', 'path', 'title', 'publishedAt', 'props'. The 'props' property will be the parsed page props.","type":"object","properties":{"type":{"const":"Pages"},"filter":{"description":"The filter to apply to select pages.","type":"object","properties":{"pathPrefix":{"description":"The path prefix to require for pages. Defaults to all paths.","type":"string"},"props":{"description":"A set of props to filter by. The prop values must be strings.","type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}}}}},"required":["type"]}]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"RadioGroupInputComponent","type":"object","properties":{"type":{"const":"RadioGroupInput"},"defaultValue":{"$ref":"#/$defs/componentStringValueSource"},"displayType":{"description":"The style to use for items. For indicators, each item is rendered with a bubble icon, and its children are rendered inside a label that refers to the radio input element. For cards, there is default styling with each item's border color indicating whether it is the one selected. Defaults to indicators.","type":"string","enum":["indicators","cards"]},"id":{"type":"string","minLength":1},"itemsContainerStyles":{"$ref":"#/$defs/componentStyleRules"},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"value":{"$ref":"#/$defs/componentStringValueSource"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"RadioGroupInputItemComponent","description":"A radio item within a radio group input.","type":"object","properties":{"type":{"const":"RadioGroupInputItem"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"value":{"$ref":"#/$defs/componentStringValueSource"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"RemoteComponentComponent","description":"A component that dynamically loads a remote React component with custom code from an extension.","type":"object","properties":{"type":{"const":"RemoteComponent"},"componentName":{"description":"The name of the component to display.","type":"string"},"extensionName":{"description":"The name of the extension that contains the remote component.","type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","componentName","extensionName","id"]},{"title":"RepeaterComponent","description":"A component that repeats a set of children for each item of an array or property of an object. Children are rendered with a prop for the current item. The key prop is the index for array items and the property name for objects. There is no wrapping element for children.","type":"object","properties":{"type":{"const":"Repeater"},"id":{"type":"string","minLength":1},"itemPropName":{"description":"The name of the prop for the current item. This is the array element for an array source, or the value of a property for an object source. Defaults to 'item'.","type":"string"},"keyPropName":{"description":"The name of the prop for the index or key of the current item. Defaults to 'key'.","type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"source":{"description":"The data to iterate over. Needs to evaluate to an array or an object.","anyOf":[{"description":"Use a prop as the data source.","type":"object","properties":{"type":{"const":"Prop"},"name":{"description":"The name of the prop providing the array or object.","type":"string"}},"required":["type","name"]}]},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"RepeatingGroupInputComponent","description":"An input component that can include multiple input components and other components, allowing an array of records to be entered.","type":"object","properties":{"type":{"const":"RepeatingGroupInput"},"id":{"type":"string","minLength":1},"name":{"type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id","name"]},{"title":"RequestPasswordResetComponent","description":"A component to request password reset.","type":"object","properties":{"type":{"const":"RequestPasswordReset"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"ResetPasswordComponent","description":"A component to reset a password.","type":"object","properties":{"type":{"const":"ResetPassword"},"id":{"type":"string","minLength":1},"mode":{"type":"string","enum":["create","reset"]},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"ReviewComponent","description":"Displays a review form with 1-5 stars and redirects to the configured Google Place if the user clicks 5 stars.","type":"object","properties":{"type":{"const":"Review"},"googlePlace":{"$ref":"#/$defs/componentNullableStringValueSource"},"id":{"type":"string","minLength":1},"reviewFieldPlaceholder":{"type":"string"},"selectStarsLabel":{"type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"SignInGuardComponent","type":"object","properties":{"type":{"const":"SignInGuard"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"SiteLogoComponent","description":"A component that displays the site logo.","type":"object","properties":{"type":{"const":"SiteLogo"},"alt":{"description":"Alternative text for the logo, defaults to the site name","type":"string"},"fallbackSiteName":{"description":"Whether to display the site name if the logo is not available","type":"boolean"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"SitePrivacyPolicyComponent","description":"A component that displays the site privacy policy.","type":"object","properties":{"type":{"const":"SitePrivacyPolicy"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"SiteTermsOfUseComponent","description":"A component that displays the site terms of use.","type":"object","properties":{"type":{"const":"SiteTermsOfUse"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"StageComponent","description":"A stage in a sequence.","type":"object","properties":{"type":{"const":"Stage"},"enableWrappedStageBody":{"description":"Whether to enable the wrapped stage body","type":"boolean"},"id":{"type":"string","minLength":1},"sequenceId":{"type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"StageBodyComponent","description":"The body of a stage in a sequence.","type":"object","properties":{"type":{"const":"StageBody"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"StageNameComponent","description":"A component that displays the name of a stage.","type":"object","properties":{"type":{"const":"StageName"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"TextComponent","description":"A component that displays rich text. The content property should be an object with a delta property set to a Quill Delta object.","type":"object","properties":{"type":{"const":"Text"},"content":{"$ref":"#/$defs/richText"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"TextInputComponent","type":"object","properties":{"type":{"const":"TextInput"},"defaultValue":{"$ref":"#/$defs/componentStringValueSource"},"format":{"description":"Validation format for the input","type":"string","enum":["None","Email","Phone","Url"]},"id":{"type":"string","minLength":1},"inputElementStyles":{"$ref":"#/$defs/componentStyleRules"},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"maxLength":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"TextareaInputComponent","type":"object","properties":{"type":{"const":"TextareaInput"},"defaultValue":{"$ref":"#/$defs/componentStringValueSource"},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"maxLength":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"ThemeComponent","type":"object","properties":{"type":{"const":"Theme"},"appearance":{"type":"string","enum":["light","dark","inherit"]},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"TypeformComponent","description":"A component that embeds a Typeform.","type":"object","properties":{"type":{"const":"Typeform"},"formId":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"UserProfileComponent","description":"A component that displays a user profile.","type":"object","properties":{"type":{"const":"UserProfile"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"VerifiedEmailAddressGuardComponent","description":"Requires that a user be signed in and have a verified email address. Otherwise displays either a message that you need to be signed in or a message and a button to send a verification email.","type":"object","properties":{"type":{"const":"VerifiedEmailAddressGuard"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"VerifyEmailAddressComponent","description":"Reads a URL query parameter that contains a unique token for verifying a user’s email address and makes an API request to mark the email address as verified. If the token is valid, it displays a message that the email address has been verified. Otherwise, it displays an error message. In either case, at the bottom it displays a 'Go to {siteName}' link that navigates to the home page.","type":"object","properties":{"type":{"const":"VerifyEmailAddress"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"VideoComponent","description":"A component that displays a video.","type":"object","properties":{"type":{"const":"Video"},"autoPlay":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"controls":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"id":{"type":"string","minLength":1},"loop":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"muted":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"playsInline":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"poster":{"description":"The URL of an image to display while the video is loading. Applicable only when tag is 'video'.","$ref":"#/$defs/componentStringValueSource"},"slot":{"$ref":"#/$defs/componentSlot"},"src":{"$ref":"#/$defs/componentStringValueSource"},"styles":{"$ref":"#/$defs/componentStyleRules"},"tag":{"description":"The way to render the video. Defaults to 'iframe'.","type":"string","enum":["iframe","video"]}},"additionalProperties":false,"required":["type","id"]},{"title":"ViewPlanStagesButtonComponent","description":"A button that opens a dialog that displays the stages of a sequence and allows the user to move to another stage.","type":"object","properties":{"type":{"const":"ViewPlanStagesButton"},"dialogHeader":{"type":"string"},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"slot":{"$ref":"#/$defs/componentSlot"},"stageNameTableHeader":{"type":"string"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label"]},{"title":"WidthContainerComponent","description":"A div element that sets the max-width property to a specified width (defaults to 1200px). The default alignment is Center. An additional div is rendered to wrap the children to set alignment. That inner div (the direct parent element of children) cannot be styled. Only the WidthContainerComponent's outer element gets the styles, if any.","type":"object","properties":{"type":{"const":"WidthContainer"},"align":{"$ref":"#/$defs/componentAlign"},"elementId":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"width":{"$ref":"#/$defs/componentWidth"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]}]}`);
|
|
26870
|
+
const type$c = "array";
|
|
26871
|
+
const items$2 = /* @__PURE__ */ JSON.parse(`{"anyOf":[{"title":"BoxComponent","description":"An element for wrapping children elements.","type":"object","properties":{"type":{"const":"Box"},"elementId":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"tag":{"description":"The HTML tag to use for the element. Defaults to div.","type":"string","enum":["article","aside","blockquote","code","div","fieldset","footer","h1","h2","h3","h4","h5","h6","header","label","legend","li","main","nav","ol","p","pre","section","span","ul"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"ButtonComponent","type":"object","properties":{"type":{"const":"Button"},"id":{"type":"string","minLength":1},"onClick":{"description":"Defaults to submitForm.","anyOf":[{"type":"object","properties":{"type":{"const":"emitEvent"},"eventType":{"description":"A string representing a custom event type, to reference in other components that listen for events.","type":"string"}},"required":["type","eventType"]},{"type":"object","properties":{"type":{"type":"string","enum":["goBack","goBackFormStep","removeRepeatingGroupInputItem","resetForm","submitForm"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["decrementQueryParameter","incrementQueryParameter"]},"defaultValue":{"type":"number"},"parameter":{"type":"string"}},"required":["type","defaultValue","parameter"]}]},"size":{"description":"Controls the size of the button. Options are: '1' (12px font size), '2' (default, 14px font size), '3' (16px font size), and '4' (18px font size).","type":"string","enum":["1","2","3","4"]},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"variant":{"description":"Controls the visual style of the button. Options are: 'solid' (default, filled background), 'soft' (lighter background, --accent-a11 text), 'surface' (subtle background, solid border, --accent-a11 text), 'outline' (transparent background, solid border, --accent-a11 text), and 'ghost' (no background, no border, --accent-a11 text, behaves like text in layout with negative margins).","type":"string","enum":["solid","soft","surface","outline","ghost"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"CalendlyEmbedComponent","description":"An embedded Calendly scheduling widget.","type":"object","properties":{"type":{"const":"CalendlyEmbed"},"id":{"type":"string","minLength":1},"queryParameters":{"type":"array","items":{"type":"object","properties":{"id":{"description":"A random unique string for identification.","type":"string"},"parameter":{"type":"string"},"value":{"$ref":"#/$defs/componentStringValueSource"}},"required":["id","parameter","value"]}},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"url":{"$ref":"#/$defs/componentStringValueSource"}},"additionalProperties":false,"required":["type","id"]},{"title":"CheckboxGroupInputComponent","description":"A group of checkboxes for selecting one or more options, represented as an array of strings in form data.","type":"object","properties":{"type":{"const":"CheckboxGroupInput"},"displayType":{"description":"The style to use for items. For indicators, each item is rendered with a checkbox icon, and its children are rendered inside a label that refers to the checkbox input element. For cards, there is default styling with each item's border color indicating whether it is checked. Defaults to indicators.","type":"string","enum":["indicators","cards"]},"id":{"type":"string","minLength":1},"itemsContainerStyles":{"$ref":"#/$defs/componentStyleRules"},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"required":{"type":"boolean"},"showIndicators":{"description":"Whether to show indicators for each item. Applies only if displayType is indicators. Defaults to true.","type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"CheckboxGroupInputItemComponent","description":"A checkbox item within a checkbox group input.","type":"object","properties":{"type":{"const":"CheckboxGroupInputItem"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"value":{"$ref":"#/$defs/componentStringValueSource"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"CheckboxInputComponent","description":"A standalone checkbox. Represented as either a boolean or a string in form data. If value is set to a string and is not an empty string, it is used as the value for the input when the box is checked. Otherwise, a boolean is set as the value when the box is checked or unchecked.","type":"object","properties":{"type":{"const":"CheckboxInput"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"value":{"$ref":"#/$defs/componentStringValueSource"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"CollapsiblePanelComponent","description":"A panel that can be collapsed or expanded.","type":"object","properties":{"type":{"const":"CollapsiblePanel"},"header":{"description":"The text displayed in the clickable header.","type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"triggerButtonStyles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"CompletableVideoInputComponent","type":"object","properties":{"type":{"const":"CompletableVideoInput"},"collapseCompleted":{"description":"By default, collapseCompleted is false.","type":"boolean"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"id":{"type":"string","minLength":1},"initiallyCollapsed":{"description":"Default initialCollapsed is false.","type":"boolean"},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"required":{"type":"boolean"},"showHeader":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"src":{"type":"string"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"ConditionalLogicComponent","type":"object","properties":{"type":{"const":"ConditionalLogic"},"condition":{"$ref":"#/$defs/expressionBooleanExpression"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"CourseComponent","type":"object","properties":{"type":{"const":"Course"},"courseId":{"description":"If set, a Course is used instead of the legacy Plan.","type":"string"},"emptyNotesMessage":{"type":"string"},"enableNotes":{"type":"boolean"},"id":{"type":"string","minLength":1},"planId":{"type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"CurrentYearComponent","description":"Displays the current year.","type":"object","properties":{"type":{"const":"CurrentYear"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"CustomComponentComponent","description":"A custom component (a saved fragment of components).","type":"object","properties":{"type":{"const":"CustomComponent"},"customComponentId":{"description":"The ID of the custom component to display.","type":"string"},"customProps":{"$ref":"#/$defs/contextData"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","customComponentId","id"]},{"title":"DashboardComponent","description":"A dashboard layout with a header, sidebar, and main content area.","type":"object","properties":{"type":{"const":"Dashboard"},"collapseSidebarOnPaths":{"description":"An array of path patterns as globs. If set, the sidebar will automatically be collapsed on matching paths.","type":"array","items":{"type":"string"}},"extraNavItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"id":{"type":"string","minLength":1},"mainNavItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"DateInputComponent","type":"object","properties":{"type":{"const":"DateInput"},"clearable":{"type":"boolean"},"dayPlaceholder":{"type":"string"},"id":{"type":"string","minLength":1},"inputElementStyles":{"$ref":"#/$defs/componentStyleRules"},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"maximumDate":{"anyOf":[{"type":"object","properties":{"type":{"const":"today"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"date"},"value":{"type":"string"}},"required":["type","value"]}]},"minimumDate":{"anyOf":[{"type":"object","properties":{"type":{"const":"today"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"date"},"value":{"type":"string"}},"required":["type","value"]}]},"monthPlaceholder":{"type":"string"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"style":{"type":"string","enum":["Calendar","3Fields"]},"styles":{"$ref":"#/$defs/componentStyleRules"},"yearPlaceholder":{"type":"string"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"DialogComponent","type":"object","properties":{"type":{"const":"Dialog"},"closeOnBackdropClick":{"description":"Whether the dialog can be closed by clicking the backdrop. Defaults to true.","type":"boolean"},"hideTriggers":{"description":"A list of events that will trigger the dialog to be hidden.","type":"array","items":{"$ref":"#/$defs/componentTrigger"}},"id":{"type":"string","minLength":1},"showTriggers":{"description":"A list of events that will trigger the dialog to be shown.","type":"array","items":{"$ref":"#/$defs/componentTrigger"}},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"DocumentComponent","description":"A component that displays a document that can be downloaded.","type":"object","properties":{"type":{"const":"Document"},"documentId":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"DropdownInputComponent","type":"object","properties":{"type":{"const":"DropdownInput"},"clearable":{"description":"Clearable is ignored if the input is required. When the input is not required, it may or may not be clearable. The default is false.","type":"boolean"},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"options":{"description":"The options to show. Each option's value is both the label displayed and the value.","type":"array","items":{"type":"object","properties":{"key":{"type":"number"},"value":{"type":"string"}},"required":["key","value"]}},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name","options"]},{"title":"FormComponent","type":"object","properties":{"type":{"const":"Form"},"formId":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"FormStepComponent","description":"Represents the current step in a multi-step form.","type":"object","properties":{"type":{"const":"FormStep"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"GooglePlaceInputComponent","description":"A map with a search field that lets you select a Place in Google Maps.","type":"object","properties":{"type":{"const":"GooglePlaceInput"},"id":{"type":"string","minLength":1},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","name"]},{"title":"HeaderComponent","description":"A header component with navigation items and a slot for other components. Children components must have either the LeftContent or RightContent slot property set to be rendered. No default styling is applied to children. Notice that children for either the left or right need to be enabled explicitly on mobile screens (up to 767px wide) with the showLeftContentOnMobile or showRightContentOnMobile properties. The navAlign property specifies the alignment of the navigation items element: if Center, then the nav is centered; if Left, then the nav is on the left but immediately to the right of the children with the LeftContent slot, if any; if Right, then the nav is on the right but immediately to the left of the children with the RightContent slot, if any.","type":"object","properties":{"type":{"const":"Header"},"contentMaxWidth":{"$ref":"#/$defs/componentWidth"},"id":{"type":"string","minLength":1},"navAlign":{"$ref":"#/$defs/componentAlign"},"navItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"showLeftContentOnMobile":{"description":"If true, the left content is shown on mobile. Defaults to false.","type":"boolean"},"showRightContentOnMobile":{"description":"If true, the right content is shown on mobile. Defaults to false.","type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"sticky":{"description":"If true, the header is sticky upon scrolling. Defaults to false.","type":"boolean"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"HelpTicketsPortalComponent","description":"A portal for help tickets.","type":"object","properties":{"type":{"const":"HelpTicketsPortal"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"HTMLComponent","description":"A component that renders raw HTML.","type":"object","properties":{"type":{"const":"HTML"},"html":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"IconComponent","type":"object","properties":{"type":{"const":"Icon"},"alt":{"description":"The alternative text for the icon. This should be provided only for icons that serve some purpose on their own other than decoration. Decorative icons should omit alt text to avoid unnecessary screen reader announcements.","type":"string"},"ariaHidden":{"description":"If true, the icon is hidden from the accessibility tree. This should be set to true for purely decorative icons.","type":"boolean"},"icon":{"type":"object","properties":{"type":{"const":"Direct"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"MaterialSymbols"},"value":{"type":"object","properties":{"fill":{"description":"If true, the icon's filled variant is used. Defaults to false.","type":"boolean"},"name":{"description":"The name of the icon. Must be one of the defined Material Symbols.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"opticalSize":{"description":"The optical size of the icon, for optimizing the appearance at different sizes. For icons rendered at 34px width or smaller, use 20. For icons rendered at bigger than 34px width, use 48. This is also the default width and height of the icon in pixels. Can be used together with CSS width and height properties. Defaults to 20.","type":"number","enum":[20,48]},"style":{"description":"The style of the icon. The outlined style is a sort of hybrid of rounded and sharp, and depending on the icon it may look exactly the same as either the rounded or sharp style. Defaults to outlined.","type":"string","enum":["outlined","rounded","sharp"]},"weight":{"description":"The weight of the icon. Similar to font-weight in that 200 is lighter and 600 is heavier. Defaults to 400.","type":"number","enum":[200,400,600]}}}},"required":["type"]}]}},"required":["type"]},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"ImageComponent","description":"A component that displays an image.","type":"object","properties":{"type":{"const":"Image"},"alt":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"src":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageFeaturedImage","SiteLogo"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Asset"},"assetId":{"type":"string"},"variantId":{"description":"Optional ID of a specific variant to use. Should not be set together with variantIds. If not provided and variantIds is also not provided or is empty, the image is rendered with a srcset including all variants by default.","type":"string"},"variantIds":{"description":"Optional IDs of specific variants to use in the srcset attribute. Should not be set together with variantId.","type":"array","items":{"type":"string"}}},"required":["type"]}]},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"LessonNotesFieldComponent","description":"A text field for users to save notes related to a lesson (for courses).","type":"object","properties":{"type":{"const":"LessonNotesField"},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label"]},{"title":"LinkComponent","description":"A link.","type":"object","properties":{"type":{"const":"Link"},"id":{"type":"string","minLength":1},"linkStyle":{"description":"Controls the visual style of the link. When \\"Button\\", renders a Button component with asChild prop and a Link inside.","type":"string","enum":["Text","Button"]},"protocol":{"description":"Adds the specified protocol prefix to the href attribute's value.","type":"string","enum":["mailto","tel","sms"]},"size":{"description":"Controls the size of the button. Options are: '1' (12px font size), '2' (default, 14px font size), '3' (16px font size), and '4' (18px font size).","type":"string","enum":["1","2","3","4"]},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"target":{"type":"string","enum":["_blank","_self","_parent","_top"]},"to":{"description":"The URL that the link points to. A router link will be rendered for a path without a host (using the History API). A regular link will be rendered for a full URL.","$ref":"#/$defs/componentStringValueSource"},"variant":{"description":"Controls the visual style of the button. Options are: 'solid' (default, filled background), 'soft' (lighter background, --accent-a11 text), 'surface' (subtle background, solid border, --accent-a11 text), 'outline' (transparent background, solid border, --accent-a11 text), and 'ghost' (no background, no border, --accent-a11 text, behaves like text in layout with negative margins).","type":"string","enum":["solid","soft","surface","outline","ghost"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"MapComponent","description":"A component that displays a map. The focus property is the place to display. It can be the name of a location (the way it appears on Google Maps), an address, or a place ID with the prefix 'place_id:'.","type":"object","properties":{"type":{"const":"Map"},"focus":{"$ref":"#/$defs/componentNullableStringValueSource"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"MoveUserPlanComponent","description":"A component for a user to move between sequence stages.","type":"object","properties":{"type":{"const":"MoveUserPlan"},"id":{"type":"string","minLength":1},"nextButtonLabel":{"type":"string"},"previousButtonLabel":{"type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"MultiOrgViewComponent","description":"A view for viewing all the orgs under a subscription, including all the users of each org and their training progress.","type":"object","properties":{"type":{"const":"MultiOrgView"},"id":{"type":"string","minLength":1},"showUserTrainingProgress":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"userTrainingProgressContentPlanIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressCourseIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressSequenceIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"required":["type","id"]},{"title":"MultipleChoiceInputComponent","type":"object","properties":{"type":{"const":"MultipleChoiceInput"},"answerIndex":{"type":"number"},"choices":{"type":"array","items":{"type":"string"}},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"question":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"MultiSelectInputComponent","type":"object","properties":{"type":{"const":"MultiSelectInput"},"answerIndices":{"type":"array","items":{"type":"number"}},"choices":{"type":"array","items":{"type":"string"}},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"question":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"NumberInputComponent","type":"object","properties":{"type":{"const":"NumberInput"},"format":{"type":"string","enum":["Number","Currency","Integer"]},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"maxDecimalDigits":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"OrderFormComponent","description":"An order form for checking out for a subscription.","type":"object","properties":{"type":{"const":"OrderForm"},"checkoutOptions":{"description":"The products to display in the form. Each product may optionally have a condition that needs to evaluate to true for the product to be displayed.","type":"array","items":{"type":"object","properties":{"condition":{"$ref":"#/$defs/expressionBooleanExpression"},"subscriptionPlanId":{"type":"string"}},"required":["subscriptionPlanId"]}},"enablePhoneNumber":{"description":"Whether to enable a phone number input field. Defaults to true.","type":"boolean"},"enablePromoCode":{"description":"Whether to enable a promo code input field. If set to Stripe, only Stripe promo codes are allowed. If set to Custom, only custom promo codes are allowed. Defaults to none.","type":"string","enum":["Stripe","Custom"]},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"OrgBillingSettingsComponent","description":"Org billing settings dashboard.","type":"object","properties":{"type":{"const":"OrgBillingSettings"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"OrgSitePagesComponent","description":"Shows the pages of an org site and allows authorized users to activate and edit pages.","type":"object","properties":{"type":{"const":"OrgSitePages"},"defaultPageTemplatePreviewImageUrl":{"type":"string"},"id":{"type":"string","minLength":1},"pageTemplates":{"type":"object","properties":{"filter":{"type":"string","enum":["include","exclude"]},"ids":{"type":"array","items":{"type":"string"}}},"required":["filter","ids"]},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"OrgSiteReviewsComponent","description":"Organization site reviews component.","type":"object","properties":{"type":{"const":"OrgSiteReviews"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"OrganizationTeamComponent","description":"Organization team/members dashboard.","type":"object","properties":{"type":{"const":"OrganizationTeam"},"id":{"type":"string","minLength":1},"showUserTrainingProgress":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"userTrainingProgressContentPlanIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressCourseIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"required":["type","id"]},{"title":"PageComponent","description":"Represents the current page when rendered inside a layout.","type":"object","properties":{"type":{"const":"Page"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"PlainTextComponent","type":"object","properties":{"type":{"const":"PlainText"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"tag":{"description":"The HTML tag to use for the element. Defaults to span.","type":"string","enum":["code","div","h1","h2","h3","h4","h5","h6","label","legend","li","p","span"]},"text":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]}},"additionalProperties":false,"required":["type","id"]},{"title":"PopoverComponent","type":"object","properties":{"type":{"const":"Popover"},"hideTriggers":{"description":"A list of events that will trigger the popover to be hidden.","type":"array","items":{"$ref":"#/$defs/componentTrigger"}},"id":{"type":"string","minLength":1},"showTriggers":{"description":"A list of events that will trigger the popover to be shown.","type":"array","items":{"$ref":"#/$defs/componentTrigger"}},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"ProductItemGuardComponent","description":"Ensures that a user is signed in and belongs to an org that has access to the specified product item in an active subscription. Otherwise, the component shows a default message, a custom children, or nothing, depending on how it is configured. The styling applies only to the default message.","type":"object","properties":{"type":{"const":"ProductItemGuard"},"accessDeniedMode":{"description":"The default accessDeniedMode is DefaultMessage. A custom message is defined through children with an AccessDenied slot key.","type":"string","enum":["CustomMessage","DefaultMessage","Empty"]},"id":{"type":"string","minLength":1},"productItem":{"description":"The product item to require. If not set, this component does not require anything and displays its children.","type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"ProvidePropsComponent","type":"object","properties":{"type":{"const":"ProvideProps"},"id":{"type":"string","minLength":1},"props":{"type":"array","items":{"type":"object","properties":{"id":{"description":"A random unique string for identification.","type":"string"},"name":{"description":"The name of the prop to provide.","type":"string"},"source":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Number"},"value":{"type":"number"}},"required":["type","value"]},{"type":"object","properties":{"type":{"const":"String"},"value":{"type":"string"}},"required":["type","value"]}]}},"required":["type","value"]},{"description":"The output is a function of the input using one of the built-in format functions.","type":"object","properties":{"type":{"const":"Transform"},"format":{"type":"string","enum":["Phone number (###) ###-####","Phone number ###-###-####","U.S. State abbreviation spelled out"]},"inputPropName":{"description":"Used only in transform mode.","type":"string"}},"required":["type"]},{"description":"Produce the output prop from the LiquidJS template.","type":"object","properties":{"type":{"const":"Template"},"template":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"CustomField"},"fieldName":{"type":"string"},"object":{"description":"The object from which to read the specified field. For a page template being previewed, when the object is 'Page' the custom fields are taken instead from the page template.","type":"string","enum":["Site","Page","User"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]}},"required":["id","name","source"]}},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"QueryComponent","description":"A component that queries data and provides it as props to its children. Supports pagination and provides metadata about the query results.","type":"object","properties":{"type":{"const":"Query"},"id":{"type":"string","minLength":1},"pageLimitSource":{"description":"The source of the page limit. Defaults to a Direct value of 20.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"number"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type","parameter"]}]},"pageNumberSource":{"description":"The source of the page number. Defaults to QueryParameter 'page'. Pagination is 1-based (i.e., the first page is page 1).","anyOf":[{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type","parameter"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"props":{"description":"Configuration for the props that will be provided to children components.","type":"object","properties":{"items":{"description":"The prop name for the array of items returned by the query. Defaults to 'items'.","type":"string"},"currentPage":{"description":"The prop name for the current page number. Defaults to 'currentPage'.","type":"string"},"hasNextPage":{"description":"The prop name for whether there is a next page. Defaults to 'hasNextPage'.","type":"string"},"hasPreviousPage":{"description":"The prop name for whether there is a previous page. Defaults to 'hasPreviousPage'.","type":"string"},"pageLimit":{"description":"The prop name for the actual number of items per page (returned by the server). Defaults to 'pageLimit'.","type":"string"},"totalItemsCount":{"description":"The prop name for the total number of items matching the filter. Defaults to 'totalItemsCount'.","type":"string"},"totalPagesCount":{"description":"The prop name for the total number of pages. Defaults to 'totalPagesCount'.","type":"string"}}},"slot":{"$ref":"#/$defs/componentSlot"},"source":{"description":"The data source configuration for the query.","anyOf":[{"description":"Fetch pages matching a set of filter conditions. Only published pages are included. Each element will be an object with the following properties: 'id', 'path', 'title', 'publishedAt', 'props'. The 'props' property will be the parsed page props.","type":"object","properties":{"type":{"const":"Pages"},"filter":{"description":"The filter to apply to select pages.","type":"object","properties":{"pathPrefix":{"description":"The path prefix to require for pages. Defaults to all paths.","type":"string"},"props":{"description":"A set of props to filter by. The prop values must be strings.","type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}}}}},"required":["type"]}]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"RadioGroupInputComponent","type":"object","properties":{"type":{"const":"RadioGroupInput"},"defaultValue":{"$ref":"#/$defs/componentStringValueSource"},"displayType":{"description":"The style to use for items. For indicators, each item is rendered with a bubble icon, and its children are rendered inside a label that refers to the radio input element. For cards, there is default styling with each item's border color indicating whether it is the one selected. Defaults to indicators.","type":"string","enum":["indicators","cards"]},"id":{"type":"string","minLength":1},"itemsContainerStyles":{"$ref":"#/$defs/componentStyleRules"},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"value":{"$ref":"#/$defs/componentStringValueSource"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"RadioGroupInputItemComponent","description":"A radio item within a radio group input.","type":"object","properties":{"type":{"const":"RadioGroupInputItem"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"value":{"$ref":"#/$defs/componentStringValueSource"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"RemoteComponentComponent","description":"A component that dynamically loads a remote React component with custom code from an extension.","type":"object","properties":{"type":{"const":"RemoteComponent"},"componentName":{"description":"The name of the component to display.","type":"string"},"customProps":{"$ref":"#/$defs/contextData"},"extensionName":{"description":"The name of the extension that contains the remote component.","type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","componentName","extensionName","id"]},{"title":"RepeaterComponent","description":"A component that repeats a set of children for each item of an array or property of an object. Children are rendered with a prop for the current item. The key prop is the index for array items and the property name for objects. There is no wrapping element for children.","type":"object","properties":{"type":{"const":"Repeater"},"id":{"type":"string","minLength":1},"itemPropName":{"description":"The name of the prop for the current item. This is the array element for an array source, or the value of a property for an object source. Defaults to 'item'.","type":"string"},"keyPropName":{"description":"The name of the prop for the index or key of the current item. Defaults to 'key'.","type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"source":{"description":"The data to iterate over. Needs to evaluate to an array or an object.","anyOf":[{"description":"Use a prop as the data source.","type":"object","properties":{"type":{"const":"Prop"},"name":{"description":"The name of the prop providing the array or object.","type":"string"}},"required":["type","name"]}]},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"RepeatingGroupInputComponent","description":"An input component that can include multiple input components and other components, allowing an array of records to be entered.","type":"object","properties":{"type":{"const":"RepeatingGroupInput"},"id":{"type":"string","minLength":1},"name":{"type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id","name"]},{"title":"RequestPasswordResetComponent","description":"A component to request password reset.","type":"object","properties":{"type":{"const":"RequestPasswordReset"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"ResetPasswordComponent","description":"A component to reset a password.","type":"object","properties":{"type":{"const":"ResetPassword"},"id":{"type":"string","minLength":1},"mode":{"type":"string","enum":["create","reset"]},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"ReviewComponent","description":"Displays a review form with 1-5 stars and redirects to the configured Google Place if the user clicks 5 stars.","type":"object","properties":{"type":{"const":"Review"},"googlePlace":{"$ref":"#/$defs/componentNullableStringValueSource"},"id":{"type":"string","minLength":1},"reviewFieldPlaceholder":{"type":"string"},"selectStarsLabel":{"type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"SignInGuardComponent","type":"object","properties":{"type":{"const":"SignInGuard"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"SiteLogoComponent","description":"A component that displays the site logo.","type":"object","properties":{"type":{"const":"SiteLogo"},"alt":{"description":"Alternative text for the logo, defaults to the site name","type":"string"},"fallbackSiteName":{"description":"Whether to display the site name if the logo is not available","type":"boolean"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"SitePrivacyPolicyComponent","description":"A component that displays the site privacy policy.","type":"object","properties":{"type":{"const":"SitePrivacyPolicy"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"SiteTermsOfUseComponent","description":"A component that displays the site terms of use.","type":"object","properties":{"type":{"const":"SiteTermsOfUse"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"StageComponent","description":"A stage in a sequence.","type":"object","properties":{"type":{"const":"Stage"},"enableWrappedStageBody":{"description":"Whether to enable the wrapped stage body","type":"boolean"},"id":{"type":"string","minLength":1},"sequenceId":{"type":"string"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"StageBodyComponent","description":"The body of a stage in a sequence.","type":"object","properties":{"type":{"const":"StageBody"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"StageNameComponent","description":"A component that displays the name of a stage.","type":"object","properties":{"type":{"const":"StageName"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"TextComponent","description":"A component that displays rich text. The content property should be an object with a delta property set to a Quill Delta object.","type":"object","properties":{"type":{"const":"Text"},"content":{"$ref":"#/$defs/richText"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"}},"additionalProperties":false,"required":["type","id"]},{"title":"TextInputComponent","type":"object","properties":{"type":{"const":"TextInput"},"defaultValue":{"$ref":"#/$defs/componentStringValueSource"},"format":{"description":"Validation format for the input","type":"string","enum":["None","Email","Phone","Url"]},"id":{"type":"string","minLength":1},"inputElementStyles":{"$ref":"#/$defs/componentStyleRules"},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"maxLength":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"TextareaInputComponent","type":"object","properties":{"type":{"const":"TextareaInput"},"defaultValue":{"$ref":"#/$defs/componentStringValueSource"},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"maxLength":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label","name"]},{"title":"ThemeComponent","type":"object","properties":{"type":{"const":"Theme"},"appearance":{"type":"string","enum":["light","dark","inherit"]},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"TypeformComponent","description":"A component that embeds a Typeform.","type":"object","properties":{"type":{"const":"Typeform"},"formId":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"UserProfileComponent","description":"A component that displays a user profile.","type":"object","properties":{"type":{"const":"UserProfile"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"VerifiedEmailAddressGuardComponent","description":"Requires that a user be signed in and have a verified email address. Otherwise displays either a message that you need to be signed in or a message and a button to send a verification email.","type":"object","properties":{"type":{"const":"VerifiedEmailAddressGuard"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]},{"title":"VerifyEmailAddressComponent","description":"Reads a URL query parameter that contains a unique token for verifying a user’s email address and makes an API request to mark the email address as verified. If the token is valid, it displays a message that the email address has been verified. Otherwise, it displays an error message. In either case, at the bottom it displays a 'Go to {siteName}' link that navigates to the home page.","type":"object","properties":{"type":{"const":"VerifyEmailAddress"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id"]},{"title":"VideoComponent","description":"A component that displays a video.","type":"object","properties":{"type":{"const":"Video"},"autoPlay":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"controls":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"id":{"type":"string","minLength":1},"loop":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"muted":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"playsInline":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"poster":{"description":"The URL of an image to display while the video is loading. Applicable only when tag is 'video'.","$ref":"#/$defs/componentStringValueSource"},"slot":{"$ref":"#/$defs/componentSlot"},"src":{"$ref":"#/$defs/componentStringValueSource"},"styles":{"$ref":"#/$defs/componentStyleRules"},"tag":{"description":"The way to render the video. Defaults to 'iframe'.","type":"string","enum":["iframe","video"]}},"additionalProperties":false,"required":["type","id"]},{"title":"ViewPlanStagesButtonComponent","description":"A button that opens a dialog that displays the stages of a sequence and allows the user to move to another stage.","type":"object","properties":{"type":{"const":"ViewPlanStagesButton"},"dialogHeader":{"type":"string"},"id":{"type":"string","minLength":1},"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyleRules"},"slot":{"$ref":"#/$defs/componentSlot"},"stageNameTableHeader":{"type":"string"},"styles":{"$ref":"#/$defs/componentStyleRules"}},"additionalProperties":false,"required":["type","id","label"]},{"title":"WidthContainerComponent","description":"A div element that sets the max-width property to a specified width (defaults to 1200px). The default alignment is Center. An additional div is rendered to wrap the children to set alignment. That inner div (the direct parent element of children) cannot be styled. Only the WidthContainerComponent's outer element gets the styles, if any.","type":"object","properties":{"type":{"const":"WidthContainer"},"align":{"$ref":"#/$defs/componentAlign"},"elementId":{"type":"string"},"id":{"type":"string","minLength":1},"slot":{"$ref":"#/$defs/componentSlot"},"styles":{"$ref":"#/$defs/componentStyleRules"},"width":{"$ref":"#/$defs/componentWidth"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","id"]}]}`);
|
|
27146
26872
|
const $defs$6 = /* @__PURE__ */ JSON.parse(`{"componentAlign":{"type":"string","enum":["Center","Left","Right"]},"componentNavItem":{"type":"object","properties":{"id":{"description":"A random unique string for identification.","type":"string"},"label":{"description":"The text to display in the nav item.","type":"string"},"openInNewTab":{"type":"boolean"},"productItem":{"description":"If set, then only signed in users with access to the specified product item will see this nav item.","type":["string","null"]},"roles":{"description":"If set and not empty, then only signed in users with one of the specified roles will see this nav item.","type":"array","items":{"type":"string"}},"subItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItemLeaf"}},"url":{"description":"The URL to navigate to when the nav item is clicked. Can be an absolute path. Can also be an anchor link (e.g., #pricing).","type":"string"}},"required":["id","label"]},"componentNavItemLeaf":{"type":"object","properties":{"id":{"description":"A random unique string for identification.","type":"string"},"label":{"description":"The text to display in the nav item.","type":"string"},"openInNewTab":{"type":"boolean"},"productItem":{"description":"If set, then only signed in users with access to the specified product item will see this nav item.","type":["string","null"]},"roles":{"description":"If set and not empty, then only signed in users with one of the specified roles will see this nav item.","type":"array","items":{"type":"string"}},"url":{"description":"The URL to navigate to when the nav item is clicked. Can be an absolute path. Can also be an anchor link (e.g., #pricing).","type":"string"}},"required":["id","label","url"]},"componentNullableStringValueSource":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":["string","null"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"componentSlot":{"type":"string","enum":["True","False","AccessAllowed","AccessDenied","LeftContent","RightContent"]},"componentStringValueSource":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"componentStyleRules":{"type":"array","items":{"type":"object","properties":{"condition":{"$ref":"#/$defs/expressionBooleanExpression"},"declarations":{"description":"A list of declarations. Each property must be either a CSS property or a custom property.","type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"property":{"type":"string"},"value":{"type":"string"}},"required":["id","property","value"]}},"id":{"type":"string"},"minWidth":{"description":"Optional min-width media query for this rule. If not set, the rule applies to all widths.","type":"string","enum":["sm","md","lg","xl","xxl"]},"states":{"description":"Optional pseudo-classes for this rule to apply to. Multiple classes are combined (e.g., ':hover:last-child').","type":"array","items":{"type":"string","enum":["active","disabled","first-child","focus","focus-visible","focus-within","hover","last-child","only-child"]}}},"required":["declarations","id"]}},"componentTrigger":{"description":"A specification for an event that will trigger some action. The condition property is an expression that, if set, needs to evaluate to true for the trigger to apply.","type":"object","properties":{"condition":{"$ref":"#/$defs/expressionBooleanExpression"},"eventType":{"description":"The expected event type for the trigger to apply.","type":"string"},"id":{"description":"A random unique string for identification.","type":"string"}},"required":["eventType","id"]},"componentWidth":{"type":"string","enum":["400px","500px","600px","800px","1000px","1200px","1400px","1600px"]},"contextData":{"title":"ContextData","type":"object","additionalProperties":{"$ref":"#/$defs/contextDataDataValue"}},"contextDataDataTableRow":{"type":"object","properties":{"data":{"$ref":"#/$defs/contextData"},"id":{"type":"string"}},"required":["data","id"]},"contextDataDataValue":{"anyOf":[{"type":"boolean"},{"type":"string"},{"type":"number"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/contextDataDataTableRow"}},{"$ref":"#/$defs/contextDataUploadedFile"},{"type":"array","items":{"type":"string"}}]},"contextDataUploadedFile":{"type":"object","properties":{"fileId":{"type":"string"}},"required":["fileId"]},"expression":{"title":"Expression","anyOf":[{"$ref":"#/$defs/expressionArrayExpression"},{"$ref":"#/$defs/expressionBooleanExpression"},{"$ref":"#/$defs/expressionNumberExpression"},{"$ref":"#/$defs/expressionStringExpression"}]},"expressionAll":{"type":"object","properties":{"arrayExpression":{"$ref":"#/$defs/expressionArrayExpression"},"condition":{"$ref":"#/$defs/expressionBooleanExpression"},"operator":{"const":"all"}},"required":["arrayExpression","condition","operator"]},"expressionArrayExpression":{"anyOf":[{"$ref":"#/$defs/expressionArrayLiteral"},{"$ref":"#/$defs/expressionFilter"},{"$ref":"#/$defs/expressionMap"},{"$ref":"#/$defs/expressionUserProductItems"},{"$ref":"#/$defs/expressionDynamicValue"}]},"expressionArrayIncludes":{"type":"object","properties":{"arrayExpression":{"$ref":"#/$defs/expressionArrayExpression"},"operator":{"const":"arrayIncludes"},"value":{"$ref":"#/$defs/expression"}},"required":["arrayExpression","operator","value"]},"expressionArrayLiteral":{"type":"object","properties":{"operator":{"const":"arrayLiteral"},"value":{"type":"array","items":{"$ref":"#/$defs/expression"}}},"required":["operator","value"]},"expressionBooleanExpression":{"anyOf":[{"$ref":"#/$defs/expressionAll"},{"$ref":"#/$defs/expressionArrayIncludes"},{"$ref":"#/$defs/expressionBoth"},{"$ref":"#/$defs/expressionBooleanLiteral"},{"$ref":"#/$defs/expressionEither"},{"$ref":"#/$defs/expressionEquals"},{"$ref":"#/$defs/expressionExists"},{"$ref":"#/$defs/expressionGreaterThan"},{"$ref":"#/$defs/expressionNot"},{"$ref":"#/$defs/expressionSome"},{"$ref":"#/$defs/expressionDynamicValue"}]},"expressionBooleanLiteral":{"type":"object","properties":{"operator":{"const":"booleanLiteral"},"value":{"type":"boolean"}},"required":["operator","value"]},"expressionBoth":{"type":"object","properties":{"left":{"$ref":"#/$defs/expressionBooleanExpression"},"operator":{"const":"both"},"right":{"$ref":"#/$defs/expressionBooleanExpression"}},"required":["left","operator","right"]},"expressionCurrentTime":{"description":"A timestamp in milliseconds since epoch.","type":"object","properties":{"operator":{"const":"currentTime"}},"required":["operator"]},"expressionDataValue":{"description":"Access a value from the data object. The source of the data depends on the context. For example, in a form the data object is the form data and the name is the name of the input component.","type":"object","properties":{"name":{"type":"string"},"operator":{"const":"dataValue"}},"required":["name","operator"]},"expressionDynamicValue":{"anyOf":[{"$ref":"#/$defs/expressionDataValue"},{"$ref":"#/$defs/expressionProp"}]},"expressionEither":{"type":"object","properties":{"left":{"$ref":"#/$defs/expressionBooleanExpression"},"operator":{"const":"either"},"right":{"$ref":"#/$defs/expressionBooleanExpression"}},"required":["left","operator","right"]},"expressionEquals":{"type":"object","properties":{"left":{"$ref":"#/$defs/expression"},"operator":{"const":"equals"},"right":{"$ref":"#/$defs/expression"}},"required":["left","operator","right"]},"expressionEventType":{"description":"Access the type set on an event. Applicable only in contexts where the expression deals with an event.","type":"object","properties":{"operator":{"const":"eventType"}},"required":["operator"]},"expressionExists":{"type":"object","properties":{"expression":{"$ref":"#/$defs/expression"},"operator":{"const":"exists"}},"required":["expression","operator"]},"expressionFilter":{"type":"object","properties":{"arrayExpression":{"$ref":"#/$defs/expressionArrayExpression"},"filterExpression":{"$ref":"#/$defs/expressionBooleanExpression"},"operator":{"const":"filter"}},"required":["arrayExpression","filterExpression","operator"]},"expressionGreaterThan":{"type":"object","properties":{"left":{"$ref":"#/$defs/expressionNumberExpression"},"operator":{"const":"greaterThan"},"right":{"$ref":"#/$defs/expressionNumberExpression"}},"required":["left","operator","right"]},"expressionLength":{"type":"object","properties":{"operator":{"const":"length"},"value":{"anyOf":[{"$ref":"#/$defs/expressionArrayExpression"},{"$ref":"#/$defs/expressionStringExpression"}]}},"required":["operator","value"]},"expressionMap":{"type":"object","properties":{"arrayExpression":{"$ref":"#/$defs/expressionArrayExpression"},"mapExpression":{"$ref":"#/$defs/expression"},"operator":{"const":"map"}},"required":["arrayExpression","mapExpression","operator"]},"expressionNot":{"type":"object","properties":{"expression":{"$ref":"#/$defs/expressionBooleanExpression"},"operator":{"const":"not"}},"required":["expression","operator"]},"expressionNumberExpression":{"anyOf":[{"$ref":"#/$defs/expressionCurrentTime"},{"$ref":"#/$defs/expressionLength"},{"$ref":"#/$defs/expressionNumberLiteral"},{"$ref":"#/$defs/expressionSum"},{"$ref":"#/$defs/expressionSumArray"},{"$ref":"#/$defs/expressionTimeLiteral"},{"$ref":"#/$defs/expressionDynamicValue"}]},"expressionNumberLiteral":{"type":"object","properties":{"operator":{"const":"numberLiteral"},"value":{"type":"number"}},"required":["operator","value"]},"expressionProp":{"description":"Access a value from props. Applicable only in contexts where the expression deals with props.","type":"object","properties":{"name":{"type":"string"},"operator":{"const":"prop"}},"required":["name","operator"]},"expressionSome":{"type":"object","properties":{"arrayExpression":{"$ref":"#/$defs/expressionArrayExpression"},"condition":{"$ref":"#/$defs/expressionBooleanExpression"},"operator":{"const":"some"}},"required":["arrayExpression","condition","operator"]},"expressionStringExpression":{"anyOf":[{"$ref":"#/$defs/expressionEventType"},{"$ref":"#/$defs/expressionStringLiteral"},{"$ref":"#/$defs/expressionUserRole"},{"$ref":"#/$defs/expressionDynamicValue"}]},"expressionStringLiteral":{"type":"object","properties":{"operator":{"const":"stringLiteral"},"value":{"type":"string"}},"required":["operator","value"]},"expressionSum":{"type":"object","properties":{"left":{"$ref":"#/$defs/expressionNumberExpression"},"operator":{"const":"sum"},"right":{"$ref":"#/$defs/expressionNumberExpression"}},"required":["left","operator","right"]},"expressionSumArray":{"type":"object","properties":{"arrayExpression":{"$ref":"#/$defs/expressionArrayExpression"},"operator":{"const":"sumArray"}},"required":["arrayExpression","operator"]},"expressionTimeLiteral":{"description":"A timestamp in milliseconds since epoch.","type":"object","properties":{"operator":{"const":"timeLiteral"},"value":{"type":"number"}},"required":["operator","value"]},"expressionUserProductItems":{"type":"object","properties":{"operator":{"const":"userProductItems"}},"required":["operator"]},"expressionUserRole":{"type":"object","properties":{"operator":{"const":"userRole"}},"required":["operator"]},"richText":{"title":"RichText","oneOf":[{"title":"Delta","type":"object","properties":{"delta":{"type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"attributes":{"type":"object","additionalProperties":true},"insert":{"oneOf":[{"type":"string"},{"type":"object","additionalProperties":true}]}},"required":["insert"]}}},"required":["ops"]}},"required":["delta"]}]}}`);
|
|
27147
|
-
const $id$
|
|
26873
|
+
const $id$c = "/designer/components.json";
|
|
27148
26874
|
const componentsSchema = {
|
|
27149
|
-
type: type$
|
|
26875
|
+
type: type$c,
|
|
27150
26876
|
items: items$2,
|
|
27151
26877
|
$defs: $defs$6,
|
|
27152
|
-
$id: $id$
|
|
26878
|
+
$id: $id$c
|
|
27153
26879
|
};
|
|
27154
|
-
const type$
|
|
27155
|
-
const items$1 = /* @__PURE__ */ JSON.parse(`{"anyOf":[{"description":"An element for wrapping children elements.","type":"object","properties":{"type":{"const":"Box"},"elementId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"tag":{"description":"The HTML tag to use for the element. Defaults to div.","type":"string","enum":["article","aside","blockquote","code","div","fieldset","footer","h1","h2","h3","h4","h5","h6","header","label","legend","li","main","nav","ol","p","pre","section","span","ul"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"Button"},"onClick":{"description":"Defaults to submitForm.","anyOf":[{"type":"object","properties":{"type":{"const":"emitEvent"},"eventType":{"description":"A string representing a custom event type, to reference in other components that listen for events.","type":"string"}},"required":["type","eventType"]},{"type":"object","properties":{"type":{"type":"string","enum":["goBack","goBackFormStep","removeRepeatingGroupInputItem","resetForm","submitForm"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["decrementQueryParameter","incrementQueryParameter"]},"defaultValue":{"type":"number"},"parameter":{"type":"string"}},"required":["type","defaultValue","parameter"]}]},"size":{"description":"Controls the size of the button. Options are: '1' (12px font size), '2' (default, 14px font size), '3' (16px font size), and '4' (18px font size).","type":"string","enum":["1","2","3","4"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"variant":{"description":"Controls the visual style of the button. Options are: 'solid' (default, filled background), 'soft' (lighter background, --accent-a11 text), 'surface' (subtle background, solid border, --accent-a11 text), 'outline' (transparent background, solid border, --accent-a11 text), and 'ghost' (no background, no border, --accent-a11 text, behaves like text in layout with negative margins).","type":"string","enum":["solid","soft","surface","outline","ghost"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"An embedded Calendly scheduling widget.","type":"object","properties":{"type":{"const":"CalendlyEmbed"},"queryParameters":{"type":"array","items":{"type":"object","properties":{"id":{"description":"A random unique string for identification.","type":"string"},"parameter":{"type":"string"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]}},"required":["id","parameter","value"]}},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"url":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]}},"additionalProperties":false,"required":["type"]},{"description":"A group of checkboxes for selecting one or more options, represented as an array of strings in form data.","type":"object","properties":{"type":{"const":"CheckboxGroupInput"},"displayType":{"description":"The style to use for items. For indicators, each item is rendered with a checkbox icon, and its children are rendered inside a label that refers to the checkbox input element. For cards, there is default styling with each item's border color indicating whether it is checked. Defaults to indicators.","type":"string","enum":["indicators","cards"]},"itemsContainerStyles":{"$ref":"#/$defs/styles"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"required":{"type":"boolean"},"showIndicators":{"description":"Whether to show indicators for each item. Applies only if displayType is indicators. Defaults to true.","type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","label","name"]},{"description":"A checkbox item within a checkbox group input.","type":"object","properties":{"type":{"const":"CheckboxGroupInputItem"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A standalone checkbox. Represented as either a boolean or a string in form data. If value is set to a string and is not an empty string, it is used as the value for the input when the box is checked. Otherwise, a boolean is set as the value when the box is checked or unchecked.","type":"object","properties":{"type":{"const":"CheckboxInput"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]}},"additionalProperties":false,"required":["type","label","name"]},{"description":"A panel that can be collapsed or expanded.","type":"object","properties":{"type":{"const":"CollapsiblePanel"},"header":{"description":"The text displayed in the clickable header.","type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"triggerButtonStyles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"CompletableVideoInput"},"collapseCompleted":{"description":"By default, collapseCompleted is false.","type":"boolean"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"initiallyCollapsed":{"description":"Default initialCollapsed is false.","type":"boolean"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"required":{"type":"boolean"},"showHeader":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"src":{"type":"string"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"ConditionalLogic"},"condition":{"$ref":"#/$defs/expressionBoolean"},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"Course"},"courseId":{"description":"If set, a Course is used instead of the legacy Plan.","type":"string"},"emptyNotesMessage":{"type":"string"},"enableNotes":{"type":"boolean"},"planId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Displays the current year.","type":"object","properties":{"type":{"const":"CurrentYear"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"description":"A custom component (a saved fragment of components).","type":"object","properties":{"type":{"const":"CustomComponent"},"customComponentId":{"description":"The ID of the custom component to display.","type":"string"},"customProps":{"$ref":"#/$defs/contextData"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type","customComponentId"]},{"description":"A dashboard layout with a header, sidebar, and main content area.","type":"object","properties":{"type":{"const":"Dashboard"},"collapseSidebarOnPaths":{"description":"An array of path patterns as globs. If set, the sidebar will automatically be collapsed on matching paths.","type":"array","items":{"type":"string"}},"extraNavItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"mainNavItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"DateInput"},"clearable":{"type":"boolean"},"dayPlaceholder":{"type":"string"},"inputElementStyles":{"$ref":"#/$defs/styles"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"maximumDate":{"anyOf":[{"type":"object","properties":{"type":{"const":"today"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"date"},"value":{"type":"string"}},"required":["type","value"]}]},"minimumDate":{"anyOf":[{"type":"object","properties":{"type":{"const":"today"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"date"},"value":{"type":"string"}},"required":["type","value"]}]},"monthPlaceholder":{"type":"string"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"style":{"type":"string","enum":["Calendar","3Fields"]},"styles":{"$ref":"#/$defs/styles"},"yearPlaceholder":{"type":"string"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"Dialog"},"closeOnBackdropClick":{"description":"Whether the dialog can be closed by clicking the backdrop. Defaults to true.","type":"boolean"},"hideTriggers":{"description":"A list of events that will trigger the dialog to be hidden.","type":"array","items":{"$ref":"#/$defs/trigger"}},"showTriggers":{"description":"A list of events that will trigger the dialog to be shown.","type":"array","items":{"$ref":"#/$defs/trigger"}},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays a document that can be downloaded.","type":"object","properties":{"type":{"const":"Document"},"documentId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"DropdownInput"},"clearable":{"description":"Clearable is ignored if the input is required. When the input is not required, it may or may not be clearable. The default is false.","type":"boolean"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"options":{"description":"The options to show. Each string is both the label displayed and the value.","type":"array","items":{"type":"string"}},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name","options"]},{"type":"object","properties":{"type":{"const":"Form"},"formId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Represents the current step in a multi-step form.","type":"object","properties":{"type":{"const":"FormStep"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"description":"A map with a search field that lets you select a Place in Google Maps.","type":"object","properties":{"type":{"const":"GooglePlaceInput"},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","name"]},{"description":"A header component with navigation items and a slot for other components. Children components must have either the LeftContent or RightContent slot property set to be rendered. No default styling is applied to children. Notice that children for either the left or right need to be enabled explicitly on mobile screens (up to 767px wide) with the showLeftContentOnMobile or showRightContentOnMobile properties. The navAlign property specifies the alignment of the navigation items element: if Center, then the nav is centered; if Left, then the nav is on the left but immediately to the right of the children with the LeftContent slot, if any; if Right, then the nav is on the right but immediately to the left of the children with the RightContent slot, if any.","type":"object","properties":{"type":{"const":"Header"},"contentMaxWidth":{"$ref":"#/$defs/width"},"navAlign":{"$ref":"#/$defs/align"},"navItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"showLeftContentOnMobile":{"description":"If true, the left content is shown on mobile. Defaults to false.","type":"boolean"},"showRightContentOnMobile":{"description":"If true, the right content is shown on mobile. Defaults to false.","type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"sticky":{"description":"If true, the header is sticky upon scrolling. Defaults to false.","type":"boolean"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A portal for help tickets.","type":"object","properties":{"type":{"const":"HelpTicketsPortal"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that renders raw HTML.","type":"object","properties":{"type":{"const":"HTML"},"html":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"Icon"},"alt":{"description":"The alternative text for the icon. This should be provided only for icons that serve some purpose on their own other than decoration. Decorative icons should omit alt text to avoid unnecessary screen reader announcements.","type":"string"},"ariaHidden":{"description":"If true, the icon is hidden from the accessibility tree. This should be set to true for purely decorative icons.","type":"boolean"},"icon":{"type":"object","properties":{"type":{"const":"Direct"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"MaterialSymbols"},"value":{"type":"object","properties":{"fill":{"description":"If true, the icon's filled variant is used. Defaults to false.","type":"boolean"},"name":{"description":"The name of the icon. Must be one of the defined Material Symbols.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"opticalSize":{"description":"The optical size of the icon, for optimizing the appearance at different sizes. For icons rendered at 34px width or smaller, use 20. For icons rendered at bigger than 34px width, use 48. This is also the default width and height of the icon in pixels. Can be used together with CSS width and height properties. Defaults to 20.","type":"number","enum":[20,48]},"style":{"description":"The style of the icon. The outlined style is a sort of hybrid of rounded and sharp, and depending on the icon it may look exactly the same as either the rounded or sharp style. Defaults to outlined.","type":"string","enum":["outlined","rounded","sharp"]},"weight":{"description":"The weight of the icon. Similar to font-weight in that 200 is lighter and 600 is heavier. Defaults to 400.","type":"number","enum":[200,400,600]}}}},"required":["type"]}]}},"required":["type"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays an image.","type":"object","properties":{"type":{"const":"Image"},"alt":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"src":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageFeaturedImage","SiteLogo"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Asset"},"assetId":{"type":"string"},"variantId":{"description":"Optional ID of a specific variant to use. Should not be set together with variantIds. If not provided and variantIds is also not provided or is empty, the image is rendered with a srcset including all variants by default.","type":"string"},"variantIds":{"description":"Optional IDs of specific variants to use in the srcset attribute. Should not be set together with variantId.","type":"array","items":{"type":"string"}}},"required":["type"]}]},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A text field for users to save notes related to a lesson (for courses).","type":"object","properties":{"type":{"const":"LessonNotesField"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label"]},{"description":"A link.","type":"object","properties":{"type":{"const":"Link"},"linkStyle":{"description":"Controls the visual style of the link. When \\"Button\\", renders a Button component with asChild prop and a Link inside.","type":"string","enum":["Text","Button"]},"protocol":{"description":"Adds the specified protocol prefix to the href attribute's value.","type":"string","enum":["mailto","tel","sms"]},"size":{"description":"Controls the size of the button. Options are: '1' (12px font size), '2' (default, 14px font size), '3' (16px font size), and '4' (18px font size).","type":"string","enum":["1","2","3","4"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"target":{"type":"string","enum":["_blank","_self","_parent","_top"]},"to":{"description":"The URL that the link points to. A router link will be rendered for a path without a host (using the History API). A regular link will be rendered for a full URL.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"variant":{"description":"Controls the visual style of the button. Options are: 'solid' (default, filled background), 'soft' (lighter background, --accent-a11 text), 'surface' (subtle background, solid border, --accent-a11 text), 'outline' (transparent background, solid border, --accent-a11 text), and 'ghost' (no background, no border, --accent-a11 text, behaves like text in layout with negative margins).","type":"string","enum":["solid","soft","surface","outline","ghost"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays a map. The focus property is the place to display. It can be the name of a location (the way it appears on Google Maps), an address, or a place ID with the prefix 'place_id:'.","type":"object","properties":{"type":{"const":"Map"},"focus":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":["string","null"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component for a user to move between sequence stages.","type":"object","properties":{"type":{"const":"MoveUserPlan"},"nextButtonLabel":{"type":"string"},"previousButtonLabel":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A view for viewing all the orgs under a subscription, including all the users of each org and their training progress.","type":"object","properties":{"type":{"const":"MultiOrgView"},"showUserTrainingProgress":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"userTrainingProgressContentPlanIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressCourseIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressSequenceIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"MultipleChoiceInput"},"answerIndex":{"type":"number"},"choices":{"type":"array","items":{"type":"string"}},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"question":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"MultiSelectInput"},"answerIndices":{"type":"array","items":{"type":"number"}},"choices":{"type":"array","items":{"type":"string"}},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"question":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"NumberInput"},"format":{"type":"string","enum":["Number","Currency","Integer"]},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"maxDecimalDigits":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"description":"An order form for checking out for a subscription.","type":"object","properties":{"type":{"const":"OrderForm"},"checkoutOptions":{"description":"The products to display in the form. Each product may optionally have a condition that needs to evaluate to true for the product to be displayed.","type":"array","items":{"type":"object","properties":{"condition":{"$ref":"#/$defs/expressionBoolean"},"subscriptionPlanId":{"type":"string"}},"required":["subscriptionPlanId"]}},"enablePhoneNumber":{"description":"Whether to enable a phone number input field. Defaults to true.","type":"boolean"},"enablePromoCode":{"description":"Whether to enable a promo code input field. If set to Stripe, only Stripe promo codes are allowed. If set to Custom, only custom promo codes are allowed. Defaults to none.","type":"string","enum":["Stripe","Custom"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Org billing settings dashboard.","type":"object","properties":{"type":{"const":"OrgBillingSettings"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Shows the pages of an org site and allows authorized users to activate and edit pages.","type":"object","properties":{"type":{"const":"OrgSitePages"},"defaultPageTemplatePreviewImageUrl":{"type":"string"},"pageTemplates":{"type":"object","properties":{"filter":{"type":"string","enum":["include","exclude"]},"ids":{"type":"array","items":{"type":"string"}}},"required":["filter","ids"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Organization site reviews component.","type":"object","properties":{"type":{"const":"OrgSiteReviews"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Organization team/members dashboard.","type":"object","properties":{"type":{"const":"OrganizationTeam"},"showUserTrainingProgress":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"userTrainingProgressContentPlanIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressCourseIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"required":["type"]},{"description":"Represents the current page when rendered inside a layout.","type":"object","properties":{"type":{"const":"Page"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"PlainText"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"tag":{"description":"The HTML tag to use for the element. Defaults to span.","type":"string","enum":["code","div","h1","h2","h3","h4","h5","h6","label","legend","li","p","span"]},"text":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"Popover"},"hideTriggers":{"description":"A list of events that will trigger the popover to be hidden.","type":"array","items":{"$ref":"#/$defs/trigger"}},"showTriggers":{"description":"A list of events that will trigger the popover to be shown.","type":"array","items":{"$ref":"#/$defs/trigger"}},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"Ensures that a user is signed in and belongs to an org that has access to the specified product item in an active subscription. Otherwise, the component shows a default message, a custom children, or nothing, depending on how it is configured. The styling applies only to the default message.","type":"object","properties":{"type":{"const":"ProductItemGuard"},"accessDeniedMode":{"description":"The default accessDeniedMode is DefaultMessage. A custom message is defined through children with an AccessDenied slot key.","type":"string","enum":["CustomMessage","DefaultMessage","Empty"]},"productItem":{"description":"The product item to require. If not set, this component does not require anything and displays its children.","type":"string"},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"ProvideProps"},"props":{"type":"array","items":{"type":"object","properties":{"name":{"description":"The name of the prop to provide.","type":"string"},"source":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Number"},"value":{"type":"number"}},"required":["type","value"]},{"type":"object","properties":{"type":{"const":"String"},"value":{"type":"string"}},"required":["type","value"]}]}},"required":["type","value"]},{"description":"The output is a function of the input using one of the built-in format functions.","type":"object","properties":{"type":{"const":"Transform"},"format":{"type":"string","enum":["Phone number (###) ###-####","Phone number ###-###-####","U.S. State abbreviation spelled out"]},"inputPropName":{"description":"Used only in transform mode.","type":"string"}},"required":["type"]},{"description":"Produce the output prop from the LiquidJS template.","type":"object","properties":{"type":{"const":"Template"},"template":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"CustomField"},"fieldName":{"type":"string"},"object":{"description":"The object from which to read the specified field. For a page template being previewed, when the object is 'Page' the custom fields are taken instead from the page template.","type":"string","enum":["Site","Page","User"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]}},"required":["name","source"]}},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that queries data and provides it as props to its children. Supports pagination and provides metadata about the query results.","type":"object","properties":{"type":{"const":"Query"},"pageLimitSource":{"description":"The source of the page limit. Defaults to a Direct value of 20.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"number"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type","parameter"]}]},"pageNumberSource":{"description":"The source of the page number. Defaults to QueryParameter 'page'. Pagination is 1-based (i.e., the first page is page 1).","anyOf":[{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type","parameter"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"props":{"description":"Configuration for the props that will be provided to children components.","type":"object","properties":{"items":{"description":"The prop name for the array of items returned by the query. Defaults to 'items'.","type":"string"},"currentPage":{"description":"The prop name for the current page number. Defaults to 'currentPage'.","type":"string"},"hasNextPage":{"description":"The prop name for whether there is a next page. Defaults to 'hasNextPage'.","type":"string"},"hasPreviousPage":{"description":"The prop name for whether there is a previous page. Defaults to 'hasPreviousPage'.","type":"string"},"pageLimit":{"description":"The prop name for the actual number of items per page (returned by the server). Defaults to 'pageLimit'.","type":"string"},"totalItemsCount":{"description":"The prop name for the total number of items matching the filter. Defaults to 'totalItemsCount'.","type":"string"},"totalPagesCount":{"description":"The prop name for the total number of pages. Defaults to 'totalPagesCount'.","type":"string"}}},"slot":{"$ref":"#/$defs/slot"},"source":{"description":"The data source configuration for the query.","anyOf":[{"description":"Fetch pages matching a set of filter conditions. Only published pages are included. Each element will be an object with the following properties: 'id', 'path', 'title', 'publishedAt', 'props'. The 'props' property will be the parsed page props.","type":"object","properties":{"type":{"const":"Pages"},"filter":{"description":"The filter to apply to select pages.","type":"object","properties":{"pathPrefix":{"description":"The path prefix to require for pages. Defaults to all paths.","type":"string"},"props":{"description":"A set of props to filter by. The prop values must be strings.","type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}}}}},"required":["type"]}]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"RadioGroupInput"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"displayType":{"description":"The style to use for items. For indicators, each item is rendered with a bubble icon, and its children are rendered inside a label that refers to the radio input element. For cards, there is default styling with each item's border color indicating whether it is the one selected. Defaults to indicators.","type":"string","enum":["indicators","cards"]},"itemsContainerStyles":{"$ref":"#/$defs/styles"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","label","name"]},{"description":"A radio item within a radio group input.","type":"object","properties":{"type":{"const":"RadioGroupInputItem"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that dynamically loads a remote React component with custom code from an extension.","type":"object","properties":{"type":{"const":"RemoteComponent"},"componentName":{"description":"The name of the component to display.","type":"string"},"extensionName":{"description":"The name of the extension that contains the remote component.","type":"string"},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","componentName","extensionName"]},{"description":"A component that repeats a set of children for each item of an array or property of an object. Children are rendered with a prop for the current item. The key prop is the index for array items and the property name for objects. There is no wrapping element for children.","type":"object","properties":{"type":{"const":"Repeater"},"itemPropName":{"description":"The name of the prop for the current item. This is the array element for an array source, or the value of a property for an object source. Defaults to 'item'.","type":"string"},"keyPropName":{"description":"The name of the prop for the index or key of the current item. Defaults to 'key'.","type":"string"},"slot":{"$ref":"#/$defs/slot"},"source":{"description":"The data to iterate over. Needs to evaluate to an array or an object.","anyOf":[{"description":"Use a prop as the data source.","type":"object","properties":{"type":{"const":"Prop"},"name":{"description":"The name of the prop providing the array or object.","type":"string"}},"required":["type","name"]}]},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"An input component that can include multiple input components and other components, allowing an array of records to be entered.","type":"object","properties":{"type":{"const":"RepeatingGroupInput"},"name":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","name"]},{"description":"A component to request password reset.","type":"object","properties":{"type":{"const":"RequestPasswordReset"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component to reset a password.","type":"object","properties":{"type":{"const":"ResetPassword"},"mode":{"type":"string","enum":["create","reset"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Displays a review form with 1-5 stars and redirects to the configured Google Place if the user clicks 5 stars.","type":"object","properties":{"type":{"const":"Review"},"googlePlace":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":["string","null"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"reviewFieldPlaceholder":{"type":"string"},"selectStarsLabel":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"SignInGuard"},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays the site logo.","type":"object","properties":{"type":{"const":"SiteLogo"},"alt":{"description":"Alternative text for the logo, defaults to the site name","type":"string"},"fallbackSiteName":{"description":"Whether to display the site name if the logo is not available","type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays the site privacy policy.","type":"object","properties":{"type":{"const":"SitePrivacyPolicy"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays the site terms of use.","type":"object","properties":{"type":{"const":"SiteTermsOfUse"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"description":"A stage in a sequence.","type":"object","properties":{"type":{"const":"Stage"},"enableWrappedStageBody":{"description":"Whether to enable the wrapped stage body","type":"boolean"},"sequenceId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"The body of a stage in a sequence.","type":"object","properties":{"type":{"const":"StageBody"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays the name of a stage.","type":"object","properties":{"type":{"const":"StageName"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays rich text. The content property should be an object with a delta property set to a Quill Delta object.","type":"object","properties":{"type":{"const":"Text"},"content":{"title":"RichText","anyOf":[{"title":"Delta","type":"object","properties":{"delta":{"type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"attributes":{"type":"object","additionalProperties":true},"insert":{"oneOf":[{"type":"string"},{"type":"object","additionalProperties":true}]}},"required":["insert"]}}},"required":["ops"]}},"required":["delta"]}]},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"TextInput"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"format":{"description":"Validation format for the input","type":"string","enum":["None","Email","Phone","Url"]},"inputElementStyles":{"$ref":"#/$defs/styles"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"maxLength":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"TextareaInput"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"maxLength":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"Theme"},"appearance":{"type":"string","enum":["light","dark","inherit"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that embeds a Typeform.","type":"object","properties":{"type":{"const":"Typeform"},"formId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays a user profile.","type":"object","properties":{"type":{"const":"UserProfile"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Requires that a user be signed in and have a verified email address. Otherwise displays either a message that you need to be signed in or a message and a button to send a verification email.","type":"object","properties":{"type":{"const":"VerifiedEmailAddressGuard"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"Reads a URL query parameter that contains a unique token for verifying a user’s email address and makes an API request to mark the email address as verified. If the token is valid, it displays a message that the email address has been verified. Otherwise, it displays an error message. In either case, at the bottom it displays a 'Go to {siteName}' link that navigates to the home page.","type":"object","properties":{"type":{"const":"VerifyEmailAddress"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays a video.","type":"object","properties":{"type":{"const":"Video"},"autoPlay":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"controls":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"loop":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"muted":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"playsInline":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"poster":{"description":"The URL of an image to display while the video is loading. Applicable only when tag is 'video'.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"slot":{"$ref":"#/$defs/slot"},"src":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"styles":{"$ref":"#/$defs/styles"},"tag":{"description":"The way to render the video. Defaults to 'iframe'.","type":"string","enum":["iframe","video"]}},"additionalProperties":false,"required":["type"]},{"description":"A button that opens a dialog that displays the stages of a sequence and allows the user to move to another stage.","type":"object","properties":{"type":{"const":"ViewPlanStagesButton"},"dialogHeader":{"type":"string"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"slot":{"$ref":"#/$defs/slot"},"stageNameTableHeader":{"type":"string"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label"]},{"description":"A div element that sets the max-width property to a specified width (defaults to 1200px). The default alignment is Center. An additional div is rendered to wrap the children to set alignment. That inner div (the direct parent element of children) cannot be styled. Only the WidthContainerComponent's outer element gets the styles, if any.","type":"object","properties":{"type":{"const":"WidthContainer"},"align":{"$ref":"#/$defs/align"},"elementId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"width":{"$ref":"#/$defs/width"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]}]}`);
|
|
26880
|
+
const type$b = "array";
|
|
26881
|
+
const items$1 = /* @__PURE__ */ JSON.parse(`{"anyOf":[{"description":"An element for wrapping children elements.","type":"object","properties":{"type":{"const":"Box"},"elementId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"tag":{"description":"The HTML tag to use for the element. Defaults to div.","type":"string","enum":["article","aside","blockquote","code","div","fieldset","footer","h1","h2","h3","h4","h5","h6","header","label","legend","li","main","nav","ol","p","pre","section","span","ul"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"Button"},"onClick":{"description":"Defaults to submitForm.","anyOf":[{"type":"object","properties":{"type":{"const":"emitEvent"},"eventType":{"description":"A string representing a custom event type, to reference in other components that listen for events.","type":"string"}},"required":["type","eventType"]},{"type":"object","properties":{"type":{"type":"string","enum":["goBack","goBackFormStep","removeRepeatingGroupInputItem","resetForm","submitForm"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["decrementQueryParameter","incrementQueryParameter"]},"defaultValue":{"type":"number"},"parameter":{"type":"string"}},"required":["type","defaultValue","parameter"]}]},"size":{"description":"Controls the size of the button. Options are: '1' (12px font size), '2' (default, 14px font size), '3' (16px font size), and '4' (18px font size).","type":"string","enum":["1","2","3","4"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"variant":{"description":"Controls the visual style of the button. Options are: 'solid' (default, filled background), 'soft' (lighter background, --accent-a11 text), 'surface' (subtle background, solid border, --accent-a11 text), 'outline' (transparent background, solid border, --accent-a11 text), and 'ghost' (no background, no border, --accent-a11 text, behaves like text in layout with negative margins).","type":"string","enum":["solid","soft","surface","outline","ghost"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"An embedded Calendly scheduling widget.","type":"object","properties":{"type":{"const":"CalendlyEmbed"},"queryParameters":{"type":"array","items":{"type":"object","properties":{"id":{"description":"A random unique string for identification.","type":"string"},"parameter":{"type":"string"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]}},"required":["id","parameter","value"]}},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"url":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]}},"additionalProperties":false,"required":["type"]},{"description":"A group of checkboxes for selecting one or more options, represented as an array of strings in form data.","type":"object","properties":{"type":{"const":"CheckboxGroupInput"},"displayType":{"description":"The style to use for items. For indicators, each item is rendered with a checkbox icon, and its children are rendered inside a label that refers to the checkbox input element. For cards, there is default styling with each item's border color indicating whether it is checked. Defaults to indicators.","type":"string","enum":["indicators","cards"]},"itemsContainerStyles":{"$ref":"#/$defs/styles"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"required":{"type":"boolean"},"showIndicators":{"description":"Whether to show indicators for each item. Applies only if displayType is indicators. Defaults to true.","type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","label","name"]},{"description":"A checkbox item within a checkbox group input.","type":"object","properties":{"type":{"const":"CheckboxGroupInputItem"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A standalone checkbox. Represented as either a boolean or a string in form data. If value is set to a string and is not an empty string, it is used as the value for the input when the box is checked. Otherwise, a boolean is set as the value when the box is checked or unchecked.","type":"object","properties":{"type":{"const":"CheckboxInput"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]}},"additionalProperties":false,"required":["type","label","name"]},{"description":"A panel that can be collapsed or expanded.","type":"object","properties":{"type":{"const":"CollapsiblePanel"},"header":{"description":"The text displayed in the clickable header.","type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"triggerButtonStyles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"CompletableVideoInput"},"collapseCompleted":{"description":"By default, collapseCompleted is false.","type":"boolean"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"initiallyCollapsed":{"description":"Default initialCollapsed is false.","type":"boolean"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"required":{"type":"boolean"},"showHeader":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"src":{"type":"string"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"ConditionalLogic"},"condition":{"$ref":"#/$defs/expressionBoolean"},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"Course"},"courseId":{"description":"If set, a Course is used instead of the legacy Plan.","type":"string"},"emptyNotesMessage":{"type":"string"},"enableNotes":{"type":"boolean"},"planId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Displays the current year.","type":"object","properties":{"type":{"const":"CurrentYear"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"description":"A custom component (a saved fragment of components).","type":"object","properties":{"type":{"const":"CustomComponent"},"customComponentId":{"description":"The ID of the custom component to display.","type":"string"},"customProps":{"$ref":"#/$defs/contextData"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type","customComponentId"]},{"description":"A dashboard layout with a header, sidebar, and main content area.","type":"object","properties":{"type":{"const":"Dashboard"},"collapseSidebarOnPaths":{"description":"An array of path patterns as globs. If set, the sidebar will automatically be collapsed on matching paths.","type":"array","items":{"type":"string"}},"extraNavItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"mainNavItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"DateInput"},"clearable":{"type":"boolean"},"dayPlaceholder":{"type":"string"},"inputElementStyles":{"$ref":"#/$defs/styles"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"maximumDate":{"anyOf":[{"type":"object","properties":{"type":{"const":"today"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"date"},"value":{"type":"string"}},"required":["type","value"]}]},"minimumDate":{"anyOf":[{"type":"object","properties":{"type":{"const":"today"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"date"},"value":{"type":"string"}},"required":["type","value"]}]},"monthPlaceholder":{"type":"string"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"style":{"type":"string","enum":["Calendar","3Fields"]},"styles":{"$ref":"#/$defs/styles"},"yearPlaceholder":{"type":"string"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"Dialog"},"closeOnBackdropClick":{"description":"Whether the dialog can be closed by clicking the backdrop. Defaults to true.","type":"boolean"},"hideTriggers":{"description":"A list of events that will trigger the dialog to be hidden.","type":"array","items":{"$ref":"#/$defs/trigger"}},"showTriggers":{"description":"A list of events that will trigger the dialog to be shown.","type":"array","items":{"$ref":"#/$defs/trigger"}},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays a document that can be downloaded.","type":"object","properties":{"type":{"const":"Document"},"documentId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"DropdownInput"},"clearable":{"description":"Clearable is ignored if the input is required. When the input is not required, it may or may not be clearable. The default is false.","type":"boolean"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"options":{"description":"The options to show. Each string is both the label displayed and the value.","type":"array","items":{"type":"string"}},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name","options"]},{"type":"object","properties":{"type":{"const":"Form"},"formId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Represents the current step in a multi-step form.","type":"object","properties":{"type":{"const":"FormStep"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"description":"A map with a search field that lets you select a Place in Google Maps.","type":"object","properties":{"type":{"const":"GooglePlaceInput"},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","name"]},{"description":"A header component with navigation items and a slot for other components. Children components must have either the LeftContent or RightContent slot property set to be rendered. No default styling is applied to children. Notice that children for either the left or right need to be enabled explicitly on mobile screens (up to 767px wide) with the showLeftContentOnMobile or showRightContentOnMobile properties. The navAlign property specifies the alignment of the navigation items element: if Center, then the nav is centered; if Left, then the nav is on the left but immediately to the right of the children with the LeftContent slot, if any; if Right, then the nav is on the right but immediately to the left of the children with the RightContent slot, if any.","type":"object","properties":{"type":{"const":"Header"},"contentMaxWidth":{"$ref":"#/$defs/width"},"navAlign":{"$ref":"#/$defs/align"},"navItems":{"type":"array","items":{"$ref":"#/$defs/componentNavItem"}},"showLeftContentOnMobile":{"description":"If true, the left content is shown on mobile. Defaults to false.","type":"boolean"},"showRightContentOnMobile":{"description":"If true, the right content is shown on mobile. Defaults to false.","type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"sticky":{"description":"If true, the header is sticky upon scrolling. Defaults to false.","type":"boolean"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A portal for help tickets.","type":"object","properties":{"type":{"const":"HelpTicketsPortal"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that renders raw HTML.","type":"object","properties":{"type":{"const":"HTML"},"html":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"Icon"},"alt":{"description":"The alternative text for the icon. This should be provided only for icons that serve some purpose on their own other than decoration. Decorative icons should omit alt text to avoid unnecessary screen reader announcements.","type":"string"},"ariaHidden":{"description":"If true, the icon is hidden from the accessibility tree. This should be set to true for purely decorative icons.","type":"boolean"},"icon":{"type":"object","properties":{"type":{"const":"Direct"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"MaterialSymbols"},"value":{"type":"object","properties":{"fill":{"description":"If true, the icon's filled variant is used. Defaults to false.","type":"boolean"},"name":{"description":"The name of the icon. Must be one of the defined Material Symbols.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"opticalSize":{"description":"The optical size of the icon, for optimizing the appearance at different sizes. For icons rendered at 34px width or smaller, use 20. For icons rendered at bigger than 34px width, use 48. This is also the default width and height of the icon in pixels. Can be used together with CSS width and height properties. Defaults to 20.","type":"number","enum":[20,48]},"style":{"description":"The style of the icon. The outlined style is a sort of hybrid of rounded and sharp, and depending on the icon it may look exactly the same as either the rounded or sharp style. Defaults to outlined.","type":"string","enum":["outlined","rounded","sharp"]},"weight":{"description":"The weight of the icon. Similar to font-weight in that 200 is lighter and 600 is heavier. Defaults to 400.","type":"number","enum":[200,400,600]}}}},"required":["type"]}]}},"required":["type"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays an image.","type":"object","properties":{"type":{"const":"Image"},"alt":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"src":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageFeaturedImage","SiteLogo"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Asset"},"assetId":{"type":"string"},"variantId":{"description":"Optional ID of a specific variant to use. Should not be set together with variantIds. If not provided and variantIds is also not provided or is empty, the image is rendered with a srcset including all variants by default.","type":"string"},"variantIds":{"description":"Optional IDs of specific variants to use in the srcset attribute. Should not be set together with variantId.","type":"array","items":{"type":"string"}}},"required":["type"]}]},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A text field for users to save notes related to a lesson (for courses).","type":"object","properties":{"type":{"const":"LessonNotesField"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label"]},{"description":"A link.","type":"object","properties":{"type":{"const":"Link"},"linkStyle":{"description":"Controls the visual style of the link. When \\"Button\\", renders a Button component with asChild prop and a Link inside.","type":"string","enum":["Text","Button"]},"protocol":{"description":"Adds the specified protocol prefix to the href attribute's value.","type":"string","enum":["mailto","tel","sms"]},"size":{"description":"Controls the size of the button. Options are: '1' (12px font size), '2' (default, 14px font size), '3' (16px font size), and '4' (18px font size).","type":"string","enum":["1","2","3","4"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"target":{"type":"string","enum":["_blank","_self","_parent","_top"]},"to":{"description":"The URL that the link points to. A router link will be rendered for a path without a host (using the History API). A regular link will be rendered for a full URL.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"variant":{"description":"Controls the visual style of the button. Options are: 'solid' (default, filled background), 'soft' (lighter background, --accent-a11 text), 'surface' (subtle background, solid border, --accent-a11 text), 'outline' (transparent background, solid border, --accent-a11 text), and 'ghost' (no background, no border, --accent-a11 text, behaves like text in layout with negative margins).","type":"string","enum":["solid","soft","surface","outline","ghost"]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays a map. The focus property is the place to display. It can be the name of a location (the way it appears on Google Maps), an address, or a place ID with the prefix 'place_id:'.","type":"object","properties":{"type":{"const":"Map"},"focus":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":["string","null"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component for a user to move between sequence stages.","type":"object","properties":{"type":{"const":"MoveUserPlan"},"nextButtonLabel":{"type":"string"},"previousButtonLabel":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A view for viewing all the orgs under a subscription, including all the users of each org and their training progress.","type":"object","properties":{"type":{"const":"MultiOrgView"},"showUserTrainingProgress":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"userTrainingProgressContentPlanIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressCourseIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressSequenceIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"MultipleChoiceInput"},"answerIndex":{"type":"number"},"choices":{"type":"array","items":{"type":"string"}},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"question":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"MultiSelectInput"},"answerIndices":{"type":"array","items":{"type":"number"}},"choices":{"type":"array","items":{"type":"string"}},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"question":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"NumberInput"},"format":{"type":"string","enum":["Number","Currency","Integer"]},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"maxDecimalDigits":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"description":"An order form for checking out for a subscription.","type":"object","properties":{"type":{"const":"OrderForm"},"checkoutOptions":{"description":"The products to display in the form. Each product may optionally have a condition that needs to evaluate to true for the product to be displayed.","type":"array","items":{"type":"object","properties":{"condition":{"$ref":"#/$defs/expressionBoolean"},"subscriptionPlanId":{"type":"string"}},"required":["subscriptionPlanId"]}},"enablePhoneNumber":{"description":"Whether to enable a phone number input field. Defaults to true.","type":"boolean"},"enablePromoCode":{"description":"Whether to enable a promo code input field. If set to Stripe, only Stripe promo codes are allowed. If set to Custom, only custom promo codes are allowed. Defaults to none.","type":"string","enum":["Stripe","Custom"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Org billing settings dashboard.","type":"object","properties":{"type":{"const":"OrgBillingSettings"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Shows the pages of an org site and allows authorized users to activate and edit pages.","type":"object","properties":{"type":{"const":"OrgSitePages"},"defaultPageTemplatePreviewImageUrl":{"type":"string"},"pageTemplates":{"type":"object","properties":{"filter":{"type":"string","enum":["include","exclude"]},"ids":{"type":"array","items":{"type":"string"}}},"required":["filter","ids"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Organization site reviews component.","type":"object","properties":{"type":{"const":"OrgSiteReviews"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Organization team/members dashboard.","type":"object","properties":{"type":{"const":"OrganizationTeam"},"showUserTrainingProgress":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"userTrainingProgressContentPlanIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressCourseIds":{"type":"array","items":{"type":"string"}}},"additionalProperties":false,"required":["type"]},{"description":"Represents the current page when rendered inside a layout.","type":"object","properties":{"type":{"const":"Page"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"PlainText"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"tag":{"description":"The HTML tag to use for the element. Defaults to span.","type":"string","enum":["code","div","h1","h2","h3","h4","h5","h6","label","legend","li","p","span"]},"text":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"Popover"},"hideTriggers":{"description":"A list of events that will trigger the popover to be hidden.","type":"array","items":{"$ref":"#/$defs/trigger"}},"showTriggers":{"description":"A list of events that will trigger the popover to be shown.","type":"array","items":{"$ref":"#/$defs/trigger"}},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"Ensures that a user is signed in and belongs to an org that has access to the specified product item in an active subscription. Otherwise, the component shows a default message, a custom children, or nothing, depending on how it is configured. The styling applies only to the default message.","type":"object","properties":{"type":{"const":"ProductItemGuard"},"accessDeniedMode":{"description":"The default accessDeniedMode is DefaultMessage. A custom message is defined through children with an AccessDenied slot key.","type":"string","enum":["CustomMessage","DefaultMessage","Empty"]},"productItem":{"description":"The product item to require. If not set, this component does not require anything and displays its children.","type":"string"},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"ProvideProps"},"props":{"type":"array","items":{"type":"object","properties":{"name":{"description":"The name of the prop to provide.","type":"string"},"source":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Number"},"value":{"type":"number"}},"required":["type","value"]},{"type":"object","properties":{"type":{"const":"String"},"value":{"type":"string"}},"required":["type","value"]}]}},"required":["type","value"]},{"description":"The output is a function of the input using one of the built-in format functions.","type":"object","properties":{"type":{"const":"Transform"},"format":{"type":"string","enum":["Phone number (###) ###-####","Phone number ###-###-####","U.S. State abbreviation spelled out"]},"inputPropName":{"description":"Used only in transform mode.","type":"string"}},"required":["type"]},{"description":"Produce the output prop from the LiquidJS template.","type":"object","properties":{"type":{"const":"Template"},"template":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"CustomField"},"fieldName":{"type":"string"},"object":{"description":"The object from which to read the specified field. For a page template being previewed, when the object is 'Page' the custom fields are taken instead from the page template.","type":"string","enum":["Site","Page","User"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]}},"required":["name","source"]}},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that queries data and provides it as props to its children. Supports pagination and provides metadata about the query results.","type":"object","properties":{"type":{"const":"Query"},"pageLimitSource":{"description":"The source of the page limit. Defaults to a Direct value of 20.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"number"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type","parameter"]}]},"pageNumberSource":{"description":"The source of the page number. Defaults to QueryParameter 'page'. Pagination is 1-based (i.e., the first page is page 1).","anyOf":[{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type","parameter"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"props":{"description":"Configuration for the props that will be provided to children components.","type":"object","properties":{"items":{"description":"The prop name for the array of items returned by the query. Defaults to 'items'.","type":"string"},"currentPage":{"description":"The prop name for the current page number. Defaults to 'currentPage'.","type":"string"},"hasNextPage":{"description":"The prop name for whether there is a next page. Defaults to 'hasNextPage'.","type":"string"},"hasPreviousPage":{"description":"The prop name for whether there is a previous page. Defaults to 'hasPreviousPage'.","type":"string"},"pageLimit":{"description":"The prop name for the actual number of items per page (returned by the server). Defaults to 'pageLimit'.","type":"string"},"totalItemsCount":{"description":"The prop name for the total number of items matching the filter. Defaults to 'totalItemsCount'.","type":"string"},"totalPagesCount":{"description":"The prop name for the total number of pages. Defaults to 'totalPagesCount'.","type":"string"}}},"slot":{"$ref":"#/$defs/slot"},"source":{"description":"The data source configuration for the query.","anyOf":[{"description":"Fetch pages matching a set of filter conditions. Only published pages are included. Each element will be an object with the following properties: 'id', 'path', 'title', 'publishedAt', 'props'. The 'props' property will be the parsed page props.","type":"object","properties":{"type":{"const":"Pages"},"filter":{"description":"The filter to apply to select pages.","type":"object","properties":{"pathPrefix":{"description":"The path prefix to require for pages. Defaults to all paths.","type":"string"},"props":{"description":"A set of props to filter by. The prop values must be strings.","type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"]}}}}},"required":["type"]}]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"RadioGroupInput"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"displayType":{"description":"The style to use for items. For indicators, each item is rendered with a bubble icon, and its children are rendered inside a label that refers to the radio input element. For cards, there is default styling with each item's border color indicating whether it is the one selected. Defaults to indicators.","type":"string","enum":["indicators","cards"]},"itemsContainerStyles":{"$ref":"#/$defs/styles"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"name":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","label","name"]},{"description":"A radio item within a radio group input.","type":"object","properties":{"type":{"const":"RadioGroupInputItem"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"value":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that dynamically loads a remote React component with custom code from an extension.","type":"object","properties":{"type":{"const":"RemoteComponent"},"componentName":{"description":"The name of the component to display.","type":"string"},"customProps":{"$ref":"#/$defs/contextData"},"extensionName":{"description":"The name of the extension that contains the remote component.","type":"string"},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","componentName","extensionName"]},{"description":"A component that repeats a set of children for each item of an array or property of an object. Children are rendered with a prop for the current item. The key prop is the index for array items and the property name for objects. There is no wrapping element for children.","type":"object","properties":{"type":{"const":"Repeater"},"itemPropName":{"description":"The name of the prop for the current item. This is the array element for an array source, or the value of a property for an object source. Defaults to 'item'.","type":"string"},"keyPropName":{"description":"The name of the prop for the index or key of the current item. Defaults to 'key'.","type":"string"},"slot":{"$ref":"#/$defs/slot"},"source":{"description":"The data to iterate over. Needs to evaluate to an array or an object.","anyOf":[{"description":"Use a prop as the data source.","type":"object","properties":{"type":{"const":"Prop"},"name":{"description":"The name of the prop providing the array or object.","type":"string"}},"required":["type","name"]}]},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"An input component that can include multiple input components and other components, allowing an array of records to be entered.","type":"object","properties":{"type":{"const":"RepeatingGroupInput"},"name":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type","name"]},{"description":"A component to request password reset.","type":"object","properties":{"type":{"const":"RequestPasswordReset"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component to reset a password.","type":"object","properties":{"type":{"const":"ResetPassword"},"mode":{"type":"string","enum":["create","reset"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Displays a review form with 1-5 stars and redirects to the configured Google Place if the user clicks 5 stars.","type":"object","properties":{"type":{"const":"Review"},"googlePlace":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":["string","null"]}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"reviewFieldPlaceholder":{"type":"string"},"selectStarsLabel":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"SignInGuard"},"slot":{"$ref":"#/$defs/slot"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays the site logo.","type":"object","properties":{"type":{"const":"SiteLogo"},"alt":{"description":"Alternative text for the logo, defaults to the site name","type":"string"},"fallbackSiteName":{"description":"Whether to display the site name if the logo is not available","type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays the site privacy policy.","type":"object","properties":{"type":{"const":"SitePrivacyPolicy"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays the site terms of use.","type":"object","properties":{"type":{"const":"SiteTermsOfUse"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"description":"A stage in a sequence.","type":"object","properties":{"type":{"const":"Stage"},"enableWrappedStageBody":{"description":"Whether to enable the wrapped stage body","type":"boolean"},"sequenceId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"The body of a stage in a sequence.","type":"object","properties":{"type":{"const":"StageBody"},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays the name of a stage.","type":"object","properties":{"type":{"const":"StageName"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays rich text. The content property should be an object with a delta property set to a Quill Delta object.","type":"object","properties":{"type":{"const":"Text"},"content":{"title":"RichText","anyOf":[{"title":"Delta","type":"object","properties":{"delta":{"type":"object","properties":{"ops":{"type":"array","items":{"type":"object","properties":{"attributes":{"type":"object","additionalProperties":true},"insert":{"oneOf":[{"type":"string"},{"type":"object","additionalProperties":true}]}},"required":["insert"]}}},"required":["ops"]}},"required":["delta"]}]},"slot":{"$ref":"#/$defs/slot"}},"additionalProperties":false,"required":["type"]},{"type":"object","properties":{"type":{"const":"TextInput"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"format":{"description":"Validation format for the input","type":"string","enum":["None","Email","Phone","Url"]},"inputElementStyles":{"$ref":"#/$defs/styles"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"maxLength":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"TextareaInput"},"defaultValue":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"maxLength":{"type":"number"},"name":{"type":"string"},"placeholder":{"type":"string"},"required":{"type":"boolean"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label","name"]},{"type":"object","properties":{"type":{"const":"Theme"},"appearance":{"type":"string","enum":["light","dark","inherit"]},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"A component that embeds a Typeform.","type":"object","properties":{"type":{"const":"Typeform"},"formId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays a user profile.","type":"object","properties":{"type":{"const":"UserProfile"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"Requires that a user be signed in and have a verified email address. Otherwise displays either a message that you need to be signed in or a message and a button to send a verification email.","type":"object","properties":{"type":{"const":"VerifiedEmailAddressGuard"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]},{"description":"Reads a URL query parameter that contains a unique token for verifying a user’s email address and makes an API request to mark the email address as verified. If the token is valid, it displays a message that the email address has been verified. Otherwise, it displays an error message. In either case, at the bottom it displays a 'Go to {siteName}' link that navigates to the home page.","type":"object","properties":{"type":{"const":"VerifyEmailAddress"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type"]},{"description":"A component that displays a video.","type":"object","properties":{"type":{"const":"Video"},"autoPlay":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"controls":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"loop":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"muted":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"playsInline":{"description":"Applicable only when tag is 'video'.","type":"boolean"},"poster":{"description":"The URL of an image to display while the video is loading. Applicable only when tag is 'video'.","anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"slot":{"$ref":"#/$defs/slot"},"src":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"styles":{"$ref":"#/$defs/styles"},"tag":{"description":"The way to render the video. Defaults to 'iframe'.","type":"string","enum":["iframe","video"]}},"additionalProperties":false,"required":["type"]},{"description":"A button that opens a dialog that displays the stages of a sequence and allows the user to move to another stage.","type":"object","properties":{"type":{"const":"ViewPlanStagesButton"},"dialogHeader":{"type":"string"},"label":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]},{"type":"object","properties":{"type":{"type":"string","enum":["PageTitle","SiteName"]}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/styles"},"slot":{"$ref":"#/$defs/slot"},"stageNameTableHeader":{"type":"string"},"styles":{"$ref":"#/$defs/styles"}},"additionalProperties":false,"required":["type","label"]},{"description":"A div element that sets the max-width property to a specified width (defaults to 1200px). The default alignment is Center. An additional div is rendered to wrap the children to set alignment. That inner div (the direct parent element of children) cannot be styled. Only the WidthContainerComponent's outer element gets the styles, if any.","type":"object","properties":{"type":{"const":"WidthContainer"},"align":{"$ref":"#/$defs/align"},"elementId":{"type":"string"},"slot":{"$ref":"#/$defs/slot"},"styles":{"$ref":"#/$defs/styles"},"width":{"$ref":"#/$defs/width"},"children":{"$ref":"#"}},"additionalProperties":false,"required":["type"]}]}`);
|
|
27156
26882
|
const $defs$5 = { "align": { "type": "string", "enum": ["Center", "Left", "Right"] }, "componentNavItem": { "type": "object", "properties": { "label": { "description": "The text to display in the nav item.", "type": "string" }, "openInNewTab": { "type": "boolean" }, "productItem": { "description": "If set, then only signed in users with access to the specified product item will see this nav item.", "type": ["string", "null"] }, "roles": { "description": "If set and not empty, then only signed in users with one of the specified roles will see this nav item.", "type": "array", "items": { "type": "string" } }, "subItems": { "type": "array", "items": { "type": "object", "properties": { "label": { "description": "The text to display in the nav item.", "type": "string" }, "openInNewTab": { "type": "boolean" }, "productItem": { "description": "If set, then only signed in users with access to the specified product item will see this nav item.", "type": ["string", "null"] }, "roles": { "description": "If set and not empty, then only signed in users with one of the specified roles will see this nav item.", "type": "array", "items": { "type": "string" } }, "url": { "description": "The URL to navigate to when the nav item is clicked. Can be an absolute path. Can also be an anchor link (e.g., #pricing).", "type": "string" } }, "required": ["label", "url"] } }, "url": { "description": "The URL to navigate to when the nav item is clicked. Can be an absolute path. Can also be an anchor link (e.g., #pricing).", "type": "string" } }, "required": ["label"] }, "contextData": { "title": "ContextData", "type": "object", "additionalProperties": { "anyOf": [{ "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "type": "null" }, { "type": "array", "items": { "type": "object", "properties": { "data": { "$ref": "#/$defs/contextData" }, "id": { "type": "string" } }, "required": ["data", "id"] } }, { "type": "object", "properties": { "fileId": { "type": "string" } }, "required": ["fileId"] }, { "type": "array", "items": { "type": "string" } }] } }, "expression": { "title": "Expression", "anyOf": [{ "$ref": "#/$defs/expressionArray" }, { "$ref": "#/$defs/expressionBoolean" }, { "$ref": "#/$defs/expressionNumber" }, { "$ref": "#/$defs/expressionString" }] }, "expressionAll": { "type": "object", "properties": { "arrayExpression": { "$ref": "#/$defs/expressionArray" }, "condition": { "$ref": "#/$defs/expressionBoolean" }, "operator": { "const": "all" } }, "required": ["arrayExpression", "condition", "operator"] }, "expressionArray": { "anyOf": [{ "$ref": "#/$defs/expressionArrayLiteral" }, { "$ref": "#/$defs/expressionFilter" }, { "$ref": "#/$defs/expressionMap" }, { "$ref": "#/$defs/expressionUserProductItems" }, { "$ref": "#/$defs/expressionDynamicValue" }] }, "expressionArrayIncludes": { "type": "object", "properties": { "arrayExpression": { "$ref": "#/$defs/expressionArray" }, "operator": { "const": "arrayIncludes" }, "value": { "$ref": "#/$defs/expression" } }, "required": ["arrayExpression", "operator", "value"] }, "expressionArrayLiteral": { "type": "object", "properties": { "operator": { "const": "arrayLiteral" }, "value": { "type": "array", "items": { "$ref": "#/$defs/expression" } } }, "required": ["operator", "value"] }, "expressionBoolean": { "anyOf": [{ "$ref": "#/$defs/expressionAll" }, { "$ref": "#/$defs/expressionArrayIncludes" }, { "$ref": "#/$defs/expressionBoth" }, { "$ref": "#/$defs/expressionBooleanLiteral" }, { "$ref": "#/$defs/expressionEither" }, { "$ref": "#/$defs/expressionEquals" }, { "$ref": "#/$defs/expressionExists" }, { "$ref": "#/$defs/expressionGreaterThan" }, { "$ref": "#/$defs/expressionNot" }, { "$ref": "#/$defs/expressionSome" }, { "$ref": "#/$defs/expressionDynamicValue" }] }, "expressionBooleanLiteral": { "type": "object", "properties": { "operator": { "const": "booleanLiteral" }, "value": { "type": "boolean" } }, "required": ["operator", "value"] }, "expressionBoth": { "type": "object", "properties": { "left": { "$ref": "#/$defs/expressionBoolean" }, "operator": { "const": "both" }, "right": { "$ref": "#/$defs/expressionBoolean" } }, "required": ["left", "operator", "right"] }, "expressionCurrentTime": { "description": "A timestamp in milliseconds since epoch.", "type": "object", "properties": { "operator": { "const": "currentTime" } }, "required": ["operator"] }, "expressionDataValue": { "description": "Access a value from the data object. The source of the data depends on the context. For example, in a form the data object is the form data and the name is the name of the input component.", "type": "object", "properties": { "name": { "type": "string" }, "operator": { "const": "dataValue" } }, "required": ["name", "operator"] }, "expressionDynamicValue": { "anyOf": [{ "$ref": "#/$defs/expressionDataValue" }, { "$ref": "#/$defs/expressionProp" }] }, "expressionEither": { "type": "object", "properties": { "left": { "$ref": "#/$defs/expressionBoolean" }, "operator": { "const": "either" }, "right": { "$ref": "#/$defs/expressionBoolean" } }, "required": ["left", "operator", "right"] }, "expressionEquals": { "type": "object", "properties": { "left": { "$ref": "#/$defs/expression" }, "operator": { "const": "equals" }, "right": { "$ref": "#/$defs/expression" } }, "required": ["left", "operator", "right"] }, "expressionEventType": { "description": "Access the type set on an event. Applicable only in contexts where the expression deals with an event.", "type": "object", "properties": { "operator": { "const": "eventType" } }, "required": ["operator"] }, "expressionExists": { "type": "object", "properties": { "expression": { "$ref": "#/$defs/expression" }, "operator": { "const": "exists" } }, "required": ["expression", "operator"] }, "expressionFilter": { "type": "object", "properties": { "arrayExpression": { "$ref": "#/$defs/expressionArray" }, "filterExpression": { "$ref": "#/$defs/expressionBoolean" }, "operator": { "const": "filter" } }, "required": ["arrayExpression", "filterExpression", "operator"] }, "expressionGreaterThan": { "type": "object", "properties": { "left": { "$ref": "#/$defs/expressionNumber" }, "operator": { "const": "greaterThan" }, "right": { "$ref": "#/$defs/expressionNumber" } }, "required": ["left", "operator", "right"] }, "expressionLength": { "type": "object", "properties": { "operator": { "const": "length" }, "value": { "anyOf": [{ "$ref": "#/$defs/expressionArray" }, { "$ref": "#/$defs/expressionString" }] } }, "required": ["operator", "value"] }, "expressionMap": { "type": "object", "properties": { "arrayExpression": { "$ref": "#/$defs/expressionArray" }, "mapExpression": { "$ref": "#/$defs/expression" }, "operator": { "const": "map" } }, "required": ["arrayExpression", "mapExpression", "operator"] }, "expressionNot": { "type": "object", "properties": { "expression": { "$ref": "#/$defs/expressionBoolean" }, "operator": { "const": "not" } }, "required": ["expression", "operator"] }, "expressionNumber": { "anyOf": [{ "$ref": "#/$defs/expressionCurrentTime" }, { "$ref": "#/$defs/expressionLength" }, { "$ref": "#/$defs/expressionNumberLiteral" }, { "$ref": "#/$defs/expressionSum" }, { "$ref": "#/$defs/expressionSumArray" }, { "$ref": "#/$defs/expressionTimeLiteral" }, { "$ref": "#/$defs/expressionDynamicValue" }] }, "expressionNumberLiteral": { "type": "object", "properties": { "operator": { "const": "numberLiteral" }, "value": { "type": "number" } }, "required": ["operator", "value"] }, "expressionProp": { "description": "Access a value from props. Applicable only in contexts where the expression deals with props.", "type": "object", "properties": { "name": { "type": "string" }, "operator": { "const": "prop" } }, "required": ["name", "operator"] }, "expressionSome": { "type": "object", "properties": { "arrayExpression": { "$ref": "#/$defs/expressionArray" }, "condition": { "$ref": "#/$defs/expressionBoolean" }, "operator": { "const": "some" } }, "required": ["arrayExpression", "condition", "operator"] }, "expressionString": { "anyOf": [{ "$ref": "#/$defs/expressionEventType" }, { "$ref": "#/$defs/expressionStringLiteral" }, { "$ref": "#/$defs/expressionUserRole" }, { "$ref": "#/$defs/expressionDynamicValue" }] }, "expressionStringLiteral": { "type": "object", "properties": { "operator": { "const": "stringLiteral" }, "value": { "type": "string" } }, "required": ["operator", "value"] }, "expressionSum": { "type": "object", "properties": { "left": { "$ref": "#/$defs/expressionNumber" }, "operator": { "const": "sum" }, "right": { "$ref": "#/$defs/expressionNumber" } }, "required": ["left", "operator", "right"] }, "expressionSumArray": { "type": "object", "properties": { "arrayExpression": { "$ref": "#/$defs/expressionArray" }, "operator": { "const": "sumArray" } }, "required": ["arrayExpression", "operator"] }, "expressionTimeLiteral": { "description": "A timestamp in milliseconds since epoch.", "type": "object", "properties": { "operator": { "const": "timeLiteral" }, "value": { "type": "number" } }, "required": ["operator", "value"] }, "expressionUserProductItems": { "type": "object", "properties": { "operator": { "const": "userProductItems" } }, "required": ["operator"] }, "expressionUserRole": { "type": "object", "properties": { "operator": { "const": "userRole" } }, "required": ["operator"] }, "slot": { "type": "string", "enum": ["True", "False", "AccessAllowed", "AccessDenied", "LeftContent", "RightContent"] }, "styles": { "type": "array", "items": { "type": "object", "properties": { "condition": { "$ref": "#/$defs/expressionBoolean" }, "declarations": { "description": "A list of declarations, each a key-value pair with a colon separating the key and value. The key must be a CSS property or a custom property.", "type": "array", "items": { "type": "string" } }, "minWidth": { "description": "Optional min-width media query for this rule. If not set, the rule applies to all widths.", "type": "string", "enum": ["sm", "md", "lg", "xl", "xxl"] }, "states": { "description": "Optional pseudo-classes for this rule to apply to. Multiple classes are combined (e.g., ':hover:last-child').", "type": "array", "items": { "type": "string", "enum": ["active", "disabled", "first-child", "focus", "focus-visible", "focus-within", "hover", "last-child", "only-child"] } } }, "required": ["declarations"] } }, "trigger": { "description": "A specification for an event that will trigger some action. The condition property is an expression that, if set, needs to evaluate to true for the trigger to apply.", "type": "object", "properties": { "condition": { "$ref": "#/$defs/expressionBoolean" }, "eventType": { "description": "The expected event type for the trigger to apply.", "type": "string" } }, "required": ["eventType"] }, "width": { "type": "string", "enum": ["400px", "500px", "600px", "800px", "1000px", "1200px", "1400px", "1600px"] } };
|
|
27157
26883
|
const strippedComponentsSchema = {
|
|
27158
|
-
type: type$
|
|
26884
|
+
type: type$b,
|
|
27159
26885
|
items: items$1,
|
|
27160
26886
|
$defs: $defs$5
|
|
27161
26887
|
};
|
|
@@ -27206,31 +26932,45 @@ function isString(value) {
|
|
|
27206
26932
|
return typeof value == "string" || !isArray(value) && isObjectLike$1(value) && baseGetTag(value) == stringTag;
|
|
27207
26933
|
}
|
|
27208
26934
|
const isNonEmptyString = (value) => isString(value) && value.length > 0;
|
|
27209
|
-
const $schema$
|
|
27210
|
-
const $id$
|
|
27211
|
-
const title$
|
|
27212
|
-
const type$
|
|
26935
|
+
const $schema$a = "https://json-schema.org/draft/2020-12/schema";
|
|
26936
|
+
const $id$b = "/context-data/context-data.json";
|
|
26937
|
+
const title$a = "ContextData";
|
|
26938
|
+
const type$a = "object";
|
|
27213
26939
|
const additionalProperties$2 = { "$ref": "#/$defs/dataValue" };
|
|
27214
26940
|
const $defs$4 = { "dataValue": { "anyOf": [{ "type": "boolean" }, { "type": "string" }, { "type": "number" }, { "type": "null" }, { "type": "array", "items": { "$ref": "#/$defs/dataTableRow" } }, { "$ref": "#/$defs/uploadedFile" }, { "type": "array", "items": { "type": "string" } }] }, "dataTableRow": { "type": "object", "properties": { "id": { "type": "string" }, "data": { "$ref": "#" } }, "required": ["id", "data"] }, "uploadedFile": { "type": "object", "properties": { "fileId": { "type": "string" } }, "required": ["fileId"] } };
|
|
27215
26941
|
const contextDataSchema = {
|
|
27216
|
-
$schema: $schema$
|
|
27217
|
-
$id: $id$
|
|
27218
|
-
title: title$
|
|
27219
|
-
type: type$
|
|
26942
|
+
$schema: $schema$a,
|
|
26943
|
+
$id: $id$b,
|
|
26944
|
+
title: title$a,
|
|
26945
|
+
type: type$a,
|
|
27220
26946
|
additionalProperties: additionalProperties$2,
|
|
27221
26947
|
$defs: $defs$4
|
|
27222
26948
|
};
|
|
27223
|
-
const $schema$
|
|
27224
|
-
const $id$
|
|
27225
|
-
const title$
|
|
26949
|
+
const $schema$9 = "https://json-schema.org/draft/2020-12/schema";
|
|
26950
|
+
const $id$a = "/expressions/expression.json";
|
|
26951
|
+
const title$9 = "Expression";
|
|
27226
26952
|
const anyOf$1 = [{ "$ref": "#/$defs/arrayExpression" }, { "$ref": "#/$defs/booleanExpression" }, { "$ref": "#/$defs/numberExpression" }, { "$ref": "#/$defs/stringExpression" }];
|
|
27227
26953
|
const $defs$3 = { "all": { "type": "object", "properties": { "operator": { "const": "all" }, "arrayExpression": { "$ref": "#/$defs/arrayExpression" }, "condition": { "$ref": "#/$defs/booleanExpression" } }, "required": ["operator", "arrayExpression", "condition"] }, "arrayExpression": { "anyOf": [{ "$ref": "#/$defs/arrayLiteral" }, { "$ref": "#/$defs/filter" }, { "$ref": "#/$defs/map" }, { "$ref": "#/$defs/userProductItems" }, { "$ref": "#/$defs/dynamicValue" }] }, "arrayLiteral": { "type": "object", "properties": { "operator": { "const": "arrayLiteral" }, "value": { "type": "array", "items": { "$ref": "#" } } }, "required": ["operator", "value"] }, "filter": { "type": "object", "properties": { "operator": { "const": "filter" }, "arrayExpression": { "$ref": "#/$defs/arrayExpression" }, "filterExpression": { "$ref": "#/$defs/booleanExpression" } }, "required": ["operator", "arrayExpression", "filterExpression"] }, "length": { "type": "object", "properties": { "operator": { "const": "length" }, "value": { "anyOf": [{ "$ref": "#/$defs/arrayExpression" }, { "$ref": "#/$defs/stringExpression" }] } }, "required": ["operator", "value"] }, "numberExpression": { "anyOf": [{ "$ref": "#/$defs/currentTime" }, { "$ref": "#/$defs/length" }, { "$ref": "#/$defs/numberLiteral" }, { "$ref": "#/$defs/sum" }, { "$ref": "#/$defs/sumArray" }, { "$ref": "#/$defs/timeLiteral" }, { "$ref": "#/$defs/dynamicValue" }] }, "currentTime": { "type": "object", "description": "A timestamp in milliseconds since epoch.", "properties": { "operator": { "const": "currentTime" } }, "required": ["operator"] }, "numberLiteral": { "type": "object", "properties": { "operator": { "const": "numberLiteral" }, "value": { "type": "number" } }, "required": ["operator", "value"] }, "sum": { "type": "object", "properties": { "operator": { "const": "sum" }, "left": { "$ref": "#/$defs/numberExpression" }, "right": { "$ref": "#/$defs/numberExpression" } }, "required": ["operator", "left", "right"] }, "sumArray": { "type": "object", "properties": { "operator": { "const": "sumArray" }, "arrayExpression": { "$ref": "#/$defs/arrayExpression" } }, "required": ["operator", "arrayExpression"] }, "timeLiteral": { "type": "object", "description": "A timestamp in milliseconds since epoch.", "properties": { "operator": { "const": "timeLiteral" }, "value": { "type": "number" } }, "required": ["operator", "value"] }, "map": { "type": "object", "properties": { "operator": { "const": "map" }, "arrayExpression": { "$ref": "#/$defs/arrayExpression" }, "mapExpression": { "$ref": "#" } }, "required": ["operator", "arrayExpression", "mapExpression"] }, "stringExpression": { "anyOf": [{ "$ref": "#/$defs/eventType" }, { "$ref": "#/$defs/stringLiteral" }, { "$ref": "#/$defs/userRole" }, { "$ref": "#/$defs/dynamicValue" }] }, "eventType": { "description": "Access the type set on an event. Applicable only in contexts where the expression deals with an event.", "type": "object", "properties": { "operator": { "const": "eventType" } }, "required": ["operator"] }, "stringLiteral": { "type": "object", "properties": { "operator": { "const": "stringLiteral" }, "value": { "type": "string" } }, "required": ["operator", "value"] }, "userRole": { "type": "object", "properties": { "operator": { "const": "userRole" } }, "required": ["operator"] }, "arrayIncludes": { "type": "object", "properties": { "operator": { "const": "arrayIncludes" }, "arrayExpression": { "$ref": "#/$defs/arrayExpression" }, "value": { "$ref": "#" } }, "required": ["operator", "arrayExpression", "value"] }, "booleanExpression": { "anyOf": [{ "$ref": "#/$defs/all" }, { "$ref": "#/$defs/arrayIncludes" }, { "$ref": "#/$defs/both" }, { "$ref": "#/$defs/booleanLiteral" }, { "$ref": "#/$defs/either" }, { "$ref": "#/$defs/equals" }, { "$ref": "#/$defs/exists" }, { "$ref": "#/$defs/greaterThan" }, { "$ref": "#/$defs/not" }, { "$ref": "#/$defs/some" }, { "$ref": "#/$defs/dynamicValue" }] }, "dynamicValue": { "anyOf": [{ "$ref": "#/$defs/dataValue" }, { "$ref": "#/$defs/prop" }] }, "booleanLiteral": { "type": "object", "properties": { "operator": { "const": "booleanLiteral" }, "value": { "type": "boolean" } }, "required": ["operator", "value"] }, "both": { "type": "object", "properties": { "operator": { "const": "both" }, "left": { "$ref": "#/$defs/booleanExpression" }, "right": { "$ref": "#/$defs/booleanExpression" } }, "required": ["operator", "left", "right"] }, "dataValue": { "description": "Access a value from the data object. The source of the data depends on the context. For example, in a form the data object is the form data and the name is the name of the input component.", "type": "object", "properties": { "operator": { "const": "dataValue" }, "name": { "type": "string" } }, "required": ["operator", "name"] }, "prop": { "description": "Access a value from props. Applicable only in contexts where the expression deals with props.", "type": "object", "properties": { "operator": { "const": "prop" }, "name": { "type": "string" } }, "required": ["operator", "name"] }, "either": { "type": "object", "properties": { "operator": { "const": "either" }, "left": { "$ref": "#/$defs/booleanExpression" }, "right": { "$ref": "#/$defs/booleanExpression" } }, "required": ["operator", "left", "right"] }, "equals": { "type": "object", "properties": { "operator": { "const": "equals" }, "left": { "$ref": "#" }, "right": { "$ref": "#" } }, "required": ["operator", "left", "right"] }, "exists": { "type": "object", "properties": { "operator": { "const": "exists" }, "expression": { "$ref": "#" } }, "required": ["operator", "expression"] }, "greaterThan": { "type": "object", "properties": { "operator": { "const": "greaterThan" }, "left": { "$ref": "#/$defs/numberExpression" }, "right": { "$ref": "#/$defs/numberExpression" } }, "required": ["operator", "left", "right"] }, "not": { "type": "object", "properties": { "operator": { "const": "not" }, "expression": { "$ref": "#/$defs/booleanExpression" } }, "required": ["operator", "expression"] }, "some": { "type": "object", "properties": { "operator": { "const": "some" }, "arrayExpression": { "$ref": "#/$defs/arrayExpression" }, "condition": { "$ref": "#/$defs/booleanExpression" } }, "required": ["operator", "arrayExpression", "condition"] }, "userProductItems": { "type": "object", "properties": { "operator": { "const": "userProductItems" } }, "required": ["operator"] } };
|
|
27228
26954
|
const expressionSchema = {
|
|
26955
|
+
$schema: $schema$9,
|
|
26956
|
+
$id: $id$a,
|
|
26957
|
+
title: title$9,
|
|
26958
|
+
anyOf: anyOf$1,
|
|
26959
|
+
$defs: $defs$3
|
|
26960
|
+
};
|
|
26961
|
+
const $schema$8 = "https://json-schema.org/draft/2020-12/schema";
|
|
26962
|
+
const $id$9 = "/meta/extension-config.json";
|
|
26963
|
+
const title$8 = "ExtensionConfig";
|
|
26964
|
+
const type$9 = "object";
|
|
26965
|
+
const properties$a = { "name": { "type": "string" }, "server": { "type": "object", "properties": { "enable": { "type": "boolean" }, "database": { "type": "object", "properties": { "enable": { "type": "boolean" } } } } }, "components": { "type": "object", "additionalProperties": { "type": "object", "properties": { "path": { "type": "string" }, "description": { "type": "string" }, "supports": { "type": "object", "properties": { "children": { "type": "boolean" } } } }, "required": ["path"] } } };
|
|
26966
|
+
const required$2 = ["name"];
|
|
26967
|
+
const extensionManifestSchema = {
|
|
27229
26968
|
$schema: $schema$8,
|
|
27230
26969
|
$id: $id$9,
|
|
27231
26970
|
title: title$8,
|
|
27232
|
-
|
|
27233
|
-
|
|
26971
|
+
type: type$9,
|
|
26972
|
+
properties: properties$a,
|
|
26973
|
+
required: required$2
|
|
27234
26974
|
};
|
|
27235
26975
|
var _2020 = { exports: {} };
|
|
27236
26976
|
var core$2 = {};
|
|
@@ -32869,12 +32609,12 @@ function requirePatternProperties() {
|
|
|
32869
32609
|
patternProperties.default = def;
|
|
32870
32610
|
return patternProperties;
|
|
32871
32611
|
}
|
|
32872
|
-
var not = {};
|
|
32612
|
+
var not$1 = {};
|
|
32873
32613
|
var hasRequiredNot;
|
|
32874
32614
|
function requireNot() {
|
|
32875
|
-
if (hasRequiredNot) return not;
|
|
32615
|
+
if (hasRequiredNot) return not$1;
|
|
32876
32616
|
hasRequiredNot = 1;
|
|
32877
|
-
Object.defineProperty(not, "__esModule", { value: true });
|
|
32617
|
+
Object.defineProperty(not$1, "__esModule", { value: true });
|
|
32878
32618
|
const util_1 = requireUtil$5();
|
|
32879
32619
|
const def = {
|
|
32880
32620
|
keyword: "not",
|
|
@@ -32897,8 +32637,8 @@ function requireNot() {
|
|
|
32897
32637
|
},
|
|
32898
32638
|
error: { message: "must NOT be valid" }
|
|
32899
32639
|
};
|
|
32900
|
-
not.default = def;
|
|
32901
|
-
return not;
|
|
32640
|
+
not$1.default = def;
|
|
32641
|
+
return not$1;
|
|
32902
32642
|
}
|
|
32903
32643
|
var anyOf = {};
|
|
32904
32644
|
var hasRequiredAnyOf;
|
|
@@ -34686,7 +34426,27 @@ function requireApi() {
|
|
|
34686
34426
|
api.types = types2;
|
|
34687
34427
|
return api;
|
|
34688
34428
|
}
|
|
34689
|
-
requireApi();
|
|
34429
|
+
var apiExports = requireApi();
|
|
34430
|
+
var eq = (x) => (y) => x === y;
|
|
34431
|
+
var not = (fn) => (x) => !fn(x);
|
|
34432
|
+
var getValues = (
|
|
34433
|
+
/*::<Obj: Object>*/
|
|
34434
|
+
((o) => Object.values(o))
|
|
34435
|
+
);
|
|
34436
|
+
var notUndefined = (x) => x !== void 0;
|
|
34437
|
+
var isXError = (x) => (error2) => error2.keyword === x;
|
|
34438
|
+
var isRequiredError = isXError("required");
|
|
34439
|
+
var isAnyOfError = isXError("anyOf");
|
|
34440
|
+
var isEnumError = isXError("enum");
|
|
34441
|
+
var getErrors = (node2) => node2 && node2.errors ? node2.errors.map(
|
|
34442
|
+
(e) => e.keyword === "errorMessage" ? { ...e.params.errors[0], message: e.message } : e
|
|
34443
|
+
) : [];
|
|
34444
|
+
var getChildren = (node2) => node2 && getValues(node2.children) || [];
|
|
34445
|
+
var getSiblings = (parent2) => (node2) => getChildren(parent2).filter(not(eq(node2)));
|
|
34446
|
+
var concatAll = (
|
|
34447
|
+
/*::<T>*/
|
|
34448
|
+
((xs) => (ys) => ys.reduce((zs, z) => zs.concat(z), xs))
|
|
34449
|
+
);
|
|
34690
34450
|
var ansiStyles = { exports: {} };
|
|
34691
34451
|
var colorName;
|
|
34692
34452
|
var hasRequiredColorName;
|
|
@@ -36240,7 +36000,8 @@ function requireSource() {
|
|
|
36240
36000
|
source = chalk2;
|
|
36241
36001
|
return source;
|
|
36242
36002
|
}
|
|
36243
|
-
requireSource();
|
|
36003
|
+
var sourceExports = requireSource();
|
|
36004
|
+
const chalk = /* @__PURE__ */ getDefaultExportFromCjs(sourceExports);
|
|
36244
36005
|
var lib$2 = {};
|
|
36245
36006
|
var picocolors = { exports: {} };
|
|
36246
36007
|
var hasRequiredPicocolors;
|
|
@@ -36723,15 +36484,170 @@ ${frame}`;
|
|
|
36723
36484
|
lib$2.highlight = highlight;
|
|
36724
36485
|
return lib$2;
|
|
36725
36486
|
}
|
|
36726
|
-
requireLib$1();
|
|
36727
|
-
var
|
|
36487
|
+
var libExports = requireLib$1();
|
|
36488
|
+
var getPointers = (dataPath) => {
|
|
36489
|
+
return dataPath.split("/").slice(1).map((pointer2) => pointer2.split("~1").join("/").split("~0").join("~"));
|
|
36490
|
+
};
|
|
36491
|
+
function getMetaFromPath(jsonAst, dataPath, includeIdentifierLocation) {
|
|
36492
|
+
const pointers = getPointers(dataPath);
|
|
36493
|
+
const lastPointerIndex = pointers.length - 1;
|
|
36494
|
+
return pointers.reduce((obj, pointer2, idx) => {
|
|
36495
|
+
switch (obj.type) {
|
|
36496
|
+
case "Object": {
|
|
36497
|
+
const filtered = obj.members.filter(
|
|
36498
|
+
(child) => child.name.value === pointer2
|
|
36499
|
+
);
|
|
36500
|
+
if (filtered.length !== 1) {
|
|
36501
|
+
throw new Error(`Couldn't find property ${pointer2} of ${dataPath}`);
|
|
36502
|
+
}
|
|
36503
|
+
const { name, value } = filtered[0];
|
|
36504
|
+
return includeIdentifierLocation && idx === lastPointerIndex ? name : value;
|
|
36505
|
+
}
|
|
36506
|
+
case "Array":
|
|
36507
|
+
return obj.elements[pointer2];
|
|
36508
|
+
default:
|
|
36509
|
+
console.log(obj);
|
|
36510
|
+
}
|
|
36511
|
+
}, jsonAst.body);
|
|
36512
|
+
}
|
|
36513
|
+
function getDecoratedDataPath(jsonAst, dataPath) {
|
|
36514
|
+
let decoratedPath = "";
|
|
36515
|
+
getPointers(dataPath).reduce((obj, pointer2) => {
|
|
36516
|
+
switch (obj.type) {
|
|
36517
|
+
case "Object": {
|
|
36518
|
+
decoratedPath += `/${pointer2}`;
|
|
36519
|
+
const filtered = obj.members.filter(
|
|
36520
|
+
(child) => child.name.value === pointer2
|
|
36521
|
+
);
|
|
36522
|
+
if (filtered.length !== 1) {
|
|
36523
|
+
throw new Error(`Couldn't find property ${pointer2} of ${dataPath}`);
|
|
36524
|
+
}
|
|
36525
|
+
return filtered[0].value;
|
|
36526
|
+
}
|
|
36527
|
+
case "Array": {
|
|
36528
|
+
decoratedPath += `/${pointer2}${getTypeName(obj.elements[pointer2])}`;
|
|
36529
|
+
return obj.elements[pointer2];
|
|
36530
|
+
}
|
|
36531
|
+
default:
|
|
36532
|
+
console.log(obj);
|
|
36533
|
+
}
|
|
36534
|
+
}, jsonAst.body);
|
|
36535
|
+
return decoratedPath;
|
|
36536
|
+
}
|
|
36537
|
+
function getTypeName(obj) {
|
|
36538
|
+
if (!obj || !obj.elements) {
|
|
36539
|
+
return "";
|
|
36540
|
+
}
|
|
36541
|
+
const type2 = obj.elements.filter(
|
|
36542
|
+
(child) => child && child.name && child.name.value === "type"
|
|
36543
|
+
);
|
|
36544
|
+
if (!type2.length) {
|
|
36545
|
+
return "";
|
|
36546
|
+
}
|
|
36547
|
+
return type2[0].value && `:${type2[0].value.value}` || "";
|
|
36548
|
+
}
|
|
36549
|
+
var BaseValidationError = class {
|
|
36550
|
+
constructor(options = { isIdentifierLocation: false }, { data, schema, jsonAst, jsonRaw }) {
|
|
36551
|
+
this.options = options;
|
|
36552
|
+
this.data = data;
|
|
36553
|
+
this.schema = schema;
|
|
36554
|
+
this.jsonAst = jsonAst;
|
|
36555
|
+
this.jsonRaw = jsonRaw;
|
|
36556
|
+
}
|
|
36557
|
+
getLocation(dataPath = this.instancePath) {
|
|
36558
|
+
const { isIdentifierLocation, isSkipEndLocation } = this.options;
|
|
36559
|
+
const { loc } = getMetaFromPath(
|
|
36560
|
+
this.jsonAst,
|
|
36561
|
+
dataPath,
|
|
36562
|
+
isIdentifierLocation
|
|
36563
|
+
);
|
|
36564
|
+
return {
|
|
36565
|
+
start: loc.start,
|
|
36566
|
+
end: isSkipEndLocation ? void 0 : loc.end
|
|
36567
|
+
};
|
|
36568
|
+
}
|
|
36569
|
+
getDecoratedPath(dataPath = this.instancePath) {
|
|
36570
|
+
const decoratedPath = getDecoratedDataPath(this.jsonAst, dataPath);
|
|
36571
|
+
return decoratedPath;
|
|
36572
|
+
}
|
|
36573
|
+
getCodeFrame(message, dataPath = this.instancePath) {
|
|
36574
|
+
return libExports.codeFrameColumns(this.jsonRaw, this.getLocation(dataPath), {
|
|
36575
|
+
highlightCode: true,
|
|
36576
|
+
message
|
|
36577
|
+
});
|
|
36578
|
+
}
|
|
36579
|
+
/**
|
|
36580
|
+
* @return {string}
|
|
36581
|
+
*/
|
|
36582
|
+
get instancePath() {
|
|
36583
|
+
return typeof this.options.instancePath !== "undefined" ? this.options.instancePath : this.options.dataPath;
|
|
36584
|
+
}
|
|
36585
|
+
print() {
|
|
36586
|
+
throw new Error(
|
|
36587
|
+
`Implement the 'print' method inside ${this.constructor.name}!`
|
|
36588
|
+
);
|
|
36589
|
+
}
|
|
36590
|
+
getError() {
|
|
36591
|
+
throw new Error(
|
|
36592
|
+
`Implement the 'getError' method inside ${this.constructor.name}!`
|
|
36593
|
+
);
|
|
36594
|
+
}
|
|
36595
|
+
};
|
|
36596
|
+
var RequiredValidationError = class extends BaseValidationError {
|
|
36597
|
+
getLocation(dataPath = this.instancePath) {
|
|
36598
|
+
const { start } = super.getLocation(dataPath);
|
|
36599
|
+
return { start };
|
|
36600
|
+
}
|
|
36601
|
+
print() {
|
|
36602
|
+
const { message, params } = this.options;
|
|
36603
|
+
const output = [chalk`{red {bold REQUIRED} ${message}}\n`];
|
|
36604
|
+
return output.concat(
|
|
36605
|
+
this.getCodeFrame(
|
|
36606
|
+
chalk`☹️ {magentaBright ${params.missingProperty}} is missing here!`
|
|
36607
|
+
)
|
|
36608
|
+
);
|
|
36609
|
+
}
|
|
36610
|
+
getError() {
|
|
36611
|
+
const { message } = this.options;
|
|
36612
|
+
return {
|
|
36613
|
+
...this.getLocation(),
|
|
36614
|
+
error: `${this.getDecoratedPath()} ${message}`,
|
|
36615
|
+
path: this.instancePath
|
|
36616
|
+
};
|
|
36617
|
+
}
|
|
36618
|
+
};
|
|
36619
|
+
var AdditionalPropValidationError = class extends BaseValidationError {
|
|
36620
|
+
constructor(...args) {
|
|
36621
|
+
super(...args);
|
|
36622
|
+
this.options.isIdentifierLocation = true;
|
|
36623
|
+
}
|
|
36624
|
+
print() {
|
|
36625
|
+
const { message, params } = this.options;
|
|
36626
|
+
const output = [chalk`{red {bold ADDTIONAL PROPERTY} ${message}}\n`];
|
|
36627
|
+
return output.concat(
|
|
36628
|
+
this.getCodeFrame(
|
|
36629
|
+
chalk`😲 {magentaBright ${params.additionalProperty}} is not expected to be here!`,
|
|
36630
|
+
`${this.instancePath}/${params.additionalProperty}`
|
|
36631
|
+
)
|
|
36632
|
+
);
|
|
36633
|
+
}
|
|
36634
|
+
getError() {
|
|
36635
|
+
const { params } = this.options;
|
|
36636
|
+
return {
|
|
36637
|
+
...this.getLocation(`${this.instancePath}/${params.additionalProperty}`),
|
|
36638
|
+
error: `${this.getDecoratedPath()} Property ${params.additionalProperty} is not expected to be here`,
|
|
36639
|
+
path: this.instancePath
|
|
36640
|
+
};
|
|
36641
|
+
}
|
|
36642
|
+
};
|
|
36643
|
+
var leven$1 = { exports: {} };
|
|
36728
36644
|
var hasRequiredLeven;
|
|
36729
36645
|
function requireLeven() {
|
|
36730
|
-
if (hasRequiredLeven) return leven.exports;
|
|
36646
|
+
if (hasRequiredLeven) return leven$1.exports;
|
|
36731
36647
|
hasRequiredLeven = 1;
|
|
36732
36648
|
const array2 = [];
|
|
36733
36649
|
const charCodeCache = [];
|
|
36734
|
-
const
|
|
36650
|
+
const leven2 = (left, right) => {
|
|
36735
36651
|
if (left === right) {
|
|
36736
36652
|
return 0;
|
|
36737
36653
|
}
|
|
@@ -36777,11 +36693,12 @@ function requireLeven() {
|
|
|
36777
36693
|
}
|
|
36778
36694
|
return result2;
|
|
36779
36695
|
};
|
|
36780
|
-
leven.exports =
|
|
36781
|
-
leven.exports.default =
|
|
36782
|
-
return leven.exports;
|
|
36696
|
+
leven$1.exports = leven2;
|
|
36697
|
+
leven$1.exports.default = leven2;
|
|
36698
|
+
return leven$1.exports;
|
|
36783
36699
|
}
|
|
36784
|
-
requireLeven();
|
|
36700
|
+
var levenExports = requireLeven();
|
|
36701
|
+
const leven = /* @__PURE__ */ getDefaultExportFromCjs(levenExports);
|
|
36785
36702
|
var jsonpointer = {};
|
|
36786
36703
|
var hasRequiredJsonpointer;
|
|
36787
36704
|
function requireJsonpointer() {
|
|
@@ -36802,19 +36719,19 @@ function requireJsonpointer() {
|
|
|
36802
36719
|
if (!hasExcape.test(str)) return str;
|
|
36803
36720
|
return str.replace(escapeMatcher, escapeReplacer);
|
|
36804
36721
|
}
|
|
36805
|
-
function setter(obj,
|
|
36722
|
+
function setter(obj, pointer2, value) {
|
|
36806
36723
|
var part;
|
|
36807
36724
|
var hasNextPart;
|
|
36808
|
-
for (var p = 1, len =
|
|
36809
|
-
if (
|
|
36810
|
-
part = untilde(
|
|
36725
|
+
for (var p = 1, len = pointer2.length; p < len; ) {
|
|
36726
|
+
if (pointer2[p] === "constructor" || pointer2[p] === "prototype" || pointer2[p] === "__proto__") return obj;
|
|
36727
|
+
part = untilde(pointer2[p++]);
|
|
36811
36728
|
hasNextPart = len > p;
|
|
36812
36729
|
if (typeof obj[part] === "undefined") {
|
|
36813
36730
|
if (Array.isArray(obj) && part === "-") {
|
|
36814
36731
|
part = obj.length;
|
|
36815
36732
|
}
|
|
36816
36733
|
if (hasNextPart) {
|
|
36817
|
-
if (
|
|
36734
|
+
if (pointer2[p] !== "" && pointer2[p] < Infinity || pointer2[p] === "-") obj[part] = [];
|
|
36818
36735
|
else obj[part] = {};
|
|
36819
36736
|
}
|
|
36820
36737
|
}
|
|
@@ -36826,40 +36743,40 @@ function requireJsonpointer() {
|
|
|
36826
36743
|
else obj[part] = value;
|
|
36827
36744
|
return oldValue;
|
|
36828
36745
|
}
|
|
36829
|
-
function compilePointer(
|
|
36830
|
-
if (typeof
|
|
36831
|
-
|
|
36832
|
-
if (
|
|
36746
|
+
function compilePointer(pointer2) {
|
|
36747
|
+
if (typeof pointer2 === "string") {
|
|
36748
|
+
pointer2 = pointer2.split("/");
|
|
36749
|
+
if (pointer2[0] === "") return pointer2;
|
|
36833
36750
|
throw new Error("Invalid JSON pointer.");
|
|
36834
|
-
} else if (Array.isArray(
|
|
36835
|
-
for (const part of
|
|
36751
|
+
} else if (Array.isArray(pointer2)) {
|
|
36752
|
+
for (const part of pointer2) {
|
|
36836
36753
|
if (typeof part !== "string" && typeof part !== "number") {
|
|
36837
36754
|
throw new Error("Invalid JSON pointer. Must be of type string or number.");
|
|
36838
36755
|
}
|
|
36839
36756
|
}
|
|
36840
|
-
return
|
|
36757
|
+
return pointer2;
|
|
36841
36758
|
}
|
|
36842
36759
|
throw new Error("Invalid JSON pointer.");
|
|
36843
36760
|
}
|
|
36844
|
-
function get(obj,
|
|
36761
|
+
function get(obj, pointer2) {
|
|
36845
36762
|
if (typeof obj !== "object") throw new Error("Invalid input object.");
|
|
36846
|
-
|
|
36847
|
-
var len =
|
|
36763
|
+
pointer2 = compilePointer(pointer2);
|
|
36764
|
+
var len = pointer2.length;
|
|
36848
36765
|
if (len === 1) return obj;
|
|
36849
36766
|
for (var p = 1; p < len; ) {
|
|
36850
|
-
obj = obj[untilde(
|
|
36767
|
+
obj = obj[untilde(pointer2[p++])];
|
|
36851
36768
|
if (len === p) return obj;
|
|
36852
36769
|
if (typeof obj !== "object" || obj === null) return void 0;
|
|
36853
36770
|
}
|
|
36854
36771
|
}
|
|
36855
|
-
function set(obj,
|
|
36772
|
+
function set(obj, pointer2, value) {
|
|
36856
36773
|
if (typeof obj !== "object") throw new Error("Invalid input object.");
|
|
36857
|
-
|
|
36858
|
-
if (
|
|
36859
|
-
return setter(obj,
|
|
36774
|
+
pointer2 = compilePointer(pointer2);
|
|
36775
|
+
if (pointer2.length === 0) throw new Error("Invalid JSON pointer for set.");
|
|
36776
|
+
return setter(obj, pointer2, value);
|
|
36860
36777
|
}
|
|
36861
|
-
function compile2(
|
|
36862
|
-
var compiled = compilePointer(
|
|
36778
|
+
function compile2(pointer2) {
|
|
36779
|
+
var compiled = compilePointer(pointer2);
|
|
36863
36780
|
return {
|
|
36864
36781
|
get: function(object2) {
|
|
36865
36782
|
return get(object2, compiled);
|
|
@@ -36874,32 +36791,203 @@ function requireJsonpointer() {
|
|
|
36874
36791
|
jsonpointer.compile = compile2;
|
|
36875
36792
|
return jsonpointer;
|
|
36876
36793
|
}
|
|
36877
|
-
requireJsonpointer();
|
|
36794
|
+
var jsonpointerExports = requireJsonpointer();
|
|
36795
|
+
const pointer = /* @__PURE__ */ getDefaultExportFromCjs(jsonpointerExports);
|
|
36796
|
+
var EnumValidationError = class extends BaseValidationError {
|
|
36797
|
+
print() {
|
|
36798
|
+
const {
|
|
36799
|
+
message,
|
|
36800
|
+
params: { allowedValues }
|
|
36801
|
+
} = this.options;
|
|
36802
|
+
const bestMatch = this.findBestMatch();
|
|
36803
|
+
const output = [
|
|
36804
|
+
chalk`{red {bold ENUM} ${message}}`,
|
|
36805
|
+
chalk`{red (${allowedValues.join(", ")})}\n`
|
|
36806
|
+
];
|
|
36807
|
+
return output.concat(
|
|
36808
|
+
this.getCodeFrame(
|
|
36809
|
+
bestMatch !== null ? chalk`👈🏽 Did you mean {magentaBright ${bestMatch}} here?` : chalk`👈🏽 Unexpected value, should be equal to one of the allowed values`
|
|
36810
|
+
)
|
|
36811
|
+
);
|
|
36812
|
+
}
|
|
36813
|
+
getError() {
|
|
36814
|
+
const { message, params } = this.options;
|
|
36815
|
+
const bestMatch = this.findBestMatch();
|
|
36816
|
+
const allowedValues = params.allowedValues.join(", ");
|
|
36817
|
+
const output = {
|
|
36818
|
+
...this.getLocation(),
|
|
36819
|
+
error: `${this.getDecoratedPath()} ${message}: ${allowedValues}`,
|
|
36820
|
+
path: this.instancePath
|
|
36821
|
+
};
|
|
36822
|
+
if (bestMatch !== null) {
|
|
36823
|
+
output.suggestion = `Did you mean ${bestMatch}?`;
|
|
36824
|
+
}
|
|
36825
|
+
return output;
|
|
36826
|
+
}
|
|
36827
|
+
findBestMatch() {
|
|
36828
|
+
const {
|
|
36829
|
+
params: { allowedValues }
|
|
36830
|
+
} = this.options;
|
|
36831
|
+
const currentValue = this.instancePath === "" ? this.data : pointer.get(this.data, this.instancePath);
|
|
36832
|
+
if (!currentValue) {
|
|
36833
|
+
return null;
|
|
36834
|
+
}
|
|
36835
|
+
const bestMatch = allowedValues.map((value) => ({
|
|
36836
|
+
value,
|
|
36837
|
+
weight: leven(value, currentValue.toString())
|
|
36838
|
+
})).sort(
|
|
36839
|
+
(x, y) => x.weight > y.weight ? 1 : x.weight < y.weight ? -1 : 0
|
|
36840
|
+
)[0];
|
|
36841
|
+
return allowedValues.length === 1 || bestMatch.weight < bestMatch.value.length ? bestMatch.value : null;
|
|
36842
|
+
}
|
|
36843
|
+
};
|
|
36844
|
+
var DefaultValidationError = class extends BaseValidationError {
|
|
36845
|
+
print() {
|
|
36846
|
+
const { keyword: keyword2, message } = this.options;
|
|
36847
|
+
const output = [chalk`{red {bold ${keyword2.toUpperCase()}} ${message}}\n`];
|
|
36848
|
+
return output.concat(
|
|
36849
|
+
this.getCodeFrame(chalk`👈🏽 {magentaBright ${keyword2}} ${message}`)
|
|
36850
|
+
);
|
|
36851
|
+
}
|
|
36852
|
+
getError() {
|
|
36853
|
+
const { keyword: keyword2, message } = this.options;
|
|
36854
|
+
return {
|
|
36855
|
+
...this.getLocation(),
|
|
36856
|
+
error: `${this.getDecoratedPath()}: ${keyword2} ${message}`,
|
|
36857
|
+
path: this.instancePath
|
|
36858
|
+
};
|
|
36859
|
+
}
|
|
36860
|
+
};
|
|
36861
|
+
var JSON_POINTERS_REGEX = /\/[\w_-]+(\/\d+)?/g;
|
|
36862
|
+
function makeTree(ajvErrors = []) {
|
|
36863
|
+
const root2 = { children: {} };
|
|
36864
|
+
ajvErrors.forEach((ajvError) => {
|
|
36865
|
+
const instancePath = typeof ajvError.instancePath !== "undefined" ? ajvError.instancePath : ajvError.dataPath;
|
|
36866
|
+
const paths = instancePath === "" ? [""] : instancePath.match(JSON_POINTERS_REGEX);
|
|
36867
|
+
paths && paths.reduce((obj, path2, i) => {
|
|
36868
|
+
obj.children[path2] = obj.children[path2] || { children: {}, errors: [] };
|
|
36869
|
+
if (i === paths.length - 1) {
|
|
36870
|
+
obj.children[path2].errors.push(ajvError);
|
|
36871
|
+
}
|
|
36872
|
+
return obj.children[path2];
|
|
36873
|
+
}, root2);
|
|
36874
|
+
});
|
|
36875
|
+
return root2;
|
|
36876
|
+
}
|
|
36877
|
+
function filterRedundantErrors(root2, parent2, key) {
|
|
36878
|
+
getErrors(root2).forEach((error2) => {
|
|
36879
|
+
if (isRequiredError(error2)) {
|
|
36880
|
+
root2.errors = [error2];
|
|
36881
|
+
root2.children = {};
|
|
36882
|
+
}
|
|
36883
|
+
});
|
|
36884
|
+
if (getErrors(root2).some(isAnyOfError)) {
|
|
36885
|
+
if (Object.keys(root2.children).length > 0) {
|
|
36886
|
+
delete root2.errors;
|
|
36887
|
+
}
|
|
36888
|
+
}
|
|
36889
|
+
if (root2.errors && root2.errors.length && getErrors(root2).every(isEnumError)) {
|
|
36890
|
+
if (getSiblings(parent2)(root2).filter(notUndefined).some(getErrors)) {
|
|
36891
|
+
delete parent2.children[key];
|
|
36892
|
+
}
|
|
36893
|
+
}
|
|
36894
|
+
Object.entries(root2.children).forEach(
|
|
36895
|
+
([key2, child]) => filterRedundantErrors(child, root2, key2)
|
|
36896
|
+
);
|
|
36897
|
+
}
|
|
36898
|
+
function createErrorInstances(root2, options) {
|
|
36899
|
+
const errors2 = getErrors(root2);
|
|
36900
|
+
if (errors2.length && errors2.every(isEnumError)) {
|
|
36901
|
+
const uniqueValues = new Set(
|
|
36902
|
+
concatAll([])(errors2.map((e) => e.params.allowedValues))
|
|
36903
|
+
);
|
|
36904
|
+
const allowedValues = [...uniqueValues];
|
|
36905
|
+
const error2 = errors2[0];
|
|
36906
|
+
return [
|
|
36907
|
+
new EnumValidationError(
|
|
36908
|
+
{
|
|
36909
|
+
...error2,
|
|
36910
|
+
params: { allowedValues }
|
|
36911
|
+
},
|
|
36912
|
+
options
|
|
36913
|
+
)
|
|
36914
|
+
];
|
|
36915
|
+
} else {
|
|
36916
|
+
return concatAll(
|
|
36917
|
+
errors2.reduce((ret, error2) => {
|
|
36918
|
+
switch (error2.keyword) {
|
|
36919
|
+
case "additionalProperties":
|
|
36920
|
+
return ret.concat(
|
|
36921
|
+
new AdditionalPropValidationError(error2, options)
|
|
36922
|
+
);
|
|
36923
|
+
case "required":
|
|
36924
|
+
return ret.concat(new RequiredValidationError(error2, options));
|
|
36925
|
+
default:
|
|
36926
|
+
return ret.concat(new DefaultValidationError(error2, options));
|
|
36927
|
+
}
|
|
36928
|
+
}, [])
|
|
36929
|
+
)(getChildren(root2).map((child) => createErrorInstances(child, options)));
|
|
36930
|
+
}
|
|
36931
|
+
}
|
|
36932
|
+
var helpers_default = (ajvErrors, options) => {
|
|
36933
|
+
const tree = makeTree(ajvErrors || []);
|
|
36934
|
+
filterRedundantErrors(tree);
|
|
36935
|
+
return createErrorInstances(tree, options);
|
|
36936
|
+
};
|
|
36937
|
+
var index_default = (schema, data, errors2, options = {}) => {
|
|
36938
|
+
const { format: format2 = "cli", indent: indent2 = null, json: json2 = null } = options;
|
|
36939
|
+
const jsonRaw = json2 || JSON.stringify(data, null, indent2);
|
|
36940
|
+
const jsonAst = apiExports.parse(jsonRaw);
|
|
36941
|
+
const customErrorToText = (error2) => error2.print().join("\n");
|
|
36942
|
+
const customErrorToStructure = (error2) => error2.getError();
|
|
36943
|
+
const customErrors = helpers_default(errors2, {
|
|
36944
|
+
data,
|
|
36945
|
+
schema,
|
|
36946
|
+
jsonAst,
|
|
36947
|
+
jsonRaw
|
|
36948
|
+
});
|
|
36949
|
+
if (format2 === "cli") {
|
|
36950
|
+
return customErrors.map(customErrorToText).join("\n\n");
|
|
36951
|
+
} else {
|
|
36952
|
+
return customErrors.map(customErrorToStructure);
|
|
36953
|
+
}
|
|
36954
|
+
};
|
|
36878
36955
|
const instance = new _2020Exports.Ajv2020();
|
|
36879
36956
|
instance.addSchema([
|
|
36880
36957
|
componentsSchema,
|
|
36881
36958
|
strippedComponentsSchema,
|
|
36882
36959
|
contextDataSchema,
|
|
36883
|
-
expressionSchema
|
|
36960
|
+
expressionSchema,
|
|
36961
|
+
extensionManifestSchema
|
|
36884
36962
|
]);
|
|
36885
36963
|
const errorsText = (instance2) => {
|
|
36886
36964
|
const { errors: errors2 } = instance2;
|
|
36887
36965
|
const detail = errors2?.slice(0, 5).map((error2) => `${error2.instancePath} ${error2.message ?? "invalid"}`.trim()).join(", ");
|
|
36888
36966
|
return `Invalid data: ${detail ?? "validation failed"}`;
|
|
36889
36967
|
};
|
|
36890
|
-
const
|
|
36891
|
-
|
|
36968
|
+
const validateSafe = (schema, data, errorsFormat, ajvInstance) => {
|
|
36969
|
+
try {
|
|
36970
|
+
if (ajvInstance.validate(schema, data)) {
|
|
36971
|
+
return {
|
|
36972
|
+
ok: true,
|
|
36973
|
+
value: data
|
|
36974
|
+
};
|
|
36975
|
+
}
|
|
36892
36976
|
return {
|
|
36893
|
-
ok:
|
|
36894
|
-
|
|
36977
|
+
ok: false,
|
|
36978
|
+
error: errorsFormat === "ajv" ? errorsText(ajvInstance) : index_default(schema, data, ajvInstance.errors, {
|
|
36979
|
+
format: "cli",
|
|
36980
|
+
indent: 2
|
|
36981
|
+
})
|
|
36982
|
+
};
|
|
36983
|
+
} catch {
|
|
36984
|
+
return {
|
|
36985
|
+
ok: false,
|
|
36986
|
+
error: "Validation failed"
|
|
36895
36987
|
};
|
|
36896
36988
|
}
|
|
36897
|
-
return {
|
|
36898
|
-
ok: false,
|
|
36899
|
-
error: errorsText(validate2)
|
|
36900
|
-
};
|
|
36901
36989
|
};
|
|
36902
|
-
const validateExtensionManifest =
|
|
36990
|
+
const validateExtensionManifest = (manifest, errorsFormat = "ajv") => validateSafe(extensionManifestSchema, manifest, errorsFormat, instance);
|
|
36903
36991
|
const requireValidExtensionDir = async (dir2) => {
|
|
36904
36992
|
const extConfigPath = resolve$1(dir2, "extension.json");
|
|
36905
36993
|
if (!existsSync(extConfigPath)) {
|
|
@@ -43033,10 +43121,10 @@ var hasRequiredEq;
|
|
|
43033
43121
|
function requireEq() {
|
|
43034
43122
|
if (hasRequiredEq) return eq_1;
|
|
43035
43123
|
hasRequiredEq = 1;
|
|
43036
|
-
function
|
|
43124
|
+
function eq2(value, other) {
|
|
43037
43125
|
return value === other || value !== value && other !== other;
|
|
43038
43126
|
}
|
|
43039
|
-
eq_1 =
|
|
43127
|
+
eq_1 = eq2;
|
|
43040
43128
|
return eq_1;
|
|
43041
43129
|
}
|
|
43042
43130
|
var isLength_1;
|
|
@@ -43083,14 +43171,14 @@ var hasRequired_isIterateeCall;
|
|
|
43083
43171
|
function require_isIterateeCall() {
|
|
43084
43172
|
if (hasRequired_isIterateeCall) return _isIterateeCall;
|
|
43085
43173
|
hasRequired_isIterateeCall = 1;
|
|
43086
|
-
var
|
|
43174
|
+
var eq2 = requireEq(), isArrayLike2 = requireIsArrayLike(), isIndex = require_isIndex(), isObject2 = requireIsObject();
|
|
43087
43175
|
function isIterateeCall(value, index2, object2) {
|
|
43088
43176
|
if (!isObject2(object2)) {
|
|
43089
43177
|
return false;
|
|
43090
43178
|
}
|
|
43091
43179
|
var type2 = typeof index2;
|
|
43092
43180
|
if (type2 == "number" ? isArrayLike2(object2) && isIndex(index2, object2.length) : type2 == "string" && index2 in object2) {
|
|
43093
|
-
return
|
|
43181
|
+
return eq2(object2[index2], value);
|
|
43094
43182
|
}
|
|
43095
43183
|
return false;
|
|
43096
43184
|
}
|
|
@@ -43352,7 +43440,7 @@ var hasRequiredDefaults;
|
|
|
43352
43440
|
function requireDefaults() {
|
|
43353
43441
|
if (hasRequiredDefaults) return defaults_1;
|
|
43354
43442
|
hasRequiredDefaults = 1;
|
|
43355
|
-
var baseRest = require_baseRest(),
|
|
43443
|
+
var baseRest = require_baseRest(), eq2 = requireEq(), isIterateeCall = require_isIterateeCall(), keysIn = requireKeysIn();
|
|
43356
43444
|
var objectProto2 = Object.prototype;
|
|
43357
43445
|
var hasOwnProperty2 = objectProto2.hasOwnProperty;
|
|
43358
43446
|
var defaults2 = baseRest(function(object2, sources) {
|
|
@@ -43371,7 +43459,7 @@ function requireDefaults() {
|
|
|
43371
43459
|
while (++propsIndex < propsLength) {
|
|
43372
43460
|
var key = props[propsIndex];
|
|
43373
43461
|
var value = object2[key];
|
|
43374
|
-
if (value === void 0 ||
|
|
43462
|
+
if (value === void 0 || eq2(value, objectProto2[key]) && !hasOwnProperty2.call(object2, key)) {
|
|
43375
43463
|
object2[key] = source2[key];
|
|
43376
43464
|
}
|
|
43377
43465
|
}
|
|
@@ -49679,11 +49767,11 @@ var hasRequired_assocIndexOf;
|
|
|
49679
49767
|
function require_assocIndexOf() {
|
|
49680
49768
|
if (hasRequired_assocIndexOf) return _assocIndexOf;
|
|
49681
49769
|
hasRequired_assocIndexOf = 1;
|
|
49682
|
-
var
|
|
49770
|
+
var eq2 = requireEq();
|
|
49683
49771
|
function assocIndexOf(array2, key) {
|
|
49684
49772
|
var length = array2.length;
|
|
49685
49773
|
while (length--) {
|
|
49686
|
-
if (
|
|
49774
|
+
if (eq2(array2[length][0], key)) {
|
|
49687
49775
|
return length;
|
|
49688
49776
|
}
|
|
49689
49777
|
}
|
|
@@ -65693,16 +65781,6 @@ const resolveServerAndDbOptions = (manifest) => {
|
|
|
65693
65781
|
}
|
|
65694
65782
|
return { enableServer, enableDb };
|
|
65695
65783
|
};
|
|
65696
|
-
const formatValidationErrors = (errors2) => {
|
|
65697
|
-
if (!errors2 || errors2.length === 0) {
|
|
65698
|
-
return "Invalid extension config.";
|
|
65699
|
-
}
|
|
65700
|
-
return errors2.map((error2) => {
|
|
65701
|
-
const path2 = error2.instancePath || "/";
|
|
65702
|
-
const message = error2.message ?? "is invalid";
|
|
65703
|
-
return `${path2} ${message}`.trim();
|
|
65704
|
-
}).join("; ");
|
|
65705
|
-
};
|
|
65706
65784
|
const createExtension = async (opts, env2) => {
|
|
65707
65785
|
const cwd = process.cwd();
|
|
65708
65786
|
let nameFromConfig = null;
|
|
@@ -65722,10 +65800,11 @@ const createExtension = async (opts, env2) => {
|
|
|
65722
65800
|
const parsedExtensionConfig = JSON.parse(
|
|
65723
65801
|
await readFile(extensionConfigPath, "utf8")
|
|
65724
65802
|
);
|
|
65725
|
-
|
|
65726
|
-
|
|
65803
|
+
const validateResult = validateExtensionManifest(parsedExtensionConfig);
|
|
65804
|
+
if (validateResult.ok) {
|
|
65805
|
+
nameFromConfig = validateResult.value.name;
|
|
65727
65806
|
} else {
|
|
65728
|
-
extensionConfigError = `Invalid extension config at ${extensionConfigPath}: ${
|
|
65807
|
+
extensionConfigError = `Invalid extension config at ${extensionConfigPath}: ${validateResult.error}`;
|
|
65729
65808
|
}
|
|
65730
65809
|
} catch (error2) {
|
|
65731
65810
|
extensionConfigError = `Failed to read extension config at ${extensionConfigPath}: ${parseErrorMessage(error2)}`;
|
|
@@ -65824,43 +65903,6 @@ const createExtension = async (opts, env2) => {
|
|
|
65824
65903
|
const envContents = updatedEnvLines.join("\n");
|
|
65825
65904
|
await writeFile(envFilePath2, envContents.endsWith("\n") ? envContents : `${envContents}
|
|
65826
65905
|
`);
|
|
65827
|
-
if (opts.dev) {
|
|
65828
|
-
if (!devServerDbOptions) {
|
|
65829
|
-
console.error("The --dev flag requires a valid extension.json manifest.");
|
|
65830
|
-
process.exit(1);
|
|
65831
|
-
}
|
|
65832
|
-
const { enableServer, enableDb } = devServerDbOptions;
|
|
65833
|
-
const versionResult = await client2.request({
|
|
65834
|
-
document: CreateExtensionVersionDocument,
|
|
65835
|
-
variables: {
|
|
65836
|
-
input: {
|
|
65837
|
-
extensionId: extension.id,
|
|
65838
|
-
extensionName: extension.name,
|
|
65839
|
-
versionName: "1",
|
|
65840
|
-
manifest: JSON.stringify(manifest),
|
|
65841
|
-
enableServer,
|
|
65842
|
-
enableDb,
|
|
65843
|
-
autoDeploy: false
|
|
65844
|
-
}
|
|
65845
|
-
},
|
|
65846
|
-
requestHeaders: {
|
|
65847
|
-
Authorization: `Bearer ${apiToken}`
|
|
65848
|
-
}
|
|
65849
|
-
});
|
|
65850
|
-
if (versionResult.createExtensionVersion.__typename !== "CreateExtensionVersionSuccessResult") {
|
|
65851
|
-
console.error(
|
|
65852
|
-
`Failed to create dev extension version (${versionResult.createExtensionVersion.__typename}):`,
|
|
65853
|
-
versionResult.createExtensionVersion.message
|
|
65854
|
-
);
|
|
65855
|
-
process.exit(1);
|
|
65856
|
-
}
|
|
65857
|
-
if (opts.verbose) {
|
|
65858
|
-
console.log(
|
|
65859
|
-
`Created dev extension version 1 (ID ${versionResult.createExtensionVersion.extensionVersion.id})`
|
|
65860
|
-
);
|
|
65861
|
-
console.log("Skipping upload in dev mode.");
|
|
65862
|
-
}
|
|
65863
|
-
}
|
|
65864
65906
|
return;
|
|
65865
65907
|
}
|
|
65866
65908
|
console.error(
|
|
@@ -66402,6 +66444,7 @@ const initDb = async (opts, env2) => {
|
|
|
66402
66444
|
coreDbUrl: coreDbUrlObject
|
|
66403
66445
|
});
|
|
66404
66446
|
};
|
|
66447
|
+
const defaultDevServerImage = "us-docker.pkg.dev/wirechunk/dev-server/core:latest";
|
|
66405
66448
|
const parseStartFlag = (value, name) => {
|
|
66406
66449
|
const trimmed = value?.trim();
|
|
66407
66450
|
if (!trimmed) {
|
|
@@ -66414,11 +66457,7 @@ const parseStartFlag = (value, name) => {
|
|
|
66414
66457
|
process.exit(1);
|
|
66415
66458
|
};
|
|
66416
66459
|
const startCore = async (opts, env2) => {
|
|
66417
|
-
const image = env2.WIRECHUNK_CORE_DEV_SERVER_IMAGE;
|
|
66418
|
-
if (!image) {
|
|
66419
|
-
console.error("Missing WIRECHUNK_CORE_DEV_SERVER_IMAGE in environment");
|
|
66420
|
-
process.exit(1);
|
|
66421
|
-
}
|
|
66460
|
+
const image = env2.WIRECHUNK_CORE_DEV_SERVER_IMAGE?.trim() || defaultDevServerImage;
|
|
66422
66461
|
const databaseUrl = env2.WIRECHUNK_CORE_DATABASE_URL_DOCKER || env2.WIRECHUNK_CORE_DATABASE_URL;
|
|
66423
66462
|
if (!databaseUrl) {
|
|
66424
66463
|
console.error(
|
|
@@ -66486,26 +66525,50 @@ const startCore = async (opts, env2) => {
|
|
|
66486
66525
|
process.exit(exitCode);
|
|
66487
66526
|
}
|
|
66488
66527
|
};
|
|
66528
|
+
const hasVersion = (value) => typeof value === "object" && value !== null && "version" in value;
|
|
66529
|
+
const packageJsonPath = resolve$1(dirname(fileURLToPath(import.meta.url)), "../package.json");
|
|
66530
|
+
const getCliVersion = () => {
|
|
66531
|
+
const parsed = JSON.parse(readFileSync(packageJsonPath, "utf8"));
|
|
66532
|
+
if (!hasVersion(parsed) || typeof parsed.version !== "string" || parsed.version.length === 0) {
|
|
66533
|
+
throw new Error("package.json is missing a version string");
|
|
66534
|
+
}
|
|
66535
|
+
return parsed.version;
|
|
66536
|
+
};
|
|
66537
|
+
const version = (_options) => {
|
|
66538
|
+
console.log(getCliVersion());
|
|
66539
|
+
};
|
|
66489
66540
|
const program = new Command().name("wirechunk").option("--verbose", "output debug logging").option(
|
|
66490
66541
|
"--env-mode <mode>",
|
|
66491
|
-
'the mode to use for finding .env files to load environment variables, such as "test" to load .env, .env.test, .env.local, and .env.test.local; also for finding config files to include when creating an extension or extension version, such as config.production.json'
|
|
66542
|
+
'the mode to use for finding .env files to load environment variables, such as "test" to load .env, .env.test, .env.local, and .env.test.local (in that order); also for finding config files to include when creating an extension or extension version, such as config.production.json'
|
|
66492
66543
|
).description(`The official Wirechunk CLI
|
|
66493
66544
|
|
|
66494
|
-
By default, environment variables are loaded from the .env file in the current working directory,
|
|
66495
|
-
|
|
66496
|
-
|
|
66545
|
+
By default, environment variables are loaded from the .env file in the current working directory, then the .env.local file, and then from the environment.
|
|
66546
|
+
|
|
66547
|
+
When --env-mode is used, variables are loaded from .env, then .env.<mode>, then .env.local, then .env.<mode>.local, and finally from the environment.
|
|
66548
|
+
|
|
66549
|
+
Variables loaded later overwrite those loaded earlier. Variables from the environment have the highest precedence.
|
|
66497
66550
|
|
|
66498
66551
|
Environment variables used by some commands:
|
|
66499
66552
|
WIRECHUNK_CORE_SERVER_URL (the core admin server URL for commands using the API)
|
|
66500
|
-
WIRECHUNK_CORE_DATABASE_URL (the core database URL for commands requiring direct database access)
|
|
66553
|
+
WIRECHUNK_CORE_DATABASE_URL (the core database URL for commands requiring direct database access)
|
|
66554
|
+
WIRECHUNK_API_TOKEN (the API token for authentication)
|
|
66555
|
+
WIRECHUNK_CORE_JWT_SECRET (the JWT secret for creating new tokens)`);
|
|
66556
|
+
const withOptions = (action) => async (options, cmd) => {
|
|
66557
|
+
const mergedOptions = { ...program.opts(), ...options };
|
|
66558
|
+
if (mergedOptions.verbose) {
|
|
66559
|
+
console.log(`Running ${chalk$1.green.bold(cmd.name())}`);
|
|
66560
|
+
}
|
|
66561
|
+
return action(mergedOptions);
|
|
66562
|
+
};
|
|
66501
66563
|
const withOptionsAndEnv = (action) => async (options, cmd) => {
|
|
66502
66564
|
const mergedOptions = { ...program.opts(), ...options };
|
|
66503
66565
|
if (mergedOptions.verbose) {
|
|
66504
|
-
console.log(`Running ${chalk.green.bold(cmd.name())}`);
|
|
66566
|
+
console.log(`Running ${chalk$1.green.bold(cmd.name())}`);
|
|
66505
66567
|
}
|
|
66506
66568
|
const env2 = await parseEnv(mergedOptions.envMode);
|
|
66507
66569
|
return action(mergedOptions, env2);
|
|
66508
66570
|
};
|
|
66571
|
+
program.command("version").description("print the CLI version").action(withOptions(version));
|
|
66509
66572
|
program.command("bootstrap").description("create a platform").option("--dev", "bootstrap with development defaults").option("--name <string>", "the name of the platform").option("--handle <string>", "the handle of the platform").option("--admin-site-domain <string>", "the domain of the admin site (dashboard)").action(withOptionsAndEnv(bootstrap));
|
|
66510
66573
|
program.command("create-extension").description("create an extension").option("--platform-id <string>", "the ID of the platform").option("--name <string>", "the name of the extension").option(
|
|
66511
66574
|
"--config-file <string>",
|