@wirechunk/cli 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/main.js CHANGED
@@ -21290,11 +21290,11 @@ const isDirty = (x) => x.status === "dirty";
21290
21290
  const isValid = (x) => x.status === "valid";
21291
21291
  const isAsync$1 = (x) => typeof Promise !== "undefined" && x instanceof Promise;
21292
21292
  function __classPrivateFieldGet(receiver, state2, kind, f) {
21293
- if (typeof state2 === "function" ? receiver !== state2 || !f : !state2.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
21293
+ if (typeof state2 === "function" ? receiver !== state2 || true : !state2.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
21294
21294
  return state2.get(receiver);
21295
21295
  }
21296
21296
  function __classPrivateFieldSet(receiver, state2, value, kind, f) {
21297
- if (typeof state2 === "function" ? receiver !== state2 || !f : !state2.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
21297
+ if (typeof state2 === "function" ? receiver !== state2 || true : !state2.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
21298
21298
  return state2.set(receiver, value), value;
21299
21299
  }
21300
21300
  typeof SuppressedError === "function" ? SuppressedError : function(error2, suppressed, message) {
@@ -25259,6 +25259,16 @@ validate25.evaluated = {
25259
25259
  dynamicProps: false,
25260
25260
  dynamicItems: false
25261
25261
  };
25262
+ const $schema$e = "https://json-schema.org/draft/2020-12/schema";
25263
+ const type$a = "array";
25264
+ const items$1 = { "$ref": "#/$defs/component" };
25265
+ const $defs$8 = JSON.parse(`{"arrayExpression":{"title":"ArrayExpression","oneOf":[{"$ref":"#/$defs/arrayExpressionArrayLiteral"},{"$ref":"#/$defs/arrayExpressionFilter"},{"$ref":"#/$defs/arrayExpressionInputChangeEventArrayValue"},{"$ref":"#/$defs/arrayExpressionInputDataArray"},{"$ref":"#/$defs/arrayExpressionMap"},{"$ref":"#/$defs/arrayExpressionPropsArray"},{"$ref":"#/$defs/arrayExpressionUserFeatureTags"}]},"arrayExpressionArrayLiteral":{"type":"object","properties":{"operator":{"const":"arrayLiteral"},"value":{"type":"array","items":{"$ref":"#/$defs/expression"}}},"required":["operator","value"]},"arrayExpressionFilter":{"type":"object","properties":{"operator":{"const":"filter"},"arrayExpression":{"$ref":"#/$defs/arrayExpression"},"filterExpression":{"$ref":"#/$defs/booleanExpression"}},"required":["operator","arrayExpression","filterExpression"]},"arrayExpressionInputChangeEventArrayValue":{"type":"object","properties":{"operator":{"const":"inputChangeEventArrayValue"}},"required":["operator"]},"arrayExpressionInputDataArray":{"type":"object","properties":{"operator":{"const":"inputDataArray"},"fieldKey":{"type":"string"}},"required":["operator","fieldKey"]},"arrayExpressionPropsArray":{"type":"object","properties":{"operator":{"const":"propsArray"},"prop":{"type":"string"}},"required":["operator","prop"]},"arrayExpressionMap":{"type":"object","properties":{"operator":{"const":"map"},"arrayExpression":{"$ref":"#/$defs/arrayExpression"},"mapExpression":{"$ref":"#/$defs/expression"}},"required":["operator","arrayExpression","mapExpression"]},"arrayExpressionUserFeatureTags":{"type":"object","properties":{"operator":{"const":"userFeatureTags"}},"required":["operator"]},"booleanExpression":{"title":"BooleanExpression","oneOf":[{"$ref":"#/$defs/booleanExpressionAll"},{"$ref":"#/$defs/booleanExpressionArrayIncludes"},{"$ref":"#/$defs/booleanExpressionBooleanValue"},{"$ref":"#/$defs/booleanExpressionBoth"},{"$ref":"#/$defs/booleanExpressionGreaterThan"},{"$ref":"#/$defs/booleanExpressionBooleanLiteral"},{"$ref":"#/$defs/booleanExpressionEither"},{"$ref":"#/$defs/booleanExpressionEquals"},{"$ref":"#/$defs/booleanExpressionExists"},{"$ref":"#/$defs/booleanExpressionInputChangeEventBooleanValue"},{"$ref":"#/$defs/booleanExpressionInputDataBoolean"},{"$ref":"#/$defs/booleanExpressionNot"},{"$ref":"#/$defs/booleanExpressionPropsBoolean"},{"$ref":"#/$defs/booleanExpressionSome"}]},"booleanExpressionAll":{"type":"object","properties":{"operator":{"const":"all"},"arrayExpression":{"$ref":"#/$defs/arrayExpression"},"condition":{"$ref":"#/$defs/booleanExpression"}},"required":["operator","arrayExpression","condition"]},"booleanExpressionArrayIncludes":{"type":"object","properties":{"operator":{"const":"arrayIncludes"},"arrayExpression":{"$ref":"#/$defs/arrayExpression"},"value":{"$ref":"#/$defs/expression"}},"required":["operator","arrayExpression","value"]},"booleanExpressionBooleanLiteral":{"type":"object","properties":{"operator":{"const":"booleanLiteral"},"value":{"type":"boolean"}},"required":["operator","value"]},"booleanExpressionBooleanValue":{"type":"object","properties":{"operator":{"const":"booleanValue"},"model":{"type":"object","properties":{"model":{"const":"dataPropertyBoolean"},"fieldKey":{"type":"string"}},"required":["model","fieldKey"]}},"required":["operator","model"]},"booleanExpressionBoth":{"type":"object","properties":{"operator":{"const":"both"},"left":{"$ref":"#/$defs/booleanExpression"},"right":{"$ref":"#/$defs/booleanExpression"}},"required":["operator","left","right"]},"booleanExpressionEither":{"type":"object","properties":{"operator":{"const":"either"},"left":{"$ref":"#/$defs/booleanExpression"},"right":{"$ref":"#/$defs/booleanExpression"}},"required":["operator","left","right"]},"booleanExpressionEquals":{"type":"object","properties":{"operator":{"const":"equals"},"left":{"$ref":"#/$defs/expression"},"right":{"$ref":"#/$defs/expression"}},"required":["operator","left","right"]},"booleanExpressionExists":{"type":"object","properties":{"operator":{"const":"exists"},"expression":{"$ref":"#/$defs/expression"}},"required":["operator","expression"]},"booleanExpressionGreaterThan":{"type":"object","properties":{"operator":{"const":"greaterThan"},"left":{"$ref":"#/$defs/numberExpression"},"right":{"$ref":"#/$defs/numberExpression"}},"required":["operator","left","right"]},"booleanExpressionInputChangeEventBooleanValue":{"type":"object","properties":{"operator":{"const":"inputChangeEventBooleanValue"}},"required":["operator"]},"booleanExpressionInputDataBoolean":{"type":"object","properties":{"operator":{"const":"inputDataBoolean"},"fieldKey":{"type":"string"}},"required":["operator","fieldKey"]},"booleanExpressionNot":{"type":"object","properties":{"operator":{"const":"not"},"expression":{"$ref":"#/$defs/booleanExpression"}},"required":["operator","expression"]},"booleanExpressionSome":{"type":"object","properties":{"operator":{"const":"some"},"arrayExpression":{"$ref":"#/$defs/arrayExpression"},"condition":{"$ref":"#/$defs/booleanExpression"}},"required":["operator","arrayExpression","condition"]},"booleanExpressionPropsBoolean":{"type":"object","properties":{"operator":{"const":"propsBoolean"},"prop":{"type":"string"}},"required":["operator","prop"]},"contextData":{"title":"ContextData","type":"object","additionalProperties":{"$ref":"#/$defs/contextDataDataValue"}},"contextDataTimeDuration":{"type":"object","properties":{"hours":{"oneOf":[{"type":"number"},{"type":"null"}]},"minutes":{"oneOf":[{"type":"number"},{"type":"null"}]}},"required":["hours","minutes"]},"contextDataDataValue":{"anyOf":[{"type":"boolean"},{"type":"string"},{"type":"number"},{"type":"null"},{"$ref":"#/$defs/contextDataTimeDuration"},{"type":"array","items":{"$ref":"#/$defs/contextDataDataTableRow"}},{"$ref":"#/$defs/contextDataUploadedFile"},{"type":"array","items":{"type":"string"}}]},"contextDataDataTableRow":{"type":"object","properties":{"id":{"type":"string"},"data":{"$ref":"#/$defs/contextData"}},"required":["id","data"]},"contextDataUploadedFile":{"type":"object","properties":{"fileId":{"type":"string"}},"required":["fileId"]},"component":{"title":"Component","anyOf":[{"$ref":"#/$defs/boxComponent"},{"$ref":"#/$defs/buttonComponent"},{"$ref":"#/$defs/calendlyEmbedComponent"},{"$ref":"#/$defs/checkboxInputComponent"},{"$ref":"#/$defs/collapsiblePanelComponent"},{"$ref":"#/$defs/completableVideoInputComponent"},{"$ref":"#/$defs/conditionalLogicComponent"},{"$ref":"#/$defs/courseComponent"},{"$ref":"#/$defs/currentYearComponent"},{"$ref":"#/$defs/customComponentComponent"},{"$ref":"#/$defs/dashboardComponent"},{"$ref":"#/$defs/dataInputTableComponent"},{"$ref":"#/$defs/dateInputComponent"},{"$ref":"#/$defs/documentComponent"},{"$ref":"#/$defs/dropdownInputComponent"},{"$ref":"#/$defs/formComponent"},{"$ref":"#/$defs/formStepComponent"},{"$ref":"#/$defs/formatPropsComponent"},{"$ref":"#/$defs/googlePlaceInputComponent"},{"$ref":"#/$defs/helpTicketsPortalComponent"},{"$ref":"#/$defs/htmlComponent"},{"$ref":"#/$defs/iconComponent"},{"$ref":"#/$defs/imageComponent"},{"$ref":"#/$defs/inputValidationErrorMessageComponent"},{"$ref":"#/$defs/lessonNotesFieldComponent"},{"$ref":"#/$defs/linkComponent"},{"$ref":"#/$defs/mapComponent"},{"$ref":"#/$defs/moveUserPlanComponent"},{"$ref":"#/$defs/multiOrgViewComponent"},{"$ref":"#/$defs/multipleChoiceInputComponent"},{"$ref":"#/$defs/multiSelectInputComponent"},{"$ref":"#/$defs/numberInputComponent"},{"$ref":"#/$defs/orderPageComponent"},{"$ref":"#/$defs/orgBillingSettingsComponent"},{"$ref":"#/$defs/orgSitePagesComponent"},{"$ref":"#/$defs/orgSiteReviewsComponent"},{"$ref":"#/$defs/organizationTeamComponent"},{"$ref":"#/$defs/pageComponent"},{"$ref":"#/$defs/plainTextComponent"},{"$ref":"#/$defs/popoverComponent"},{"$ref":"#/$defs/productItemGuardComponent"},{"$ref":"#/$defs/providePropsComponent"},{"$ref":"#/$defs/radioGroupInputComponent"},{"$ref":"#/$defs/radioGroupInputButtonComponent"},{"$ref":"#/$defs/remoteComponentComponent"},{"$ref":"#/$defs/repeatingGroupInputComponent"},{"$ref":"#/$defs/requestPasswordResetComponent"},{"$ref":"#/$defs/resetPasswordComponent"},{"$ref":"#/$defs/reviewComponent"},{"$ref":"#/$defs/signInGuardComponent"},{"$ref":"#/$defs/siteLogoComponent"},{"$ref":"#/$defs/sitePrivacyPolicyComponent"},{"$ref":"#/$defs/siteTermsOfUseComponent"},{"$ref":"#/$defs/stageComponent"},{"$ref":"#/$defs/stageBodyComponent"},{"$ref":"#/$defs/stageNameComponent"},{"$ref":"#/$defs/textComponent"},{"$ref":"#/$defs/textInputComponent"},{"$ref":"#/$defs/textareaInputComponent"},{"$ref":"#/$defs/typeformComponent"},{"$ref":"#/$defs/userProfileComponent"},{"$ref":"#/$defs/verifiedEmailAddressGuardComponent"},{"$ref":"#/$defs/verifyEmailAddressComponent"},{"$ref":"#/$defs/videoComponent"},{"$ref":"#/$defs/viewPlanStagesButtonComponent"},{"$ref":"#/$defs/widthContainerComponent"}]},"boxComponent":{"title":"BoxComponent","description":"A generic HTML element.","allOf":[{"type":"object","properties":{"type":{"const":"Box"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"tag":{"type":"string","enum":["article","aside","blockquote","code","div","footer","h1","h2","h3","h4","h5","h6","header","label","legend","li","main","nav","ol","p","pre","section","span","ul"],"description":"The HTML tag to use for the element. Defaults to div."}}},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentStyles"},{"$ref":"#/$defs/componentElementId"}]},"buttonComponent":{"title":"ButtonComponent","description":"A button.","allOf":[{"type":"object","properties":{"type":{"const":"Button"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"onClick":{"anyOf":[{"type":"object","properties":{"type":{"const":"doNothing"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"submitForm"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"resetForm"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"goBack"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"goBackFormStep"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"navigate"},"url":{"type":"string"},"openInNewTab":{"type":"boolean"}},"required":["type","url"]}]},"variant":{"type":"string","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).","enum":["solid","soft","surface","outline","ghost"]}}},{"$ref":"#/$defs/componentStyles"},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentName","description":"The name of the button. This is not displayed but is useful for triggers to be able to reference the button."}]},"calendlyEmbedComponent":{"title":"CalendlyEmbedComponent","description":"An embedded Calendly scheduling widget.","allOf":[{"type":"object","properties":{"type":{"const":"CalendlyEmbed"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"url":{"$ref":"#/$defs/componentStringValueSource"},"queryParameters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"A random unique string for identification."},"parameter":{"type":"string"},"value":{"$ref":"#/$defs/componentStringValueSource"}},"required":["id","parameter","value"]}}}},{"$ref":"#/$defs/componentStyles"}]},"checkboxInputComponent":{"title":"CheckboxInputComponent","description":"If value 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, true or false is set as the value.","allOf":[{"type":"object","properties":{"type":{"const":"CheckboxInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentStyles"},{"$ref":"#/$defs/componentStringValue"},{"$ref":"#/$defs/componentDefaultBooleanValue"}]},"collapsiblePanelComponent":{"title":"CollapsiblePanelComponent","description":"A panel that can be collapsed or expanded.","allOf":[{"type":"object","properties":{"type":{"const":"CollapsiblePanel"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"header":{"type":"string","description":"The text displayed in the clickable header."}}},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentStyles"}]},"completableVideoInputComponent":{"title":"CompletableVideoInputComponent","allOf":[{"type":"object","properties":{"type":{"const":"CompletableVideoInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"src":{"type":"string"},"showHeader":{"type":"boolean"},"collapseCompleted":{"type":"boolean","description":"By default, collapseCompleted is false."},"initiallyCollapsed":{"type":"boolean","description":"Default initialCollapsed is false."}}},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentStyles"},{"$ref":"#/$defs/componentDefaultBooleanValue"}]},"conditionalLogicComponent":{"title":"ConditionalLogicComponent","allOf":[{"type":"object","properties":{"type":{"const":"ConditionalLogic"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"condition":{"$ref":"#/$defs/booleanExpression"}}},{"$ref":"#/$defs/componentChildren"}]},"courseComponent":{"title":"CourseComponent","allOf":[{"type":"object","properties":{"type":{"const":"Course"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"courseId":{"type":"string","description":"If set, a Course is used instead of the legacy Plan."},"planId":{"type":"string"},"enableNotes":{"type":"boolean"},"emptyNotesMessage":{"type":"string"}}},{"$ref":"#/$defs/componentStyles"}]},"currentYearComponent":{"title":"CurrentYearComponent","description":"Displays the current year.","allOf":[{"type":"object","properties":{"type":{"const":"CurrentYear"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"}]},"customComponentComponent":{"title":"CustomComponentComponent","description":"A custom component (a saved fragment of components).","allOf":[{"type":"object","properties":{"type":{"const":"CustomComponent"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"customComponentId":{"type":"string","description":"The ID of the custom component to display."},"customProps":{"$ref":"#/$defs/contextData"}},"required":["customComponentId"]}]},"dashboardComponent":{"title":"DashboardComponent","description":"A dashboard layout with a header, sidebar, and main content area.","allOf":[{"type":"object","properties":{"type":{"const":"Dashboard"}},"required":["type"]},{"type":"object","properties":{"mainNavItems":{"type":"array","items":{"$ref":"#/$defs/componentDashboardNavItem"}},"extraNavItems":{"type":"array","items":{"$ref":"#/$defs/componentDashboardNavItem"}},"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"}}}},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentChildren"}]},"dataInputTableComponent":{"title":"DataInputTableComponent","description":"A component for displaying and editing tabular data.","allOf":[{"type":"object","properties":{"type":{"const":"DataInputTable"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentStyles"}]},"dateInputComponent":{"title":"DateInputComponent","allOf":[{"type":"object","properties":{"type":{"const":"DateInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"placeholder":{"type":"string"},"clearable":{"type":"boolean"},"style":{"type":"string","enum":["Calendar","3Fields"]},"minimumDate":{"anyOf":[{"type":"object","properties":{"type":{"const":"today"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"date"},"value":{"type":"string"}},"required":["type","value"]}]},"maximumDate":{"anyOf":[{"type":"object","properties":{"type":{"const":"today"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"date"},"value":{"type":"string"}},"required":["type","value"]}]},"monthPlaceholder":{"type":"string"},"dayPlaceholder":{"type":"string"},"yearPlaceholder":{"type":"string"}}},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentStyles"}]},"documentComponent":{"title":"DocumentComponent","description":"A component that displays a document that can be downloaded.","allOf":[{"type":"object","properties":{"type":{"const":"Document"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"documentId":{"type":"string"}}},{"$ref":"#/$defs/componentStyles"}]},"dropdownInputComponent":{"title":"DropdownInputComponent","allOf":[{"type":"object","properties":{"type":{"const":"DropdownInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"clearable":{"type":"boolean","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."},"placeholder":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"number"},"value":{"type":"string"}},"required":["key","value"]}}}},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentStyles"}]},"formComponent":{"title":"FormComponent","allOf":[{"type":"object","properties":{"type":{"const":"Form"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"formId":{"type":"string"}}},{"$ref":"#/$defs/componentStyles"}]},"formStepComponent":{"title":"FormStepComponent","description":"Represents the current step in a multi-step form.","allOf":[{"type":"object","properties":{"type":{"const":"FormStep"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"}]},"formatPropsComponent":{"title":"FormatPropsComponent","description":"A component that can provide string props to children components by formatting higher props or with a LiquidJS template.","allOf":[{"type":"object","properties":{"type":{"const":"FormatProps"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"props":{"type":"array","items":{"type":"object","description":"The configuration for a prop to provide.","properties":{"id":{"type":"string","description":"A random unique string for identification."},"outputPropName":{"type":"string"},"mode":{"type":"string","enum":["Transform","Template"],"description":"If mode is Transform, the output is a function of the input using one of the built-in format functions. If mode is Template, the output is derived from the configured template."},"inputPropName":{"type":"string","description":"Used only in transform mode."},"format":{"type":"string","enum":["Phone number (###) ###-####","Phone number ###-###-####","U.S. State abbreviation spelled out"],"description":"Used only in transform mode."},"template":{"type":"string","description":"Used only in template mode. A LiquidJS template."}},"required":["id","outputPropName"]}}}},{"$ref":"#/$defs/componentChildren"}]},"googlePlaceInputComponent":{"title":"GooglePlaceInputComponent","description":"A map with a search field that lets you select a Place in Google Maps.","allOf":[{"type":"object","properties":{"type":{"const":"GooglePlaceInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentStyles"}]},"helpTicketsPortalComponent":{"title":"HelpTicketsPortalComponent","description":"A portal for help tickets.","allOf":[{"type":"object","properties":{"type":{"const":"HelpTicketsPortal"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentStyles"}]},"htmlComponent":{"title":"HTMLComponent","description":"A component that renders raw HTML.","allOf":[{"type":"object","properties":{"type":{"const":"HTML"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"html":{"type":"string"}}},{"$ref":"#/$defs/componentStyles"}]},"iconComponent":{"title":"IconComponent","allOf":[{"type":"object","properties":{"type":{"const":"Icon"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"icon":{"type":"string"}}},{"$ref":"#/$defs/componentStyles"}]},"imageComponent":{"title":"ImageComponent","description":"A component that displays an image.","allOf":[{"type":"object","properties":{"type":{"const":"Image"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"src":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"const":"SiteLogoUrl"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Asset"},"assetId":{"type":"string"},"variantId":{"type":"string","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."},"variantIds":{"type":"array","items":{"type":"string"},"description":"Optional IDs of specific variants to use in the srcset attribute. Should not be set together with variantId."}},"required":["type","assetId"]}]},"alt":{"type":"string"}}},{"$ref":"#/$defs/componentStyles"}]},"inputValidationErrorMessageComponent":{"title":"InputValidationErrorMessageComponent","description":"Displays error messages for input validation.","allOf":[{"type":"object","properties":{"type":{"const":"InputValidationErrorMessage"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentStyles"}]},"lessonNotesFieldComponent":{"title":"LessonNotesFieldComponent","description":"A text field for users to save notes related to a lesson (for courses).","allOf":[{"type":"object","properties":{"type":{"const":"LessonNotesField"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentStyles"}]},"linkComponent":{"title":"LinkComponent","description":"A link.","allOf":[{"type":"object","properties":{"type":{"const":"Link"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"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"},"target":{"type":"string","enum":["_blank","_self","_parent","_top"]},"protocol":{"type":"string","description":"Adds the specified protocol prefix to the href attribute's value.","enum":["mailto","tel"]}}},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentStyles"}]},"mapComponent":{"title":"MapComponent","description":"A component that displays a map.","allOf":[{"type":"object","properties":{"type":{"const":"Map"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"focus":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"null"}},"required":["type"]}]}}},{"$ref":"#/$defs/componentStyles"}]},"moveUserPlanComponent":{"title":"MoveUserPlanComponent","description":"A component for a user to move between sequence stages.","allOf":[{"type":"object","properties":{"type":{"const":"MoveUserPlan"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"previousButtonLabel":{"type":"string"},"nextButtonLabel":{"type":"string"}}},{"$ref":"#/$defs/componentStyles"}]},"multiOrgViewComponent":{"title":"MultiOrgViewComponent","description":"A view for viewing all the orgs under a subscription, including all the users of each org and their training progress.","allOf":[{"type":"object","properties":{"type":{"const":"MultiOrgView"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"showUserTrainingProgress":{"type":"boolean"},"userTrainingProgressCourseIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressSequenceIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressContentPlanIds":{"type":"array","items":{"type":"string"}}}},{"$ref":"#/$defs/componentStyles"}]},"multiSelectInputComponent":{"title":"MultiSelectInputComponent","allOf":[{"type":"object","properties":{"type":{"const":"MultiSelectInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"question":{"type":"string"},"choices":{"type":"array","items":{"type":"string"}},"answerIndices":{"type":"array","items":{"type":"number"}}}},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentStyles"}]},"multipleChoiceInputComponent":{"title":"MultipleChoiceInputComponent","allOf":[{"type":"object","properties":{"type":{"const":"MultipleChoiceInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"question":{"type":"string"},"choices":{"type":"array","items":{"type":"string"}},"answerIndex":{"type":"number"}}},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentStyles"}]},"numberInputComponent":{"title":"NumberInputComponent","allOf":[{"type":"object","properties":{"type":{"const":"NumberInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"maxDecimalDigits":{"type":"number"},"placeholder":{"type":"string"},"format":{"type":"string","enum":["Number","Currency","Integer"]}}},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentStyles"}]},"orderPageComponent":{"title":"OrderPageComponent","description":"A component for order pages.","allOf":[{"type":"object","properties":{"type":{"const":"OrderPage"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"enablePromoCode":{"type":"string","enum":["Stripe","Custom"]},"checkoutOptions":{"type":"array","items":{"type":"object","properties":{"subscriptionPlanId":{"type":"string"},"condition":{"$ref":"#/$defs/booleanExpression"}},"required":["subscriptionPlanId"]}}}},{"$ref":"#/$defs/componentStyles"}]},"orgBillingSettingsComponent":{"title":"OrgBillingSettingsComponent","description":"Org billing settings dashboard.","allOf":[{"type":"object","properties":{"type":{"const":"OrgBillingSettings"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentStyles"}]},"orgSitePagesComponent":{"title":"OrgSitePagesComponent","description":"Shows the pages of an org site and allows authorized users to activate and edit pages.","allOf":[{"type":"object","properties":{"type":{"const":"OrgSitePages"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"pageTemplates":{"oneOf":[{"type":"object","properties":{"filter":{"const":"include"},"ids":{"type":"array","items":{"type":"string"}}},"required":["filter","ids"]},{"type":"object","properties":{"filter":{"const":"exclude"},"ids":{"type":"array","items":{"type":"string"}}},"required":["filter","ids"]}]},"defaultPageTemplatePreviewImageUrl":{"type":"string"}}},{"$ref":"#/$defs/componentStyles"}]},"orgSiteReviewsComponent":{"title":"OrgSiteReviewsComponent","description":"Organization site reviews component.","allOf":[{"type":"object","properties":{"type":{"const":"OrgSiteReviews"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentStyles"}]},"organizationTeamComponent":{"title":"OrganizationTeamComponent","description":"Organization team/members dashboard.","allOf":[{"type":"object","properties":{"type":{"const":"OrganizationTeam"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"showUserTrainingProgress":{"type":"boolean"},"userTrainingProgressCourseIds":{"type":"array","items":{"type":"string"}},"userTrainingProgressContentPlanIds":{"type":"array","items":{"type":"string"}}}},{"$ref":"#/$defs/componentStyles"}]},"pageComponent":{"title":"PageComponent","description":"Represents the current page when rendered inside a layout.","allOf":[{"type":"object","properties":{"type":{"const":"Page"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"}]},"plainTextComponent":{"title":"PlainTextComponent","allOf":[{"type":"object","properties":{"type":{"const":"PlainText"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"text":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"const":"PageTitle"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"SiteName"}},"required":["type"]}]}}}]},"popoverComponent":{"title":"PopoverComponent","description":"A popover.","allOf":[{"type":"object","properties":{"type":{"const":"Popover"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"showTriggers":{"type":"array","items":{"$ref":"#/$defs/componentTrigger"},"description":"How the popover can be shown."},"hideTriggers":{"type":"array","items":{"$ref":"#/$defs/componentTrigger"},"description":"How the popover can be hidden."}}},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentStyles"}]},"productItemGuardComponent":{"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.","allOf":[{"type":"object","properties":{"type":{"const":"ProductItemGuard"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"productItem":{"type":"string","description":"The product item to require. If not set, this component does not require anything and displays its children."},"accessDeniedMode":{"type":"string","enum":["CustomMessage","DefaultMessage","Empty"],"description":"The default accessDeniedMode is DefaultMessage. A custom message is defined through children with an AccessDenied slot key."}}},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentStyles"}]},"providePropsComponent":{"title":"ProvidePropsComponent","allOf":[{"type":"object","properties":{"type":{"const":"ProvideProps"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"props":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"A random unique string for identification."},"name":{"type":"string","description":"The name of the prop to provide."},"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"]},{"type":"object","properties":{"type":{"const":"CustomField"},"object":{"type":"string","enum":["Site","Page","User"],"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."},"fieldName":{"type":"string"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"QueryParameter"},"parameter":{"type":"string"}},"required":["type"]}]}},"required":["id","name","source"]}}}},{"$ref":"#/$defs/componentChildren"}]},"radioGroupInputButtonComponent":{"title":"RadioGroupInputButtonComponent","description":"A button within a radio group input.","allOf":[{"type":"object","properties":{"type":{"const":"RadioGroupInputButton"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"childrenOrLabel":{"type":"string","enum":["children","label"],"description":"Whether to use children or a label, applicable only when the parent RadioGroupInput is in indicators mode. When the parent RadioGroupInput is in cards mode, label is ignored and children are displayed."}}},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentConditionalStyles"},{"$ref":"#/$defs/componentStringValue"},{"$ref":"#/$defs/componentStyles"}]},"radioGroupInputComponent":{"title":"RadioGroupInputComponent","allOf":[{"type":"object","properties":{"type":{"const":"RadioGroupInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"displayType":{"type":"string","enum":["indicators","cards"],"description":"The style to use for items. Defaults to indicators (bubble icons). For indicators, children or a label is displayed, depending on each RadioGroupInputButton. For cards, there is default styling with a border color that indicates which item, if any, is selected, and children are displayed."}}},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentStyles"},{"$ref":"#/$defs/componentStringValue"},{"$ref":"#/$defs/componentDefaultStringValue"}]},"remoteComponentComponent":{"title":"RemoteComponentComponent","description":"A component that dynamically loads a remote React component with custom code from an extension.","allOf":[{"type":"object","properties":{"type":{"const":"RemoteComponent"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"extensionName":{"type":"string","description":"The name of the extension that contains the remote component."},"componentName":{"type":"string","description":"The name of the component to display."}}},{"$ref":"#/$defs/componentChildren"}]},"repeatingGroupInputComponent":{"title":"RepeatingGroupInputComponent","description":"An input component that can include multiple input components and other components, allowing an array of records to be entered.","allOf":[{"type":"object","properties":{"type":{"const":"RepeatingGroupInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentStyles"},{"$ref":"#/$defs/componentName"}]},"requestPasswordResetComponent":{"title":"RequestPasswordResetComponent","description":"A component to request password reset.","allOf":[{"type":"object","properties":{"type":{"const":"RequestPasswordReset"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentStyles"}]},"resetPasswordComponent":{"title":"ResetPasswordComponent","description":"A component to reset a password.","allOf":[{"type":"object","properties":{"type":{"const":"ResetPassword"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"mode":{"type":"string","enum":["create","reset"]}}},{"$ref":"#/$defs/componentStyles"}]},"reviewComponent":{"title":"ReviewComponent","description":"Displays a review form with 1-5 stars and redirects to the configured Google Place if the user clicks 5 stars.","allOf":[{"type":"object","properties":{"type":{"const":"Review"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"googlePlace":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"null"}},"required":["type"]},{"type":"object","description":"Deprecated.","properties":{"type":{"const":"Direct"},"googlePlaceId":{"type":["string","null"]}},"required":["type"]}]},"selectStarsLabel":{"type":"string"},"reviewFieldPlaceholder":{"type":"string"}}},{"$ref":"#/$defs/componentStyles"}]},"signInGuardComponent":{"title":"SignInGuardComponent","allOf":[{"type":"object","properties":{"type":{"const":"SignInGuard"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentChildren"}]},"siteLogoComponent":{"title":"SiteLogoComponent","description":"A component that displays the site logo.","allOf":[{"type":"object","properties":{"type":{"const":"SiteLogo"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"alt":{"type":"string","description":"Alternative text for the logo, defaults to the site name"},"fallbackSiteName":{"type":"boolean","description":"Whether to display the site name if the logo is not available"}}},{"$ref":"#/$defs/componentStyles"}]},"sitePrivacyPolicyComponent":{"title":"SitePrivacyPolicyComponent","description":"A component that displays the site privacy policy.","allOf":[{"type":"object","properties":{"type":{"const":"SitePrivacyPolicy"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"}]},"siteTermsOfUseComponent":{"title":"SiteTermsOfUseComponent","description":"A component that displays the site terms of use.","allOf":[{"type":"object","properties":{"type":{"const":"SiteTermsOfUse"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"}]},"stageBodyComponent":{"title":"StageBodyComponent","description":"The body of a stage in a sequence.","allOf":[{"type":"object","properties":{"type":{"const":"StageBody"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"}]},"stageComponent":{"title":"StageComponent","description":"A stage in a sequence.","allOf":[{"type":"object","properties":{"type":{"const":"Stage"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"enableWrappedStageBody":{"type":"boolean","description":"Whether to enable the wrapped stage body"}}},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentStyles"}]},"stageNameComponent":{"title":"StageNameComponent","description":"A component that displays the name of a stage.","allOf":[{"type":"object","properties":{"type":{"const":"StageName"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentStyles"}]},"textComponent":{"title":"TextComponent","description":"A component that displays rich text.","allOf":[{"type":"object","properties":{"type":{"const":"Text"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"content":{"type":"object","properties":{"delta":{"type":"string","description":"A Quill Delta object as JSON."}},"required":["delta"]}}}]},"textInputComponent":{"title":"TextInputComponent","allOf":[{"type":"object","properties":{"type":{"const":"TextInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"placeholder":{"type":"string"},"format":{"type":"string","enum":["None","Email","Phone","Url"],"description":"Validation format for the input"}}},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentMaxLength"},{"$ref":"#/$defs/componentStyles"},{"$ref":"#/$defs/componentDefaultStringValue"}]},"textareaInputComponent":{"title":"TextareaInputComponent","allOf":[{"type":"object","properties":{"type":{"const":"TextareaInput"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"placeholder":{"type":"string"}}},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentName"},{"$ref":"#/$defs/componentRequired"},{"$ref":"#/$defs/componentMaxLength"},{"$ref":"#/$defs/componentStyles"},{"$ref":"#/$defs/componentDefaultStringValue"}]},"typeformComponent":{"title":"TypeformComponent","description":"A component that embeds a Typeform.","allOf":[{"type":"object","properties":{"type":{"const":"Typeform"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"url":{"$ref":"#/$defs/componentStringValue","description":"The URL of the Typeform"},"height":{"type":"number","description":"The height of the embedded form"}}},{"$ref":"#/$defs/componentStyles"}]},"userProfileComponent":{"title":"UserProfileComponent","description":"A component that displays a user profile.","allOf":[{"type":"object","properties":{"type":{"const":"UserProfile"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentStyles"}]},"verifiedEmailAddressGuardComponent":{"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.","allOf":[{"type":"object","properties":{"type":{"const":"VerifiedEmailAddressGuard"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentStyles"}]},"verifyEmailAddressComponent":{"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.","allOf":[{"type":"object","properties":{"type":{"const":"VerifyEmailAddress"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"$ref":"#/$defs/componentStyles"}]},"videoComponent":{"title":"VideoComponent","description":"A component that displays a video.","allOf":[{"type":"object","properties":{"type":{"const":"Video"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"tag":{"type":"string","enum":["iframe","video"],"description":"The way to render the video. Defaults to 'iframe'."},"src":{"$ref":"#/$defs/componentStringValueSource"},"poster":{"$ref":"#/$defs/componentStringValueSource","description":"The URL of an image to display while the video is loading. Applicable only when tag is 'video'."},"controls":{"type":"boolean","description":"Applicable only when tag is 'video'."},"autoPlay":{"type":"boolean","description":"Applicable only when tag is 'video'."},"playsInline":{"type":"boolean","description":"Applicable only when tag is 'video'."},"loop":{"type":"boolean","description":"Applicable only when tag is 'video'."},"muted":{"type":"boolean","description":"Applicable only when tag is 'video'."}}},{"$ref":"#/$defs/componentStyles"}]},"viewPlanStagesButtonComponent":{"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.","allOf":[{"type":"object","properties":{"type":{"const":"ViewPlanStagesButton"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"dialogHeader":{"type":"string"},"stageNameTableHeader":{"type":"string"}}},{"$ref":"#/$defs/componentLabel"},{"$ref":"#/$defs/componentStyles"}]},"widthContainerComponent":{"title":"WidthContainerComponent","description":"A container with a specified width.","allOf":[{"type":"object","properties":{"type":{"const":"WidthContainer"}},"required":["type"]},{"$ref":"#/$defs/componentComponentBase"},{"type":"object","properties":{"width":{"type":"string","enum":["Medium","Large","XLarge","XXLarge"]}}},{"$ref":"#/$defs/componentChildren"},{"$ref":"#/$defs/componentStyles"}]},"componentBaseStyles":{"type":"object","properties":{"styles":{"type":"object","additionalProperties":{"type":"string"}},"smStyles":{"type":"object","additionalProperties":{"type":"string"}},"mdStyles":{"type":"object","additionalProperties":{"type":"string"}},"lgStyles":{"type":"object","additionalProperties":{"type":"string"}},"xlStyles":{"type":"object","additionalProperties":{"type":"string"}},"xxlStyles":{"type":"object","additionalProperties":{"type":"string"}}}},"componentBooleanValueSource":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"boolean"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"componentChildren":{"type":"object","properties":{"children":{"type":"array","items":{"$ref":"#/$defs/component"}}}},"componentChildrenOrLabel":{"type":"object","properties":{"childrenOrLabel":{"description":"Whether to display children components or a label.","type":"string","enum":["children","label"]}}},"componentComponentBase":{"type":"object","properties":{"conditionalLogicSlot":{"type":"string","enum":["True","False"],"description":"The slot to render as when a direct child of a ConditionalLogic component."},"productItemGuardSlot":{"type":"string","enum":["AccessAllowed","AccessDenied"],"description":"The slot to render as when a direct child of a ProductItemGuard component."}}},"componentConditionalStyles":{"type":"object","description":"Sets of conditional styling rules that be set on an element depending on any boolean expression (e.g., referencing form state).","properties":{"conditionalStyles":{"type":"array","items":{"type":"object","properties":{"key":{"description":"A random unique string for identification.","type":"string"},"condition":{"$ref":"#/$defs/booleanExpression"},"styles":{"$ref":"#/$defs/componentStyles"}}}}}},"componentDashboardNavItem":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"url":{"type":"string"},"productItem":{"oneOf":[{"type":"string"},{"type":"null"}]},"roles":{"type":"array","items":{"type":"string"}},"openInNewTab":{"type":"boolean"}},"required":["id"]},"componentDefaultBooleanValue":{"type":"object","properties":{"defaultValue":{"$ref":"#/$defs/componentBooleanValueSource"}}},"componentDefaultStringValue":{"type":"object","properties":{"defaultValue":{"$ref":"#/$defs/componentStringValueSource"}}},"componentElementId":{"type":"object","properties":{"elementId":{"type":"string"}}},"componentLabel":{"type":"object","properties":{"label":{"anyOf":[{"$ref":"#/$defs/componentStringValueSource"},{"type":"object","properties":{"type":{"const":"PageTitle"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"SiteName"}},"required":["type"]}]},"labelStyles":{"$ref":"#/$defs/componentStyles"}}},"componentMaxLength":{"type":"object","properties":{"maxLength":{"type":"number"}}},"componentName":{"type":"object","properties":{"name":{"type":"string"}}},"componentNumberValueSource":{"anyOf":[{"type":"object","properties":{"type":{"const":"Direct"},"value":{"type":"number"}},"required":["type"]},{"type":"object","properties":{"type":{"const":"Prop"},"name":{"type":"string"}},"required":["type","name"]}]},"componentRequired":{"type":"object","properties":{"required":{"type":"boolean"}}},"componentStringValue":{"type":"object","properties":{"value":{"$ref":"#/$defs/componentStringValueSource"}}},"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"]}]},"componentStyles":{"type":"object","allOf":[{"$ref":"#/$defs/componentBaseStyles"},{"properties":{"hoverStyles":{"$ref":"#/$defs/componentBaseStyles"},"focusVisibleStyles":{"$ref":"#/$defs/componentBaseStyles"}}}]},"componentTrigger":{"type":"object","properties":{"id":{"type":"string","description":"A random unique string for identification."},"type":{"type":"string","enum":["Click","InputChange"]},"condition":{"$ref":"#/$defs/booleanExpression","description":"An optional condition that, if set, needs to evaluate to true for the trigger to apply."}},"required":["id","type"]},"expression":{"title":"Expression","oneOf":[{"$ref":"#/$defs/arrayExpression"},{"$ref":"#/$defs/booleanExpression"},{"$ref":"#/$defs/numberExpression"},{"$ref":"#/$defs/stringExpression"}]},"numberExpression":{"title":"NumberExpression","oneOf":[{"$ref":"#/$defs/numberExpressionCount"},{"$ref":"#/$defs/numberExpressionCurrentTime"},{"$ref":"#/$defs/numberExpressionInputChangeEventNumberValue"},{"$ref":"#/$defs/numberExpressionInputDataNumber"},{"$ref":"#/$defs/numberExpressionNumberLiteral"},{"$ref":"#/$defs/numberExpressionPropsNumber"},{"$ref":"#/$defs/numberExpressionSum"},{"$ref":"#/$defs/numberExpressionSumArray"},{"$ref":"#/$defs/numberExpressionTimeLiteral"}]},"numberExpressionCount":{"type":"object","properties":{"operator":{"const":"count"},"arrayExpression":{"$ref":"#/$defs/arrayExpression"}},"required":["operator","arrayExpression"]},"numberExpressionCurrentTime":{"type":"object","description":"A timestamp in milliseconds since epoch.","properties":{"operator":{"const":"currentTime"}},"required":["operator"]},"numberExpressionNumberLiteral":{"type":"object","properties":{"operator":{"const":"numberLiteral"},"value":{"type":"number"}},"required":["operator","value"]},"numberExpressionPropsNumber":{"type":"object","properties":{"operator":{"const":"propsNumber"},"prop":{"type":"string"}},"required":["operator","prop"]},"numberExpressionInputChangeEventNumberValue":{"type":"object","properties":{"operator":{"const":"inputChangeEventNumberValue"}},"required":["operator"]},"numberExpressionInputDataNumber":{"type":"object","properties":{"operator":{"const":"inputDataNumber"},"fieldKey":{"type":"string"}},"required":["operator","fieldKey"]},"numberExpressionSum":{"type":"object","properties":{"operator":{"const":"sum"},"left":{"$ref":"#/$defs/numberExpression"},"right":{"$ref":"#/$defs/numberExpression"}},"required":["operator","left","right"]},"numberExpressionSumArray":{"type":"object","properties":{"operator":{"const":"sumArray"},"arrayExpression":{"$ref":"#/$defs/arrayExpression"}},"required":["operator","arrayExpression"]},"numberExpressionTimeLiteral":{"type":"object","description":"A timestamp in milliseconds since epoch.","properties":{"operator":{"const":"timeLiteral"},"value":{"type":"number"}},"required":["operator","value"]},"stringExpression":{"title":"StringExpression","oneOf":[{"$ref":"#/$defs/stringExpressionEventSourceComponentName"},{"$ref":"#/$defs/stringExpressionEventSourceComponentType"},{"$ref":"#/$defs/stringExpressionFeatureTag"},{"$ref":"#/$defs/stringExpressionInputChangeEventStringValue"},{"$ref":"#/$defs/stringExpressionInputDataString"},{"$ref":"#/$defs/stringExpressionPropsString"},{"$ref":"#/$defs/stringExpressionStringLiteral"},{"$ref":"#/$defs/stringExpressionUserEmail"},{"$ref":"#/$defs/stringExpressionUserOrgId"},{"$ref":"#/$defs/stringExpressionUserRole"}]},"stringExpressionEventSourceComponentName":{"type":"object","properties":{"operator":{"const":"eventSourceComponentName"}},"required":["operator"]},"stringExpressionEventSourceComponentType":{"type":"object","properties":{"operator":{"const":"eventSourceComponentType"}},"required":["operator"]},"stringExpressionFeatureTag":{"type":"object","properties":{"operator":{"const":"featureTag"},"tag":{"type":"string"}},"required":["operator","tag"]},"stringExpressionInputChangeEventStringValue":{"type":"object","properties":{"operator":{"const":"inputChangeEventStringValue"}},"required":["operator"]},"stringExpressionInputDataString":{"type":"object","properties":{"operator":{"const":"inputDataString"},"fieldKey":{"type":"string"}},"required":["operator","fieldKey"]},"stringExpressionPropsString":{"type":"object","properties":{"operator":{"const":"propsString"},"prop":{"type":"string"}},"required":["operator","prop"]},"stringExpressionStringLiteral":{"type":"object","properties":{"operator":{"const":"stringLiteral"},"value":{"type":"string"}},"required":["operator","value"]},"stringExpressionUserEmail":{"type":"object","properties":{"operator":{"const":"userEmail"}},"required":["operator"]},"stringExpressionUserOrgId":{"type":"object","properties":{"operator":{"const":"userOrgId"}},"required":["operator"]},"stringExpressionUserRole":{"type":"object","properties":{"operator":{"const":"userRole"}},"required":["operator"]}}`);
25266
+ const strippedComponentsSchema = {
25267
+ $schema: $schema$e,
25268
+ type: type$a,
25269
+ items: items$1,
25270
+ $defs: $defs$8
25271
+ };
25262
25272
  const $schema$d = "https://json-schema.org/draft/2020-12/schema";
25263
25273
  const $id$e = "/context-data/context-data.json";
25264
25274
  const title$d = "ContextData";
@@ -32077,6 +32087,7 @@ function require_2020() {
32077
32087
  var _2020Exports = require_2020();
32078
32088
  const instance = new _2020Exports.Ajv2020();
32079
32089
  instance.addSchema([
32090
+ strippedComponentsSchema,
32080
32091
  arrayExpressionSchema,
32081
32092
  booleanExpressionSchema,
32082
32093
  contextDataSchema,
@@ -41449,8 +41460,8 @@ function requireReadable() {
41449
41460
  this.pipes = [];
41450
41461
  this.flowing = null;
41451
41462
  this[kPaused] = null;
41452
- if (options && options.emitClose === false) this.state &= ~kEmitClose;
41453
- if (options && options.autoDestroy === false) this.state &= ~kAutoDestroy;
41463
+ if (options && options.emitClose === false) this.state &= -2049;
41464
+ if (options && options.autoDestroy === false) this.state &= -4097;
41454
41465
  this.errored = null;
41455
41466
  this.defaultEncoding = options && options.defaultEncoding || "utf8";
41456
41467
  this.awaitDrainWriters = null;
@@ -41527,7 +41538,7 @@ function requireReadable() {
41527
41538
  if (err) {
41528
41539
  errorOrDestroy(stream2, err);
41529
41540
  } else if (chunk === null) {
41530
- state2.state &= ~kReading;
41541
+ state2.state &= -9;
41531
41542
  onEofChunk(stream2, state2);
41532
41543
  } else if ((state2.state & kObjectMode) !== 0 || chunk && chunk.length > 0) {
41533
41544
  if (addToFront) {
@@ -41539,7 +41550,7 @@ function requireReadable() {
41539
41550
  } else if (state2.destroyed || state2.errored) {
41540
41551
  return false;
41541
41552
  } else {
41542
- state2.state &= ~kReading;
41553
+ state2.state &= -9;
41543
41554
  if (state2.decoder && !encoding) {
41544
41555
  chunk = state2.decoder.write(chunk);
41545
41556
  if (state2.objectMode || chunk.length !== 0) addChunk(stream2, state2, chunk, false);
@@ -41549,7 +41560,7 @@ function requireReadable() {
41549
41560
  }
41550
41561
  }
41551
41562
  } else if (!addToFront) {
41552
- state2.state &= ~kReading;
41563
+ state2.state &= -9;
41553
41564
  maybeReadMore(stream2, state2);
41554
41565
  }
41555
41566
  return !state2.ended && (state2.length < state2.highWaterMark || state2.length === 0);
@@ -41624,7 +41635,7 @@ function requireReadable() {
41624
41635
  const state2 = this._readableState;
41625
41636
  const nOrig = n;
41626
41637
  if (n > state2.highWaterMark) state2.highWaterMark = computeNewHighWaterMark(n);
41627
- if (n !== 0) state2.state &= ~kEmittedReadable;
41638
+ if (n !== 0) state2.state &= -129;
41628
41639
  if (n === 0 && state2.needReadable && ((state2.highWaterMark !== 0 ? state2.length >= state2.highWaterMark : state2.length > 0) || state2.ended)) {
41629
41640
  debug("read: emitReadable", state2.length, state2.ended);
41630
41641
  if (state2.length === 0 && state2.ended) endReadable(this);
@@ -41654,7 +41665,7 @@ function requireReadable() {
41654
41665
  } catch (err) {
41655
41666
  errorOrDestroy(this, err);
41656
41667
  }
41657
- state2.state &= ~kSync;
41668
+ state2.state &= -33;
41658
41669
  if (!state2.reading) n = howMuchToRead(nOrig, state2);
41659
41670
  }
41660
41671
  let ret;
@@ -46253,7 +46264,7 @@ function requireAst() {
46253
46264
  this.#hasMagic = void 0;
46254
46265
  return [s, (0, unescape_js_1.unescape)(this.toString()), false, false];
46255
46266
  }
46256
- let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot ? "" : this.#partsToRegExp(true);
46267
+ let bodyDotAllowed = !repeated || allowDot || dot || false ? "" : this.#partsToRegExp(true);
46257
46268
  if (bodyDotAllowed === body) {
46258
46269
  bodyDotAllowed = "";
46259
46270
  }
@@ -49449,7 +49460,7 @@ function requireCommonjs$1() {
49449
49460
  const IFLNK = 10;
49450
49461
  const IFSOCK = 12;
49451
49462
  const IFMT = 15;
49452
- const IFMT_UNKNOWN = ~IFMT;
49463
+ const IFMT_UNKNOWN = -16;
49453
49464
  const READDIR_CALLED = 16;
49454
49465
  const LSTAT_CALLED = 32;
49455
49466
  const ENOTDIR = 64;
@@ -49711,7 +49722,7 @@ function requireCommonjs$1() {
49711
49722
  }
49712
49723
  const children = Object.assign([], { provisional: 0 });
49713
49724
  this.#children.set(this, children);
49714
- this.#type &= ~READDIR_CALLED;
49725
+ this.#type &= -17;
49715
49726
  return children;
49716
49727
  }
49717
49728
  /**
@@ -60931,6 +60942,12 @@ const validatePasswordComplexity = (password) => {
60931
60942
  const hashPassword = (password) => hash(password, {
60932
60943
  type: argon2id
60933
60944
  });
60945
+ const roleSchema = z.object({
60946
+ id: z.string(),
60947
+ name: z.string(),
60948
+ default: z.boolean().optional().default(false)
60949
+ });
60950
+ const rolesSchema = z.array(roleSchema);
60934
60951
  const detailedUniqueIntegrityConstraintViolationError = (error2) => {
60935
60952
  const message = error2.message === "Query violates a unique integrity constraint." ? `A database uniqueness constraint was violated when inserting or updating` : error2.message;
60936
60953
  const details = [];
@@ -60949,15 +60966,13 @@ const detailedUniqueIntegrityConstraintViolationError = (error2) => {
60949
60966
  return message;
60950
60967
  };
60951
60968
  const isDuplicateDatabaseError = (error2) => !!error2 && typeof error2 === "object" && "code" in error2 && error2.code === "42P04";
60952
- const insertUserResult = z.object({
60953
- id: z.string()
60954
- });
60955
60969
  const findOrgResult = z.object({
60956
60970
  platformId: z.string()
60957
60971
  });
60958
60972
  const findPlatformResult = z.object({
60959
60973
  id: z.string(),
60960
- name: z.string()
60974
+ name: z.string(),
60975
+ roles: rolesSchema.nullable()
60961
60976
  });
60962
60977
  const createUser = async (opts, env2) => {
60963
60978
  const db = await distExports$1.createPool(requireCoreDbUrl(env2));
@@ -60973,7 +60988,7 @@ const createUser = async (opts, env2) => {
60973
60988
  process.exit(1);
60974
60989
  }
60975
60990
  const password = await hashPassword(opts.password);
60976
- const { role } = opts;
60991
+ const inputRole = opts.role || "";
60977
60992
  const status = opts.pending ? "Pending" : "Active";
60978
60993
  const firstName = opts.firstName.trim();
60979
60994
  if (!firstName.length) {
@@ -60989,7 +61004,8 @@ const createUser = async (opts, env2) => {
60989
61004
  let orgId = opts.orgId;
60990
61005
  let orgPrimary = false;
60991
61006
  try {
60992
- const user = await db.transaction(async (db2) => {
61007
+ const userId = cleanSmallId();
61008
+ await db.transaction(async (db2) => {
60993
61009
  if (!platformId) {
60994
61010
  if (!orgId) {
60995
61011
  throw new Error("Either --org-id or --platform-id must be specified");
@@ -61014,7 +61030,7 @@ const createUser = async (opts, env2) => {
61014
61030
  const platform = await db2.maybeOne(
61015
61031
  distExports$1.sql.type(
61016
61032
  findPlatformResult
61017
- )`select "id", "name" from "Platforms" where "id" = ${platformId}`
61033
+ )`select "id", "name", "roles" from "Platforms" where "id" = ${platformId}`
61018
61034
  );
61019
61035
  if (!platform) {
61020
61036
  throw new Error(`No platform found with ID ${platformId}`);
@@ -61022,6 +61038,43 @@ const createUser = async (opts, env2) => {
61022
61038
  if (opts.verbose) {
61023
61039
  console.log(`Found platform ${platform.name} (ID ${platform.id})`);
61024
61040
  }
61041
+ let roleToUse = "";
61042
+ if (platform.roles && platform.roles.length) {
61043
+ if (inputRole) {
61044
+ const roleExists = platform.roles.some((r) => r.name === inputRole);
61045
+ if (roleExists) {
61046
+ roleToUse = inputRole;
61047
+ } else {
61048
+ const validRoles = platform.roles.map((r) => r.name).join(", ");
61049
+ console.error(
61050
+ `Error: Invalid role "${inputRole}". Valid roles for this platform are: ${validRoles}`
61051
+ );
61052
+ process.exit(1);
61053
+ }
61054
+ } else {
61055
+ const defaultRole = platform.roles.find((r) => r.default);
61056
+ if (defaultRole) {
61057
+ roleToUse = defaultRole.name;
61058
+ if (opts.verbose) {
61059
+ console.log(`No role provided. Using default role: ${roleToUse}`);
61060
+ }
61061
+ } else {
61062
+ if (opts.verbose) {
61063
+ console.log(
61064
+ "No default role exists and no role was provided. Using empty string for the role."
61065
+ );
61066
+ }
61067
+ }
61068
+ }
61069
+ } else {
61070
+ if (inputRole) {
61071
+ console.error("Error: A role was specified but no roles are defined for this platform.");
61072
+ process.exit(1);
61073
+ }
61074
+ if (opts.verbose) {
61075
+ console.log("No roles defined for this platform. Using empty string for the role.");
61076
+ }
61077
+ }
61025
61078
  if (!orgId) {
61026
61079
  orgId = cleanSmallId();
61027
61080
  await db2.maybeOne(
@@ -61034,21 +61087,44 @@ const createUser = async (opts, env2) => {
61034
61087
  }
61035
61088
  orgPrimary = true;
61036
61089
  }
61037
- const user2 = await db2.one(
61038
- distExports$1.sql.type(
61039
- insertUserResult
61040
- )`insert into "Users" ("platformId", "email", "emailVerified", "password", "passwordStatus", "orgId", "role", "status", "firstName", "lastName") values (${platformId}, ${email}, ${opts.emailVerified}, ${password}, 'Ok', ${orgId}, ${role}, ${status}, ${firstName}, ${lastName}) returning "id"`
61090
+ const user = await db2.maybeOne(
61091
+ distExports$1.sql.type(voidSelectSchema)`insert into "Users" (
61092
+ "id",
61093
+ "platformId",
61094
+ "email",
61095
+ "emailVerified",
61096
+ "password",
61097
+ "passwordStatus",
61098
+ "orgId",
61099
+ "role",
61100
+ "status",
61101
+ "firstName",
61102
+ "lastName"
61103
+ )
61104
+ values (
61105
+ ${userId},
61106
+ ${platformId},
61107
+ ${email},
61108
+ ${opts.emailVerified},
61109
+ ${password},
61110
+ 'Ok',
61111
+ ${orgId},
61112
+ ${roleToUse},
61113
+ ${status},
61114
+ ${firstName},
61115
+ ${lastName}
61116
+ )`
61041
61117
  );
61042
61118
  if (orgPrimary) {
61043
61119
  await db2.maybeOne(
61044
61120
  distExports$1.sql.type(
61045
61121
  voidSelectSchema
61046
- )`update "Orgs" set "primaryUserId" = ${user2.id} where "id" = ${orgId}`
61122
+ )`update "Orgs" set "primaryUserId" = ${userId} where "id" = ${orgId}`
61047
61123
  );
61048
61124
  }
61049
- return user2;
61125
+ return user;
61050
61126
  });
61051
- console.log(`Created user (ID ${user.id})`);
61127
+ console.log(`Created user (ID ${userId})`);
61052
61128
  } catch (e) {
61053
61129
  if (e instanceof distExports$1.UniqueIntegrityConstraintViolationError) {
61054
61130
  console.error(detailedUniqueIntegrityConstraintViolationError(e));
@@ -61058,6 +61134,14 @@ const createUser = async (opts, env2) => {
61058
61134
  process.exit(1);
61059
61135
  }
61060
61136
  };
61137
+ const permissionAssetEdit = {
61138
+ object: "Asset",
61139
+ action: "edit"
61140
+ };
61141
+ const permissionAssetView = {
61142
+ object: "Asset",
61143
+ action: "view"
61144
+ };
61061
61145
  const permissionExtensionCreate = {
61062
61146
  object: "Extension",
61063
61147
  action: "create"
@@ -61106,6 +61190,10 @@ const permissionExtensionEdit = {
61106
61190
  object: "Extension",
61107
61191
  action: "edit"
61108
61192
  };
61193
+ const permissionFileUploadAsExtension = {
61194
+ object: "File",
61195
+ action: "uploadAsExtension"
61196
+ };
61109
61197
  const permissionHelpTicketEditStatus = {
61110
61198
  object: "HelpTicket",
61111
61199
  action: "editStatus"
@@ -61195,6 +61283,8 @@ const permissionTemplateView = {
61195
61283
  action: "view"
61196
61284
  };
61197
61285
  const allPermissions = [
61286
+ permissionAssetEdit,
61287
+ permissionAssetView,
61198
61288
  permissionExtensionCreate,
61199
61289
  permissionExtensionCreateVersion,
61200
61290
  permissionSiteCreate,
@@ -61207,6 +61297,7 @@ const allPermissions = [
61207
61297
  permissionCustomFieldEdit,
61208
61298
  permissionCustomerSiteEdit,
61209
61299
  permissionExtensionEdit,
61300
+ permissionFileUploadAsExtension,
61210
61301
  permissionHelpTicketEditStatus,
61211
61302
  permissionPlatformSiteEdit,
61212
61303
  permissionSequenceEdit,
@@ -61408,7 +61499,7 @@ const initExtDb = async ({
61408
61499
  `);
61409
61500
  await db.query(distExports$1.sql.unsafe`
61410
61501
  create foreign table if not exists "Users" (
61411
- "id" uuid not null,
61502
+ "id" text not null,
61412
61503
  "firstName" text not null,
61413
61504
  "lastName" text not null,
61414
61505
  "email" text not null,
@@ -61424,7 +61515,7 @@ const initExtDb = async ({
61424
61515
  create foreign table if not exists "Orgs" (
61425
61516
  "id" text not null,
61426
61517
  "name" text,
61427
- "primaryUserId" uuid,
61518
+ "primaryUserId" text,
61428
61519
  "createdAt" timestamptz not null
61429
61520
  ) server wirechunk options (schema_name 'public', table_name 'Orgs')
61430
61521
  `);
@@ -61600,8 +61691,9 @@ program.command("create-user").description("create a user").requiredOption("--em
61600
61691
  ).option(
61601
61692
  "--platform-id <string>",
61602
61693
  "the ID of the platform ID to which the users will be added, used only if org ID is not specified"
61603
- ).addOption(
61604
- new Option("--role <string>", "the role the user will have").default("OrganizationOwner")
61694
+ ).option(
61695
+ "--role <string>",
61696
+ "the role the user will have (defaults to the default role set on the platform, if defined, or an empty string)"
61605
61697
  ).option("--email-verified", "mark the email address as already verified by the user", false).option("--pending", "create the user in a pending state", false).action(withOptionsAndEnv(createUser));
61606
61698
  const extDev = program.command("ext-dev").description("extension development commands");
61607
61699
  extDev.command("get-db-url").description(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wirechunk/cli",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "scripts": {