@wirechunk/cli 0.1.0 → 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.
Files changed (2) hide show
  1. package/build/main.js +454 -421
  2. package/package.json +2 -2
package/build/main.js CHANGED
@@ -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$3(Class, schema, mask) {
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;
@@ -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$3(ZodNonOptional$1, inst, args[0]);
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$1 = requireLib$5();
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$1.toSeconds(libExports$1.parse(parseInterval(value).toISOString()));
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$2(Class, schema, mask) {
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;
@@ -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$2(ZodNonOptional, inst, args[0]);
25781
+ inst.required = (...args) => required$3(ZodNonOptional, inst, args[0]);
25782
25782
  });
25783
25783
  function object(shape, params) {
25784
25784
  const def = {
@@ -26867,304 +26867,21 @@ WIRECHUNK_PLATFORM_ID=${result2.platformId}
26867
26867
  );
26868
26868
  }
26869
26869
  };
26870
- const validateExtensionConfig = validate25;
26871
- function validate25(data, { instancePath = "", parentData, parentDataProperty, rootData = data, dynamicAnchors = {} } = {}) {
26872
- let vErrors = null;
26873
- let errors2 = 0;
26874
- const evaluated0 = validate25.evaluated;
26875
- if (evaluated0.dynamicProps) {
26876
- evaluated0.props = void 0;
26877
- }
26878
- if (evaluated0.dynamicItems) {
26879
- evaluated0.items = void 0;
26880
- }
26881
- {
26882
- if (data && typeof data == "object" && !Array.isArray(data)) {
26883
- let missing0;
26884
- if (data.name === void 0 && (missing0 = "name")) {
26885
- validate25.errors = [
26886
- {
26887
- instancePath,
26888
- schemaPath: "#/required",
26889
- keyword: "required",
26890
- params: { missingProperty: missing0 },
26891
- message: "must have required property '" + missing0 + "'"
26892
- }
26893
- ];
26894
- return false;
26895
- } else {
26896
- if (data.name !== void 0) {
26897
- const _errs1 = errors2;
26898
- if (typeof data.name !== "string") {
26899
- validate25.errors = [
26900
- {
26901
- instancePath: instancePath + "/name",
26902
- schemaPath: "#/properties/name/type",
26903
- keyword: "type",
26904
- params: { type: "string" },
26905
- message: "must be string"
26906
- }
26907
- ];
26908
- return false;
26909
- }
26910
- var valid0 = _errs1 === errors2;
26911
- } else {
26912
- var valid0 = true;
26913
- }
26914
- if (valid0) {
26915
- if (data.server !== void 0) {
26916
- let data1 = data.server;
26917
- const _errs3 = errors2;
26918
- {
26919
- if (data1 && typeof data1 == "object" && !Array.isArray(data1)) {
26920
- if (data1.enable !== void 0) {
26921
- const _errs5 = errors2;
26922
- if (typeof data1.enable !== "boolean") {
26923
- validate25.errors = [
26924
- {
26925
- instancePath: instancePath + "/server/enable",
26926
- schemaPath: "#/properties/server/properties/enable/type",
26927
- keyword: "type",
26928
- params: { type: "boolean" },
26929
- message: "must be boolean"
26930
- }
26931
- ];
26932
- return false;
26933
- }
26934
- var valid1 = _errs5 === errors2;
26935
- } else {
26936
- var valid1 = true;
26937
- }
26938
- if (valid1) {
26939
- if (data1.database !== void 0) {
26940
- let data3 = data1.database;
26941
- const _errs7 = errors2;
26942
- {
26943
- if (data3 && typeof data3 == "object" && !Array.isArray(data3)) {
26944
- if (data3.enable !== void 0) {
26945
- if (typeof data3.enable !== "boolean") {
26946
- validate25.errors = [
26947
- {
26948
- instancePath: instancePath + "/server/database/enable",
26949
- schemaPath: "#/properties/server/properties/database/properties/enable/type",
26950
- keyword: "type",
26951
- params: { type: "boolean" },
26952
- message: "must be boolean"
26953
- }
26954
- ];
26955
- return false;
26956
- }
26957
- }
26958
- } else {
26959
- validate25.errors = [
26960
- {
26961
- instancePath: instancePath + "/server/database",
26962
- schemaPath: "#/properties/server/properties/database/type",
26963
- keyword: "type",
26964
- params: { type: "object" },
26965
- message: "must be object"
26966
- }
26967
- ];
26968
- return false;
26969
- }
26970
- }
26971
- var valid1 = _errs7 === errors2;
26972
- } else {
26973
- var valid1 = true;
26974
- }
26975
- }
26976
- } else {
26977
- validate25.errors = [
26978
- {
26979
- instancePath: instancePath + "/server",
26980
- schemaPath: "#/properties/server/type",
26981
- keyword: "type",
26982
- params: { type: "object" },
26983
- message: "must be object"
26984
- }
26985
- ];
26986
- return false;
26987
- }
26988
- }
26989
- var valid0 = _errs3 === errors2;
26990
- } else {
26991
- var valid0 = true;
26992
- }
26993
- if (valid0) {
26994
- if (data.components !== void 0) {
26995
- let data5 = data.components;
26996
- const _errs11 = errors2;
26997
- {
26998
- if (data5 && typeof data5 == "object" && !Array.isArray(data5)) {
26999
- for (const key0 in data5) {
27000
- let data6 = data5[key0];
27001
- const _errs14 = errors2;
27002
- {
27003
- if (data6 && typeof data6 == "object" && !Array.isArray(data6)) {
27004
- let missing1;
27005
- if (data6.path === void 0 && (missing1 = "path")) {
27006
- validate25.errors = [
27007
- {
27008
- instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1"),
27009
- schemaPath: "#/properties/components/additionalProperties/required",
27010
- keyword: "required",
27011
- params: { missingProperty: missing1 },
27012
- message: "must have required property '" + missing1 + "'"
27013
- }
27014
- ];
27015
- return false;
27016
- } else {
27017
- if (data6.path !== void 0) {
27018
- const _errs16 = errors2;
27019
- if (typeof data6.path !== "string") {
27020
- validate25.errors = [
27021
- {
27022
- instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1") + "/path",
27023
- schemaPath: "#/properties/components/additionalProperties/properties/path/type",
27024
- keyword: "type",
27025
- params: { type: "string" },
27026
- message: "must be string"
27027
- }
27028
- ];
27029
- return false;
27030
- }
27031
- var valid4 = _errs16 === errors2;
27032
- } else {
27033
- var valid4 = true;
27034
- }
27035
- if (valid4) {
27036
- if (data6.description !== void 0) {
27037
- const _errs18 = errors2;
27038
- if (typeof data6.description !== "string") {
27039
- validate25.errors = [
27040
- {
27041
- instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1") + "/description",
27042
- schemaPath: "#/properties/components/additionalProperties/properties/description/type",
27043
- keyword: "type",
27044
- params: { type: "string" },
27045
- message: "must be string"
27046
- }
27047
- ];
27048
- return false;
27049
- }
27050
- var valid4 = _errs18 === errors2;
27051
- } else {
27052
- var valid4 = true;
27053
- }
27054
- if (valid4) {
27055
- if (data6.supports !== void 0) {
27056
- let data9 = data6.supports;
27057
- const _errs20 = errors2;
27058
- {
27059
- if (data9 && typeof data9 == "object" && !Array.isArray(data9)) {
27060
- if (data9.children !== void 0) {
27061
- if (typeof data9.children !== "boolean") {
27062
- validate25.errors = [
27063
- {
27064
- instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1") + "/supports/children",
27065
- schemaPath: "#/properties/components/additionalProperties/properties/supports/properties/children/type",
27066
- keyword: "type",
27067
- params: { type: "boolean" },
27068
- message: "must be boolean"
27069
- }
27070
- ];
27071
- return false;
27072
- }
27073
- }
27074
- } else {
27075
- validate25.errors = [
27076
- {
27077
- instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1") + "/supports",
27078
- schemaPath: "#/properties/components/additionalProperties/properties/supports/type",
27079
- keyword: "type",
27080
- params: { type: "object" },
27081
- message: "must be object"
27082
- }
27083
- ];
27084
- return false;
27085
- }
27086
- }
27087
- var valid4 = _errs20 === errors2;
27088
- } else {
27089
- var valid4 = true;
27090
- }
27091
- }
27092
- }
27093
- }
27094
- } else {
27095
- validate25.errors = [
27096
- {
27097
- instancePath: instancePath + "/components/" + key0.replace(/~/g, "~0").replace(/\//g, "~1"),
27098
- schemaPath: "#/properties/components/additionalProperties/type",
27099
- keyword: "type",
27100
- params: { type: "object" },
27101
- message: "must be object"
27102
- }
27103
- ];
27104
- return false;
27105
- }
27106
- }
27107
- var valid3 = _errs14 === errors2;
27108
- if (!valid3) {
27109
- break;
27110
- }
27111
- }
27112
- } else {
27113
- validate25.errors = [
27114
- {
27115
- instancePath: instancePath + "/components",
27116
- schemaPath: "#/properties/components/type",
27117
- keyword: "type",
27118
- params: { type: "object" },
27119
- message: "must be object"
27120
- }
27121
- ];
27122
- return false;
27123
- }
27124
- }
27125
- var valid0 = _errs11 === errors2;
27126
- } else {
27127
- var valid0 = true;
27128
- }
27129
- }
27130
- }
27131
- }
27132
- } else {
27133
- validate25.errors = [
27134
- {
27135
- instancePath,
27136
- schemaPath: "#/type",
27137
- keyword: "type",
27138
- params: { type: "object" },
27139
- message: "must be object"
27140
- }
27141
- ];
27142
- return false;
27143
- }
27144
- }
27145
- validate25.errors = vErrors;
27146
- return errors2 === 0;
27147
- }
27148
- validate25.evaluated = {
27149
- props: { name: true, server: true, components: true },
27150
- dynamicProps: false,
27151
- dynamicItems: false
27152
- };
27153
- const type$b = "array";
27154
- 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"]}]}`);
27155
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"]}]}}`);
27156
- const $id$b = "/designer/components.json";
26873
+ const $id$c = "/designer/components.json";
27157
26874
  const componentsSchema = {
27158
- type: type$b,
26875
+ type: type$c,
27159
26876
  items: items$2,
27160
26877
  $defs: $defs$6,
27161
- $id: $id$b
26878
+ $id: $id$c
27162
26879
  };
27163
- const type$a = "array";
27164
- 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"]}]}`);
27165
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"] } };
27166
26883
  const strippedComponentsSchema = {
27167
- type: type$a,
26884
+ type: type$b,
27168
26885
  items: items$1,
27169
26886
  $defs: $defs$5
27170
26887
  };
@@ -27215,31 +26932,45 @@ function isString(value) {
27215
26932
  return typeof value == "string" || !isArray(value) && isObjectLike$1(value) && baseGetTag(value) == stringTag;
27216
26933
  }
27217
26934
  const isNonEmptyString = (value) => isString(value) && value.length > 0;
27218
- const $schema$9 = "https://json-schema.org/draft/2020-12/schema";
27219
- const $id$a = "/context-data/context-data.json";
27220
- const title$9 = "ContextData";
27221
- const type$9 = "object";
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";
27222
26939
  const additionalProperties$2 = { "$ref": "#/$defs/dataValue" };
27223
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"] } };
27224
26941
  const contextDataSchema = {
27225
- $schema: $schema$9,
27226
- $id: $id$a,
27227
- title: title$9,
27228
- type: type$9,
26942
+ $schema: $schema$a,
26943
+ $id: $id$b,
26944
+ title: title$a,
26945
+ type: type$a,
27229
26946
  additionalProperties: additionalProperties$2,
27230
26947
  $defs: $defs$4
27231
26948
  };
27232
- const $schema$8 = "https://json-schema.org/draft/2020-12/schema";
27233
- const $id$9 = "/expressions/expression.json";
27234
- const title$8 = "Expression";
26949
+ const $schema$9 = "https://json-schema.org/draft/2020-12/schema";
26950
+ const $id$a = "/expressions/expression.json";
26951
+ const title$9 = "Expression";
27235
26952
  const anyOf$1 = [{ "$ref": "#/$defs/arrayExpression" }, { "$ref": "#/$defs/booleanExpression" }, { "$ref": "#/$defs/numberExpression" }, { "$ref": "#/$defs/stringExpression" }];
27236
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"] } };
27237
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 = {
27238
26968
  $schema: $schema$8,
27239
26969
  $id: $id$9,
27240
26970
  title: title$8,
27241
- anyOf: anyOf$1,
27242
- $defs: $defs$3
26971
+ type: type$9,
26972
+ properties: properties$a,
26973
+ required: required$2
27243
26974
  };
27244
26975
  var _2020 = { exports: {} };
27245
26976
  var core$2 = {};
@@ -32878,12 +32609,12 @@ function requirePatternProperties() {
32878
32609
  patternProperties.default = def;
32879
32610
  return patternProperties;
32880
32611
  }
32881
- var not = {};
32612
+ var not$1 = {};
32882
32613
  var hasRequiredNot;
32883
32614
  function requireNot() {
32884
- if (hasRequiredNot) return not;
32615
+ if (hasRequiredNot) return not$1;
32885
32616
  hasRequiredNot = 1;
32886
- Object.defineProperty(not, "__esModule", { value: true });
32617
+ Object.defineProperty(not$1, "__esModule", { value: true });
32887
32618
  const util_1 = requireUtil$5();
32888
32619
  const def = {
32889
32620
  keyword: "not",
@@ -32906,8 +32637,8 @@ function requireNot() {
32906
32637
  },
32907
32638
  error: { message: "must NOT be valid" }
32908
32639
  };
32909
- not.default = def;
32910
- return not;
32640
+ not$1.default = def;
32641
+ return not$1;
32911
32642
  }
32912
32643
  var anyOf = {};
32913
32644
  var hasRequiredAnyOf;
@@ -34695,7 +34426,27 @@ function requireApi() {
34695
34426
  api.types = types2;
34696
34427
  return api;
34697
34428
  }
34698
- 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
+ );
34699
34450
  var ansiStyles = { exports: {} };
34700
34451
  var colorName;
34701
34452
  var hasRequiredColorName;
@@ -36249,7 +36000,8 @@ function requireSource() {
36249
36000
  source = chalk2;
36250
36001
  return source;
36251
36002
  }
36252
- requireSource();
36003
+ var sourceExports = requireSource();
36004
+ const chalk = /* @__PURE__ */ getDefaultExportFromCjs(sourceExports);
36253
36005
  var lib$2 = {};
36254
36006
  var picocolors = { exports: {} };
36255
36007
  var hasRequiredPicocolors;
@@ -36732,15 +36484,170 @@ ${frame}`;
36732
36484
  lib$2.highlight = highlight;
36733
36485
  return lib$2;
36734
36486
  }
36735
- requireLib$1();
36736
- var leven = { exports: {} };
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: {} };
36737
36644
  var hasRequiredLeven;
36738
36645
  function requireLeven() {
36739
- if (hasRequiredLeven) return leven.exports;
36646
+ if (hasRequiredLeven) return leven$1.exports;
36740
36647
  hasRequiredLeven = 1;
36741
36648
  const array2 = [];
36742
36649
  const charCodeCache = [];
36743
- const leven$1 = (left, right) => {
36650
+ const leven2 = (left, right) => {
36744
36651
  if (left === right) {
36745
36652
  return 0;
36746
36653
  }
@@ -36786,11 +36693,12 @@ function requireLeven() {
36786
36693
  }
36787
36694
  return result2;
36788
36695
  };
36789
- leven.exports = leven$1;
36790
- leven.exports.default = leven$1;
36791
- return leven.exports;
36696
+ leven$1.exports = leven2;
36697
+ leven$1.exports.default = leven2;
36698
+ return leven$1.exports;
36792
36699
  }
36793
- requireLeven();
36700
+ var levenExports = requireLeven();
36701
+ const leven = /* @__PURE__ */ getDefaultExportFromCjs(levenExports);
36794
36702
  var jsonpointer = {};
36795
36703
  var hasRequiredJsonpointer;
36796
36704
  function requireJsonpointer() {
@@ -36811,19 +36719,19 @@ function requireJsonpointer() {
36811
36719
  if (!hasExcape.test(str)) return str;
36812
36720
  return str.replace(escapeMatcher, escapeReplacer);
36813
36721
  }
36814
- function setter(obj, pointer, value) {
36722
+ function setter(obj, pointer2, value) {
36815
36723
  var part;
36816
36724
  var hasNextPart;
36817
- for (var p = 1, len = pointer.length; p < len; ) {
36818
- if (pointer[p] === "constructor" || pointer[p] === "prototype" || pointer[p] === "__proto__") return obj;
36819
- part = untilde(pointer[p++]);
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++]);
36820
36728
  hasNextPart = len > p;
36821
36729
  if (typeof obj[part] === "undefined") {
36822
36730
  if (Array.isArray(obj) && part === "-") {
36823
36731
  part = obj.length;
36824
36732
  }
36825
36733
  if (hasNextPart) {
36826
- if (pointer[p] !== "" && pointer[p] < Infinity || pointer[p] === "-") obj[part] = [];
36734
+ if (pointer2[p] !== "" && pointer2[p] < Infinity || pointer2[p] === "-") obj[part] = [];
36827
36735
  else obj[part] = {};
36828
36736
  }
36829
36737
  }
@@ -36835,40 +36743,40 @@ function requireJsonpointer() {
36835
36743
  else obj[part] = value;
36836
36744
  return oldValue;
36837
36745
  }
36838
- function compilePointer(pointer) {
36839
- if (typeof pointer === "string") {
36840
- pointer = pointer.split("/");
36841
- if (pointer[0] === "") return pointer;
36746
+ function compilePointer(pointer2) {
36747
+ if (typeof pointer2 === "string") {
36748
+ pointer2 = pointer2.split("/");
36749
+ if (pointer2[0] === "") return pointer2;
36842
36750
  throw new Error("Invalid JSON pointer.");
36843
- } else if (Array.isArray(pointer)) {
36844
- for (const part of pointer) {
36751
+ } else if (Array.isArray(pointer2)) {
36752
+ for (const part of pointer2) {
36845
36753
  if (typeof part !== "string" && typeof part !== "number") {
36846
36754
  throw new Error("Invalid JSON pointer. Must be of type string or number.");
36847
36755
  }
36848
36756
  }
36849
- return pointer;
36757
+ return pointer2;
36850
36758
  }
36851
36759
  throw new Error("Invalid JSON pointer.");
36852
36760
  }
36853
- function get(obj, pointer) {
36761
+ function get(obj, pointer2) {
36854
36762
  if (typeof obj !== "object") throw new Error("Invalid input object.");
36855
- pointer = compilePointer(pointer);
36856
- var len = pointer.length;
36763
+ pointer2 = compilePointer(pointer2);
36764
+ var len = pointer2.length;
36857
36765
  if (len === 1) return obj;
36858
36766
  for (var p = 1; p < len; ) {
36859
- obj = obj[untilde(pointer[p++])];
36767
+ obj = obj[untilde(pointer2[p++])];
36860
36768
  if (len === p) return obj;
36861
36769
  if (typeof obj !== "object" || obj === null) return void 0;
36862
36770
  }
36863
36771
  }
36864
- function set(obj, pointer, value) {
36772
+ function set(obj, pointer2, value) {
36865
36773
  if (typeof obj !== "object") throw new Error("Invalid input object.");
36866
- pointer = compilePointer(pointer);
36867
- if (pointer.length === 0) throw new Error("Invalid JSON pointer for set.");
36868
- return setter(obj, pointer, value);
36774
+ pointer2 = compilePointer(pointer2);
36775
+ if (pointer2.length === 0) throw new Error("Invalid JSON pointer for set.");
36776
+ return setter(obj, pointer2, value);
36869
36777
  }
36870
- function compile2(pointer) {
36871
- var compiled = compilePointer(pointer);
36778
+ function compile2(pointer2) {
36779
+ var compiled = compilePointer(pointer2);
36872
36780
  return {
36873
36781
  get: function(object2) {
36874
36782
  return get(object2, compiled);
@@ -36883,32 +36791,203 @@ function requireJsonpointer() {
36883
36791
  jsonpointer.compile = compile2;
36884
36792
  return jsonpointer;
36885
36793
  }
36886
- 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
+ };
36887
36955
  const instance = new _2020Exports.Ajv2020();
36888
36956
  instance.addSchema([
36889
36957
  componentsSchema,
36890
36958
  strippedComponentsSchema,
36891
36959
  contextDataSchema,
36892
- expressionSchema
36960
+ expressionSchema,
36961
+ extensionManifestSchema
36893
36962
  ]);
36894
36963
  const errorsText = (instance2) => {
36895
36964
  const { errors: errors2 } = instance2;
36896
36965
  const detail = errors2?.slice(0, 5).map((error2) => `${error2.instancePath} ${error2.message ?? "invalid"}`.trim()).join(", ");
36897
36966
  return `Invalid data: ${detail ?? "validation failed"}`;
36898
36967
  };
36899
- const preCompiledSafeValidator = (validate2) => (value) => {
36900
- if (validate2(value)) {
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
+ }
36901
36976
  return {
36902
- ok: true,
36903
- value
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"
36904
36987
  };
36905
36988
  }
36906
- return {
36907
- ok: false,
36908
- error: errorsText(validate2)
36909
- };
36910
36989
  };
36911
- const validateExtensionManifest = preCompiledSafeValidator(validateExtensionConfig);
36990
+ const validateExtensionManifest = (manifest, errorsFormat = "ajv") => validateSafe(extensionManifestSchema, manifest, errorsFormat, instance);
36912
36991
  const requireValidExtensionDir = async (dir2) => {
36913
36992
  const extConfigPath = resolve$1(dir2, "extension.json");
36914
36993
  if (!existsSync(extConfigPath)) {
@@ -43042,10 +43121,10 @@ var hasRequiredEq;
43042
43121
  function requireEq() {
43043
43122
  if (hasRequiredEq) return eq_1;
43044
43123
  hasRequiredEq = 1;
43045
- function eq(value, other) {
43124
+ function eq2(value, other) {
43046
43125
  return value === other || value !== value && other !== other;
43047
43126
  }
43048
- eq_1 = eq;
43127
+ eq_1 = eq2;
43049
43128
  return eq_1;
43050
43129
  }
43051
43130
  var isLength_1;
@@ -43092,14 +43171,14 @@ var hasRequired_isIterateeCall;
43092
43171
  function require_isIterateeCall() {
43093
43172
  if (hasRequired_isIterateeCall) return _isIterateeCall;
43094
43173
  hasRequired_isIterateeCall = 1;
43095
- var eq = requireEq(), isArrayLike2 = requireIsArrayLike(), isIndex = require_isIndex(), isObject2 = requireIsObject();
43174
+ var eq2 = requireEq(), isArrayLike2 = requireIsArrayLike(), isIndex = require_isIndex(), isObject2 = requireIsObject();
43096
43175
  function isIterateeCall(value, index2, object2) {
43097
43176
  if (!isObject2(object2)) {
43098
43177
  return false;
43099
43178
  }
43100
43179
  var type2 = typeof index2;
43101
43180
  if (type2 == "number" ? isArrayLike2(object2) && isIndex(index2, object2.length) : type2 == "string" && index2 in object2) {
43102
- return eq(object2[index2], value);
43181
+ return eq2(object2[index2], value);
43103
43182
  }
43104
43183
  return false;
43105
43184
  }
@@ -43361,7 +43440,7 @@ var hasRequiredDefaults;
43361
43440
  function requireDefaults() {
43362
43441
  if (hasRequiredDefaults) return defaults_1;
43363
43442
  hasRequiredDefaults = 1;
43364
- var baseRest = require_baseRest(), eq = requireEq(), isIterateeCall = require_isIterateeCall(), keysIn = requireKeysIn();
43443
+ var baseRest = require_baseRest(), eq2 = requireEq(), isIterateeCall = require_isIterateeCall(), keysIn = requireKeysIn();
43365
43444
  var objectProto2 = Object.prototype;
43366
43445
  var hasOwnProperty2 = objectProto2.hasOwnProperty;
43367
43446
  var defaults2 = baseRest(function(object2, sources) {
@@ -43380,7 +43459,7 @@ function requireDefaults() {
43380
43459
  while (++propsIndex < propsLength) {
43381
43460
  var key = props[propsIndex];
43382
43461
  var value = object2[key];
43383
- if (value === void 0 || eq(value, objectProto2[key]) && !hasOwnProperty2.call(object2, key)) {
43462
+ if (value === void 0 || eq2(value, objectProto2[key]) && !hasOwnProperty2.call(object2, key)) {
43384
43463
  object2[key] = source2[key];
43385
43464
  }
43386
43465
  }
@@ -49688,11 +49767,11 @@ var hasRequired_assocIndexOf;
49688
49767
  function require_assocIndexOf() {
49689
49768
  if (hasRequired_assocIndexOf) return _assocIndexOf;
49690
49769
  hasRequired_assocIndexOf = 1;
49691
- var eq = requireEq();
49770
+ var eq2 = requireEq();
49692
49771
  function assocIndexOf(array2, key) {
49693
49772
  var length = array2.length;
49694
49773
  while (length--) {
49695
- if (eq(array2[length][0], key)) {
49774
+ if (eq2(array2[length][0], key)) {
49696
49775
  return length;
49697
49776
  }
49698
49777
  }
@@ -65702,16 +65781,6 @@ const resolveServerAndDbOptions = (manifest) => {
65702
65781
  }
65703
65782
  return { enableServer, enableDb };
65704
65783
  };
65705
- const formatValidationErrors = (errors2) => {
65706
- if (!errors2 || errors2.length === 0) {
65707
- return "Invalid extension config.";
65708
- }
65709
- return errors2.map((error2) => {
65710
- const path2 = error2.instancePath || "/";
65711
- const message = error2.message ?? "is invalid";
65712
- return `${path2} ${message}`.trim();
65713
- }).join("; ");
65714
- };
65715
65784
  const createExtension = async (opts, env2) => {
65716
65785
  const cwd = process.cwd();
65717
65786
  let nameFromConfig = null;
@@ -65731,10 +65800,11 @@ const createExtension = async (opts, env2) => {
65731
65800
  const parsedExtensionConfig = JSON.parse(
65732
65801
  await readFile(extensionConfigPath, "utf8")
65733
65802
  );
65734
- if (validateExtensionConfig(parsedExtensionConfig)) {
65735
- nameFromConfig = parsedExtensionConfig.name;
65803
+ const validateResult = validateExtensionManifest(parsedExtensionConfig);
65804
+ if (validateResult.ok) {
65805
+ nameFromConfig = validateResult.value.name;
65736
65806
  } else {
65737
- extensionConfigError = `Invalid extension config at ${extensionConfigPath}: ${formatValidationErrors(validateExtensionConfig.errors)}`;
65807
+ extensionConfigError = `Invalid extension config at ${extensionConfigPath}: ${validateResult.error}`;
65738
65808
  }
65739
65809
  } catch (error2) {
65740
65810
  extensionConfigError = `Failed to read extension config at ${extensionConfigPath}: ${parseErrorMessage(error2)}`;
@@ -65833,43 +65903,6 @@ const createExtension = async (opts, env2) => {
65833
65903
  const envContents = updatedEnvLines.join("\n");
65834
65904
  await writeFile(envFilePath2, envContents.endsWith("\n") ? envContents : `${envContents}
65835
65905
  `);
65836
- if (opts.dev) {
65837
- if (!devServerDbOptions) {
65838
- console.error("The --dev flag requires a valid extension.json manifest.");
65839
- process.exit(1);
65840
- }
65841
- const { enableServer, enableDb } = devServerDbOptions;
65842
- const versionResult = await client2.request({
65843
- document: CreateExtensionVersionDocument,
65844
- variables: {
65845
- input: {
65846
- extensionId: extension.id,
65847
- extensionName: extension.name,
65848
- versionName: "1",
65849
- manifest: JSON.stringify(manifest),
65850
- enableServer,
65851
- enableDb,
65852
- autoDeploy: false
65853
- }
65854
- },
65855
- requestHeaders: {
65856
- Authorization: `Bearer ${apiToken}`
65857
- }
65858
- });
65859
- if (versionResult.createExtensionVersion.__typename !== "CreateExtensionVersionSuccessResult") {
65860
- console.error(
65861
- `Failed to create dev extension version (${versionResult.createExtensionVersion.__typename}):`,
65862
- versionResult.createExtensionVersion.message
65863
- );
65864
- process.exit(1);
65865
- }
65866
- if (opts.verbose) {
65867
- console.log(
65868
- `Created dev extension version 1 (ID ${versionResult.createExtensionVersion.extensionVersion.id})`
65869
- );
65870
- console.log("Skipping upload in dev mode.");
65871
- }
65872
- }
65873
65906
  return;
65874
65907
  }
65875
65908
  console.error(
@@ -66523,14 +66556,14 @@ Environment variables used by some commands:
66523
66556
  const withOptions = (action) => async (options, cmd) => {
66524
66557
  const mergedOptions = { ...program.opts(), ...options };
66525
66558
  if (mergedOptions.verbose) {
66526
- console.log(`Running ${chalk.green.bold(cmd.name())}`);
66559
+ console.log(`Running ${chalk$1.green.bold(cmd.name())}`);
66527
66560
  }
66528
66561
  return action(mergedOptions);
66529
66562
  };
66530
66563
  const withOptionsAndEnv = (action) => async (options, cmd) => {
66531
66564
  const mergedOptions = { ...program.opts(), ...options };
66532
66565
  if (mergedOptions.verbose) {
66533
- console.log(`Running ${chalk.green.bold(cmd.name())}`);
66566
+ console.log(`Running ${chalk$1.green.bold(cmd.name())}`);
66534
66567
  }
66535
66568
  const env2 = await parseEnv(mergedOptions.envMode);
66536
66569
  return action(mergedOptions, env2);