diff --git a/packages/bbui/src/Form/Core/Multiselect.svelte b/packages/bbui/src/Form/Core/Multiselect.svelte
index 2243570cd5..4873430fa0 100644
--- a/packages/bbui/src/Form/Core/Multiselect.svelte
+++ b/packages/bbui/src/Form/Core/Multiselect.svelte
@@ -17,6 +17,8 @@
export let customPopoverHeight
export let open = false
export let loading
+ export let onOptionMouseenter = () => {}
+ export let onOptionMouseleave = () => {}
const dispatch = createEventDispatcher()
@@ -97,4 +99,6 @@
{autoWidth}
{customPopoverHeight}
{loading}
+ {onOptionMouseenter}
+ {onOptionMouseleave}
/>
diff --git a/packages/bbui/src/Form/Core/Picker.svelte b/packages/bbui/src/Form/Core/Picker.svelte
index eb7a5db655..c6d4ed3353 100644
--- a/packages/bbui/src/Form/Core/Picker.svelte
+++ b/packages/bbui/src/Form/Core/Picker.svelte
@@ -41,6 +41,8 @@
export let footer = null
export let customAnchor = null
export let loading
+ export let onOptionMouseenter = () => {}
+ export let onOptionMouseleave = () => {}
const dispatch = createEventDispatcher()
@@ -199,6 +201,8 @@
aria-selected="true"
tabindex="0"
on:click={() => onSelectOption(getOptionValue(option, idx))}
+ on:mouseenter={e => onOptionMouseenter(e, option)}
+ on:mouseleave={e => onOptionMouseleave(e, option)}
class:is-disabled={!isOptionEnabled(option)}
>
{#if getOptionIcon(option, idx)}
diff --git a/packages/bbui/src/Form/Core/Select.svelte b/packages/bbui/src/Form/Core/Select.svelte
index 5754c683ed..0111bd6bcf 100644
--- a/packages/bbui/src/Form/Core/Select.svelte
+++ b/packages/bbui/src/Form/Core/Select.svelte
@@ -26,6 +26,8 @@
export let tag = null
export let searchTerm = null
export let loading
+ export let onOptionMouseenter = () => {}
+ export let onOptionMouseleave = () => {}
const dispatch = createEventDispatcher()
@@ -95,6 +97,8 @@
{autocomplete}
{sort}
{tag}
+ {onOptionMouseenter}
+ {onOptionMouseleave}
isPlaceholder={value == null || value === ""}
placeholderOption={placeholder === false ? null : placeholder}
isOptionSelected={option => compareOptionAndValue(option, value)}
diff --git a/packages/bbui/src/Form/Multiselect.svelte b/packages/bbui/src/Form/Multiselect.svelte
index b0246c8530..9878605f4b 100644
--- a/packages/bbui/src/Form/Multiselect.svelte
+++ b/packages/bbui/src/Form/Multiselect.svelte
@@ -19,6 +19,8 @@
export let searchTerm = null
export let customPopoverHeight
export let helpText = null
+ export let onOptionMouseenter = () => {}
+ export let onOptionMouseleave = () => {}
const dispatch = createEventDispatcher()
const onChange = e => {
@@ -41,6 +43,8 @@
{autoWidth}
{autocomplete}
{customPopoverHeight}
+ {onOptionMouseenter}
+ {onOptionMouseleave}
bind:searchTerm
on:change={onChange}
on:click
diff --git a/packages/bbui/src/Form/Select.svelte b/packages/bbui/src/Form/Select.svelte
index 2119a37980..260090c7b7 100644
--- a/packages/bbui/src/Form/Select.svelte
+++ b/packages/bbui/src/Form/Select.svelte
@@ -29,6 +29,9 @@
export let tag = null
export let helpText = null
export let compare
+ export let onOptionMouseenter = () => {}
+ export let onOptionMouseleave = () => {}
+
const dispatch = createEventDispatcher()
const onChange = e => {
value = e.detail
@@ -67,6 +70,8 @@
{customPopoverHeight}
{tag}
{compare}
+ {onOptionMouseenter}
+ {onOptionMouseleave}
on:change={onChange}
on:click
/>
diff --git a/packages/bbui/src/Tabs/Tab.svelte b/packages/bbui/src/Tabs/Tab.svelte
index 627d7e525a..3ae6adfac4 100644
--- a/packages/bbui/src/Tabs/Tab.svelte
+++ b/packages/bbui/src/Tabs/Tab.svelte
@@ -1,11 +1,14 @@
-
-
-
-
- {#if icon}
-
-
-
- {/if}
- {title}
-
+{#if link}
+
+ {#if icon}
+
+
+
+ {/if}
+ {title}
+
+{:else}
+
+
+
+
+ {#if icon}
+
+
+
+ {/if}
+ {title}
+
+{/if}
{#if isSelected}
@@ -94,4 +134,7 @@
.spectrum-Tabs-item:hover {
color: var(--spectrum-global-color-gray-900);
}
+ .link {
+ user-select: none;
+ }
diff --git a/packages/bbui/src/Tooltip/Context.svelte b/packages/bbui/src/Tooltip/Context.svelte
new file mode 100644
index 0000000000..84d6fbbb73
--- /dev/null
+++ b/packages/bbui/src/Tooltip/Context.svelte
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
diff --git a/packages/bbui/src/index.js b/packages/bbui/src/index.js
index f28e185305..e746e3a72b 100644
--- a/packages/bbui/src/index.js
+++ b/packages/bbui/src/index.js
@@ -53,6 +53,7 @@ export { default as Link } from "./Link/Link.svelte"
export { default as Tooltip } from "./Tooltip/Tooltip.svelte"
export { default as TempTooltip } from "./Tooltip/TempTooltip.svelte"
export { default as TooltipWrapper } from "./Tooltip/TooltipWrapper.svelte"
+export { default as ContextTooltip } from "./Tooltip/Context.svelte"
export { default as Menu } from "./Menu/Menu.svelte"
export { default as MenuSection } from "./Menu/Section.svelte"
export { default as MenuSeparator } from "./Menu/Separator.svelte"
diff --git a/packages/builder/src/components/backend/DataTable/formula.js b/packages/builder/src/components/backend/DataTable/formula.js
index a179a7c6e1..7220a5ba4f 100644
--- a/packages/builder/src/components/backend/DataTable/formula.js
+++ b/packages/builder/src/components/backend/DataTable/formula.js
@@ -56,7 +56,7 @@ export function getBindings({
)
}
const field = Object.values(FIELDS).find(
- field => field.type === schema.type && field.subtype === schema.subtype
+ field => field.type === schema.type
)
const label = path == null ? column : `${path}.0.${column}`
diff --git a/packages/builder/src/components/common/CodeEditor/CodeEditor.svelte b/packages/builder/src/components/common/CodeEditor/CodeEditor.svelte
index ba5f75083a..0102d8f7a9 100644
--- a/packages/builder/src/components/common/CodeEditor/CodeEditor.svelte
+++ b/packages/builder/src/components/common/CodeEditor/CodeEditor.svelte
@@ -54,6 +54,7 @@
export let autofocus = false
export let jsBindingWrapping = true
export let readonly = false
+ export let readonlyLineNumbers = false
const dispatch = createEventDispatcher()
@@ -240,6 +241,9 @@
if (readonly) {
complete.push(EditorState.readOnly.of(true))
+ if (readonlyLineNumbers) {
+ complete.push(lineNumbers())
+ }
} else {
complete = [
...complete,
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/index.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/index.svelte
new file mode 100644
index 0000000000..d9714c2e7a
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/index.svelte
@@ -0,0 +1,48 @@
+
+
+
+
+ {#if subject === subjects.column}
+
+ {:else if subject === subjects.support}
+
+ {:else if subject === subjects.stringsAsNumbers}
+
+ {:else if subject === subjects.notRequired}
+
+ {:else if subject === subjects.datesAsNumbers}
+
+ {:else if subject === subjects.scalarJsonOnly}
+
+ {:else if subject === subjects.numbersAsDates}
+
+ {:else if subject === subjects.stringsAsDates}
+
+ {/if}
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/Column.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/Column.svelte
new file mode 100644
index 0000000000..7fbac09827
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/Column.svelte
@@ -0,0 +1,147 @@
+
+
+
+
+ Column Overview for {columnName}
+
+
+ {#if schema.type === "string"}
+
+ {:else if schema.type === "datetime"}
+
+
+
+
+ {:else if schema.type === "number"}
+
+
+ {:else if schema.type === "array"}
+ {#each schema?.constraints?.inclusion ?? [] as option, index}
+
+ {option}
+
+ {/each}
+ {:else if schema.type === "options"}
+ {#each schema?.constraints?.inclusion ?? [] as option, index}
+
+ {option}
+
+ {/each}
+ {:else if schema.type === "json"}
+
+
+
+ {:else if schema.type === "formula"}
+
+
+
+
+ {:else if schema.type === "link"}
+
+ table._id === schema?.tableId)
+ ?.name}
+ />
+
+ {:else if schema.type === "bb_reference"}
+
+ {/if}
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/DatesAsNumbers.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/DatesAsNumbers.svelte
new file mode 100644
index 0000000000..e5cab5dc15
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/DatesAsNumbers.svelte
@@ -0,0 +1,63 @@
+
+
+
+
+ A datetime value can be used in place of a numeric value, but it will be
+ converted to a UNIX time timestamp, which is the number of milliseconds
+ since Jan 1st 1970. A more recent moment in time will be a higher number.
+
+
+
+
+
+ {new Date(946684800000).toLocaleString()}
+
+ {"->"} 946684800000
+
+
+
+ {new Date(1577836800000).toLocaleString()}
+
+ {"->"} 1577836800000
+
+
+ Now {"->"} {timestamp}
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/NotRequired.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/NotRequired.svelte
new file mode 100644
index 0000000000..f28e9a227e
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/NotRequired.svelte
@@ -0,0 +1,11 @@
+
+
+
+
+ A required constraint can be applied to columns to ensure a value
+ is always present. If a column doesn't have this constraint, then its value for
+ a particular row could he missing.
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/NumbersAsDates.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/NumbersAsDates.svelte
new file mode 100644
index 0000000000..d69228544e
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/NumbersAsDates.svelte
@@ -0,0 +1,65 @@
+
+
+
+
+ A number value can be used in place of a datetime value, but it will be
+ parsed as a UNIX time timestamp, which is the number of milliseconds
+ since Jan 1st 1970. A more recent moment in time will be a higher number.
+
+
+
+
+ 946684800000
+ {"->"}
+
+ {new Date(946684800000).toLocaleString()}
+
+
+
+ 1577836800000
+ {"->"}
+
+ {new Date(1577836800000).toLocaleString()}
+
+
+
+ {timestamp}
+ {"->"}
+ Now
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/ScalarJsonOnly.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/ScalarJsonOnly.svelte
new file mode 100644
index 0000000000..11fe3c7838
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/ScalarJsonOnly.svelte
@@ -0,0 +1,71 @@
+
+
+
+
+ JSON objects can't be used here, but any number , string or boolean values nested within said
+ object can be if they are otherwise compatible with the input. These scalar values
+ can be selected from the same menu as this parent and take the form parent.child .
+
+
+ {#if scalarDescendants.length > 0}
+
+ {#each scalarDescendants as descendant}
+
+ {descendant.name} - {descendant.type}
+
+ {/each}
+
+ {/if}
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/StringsAsDates.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/StringsAsDates.svelte
new file mode 100644
index 0000000000..7303eac7cb
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/StringsAsDates.svelte
@@ -0,0 +1,107 @@
+
+
+
+
+ A string value can be used in place of a datetime value, but it will be
+ parsed as:
+
+
+ A UNIX time timestamp, which is the number of milliseconds since
+ Jan 1st 1970. A more recent moment in time will be a higher number.
+
+
+
+
+ 946684800000
+ {"->"}
+
+ {new Date(946684800000).toLocaleString()}
+
+
+
+ 1577836800000
+ {"->"}
+
+ {new Date(1577836800000).toLocaleString()}
+
+
+
+ {timestamp}
+ {"->"}
+ Now
+
+
+
+ An ISO 8601 datetime string, which represents an exact moment
+ in time as well as the potentional to store the timezone it occured in.
+
+
+
+
+ 2000-01-01T00:00:00.000Z
+ ↓
+
+ {new Date(946684800000).toLocaleString()}
+
+
+
+ 2000-01-01T00:00:00.000Z
+ ↓
+
+ {new Date(1577836800000).toLocaleString()}
+
+
+
+ {iso}
+ ↓
+ Now
+
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/StringsAsNumbers.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/StringsAsNumbers.svelte
new file mode 100644
index 0000000000..e30a450d80
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/StringsAsNumbers.svelte
@@ -0,0 +1,56 @@
+
+
+
+
+ Text can be used in place of numbers in certain scenarios, but care needs to
+ be taken; if the value isn't purely numerical it may be converted in an
+ unexpected way.
+
+
+
+
+ "100" {"->"} 100
+
+
+ "100k" {"->"} 100
+
+
+ "100,000" {"->"} 100
+
+
+ "100 million" {"->"} 100
+
+
+ "100.9" {"->"} 100.9
+
+
+ "One hundred" {"->"} Error
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/Support.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/Support.svelte
new file mode 100644
index 0000000000..0419c0ad16
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/Support.svelte
@@ -0,0 +1,35 @@
+
+
+
+
+
+ Fully compatible with the input as long as the data is present.
+
+
+
+ Partially compatible with the input, but beware of other caveats
+ mentioned.
+
+
+
+ Incompatible with the component.
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/BindingValue.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/BindingValue.svelte
new file mode 100644
index 0000000000..811283ba51
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/BindingValue.svelte
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Block.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Block.svelte
new file mode 100644
index 0000000000..449b40304d
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Block.svelte
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/ExampleLine.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/ExampleLine.svelte
new file mode 100644
index 0000000000..6dd3e10a39
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/ExampleLine.svelte
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/ExampleSection.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/ExampleSection.svelte
new file mode 100644
index 0000000000..4da4f5141b
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/ExampleSection.svelte
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/JSONValue.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/JSONValue.svelte
new file mode 100644
index 0000000000..4703398b2d
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/JSONValue.svelte
@@ -0,0 +1,22 @@
+
+
+
+ {value}
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Property.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Property.svelte
new file mode 100644
index 0000000000..8d6e853ab4
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Property.svelte
@@ -0,0 +1,49 @@
+
+
+
+
+
+ {name}
+
+
+ -
+
+
+ {value}
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Section.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Section.svelte
new file mode 100644
index 0000000000..486e111725
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Section.svelte
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Subject.svelte b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Subject.svelte
new file mode 100644
index 0000000000..4e21160cae
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/Subject.svelte
@@ -0,0 +1,51 @@
+
+
+
+
+
+ {heading}
+
+
+
+
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/index.js b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/index.js
new file mode 100644
index 0000000000..d174f4d6cc
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/components/index.js
@@ -0,0 +1,8 @@
+export { default as Subject } from "./Subject.svelte"
+export { default as Property } from "./Property.svelte"
+export { default as JSONValue } from "./JSONValue.svelte"
+export { default as BindingValue } from "./BindingValue.svelte"
+export { default as Section } from "./Section.svelte"
+export { default as Block } from "./Block.svelte"
+export { default as ExampleSection } from "./ExampleSection.svelte"
+export { default as ExampleLine } from "./ExampleLine.svelte"
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/index.js b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/index.js
new file mode 100644
index 0000000000..c7f54d6415
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/DetailsModal/subjects/index.js
@@ -0,0 +1,8 @@
+export { default as Column } from "./Column.svelte"
+export { default as NotRequired } from "./NotRequired.svelte"
+export { default as StringsAsNumbers } from "./StringsAsNumbers.svelte"
+export { default as Support } from "./Support.svelte"
+export { default as DatesAsNumbers } from "./DatesAsNumbers.svelte"
+export { default as ScalarJsonOnly } from "./ScalarJsonOnly.svelte"
+export { default as StringsAsDates } from "./StringsAsDates.svelte"
+export { default as NumbersAsDates } from "./NumbersAsDates.svelte"
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/Explanation.svelte b/packages/builder/src/components/design/settings/controls/Explanation/Explanation.svelte
new file mode 100644
index 0000000000..bc45e410c9
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/Explanation.svelte
@@ -0,0 +1,102 @@
+
+
+
+
+
+ {#if messages.includes(messageConstants.stringAsNumber)}
+
+ {/if}
+ {#if messages.includes(messageConstants.notRequired)}
+
+ {/if}
+ {#if messages.includes(messageConstants.jsonPrimitivesOnly)}
+
+ {/if}
+ {#if messages.includes(messageConstants.dateAsNumber)}
+
+ {/if}
+ {#if messages.includes(messageConstants.numberAsDate)}
+
+ {/if}
+ {#if messages.includes(messageConstants.stringAsDate)}
+
+ {/if}
+
+
+{#if detailsModalSubject !== subjects.none}
+
+{/if}
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/explanation.js b/packages/builder/src/components/design/settings/controls/Explanation/explanation.js
new file mode 100644
index 0000000000..4e024c67fc
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/explanation.js
@@ -0,0 +1,100 @@
+export const messages = {
+ jsonPrimitivesOnly: Symbol("explanation-json-primitives-only"),
+ stringAsNumber: Symbol("explanation-string-as-number"),
+ dateAsNumber: Symbol("explanation-date-as-number"),
+ numberAsDate: Symbol("explanation-number-as-date"),
+ stringAsDate: Symbol("explanation-string-as-date"),
+ notRequired: Symbol("explanation-not-required"),
+ contextError: Symbol("explanation-context-error"),
+}
+
+export const support = {
+ unsupported: Symbol("explanation-unsupported"),
+ partialSupport: Symbol("explanation-partialSupport"),
+ supported: Symbol("explanation-supported"),
+}
+
+const getSupport = (type, explanation) => {
+ if (!explanation?.typeSupport) {
+ return support.supported
+ }
+
+ if (
+ explanation?.typeSupport?.supported?.find(
+ mapping => mapping === type || mapping?.type === type
+ )
+ ) {
+ return support.supported
+ }
+
+ if (
+ explanation?.typeSupport?.partialSupport?.find(
+ mapping => mapping === type || mapping?.type === type
+ )
+ ) {
+ return support.partialSupport
+ }
+
+ return support.unsupported
+}
+
+const getSupportMessage = (type, explanation) => {
+ if (!explanation?.typeSupport) {
+ return null
+ }
+
+ const supported = explanation?.typeSupport?.supported?.find(
+ mapping => mapping?.type === type
+ )
+ if (supported) {
+ return messages[supported?.message]
+ }
+
+ const partialSupport = explanation?.typeSupport?.partialSupport?.find(
+ mapping => mapping?.type === type
+ )
+ if (partialSupport) {
+ return messages[partialSupport?.message]
+ }
+
+ const unsupported = explanation?.typeSupport?.unsupported?.find(
+ mapping => mapping?.type === type
+ )
+ if (unsupported) {
+ return messages[unsupported?.message]
+ }
+
+ return null
+}
+
+export const getExplanationMessagesAndSupport = (fieldSchema, explanation) => {
+ try {
+ const explanationMessagesAndSupport = {
+ support: getSupport(fieldSchema.type, explanation),
+ messages: [getSupportMessage(fieldSchema.type, explanation)],
+ }
+
+ const isRequired = fieldSchema?.constraints?.presence?.allowEmpty === false
+ if (!isRequired) {
+ explanationMessagesAndSupport.messages.push(messages.notRequired)
+ }
+
+ return explanationMessagesAndSupport
+ } catch (e) {
+ return {
+ support: support.partialSupport,
+ messages: [messages.contextError],
+ }
+ }
+}
+
+export const getExplanationWithPresets = (explanation, presets) => {
+ if (explanation?.typeSupport?.preset) {
+ return {
+ ...explanation,
+ typeSupport: presets[explanation?.typeSupport?.preset],
+ }
+ }
+
+ return explanation
+}
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/index.js b/packages/builder/src/components/design/settings/controls/Explanation/index.js
new file mode 100644
index 0000000000..5780c1de14
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/index.js
@@ -0,0 +1 @@
+export { default as Explanation } from "./Explanation.svelte"
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/lines/Column.svelte b/packages/builder/src/components/design/settings/controls/Explanation/lines/Column.svelte
new file mode 100644
index 0000000000..9c3b87f8b9
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/lines/Column.svelte
@@ -0,0 +1,84 @@
+
+
+
+ setExplanationSubject(subjects.column)}
+ on:mouseleave={() => setExplanationSubject(subjects.none)}
+ href={tableHref}
+ text={columnName}
+ />
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/lines/DateAsNumber.svelte b/packages/builder/src/components/design/settings/controls/Explanation/lines/DateAsNumber.svelte
new file mode 100644
index 0000000000..ba5eb9b0e1
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/lines/DateAsNumber.svelte
@@ -0,0 +1,16 @@
+
+
+
+
+ setExplanationSubject(subjects.datesAsNumbers)}
+ on:mouseleave={() => setExplanationSubject(subjects.none)}
+ text="UNIX time value"
+ />
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/lines/JSONPrimitivesOnly.svelte b/packages/builder/src/components/design/settings/controls/Explanation/lines/JSONPrimitivesOnly.svelte
new file mode 100644
index 0000000000..2286c09044
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/lines/JSONPrimitivesOnly.svelte
@@ -0,0 +1,21 @@
+
+
+
+ setExplanationSubject(subjects.scalarJsonOnly)}
+ on:mouseleave={() => setExplanationSubject(subjects.none)}
+ >Scalar JSON values
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/lines/NotRequired.svelte b/packages/builder/src/components/design/settings/controls/Explanation/lines/NotRequired.svelte
new file mode 100644
index 0000000000..e705bd68e6
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/lines/NotRequired.svelte
@@ -0,0 +1,25 @@
+
+
+
+
+ setExplanationSubject(subjects.notRequired)}
+ on:mouseleave={() => setExplanationSubject(subjects.none)}
+ text="required"
+ />
+
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/lines/NumberAsDate.svelte b/packages/builder/src/components/design/settings/controls/Explanation/lines/NumberAsDate.svelte
new file mode 100644
index 0000000000..c6413c13a5
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/lines/NumberAsDate.svelte
@@ -0,0 +1,16 @@
+
+
+
+
+ setExplanationSubject(subjects.numbersAsDates)}
+ on:mouseleave={() => setExplanationSubject(subjects.none)}
+ text="UNIX time value"
+ />
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/lines/StringAsDate.svelte b/packages/builder/src/components/design/settings/controls/Explanation/lines/StringAsDate.svelte
new file mode 100644
index 0000000000..72267b6f47
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/lines/StringAsDate.svelte
@@ -0,0 +1,16 @@
+
+
+
+
+ setExplanationSubject(subjects.stringsAsDates)}
+ on:mouseleave={() => setExplanationSubject(subjects.none)}
+ text="UNIX time or ISO 8601 value"
+ />
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/lines/StringAsNumber.svelte b/packages/builder/src/components/design/settings/controls/Explanation/lines/StringAsNumber.svelte
new file mode 100644
index 0000000000..937545c1c3
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/lines/StringAsNumber.svelte
@@ -0,0 +1,16 @@
+
+
+
+
+ setExplanationSubject(subjects.stringsAsNumbers)}
+ on:mouseleave={() => setExplanationSubject(subjects.none)}
+ text="non-numerical values"
+ />
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/lines/Support.svelte b/packages/builder/src/components/design/settings/controls/Explanation/lines/Support.svelte
new file mode 100644
index 0000000000..848ab208fb
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/lines/Support.svelte
@@ -0,0 +1,59 @@
+
+
+
+ setExplanationSubject(subjects.support)}
+ on:mouseleave={() => setExplanationSubject(subjects.none)}
+ {icon}
+ {color}
+ {text}
+ />
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/lines/index.js b/packages/builder/src/components/design/settings/controls/Explanation/lines/index.js
new file mode 100644
index 0000000000..beff239398
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/lines/index.js
@@ -0,0 +1,8 @@
+export { default as Column } from "./Column.svelte"
+export { default as NotRequired } from "./NotRequired.svelte"
+export { default as StringAsNumber } from "./StringAsNumber.svelte"
+export { default as Support } from "./Support.svelte"
+export { default as JSONPrimitivesOnly } from "./JSONPrimitivesOnly.svelte"
+export { default as DateAsNumber } from "./DateAsNumber.svelte"
+export { default as NumberAsDate } from "./NumberAsDate.svelte"
+export { default as StringAsDate } from "./StringAsDate.svelte"
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/subjects.js b/packages/builder/src/components/design/settings/controls/Explanation/subjects.js
new file mode 100644
index 0000000000..1f94fa6fd0
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/subjects.js
@@ -0,0 +1,13 @@
+const subjects = {
+ column: Symbol("details-modal-column"),
+ support: Symbol("details-modal-support"),
+ stringsAsNumbers: Symbol("details-modal-strings-as-numbers"),
+ datesAsNumbers: Symbol("details-modal-dates-as-numbers"),
+ numbersAsDates: Symbol("explanation-numbers-as-dates"),
+ stringsAsDates: Symbol("explanation-strings-as-dates"),
+ notRequired: Symbol("details-modal-not-required"),
+ scalarJsonOnly: Symbol("explanation-scalar-json-only"),
+ none: Symbol("details-modal-none"),
+}
+
+export default subjects
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/typography/Comma.svelte b/packages/builder/src/components/design/settings/controls/Explanation/typography/Comma.svelte
new file mode 100644
index 0000000000..f16bd16054
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/typography/Comma.svelte
@@ -0,0 +1,14 @@
+,
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/typography/DocumentationLink.svelte b/packages/builder/src/components/design/settings/controls/Explanation/typography/DocumentationLink.svelte
new file mode 100644
index 0000000000..55b9732d4a
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/typography/DocumentationLink.svelte
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+ {text}
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/typography/InfoWord.svelte b/packages/builder/src/components/design/settings/controls/Explanation/typography/InfoWord.svelte
new file mode 100644
index 0000000000..cac12cbfb5
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/typography/InfoWord.svelte
@@ -0,0 +1,78 @@
+
+
+{#if href !== null}
+
+ {#if icon}
+
+ {/if}
+
+
+ {text}
+
+
+
+{:else}
+
+ {#if icon}
+
+ {/if}
+
+
+ {text}
+
+
+
+{/if}
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/typography/Line.svelte b/packages/builder/src/components/design/settings/controls/Explanation/typography/Line.svelte
new file mode 100644
index 0000000000..5d28ba0423
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/typography/Line.svelte
@@ -0,0 +1,41 @@
+
+
+
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/typography/Period.svelte b/packages/builder/src/components/design/settings/controls/Explanation/typography/Period.svelte
new file mode 100644
index 0000000000..d1bbafe6a6
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/typography/Period.svelte
@@ -0,0 +1,13 @@
+.
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/typography/Space.svelte b/packages/builder/src/components/design/settings/controls/Explanation/typography/Space.svelte
new file mode 100644
index 0000000000..b88831d760
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/typography/Space.svelte
@@ -0,0 +1,9 @@
+{" "}
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/typography/Text.svelte b/packages/builder/src/components/design/settings/controls/Explanation/typography/Text.svelte
new file mode 100644
index 0000000000..6562c9e864
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/typography/Text.svelte
@@ -0,0 +1,64 @@
+
+
+{#each words as word}
+ {#if word === " "}
+
+ {:else if word === ","}
+
+ {:else if word === "."}
+
+ {:else}
+
+ {word}
+
+ {/if}
+{/each}
+
+
diff --git a/packages/builder/src/components/design/settings/controls/Explanation/typography/index.js b/packages/builder/src/components/design/settings/controls/Explanation/typography/index.js
new file mode 100644
index 0000000000..102b65190d
--- /dev/null
+++ b/packages/builder/src/components/design/settings/controls/Explanation/typography/index.js
@@ -0,0 +1,7 @@
+export { default as Space } from "./Space.svelte"
+export { default as Comma } from "./Comma.svelte"
+export { default as Period } from "./Period.svelte"
+export { default as Text } from "./Text.svelte"
+export { default as InfoWord } from "./InfoWord.svelte"
+export { default as DocumentationLink } from "./DocumentationLink.svelte"
+export { default as Line } from "./Line.svelte"
diff --git a/packages/builder/src/components/design/settings/controls/FieldSelect.svelte b/packages/builder/src/components/design/settings/controls/FieldSelect.svelte
index e50a0e8030..15b67ded18 100644
--- a/packages/builder/src/components/design/settings/controls/FieldSelect.svelte
+++ b/packages/builder/src/components/design/settings/controls/FieldSelect.svelte
@@ -1,12 +1,22 @@
-
+
+
+{#if explanation}
+
+
+
+{/if}
diff --git a/packages/builder/src/components/design/settings/controls/MultiFieldSelect.svelte b/packages/builder/src/components/design/settings/controls/MultiFieldSelect.svelte
index d0224fb1db..d6c9a0b1e3 100644
--- a/packages/builder/src/components/design/settings/controls/MultiFieldSelect.svelte
+++ b/packages/builder/src/components/design/settings/controls/MultiFieldSelect.svelte
@@ -1,12 +1,22 @@
-
+
+
+{#if explanation}
+
+
+
+{/if}
diff --git a/packages/builder/src/pages/builder/app/[application]/_layout.svelte b/packages/builder/src/pages/builder/app/[application]/_layout.svelte
index 6094c93a26..cd62a97340 100644
--- a/packages/builder/src/pages/builder/app/[application]/_layout.svelte
+++ b/packages/builder/src/pages/builder/app/[application]/_layout.svelte
@@ -21,7 +21,7 @@
} from "@budibase/bbui"
import AppActions from "components/deploy/AppActions.svelte"
import { API } from "api"
- import { isActive, goto, layout, redirect } from "@roxi/routify"
+ import { isActive, url, goto, layout, redirect } from "@roxi/routify"
import { capitalise } from "helpers"
import { onMount, onDestroy } from "svelte"
import VerificationPromptBanner from "components/common/VerificationPromptBanner.svelte"
@@ -69,7 +69,7 @@
// e.g. if one of your screens is selected on front end, then
// you browse to backend, when you click frontend, you will be
// brought back to the same screen.
- const topItemNavigate = path => () => {
+ const topItemNavigate = path => {
const activeTopNav = $layout.children.find(c => $isActive(c.path))
if (activeTopNav) {
builderStore.setPreviousTopNavPath(
@@ -136,21 +136,18 @@
{#if $appStore.initialised}
-
- $goto("../../portal/apps")}
- />
-
+
+
+
{#each $layout.children as { path, title }}
topItemNavigate(path)}
title={capitalise(title)}
id={`builder-${title}-tab`}
/>
@@ -201,6 +198,11 @@
diff --git a/packages/client/src/components/app/charts/ApexOptionsBuilder.js b/packages/client/src/components/app/charts/ApexOptionsBuilder.js
deleted file mode 100644
index 04b5805df3..0000000000
--- a/packages/client/src/components/app/charts/ApexOptionsBuilder.js
+++ /dev/null
@@ -1,195 +0,0 @@
-export class ApexOptionsBuilder {
- constructor() {
- this.formatters = {
- ["Default"]: val => (isNaN(val) ? val : Math.round(val * 100) / 100),
- ["Thousands"]: val => `${Math.round(val / 1000)}K`,
- ["Millions"]: val => `${Math.round(val / 1000000)}M`,
- }
- this.options = {
- series: [],
- legend: {
- show: false,
- position: "top",
- horizontalAlign: "right",
- showForSingleSeries: true,
- showForNullSeries: true,
- showForZeroSeries: true,
- },
- chart: {
- toolbar: {
- show: false,
- },
- zoom: {
- enabled: false,
- },
- },
- xaxis: {
- labels: {
- formatter: this.formatters.Default,
- },
- },
- yaxis: {
- labels: {
- formatter: this.formatters.Default,
- },
- },
- }
- }
-
- setOption(path, value) {
- if (value == null || value === "") {
- return this
- }
- let tmp = this.options
- for (let i = 0; i < path.length - 1; i++) {
- const step = path[i]
- if (!tmp[step]) {
- tmp[step] = {}
- }
- tmp = tmp[step]
- }
- tmp[path[path.length - 1]] = value
- return this
- }
-
- getOptions() {
- return this.options
- }
-
- type(type) {
- return this.setOption(["chart", "type"], type)
- }
-
- title(title) {
- return this.setOption(["title", "text"], title)
- }
-
- colors(colors) {
- if (!colors) {
- delete this.options.colors
- this.options["customColor"] = false
- return this
- }
- this.options["customColor"] = true
- return this.setOption(["colors"], colors)
- }
-
- width(width) {
- return this.setOption(["chart", "width"], width || undefined)
- }
-
- height(height) {
- return this.setOption(["chart", "height"], height || undefined)
- }
-
- xLabel(label) {
- return this.setOption(["xaxis", "title", "text"], label)
- }
-
- yLabel(label) {
- return this.setOption(["yaxis", "title", "text"], label)
- }
-
- xCategories(categories) {
- return this.setOption(["xaxis", "categories"], categories)
- }
-
- yCategories(categories) {
- return this.setOption(["yaxis", "categories"], categories)
- }
-
- series(series) {
- return this.setOption(["series"], series)
- }
-
- horizontal(horizontal) {
- return this.setOption(["plotOptions", "bar", "horizontal"], horizontal)
- }
-
- dataLabels(dataLabels) {
- return this.setOption(["dataLabels", "enabled"], dataLabels)
- }
-
- animate(animate) {
- return this.setOption(["chart", "animations", "enabled"], animate)
- }
-
- curve(curve) {
- return this.setOption(["stroke", "curve"], curve)
- }
-
- gradient(gradient) {
- const fill = {
- type: "gradient",
- gradient: {
- shadeIntensity: 1,
- opacityFrom: 0.7,
- opacityTo: 0.9,
- stops: [0, 90, 100],
- },
- }
- return this.setOption(["fill"], gradient ? fill : undefined)
- }
-
- legend(legend) {
- return this.setOption(["legend", "show"], legend)
- }
-
- legendPosition(position) {
- return this.setOption(["legend", "position"], position)
- }
-
- stacked(stacked) {
- return this.setOption(["chart", "stacked"], stacked)
- }
-
- labels(labels) {
- return this.setOption(["labels"], labels)
- }
-
- xUnits(units) {
- return this.setOption(
- ["xaxis", "labels", "formatter"],
- this.formatters[units || "Default"]
- )
- }
-
- yUnits(units) {
- return this.setOption(
- ["yaxis", "labels", "formatter"],
- this.formatters[units || "Default"]
- )
- }
-
- clearXFormatter() {
- delete this.options.xaxis.labels
- return this
- }
-
- clearYFormatter() {
- delete this.options.yaxis.labels
- return this
- }
-
- xType(type) {
- return this.setOption(["xaxis", "type"], type)
- }
-
- yType(type) {
- return this.setOption(["yaxis", "type"], type)
- }
-
- yTooltip(yTooltip) {
- return this.setOption(["yaxis", "tooltip", "enabled"], yTooltip)
- }
-
- palette(palette) {
- if (!palette) {
- return this
- }
- return this.setOption(
- ["theme", "palette"],
- palette.toLowerCase().replace(/[\W]/g, "")
- )
- }
-}
diff --git a/packages/client/src/components/app/charts/AreaChart.svelte b/packages/client/src/components/app/charts/AreaChart.svelte
index dc80b2b9da..a9a61e59f6 100644
--- a/packages/client/src/components/app/charts/AreaChart.svelte
+++ b/packages/client/src/components/app/charts/AreaChart.svelte
@@ -1,5 +1,159 @@
-
+
diff --git a/packages/client/src/components/app/charts/BarChart.svelte b/packages/client/src/components/app/charts/BarChart.svelte
index fd8443e2d6..aeebfe9461 100644
--- a/packages/client/src/components/app/charts/BarChart.svelte
+++ b/packages/client/src/components/app/charts/BarChart.svelte
@@ -1,11 +1,12 @@
diff --git a/packages/client/src/components/app/charts/CandleStickChart.svelte b/packages/client/src/components/app/charts/CandleStickChart.svelte
index b2760b005e..61cdef180b 100644
--- a/packages/client/src/components/app/charts/CandleStickChart.svelte
+++ b/packages/client/src/components/app/charts/CandleStickChart.svelte
@@ -1,6 +1,6 @@
diff --git a/packages/client/src/components/app/charts/DonutChart.svelte b/packages/client/src/components/app/charts/DonutChart.svelte
index 721a09053a..dad9edfd67 100644
--- a/packages/client/src/components/app/charts/DonutChart.svelte
+++ b/packages/client/src/components/app/charts/DonutChart.svelte
@@ -1,5 +1,99 @@
-
+
diff --git a/packages/client/src/components/app/charts/HistogramChart.svelte b/packages/client/src/components/app/charts/HistogramChart.svelte
index 26b9028550..37c395d45f 100644
--- a/packages/client/src/components/app/charts/HistogramChart.svelte
+++ b/packages/client/src/components/app/charts/HistogramChart.svelte
@@ -1,135 +1,154 @@
diff --git a/packages/client/src/components/app/charts/LineChart.svelte b/packages/client/src/components/app/charts/LineChart.svelte
index 7f82a833d2..c2dac189e1 100644
--- a/packages/client/src/components/app/charts/LineChart.svelte
+++ b/packages/client/src/components/app/charts/LineChart.svelte
@@ -1,8 +1,7 @@
diff --git a/packages/client/src/components/app/charts/PieChart.svelte b/packages/client/src/components/app/charts/PieChart.svelte
index 8cb7317d94..3250a2ca95 100644
--- a/packages/client/src/components/app/charts/PieChart.svelte
+++ b/packages/client/src/components/app/charts/PieChart.svelte
@@ -1,6 +1,6 @@
diff --git a/packages/client/src/components/app/charts/utils.js b/packages/client/src/components/app/charts/utils.js
new file mode 100644
index 0000000000..1aea22c991
--- /dev/null
+++ b/packages/client/src/components/app/charts/utils.js
@@ -0,0 +1,51 @@
+export const formatters = {
+ ["Default"]: val => val,
+ ["Thousands"]: val => `${Math.round(val / 1000)}K`,
+ ["Millions"]: val => `${Math.round(val / 1000000)}M`,
+ ["Datetime"]: val => new Date(val).toLocaleString(),
+}
+
+export const parsePalette = paletteName => {
+ if (paletteName === "Custom") {
+ // return null in this case so that the palette option doesn't get consumed by Apex Charts
+ return null
+ }
+
+ const [_, number] = paletteName.split(" ")
+
+ return `palette${number}`
+}
+
+// Deep clone which copies function references
+export const cloneDeep = value => {
+ const typesToNaiveCopy = ["string", "boolean", "number", "function", "symbol"]
+
+ if (value === null) {
+ return null
+ }
+
+ if (value === undefined) {
+ return undefined
+ }
+
+ if (typesToNaiveCopy.includes(typeof value)) {
+ return value
+ }
+
+ if (Array.isArray(value)) {
+ return value.map(element => cloneDeep(element))
+ }
+
+ // Only copy "pure" objects, we want to error on stuff like Maps or Sets
+ if (typeof value === "object" && value.constructor.name === "Object") {
+ const cloneObject = {}
+
+ Object.entries(value).forEach(([key, childValue]) => {
+ cloneObject[key] = cloneDeep(childValue)
+ })
+
+ return cloneObject
+ }
+
+ throw `Unsupported value: "${value}" of type: "${typeof value}"`
+}
diff --git a/packages/client/src/components/app/charts/utils.test.js b/packages/client/src/components/app/charts/utils.test.js
new file mode 100644
index 0000000000..1b065e2fae
--- /dev/null
+++ b/packages/client/src/components/app/charts/utils.test.js
@@ -0,0 +1,31 @@
+import { expect, describe, it, vi } from "vitest"
+import { cloneDeep } from "./utils"
+
+describe("utils", () => {
+ let context
+
+ beforeEach(() => {
+ vi.clearAllMocks()
+ context = {}
+ })
+
+ describe("cloneDeep", () => {
+ beforeEach(() => {
+ context.value = {
+ obj: { one: 1, two: 2 },
+ arr: [1, { first: null, second: undefined }, 2],
+ str: "test",
+ num: 123,
+ bool: true,
+ sym: Symbol("test"),
+ func: () => "some value",
+ }
+ context.cloneValue = cloneDeep(context.value)
+ })
+
+ it("to clone the object and not copy object references", () => {
+ expect(context.cloneValue.obj.one).toEqual(1)
+ expect(context.cloneValue.obj.two).toEqual(2)
+ })
+ })
+})
diff --git a/packages/client/src/utils/componentProps.js b/packages/client/src/utils/componentProps.js
index efe69938e7..bdf74c8014 100644
--- a/packages/client/src/utils/componentProps.js
+++ b/packages/client/src/utils/componentProps.js
@@ -108,7 +108,12 @@ export const getSettingsDefinition = definition => {
let settings = []
definition.settings?.forEach(setting => {
if (setting.section) {
- settings = settings.concat(setting.settings || [])
+ settings = settings.concat(
+ (setting.settings || [])?.map(childSetting => ({
+ ...childSetting,
+ sectionDependsOn: setting.dependsOn,
+ }))
+ )
} else {
settings.push(setting)
}
diff --git a/packages/server/src/api/controllers/component.ts b/packages/server/src/api/controllers/component.ts
index 12051be770..6d4d3e2d21 100644
--- a/packages/server/src/api/controllers/component.ts
+++ b/packages/server/src/api/controllers/component.ts
@@ -20,7 +20,8 @@ export async function fetchAppComponentDefinitions(ctx: UserCtx) {
const definitions: { [key: string]: any } = {}
for (let { manifest, library } of componentManifests) {
for (let key of Object.keys(manifest)) {
- if (key === "features") {
+ // These keys are not components, and should not be preprended with the `@budibase/` prefix
+ if (key === "features" || key === "typeSupportPresets") {
definitions[key] = manifest[key]
} else {
const fullComponentName = `${library}/${key}`.toLowerCase()
diff --git a/yarn.lock b/yarn.lock
index 36ce2ce75e..9241887433 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2499,11 +2499,31 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
+"@eslint/eslintrc@^2.1.4":
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
+ integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.6.0"
+ globals "^13.19.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
"@eslint/js@8.52.0":
version "8.52.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.52.0.tgz#78fe5f117840f69dc4a353adf9b9cd926353378c"
integrity sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==
+"@eslint/js@8.57.0":
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
+ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
+
"@fastify/busboy@^2.0.0":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff"
@@ -2676,6 +2696,15 @@
debug "^4.1.1"
minimatch "^3.0.5"
+"@humanwhocodes/config-array@^0.11.14":
+ version "0.11.14"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
+ integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
+ dependencies:
+ "@humanwhocodes/object-schema" "^2.0.2"
+ debug "^4.3.1"
+ minimatch "^3.0.5"
+
"@humanwhocodes/module-importer@^1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
@@ -2686,6 +2715,11 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
+"@humanwhocodes/object-schema@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
+ integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
+
"@hutson/parse-repository-url@^3.0.0":
version "3.0.2"
resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340"
@@ -3216,16 +3250,35 @@
"@jridgewell/sourcemap-codec" "^1.4.10"
"@jridgewell/trace-mapping" "^0.3.9"
+"@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
+ integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
+ dependencies:
+ "@jridgewell/set-array" "^1.2.1"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+ "@jridgewell/trace-mapping" "^0.3.24"
+
"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3":
version "3.1.0"
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
+"@jridgewell/resolve-uri@^3.1.0":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
+
"@jridgewell/set-array@^1.0.1":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
+
"@jridgewell/source-map@^0.3.2":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb"
@@ -3234,6 +3287,14 @@
"@jridgewell/gen-mapping" "^0.3.0"
"@jridgewell/trace-mapping" "^0.3.9"
+"@jridgewell/source-map@^0.3.3":
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.6.tgz#9d71ca886e32502eb9362c9a74a46787c36df81a"
+ integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==
+ dependencies:
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
+
"@jridgewell/sourcemap-codec@1.4.14":
version "1.4.14"
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
@@ -3260,6 +3321,14 @@
"@jridgewell/resolve-uri" "3.1.0"
"@jridgewell/sourcemap-codec" "1.4.14"
+"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
+ version "0.3.25"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.1.0"
+ "@jridgewell/sourcemap-codec" "^1.4.14"
+
"@js-joda/core@^5.5.3":
version "5.6.1"
resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-5.6.1.tgz#03e2453d877b61c3f593cf031fd18b375bd548b6"
@@ -3926,6 +3995,15 @@
"@rollup/pluginutils" "^5.0.1"
magic-string "^0.30.3"
+"@rollup/plugin-terser@^0.4.4":
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz#15dffdb3f73f121aa4fbb37e7ca6be9aeea91962"
+ integrity sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==
+ dependencies:
+ serialize-javascript "^6.0.1"
+ smob "^1.0.0"
+ terser "^5.17.4"
+
"@rollup/plugin-typescript@8.3.0":
version "8.3.0"
resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.3.0.tgz#bc1077fa5897b980fc27e376c4e377882c63e68b"
@@ -3965,66 +4043,146 @@
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz#38c3abd1955a3c21d492af6b1a1dca4bb1d894d6"
integrity sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==
+"@rollup/rollup-android-arm-eabi@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz#1a32112822660ee104c5dd3a7c595e26100d4c2d"
+ integrity sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==
+
"@rollup/rollup-android-arm64@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz#3822e929f415627609e53b11cec9a4be806de0e2"
integrity sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==
+"@rollup/rollup-android-arm64@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.17.2.tgz#5aeef206d65ff4db423f3a93f71af91b28662c5b"
+ integrity sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==
+
"@rollup/rollup-darwin-arm64@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz#6c082de71f481f57df6cfa3701ab2a7afde96f69"
integrity sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==
+"@rollup/rollup-darwin-arm64@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.17.2.tgz#6b66aaf003c70454c292cd5f0236ebdc6ffbdf1a"
+ integrity sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==
+
"@rollup/rollup-darwin-x64@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz#c34ca0d31f3c46a22c9afa0e944403eea0edcfd8"
integrity sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==
+"@rollup/rollup-darwin-x64@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.17.2.tgz#f64fc51ed12b19f883131ccbcea59fc68cbd6c0b"
+ integrity sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==
+
"@rollup/rollup-linux-arm-gnueabihf@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz#48e899c1e438629c072889b824a98787a7c2362d"
integrity sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==
+"@rollup/rollup-linux-arm-gnueabihf@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.17.2.tgz#1a7641111be67c10111f7122d1e375d1226cbf14"
+ integrity sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==
+
+"@rollup/rollup-linux-arm-musleabihf@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.17.2.tgz#c93fd632923e0fee25aacd2ae414288d0b7455bb"
+ integrity sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==
+
"@rollup/rollup-linux-arm64-gnu@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz#788c2698a119dc229062d40da6ada8a090a73a68"
integrity sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==
+"@rollup/rollup-linux-arm64-gnu@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.17.2.tgz#fa531425dd21d058a630947527b4612d9d0b4a4a"
+ integrity sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==
+
"@rollup/rollup-linux-arm64-musl@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz#3882a4e3a564af9e55804beeb67076857b035ab7"
integrity sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==
+"@rollup/rollup-linux-arm64-musl@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.17.2.tgz#8acc16f095ceea5854caf7b07e73f7d1802ac5af"
+ integrity sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==
+
+"@rollup/rollup-linux-powerpc64le-gnu@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.17.2.tgz#94e69a8499b5cf368911b83a44bb230782aeb571"
+ integrity sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==
+
"@rollup/rollup-linux-riscv64-gnu@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz#0c6ad792e1195c12bfae634425a3d2aa0fe93ab7"
integrity sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==
+"@rollup/rollup-linux-riscv64-gnu@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.17.2.tgz#7ef1c781c7e59e85a6ce261cc95d7f1e0b56db0f"
+ integrity sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==
+
+"@rollup/rollup-linux-s390x-gnu@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.17.2.tgz#f15775841c3232fca9b78cd25a7a0512c694b354"
+ integrity sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==
+
"@rollup/rollup-linux-x64-gnu@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz#9d62485ea0f18d8674033b57aa14fb758f6ec6e3"
integrity sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==
+"@rollup/rollup-linux-x64-gnu@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.17.2.tgz#b521d271798d037ad70c9f85dd97d25f8a52e811"
+ integrity sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==
+
"@rollup/rollup-linux-x64-musl@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz#50e8167e28b33c977c1f813def2b2074d1435e05"
integrity sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==
+"@rollup/rollup-linux-x64-musl@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.17.2.tgz#9254019cc4baac35800991315d133cc9fd1bf385"
+ integrity sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==
+
"@rollup/rollup-win32-arm64-msvc@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz#68d233272a2004429124494121a42c4aebdc5b8e"
integrity sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==
+"@rollup/rollup-win32-arm64-msvc@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.17.2.tgz#27f65a89f6f52ee9426ec11e3571038e4671790f"
+ integrity sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==
+
"@rollup/rollup-win32-ia32-msvc@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz#366ca62221d1689e3b55a03f4ae12ae9ba595d40"
integrity sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==
+"@rollup/rollup-win32-ia32-msvc@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.17.2.tgz#a2fbf8246ed0bb014f078ca34ae6b377a90cb411"
+ integrity sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==
+
"@rollup/rollup-win32-x64-msvc@4.12.0":
version "4.12.0"
resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz#9ffdf9ed133a7464f4ae187eb9e1294413fab235"
integrity sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==
+"@rollup/rollup-win32-x64-msvc@4.17.2":
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.17.2.tgz#5a2d08b81e8064b34242d5cc9973ef8dd1e60503"
+ integrity sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==
+
"@roxi/routify@2.18.0":
version "2.18.0"
resolved "https://registry.yarnpkg.com/@roxi/routify/-/routify-2.18.0.tgz#8f88bedd936312d0dbe44cbc11ab179b1f938ec2"
@@ -6291,6 +6449,11 @@
js-yaml "^3.10.0"
tslib "^2.4.0"
+"@yr/monotone-cubic-spline@^1.0.3":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz#7272d89f8e4f6fb7a1600c28c378cc18d3b577b9"
+ integrity sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==
+
"@zerodevx/svelte-json-view@^1.0.7":
version "1.0.7"
resolved "https://registry.yarnpkg.com/@zerodevx/svelte-json-view/-/svelte-json-view-1.0.7.tgz#abf3efa71dedcb3e9d16bc9cc61d5ea98c8d00b1"
@@ -6589,11 +6752,12 @@ anymatch@^3.0.3, anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
-apexcharts@^3.19.2, apexcharts@^3.22.1:
- version "3.37.1"
- resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.37.1.tgz#50443d302fc7fc72aace9c6c4074baae017c6950"
- integrity sha512-fmQ5Updeb/LASl+S1+mIxXUFxzY0Fa7gexfCs4o+OPP9f2NEBNjvybOtPrah44N4roK7U5o5Jis906QeEQu0cA==
+apexcharts@^3.48.0:
+ version "3.49.1"
+ resolved "https://registry.yarnpkg.com/apexcharts/-/apexcharts-3.49.1.tgz#837d1d4fd80f2c092f0587e8fb6bbc31ad57a0f3"
+ integrity sha512-MqGtlq/KQuO8j0BBsUJYlRG8VBctKwYdwuBtajHgHTmSgUU3Oai+8oYN/rKCXwXzrUlYA+GiMgotAIbXY2BCGw==
dependencies:
+ "@yr/monotone-cubic-spline" "^1.0.3"
svg.draggable.js "^2.2.2"
svg.easing.js "^2.0.0"
svg.filter.js "^2.0.2"
@@ -6945,6 +7109,18 @@ atomic-sleep@^1.0.0:
resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b"
integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==
+atrament@^4.3.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/atrament/-/atrament-4.4.0.tgz#01898c90d08941b0d64494f13a52f79e0c0ce5d1"
+ integrity sha512-kUlJvSrr8QF4eSQzkkBE77FsGUWXIKf1Zl0qv7BWki8B5vPYMVKDn+a8ayPqTX9IvJx6466uLnYFIksX91kFzw==
+ dependencies:
+ "@rollup/plugin-terser" "^0.4.4"
+ eslint "^8.56.0"
+ eslint-config-airbnb-base "^15.0.0"
+ eslint-plugin-import "^2.26.0"
+ rollup "^4.9.4"
+ rollup-plugin-web-worker-loader "^1.6.1"
+
available-typed-arrays@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
@@ -8369,6 +8545,11 @@ configstore@^5.0.1:
write-file-atomic "^3.0.0"
xdg-basedir "^4.0.0"
+confusing-browser-globals@^1.0.10:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81"
+ integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==
+
console-control-strings@^1.0.0, console-control-strings@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
@@ -10025,6 +10206,13 @@ es-get-iterator@^1.1.2:
isarray "^2.0.5"
stop-iteration-iterator "^1.0.0"
+es-object-atoms@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941"
+ integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==
+ dependencies:
+ es-errors "^1.3.0"
+
es-set-tostringtag@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
@@ -10164,6 +10352,16 @@ eslint-compat-utils@^0.1.2:
resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653"
integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==
+eslint-config-airbnb-base@^15.0.0:
+ version "15.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236"
+ integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==
+ dependencies:
+ confusing-browser-globals "^1.0.10"
+ object.assign "^4.1.2"
+ object.entries "^1.1.5"
+ semver "^6.3.0"
+
eslint-import-resolver-node@^0.3.9:
version "0.3.9"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac"
@@ -10180,6 +10378,29 @@ eslint-module-utils@^2.8.0:
dependencies:
debug "^3.2.7"
+eslint-plugin-import@^2.26.0:
+ version "2.29.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643"
+ integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==
+ dependencies:
+ array-includes "^3.1.7"
+ array.prototype.findlastindex "^1.2.3"
+ array.prototype.flat "^1.3.2"
+ array.prototype.flatmap "^1.3.2"
+ debug "^3.2.7"
+ doctrine "^2.1.0"
+ eslint-import-resolver-node "^0.3.9"
+ eslint-module-utils "^2.8.0"
+ hasown "^2.0.0"
+ is-core-module "^2.13.1"
+ is-glob "^4.0.3"
+ minimatch "^3.1.2"
+ object.fromentries "^2.0.7"
+ object.groupby "^1.0.1"
+ object.values "^1.1.7"
+ semver "^6.3.1"
+ tsconfig-paths "^3.15.0"
+
eslint-plugin-import@^2.29.0:
version "2.29.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155"
@@ -10303,6 +10524,50 @@ eslint@^8.52.0:
strip-ansi "^6.0.1"
text-table "^0.2.0"
+eslint@^8.56.0:
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
+ integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
+ dependencies:
+ "@eslint-community/eslint-utils" "^4.2.0"
+ "@eslint-community/regexpp" "^4.6.1"
+ "@eslint/eslintrc" "^2.1.4"
+ "@eslint/js" "8.57.0"
+ "@humanwhocodes/config-array" "^0.11.14"
+ "@humanwhocodes/module-importer" "^1.0.1"
+ "@nodelib/fs.walk" "^1.2.8"
+ "@ungap/structured-clone" "^1.2.0"
+ ajv "^6.12.4"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.2.2"
+ eslint-visitor-keys "^3.4.3"
+ espree "^9.6.1"
+ esquery "^1.4.2"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ find-up "^5.0.0"
+ glob-parent "^6.0.2"
+ globals "^13.19.0"
+ graphemer "^1.4.0"
+ ignore "^5.2.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ is-path-inside "^3.0.3"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.1.2"
+ natural-compare "^1.4.0"
+ optionator "^0.9.3"
+ strip-ansi "^6.0.1"
+ text-table "^0.2.0"
+
esm@^3.2.25:
version "3.2.25"
resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.25.tgz#342c18c29d56157688ba5ce31f8431fbb795cc10"
@@ -16072,6 +16337,16 @@ object-sizeof@2.6.1:
dependencies:
buffer "^6.0.3"
+object.assign@^4.1.2:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
+ integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
+ dependencies:
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ has-symbols "^1.0.3"
+ object-keys "^1.1.1"
+
object.assign@^4.1.4:
version "4.1.4"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
@@ -16082,6 +16357,15 @@ object.assign@^4.1.4:
has-symbols "^1.0.3"
object-keys "^1.1.1"
+object.entries@^1.1.5:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41"
+ integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
+
object.fromentries@^2.0.7:
version "2.0.7"
resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616"
@@ -18824,6 +19108,11 @@ rollup-plugin-visualizer@^5.12.0:
source-map "^0.7.4"
yargs "^17.5.1"
+rollup-plugin-web-worker-loader@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/rollup-plugin-web-worker-loader/-/rollup-plugin-web-worker-loader-1.6.1.tgz#9d7a27575b64b0780fe4e8b3bc87470d217e485f"
+ integrity sha512-4QywQSz1NXFHKdyiou16mH3ijpcfLtLGOrAqvAqu1Gx+P8+zj+3gwC2BSL/VW1d+LW4nIHC8F7d7OXhs9UdR2A==
+
rollup-pluginutils@^1.3.1:
version "1.5.2"
resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-1.5.2.tgz#1e156e778f94b7255bfa1b3d0178be8f5c552408"
@@ -18853,6 +19142,31 @@ rollup@^3.27.1:
optionalDependencies:
fsevents "~2.3.2"
+rollup@^4.9.4:
+ version "4.17.2"
+ resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.17.2.tgz#26d1785d0144122277fdb20ab3a24729ae68301f"
+ integrity sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==
+ dependencies:
+ "@types/estree" "1.0.5"
+ optionalDependencies:
+ "@rollup/rollup-android-arm-eabi" "4.17.2"
+ "@rollup/rollup-android-arm64" "4.17.2"
+ "@rollup/rollup-darwin-arm64" "4.17.2"
+ "@rollup/rollup-darwin-x64" "4.17.2"
+ "@rollup/rollup-linux-arm-gnueabihf" "4.17.2"
+ "@rollup/rollup-linux-arm-musleabihf" "4.17.2"
+ "@rollup/rollup-linux-arm64-gnu" "4.17.2"
+ "@rollup/rollup-linux-arm64-musl" "4.17.2"
+ "@rollup/rollup-linux-powerpc64le-gnu" "4.17.2"
+ "@rollup/rollup-linux-riscv64-gnu" "4.17.2"
+ "@rollup/rollup-linux-s390x-gnu" "4.17.2"
+ "@rollup/rollup-linux-x64-gnu" "4.17.2"
+ "@rollup/rollup-linux-x64-musl" "4.17.2"
+ "@rollup/rollup-win32-arm64-msvc" "4.17.2"
+ "@rollup/rollup-win32-ia32-msvc" "4.17.2"
+ "@rollup/rollup-win32-x64-msvc" "4.17.2"
+ fsevents "~2.3.2"
+
rollup@^4.9.6:
version "4.12.0"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.12.0.tgz#0b6d1e5f3d46bbcf244deec41a7421dc54cc45b5"
@@ -19082,6 +19396,13 @@ serialize-javascript@^4.0.0:
dependencies:
randombytes "^2.1.0"
+serialize-javascript@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2"
+ integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
+ dependencies:
+ randombytes "^2.1.0"
+
server-destroy@1.0.1, server-destroy@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/server-destroy/-/server-destroy-1.0.1.tgz#f13bf928e42b9c3e79383e61cc3998b5d14e6cdd"
@@ -19280,6 +19601,11 @@ smart-buffer@^4.2.0:
resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+smob@^1.0.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/smob/-/smob-1.5.0.tgz#85d79a1403abf128d24d3ebc1cdc5e1a9548d3ab"
+ integrity sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==
+
snowflake-promise@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/snowflake-promise/-/snowflake-promise-4.5.0.tgz#ceba611d27b3792966bc752c545760e0ce168c1c"
@@ -20039,13 +20365,6 @@ supports-preserve-symlinks-flag@^1.0.0:
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
-svelte-apexcharts@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/svelte-apexcharts/-/svelte-apexcharts-1.0.2.tgz#4e000f8b8f7c901c05658c845457dfc8314d54c1"
- integrity sha512-6qlx4rE+XsonZ0FZudfwqOQ34Pq+3wpxgAD75zgEmGoYhYBJcwmikTuTf3o8ZBsZue9U/pAwhNy3ed1Bkq1gmA==
- dependencies:
- apexcharts "^3.19.2"
-
svelte-dnd-action@^0.9.8:
version "0.9.22"
resolved "https://registry.yarnpkg.com/svelte-dnd-action/-/svelte-dnd-action-0.9.22.tgz#003eee9dddb31d8c782f6832aec8b1507fff194d"
@@ -20355,6 +20674,16 @@ terser@^5.0.0:
commander "^2.20.0"
source-map-support "~0.5.20"
+terser@^5.17.4:
+ version "5.31.0"
+ resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.0.tgz#06eef86f17007dbad4593f11a574c7f5eb02c6a1"
+ integrity sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==
+ dependencies:
+ "@jridgewell/source-map" "^0.3.3"
+ acorn "^8.8.2"
+ commander "^2.20.0"
+ source-map-support "~0.5.20"
+
test-exclude@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
@@ -20703,6 +21032,16 @@ tsconfig-paths@^3.10.1, tsconfig-paths@^3.14.2:
minimist "^1.2.6"
strip-bom "^3.0.0"
+tsconfig-paths@^3.15.0:
+ version "3.15.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4"
+ integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==
+ dependencies:
+ "@types/json5" "^0.0.29"
+ json5 "^1.0.2"
+ minimist "^1.2.6"
+ strip-bom "^3.0.0"
+
tsconfig-paths@^4.1.2, tsconfig-paths@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c"