diff --git a/.vscode/terminals.json b/.vscode/terminals.json index ba7a6595..36270ad5 100644 --- a/.vscode/terminals.json +++ b/.vscode/terminals.json @@ -1,5 +1,5 @@ { - "autorun": true, + "autorun": false, "autokill": true, "terminals": [ { @@ -20,6 +20,11 @@ "name": "Vue", "icon": "library", "cwd": "./packages/vue" + }, + { + "name": "Vue App", + "icon": "run", + "cwd": "./apps/vue-starter" } ] } \ No newline at end of file diff --git a/apps/vanilla-starter/index.html b/apps/vanilla-starter/index.html index 8be180da..8701e08c 100644 --- a/apps/vanilla-starter/index.html +++ b/apps/vanilla-starter/index.html @@ -10,9 +10,11 @@

Hello Go UI

- +

You're looking at custom elements from Go UI

- Counter is 0 + Counter is 0

Learn more about Go UI diff --git a/apps/vue-starter/README.md b/apps/vue-starter/README.md index e62e093e..3c790b03 100644 --- a/apps/vue-starter/README.md +++ b/apps/vue-starter/README.md @@ -1,7 +1,7 @@ -# Vue 3 + Vite +## Vue 3 + Vite + Go UI This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 ` - -

Select

+ diff --git a/apps/vue-starter/src/main.js b/apps/vue-starter/src/main.js index 19ef0359..a2fa2d09 100644 --- a/apps/vue-starter/src/main.js +++ b/apps/vue-starter/src/main.js @@ -1,4 +1,6 @@ import { createApp } from 'vue'; import App from './App.vue'; import '@go-ui/vue/dist/go-ui.css'; -createApp(App).mount('#app'); +import { ComponentLibrary } from '@go-ui/vue'; + +createApp(App).use(ComponentLibrary).mount('#app'); diff --git a/apps/vue-starter/vite.config.js b/apps/vue-starter/vite.config.js index 05c17402..48eebcf2 100644 --- a/apps/vue-starter/vite.config.js +++ b/apps/vue-starter/vite.config.js @@ -1,7 +1,16 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; // https://vitejs.dev/config/ export default defineConfig({ - plugins: [vue()], -}) + plugins: [ + vue({ + template: { + compilerOptions: { + // treat all tags with a dash as custom elements + isCustomElement: (tag) => tag.includes('go-'), + }, + }, + }), + ], +}); diff --git a/packages/core/package.json b/packages/core/package.json index 43274bb4..cb7aa8bb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -3,9 +3,9 @@ "version": "1.29.4", "description": "A design system for everyone.", "main": "dist/index.cjs.js", - "module": "dist/components/index.js", - "es2015": "dist/esm/loader.js", - "es2017": "dist/esm/loader.js", + "module": "dist/index.mjs", + "es2015": "dist/esm/index.js", + "es2017": "dist/esm/index.js", "types": "dist/types/index.d.ts", "collection": "dist/collection/collection-manifest.json", "collection:main": "dist/collection/index.js", @@ -16,7 +16,8 @@ ], "homepage": "https://go-ui.com/", "scripts": { - "build": "stencil build", + "clean": "rm -rf dist", + "build": "pnpm run clean && stencil build", "build.component-docs": "stencil build --docs-readme --docs-json", "start": "stencil build --dev --watch --serve", "watch.components": "stencil build --docs-json --watch", @@ -32,6 +33,7 @@ "@duetds/date-picker": "^1.4.0", "@floating-ui/dom": "^1.1.0", "body-scroll-lock": "4.0.0-beta.0", + "dayjs": "^1.11.9", "dompurify": "^2.4.3", "json5": "^2.2.3", "lodash-es": "^4.17.21", @@ -45,15 +47,14 @@ "@commitlint/cli": "^13.2.1", "@commitlint/config-conventional": "^13.2.0", "@release-it/conventional-changelog": "^5.1.1", - "@stencil/core": "^2.22.1", + "@stencil/core": "^4.5.0", "@stencil/postcss": "^2.1.0", - "@stencil/react-output-target": "^0.5.0", - "@stencil/sass": "^1.5.2", - "@stencil/vue-output-target": "^0.8.0", + "@stencil/react-output-target": "^0.5.3", + "@stencil/sass": "^3.0.4", + "@stencil/vue-output-target": "^0.8.6", "@types/jest": "^26.0.24", "@types/markdown-it": "^12.2.3", "@types/node": "^18.11.18", - "@types/puppeteer": "^5.4.7", "autoprefixer": "^10.4.13", "axe-core": "^4.6.2", "chalk": "^4.1.2", diff --git a/packages/core/src/components.d.ts b/packages/core/src/components.d.ts index 591b0554..d57dada0 100644 --- a/packages/core/src/components.d.ts +++ b/packages/core/src/components.d.ts @@ -5,14 +5,24 @@ * It contains typing information for all components that exist in this project. */ import { HTMLStencilElement, JSXBase } from "@stencil/core/internal"; -import { BannerVariants, Breakpoints, ColorVariants, INavItem, InputType, SelectOption } from "./interfaces"; +import { BannerVariants, Breakpoints, ColorVariants, GoChangeEventDetail, INavItem, InputType } from "./interfaces"; import { ChipVariants } from "./interfaces/variants"; import { TocProps } from "./components/go-toc/go-toc"; import { SidebarPosition } from "./patterns/go-content-layout/go-content-layout"; import { DuetDatePickerProps } from "./components/form/go-datepicker/duet-date-picker"; import { BoxiconVariants, FontAwesomeVariants, MaterialIconVariants } from "./components/go-icon/go-icon"; import { Options } from "markdown-it"; +import { FieldValue, GoChangeEventDetail as GoChangeEventDetail1, SelectOption } from "./interfaces/index"; import { ActivatedTab } from "./components/go-tabs/go-tabs"; +export { BannerVariants, Breakpoints, ColorVariants, GoChangeEventDetail, INavItem, InputType } from "./interfaces"; +export { ChipVariants } from "./interfaces/variants"; +export { TocProps } from "./components/go-toc/go-toc"; +export { SidebarPosition } from "./patterns/go-content-layout/go-content-layout"; +export { DuetDatePickerProps } from "./components/form/go-datepicker/duet-date-picker"; +export { BoxiconVariants, FontAwesomeVariants, MaterialIconVariants } from "./components/go-icon/go-icon"; +export { Options } from "markdown-it"; +export { FieldValue, GoChangeEventDetail as GoChangeEventDetail1, SelectOption } from "./interfaces/index"; +export { ActivatedTab } from "./components/go-tabs/go-tabs"; export namespace Components { interface GoAccordion { /** @@ -97,9 +107,9 @@ export namespace Components { "citeUrl"?: string; "hideQuoteMark"?: boolean; } - interface GoBreadcrumb { + interface GoBreadcrumbs { /** - * Hide current page (last item without url) from the breadcrumb + * Hide current page (last item without url) from the breadcrumbs */ "hideCurrent": boolean; /** @@ -203,20 +213,16 @@ export namespace Components { * Show border on card */ "border": boolean; - /** - * Subtitle of the card - */ - "cardSubtitle"?: string; - /** - * Title of the card - */ - "cardTitle"?: string; /** * Flat card without box-shadow */ "flat": boolean; /** - * For cards that link to destinations, one card can only link to one destination. Note: The link (`a` tag) will be applied to the card-title element, so if you don't have a `card-title` prop, you will need to manually add the `a` tag in one of the slots provided. + * Heading of the card + */ + "heading"?: string; + /** + * For cards that link to destinations, one card can only link to one destination. Note: The link (`a` tag) will be applied to the heading, so if you don't have a `card-heading` prop, you will need to manually add the `a` tag in one of the slots provided. */ "href"?: string; /** @@ -228,6 +234,10 @@ export namespace Components { | 'bottom' | 'start' // responsive top left | 'end'; + /** + * Sub heading of the card + */ + "subHeading"?: string; /** * when href is present, `target` attribute to be applied to the card link */ @@ -375,10 +385,18 @@ export namespace Components { * DOM id for error */ "errorId"?: string; + /** + * Specify the expected date format Supported formats: https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens + */ + "format"?: string; /** * Hint message for the input */ "hint"?: string; + /** + * add date format into hint message + */ + "hintFormat"?: boolean; /** * DOM id for hint message */ @@ -398,7 +416,11 @@ export namespace Components { /** * Duet Date Picker options https://www.npmjs.com/package/@duetds/date-picker#properties */ - "options"?: string | DuetDatePickerProps; + "options"?: string | Partial; + /** + * Placeholder text + */ + "placeholder"?: string; /** * DOM id for prefix */ @@ -528,6 +550,14 @@ export namespace Components { * DOM id for error */ "errorId"?: string; + /** + * If specified, an input element with `type="hidden"` will be generated and this hiddenName prop will be used as the `name` of the hidden input use `hiddenInputValue` prop to set the value of that field + */ + "hiddenInputName"?: string; + /** + * Sets the value of the hidden input created by `hiddenInputName` + */ + "hiddenInputValue"?: string; /** * Hint message for the input */ @@ -913,6 +943,10 @@ export namespace Components { } interface GoRadio { "checked"?: boolean; + /** + * DOM id for native input control, default auto generated unique id + */ + "controlId"?: string; "disabled"?: boolean; "error"?: string; /** @@ -967,9 +1001,9 @@ export namespace Components { */ "name": string; /** - * Array of label/value options + * Array of options. Note: Sometimes frameworks may incorrectly pass the result of Array.toString() into this prop, `go-select` tries to obsorb this issue by trying to do a `split(',')` on the options prop if a string is passed in. This means the accepted formats include: 1. array of objects of type `{label: string, value: string}` 2. array of strings (e.g. ['Apple', 'Orange', 'Banana']) 3. string, toString() result of format 2 (i.e. 'Apple,Orange,Banana') 4. string, option 1 or 2 passed in as string that can be parsed by [JSON5](https://json5.org/) */ - "options": SelectOption[] | string; + "options": SelectOption[] | string[] | string; /** * If this input is read-only */ @@ -981,7 +1015,7 @@ export namespace Components { /** * Value of the input field */ - "value"?: string; + "value"?: FieldValue; } interface GoSkipLink { /** @@ -1219,10 +1253,6 @@ export interface GoBannerCustomEvent extends CustomEvent { detail: T; target: HTMLGoBannerElement; } -export interface GoCheckboxCustomEvent extends CustomEvent { - detail: T; - target: HTMLGoCheckboxElement; -} export interface GoChipCustomEvent extends CustomEvent { detail: T; target: HTMLGoChipElement; @@ -1298,11 +1328,11 @@ declare global { prototype: HTMLGoBlockquoteElement; new (): HTMLGoBlockquoteElement; }; - interface HTMLGoBreadcrumbElement extends Components.GoBreadcrumb, HTMLStencilElement { + interface HTMLGoBreadcrumbsElement extends Components.GoBreadcrumbs, HTMLStencilElement { } - var HTMLGoBreadcrumbElement: { - prototype: HTMLGoBreadcrumbElement; - new (): HTMLGoBreadcrumbElement; + var HTMLGoBreadcrumbsElement: { + prototype: HTMLGoBreadcrumbsElement; + new (): HTMLGoBreadcrumbsElement; }; interface HTMLGoButtonElement extends Components.GoButton, HTMLStencilElement { } @@ -1580,7 +1610,7 @@ declare global { "go-badge": HTMLGoBadgeElement; "go-banner": HTMLGoBannerElement; "go-blockquote": HTMLGoBlockquoteElement; - "go-breadcrumb": HTMLGoBreadcrumbElement; + "go-breadcrumbs": HTMLGoBreadcrumbsElement; "go-button": HTMLGoButtonElement; "go-button-group": HTMLGoButtonGroupElement; "go-callout-section": HTMLGoCalloutSectionElement; @@ -1713,9 +1743,9 @@ declare namespace LocalJSX { "citeUrl"?: string; "hideQuoteMark"?: boolean; } - interface GoBreadcrumb { + interface GoBreadcrumbs { /** - * Hide current page (last item without url) from the breadcrumb + * Hide current page (last item without url) from the breadcrumbs */ "hideCurrent"?: boolean; /** @@ -1819,20 +1849,16 @@ declare namespace LocalJSX { * Show border on card */ "border"?: boolean; - /** - * Subtitle of the card - */ - "cardSubtitle"?: string; - /** - * Title of the card - */ - "cardTitle"?: string; /** * Flat card without box-shadow */ "flat"?: boolean; /** - * For cards that link to destinations, one card can only link to one destination. Note: The link (`a` tag) will be applied to the card-title element, so if you don't have a `card-title` prop, you will need to manually add the `a` tag in one of the slots provided. + * Heading of the card + */ + "heading"?: string; + /** + * For cards that link to destinations, one card can only link to one destination. Note: The link (`a` tag) will be applied to the heading, so if you don't have a `card-heading` prop, you will need to manually add the `a` tag in one of the slots provided. */ "href"?: string; /** @@ -1844,6 +1870,10 @@ declare namespace LocalJSX { | 'bottom' | 'start' // responsive top left | 'end'; + /** + * Sub heading of the card + */ + "subHeading"?: string; /** * when href is present, `target` attribute to be applied to the card link */ @@ -1919,7 +1949,6 @@ declare namespace LocalJSX { * Name of the input field */ "name"?: string; - "onGoChange"?: (event: GoCheckboxCustomEvent<{ checked: boolean; value?: string }>) => void; /** * Value of the input field */ @@ -1999,10 +2028,18 @@ declare namespace LocalJSX { * DOM id for error */ "errorId"?: string; + /** + * Specify the expected date format Supported formats: https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens + */ + "format"?: string; /** * Hint message for the input */ "hint"?: string; + /** + * add date format into hint message + */ + "hintFormat"?: boolean; /** * DOM id for hint message */ @@ -2019,11 +2056,15 @@ declare namespace LocalJSX { * Name of the input field */ "name"?: string; - "onGoChange"?: (event: GoDatepickerCustomEvent) => void; + "onGochange"?: (event: GoDatepickerCustomEvent>) => void; /** * Duet Date Picker options https://www.npmjs.com/package/@duetds/date-picker#properties */ - "options"?: string | DuetDatePickerProps; + "options"?: string | Partial; + /** + * Placeholder text + */ + "placeholder"?: string; /** * DOM id for prefix */ @@ -2142,6 +2183,14 @@ declare namespace LocalJSX { * DOM id for error */ "errorId"?: string; + /** + * If specified, an input element with `type="hidden"` will be generated and this hiddenName prop will be used as the `name` of the hidden input use `hiddenInputValue` prop to set the value of that field + */ + "hiddenInputName"?: string; + /** + * Sets the value of the hidden input created by `hiddenInputName` + */ + "hiddenInputValue"?: string; /** * Hint message for the input */ @@ -2536,6 +2585,10 @@ declare namespace LocalJSX { } interface GoRadio { "checked"?: boolean; + /** + * DOM id for native input control, default auto generated unique id + */ + "controlId"?: string; "disabled"?: boolean; "error"?: string; /** @@ -2588,13 +2641,13 @@ declare namespace LocalJSX { */ "name"?: string; /** - * Emit a custom select event on value change + * Emit custom event with selected value */ - "onGoChange"?: (event: GoSelectCustomEvent) => void; + "onGochange"?: (event: GoSelectCustomEvent>) => void; /** - * Array of label/value options + * Array of options. Note: Sometimes frameworks may incorrectly pass the result of Array.toString() into this prop, `go-select` tries to obsorb this issue by trying to do a `split(',')` on the options prop if a string is passed in. This means the accepted formats include: 1. array of objects of type `{label: string, value: string}` 2. array of strings (e.g. ['Apple', 'Orange', 'Banana']) 3. string, toString() result of format 2 (i.e. 'Apple,Orange,Banana') 4. string, option 1 or 2 passed in as string that can be parsed by [JSON5](https://json5.org/) */ - "options"?: SelectOption[] | string; + "options"?: SelectOption[] | string[] | string; /** * If this input is read-only */ @@ -2606,7 +2659,7 @@ declare namespace LocalJSX { /** * Value of the input field */ - "value"?: string; + "value"?: FieldValue; } interface GoSkipLink { /** @@ -2833,7 +2886,7 @@ declare namespace LocalJSX { "go-badge": GoBadge; "go-banner": GoBanner; "go-blockquote": GoBlockquote; - "go-breadcrumb": GoBreadcrumb; + "go-breadcrumbs": GoBreadcrumbs; "go-button": GoButton; "go-button-group": GoButtonGroup; "go-callout-section": GoCalloutSection; @@ -2890,7 +2943,7 @@ declare module "@stencil/core" { "go-badge": LocalJSX.GoBadge & JSXBase.HTMLAttributes; "go-banner": LocalJSX.GoBanner & JSXBase.HTMLAttributes; "go-blockquote": LocalJSX.GoBlockquote & JSXBase.HTMLAttributes; - "go-breadcrumb": LocalJSX.GoBreadcrumb & JSXBase.HTMLAttributes; + "go-breadcrumbs": LocalJSX.GoBreadcrumbs & JSXBase.HTMLAttributes; "go-button": LocalJSX.GoButton & JSXBase.HTMLAttributes; "go-button-group": LocalJSX.GoButtonGroup & JSXBase.HTMLAttributes; "go-callout-section": LocalJSX.GoCalloutSection & JSXBase.HTMLAttributes; diff --git a/packages/core/src/components/form/go-checkbox/go-checkbox.tsx b/packages/core/src/components/form/go-checkbox/go-checkbox.tsx index 428091a1..81ea39ba 100644 --- a/packages/core/src/components/form/go-checkbox/go-checkbox.tsx +++ b/packages/core/src/components/form/go-checkbox/go-checkbox.tsx @@ -1,4 +1,4 @@ -import { Component, Host, h, Element, Prop, State, Watch, Event, EventEmitter } from '@stencil/core'; +import { Component, Host, h, Element, Prop, State, Watch } from '@stencil/core'; import { CheckboxProps } from '../../../interfaces'; import { hasSlot, initIdProps } from '../../../utils'; @Component({ @@ -9,7 +9,7 @@ import { hasSlot, initIdProps } from '../../../utils'; export class GoCheckbox implements CheckboxProps { @Element() el: HTMLElement; - @Prop() checked?: boolean; + @Prop({ mutable: true }) checked?: boolean; @Prop() indeterminate?: boolean; @Prop() name: string; @Prop() disabled?: boolean; @@ -41,12 +41,8 @@ export class GoCheckbox implements CheckboxProps { this.hasError = typeof this.error !== 'undefined'; } - @Event() goChange: EventEmitter<{ checked: boolean; value?: string }>; handleChange(e) { - this.goChange.emit({ - checked: e.target.checked, - value: e.target.value, - }); + this.checked = e.target.checked; } hasHintSlot: boolean; diff --git a/packages/core/src/components/form/go-datepicker/duet-date-picker.ts b/packages/core/src/components/form/go-datepicker/duet-date-picker.ts index 4f643f97..05bae33c 100644 --- a/packages/core/src/components/form/go-datepicker/duet-date-picker.ts +++ b/packages/core/src/components/form/go-datepicker/duet-date-picker.ts @@ -1,3 +1,6 @@ +/** + * Typescript file taken from duet-datepicker + */ type MonthsNames = [string, string, string, string, string, string, string, string, string, string, string, string]; type DayNames = [string, string, string, string, string, string, string]; diff --git a/packages/core/src/components/form/go-datepicker/go-datepicker.tsx b/packages/core/src/components/form/go-datepicker/go-datepicker.tsx index fccd6ebe..6df7d725 100644 --- a/packages/core/src/components/form/go-datepicker/go-datepicker.tsx +++ b/packages/core/src/components/form/go-datepicker/go-datepicker.tsx @@ -1,9 +1,15 @@ -import { Component, h, Prop, Element, State, Watch, Event, EventEmitter } from '@stencil/core'; +import { Component, h, Prop, Element, State, Watch, EventEmitter, Event } from '@stencil/core'; import { uniqueId } from 'lodash-es'; import '@duetds/date-picker'; import { fieldSlotNames, loadFieldProps, loadFieldSlots, parseItems } from '../../../utils'; -import { FormFieldProps } from '../../../interfaces'; +import { FormFieldProps, GoChangeEventDetail } from '../../../interfaces'; import { DuetDatePickerProps } from './duet-date-picker'; +import dayjs from 'dayjs'; +import customParseFormat from 'dayjs/plugin/customParseFormat'; +import { DuetDatePickerChangeEvent } from '@duetds/date-picker/dist/types/components/duet-date-picker/duet-date-picker'; +import { getDefaultDateAdapter, getDefaultLocalization } from './utils'; + +const ISO_DATE_FORMAT = 'YYYY-MM-DD'; @Component({ tag: 'go-datepicker', styleUrl: 'go-datepicker.scss', @@ -24,43 +30,142 @@ export class GoDatepicker implements FormFieldProps { @Prop() readonly?: boolean; @Prop({ mutable: true }) value?: string; + /** + * add date format into hint message + */ + @Prop() hintFormat?: boolean = true; + + /** + * Placeholder text + */ + @Prop() placeholder?: string = ''; + /** * Duet Date Picker options * https://www.npmjs.com/package/@duetds/date-picker#properties */ - @Prop() options?: string | DuetDatePickerProps; + @Prop() options?: string | Partial; - @State() parsedOptions: DuetDatePickerProps; + /** + * Specify the expected date format + * Supported formats: https://day.js.org/docs/en/parse/string-format#list-of-all-available-parsing-tokens + */ + @Prop() format?: string = ISO_DATE_FORMAT; + + @State() parsedOptions: Partial; @Watch('options') loadOptions() { this.parsedOptions = parseItems(this.options); + const dateFormat = this.format; + this.parsedOptions = { + ...this.parsedOptions, + localization: this.parsedOptions?.localization ?? getDefaultLocalization(this.placeholder), + dateAdapter: this.parsedOptions?.dateAdapter ?? getDefaultDateAdapter(dayjs, dateFormat), + }; } + @Event({ + eventName: 'gochange', + }) + goChange: EventEmitter>; + prefixer = 'go-datepicker-'; hasNamedSlot: { [key: string]: boolean } = {}; controlId = uniqueId(this.prefixer); datepickerInputEl: HTMLInputElement; datepickerEl: HTMLDuetDatePickerElement; componentWillLoad() { + dayjs.extend(customParseFormat); this.loadOptions(); this.hasNamedSlot = loadFieldSlots(this.el); + } + componentDidLoad() { this.datepickerInputEl = this.el.querySelector('.duet-date__input'); + this.passThroughReadonly(this.readonly); + this.removeDuetInputName(); } - @Event() goChange: EventEmitter; + toISO(value: string) { + return dayjs(value, this.format).format(ISO_DATE_FORMAT); + } - handleChange(e) { - this.value = e.detail.value; - this.goChange.emit(this.value); + handleDuetChange(e: CustomEvent) { + const { valueAsDate } = e.detail; + if (!valueAsDate) { + return; + } + this.setValueIfValid(valueAsDate); + } + + /** + * on datepicker blur check + * at this point + * the duet input field might have invalid values based on user input, + * this.value will have the last valid ISO date string + * we need to set the input value to that string + * or empty string if no valid value available + */ + handleDuetBlur() { + const inputEl = this.el.querySelector('.duet-date__input') as HTMLInputElement; + if (inputEl) { + if (inputEl.value === '') { + // user cleared out input value + this.value = ''; + return; + } + inputEl.value = this.value || ''; + } + } + + setValueIfValid(date: Date) { + const dateObj = dayjs(date); + if (!dateObj.isValid()) { + return; + } + this.value = dateObj.format(this.format); + this.goChange.emit({ value: this.value }); + } + + @Watch('readonly') + watchReadonlyProp(readonly) { + this.passThroughReadonly(readonly); + } + + passThroughReadonly(readonly) { + if (!this.datepickerInputEl) { + return; + } + if (readonly) { + this.datepickerInputEl.setAttribute('readonly', 'true'); + } else { + this.datepickerInputEl.removeAttribute('readonly'); + } + } + + /** + * removes duet hidden input in form data + * go-field is used to do this + * duet hidden input doesn't store formatted date + */ + removeDuetInputName() { + if (!this.datepickerInputEl) { + return; + } + this.datepickerInputEl.removeAttribute('name'); + const duetHiddenInput = this.datepickerEl.querySelector(`input[type="hidden"][name="${this.name}-duet-hidden"]`); + if (duetHiddenInput) { + duetHiddenInput.removeAttribute('name'); + } } render() { const { controlId: id, value, name, disabled, parsedOptions } = this; const fieldProps = loadFieldProps(this); + const hint = `${this.hint ?? ''}${this.hintFormat ? ` ${this.format}` : ''}`; return ( - + {fieldSlotNames.map((slotName) => { if (this.hasNamedSlot[slotName]) { return ( @@ -74,10 +179,11 @@ export class GoDatepicker implements FormFieldProps { ref={(el) => (this.datepickerEl = el)} class="control" identifier={id} - value={value} - name={name} + value={this.toISO(value)} + name={`${name}-duet-hidden`} disabled={disabled} - onDuetChange={(e) => this.handleChange(e)} + onDuetBlur={() => this.handleDuetBlur()} + onDuetChange={(e) => this.handleDuetChange(e)} {...parsedOptions}> ); diff --git a/packages/core/src/components/form/go-datepicker/readme.md b/packages/core/src/components/form/go-datepicker/readme.md index 02f44797..b853b6cf 100644 --- a/packages/core/src/components/form/go-datepicker/readme.md +++ b/packages/core/src/components/form/go-datepicker/readme.md @@ -12,18 +12,24 @@ title: Datepicker Datepickers are commonly used in forms that require users to select a date for a reservation, appointment, or event. They provide an intuitive and standardised way for users to input date information and prevent errors and confusion that can arise from manual entry. -::: success +::: success -`go-datepicker` uses [Duet Date Picker](https://github.com/duetds/date-picker) under the hood, the Duet team made a great component that handles a lot of the accessibility concerns. `go-datepicker` accepts an `options` attribute where you can pass `duet-date-picker` options as a JSON object with key-value pairs. +`go-datepicker` uses [Duet Date Picker](https://github.com/duetds/date-picker) under the hood, the Duet team made a great component that handles a lot of the accessibility concerns. `go-datepicker` accepts an `options` attribute where you can pass `duet-date-picker` options as a JSON object with key-value pairs. ::: ## Accessibility -- Common form field + - Datepicker widget screen reader support ([See Duet Date Picker](https://github.com/duetds/date-picker#screen-reader-support)) ## Demo +::: info + +**Note:** the value of the datepicker component is the same as what's displayed in the input field. The format is by default the ISO format `yyyy-mm-dd` same as the native HTML `` element. The difference is when you provide a custom `format` prop, the displayed value **and** the form data value use the specified format to convert the internal Date object into the string. + +::: + diff --git a/packages/core/src/components/form/go-datepicker/usage/go-datepicker.md b/packages/core/src/components/form/go-datepicker/usage/go-datepicker.md index 0725aba3..8b806ae7 100644 --- a/packages/core/src/components/form/go-datepicker/usage/go-datepicker.md +++ b/packages/core/src/components/form/go-datepicker/usage/go-datepicker.md @@ -1,20 +1,21 @@ - + - - + +
https://go-ui.com/
- - + +
+
.com.au
-
\ No newline at end of file + diff --git a/packages/core/src/components/form/go-datepicker/utils/index.ts b/packages/core/src/components/form/go-datepicker/utils/index.ts new file mode 100644 index 00000000..7a5db3ac --- /dev/null +++ b/packages/core/src/components/form/go-datepicker/utils/index.ts @@ -0,0 +1,52 @@ +import { DuetLocalizedText } from '../duet-date-picker'; + +/** + * get default date adapter for go-datepicker + * @param dayjs dayjs instance with customParseFormat plugin enabled + * @param dateFormat format string + * @returns date adapter option + */ +export const getDefaultDateAdapter = (dayjs, dateFormat: string) => ({ + parse: (value: string): Date => { + if (!value) { + return; + } + const dayObj = dayjs(value, dateFormat); + if (dayObj.isValid()) { + return dayObj.toDate(); + } + }, + format: (date: Date): string => { + return dayjs(date).format(dateFormat); + }, +}); + +export const getDefaultLocalization = (placeholder = '') => + ({ + placeholder, + buttonLabel: 'Choose date', + selectedDateMessage: 'Selected date is', + prevMonthLabel: 'Previous month', + nextMonthLabel: 'Next month', + monthSelectLabel: 'Month', + yearSelectLabel: 'Year', + closeLabel: 'Close window', + calendarHeading: 'Choose a date', + dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + monthNames: [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December', + ], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + locale: 'en-AU', + } as DuetLocalizedText); diff --git a/packages/core/src/components/form/go-field/go-field.tsx b/packages/core/src/components/form/go-field/go-field.tsx index 47b75f65..e92df6d9 100644 --- a/packages/core/src/components/form/go-field/go-field.tsx +++ b/packages/core/src/components/form/go-field/go-field.tsx @@ -75,6 +75,19 @@ export class GoField implements FormFieldProps { */ @State() hasError = false; + /** + * If specified, an input element with `type="hidden"` will be generated + * and this hiddenName prop will be used as the `name` of the hidden input + * + * use `hiddenInputValue` prop to set the value of that field + */ + @Prop() hiddenInputName?: string; + + /** + * Sets the value of the hidden input created by `hiddenInputName` + */ + @Prop() hiddenInputValue?: string; + @Watch('error') updateErrorState() { this.hasError = !!this.error; @@ -85,7 +98,6 @@ export class GoField implements FormFieldProps { hasPrefix: boolean; hasSuffix: boolean; hasHintSlot: boolean; - hasPostControlSlot: boolean; hasLabelSlot: boolean; componentWillLoad() { @@ -94,7 +106,6 @@ export class GoField implements FormFieldProps { this.hasPrefix = hasSlot(this.el, 'prefix'); this.hasSuffix = hasSlot(this.el, 'suffix'); this.hasHintSlot = hasSlot(this.el, 'hint'); - this.hasPostControlSlot = hasSlot(this.el, 'post-control'); this.hasLabelSlot = hasSlot(this.el, 'label'); initIdProps(this, this.el, ['label', 'prefix', 'suffix', 'hint', 'error'], this.idPrefix); this.updateErrorState(); @@ -113,7 +124,9 @@ export class GoField implements FormFieldProps { if (!this.controlEl) { this.controlEl = this.el.querySelector(this.controlElSelector); if (!this.controlEl) { - warning(`Cannot find field control based on selector ${this.controlElSelector}. Make sure the element exists in the DOM`); + warning( + `Cannot find field control based on selector ${this.controlElSelector}. Make sure the element exists in the DOM`, + ); return; } } @@ -167,6 +180,8 @@ export class GoField implements FormFieldProps { prefixId, suffixId, errorId, + hiddenInputName, + hiddenInputValue, } = this; const showLabel = hasLabelSlot || label; @@ -235,6 +250,8 @@ export class GoField implements FormFieldProps { {error}
) : null} + + {hiddenInputName ? : null} ); } diff --git a/packages/core/src/components/form/go-radio/go-radio.tsx b/packages/core/src/components/form/go-radio/go-radio.tsx index 12348676..bb4525ce 100644 --- a/packages/core/src/components/form/go-radio/go-radio.tsx +++ b/packages/core/src/components/form/go-radio/go-radio.tsx @@ -9,16 +9,19 @@ import { hasSlot, initIdProps } from '../../../utils'; export class GoRadio { @Element() el: HTMLElement; - @Prop() checked?: boolean; + @Prop({ mutable: true }) checked?: boolean; @Prop() indeterminate?: boolean; @Prop() name: string; @Prop() disabled?: boolean; - @Prop() value: any; + @Prop() value: any; // initial value @Prop() label: string; @Prop() hint?: string; @Prop({ reflect: true }) error?: string; - id: string; + /** + * DOM id for native input control, default auto generated unique id + */ + @Prop() controlId?: string; /** * DOM id for hint message @@ -45,11 +48,14 @@ export class GoRadio { hasHintSlot: boolean; componentWillLoad() { this.hasHintSlot = hasSlot(this.el, 'hint'); - initIdProps(this, this.el, ['hint', 'error'], 'go-radio-'); + initIdProps(this, this.el, ['hint', 'error', 'control'], 'go-radio-'); + this.updateErrorState(); } + render() { - const { label, error, id, hint, hintId, hasHintSlot, checked, indeterminate, name, disabled, value, hasError, errorId } = this; + const { label, value, error, controlId, hint, hintId, hasHintSlot, checked, name, disabled, hasError, errorId } = + this; const describedByIds = []; if (hasHintSlot || hint) { @@ -59,9 +65,8 @@ export class GoRadio { describedByIds.push(errorId); } const props = { - id, + id: controlId, checked, - indeterminate, name, disabled, value, @@ -72,17 +77,22 @@ export class GoRadio { class={{ error: hasError, disabled: !!disabled, - indeterminate: !!indeterminate, }}>
- +
- + {hasHintSlot || hint ? (
{hint} diff --git a/packages/core/src/components/form/go-select/go-select.scss b/packages/core/src/components/form/go-select/go-select.scss index 30cc9b4e..9e149519 100644 --- a/packages/core/src/components/form/go-select/go-select.scss +++ b/packages/core/src/components/form/go-select/go-select.scss @@ -18,6 +18,7 @@ go-select { align-items: center; .arrow { height: 1.5em; + @include transition(transform); &.open { transform: rotate(180deg); } diff --git a/packages/core/src/components/form/go-select/go-select.tsx b/packages/core/src/components/form/go-select/go-select.tsx index 954eb856..58ea6200 100644 --- a/packages/core/src/components/form/go-select/go-select.tsx +++ b/packages/core/src/components/form/go-select/go-select.tsx @@ -1,6 +1,6 @@ import { Component, h, Element, Prop, State, Event, EventEmitter, Watch } from '@stencil/core'; -import { SelectOption, SelectProps } from '../../../interfaces'; -import { parseItems, fieldSlotNames, inheritNonFieldAttrs, loadFieldSlots, loadFieldProps } from '../../../utils'; +import { FieldValue, GoChangeEventDetail, SelectOption, SelectProps } from '@/interfaces'; +import { fieldSlotNames, inheritNonFieldAttrs, loadFieldSlots, loadFieldProps } from '@/utils'; import { getActionFromKey, getIndexByLetter, @@ -8,7 +8,8 @@ import { isScrollable, maintainScrollVisibility, MenuActions, -} from '../../../utils/select'; + parseSelectOptions, +} from './utils'; import { uniqueId } from 'lodash-es'; @Component({ @@ -29,17 +30,26 @@ export class GoSelect implements SelectProps { @Prop() hint?: string; @Prop() error?: string | boolean; @Prop() readonly?: boolean; - @Prop({ mutable: true }) value?: string; + @Prop({ mutable: true }) value?: FieldValue; /** - * Array of label/value options + * Array of options. + * Note: + * Sometimes frameworks may incorrectly pass the result of Array.toString() into this prop, + * `go-select` tries to obsorb this issue by trying to do a `split(',')` on the options prop + * if a string is passed in. + * This means the accepted formats include: + * 1. array of objects of type `{label: string, value: string}` + * 2. array of strings (e.g. ['Apple', 'Orange', 'Banana']) + * 3. string, toString() result of format 2 (i.e. 'Apple,Orange,Banana') + * 4. string, option 1 or 2 passed in as string that can be parsed by [JSON5](https://json5.org/) */ - @Prop() options: SelectOption[] | string; + @Prop() options: SelectOption[] | string[] | string; /** * parsed options array */ - @State() parsedOptions = []; + @State() parsedOptions: SelectOption[] = []; /** * common form control properties @@ -52,9 +62,10 @@ export class GoSelect implements SelectProps { controlEl: HTMLElement; async componentWillLoad() { + console.log('will load', this.options); + this.loadOptions(); this.attrs = inheritNonFieldAttrs(this, ['options']); this.hasNamedSlot = loadFieldSlots(this.el); - this.loadOptions(); if (this.value) { this.loadValue(); } @@ -62,18 +73,7 @@ export class GoSelect implements SelectProps { @Watch('options') loadOptions() { - const options = parseItems(this.options); - if (options) { - this.parsedOptions = options.map((option) => { - if (typeof option === 'string') { - return { - value: option, - label: option, - }; - } - return option; - }); - } + this.parsedOptions = parseSelectOptions(this.options); } @Watch('value') @@ -83,10 +83,12 @@ export class GoSelect implements SelectProps { } /** - * Emit a custom select event on value change + * Emit custom event with selected value */ - @Event() - goChange: EventEmitter; + @Event({ + eventName: 'gochange', + }) + goChange: EventEmitter>; // Active option index @State() activeIndex = -1; @@ -151,6 +153,7 @@ export class GoSelect implements SelectProps { name, attrs, } = this; + const fieldProps = loadFieldProps(this); const activeId = open ? `${id}-${activeIndex}` : ''; @@ -191,7 +194,7 @@ export class GoSelect implements SelectProps { tabindex="0" onBlur={this.onComboBlur.bind(this)} onKeyDown={this.onComboKeyDown.bind(this)}> - {parsedOptions[activeIndex]?.label ?? ''} + {parsedOptions && parsedOptions[activeIndex]?.label ? parsedOptions[activeIndex].label : ''} { - it('renders', async () => { - const page = await newSpecPage({ - components: [GoSelect], - html: ``, - }); - expect(page.root).toBeTruthy(); - }); + it('renders', async () => { + const page = await newSpecPage({ + components: [GoSelect], + html: ``, + }); + expect(page.root).toBeTruthy(); + }); }); diff --git a/packages/core/src/utils/select.ts b/packages/core/src/components/form/go-select/utils.ts similarity index 80% rename from packages/core/src/utils/select.ts rename to packages/core/src/components/form/go-select/utils.ts index 3395f00e..bbc66846 100644 --- a/packages/core/src/utils/select.ts +++ b/packages/core/src/components/form/go-select/utils.ts @@ -3,7 +3,8 @@ * https://github.com/microsoft/sonder-ui/blob/master/src/components/select/select.tsx */ -import { SelectOption } from '../interfaces'; +import { SelectOption } from '@/interfaces'; +import { parseItems } from '@/utils'; export enum Keys { Backspace = 'Backspace', @@ -50,7 +51,11 @@ export enum TreeActions { // filter an array of options against an input string // returns an array of options that begin with the filter string, case-independent -export function filterOptions(options: SelectOption[] = [], filter: string, exclude: SelectOption[] = []): SelectOption[] { +export function filterOptions( + options: SelectOption[] = [], + filter: string, + exclude: SelectOption[] = [], +): SelectOption[] { let filterString = filter.toLowerCase().trim(); return options.filter((option) => { const matches = option.label.toLowerCase().indexOf(filterString) === 0; @@ -80,7 +85,11 @@ export function getActionFromKey(event: KeyboardEvent, menuOpen: boolean): MenuA } // handle typing characters when open or closed - if (key === Keys.Backspace || key === Keys.Clear || (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)) { + if ( + key === Keys.Backspace || + key === Keys.Clear || + (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey) + ) { return MenuActions.Type; } @@ -169,3 +178,31 @@ export function maintainScrollVisibility(activeElement: HTMLElement, scrollParen scrollParent.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight); } } + +/** + * parse multiple formats of options prop into SelectOption[] + */ +export const parseSelectOptions = (options: string | string[] | SelectOption[]): SelectOption[] | null => { + try { + // vue passes array of strings into prop as the result of Array.toString() + console.log('parseSelectOptions', { options }); + if (typeof options === 'string' && !options.startsWith('[')) { + options = options.split(','); + } + + const parsedOptions = parseItems(options); + if (parsedOptions) { + // format parsed options into SelectOption[] + return parsedOptions.map((option) => + typeof option === 'string' + ? { + value: option, + label: option, + } + : option, + ); + } + } catch (e) { + console.error(`Couldn't parse options: `, options, { e }); + } +}; diff --git a/packages/core/src/components/form/go-switch/go-switch.tsx b/packages/core/src/components/form/go-switch/go-switch.tsx index db9030cc..786602c0 100644 --- a/packages/core/src/components/form/go-switch/go-switch.tsx +++ b/packages/core/src/components/form/go-switch/go-switch.tsx @@ -1,4 +1,4 @@ -import { Component, Host, h, Element, Prop, State } from '@stencil/core'; +import { Component, Host, h, Element, Prop } from '@stencil/core'; import { inheritAttributes } from '../../../utils/helper'; import { uniqueId, kebabCase } from 'lodash-es'; import { CheckboxProps } from '../../../interfaces/form'; @@ -9,7 +9,7 @@ import { CheckboxProps } from '../../../interfaces/form'; shadow: false, }) export class GoSwitch implements CheckboxProps { - @Prop() + @Prop({ mutable: true }) checked?: boolean; @Prop() @@ -58,11 +58,8 @@ export class GoSwitch implements CheckboxProps { inputEl: HTMLInputElement; - @State() - isOn = null; - handleChange(e) { - this.isOn = e.target.checked; + this.checked = e.target.checked; } // Store attributes inherited from the host element @@ -71,11 +68,23 @@ export class GoSwitch implements CheckboxProps { const propNames = Object.keys(this['__proto__']); const attributeNames = propNames.map((name) => kebabCase(name)); this.attrs = inheritAttributes(this.el, ['class', 'style', ...attributeNames]); - this.isOn = this.checked; } render() { - const { checked, name, label, disabled, value, attrs, stack, fullWidth, showOnOff, showOnOffOutside, isOn, activeLabel, inactiveLabel } = this; + const { + checked, + name, + label, + disabled, + value, + attrs, + stack, + fullWidth, + showOnOff, + showOnOffOutside, + activeLabel, + inactiveLabel, + } = this; const inputId = attrs?.id ? attrs.id : uniqueId('go-switch-'); return ( @@ -98,13 +107,13 @@ export class GoSwitch implements CheckboxProps { {showOnOff ? ( ) : null} {showOnOffOutside ? ( ) : null}
diff --git a/packages/core/src/components/go-breadcrumb/usage/go-breadcrumb.md b/packages/core/src/components/go-breadcrumb/usage/go-breadcrumb.md deleted file mode 100644 index 048b7a45..00000000 --- a/packages/core/src/components/go-breadcrumb/usage/go-breadcrumb.md +++ /dev/null @@ -1,23 +0,0 @@ - - - - - diff --git a/packages/core/src/components/go-breadcrumb/go-breadcrumb.scss b/packages/core/src/components/go-breadcrumbs/go-breadcrumbs.scss similarity index 97% rename from packages/core/src/components/go-breadcrumb/go-breadcrumb.scss rename to packages/core/src/components/go-breadcrumbs/go-breadcrumbs.scss index d3d0dcfb..7030a868 100644 --- a/packages/core/src/components/go-breadcrumb/go-breadcrumb.scss +++ b/packages/core/src/components/go-breadcrumbs/go-breadcrumbs.scss @@ -1,4 +1,4 @@ -go-breadcrumb { +go-breadcrumbs { --breadcrumb-item-gap: 0.5rem; display: block; diff --git a/packages/core/src/components/go-breadcrumb/go-breadcrumb.tsx b/packages/core/src/components/go-breadcrumbs/go-breadcrumbs.tsx similarity index 95% rename from packages/core/src/components/go-breadcrumb/go-breadcrumb.tsx rename to packages/core/src/components/go-breadcrumbs/go-breadcrumbs.tsx index ccf2e483..f73be543 100644 --- a/packages/core/src/components/go-breadcrumb/go-breadcrumb.tsx +++ b/packages/core/src/components/go-breadcrumbs/go-breadcrumbs.tsx @@ -3,8 +3,8 @@ import { INavItem } from '../../interfaces'; import { parseItems } from '../../utils'; @Component({ - tag: 'go-breadcrumb', - styleUrl: 'go-breadcrumb.scss', + tag: 'go-breadcrumbs', + styleUrl: 'go-breadcrumbs.scss', shadow: false, }) export class GoBreadcrumb { @@ -13,7 +13,7 @@ export class GoBreadcrumb { /** * The label for the navigation landmark. This is used by assistive technologies to identify the landmark. */ - @Prop() label = 'Breadcrumb'; + @Prop() label = 'Breadcrumbs'; /** * list of navigation items to be displayed @@ -21,7 +21,7 @@ export class GoBreadcrumb { @Prop() items: INavItem[] | string; /** - * Hide current page (last item without url) from the breadcrumb + * Hide current page (last item without url) from the breadcrumbs */ @Prop() hideCurrent: boolean = false; diff --git a/packages/core/src/components/go-breadcrumb/readme.md b/packages/core/src/components/go-breadcrumbs/readme.md similarity index 54% rename from packages/core/src/components/go-breadcrumb/readme.md rename to packages/core/src/components/go-breadcrumbs/readme.md index 72b22025..39b680c3 100644 --- a/packages/core/src/components/go-breadcrumb/readme.md +++ b/packages/core/src/components/go-breadcrumbs/readme.md @@ -1,32 +1,31 @@ --- -title: Breadcrumb +title: Breadcrumbs --- -# Breadcrumb `go-breadcrumb` +# Breadcrumbs `go-breadcrumbs` -
Breadcrumb provide a quick way to help users understand where they are in the website's information hierarchy.
+
Breadcrumbs provide a quick way to help users understand where they are in the website's information hierarchy.
## Usage and guidance -Always place breadcrumb at the top of a page, and have the [skip link](../go-skip-link) target an element below the breadcrumb so that screen readers can skip this navigation area. +Always place breadcrumbs at the top of a page, and have the [skip link](../go-skip-link) target an element below the breadcrumbs so that screen readers can skip this navigation area. -- On desktop devices, the breadcrumb should start with "Home" even though the logo should also link to the home page. +- On desktop devices, the breadcrumbs should start with "Home" even though the logo should also link to the home page. - Labels of the breadcrumb items should reflect their page headings in the actual information architecture. - On mobile devices, due to the limited screen real estate, the breadcrumb items are condensed into only having the direct parent of the current page (and the current page title if `show-current` attribute is set to `"true"`). User should be able to click on the logo to go back to the home page. - If items in breadcrumb get too long, the items will wrap into the next line. This is an sign that the information architecture (IA) might need to be updated. ## Accessibility -- Breadcrumb are contained within a `
)}
- {hasCustomTitle || cardTitle || cardSubtitle ? ( -
- {hasPreTitle ? : null} - {hasCustomTitle ? ( - - ) : ( - [ - cardTitle ? ( -

- {href ? ( - - {cardTitle} - - ) : ( - cardTitle - )} -

- ) : null, - cardSubtitle ?

{cardSubtitle}

: null, - ] - )} + {hasCustomHeading || heading || subHeading ? ( +
+ {hasPreHeading ? : null} + + {heading ? ( +

+ {href ? ( + + {heading} + + ) : ( + heading + )} +

+ ) : null} + {subHeading ?

{subHeading}

: null} +
) : null} diff --git a/packages/core/src/components/go-card/test/go-card.spec.tsx b/packages/core/src/components/go-card/test/go-card.spec.tsx index 1e0b8cfa..27552bf0 100644 --- a/packages/core/src/components/go-card/test/go-card.spec.tsx +++ b/packages/core/src/components/go-card/test/go-card.spec.tsx @@ -10,18 +10,18 @@ describe('go-card', () => { expect(page.root).toBeTruthy(); }); - it('renders card title', async () => { + it('renders card heading', async () => { const page = await newSpecPage({ components: [GoCard], - html: ``, + html: ``, }); expect(page.root.querySelector('h2').innerText).toEqual('hello'); }); - it('renders card subtitle', async () => { + it('renders card sub heading', async () => { const page = await newSpecPage({ components: [GoCard], - html: ``, + html: ``, }); expect(page.root.querySelector('h3').innerText).toEqual('world'); }); @@ -29,18 +29,18 @@ describe('go-card', () => { it('renders card slots', async () => { const page = await newSpecPage({ components: [GoCard], - html: ` + html: ` -

pre-title

-
custom title
+

pre-heading

+
custom heading
yo
`, }); expect(page.root.querySelector('.card-media img').getAttribute('src')).toEqual('https://placehold.it/300x300'); - const preTitle = page.root.querySelector('#pre-title'); - const customTitle = page.root.querySelector('#custom-title'); - const titleContainer = page.root.querySelector('.card-title-section'); + const preTitle = page.root.querySelector('#pre-heading'); + const customTitle = page.root.querySelector('#custom-heading'); + const titleContainer = page.root.querySelector('.card-heading-section'); expect(titleContainer.contains(preTitle)).toBeTruthy(); expect(titleContainer.contains(customTitle)).toBeTruthy(); const footerEl = page.root.querySelector('#footer'); @@ -56,11 +56,11 @@ describe('go-card', () => { it('renders link when href is present', async () => { const page = await newSpecPage({ components: [GoCard, GoLink], - html: ` + html: ` content `, }); - const title = page.root.querySelector('.card-title'); + const title = page.root.querySelector('.card-heading'); expect(title).toBeTruthy(); const linkEl = title.querySelector('go-link a'); expect(linkEl).toBeTruthy(); diff --git a/packages/core/src/components/go-card/usage/go-card-footer-slot.md b/packages/core/src/components/go-card/usage/go-card-footer-slot.md index 13448491..0167f4c5 100644 --- a/packages/core/src/components/go-card/usage/go-card-footer-slot.md +++ b/packages/core/src/components/go-card/usage/go-card-footer-slot.md @@ -1,7 +1,7 @@
- + Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque natus autem veritatis architecto facilis Primary @@ -10,7 +10,7 @@
- + Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque natus autem veritatis architecto facilis Lorem ipsum dolor sit amet consectetur dolor sit amet consectetur adipisicing elit. Atque natus autem veritatis architecto facilis Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque natus facilis @@ -21,7 +21,7 @@
- + Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque natus autem veritatis architecto facilis Lorem ipsum dolor sit amet consectetur
Lorem ipsum dolor sit.
diff --git a/packages/core/src/components/go-card/usage/go-card-links.md b/packages/core/src/components/go-card/usage/go-card-links.md index aa482f9b..745a62d7 100644 --- a/packages/core/src/components/go-card/usage/go-card-links.md +++ b/packages/core/src/components/go-card/usage/go-card-links.md @@ -1,12 +1,12 @@
- + Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque natus autem veritatis architecto facilis
- + Lorem ipsum dolor sit amet consectetur adipisicing elit. Atque natus autem veritatis architecto facilis
diff --git a/packages/core/src/components/go-card/usage/go-card.md b/packages/core/src/components/go-card/usage/go-card.md index f577f2e0..830a11d1 100644 --- a/packages/core/src/components/go-card/usage/go-card.md +++ b/packages/core/src/components/go-card/usage/go-card.md @@ -1,41 +1,41 @@ +Lorem ipsum dolor, sit amet consectetur adipisicing elit. Atque natus autem veritatis architecto facilis Photo -
Active 2 hours ago
+
Active 2 hours ago
Button
diff --git a/packages/core/src/components/go-card/vars.css b/packages/core/src/components/go-card/vars.css index e5de6274..88bdb1ac 100644 --- a/packages/core/src/components/go-card/vars.css +++ b/packages/core/src/components/go-card/vars.css @@ -24,40 +24,40 @@ --go-card-fg: var(--go-color-text); /** - @prop --go-card-title-font-size: - Font size of card title text + @prop --go-card-heading-font-size: + Font size of card heading text */ - --go-card-title-font-size: var(--go-size-3); + --go-card-heading-font-size: var(--go-size-3); /** - @prop --go-card-title-font-weight: - Font weight of card title text + @prop --go-card-heading-font-weight: + Font weight of card heading text */ - --go-card-title-font-weight: 500; + --go-card-heading-font-weight: 500; /** - @prop --go-card-title-color: - Text colour of card title + @prop --go-card-heading-color: + Text colour of card heading */ - --go-card-title-color: var(--go-card-fg); + --go-card-heading-color: var(--go-card-fg); /** - @prop --go-card-subtitle-font-size: - Font size of subtitle + @prop --go-card-subheading-font-size: + Font size of subheading */ - --go-card-subtitle-font-size: var(--go-size-1); + --go-card-subheading-font-size: var(--go-size-1); /** - @prop --go-card-subtitle-font-weight: - Font weight of subtitle + @prop --go-card-subheading-font-weight: + Font weight of subheading */ - --go-card-subtitle-font-weight: 400; + --go-card-subheading-font-weight: 400; /** - @prop --go-card-subtitle-text-color: - Text colour of subtitle + @prop --go-card-subheading-text-color: + Text colour of subheading */ - --go-card-subtitle-color: var(--go-color-neutral-600); + --go-card-subheading-color: var(--go-color-neutral-600); /** @prop --go-card-border-width: diff --git a/packages/core/src/components/go-dropdown/go-dropdown.scss b/packages/core/src/components/go-dropdown/go-dropdown.scss index 2bfcabdd..58e93fc7 100644 --- a/packages/core/src/components/go-dropdown/go-dropdown.scss +++ b/packages/core/src/components/go-dropdown/go-dropdown.scss @@ -8,9 +8,9 @@ go-dropdown { /** @prop --dropdown-bg-color: Dropdown background color - - default: var(--go-color-neutral-100) + - default: var(--go-color-lightest) */ - --dropdown-bg-color: var(--go-color-neutral-100); + --dropdown-bg-color: var(--go-color-lightest); /** @prop --dropdown-duration: diff --git a/packages/core/src/components/go-dropdown/go-dropdown.tsx b/packages/core/src/components/go-dropdown/go-dropdown.tsx index 53166e24..e6d0d238 100644 --- a/packages/core/src/components/go-dropdown/go-dropdown.tsx +++ b/packages/core/src/components/go-dropdown/go-dropdown.tsx @@ -185,7 +185,7 @@ export class GoDropdown { this.el.classList.remove('flip'); } }); - }, 100), + }, 50), ); } @@ -214,7 +214,10 @@ export class GoDropdown { render() { let { isActive, width, fullWidth } = this; return ( - + diff --git a/packages/core/src/components/go-hero/go-hero.scss b/packages/core/src/components/go-hero/go-hero.scss index 84bb2cd8..a75c9061 100644 --- a/packages/core/src/components/go-hero/go-hero.scss +++ b/packages/core/src/components/go-hero/go-hero.scss @@ -80,6 +80,12 @@ go-hero { width: 100%; top: 50%; transform: translateY(-50%); + > img { + object-fit: cover; + width: 100%; + height: 100%; + object-fit: cover; + } } &.has-full-width-bg { @@ -126,7 +132,7 @@ go-hero { .hero-text { padding: var(--hero-text-box-padding); - go-breadcrumb { + go-breadcrumbs { margin-bottom: var(--hero-breadcrumb-gap); } .pre-heading { diff --git a/packages/core/src/components/go-hero/go-hero.tsx b/packages/core/src/components/go-hero/go-hero.tsx index 67ddd06c..6f26f355 100644 --- a/packages/core/src/components/go-hero/go-hero.tsx +++ b/packages/core/src/components/go-hero/go-hero.tsx @@ -91,7 +91,7 @@ export class GoHero implements HeroProps {
{hasFullWidthBg ?
: null} - {breadcrumbs ? : null} + {breadcrumbs ? : null}
{preHeading}

{heading}

diff --git a/packages/core/src/components/go-spinner/usage/go-spinner.md b/packages/core/src/components/go-spinner/usage/go-spinner.md index 7dca3773..ccd6629d 100644 --- a/packages/core/src/components/go-spinner/usage/go-spinner.md +++ b/packages/core/src/components/go-spinner/usage/go-spinner.md @@ -1,4 +1,4 @@ - +

Click the button below to toggle loading states.


diff --git a/packages/core/src/index.html b/packages/core/src/index.html index 2fecb9d8..1eb253ce 100644 --- a/packages/core/src/index.html +++ b/packages/core/src/index.html @@ -17,160 +17,16 @@ -
- - - - - -

Checkbox

- - - - - - - - -

Error state

- - - - - - - - -

Datepicker

- - - - - - - - - - -
https://go-ui.com/
- - - -
- -
.com.au
- - -
- -

Input

- - - - - - - - - - -
https://go-ui.com/
- - - -
- -
.com.au
- - -
- -

Radio

- - - - - - - - -

Error state

- - - - - - - - -

Select

- - - - - - - - - -
https://go-ui.com/
- - -
- -
.com.au
- - - -
-

Switch

-
- -
- -
- -
- -
- -
- -
- -

Textarea

- - - - - - - - - - -
https://go-ui.com/
- - -
- -
.com.au
- - -
- - - -
+ + Option 1 + Option 2 + Option 3 + + diff --git a/packages/core/src/interfaces/form.ts b/packages/core/src/interfaces/form.ts index c2ddeb5a..45fecf6c 100644 --- a/packages/core/src/interfaces/form.ts +++ b/packages/core/src/interfaces/form.ts @@ -52,9 +52,11 @@ export interface FormFieldProps { /** * Value of the input field */ - value?: string; + value?: FieldValue; } +export type FieldValue = string | undefined | null; + export interface CheckboxProps extends FormFieldProps { checked?: boolean; indeterminate?: boolean; @@ -67,7 +69,7 @@ export interface InputProps extends FormFieldProps { export type InputType = 'email' | 'number' | 'password' | 'search' | 'tel' | 'text'; export interface SelectProps extends FormFieldProps { - options: SelectOption[] | string; + options: SelectOption[] | string[] | string; } export interface TextareaProps extends FormFieldProps { @@ -78,3 +80,7 @@ export interface SelectOption { value: string; label: string; } + +export interface GoChangeEventDetail { + value: T; +} diff --git a/packages/core/src/patterns/go-card-row/test/go-card-row.e2e.ts b/packages/core/src/patterns/go-card-row/test/go-card-row.e2e.ts index 99ea67d6..90ec0255 100644 --- a/packages/core/src/patterns/go-card-row/test/go-card-row.e2e.ts +++ b/packages/core/src/patterns/go-card-row/test/go-card-row.e2e.ts @@ -6,32 +6,32 @@ describe('go-card-row', () => { const page = await newE2EPage({ html: `
- + Poster Everything I know I learned from dogs Nora Roberts (author, The Search) - + Poster Dogs do speak, but only to those who know how to listen Orhan Pamuk (author, My Name Is Red) - + Poster The better I get to know men, the more I find myself loving dogs Charles De Gaulle - + Poster Everything I know I learned from dogs Nora Roberts (author, The Search) - + Poster Dogs do speak, but only to those who know how to listen Orhan Pamuk (author, My Name Is Red) - + Poster The better I get to know men, the more I find myself loving dogs Charles De Gaulle diff --git a/packages/core/src/patterns/go-card-row/usage/go-card-row-dynamic.md b/packages/core/src/patterns/go-card-row/usage/go-card-row-dynamic.md index 99268160..bb4c1184 100644 --- a/packages/core/src/patterns/go-card-row/usage/go-card-row-dynamic.md +++ b/packages/core/src/patterns/go-card-row/usage/go-card-row-dynamic.md @@ -3,17 +3,17 @@ const container = document.querySelector('#container'); let rowHtml = ``; - fetch('https://imdb-api.com/en/API/MostPopularMovies/k_p38bst22') - .then(res => res.json()) - .then(res => { - const movies = res.items; - console.log({ movies }); - movies.forEach(movie => { - if (movie) { - const encodedTitle = encodeURIComponent(movie.title); - const card = ` - - Poster +fetch('https://imdb-api.com/en/API/MostPopularMovies/k_p38bst22') +.then(res => res.json()) +.then(res => { +const movies = res.items; +console.log({ movies }); +movies.forEach(movie => { +if (movie) { +const encodedTitle = encodeURIComponent(movie.title); +const card = ` + +Poster
  • Crew: ${movie.crew}
  • @@ -32,4 +32,5 @@ rowHtml += ``; container.innerHTML = rowHtml; }); - \ No newline at end of file + + diff --git a/packages/core/src/patterns/go-card-row/usage/go-card-row.md b/packages/core/src/patterns/go-card-row/usage/go-card-row.md index cbf75dcb..5b1f82b6 100644 --- a/packages/core/src/patterns/go-card-row/usage/go-card-row.md +++ b/packages/core/src/patterns/go-card-row/usage/go-card-row.md @@ -1,31 +1,31 @@
    - + Poster Everything I know I learned from dogs Nora Roberts (author, The Search) - + Poster Dogs do speak, but only to those who know how to listen Orhan Pamuk (author, My Name Is Red) - + Poster The better I get to know men, the more I find myself loving dogs Charles De Gaulle - + Poster Everything I know I learned from dogs Nora Roberts (author, The Search) - + Poster Dogs do speak, but only to those who know how to listen Orhan Pamuk (author, My Name Is Red) - + Poster The better I get to know men, the more I find myself loving dogs Charles De Gaulle diff --git a/packages/core/src/patterns/go-content-layout/usage/sidebar.md b/packages/core/src/patterns/go-content-layout/usage/sidebar.md index 8646e718..092b4c4a 100644 --- a/packages/core/src/patterns/go-content-layout/usage/sidebar.md +++ b/packages/core/src/patterns/go-content-layout/usage/sidebar.md @@ -21,22 +21,24 @@ sidebar-sticky sidebar-mobile-position="start" sidebar-desktop-position="end"> - -

    - Sorry the content of this page couldn't be loaded, - see the source here. -

    -
    + + +

    +Sorry the content of this page couldn't be loaded, +see the source here. +

    +
    - + Lorem ipsum dolor, sit amet consectetur adipisicing elit. Atque natus autem veritatis architecto facilis
    Button
    Photo -
    Active 2 hours ago
    +
    Active 2 hours ago
    +
    diff --git a/packages/core/src/utils/helper.ts b/packages/core/src/utils/helper.ts index 78f86946..5e3a2e7e 100644 --- a/packages/core/src/utils/helper.ts +++ b/packages/core/src/utils/helper.ts @@ -124,8 +124,11 @@ export function initIdProps(instance: any, rootEl: HTMLElement, idProps: string[ * @param items {T|string} navigation items to be rendered */ export function parseItems(items: T | string): T { + if (!items) { + return null; + } try { - return typeof items === 'string' ? JSON5.parse(items) : items; + return typeof items === 'string' ? JSON5.parse(items) : items; } catch (e) { warning('Could not parse items', e); } diff --git a/packages/core/stencil.config.ts b/packages/core/stencil.config.ts index d0d6b21c..959d94fa 100644 --- a/packages/core/stencil.config.ts +++ b/packages/core/stencil.config.ts @@ -16,16 +16,13 @@ export const config: Config = { reactOutputTarget({ componentCorePackage: '@go-ui/core', proxiesFile: '../react/src/components/stencil-generated/index.ts', - includeImportCustomElements: true, - customElementsDir: 'dist/components', excludeComponents: ['duet-date-picker'], }), vueOutputTarget({ componentCorePackage: '@go-ui/core', proxiesFile: '../vue/src/components.ts', - includeImportCustomElements: true, - customElementsDir: 'dist/components', - excludeComponents: ['duet-date-picker'], + // customElementsDir: 'dist/components', + excludeComponents: ['duet-date-picker', 'go-radio'], componentModels: [ { elements: ['go-input', 'go-textarea'], @@ -34,12 +31,13 @@ export const config: Config = { }, { elements: ['go-checkbox', 'go-switch'], - event: 'go-change', + event: 'change', targetAttr: 'checked', }, { - elements: ['go-datepicker', 'go-select', 'go-radio'], - event: 'go-change', + elements: ['go-datepicker', 'go-select'], + event: 'gochange', + externalEvent: 'gochange', targetAttr: 'value', }, ], @@ -49,7 +47,7 @@ export const config: Config = { }, { type: 'dist-custom-elements', - autoDefineCustomElements: true, + customElementsExportBehavior: 'auto-define-custom-elements', generateTypeDeclarations: true, }, { diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 7d4bd68f..4a4375b6 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -15,7 +15,13 @@ "noUnusedLocals": true, "noUnusedParameters": true, "jsx": "react", - "jsxFactory": "h" + "jsxFactory": "h", + "baseUrl": ".", + "paths": { + "@/*": [ + "./src/*" + ] + }, }, "include": [ "src" diff --git a/packages/react/src/components/stencil-generated/index.ts b/packages/react/src/components/stencil-generated/index.ts index 24150e7f..76b5e4d4 100644 --- a/packages/react/src/components/stencil-generated/index.ts +++ b/packages/react/src/components/stencil-generated/index.ts @@ -3,108 +3,58 @@ /* auto-generated react proxies */ import { createReactComponent } from './react-component-lib'; -import type { JSX } from '@go-ui/core/dist/components'; +import type { JSX } from '@go-ui/core'; -import { defineCustomElement as defineGoAccordion } from '@go-ui/core/dist/components/go-accordion.js'; -import { defineCustomElement as defineGoAccordionItem } from '@go-ui/core/dist/components/go-accordion-item.js'; -import { defineCustomElement as defineGoBadge } from '@go-ui/core/dist/components/go-badge.js'; -import { defineCustomElement as defineGoBanner } from '@go-ui/core/dist/components/go-banner.js'; -import { defineCustomElement as defineGoBlockquote } from '@go-ui/core/dist/components/go-blockquote.js'; -import { defineCustomElement as defineGoBreadcrumb } from '@go-ui/core/dist/components/go-breadcrumb.js'; -import { defineCustomElement as defineGoButton } from '@go-ui/core/dist/components/go-button.js'; -import { defineCustomElement as defineGoButtonGroup } from '@go-ui/core/dist/components/go-button-group.js'; -import { defineCustomElement as defineGoCalloutSection } from '@go-ui/core/dist/components/go-callout-section.js'; -import { defineCustomElement as defineGoCard } from '@go-ui/core/dist/components/go-card.js'; -import { defineCustomElement as defineGoCardRow } from '@go-ui/core/dist/components/go-card-row.js'; -import { defineCustomElement as defineGoCheckbox } from '@go-ui/core/dist/components/go-checkbox.js'; -import { defineCustomElement as defineGoChip } from '@go-ui/core/dist/components/go-chip.js'; -import { defineCustomElement as defineGoContent } from '@go-ui/core/dist/components/go-content.js'; -import { defineCustomElement as defineGoContentLayout } from '@go-ui/core/dist/components/go-content-layout.js'; -import { defineCustomElement as defineGoDatepicker } from '@go-ui/core/dist/components/go-datepicker.js'; -import { defineCustomElement as defineGoDialog } from '@go-ui/core/dist/components/go-dialog.js'; -import { defineCustomElement as defineGoDropdown } from '@go-ui/core/dist/components/go-dropdown.js'; -import { defineCustomElement as defineGoDropdownItem } from '@go-ui/core/dist/components/go-dropdown-item.js'; -import { defineCustomElement as defineGoDropdownMenu } from '@go-ui/core/dist/components/go-dropdown-menu.js'; -import { defineCustomElement as defineGoDropdownSeparator } from '@go-ui/core/dist/components/go-dropdown-separator.js'; -import { defineCustomElement as defineGoField } from '@go-ui/core/dist/components/go-field.js'; -import { defineCustomElement as defineGoFieldset } from '@go-ui/core/dist/components/go-fieldset.js'; -import { defineCustomElement as defineGoFooter } from '@go-ui/core/dist/components/go-footer.js'; -import { defineCustomElement as defineGoGovAuLogo } from '@go-ui/core/dist/components/go-gov-au-logo.js'; -import { defineCustomElement as defineGoHeaderBar } from '@go-ui/core/dist/components/go-header-bar.js'; -import { defineCustomElement as defineGoHeadingRow } from '@go-ui/core/dist/components/go-heading-row.js'; -import { defineCustomElement as defineGoHero } from '@go-ui/core/dist/components/go-hero.js'; -import { defineCustomElement as defineGoIcon } from '@go-ui/core/dist/components/go-icon.js'; -import { defineCustomElement as defineGoInput } from '@go-ui/core/dist/components/go-input.js'; -import { defineCustomElement as defineGoLink } from '@go-ui/core/dist/components/go-link.js'; -import { defineCustomElement as defineGoMainNav } from '@go-ui/core/dist/components/go-main-nav.js'; -import { defineCustomElement as defineGoMd } from '@go-ui/core/dist/components/go-md.js'; -import { defineCustomElement as defineGoNavDrawer } from '@go-ui/core/dist/components/go-nav-drawer.js'; -import { defineCustomElement as defineGoNavLink } from '@go-ui/core/dist/components/go-nav-link.js'; -import { defineCustomElement as defineGoNavList } from '@go-ui/core/dist/components/go-nav-list.js'; -import { defineCustomElement as defineGoOverlay } from '@go-ui/core/dist/components/go-overlay.js'; -import { defineCustomElement as defineGoProgress } from '@go-ui/core/dist/components/go-progress.js'; -import { defineCustomElement as defineGoRadio } from '@go-ui/core/dist/components/go-radio.js'; -import { defineCustomElement as defineGoSearchBar } from '@go-ui/core/dist/components/go-search-bar.js'; -import { defineCustomElement as defineGoSelect } from '@go-ui/core/dist/components/go-select.js'; -import { defineCustomElement as defineGoSkipLink } from '@go-ui/core/dist/components/go-skip-link.js'; -import { defineCustomElement as defineGoSpinner } from '@go-ui/core/dist/components/go-spinner.js'; -import { defineCustomElement as defineGoSwitch } from '@go-ui/core/dist/components/go-switch.js'; -import { defineCustomElement as defineGoTab } from '@go-ui/core/dist/components/go-tab.js'; -import { defineCustomElement as defineGoTableWrapper } from '@go-ui/core/dist/components/go-table-wrapper.js'; -import { defineCustomElement as defineGoTabs } from '@go-ui/core/dist/components/go-tabs.js'; -import { defineCustomElement as defineGoTextarea } from '@go-ui/core/dist/components/go-textarea.js'; -import { defineCustomElement as defineGoToTop } from '@go-ui/core/dist/components/go-to-top.js'; -import { defineCustomElement as defineGoToc } from '@go-ui/core/dist/components/go-toc.js'; -import { defineCustomElement as defineGoTooltip } from '@go-ui/core/dist/components/go-tooltip.js'; -export const GoAccordion = /*@__PURE__*/createReactComponent('go-accordion', undefined, undefined, defineGoAccordion); -export const GoAccordionItem = /*@__PURE__*/createReactComponent('go-accordion-item', undefined, undefined, defineGoAccordionItem); -export const GoBadge = /*@__PURE__*/createReactComponent('go-badge', undefined, undefined, defineGoBadge); -export const GoBanner = /*@__PURE__*/createReactComponent('go-banner', undefined, undefined, defineGoBanner); -export const GoBlockquote = /*@__PURE__*/createReactComponent('go-blockquote', undefined, undefined, defineGoBlockquote); -export const GoBreadcrumb = /*@__PURE__*/createReactComponent('go-breadcrumb', undefined, undefined, defineGoBreadcrumb); -export const GoButton = /*@__PURE__*/createReactComponent('go-button', undefined, undefined, defineGoButton); -export const GoButtonGroup = /*@__PURE__*/createReactComponent('go-button-group', undefined, undefined, defineGoButtonGroup); -export const GoCalloutSection = /*@__PURE__*/createReactComponent('go-callout-section', undefined, undefined, defineGoCalloutSection); -export const GoCard = /*@__PURE__*/createReactComponent('go-card', undefined, undefined, defineGoCard); -export const GoCardRow = /*@__PURE__*/createReactComponent('go-card-row', undefined, undefined, defineGoCardRow); -export const GoCheckbox = /*@__PURE__*/createReactComponent('go-checkbox', undefined, undefined, defineGoCheckbox); -export const GoChip = /*@__PURE__*/createReactComponent('go-chip', undefined, undefined, defineGoChip); -export const GoContent = /*@__PURE__*/createReactComponent('go-content', undefined, undefined, defineGoContent); -export const GoContentLayout = /*@__PURE__*/createReactComponent('go-content-layout', undefined, undefined, defineGoContentLayout); -export const GoDatepicker = /*@__PURE__*/createReactComponent('go-datepicker', undefined, undefined, defineGoDatepicker); -export const GoDialog = /*@__PURE__*/createReactComponent('go-dialog', undefined, undefined, defineGoDialog); -export const GoDropdown = /*@__PURE__*/createReactComponent('go-dropdown', undefined, undefined, defineGoDropdown); -export const GoDropdownItem = /*@__PURE__*/createReactComponent('go-dropdown-item', undefined, undefined, defineGoDropdownItem); -export const GoDropdownMenu = /*@__PURE__*/createReactComponent('go-dropdown-menu', undefined, undefined, defineGoDropdownMenu); -export const GoDropdownSeparator = /*@__PURE__*/createReactComponent('go-dropdown-separator', undefined, undefined, defineGoDropdownSeparator); -export const GoField = /*@__PURE__*/createReactComponent('go-field', undefined, undefined, defineGoField); -export const GoFieldset = /*@__PURE__*/createReactComponent('go-fieldset', undefined, undefined, defineGoFieldset); -export const GoFooter = /*@__PURE__*/createReactComponent('go-footer', undefined, undefined, defineGoFooter); -export const GoGovAuLogo = /*@__PURE__*/createReactComponent('go-gov-au-logo', undefined, undefined, defineGoGovAuLogo); -export const GoHeaderBar = /*@__PURE__*/createReactComponent('go-header-bar', undefined, undefined, defineGoHeaderBar); -export const GoHeadingRow = /*@__PURE__*/createReactComponent('go-heading-row', undefined, undefined, defineGoHeadingRow); -export const GoHero = /*@__PURE__*/createReactComponent('go-hero', undefined, undefined, defineGoHero); -export const GoIcon = /*@__PURE__*/createReactComponent('go-icon', undefined, undefined, defineGoIcon); -export const GoInput = /*@__PURE__*/createReactComponent('go-input', undefined, undefined, defineGoInput); -export const GoLink = /*@__PURE__*/createReactComponent('go-link', undefined, undefined, defineGoLink); -export const GoMainNav = /*@__PURE__*/createReactComponent('go-main-nav', undefined, undefined, defineGoMainNav); -export const GoMd = /*@__PURE__*/createReactComponent('go-md', undefined, undefined, defineGoMd); -export const GoNavDrawer = /*@__PURE__*/createReactComponent('go-nav-drawer', undefined, undefined, defineGoNavDrawer); -export const GoNavLink = /*@__PURE__*/createReactComponent('go-nav-link', undefined, undefined, defineGoNavLink); -export const GoNavList = /*@__PURE__*/createReactComponent('go-nav-list', undefined, undefined, defineGoNavList); -export const GoOverlay = /*@__PURE__*/createReactComponent('go-overlay', undefined, undefined, defineGoOverlay); -export const GoProgress = /*@__PURE__*/createReactComponent('go-progress', undefined, undefined, defineGoProgress); -export const GoRadio = /*@__PURE__*/createReactComponent('go-radio', undefined, undefined, defineGoRadio); -export const GoSearchBar = /*@__PURE__*/createReactComponent('go-search-bar', undefined, undefined, defineGoSearchBar); -export const GoSelect = /*@__PURE__*/createReactComponent('go-select', undefined, undefined, defineGoSelect); -export const GoSkipLink = /*@__PURE__*/createReactComponent('go-skip-link', undefined, undefined, defineGoSkipLink); -export const GoSpinner = /*@__PURE__*/createReactComponent('go-spinner', undefined, undefined, defineGoSpinner); -export const GoSwitch = /*@__PURE__*/createReactComponent('go-switch', undefined, undefined, defineGoSwitch); -export const GoTab = /*@__PURE__*/createReactComponent('go-tab', undefined, undefined, defineGoTab); -export const GoTableWrapper = /*@__PURE__*/createReactComponent('go-table-wrapper', undefined, undefined, defineGoTableWrapper); -export const GoTabs = /*@__PURE__*/createReactComponent('go-tabs', undefined, undefined, defineGoTabs); -export const GoTextarea = /*@__PURE__*/createReactComponent('go-textarea', undefined, undefined, defineGoTextarea); -export const GoToTop = /*@__PURE__*/createReactComponent('go-to-top', undefined, undefined, defineGoToTop); -export const GoToc = /*@__PURE__*/createReactComponent('go-toc', undefined, undefined, defineGoToc); -export const GoTooltip = /*@__PURE__*/createReactComponent('go-tooltip', undefined, undefined, defineGoTooltip); + +export const GoAccordion = /*@__PURE__*/createReactComponent('go-accordion'); +export const GoAccordionItem = /*@__PURE__*/createReactComponent('go-accordion-item'); +export const GoBadge = /*@__PURE__*/createReactComponent('go-badge'); +export const GoBanner = /*@__PURE__*/createReactComponent('go-banner'); +export const GoBlockquote = /*@__PURE__*/createReactComponent('go-blockquote'); +export const GoBreadcrumbs = /*@__PURE__*/createReactComponent('go-breadcrumbs'); +export const GoButton = /*@__PURE__*/createReactComponent('go-button'); +export const GoButtonGroup = /*@__PURE__*/createReactComponent('go-button-group'); +export const GoCalloutSection = /*@__PURE__*/createReactComponent('go-callout-section'); +export const GoCard = /*@__PURE__*/createReactComponent('go-card'); +export const GoCardRow = /*@__PURE__*/createReactComponent('go-card-row'); +export const GoCheckbox = /*@__PURE__*/createReactComponent('go-checkbox'); +export const GoChip = /*@__PURE__*/createReactComponent('go-chip'); +export const GoContent = /*@__PURE__*/createReactComponent('go-content'); +export const GoContentLayout = /*@__PURE__*/createReactComponent('go-content-layout'); +export const GoDatepicker = /*@__PURE__*/createReactComponent('go-datepicker'); +export const GoDialog = /*@__PURE__*/createReactComponent('go-dialog'); +export const GoDropdown = /*@__PURE__*/createReactComponent('go-dropdown'); +export const GoDropdownItem = /*@__PURE__*/createReactComponent('go-dropdown-item'); +export const GoDropdownMenu = /*@__PURE__*/createReactComponent('go-dropdown-menu'); +export const GoDropdownSeparator = /*@__PURE__*/createReactComponent('go-dropdown-separator'); +export const GoField = /*@__PURE__*/createReactComponent('go-field'); +export const GoFieldset = /*@__PURE__*/createReactComponent('go-fieldset'); +export const GoFooter = /*@__PURE__*/createReactComponent('go-footer'); +export const GoGovAuLogo = /*@__PURE__*/createReactComponent('go-gov-au-logo'); +export const GoHeaderBar = /*@__PURE__*/createReactComponent('go-header-bar'); +export const GoHeadingRow = /*@__PURE__*/createReactComponent('go-heading-row'); +export const GoHero = /*@__PURE__*/createReactComponent('go-hero'); +export const GoIcon = /*@__PURE__*/createReactComponent('go-icon'); +export const GoInput = /*@__PURE__*/createReactComponent('go-input'); +export const GoLink = /*@__PURE__*/createReactComponent('go-link'); +export const GoMainNav = /*@__PURE__*/createReactComponent('go-main-nav'); +export const GoMd = /*@__PURE__*/createReactComponent('go-md'); +export const GoNavDrawer = /*@__PURE__*/createReactComponent('go-nav-drawer'); +export const GoNavLink = /*@__PURE__*/createReactComponent('go-nav-link'); +export const GoNavList = /*@__PURE__*/createReactComponent('go-nav-list'); +export const GoOverlay = /*@__PURE__*/createReactComponent('go-overlay'); +export const GoProgress = /*@__PURE__*/createReactComponent('go-progress'); +export const GoRadio = /*@__PURE__*/createReactComponent('go-radio'); +export const GoSearchBar = /*@__PURE__*/createReactComponent('go-search-bar'); +export const GoSelect = /*@__PURE__*/createReactComponent('go-select'); +export const GoSkipLink = /*@__PURE__*/createReactComponent('go-skip-link'); +export const GoSpinner = /*@__PURE__*/createReactComponent('go-spinner'); +export const GoSwitch = /*@__PURE__*/createReactComponent('go-switch'); +export const GoTab = /*@__PURE__*/createReactComponent('go-tab'); +export const GoTableWrapper = /*@__PURE__*/createReactComponent('go-table-wrapper'); +export const GoTabs = /*@__PURE__*/createReactComponent('go-tabs'); +export const GoTextarea = /*@__PURE__*/createReactComponent('go-textarea'); +export const GoToTop = /*@__PURE__*/createReactComponent('go-to-top'); +export const GoToc = /*@__PURE__*/createReactComponent('go-toc'); +export const GoTooltip = /*@__PURE__*/createReactComponent('go-tooltip'); diff --git a/packages/react/src/components/stencil-generated/react-component-lib/utils/attachProps.ts b/packages/react/src/components/stencil-generated/react-component-lib/utils/attachProps.ts index de2cc499..9a1825f5 100644 --- a/packages/react/src/components/stencil-generated/react-component-lib/utils/attachProps.ts +++ b/packages/react/src/components/stencil-generated/react-component-lib/utils/attachProps.ts @@ -62,6 +62,17 @@ export const getClassName = (classList: DOMTokenList, newProps: any, oldProps: a return finalClassNames.join(' '); }; +/** + * Transforms a React event name to a browser event name. + */ +export const transformReactEventName = (eventNameSuffix: string) => { + switch (eventNameSuffix) { + case 'doubleclick': + return 'dblclick'; + } + return eventNameSuffix; +}; + /** * Checks if an event is supported in the current execution environment. * @license Modernizr 3.0.0pre (Custom Build) | MIT @@ -70,7 +81,7 @@ export const isCoveredByReact = (eventNameSuffix: string) => { if (typeof document === 'undefined') { return true; } else { - const eventName = 'on' + eventNameSuffix; + const eventName = 'on' + transformReactEventName(eventNameSuffix); let isSupported = eventName in document; if (!isSupported) { diff --git a/packages/vue/index.html b/packages/vue/index.html new file mode 100644 index 00000000..6cf482f8 --- /dev/null +++ b/packages/vue/index.html @@ -0,0 +1,14 @@ + + + + + + + + Vite + Vue + + +
    + + + diff --git a/packages/vue/package.json b/packages/vue/package.json index 80487390..452e1d0a 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,19 +1,9 @@ { "name": "@go-ui/vue", "version": "1.22.0", - "description": "Vue wrapper for @go-ui/core", - "repository": { - "type": "git", - "url": "https://github.com/getgoui/go-ui" - }, - "main": "dist/index.js", - "types": "dist/types/index.d.ts", "scripts": { - "build": "pnpm run clean && pnpm run compile && pnpm run cpyCss && pnpm run cpyScss", - "clean": "rm -rf dist", - "compile": "pnpm run tsc", - "tsc": "tsc -p .", - "rollup": "rollup -c", + "dev": "vite --config vite.demo.config.ts", + "build": "rimraf dist && vue-tsc && vite build && pnpm run cpyCss && pnpm run cpyScss", "cpyScss": "cpy \"node_modules/@go-ui/core/src/global/scss/**/*\" \"dist/scss\"", "cpyCss": "cpy \"node_modules/@go-ui/core/dist/go-ui/*.css\" \"dist\"", "release": "npm publish" @@ -22,13 +12,34 @@ "@duetds/date-picker": "^1.4.0", "@go-ui/core": "workspace:*" }, + "peerDependencies": { + "vue": "^3.3.4" + }, "devDependencies": { - "@types/node": "^15.14.9", + "@types/node": "^20.3.3", + "@vitejs/plugin-vue": "^4.2.3", "cpy-cli": "^4.2.0", - "typescript": "^4.8.4", - "vue": "^3.2.45" + "rimraf": "^5.0.1", + "sass": "^1.63.6", + "typescript": "^5.1.6", + "vite": "^4.3.9", + "vue-tsc": "^1.8.3" }, - "publishConfig": { - "access": "public" + "files": [ + "src", + "dist" + ], + "module": "./dist/go-ui.es.js", + "exports": { + ".": { + "types": "./dist/types/index.d.ts", + "import": "./dist/go-ui.es.js" + }, + "./dist/go-ui.css": "./dist/go-ui.css" + }, + "types": "./dist/types/index.d.ts", + "repository": { + "type": "git", + "url": "git+https://github.com/wuruoyun/vue-component-lib-starter.git" } } \ No newline at end of file diff --git a/packages/vue/src/components.ts b/packages/vue/src/components.ts index 9ef9e89a..321b5f8e 100644 --- a/packages/vue/src/components.ts +++ b/packages/vue/src/components.ts @@ -3,67 +3,17 @@ /* auto-generated vue proxies */ import { defineContainer } from './vue-component-lib/utils'; -import type { JSX } from '@go-ui/core/dist/components'; - -import { defineCustomElement as defineGoAccordion } from '@go-ui/core/dist/components/go-accordion.js'; -import { defineCustomElement as defineGoAccordionItem } from '@go-ui/core/dist/components/go-accordion-item.js'; -import { defineCustomElement as defineGoBadge } from '@go-ui/core/dist/components/go-badge.js'; -import { defineCustomElement as defineGoBanner } from '@go-ui/core/dist/components/go-banner.js'; -import { defineCustomElement as defineGoBlockquote } from '@go-ui/core/dist/components/go-blockquote.js'; -import { defineCustomElement as defineGoBreadcrumb } from '@go-ui/core/dist/components/go-breadcrumb.js'; -import { defineCustomElement as defineGoButton } from '@go-ui/core/dist/components/go-button.js'; -import { defineCustomElement as defineGoButtonGroup } from '@go-ui/core/dist/components/go-button-group.js'; -import { defineCustomElement as defineGoCalloutSection } from '@go-ui/core/dist/components/go-callout-section.js'; -import { defineCustomElement as defineGoCard } from '@go-ui/core/dist/components/go-card.js'; -import { defineCustomElement as defineGoCardRow } from '@go-ui/core/dist/components/go-card-row.js'; -import { defineCustomElement as defineGoCheckbox } from '@go-ui/core/dist/components/go-checkbox.js'; -import { defineCustomElement as defineGoChip } from '@go-ui/core/dist/components/go-chip.js'; -import { defineCustomElement as defineGoContent } from '@go-ui/core/dist/components/go-content.js'; -import { defineCustomElement as defineGoContentLayout } from '@go-ui/core/dist/components/go-content-layout.js'; -import { defineCustomElement as defineGoDatepicker } from '@go-ui/core/dist/components/go-datepicker.js'; -import { defineCustomElement as defineGoDialog } from '@go-ui/core/dist/components/go-dialog.js'; -import { defineCustomElement as defineGoDropdown } from '@go-ui/core/dist/components/go-dropdown.js'; -import { defineCustomElement as defineGoDropdownItem } from '@go-ui/core/dist/components/go-dropdown-item.js'; -import { defineCustomElement as defineGoDropdownMenu } from '@go-ui/core/dist/components/go-dropdown-menu.js'; -import { defineCustomElement as defineGoDropdownSeparator } from '@go-ui/core/dist/components/go-dropdown-separator.js'; -import { defineCustomElement as defineGoField } from '@go-ui/core/dist/components/go-field.js'; -import { defineCustomElement as defineGoFieldset } from '@go-ui/core/dist/components/go-fieldset.js'; -import { defineCustomElement as defineGoFooter } from '@go-ui/core/dist/components/go-footer.js'; -import { defineCustomElement as defineGoGovAuLogo } from '@go-ui/core/dist/components/go-gov-au-logo.js'; -import { defineCustomElement as defineGoHeaderBar } from '@go-ui/core/dist/components/go-header-bar.js'; -import { defineCustomElement as defineGoHeadingRow } from '@go-ui/core/dist/components/go-heading-row.js'; -import { defineCustomElement as defineGoHero } from '@go-ui/core/dist/components/go-hero.js'; -import { defineCustomElement as defineGoIcon } from '@go-ui/core/dist/components/go-icon.js'; -import { defineCustomElement as defineGoInput } from '@go-ui/core/dist/components/go-input.js'; -import { defineCustomElement as defineGoLink } from '@go-ui/core/dist/components/go-link.js'; -import { defineCustomElement as defineGoMainNav } from '@go-ui/core/dist/components/go-main-nav.js'; -import { defineCustomElement as defineGoMd } from '@go-ui/core/dist/components/go-md.js'; -import { defineCustomElement as defineGoNavDrawer } from '@go-ui/core/dist/components/go-nav-drawer.js'; -import { defineCustomElement as defineGoNavLink } from '@go-ui/core/dist/components/go-nav-link.js'; -import { defineCustomElement as defineGoNavList } from '@go-ui/core/dist/components/go-nav-list.js'; -import { defineCustomElement as defineGoOverlay } from '@go-ui/core/dist/components/go-overlay.js'; -import { defineCustomElement as defineGoProgress } from '@go-ui/core/dist/components/go-progress.js'; -import { defineCustomElement as defineGoRadio } from '@go-ui/core/dist/components/go-radio.js'; -import { defineCustomElement as defineGoSearchBar } from '@go-ui/core/dist/components/go-search-bar.js'; -import { defineCustomElement as defineGoSelect } from '@go-ui/core/dist/components/go-select.js'; -import { defineCustomElement as defineGoSkipLink } from '@go-ui/core/dist/components/go-skip-link.js'; -import { defineCustomElement as defineGoSpinner } from '@go-ui/core/dist/components/go-spinner.js'; -import { defineCustomElement as defineGoSwitch } from '@go-ui/core/dist/components/go-switch.js'; -import { defineCustomElement as defineGoTab } from '@go-ui/core/dist/components/go-tab.js'; -import { defineCustomElement as defineGoTableWrapper } from '@go-ui/core/dist/components/go-table-wrapper.js'; -import { defineCustomElement as defineGoTabs } from '@go-ui/core/dist/components/go-tabs.js'; -import { defineCustomElement as defineGoTextarea } from '@go-ui/core/dist/components/go-textarea.js'; -import { defineCustomElement as defineGoToTop } from '@go-ui/core/dist/components/go-to-top.js'; -import { defineCustomElement as defineGoToc } from '@go-ui/core/dist/components/go-toc.js'; -import { defineCustomElement as defineGoTooltip } from '@go-ui/core/dist/components/go-tooltip.js'; - - -export const GoAccordion = /*@__PURE__*/ defineContainer('go-accordion', defineGoAccordion, [ +import type { JSX } from '@go-ui/core'; + + + + +export const GoAccordion = /*@__PURE__*/ defineContainer('go-accordion', undefined, [ 'multiple' ]); -export const GoAccordionItem = /*@__PURE__*/ defineContainer('go-accordion-item', defineGoAccordionItem, [ +export const GoAccordionItem = /*@__PURE__*/ defineContainer('go-accordion-item', undefined, [ 'heading', 'headingTag', 'autoHeight', @@ -75,7 +25,7 @@ export const GoAccordionItem = /*@__PURE__*/ defineContainer('go-badge', defineGoBadge, [ +export const GoBadge = /*@__PURE__*/ defineContainer('go-badge', undefined, [ 'count', 'min', 'max', @@ -84,7 +34,7 @@ export const GoBadge = /*@__PURE__*/ defineContainer('go-badge', de ]); -export const GoBanner = /*@__PURE__*/ defineContainer('go-banner', defineGoBanner, [ +export const GoBanner = /*@__PURE__*/ defineContainer('go-banner', undefined, [ 'variant', 'heading', 'dismissible', @@ -92,20 +42,20 @@ export const GoBanner = /*@__PURE__*/ defineContainer('go-banner', ]); -export const GoBlockquote = /*@__PURE__*/ defineContainer('go-blockquote', defineGoBlockquote, [ +export const GoBlockquote = /*@__PURE__*/ defineContainer('go-blockquote', undefined, [ 'citeUrl', 'hideQuoteMark' ]); -export const GoBreadcrumb = /*@__PURE__*/ defineContainer('go-breadcrumb', defineGoBreadcrumb, [ +export const GoBreadcrumbs = /*@__PURE__*/ defineContainer('go-breadcrumbs', undefined, [ 'label', 'items', 'hideCurrent' ]); -export const GoButton = /*@__PURE__*/ defineContainer('go-button', defineGoButton, [ +export const GoButton = /*@__PURE__*/ defineContainer('go-button', undefined, [ 'type', 'disabled', 'variant', @@ -121,13 +71,13 @@ export const GoButton = /*@__PURE__*/ defineContainer('go-button', ]); -export const GoButtonGroup = /*@__PURE__*/ defineContainer('go-button-group', defineGoButtonGroup, [ +export const GoButtonGroup = /*@__PURE__*/ defineContainer('go-button-group', undefined, [ 'block', 'connected' ]); -export const GoCalloutSection = /*@__PURE__*/ defineContainer('go-callout-section', defineGoCalloutSection, [ +export const GoCalloutSection = /*@__PURE__*/ defineContainer('go-callout-section', undefined, [ 'heading', 'headingTag', 'description', @@ -137,9 +87,9 @@ export const GoCalloutSection = /*@__PURE__*/ defineContainer('go-card', defineGoCard, [ - 'cardTitle', - 'cardSubtitle', +export const GoCard = /*@__PURE__*/ defineContainer('go-card', undefined, [ + 'heading', + 'subHeading', 'mediaPosition', 'href', 'target', @@ -148,7 +98,7 @@ export const GoCard = /*@__PURE__*/ defineContainer('go-card', defin ]); -export const GoCardRow = /*@__PURE__*/ defineContainer('go-card-row', defineGoCardRow, [ +export const GoCardRow = /*@__PURE__*/ defineContainer('go-card-row', undefined, [ 'noStretch', 'cols', 'colsTablet', @@ -162,7 +112,7 @@ export const GoCardRow = /*@__PURE__*/ defineContainer('go-card-r ]); -export const GoCheckbox = /*@__PURE__*/ defineContainer('go-checkbox', defineGoCheckbox, [ +export const GoCheckbox = /*@__PURE__*/ defineContainer('go-checkbox', undefined, [ 'checked', 'indeterminate', 'name', @@ -172,13 +122,12 @@ export const GoCheckbox = /*@__PURE__*/ defineContainer('go-chec 'hint', 'error', 'hintId', - 'errorId', - 'goChange' + 'errorId' ], -'checked', 'go-change'); +'checked', 'change'); -export const GoChip = /*@__PURE__*/ defineContainer('go-chip', defineGoChip, [ +export const GoChip = /*@__PURE__*/ defineContainer('go-chip', undefined, [ 'variant', 'outline', 'clickable', @@ -188,10 +137,10 @@ export const GoChip = /*@__PURE__*/ defineContainer('go-chip', defin ]); -export const GoContent = /*@__PURE__*/ defineContainer('go-content', defineGoContent); +export const GoContent = /*@__PURE__*/ defineContainer('go-content', undefined); -export const GoContentLayout = /*@__PURE__*/ defineContainer('go-content-layout', defineGoContentLayout, [ +export const GoContentLayout = /*@__PURE__*/ defineContainer('go-content-layout', undefined, [ 'pageHeading', 'preHeading', 'intro', @@ -207,7 +156,7 @@ export const GoContentLayout = /*@__PURE__*/ defineContainer('go-datepicker', defineGoDatepicker, [ +export const GoDatepicker = /*@__PURE__*/ defineContainer('go-datepicker', undefined, [ 'labelId', 'prefixId', 'suffixId', @@ -220,20 +169,23 @@ export const GoDatepicker = /*@__PURE__*/ defineContainer('go- 'error', 'readonly', 'value', + 'hintFormat', + 'placeholder', 'options', - 'goChange' + 'format', + 'gochange' ], -'value', 'go-change'); +'value', 'gochange', 'gochange'); -export const GoDialog = /*@__PURE__*/ defineContainer('go-dialog', defineGoDialog, [ +export const GoDialog = /*@__PURE__*/ defineContainer('go-dialog', undefined, [ 'active', 'persistent', 'heading' ]); -export const GoDropdown = /*@__PURE__*/ defineContainer('go-dropdown', defineGoDropdown, [ +export const GoDropdown = /*@__PURE__*/ defineContainer('go-dropdown', undefined, [ 'triggerSelector', 'isActive', 'width', @@ -245,14 +197,14 @@ export const GoDropdown = /*@__PURE__*/ defineContainer('go-drop ]); -export const GoDropdownItem = /*@__PURE__*/ defineContainer('go-dropdown-item', defineGoDropdownItem, [ +export const GoDropdownItem = /*@__PURE__*/ defineContainer('go-dropdown-item', undefined, [ 'width', 'disabled', 'selected' ]); -export const GoDropdownMenu = /*@__PURE__*/ defineContainer('go-dropdown-menu', defineGoDropdownMenu, [ +export const GoDropdownMenu = /*@__PURE__*/ defineContainer('go-dropdown-menu', undefined, [ 'triggerSelector', 'isActive', 'width', @@ -261,10 +213,10 @@ export const GoDropdownMenu = /*@__PURE__*/ defineContainer( ]); -export const GoDropdownSeparator = /*@__PURE__*/ defineContainer('go-dropdown-separator', defineGoDropdownSeparator); +export const GoDropdownSeparator = /*@__PURE__*/ defineContainer('go-dropdown-separator', undefined); -export const GoField = /*@__PURE__*/ defineContainer('go-field', defineGoField, [ +export const GoField = /*@__PURE__*/ defineContainer('go-field', undefined, [ 'idPrefix', 'controlId', 'labelId', @@ -278,11 +230,13 @@ export const GoField = /*@__PURE__*/ defineContainer('go-field', de 'hint', 'error', 'readonly', + 'hiddenInputName', + 'hiddenInputValue', 'controlElSelector' ]); -export const GoFieldset = /*@__PURE__*/ defineContainer('go-fieldset', defineGoFieldset, [ +export const GoFieldset = /*@__PURE__*/ defineContainer('go-fieldset', undefined, [ 'label', 'hint', 'error', @@ -293,7 +247,7 @@ export const GoFieldset = /*@__PURE__*/ defineContainer('go-fiel ]); -export const GoFooter = /*@__PURE__*/ defineContainer('go-footer', defineGoFooter, [ +export const GoFooter = /*@__PURE__*/ defineContainer('go-footer', undefined, [ 'links', 'navLabel', 'dark', @@ -303,18 +257,18 @@ export const GoFooter = /*@__PURE__*/ defineContainer('go-footer', ]); -export const GoGovAuLogo = /*@__PURE__*/ defineContainer('go-gov-au-logo', defineGoGovAuLogo, [ +export const GoGovAuLogo = /*@__PURE__*/ defineContainer('go-gov-au-logo', undefined, [ 'height', 'href' ]); -export const GoHeaderBar = /*@__PURE__*/ defineContainer('go-header-bar', defineGoHeaderBar, [ +export const GoHeaderBar = /*@__PURE__*/ defineContainer('go-header-bar', undefined, [ 'breakpoint' ]); -export const GoHeadingRow = /*@__PURE__*/ defineContainer('go-heading-row', defineGoHeadingRow, [ +export const GoHeadingRow = /*@__PURE__*/ defineContainer('go-heading-row', undefined, [ 'heading', 'headingTag', 'moreLinkHref', @@ -322,7 +276,7 @@ export const GoHeadingRow = /*@__PURE__*/ defineContainer('go- ]); -export const GoHero = /*@__PURE__*/ defineContainer('go-hero', defineGoHero, [ +export const GoHero = /*@__PURE__*/ defineContainer('go-hero', undefined, [ 'heading', 'preHeading', 'breadcrumbs', @@ -332,7 +286,7 @@ export const GoHero = /*@__PURE__*/ defineContainer('go-hero', defin ]); -export const GoIcon = /*@__PURE__*/ defineContainer('go-icon', defineGoIcon, [ +export const GoIcon = /*@__PURE__*/ defineContainer('go-icon', undefined, [ 'iconSet', 'name', 'size', @@ -341,7 +295,7 @@ export const GoIcon = /*@__PURE__*/ defineContainer('go-icon', defin ]); -export const GoInput = /*@__PURE__*/ defineContainer('go-input', defineGoInput, [ +export const GoInput = /*@__PURE__*/ defineContainer('go-input', undefined, [ 'type', 'labelId', 'prefixId', @@ -359,21 +313,21 @@ export const GoInput = /*@__PURE__*/ defineContainer('go-input', de 'value', 'input'); -export const GoLink = /*@__PURE__*/ defineContainer('go-link', defineGoLink, [ +export const GoLink = /*@__PURE__*/ defineContainer('go-link', undefined, [ 'href', 'target', 'expandClickableArea' ]); -export const GoMainNav = /*@__PURE__*/ defineContainer('go-main-nav', defineGoMainNav, [ +export const GoMainNav = /*@__PURE__*/ defineContainer('go-main-nav', undefined, [ 'items', 'label', 'navigate' ]); -export const GoMd = /*@__PURE__*/ defineContainer('go-md', defineGoMd, [ +export const GoMd = /*@__PURE__*/ defineContainer('go-md', undefined, [ 'inline', 'content', 'src', @@ -385,7 +339,7 @@ export const GoMd = /*@__PURE__*/ defineContainer('go-md', defineGoMd, ]); -export const GoNavDrawer = /*@__PURE__*/ defineContainer('go-nav-drawer', defineGoNavDrawer, [ +export const GoNavDrawer = /*@__PURE__*/ defineContainer('go-nav-drawer', undefined, [ 'position', 'items', 'active', @@ -397,7 +351,7 @@ export const GoNavDrawer = /*@__PURE__*/ defineContainer('go-na ]); -export const GoNavLink = /*@__PURE__*/ defineContainer('go-nav-link', defineGoNavLink, [ +export const GoNavLink = /*@__PURE__*/ defineContainer('go-nav-link', undefined, [ 'item', 'showArrow', 'block', @@ -405,7 +359,7 @@ export const GoNavLink = /*@__PURE__*/ defineContainer('go-nav-li ]); -export const GoNavList = /*@__PURE__*/ defineContainer('go-nav-list', defineGoNavList, [ +export const GoNavList = /*@__PURE__*/ defineContainer('go-nav-list', undefined, [ 'items', 'headingItem', 'heading', @@ -414,7 +368,7 @@ export const GoNavList = /*@__PURE__*/ defineContainer('go-nav-li ]); -export const GoOverlay = /*@__PURE__*/ defineContainer('go-overlay', defineGoOverlay, [ +export const GoOverlay = /*@__PURE__*/ defineContainer('go-overlay', undefined, [ 'active', 'persistent', 'overlayOpen', @@ -422,7 +376,7 @@ export const GoOverlay = /*@__PURE__*/ defineContainer('go-overla ]); -export const GoProgress = /*@__PURE__*/ defineContainer('go-progress', defineGoProgress, [ +export const GoProgress = /*@__PURE__*/ defineContainer('go-progress', undefined, [ 'min', 'max', 'value', @@ -433,25 +387,10 @@ export const GoProgress = /*@__PURE__*/ defineContainer('go-prog ]); -export const GoRadio = /*@__PURE__*/ defineContainer('go-radio', defineGoRadio, [ - 'checked', - 'indeterminate', - 'name', - 'disabled', - 'value', - 'label', - 'hint', - 'error', - 'hintId', - 'errorId' -], -'value', 'go-change'); - - -export const GoSearchBar = /*@__PURE__*/ defineContainer('go-search-bar', defineGoSearchBar); +export const GoSearchBar = /*@__PURE__*/ defineContainer('go-search-bar', undefined); -export const GoSelect = /*@__PURE__*/ defineContainer('go-select', defineGoSelect, [ +export const GoSelect = /*@__PURE__*/ defineContainer('go-select', undefined, [ 'name', 'label', 'labelId', @@ -464,17 +403,17 @@ export const GoSelect = /*@__PURE__*/ defineContainer('go-select', 'readonly', 'value', 'options', - 'goChange' + 'gochange' ], -'value', 'go-change'); +'value', 'gochange', 'gochange'); -export const GoSkipLink = /*@__PURE__*/ defineContainer('go-skip-link', defineGoSkipLink, [ +export const GoSkipLink = /*@__PURE__*/ defineContainer('go-skip-link', undefined, [ 'target' ]); -export const GoSpinner = /*@__PURE__*/ defineContainer('go-spinner', defineGoSpinner, [ +export const GoSpinner = /*@__PURE__*/ defineContainer('go-spinner', undefined, [ 'ringColor', 'baseColor', 'size', @@ -485,7 +424,7 @@ export const GoSpinner = /*@__PURE__*/ defineContainer('go-spinne ]); -export const GoSwitch = /*@__PURE__*/ defineContainer('go-switch', defineGoSwitch, [ +export const GoSwitch = /*@__PURE__*/ defineContainer('go-switch', undefined, [ 'checked', 'name', 'label', @@ -498,10 +437,10 @@ export const GoSwitch = /*@__PURE__*/ defineContainer('go-switch', 'activeLabel', 'inactiveLabel' ], -'checked', 'go-change'); +'checked', 'change'); -export const GoTab = /*@__PURE__*/ defineContainer('go-tab', defineGoTab, [ +export const GoTab = /*@__PURE__*/ defineContainer('go-tab', undefined, [ 'label', 'active', 'tabId', @@ -509,14 +448,14 @@ export const GoTab = /*@__PURE__*/ defineContainer('go-tab', defineGo ]); -export const GoTableWrapper = /*@__PURE__*/ defineContainer('go-table-wrapper', defineGoTableWrapper, [ +export const GoTableWrapper = /*@__PURE__*/ defineContainer('go-table-wrapper', undefined, [ 'striped', 'bordered', 'hoverable' ]); -export const GoTabs = /*@__PURE__*/ defineContainer('go-tabs', defineGoTabs, [ +export const GoTabs = /*@__PURE__*/ defineContainer('go-tabs', undefined, [ 'tabGroupLabel', 'vertical', 'manual', @@ -524,7 +463,7 @@ export const GoTabs = /*@__PURE__*/ defineContainer('go-tabs', defin ]); -export const GoTextarea = /*@__PURE__*/ defineContainer('go-textarea', defineGoTextarea, [ +export const GoTextarea = /*@__PURE__*/ defineContainer('go-textarea', undefined, [ 'labelId', 'prefixId', 'suffixId', @@ -542,19 +481,19 @@ export const GoTextarea = /*@__PURE__*/ defineContainer('go-text 'value', 'input'); -export const GoToTop = /*@__PURE__*/ defineContainer('go-to-top', defineGoToTop, [ +export const GoToTop = /*@__PURE__*/ defineContainer('go-to-top', undefined, [ 'offset' ]); -export const GoToc = /*@__PURE__*/ defineContainer('go-toc', defineGoToc, [ +export const GoToc = /*@__PURE__*/ defineContainer('go-toc', undefined, [ 'label', 'selector', 'labelClass' ]); -export const GoTooltip = /*@__PURE__*/ defineContainer('go-tooltip', defineGoTooltip, [ +export const GoTooltip = /*@__PURE__*/ defineContainer('go-tooltip', undefined, [ 'triggerId', 'arrow', 'inline', diff --git a/packages/vue/src/components/GoRadio.vue b/packages/vue/src/components/GoRadio.vue new file mode 100644 index 00000000..b30bbf06 --- /dev/null +++ b/packages/vue/src/components/GoRadio.vue @@ -0,0 +1,32 @@ + + + diff --git a/packages/vue/src/demo/App.vue b/packages/vue/src/demo/App.vue new file mode 100644 index 00000000..a24a09bc --- /dev/null +++ b/packages/vue/src/demo/App.vue @@ -0,0 +1,17 @@ + + + diff --git a/packages/vue/src/demo/components/CardSection.vue b/packages/vue/src/demo/components/CardSection.vue new file mode 100644 index 00000000..ee7a0bd5 --- /dev/null +++ b/packages/vue/src/demo/components/CardSection.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/vue/src/demo/components/FormSections.vue b/packages/vue/src/demo/components/FormSections.vue new file mode 100644 index 00000000..0fb5bb78 --- /dev/null +++ b/packages/vue/src/demo/components/FormSections.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/vue/src/demo/components/KitchenSink.vue b/packages/vue/src/demo/components/KitchenSink.vue new file mode 100644 index 00000000..e69de29b diff --git a/packages/vue/src/demo/components/Section.vue b/packages/vue/src/demo/components/Section.vue new file mode 100644 index 00000000..8f90f1f6 --- /dev/null +++ b/packages/vue/src/demo/components/Section.vue @@ -0,0 +1,21 @@ + + diff --git a/packages/vue/src/demo/components/form-sections/DatePickerSection.vue b/packages/vue/src/demo/components/form-sections/DatePickerSection.vue new file mode 100644 index 00000000..d287baa0 --- /dev/null +++ b/packages/vue/src/demo/components/form-sections/DatePickerSection.vue @@ -0,0 +1,24 @@ + + + diff --git a/packages/vue/src/demo/components/form-sections/RadioSection.vue b/packages/vue/src/demo/components/form-sections/RadioSection.vue new file mode 100644 index 00000000..c0028c3a --- /dev/null +++ b/packages/vue/src/demo/components/form-sections/RadioSection.vue @@ -0,0 +1,16 @@ + + + diff --git a/packages/vue/src/demo/components/form-sections/SelectSection.vue b/packages/vue/src/demo/components/form-sections/SelectSection.vue new file mode 100644 index 00000000..00979b84 --- /dev/null +++ b/packages/vue/src/demo/components/form-sections/SelectSection.vue @@ -0,0 +1,29 @@ + + + diff --git a/packages/vue/src/demo/components/form-sections/constants.ts b/packages/vue/src/demo/components/form-sections/constants.ts new file mode 100644 index 00000000..2481bbc7 --- /dev/null +++ b/packages/vue/src/demo/components/form-sections/constants.ts @@ -0,0 +1,3 @@ +export const OPTIONS = ['Apple', 'Orange', 'Banana', 'Watermelon']; +export const OBJECT_OPTIONS = OPTIONS.map((item) => ({ value: item, label: item })); +export const STRING_OPTIONS = OPTIONS.toString(); // ''[] toString diff --git a/packages/vue/src/demo/dev.ts b/packages/vue/src/demo/dev.ts new file mode 100644 index 00000000..9ee8554a --- /dev/null +++ b/packages/vue/src/demo/dev.ts @@ -0,0 +1,6 @@ +import { createApp } from 'vue'; +import App from './App.vue'; +import '@go-ui/core/dist/go-ui/go-ui.css'; +import { ComponentLibrary } from '@'; + +createApp(App).use(ComponentLibrary).mount('#app'); diff --git a/packages/vue/src/env.d.ts b/packages/vue/src/env.d.ts new file mode 100644 index 00000000..a735ff23 --- /dev/null +++ b/packages/vue/src/env.d.ts @@ -0,0 +1,8 @@ +/// + +declare module '*.vue' { + import { DefineComponent } from 'vue'; + // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types + const component: DefineComponent<{}, {}, any>; + export default component; +} diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index 263e28e7..ce5ec199 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -1,2 +1,4 @@ +import GoRadio from './components/GoRadio.vue'; export * from './components'; export * from './plugin'; +export { GoRadio }; diff --git a/packages/vue/src/vue-component-lib/utils.ts b/packages/vue/src/vue-component-lib/utils.ts index 9381dc91..826e78e9 100644 --- a/packages/vue/src/vue-component-lib/utils.ts +++ b/packages/vue/src/vue-component-lib/utils.ts @@ -1,3 +1,5 @@ +// @ts-nocheck +// It's easier and safer for Volar to disable typechecking and let the return type inference do its job. import { VNode, defineComponent, getCurrentInstance, h, inject, ref, Ref } from 'vue'; export interface InputProps { @@ -72,7 +74,7 @@ export const defineContainer = ( defineCustomElement(); } - const Container = defineComponent>((props: any, { attrs, slots, emit }) => { + const Container = defineComponent>((props, { attrs, slots, emit }) => { let modelPropValue = props[modelProp]; const containerRef = ref(); const classes = new Set(getComponentClasses(attrs.class)); @@ -184,19 +186,21 @@ export const defineContainer = ( }; }); - Container.displayName = name; + if (typeof Container !== 'function') { + Container.name = name; - Container.props = { - [ROUTER_LINK_VALUE]: DEFAULT_EMPTY_PROP, - }; + Container.props = { + [ROUTER_LINK_VALUE]: DEFAULT_EMPTY_PROP, + }; - componentProps.forEach((componentProp) => { - Container.props[componentProp] = DEFAULT_EMPTY_PROP; - }); + componentProps.forEach((componentProp) => { + Container.props[componentProp] = DEFAULT_EMPTY_PROP; + }); - if (modelProp) { - Container.props[MODEL_VALUE] = DEFAULT_EMPTY_PROP; - Container.emits = [UPDATE_VALUE_EVENT, externalModelUpdateEvent]; + if (modelProp) { + Container.props[MODEL_VALUE] = DEFAULT_EMPTY_PROP; + Container.emits = [UPDATE_VALUE_EVENT, externalModelUpdateEvent]; + } } return Container; diff --git a/packages/vue/tsconfig.json b/packages/vue/tsconfig.json index 68d84365..173dfe2e 100644 --- a/packages/vue/tsconfig.json +++ b/packages/vue/tsconfig.json @@ -1,27 +1,27 @@ { "compilerOptions": { - "allowUnreachableCode": false, - "allowSyntheticDefaultImports": true, - "declaration": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "esModuleInterop": true, - "lib": ["dom", "es2020"], - "module": "es2015", + "target": "esnext", + "useDefineForClassFields": true, + "module": "esnext", "moduleResolution": "node", - "noImplicitAny": true, - "noImplicitReturns": false, - "noUnusedLocals": true, - "noUnusedParameters": true, - "outDir": "dist", - "declarationDir": "dist/types", - "removeComments": false, + "strict": true, + "jsx": "preserve", "sourceMap": true, - "jsx": "react", - "target": "es2017" + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["esnext", "dom"], + "declaration": true, + "emitDeclarationOnly": true, + "declarationDir": "./dist/types", + "isolatedModules": true, + "skipLibCheck": true, + "types": [ + "vite/client" + ], + "baseUrl": "./", + "paths": { + "@": ["src"] + } }, - "include": ["src/**/*.ts", "src/**/*.tsx"], - "exclude": ["./__tests__/**", "node_modules", "setupTests.ts"], - "compileOnSave": false, - "buildOnSave": false + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue", "src/index.js"] } diff --git a/packages/vue/vite.config.ts b/packages/vue/vite.config.ts new file mode 100644 index 00000000..f2ff764a --- /dev/null +++ b/packages/vue/vite.config.ts @@ -0,0 +1,37 @@ +const path = require('path'); +const { defineConfig } = require('vite'); +import vue from '@vitejs/plugin-vue'; + +module.exports = defineConfig({ + plugins: [ + vue({ + template: { + compilerOptions: { + isCustomElement: (tag) => tag.includes('go-'), + }, + }, + }), + ], // to process SFC + build: { + lib: { + entry: path.resolve(__dirname, 'src/index.ts'), + name: 'go-ui', + formats: ['es'], // adding 'umd' requires globals set to every external module + fileName: (format) => `go-ui.${format}.js`, + }, + rollupOptions: { + // external modules won't be bundled into your library + external: ['vue'], // not every external has a global + output: { + // disable warning on src/index.ts using both default and named export + exports: 'named', + // Provide global variables to use in the UMD build + // for externalized deps (not useful if 'umd' is not in lib.formats) + globals: { + vue: 'Vue', + }, + }, + }, + emptyOutDir: false, // to retain the types folder generated by tsc + }, +}); diff --git a/packages/vue/vite.demo.config.ts b/packages/vue/vite.demo.config.ts new file mode 100644 index 00000000..450d7e1b --- /dev/null +++ b/packages/vue/vite.demo.config.ts @@ -0,0 +1,22 @@ +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; + +// https://vitejs.dev/config/ +export default defineConfig({ + // config so file can import from @ instead of import from 'src' + resolve: { + alias: { + '@': '/src', + }, + }, + plugins: [ + vue({ + template: { + compilerOptions: { + // treat all tags with a dash as custom elements + isCustomElement: (tag) => tag.includes('go-'), + }, + }, + }), + ], +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bf736745..98a478a1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,7 +57,7 @@ importers: apps/react-starter: dependencies: '@go-ui/react': - specifier: workspace:0.0.0-development + specifier: workspace:* version: link:../../packages/react react: specifier: ^18.2.0 @@ -82,7 +82,7 @@ importers: apps/vanilla-starter: dependencies: '@go-ui/core': - specifier: workspace:0.0.0-development + specifier: workspace:* version: link:../../packages/core devDependencies: vite: @@ -92,18 +92,18 @@ importers: apps/vue-starter: dependencies: '@go-ui/vue': - specifier: workspace:0.0.0-development + specifier: workspace:* version: link:../../packages/vue vue: - specifier: ^3.2.45 - version: 3.2.45 + specifier: ^3.3.4 + version: 3.3.4 devDependencies: '@vitejs/plugin-vue': - specifier: ^4.0.0 - version: 4.0.0(vite@4.0.3)(vue@3.2.45) + specifier: ^4.2.3 + version: 4.2.3(vite@4.3.9)(vue@3.3.4) vite: - specifier: ^4.0.0 - version: 4.0.3 + specifier: ^4.3.9 + version: 4.3.9(@types/node@20.3.3)(sass@1.63.6) docs: dependencies: @@ -145,7 +145,7 @@ importers: version: 0.6.0(@stencil/core@2.22.1) devDependencies: '@go-ui/core': - specifier: workspace:0.0.0-development + specifier: workspace:* version: link:../packages/core '@stencil/core': specifier: ^2.22.1 @@ -237,6 +237,9 @@ importers: body-scroll-lock: specifier: 4.0.0-beta.0 version: 4.0.0-beta.0 + dayjs: + specifier: ^1.11.9 + version: 1.11.9 dompurify: specifier: ^2.4.3 version: 2.4.3 @@ -272,20 +275,20 @@ importers: specifier: ^5.1.1 version: 5.1.1(release-it@15.11.0) '@stencil/core': - specifier: ^2.22.1 - version: 2.22.1 + specifier: ^4.5.0 + version: 4.5.0 '@stencil/postcss': specifier: ^2.1.0 - version: 2.1.0(@stencil/core@2.22.1) + version: 2.1.0(@stencil/core@4.5.0) '@stencil/react-output-target': - specifier: ^0.5.0 - version: 0.5.0(@stencil/core@2.22.1) + specifier: ^0.5.3 + version: 0.5.3(@stencil/core@4.5.0) '@stencil/sass': - specifier: ^1.5.2 - version: 1.5.2(@stencil/core@2.22.1) + specifier: ^3.0.4 + version: 3.0.4(@stencil/core@4.5.0) '@stencil/vue-output-target': - specifier: ^0.8.0 - version: 0.8.0(@stencil/core@2.22.1) + specifier: ^0.8.6 + version: 0.8.6(@stencil/core@4.5.0) '@types/jest': specifier: ^26.0.24 version: 26.0.24 @@ -295,9 +298,6 @@ importers: '@types/node': specifier: ^18.11.18 version: 18.11.18 - '@types/puppeteer': - specifier: ^5.4.7 - version: 5.4.7 autoprefixer: specifier: ^10.4.13 version: 10.4.13(postcss@8.4.21) @@ -425,19 +425,34 @@ importers: '@go-ui/core': specifier: workspace:* version: link:../core + vue: + specifier: ^3.3.4 + version: 3.3.4 devDependencies: '@types/node': - specifier: ^15.14.9 - version: 15.14.9 + specifier: ^20.3.3 + version: 20.3.3 + '@vitejs/plugin-vue': + specifier: ^4.2.3 + version: 4.2.3(vite@4.3.9)(vue@3.3.4) cpy-cli: specifier: ^4.2.0 version: 4.2.0 + rimraf: + specifier: ^5.0.1 + version: 5.0.5 + sass: + specifier: ^1.63.6 + version: 1.63.6 typescript: - specifier: ^4.8.4 - version: 4.8.4 - vue: - specifier: ^3.2.45 - version: 3.2.45 + specifier: ^5.1.6 + version: 5.1.6 + vite: + specifier: ^4.3.9 + version: 4.3.9(@types/node@20.3.3)(sass@1.63.6) + vue-tsc: + specifier: ^1.8.3 + version: 1.8.22(typescript@5.1.6) packages: @@ -498,7 +513,7 @@ packages: '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-module-transforms': 7.20.11 '@babel/helpers': 7.20.13 - '@babel/parser': 7.20.13 + '@babel/parser': 7.22.5 '@babel/template': 7.20.7 '@babel/traverse': 7.20.13 '@babel/types': 7.20.7 @@ -538,7 +553,7 @@ packages: resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 dev: true @@ -708,7 +723,7 @@ packages: '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.18.10 '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color dev: true @@ -806,7 +821,7 @@ packages: dependencies: '@babel/template': 7.18.10 '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color dev: true @@ -831,20 +846,20 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.20.13: - resolution: {integrity: sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==} + /@babel/parser@7.20.3: + resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: '@babel/types': 7.20.7 dev: true - /@babel/parser@7.20.3: - resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} + /@babel/parser@7.22.5: + resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.20.12): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} @@ -1755,8 +1770,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 + '@babel/parser': 7.22.5 + '@babel/types': 7.20.7 dev: true /@babel/template@7.20.7: @@ -1764,7 +1779,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.13 + '@babel/parser': 7.22.5 '@babel/types': 7.20.7 dev: true @@ -1778,8 +1793,8 @@ packages: '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 + '@babel/parser': 7.22.5 + '@babel/types': 7.20.7 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: @@ -1796,7 +1811,7 @@ packages: '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.13 + '@babel/parser': 7.22.5 '@babel/types': 7.20.7 debug: 4.3.4 globals: 11.12.0 @@ -1811,6 +1826,7 @@ packages: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 + dev: true /@babel/types@7.20.7: resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} @@ -1819,7 +1835,6 @@ packages: '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - dev: true /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -2015,8 +2030,8 @@ packages: - typescript dev: true - /@esbuild/android-arm64@0.16.10: - resolution: {integrity: sha512-47Y+NwVKTldTlDhSgJHZ/RpvBQMUDG7eKihqaF/u6g7s0ZPz4J1vy8A3rwnnUOF2CuDn7w7Gj/QcMoWz3U3SJw==} + /@esbuild/android-arm64@0.17.19: + resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -2033,8 +2048,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.16.10: - resolution: {integrity: sha512-RmJjQTRrO6VwUWDrzTBLmV4OJZTarYsiepLGlF2rYTVB701hSorPywPGvP6d8HCuuRibyXa5JX4s3jN2kHEtjQ==} + /@esbuild/android-arm@0.17.19: + resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -2042,8 +2057,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.16.10: - resolution: {integrity: sha512-C4PfnrBMcuAcOurQzpF1tTtZz94IXO5JmICJJ3NFJRHbXXsQUg9RFG45KvydKqtFfBaFLCHpduUkUfXwIvGnRg==} + /@esbuild/android-x64@0.17.19: + resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -2051,8 +2066,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.16.10: - resolution: {integrity: sha512-bH/bpFwldyOKdi9HSLCLhhKeVgRYr9KblchwXgY2NeUHBB/BzTUHtUSBgGBmpydB1/4E37m+ggXXfSrnD7/E7g==} + /@esbuild/darwin-arm64@0.17.19: + resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -2060,8 +2075,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.16.10: - resolution: {integrity: sha512-OXt7ijoLuy+AjDSKQWu+KdDFMBbdeaL6wtgMKtDUXKWHiAMKHan5+R1QAG6HD4+K0nnOvEJXKHeA9QhXNAjOTQ==} + /@esbuild/darwin-x64@0.17.19: + resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -2069,8 +2084,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.16.10: - resolution: {integrity: sha512-shSQX/3GHuspE3Uxtq5kcFG/zqC+VuMnJkqV7LczO41cIe6CQaXHD3QdMLA4ziRq/m0vZo7JdterlgbmgNIAlQ==} + /@esbuild/freebsd-arm64@0.17.19: + resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -2078,8 +2093,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.16.10: - resolution: {integrity: sha512-5YVc1zdeaJGASijZmTzSO4h6uKzsQGG3pkjI6fuXvolhm3hVRhZwnHJkforaZLmzvNv5Tb7a3QL2FAVmrgySIA==} + /@esbuild/freebsd-x64@0.17.19: + resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -2087,8 +2102,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.16.10: - resolution: {integrity: sha512-2aqeNVxIaRfPcIaMZIFoblLh588sWyCbmj1HHCCs9WmeNWm+EIN0SmvsmPvTa/TsNZFKnxTcvkX2eszTcCqIrA==} + /@esbuild/linux-arm64@0.17.19: + resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -2096,8 +2111,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.16.10: - resolution: {integrity: sha512-c360287ZWI2miBnvIj23bPyVctgzeMT2kQKR+x94pVqIN44h3GF8VMEs1SFPH1UgyDr3yBbx3vowDS1SVhyVhA==} + /@esbuild/linux-arm@0.17.19: + resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -2105,8 +2120,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.16.10: - resolution: {integrity: sha512-sqMIEWeyrLGU7J5RB5fTkLRIFwsgsQ7ieWXlDLEmC2HblPYGb3AucD7inw2OrKFpRPKsec1l+lssiM3+NV5aOw==} + /@esbuild/linux-ia32@0.17.19: + resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -2123,8 +2138,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.16.10: - resolution: {integrity: sha512-O7Pd5hLEtTg37NC73pfhUOGTjx/+aXu5YoSq3ahCxcN7Bcr2F47mv+kG5t840thnsEzrv0oB70+LJu3gUgchvg==} + /@esbuild/linux-loong64@0.17.19: + resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -2132,8 +2147,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.16.10: - resolution: {integrity: sha512-FN8mZOH7531iPHM0kaFhAOqqNHoAb6r/YHW2ZIxNi0a85UBi2DO4Vuyn7t1p4UN8a4LoAnLOT1PqNgHkgBJgbA==} + /@esbuild/linux-mips64el@0.17.19: + resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -2141,8 +2156,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.16.10: - resolution: {integrity: sha512-Dg9RiqdvHOAWnOKIOTsIx8dFX9EDlY2IbPEY7YFzchrCiTZmMkD7jWA9UdZbNUygPjdmQBVPRCrLydReFlX9yg==} + /@esbuild/linux-ppc64@0.17.19: + resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -2150,8 +2165,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.16.10: - resolution: {integrity: sha512-XMqtpjwzbmlar0BJIxmzu/RZ7EWlfVfH68Vadrva0Wj5UKOdKvqskuev2jY2oPV3aoQUyXwnMbMrFmloO2GfAw==} + /@esbuild/linux-riscv64@0.17.19: + resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -2159,8 +2174,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.16.10: - resolution: {integrity: sha512-fu7XtnoeRNFMx8DjK3gPWpFBDM2u5ba+FYwg27SjMJwKvJr4bDyKz5c+FLXLUSSAkMAt/UL+cUbEbra+rYtUgw==} + /@esbuild/linux-s390x@0.17.19: + resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -2168,8 +2183,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.16.10: - resolution: {integrity: sha512-61lcjVC/RldNNMUzQQdyCWjCxp9YLEQgIxErxU9XluX7juBdGKb0pvddS0vPNuCvotRbzijZ1pzII+26haWzbA==} + /@esbuild/linux-x64@0.17.19: + resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -2177,8 +2192,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.16.10: - resolution: {integrity: sha512-JeZXCX3viSA9j4HqSoygjssdqYdfHd6yCFWyfSekLbz4Ef+D2EjvsN02ZQPwYl5a5gg/ehdHgegHhlfOFP0HCA==} + /@esbuild/netbsd-x64@0.17.19: + resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -2186,8 +2201,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.16.10: - resolution: {integrity: sha512-3qpxQKuEVIIg8SebpXsp82OBrqjPV/OwNWmG+TnZDr3VGyChNnGMHccC1xkbxCHDQNnnXjxhMQNyHmdFJbmbRA==} + /@esbuild/openbsd-x64@0.17.19: + resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -2195,8 +2210,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.16.10: - resolution: {integrity: sha512-z+q0xZ+et/7etz7WoMyXTHZ1rB8PMSNp/FOqURLJLOPb3GWJ2aj4oCqFCjPwEbW1rsT7JPpxeH/DwGAWk/I1Bg==} + /@esbuild/sunos-x64@0.17.19: + resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -2204,8 +2219,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.16.10: - resolution: {integrity: sha512-+YYu5sbQ9npkNT9Dec+tn1F/kjg6SMgr6bfi/6FpXYZvCRfu2YFPZGb+3x8K30s8eRxFpoG4sGhiSUkr1xbHEw==} + /@esbuild/win32-arm64@0.17.19: + resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -2213,8 +2228,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.16.10: - resolution: {integrity: sha512-Aw7Fupk7XNehR1ftHGYwUteyJ2q+em/aE+fVU3YMTBN2V5A7Z4aVCSV+SvCp9HIIHZavPFBpbdP3VfjQpdf6Xg==} + /@esbuild/win32-ia32@0.17.19: + resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -2222,8 +2237,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.16.10: - resolution: {integrity: sha512-qddWullt3sC1EIpfHvCRBq3H4g3L86DZpD6n8k2XFjFVyp01D++uNbN1hT/JRsHxTbyyemZcpwL5aRlJwc/zFw==} + /@esbuild/win32-x64@0.17.19: + resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2250,6 +2265,18 @@ packages: resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} dev: true + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: true + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -2271,7 +2298,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 jest-message-util: 26.6.2 jest-util: 26.6.2 @@ -2283,7 +2310,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -2295,7 +2322,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -2311,7 +2338,7 @@ packages: '@jest/test-result': 26.6.2 '@jest/transform': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 ansi-escapes: 4.3.2 chalk: 4.1.2 exit: 0.1.2 @@ -2356,7 +2383,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -2393,7 +2420,7 @@ packages: dependencies: '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-mock: 26.6.2 dev: true @@ -2403,7 +2430,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-mock: 27.5.1 dev: true @@ -2413,7 +2440,7 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-mock: 29.5.0 dev: true @@ -2440,7 +2467,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@sinonjs/fake-timers': 6.0.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-message-util: 26.6.2 jest-mock: 26.6.2 jest-util: 26.6.2 @@ -2452,7 +2479,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 @@ -2464,7 +2491,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -2548,7 +2575,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -2749,7 +2776,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 '@types/yargs': 15.0.15 chalk: 4.1.2 dev: true @@ -2760,7 +2787,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true @@ -2772,7 +2799,7 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 '@types/yargs': 17.0.22 chalk: 4.1.2 dev: true @@ -2813,7 +2840,6 @@ packages: /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - dev: true /@jridgewell/trace-mapping@0.3.17: resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} @@ -2996,6 +3022,13 @@ packages: node-gyp-build: 4.5.0 dev: true + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true + /@pnpm/config.env-replace@1.1.0: resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} @@ -3169,27 +3202,33 @@ packages: engines: {node: '>=12.10.0', npm: '>=6.0.0'} hasBin: true + /@stencil/core@4.5.0: + resolution: {integrity: sha512-XRbHdb9t4SQzCCbF9qsh0dexvnlArEzCDJl19BJzxzazVBM398SeJUKCBh4p91AZIWveN0gHuZSIGMhLWR7qSA==} + engines: {node: '>=16.0.0', npm: '>=7.10.0'} + hasBin: true + dev: true + /@stencil/helmet@0.3.3: resolution: {integrity: sha512-CAOsX+mmzozSWOSeUiCZAGHfEo8B2brE+bKJgZJLzs7c3EnX6GBDwn1k1oFamC5PMTxV7PtSib5OcvXTy602DA==} deprecated: '@stencil/helmet is no longer supported' dev: true - /@stencil/postcss@2.1.0(@stencil/core@2.22.1): + /@stencil/postcss@2.1.0(@stencil/core@4.5.0): resolution: {integrity: sha512-/e4TYEXErGaHxH0ocg620YqEMLuMLpK/Wg4MJsiJglrLZCZhU4XCX1N0SwxaIOUbEZ1Zh+AqQ++yMI92ilndEA==} peerDependencies: '@stencil/core': '>=2.0.0' dependencies: - '@stencil/core': 2.22.1 + '@stencil/core': 4.5.0 autoprefixer: 10.4.13(postcss@8.3.11) postcss: 8.3.11 dev: true - /@stencil/react-output-target@0.5.0(@stencil/core@2.22.1): - resolution: {integrity: sha512-m2UwgrFuVXzi1h4m6I+EWDGeZV4n1wPHkzbRCS9QaqysiQEN5VIi9zjLzvPQF7O9Gg3E/W28z0yElp0kY3VuFQ==} + /@stencil/react-output-target@0.5.3(@stencil/core@4.5.0): + resolution: {integrity: sha512-68jwRp35CjAcwhTJ9yFD/3n+jrHOqvEH2jreVuPVvZK+4tkhPlYlwz0d1E1RlF3jyifUSfdkWUGgXIEy8Fo3yw==} peerDependencies: - '@stencil/core': ^2.9.0 || ^3.0.0 + '@stencil/core': '>=2.0.0 || >=3 || >= 4.0.0-beta.0 || >= 4.0.0' dependencies: - '@stencil/core': 2.22.1 + '@stencil/core': 4.5.0 dev: true /@stencil/sass@1.5.2(@stencil/core@2.22.1): @@ -3200,6 +3239,14 @@ packages: '@stencil/core': 2.22.1 dev: true + /@stencil/sass@3.0.4(@stencil/core@4.5.0): + resolution: {integrity: sha512-k1dP0A2QBx62m250FATc1hErXxXs6Jnf4TBxdL1C/dc32Kzz2n5aCT4SodBz0ebT5WMnITauZyFqYxzCzDoKag==} + peerDependencies: + '@stencil/core': '>=2.0.0 || >=3.0.0-beta.0 || >= 4.0.0-beta.0 || >= 4.0.0' + dependencies: + '@stencil/core': 4.5.0 + dev: true + /@stencil/store@1.5.0(@stencil/core@2.22.1): resolution: {integrity: sha512-fe5fCF6dgVlDM1iLRkkJUyUh0Tfx305asVGgMAJjIs7Q+x/b1pGgTLROm9Ibr53PZuFwr5Kg+4h9p4FLbYqHgA==} peerDependencies: @@ -3216,12 +3263,12 @@ packages: '@stencil/core': 2.22.1 dev: true - /@stencil/vue-output-target@0.8.0(@stencil/core@2.22.1): - resolution: {integrity: sha512-Clh+aXTvS0uF4IfsecZHOw3Md6jwoNTrY5pXdnJRsqtGKK8KpBDeErcU323ngJNITkgaMhBvRxksSFqvay4kzQ==} + /@stencil/vue-output-target@0.8.6(@stencil/core@4.5.0): + resolution: {integrity: sha512-B1gQW8FWeU7x/KBPm9R28jYFGN5NsZTZR4jwfDMhKBmU1Q2dIxFY52ARhbrfj5tJQxKoxr2tQJD2S14r9t1v7w==} peerDependencies: - '@stencil/core': ^2.9.0 || ^3.0.0 + '@stencil/core': '>=2.0.0 || >=3 || >= 4.0.0-beta.0 || >= 4.0.0' dependencies: - '@stencil/core': 2.22.1 + '@stencil/core': 4.5.0 dev: true /@surma/rollup-plugin-off-main-thread@2.2.3: @@ -3276,7 +3323,7 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.20.13 + '@babel/parser': 7.22.5 '@babel/types': 7.20.7 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 @@ -3292,7 +3339,7 @@ packages: /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.20.13 + '@babel/parser': 7.22.5 '@babel/types': 7.20.7 dev: true @@ -3309,7 +3356,7 @@ packages: /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.3.3 dev: true /@types/http-cache-semantics@4.0.1: @@ -3364,7 +3411,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.3.3 dev: true /@types/linkify-it@3.0.2: @@ -3398,6 +3445,10 @@ packages: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} dev: true + /@types/node@20.3.3: + resolution: {integrity: sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==} + dev: true + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -3414,12 +3465,6 @@ packages: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} dev: true - /@types/puppeteer@5.4.7: - resolution: {integrity: sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==} - dependencies: - '@types/node': 18.11.18 - dev: true - /@types/react-dom@17.0.18: resolution: {integrity: sha512-rLVtIfbwyur2iFKykP2w0pl/1unw26b5td16d5xMgp7/yjTHomkyxPYChFoCr/FtEX1lN9wY6lFj1qvKdS5kDw==} dependencies: @@ -3451,13 +3496,13 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.3.3 dev: true /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.3.3 dev: true /@types/scheduler@0.16.2: @@ -3504,7 +3549,7 @@ packages: resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} requiresBuild: true dependencies: - '@types/node': 18.11.18 + '@types/node': 20.3.3 dev: true optional: true @@ -3526,89 +3571,127 @@ packages: - supports-color dev: true - /@vitejs/plugin-vue@4.0.0(vite@4.0.3)(vue@3.2.45): - resolution: {integrity: sha512-e0X4jErIxAB5oLtDqbHvHpJe/uWNkdpYV83AOG2xo2tEVSzCzewgJMtREZM30wXnM5ls90hxiOtAuVU6H5JgbA==} + /@vitejs/plugin-vue@4.2.3(vite@4.3.9)(vue@3.3.4): + resolution: {integrity: sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.0.0 vue: ^3.2.25 dependencies: - vite: 4.0.3 - vue: 3.2.45 + vite: 4.3.9(@types/node@20.3.3)(sass@1.63.6) + vue: 3.3.4 dev: true - /@vue/compiler-core@3.2.45: - resolution: {integrity: sha512-rcMj7H+PYe5wBV3iYeUgbCglC+pbpN8hBLTJvRiK2eKQiWqu+fG9F+8sW99JdL4LQi7Re178UOxn09puSXvn4A==} + /@volar/language-core@1.10.10: + resolution: {integrity: sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw==} dependencies: - '@babel/parser': 7.20.3 - '@vue/shared': 3.2.45 + '@volar/source-map': 1.10.10 + dev: true + + /@volar/source-map@1.10.10: + resolution: {integrity: sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg==} + dependencies: + muggle-string: 0.3.1 + dev: true + + /@volar/typescript@1.10.10: + resolution: {integrity: sha512-4a2r5bdUub2m+mYVnLu2wt59fuoYWe7nf0uXtGHU8QQ5LDNfzAR0wK7NgDiQ9rcl2WT3fxT2AA9AylAwFtj50A==} + dependencies: + '@volar/language-core': 1.10.10 + path-browserify: 1.0.1 + dev: true + + /@vue/compiler-core@3.3.4: + resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} + dependencies: + '@babel/parser': 7.22.5 + '@vue/shared': 3.3.4 estree-walker: 2.0.2 - source-map: 0.6.1 + source-map-js: 1.0.2 - /@vue/compiler-dom@3.2.45: - resolution: {integrity: sha512-tyYeUEuKqqZO137WrZkpwfPCdiiIeXYCcJ8L4gWz9vqaxzIQRccTSwSWZ/Axx5YR2z+LvpUbmPNXxuBU45lyRw==} + /@vue/compiler-dom@3.3.4: + resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} dependencies: - '@vue/compiler-core': 3.2.45 - '@vue/shared': 3.2.45 + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 - /@vue/compiler-sfc@3.2.45: - resolution: {integrity: sha512-1jXDuWah1ggsnSAOGsec8cFjT/K6TMZ0sPL3o3d84Ft2AYZi2jWJgRMjw4iaK0rBfA89L5gw427H4n1RZQBu6Q==} + /@vue/compiler-sfc@3.3.4: + resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} dependencies: - '@babel/parser': 7.20.3 - '@vue/compiler-core': 3.2.45 - '@vue/compiler-dom': 3.2.45 - '@vue/compiler-ssr': 3.2.45 - '@vue/reactivity-transform': 3.2.45 - '@vue/shared': 3.2.45 + '@babel/parser': 7.22.5 + '@vue/compiler-core': 3.3.4 + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-ssr': 3.3.4 + '@vue/reactivity-transform': 3.3.4 + '@vue/shared': 3.3.4 estree-walker: 2.0.2 - magic-string: 0.25.9 - postcss: 8.4.20 - source-map: 0.6.1 + magic-string: 0.30.0 + postcss: 8.4.31 + source-map-js: 1.0.2 + + /@vue/compiler-ssr@3.3.4: + resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} + dependencies: + '@vue/compiler-dom': 3.3.4 + '@vue/shared': 3.3.4 - /@vue/compiler-ssr@3.2.45: - resolution: {integrity: sha512-6BRaggEGqhWht3lt24CrIbQSRD5O07MTmd+LjAn5fJj568+R9eUD2F7wMQJjX859seSlrYog7sUtrZSd7feqrQ==} + /@vue/language-core@1.8.22(typescript@5.1.6): + resolution: {integrity: sha512-bsMoJzCrXZqGsxawtUea1cLjUT9dZnDsy5TuZ+l1fxRMzUGQUG9+Ypq4w//CqpWmrx7nIAJpw2JVF/t258miRw==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@vue/compiler-dom': 3.2.45 - '@vue/shared': 3.2.45 + '@volar/language-core': 1.10.10 + '@volar/source-map': 1.10.10 + '@vue/compiler-dom': 3.3.4 + '@vue/shared': 3.3.4 + computeds: 0.0.1 + minimatch: 9.0.3 + muggle-string: 0.3.1 + typescript: 5.1.6 + vue-template-compiler: 2.7.15 + dev: true - /@vue/reactivity-transform@3.2.45: - resolution: {integrity: sha512-BHVmzYAvM7vcU5WmuYqXpwaBHjsS8T63jlKGWVtHxAHIoMIlmaMyurUSEs1Zcg46M4AYT5MtB1U274/2aNzjJQ==} + /@vue/reactivity-transform@3.3.4: + resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} dependencies: - '@babel/parser': 7.20.3 - '@vue/compiler-core': 3.2.45 - '@vue/shared': 3.2.45 + '@babel/parser': 7.22.5 + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 estree-walker: 2.0.2 - magic-string: 0.25.9 + magic-string: 0.30.0 - /@vue/reactivity@3.2.45: - resolution: {integrity: sha512-PRvhCcQcyEVohW0P8iQ7HDcIOXRjZfAsOds3N99X/Dzewy8TVhTCT4uXpAHfoKjVTJRA0O0K+6QNkDIZAxNi3A==} + /@vue/reactivity@3.3.4: + resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} dependencies: - '@vue/shared': 3.2.45 + '@vue/shared': 3.3.4 - /@vue/runtime-core@3.2.45: - resolution: {integrity: sha512-gzJiTA3f74cgARptqzYswmoQx0fIA+gGYBfokYVhF8YSXjWTUA2SngRzZRku2HbGbjzB6LBYSbKGIaK8IW+s0A==} + /@vue/runtime-core@3.3.4: + resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} dependencies: - '@vue/reactivity': 3.2.45 - '@vue/shared': 3.2.45 + '@vue/reactivity': 3.3.4 + '@vue/shared': 3.3.4 - /@vue/runtime-dom@3.2.45: - resolution: {integrity: sha512-cy88YpfP5Ue2bDBbj75Cb4bIEZUMM/mAkDMfqDTpUYVgTf/kuQ2VQ8LebuZ8k6EudgH8pYhsGWHlY0lcxlvTwA==} + /@vue/runtime-dom@3.3.4: + resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} dependencies: - '@vue/runtime-core': 3.2.45 - '@vue/shared': 3.2.45 - csstype: 2.6.21 + '@vue/runtime-core': 3.3.4 + '@vue/shared': 3.3.4 + csstype: 3.1.1 - /@vue/server-renderer@3.2.45(vue@3.2.45): - resolution: {integrity: sha512-ebiMq7q24WBU1D6uhPK//2OTR1iRIyxjF5iVq/1a5I1SDMDyDu4Ts6fJaMnjrvD3MqnaiFkKQj+LKAgz5WIK3g==} + /@vue/server-renderer@3.3.4(vue@3.3.4): + resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} peerDependencies: - vue: 3.2.45 + vue: 3.3.4 dependencies: - '@vue/compiler-ssr': 3.2.45 - '@vue/shared': 3.2.45 - vue: 3.2.45 + '@vue/compiler-ssr': 3.3.4 + '@vue/shared': 3.3.4 + vue: 3.3.4 - /@vue/shared@3.2.45: - resolution: {integrity: sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg==} + /@vue/shared@3.3.4: + resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} /JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -5098,6 +5181,10 @@ packages: resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} dev: true + /computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + dev: true + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -5644,12 +5731,8 @@ packages: cssom: 0.3.8 dev: true - /csstype@2.6.21: - resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==} - /csstype@3.1.1: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} - dev: true /currently-unhandled@0.4.1: resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} @@ -5710,6 +5793,14 @@ packages: resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} dev: true + /dayjs@1.11.9: + resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==} + dev: false + + /de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + dev: true + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -6013,7 +6104,7 @@ packages: duplexer2: 0.0.2 ldjson-stream: 1.2.1 multimatch: 5.0.0 - postcss: 8.4.21 + postcss: 8.4.31 source-map: 0.7.4 through2: 4.0.2 yargs: 16.2.0 @@ -6472,34 +6563,34 @@ packages: esbuild-windows-arm64: 0.15.13 dev: true - /esbuild@0.16.10: - resolution: {integrity: sha512-z5dIViHoVnw2l+NCJ3zj5behdXjYvXne9gL18OOivCadXDUhyDkeSvEtLcGVAJW2fNmh33TDUpsi704XYlDodw==} + /esbuild@0.17.19: + resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.16.10 - '@esbuild/android-arm64': 0.16.10 - '@esbuild/android-x64': 0.16.10 - '@esbuild/darwin-arm64': 0.16.10 - '@esbuild/darwin-x64': 0.16.10 - '@esbuild/freebsd-arm64': 0.16.10 - '@esbuild/freebsd-x64': 0.16.10 - '@esbuild/linux-arm': 0.16.10 - '@esbuild/linux-arm64': 0.16.10 - '@esbuild/linux-ia32': 0.16.10 - '@esbuild/linux-loong64': 0.16.10 - '@esbuild/linux-mips64el': 0.16.10 - '@esbuild/linux-ppc64': 0.16.10 - '@esbuild/linux-riscv64': 0.16.10 - '@esbuild/linux-s390x': 0.16.10 - '@esbuild/linux-x64': 0.16.10 - '@esbuild/netbsd-x64': 0.16.10 - '@esbuild/openbsd-x64': 0.16.10 - '@esbuild/sunos-x64': 0.16.10 - '@esbuild/win32-arm64': 0.16.10 - '@esbuild/win32-ia32': 0.16.10 - '@esbuild/win32-x64': 0.16.10 + '@esbuild/android-arm': 0.17.19 + '@esbuild/android-arm64': 0.17.19 + '@esbuild/android-x64': 0.17.19 + '@esbuild/darwin-arm64': 0.17.19 + '@esbuild/darwin-x64': 0.17.19 + '@esbuild/freebsd-arm64': 0.17.19 + '@esbuild/freebsd-x64': 0.17.19 + '@esbuild/linux-arm': 0.17.19 + '@esbuild/linux-arm64': 0.17.19 + '@esbuild/linux-ia32': 0.17.19 + '@esbuild/linux-loong64': 0.17.19 + '@esbuild/linux-mips64el': 0.17.19 + '@esbuild/linux-ppc64': 0.17.19 + '@esbuild/linux-riscv64': 0.17.19 + '@esbuild/linux-s390x': 0.17.19 + '@esbuild/linux-x64': 0.17.19 + '@esbuild/netbsd-x64': 0.17.19 + '@esbuild/openbsd-x64': 0.17.19 + '@esbuild/sunos-x64': 0.17.19 + '@esbuild/win32-arm64': 0.17.19 + '@esbuild/win32-ia32': 0.17.19 + '@esbuild/win32-x64': 0.17.19 dev: true /escalade@3.1.1: @@ -7066,6 +7157,14 @@ packages: for-in: 1.0.2 dev: true + /foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: true + /forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} dev: true @@ -7354,6 +7453,18 @@ packages: is-glob: 4.0.3 dev: true + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.3 + minipass: 7.0.4 + path-scurry: 1.10.1 + dev: true + /glob@7.1.4: resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==} dependencies: @@ -7675,6 +7786,11 @@ packages: function-bind: 1.1.1 dev: true + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + /highlight.js@11.7.0: resolution: {integrity: sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==} engines: {node: '>=12.0.0'} @@ -7833,6 +7949,10 @@ packages: engines: {node: '>= 4'} dev: true + /immutable@4.3.4: + resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} + dev: true + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -8662,7 +8782,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.20.12 - '@babel/parser': 7.20.13 + '@babel/parser': 7.22.5 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -8736,6 +8856,15 @@ packages: iterate-iterator: 1.0.2 dev: true + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true + /jake@10.8.5: resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} engines: {node: '>=10'} @@ -8778,7 +8907,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -8806,7 +8935,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -9169,7 +9298,7 @@ packages: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-mock: 26.6.2 jest-util: 26.6.2 jsdom: 16.7.0 @@ -9187,7 +9316,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -9212,7 +9341,7 @@ packages: '@jest/environment': 26.6.2 '@jest/fake-timers': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-mock: 26.6.2 jest-util: 26.6.2 dev: true @@ -9224,7 +9353,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true @@ -9274,7 +9403,7 @@ packages: dependencies: '@jest/types': 26.6.2 '@types/graceful-fs': 4.1.6 - '@types/node': 18.11.18 + '@types/node': 20.3.3 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -9297,7 +9426,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.6 - '@types/node': 18.11.18 + '@types/node': 20.3.3 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -9317,7 +9446,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 18.11.18 + '@types/node': 20.3.3 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -9358,7 +9487,7 @@ packages: '@jest/source-map': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 co: 4.6.0 expect: 26.6.2 @@ -9387,7 +9516,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -9538,7 +9667,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 dev: true /jest-mock@27.5.1: @@ -9546,7 +9675,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 dev: true /jest-mock@29.5.0: @@ -9554,7 +9683,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-util: 29.5.0 dev: true @@ -9725,7 +9854,7 @@ packages: '@jest/environment': 26.6.2 '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 emittery: 0.7.2 exit: 0.1.2 @@ -9758,7 +9887,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.10 @@ -9893,7 +10022,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -9920,7 +10049,7 @@ packages: resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==} engines: {node: '>= 10.14.2'} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.3.3 graceful-fs: 4.2.10 dev: true @@ -9928,7 +10057,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.3.3 graceful-fs: 4.2.10 dev: true @@ -9966,7 +10095,7 @@ packages: jest-resolve: 26.6.2 natural-compare: 1.4.0 pretty-format: 26.6.2 - semver: 7.5.1 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true @@ -9996,7 +10125,7 @@ packages: jest-util: 27.5.1 natural-compare: 1.4.0 pretty-format: 27.5.1 - semver: 7.5.1 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true @@ -10027,7 +10156,7 @@ packages: jest-util: 29.5.0 natural-compare: 1.4.0 pretty-format: 29.5.0 - semver: 7.5.1 + semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true @@ -10050,7 +10179,7 @@ packages: engines: {node: '>= 10.14.2'} dependencies: '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 graceful-fs: 4.2.10 is-ci: 2.0.0 @@ -10062,7 +10191,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 ci-info: 3.7.1 graceful-fs: 4.2.10 @@ -10074,7 +10203,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.11.18 + '@types/node': 20.3.3 chalk: 4.1.2 ci-info: 3.7.1 graceful-fs: 4.2.10 @@ -10140,7 +10269,7 @@ packages: dependencies: '@jest/test-result': 26.6.2 '@jest/types': 26.6.2 - '@types/node': 18.11.18 + '@types/node': 20.3.3 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 26.6.2 @@ -10153,7 +10282,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 18.11.18 + '@types/node': 20.3.3 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -10170,7 +10299,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.3.3 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -10179,7 +10308,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.3.3 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -10188,7 +10317,7 @@ packages: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.11.18 + '@types/node': 20.3.3 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -10847,6 +10976,11 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /lru-cache@10.0.1: + resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + engines: {node: 14 || >=16.14} + dev: true + /lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: @@ -10880,6 +11014,7 @@ packages: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} dependencies: sourcemap-codec: 1.4.8 + dev: true /magic-string@0.26.7: resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} @@ -10888,6 +11023,12 @@ packages: sourcemap-codec: 1.4.8 dev: true + /magic-string@0.30.0: + resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.14 + /make-dir@1.3.0: resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==} engines: {node: '>=4'} @@ -11209,6 +11350,13 @@ packages: dependencies: brace-expansion: 2.0.1 + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist-options@3.0.2: resolution: {integrity: sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==} engines: {node: '>= 4'} @@ -11234,6 +11382,11 @@ packages: resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} dev: true + /minipass@7.0.4: + resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true + /mixin-deep@1.3.2: resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} engines: {node: '>=0.10.0'} @@ -11266,6 +11419,10 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + dev: true + /multimatch@5.0.0: resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} engines: {node: '>=10'} @@ -11296,6 +11453,12 @@ packages: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: true + + /nanoid@3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true /nanomatch@1.2.13: resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} @@ -11410,7 +11573,7 @@ packages: dependencies: growly: 1.3.0 is-wsl: 2.2.0 - semver: 7.5.1 + semver: 7.5.4 shellwords: 0.1.1 uuid: 8.3.2 which: 2.0.2 @@ -11448,7 +11611,7 @@ packages: dependencies: hosted-git-info: 4.1.0 is-core-module: 2.11.0 - semver: 7.5.1 + semver: 7.5.4 validate-npm-package-license: 3.0.4 dev: true @@ -11965,7 +12128,7 @@ packages: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.5.1 + semver: 7.5.4 dev: true /parent-module@1.0.1: @@ -12035,6 +12198,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: true + /path-exists@2.1.0: resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==} engines: {node: '>=0.10.0'} @@ -12080,6 +12247,14 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.0.1 + minipass: 7.0.4 + dev: true + /path-type@1.1.0: resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} engines: {node: '>=0.10.0'} @@ -12499,7 +12674,7 @@ packages: resolution: {integrity: sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.4 + nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 0.6.2 dev: true @@ -12508,27 +12683,27 @@ packages: resolution: {integrity: sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.4 + nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 dev: true - /postcss@8.4.20: - resolution: {integrity: sha512-6Q04AXR1212bXr5fh03u8aAwbLxAQNGQ/Q1LNa0VfOI06ZAlhPHtQvE4OIdpj4kLThXilalPnmDSOD65DcHt+g==} + /postcss@8.4.21: + resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 + dev: true - /postcss@8.4.21: - resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.4 + nanoid: 3.3.6 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} @@ -13411,6 +13586,14 @@ packages: glob: 7.2.3 dev: true + /rimraf@5.0.5: + resolution: {integrity: sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==} + engines: {node: '>=14'} + hasBin: true + dependencies: + glob: 10.3.10 + dev: true + /rollup-plugin-inject@3.0.2: resolution: {integrity: sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==} deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject. @@ -13453,8 +13636,8 @@ packages: fsevents: 2.3.2 dev: true - /rollup@3.8.0: - resolution: {integrity: sha512-+UR6PnUslneJNiJfLSzy4XH6R50ZGF0MS7UCv20ftXrktF/TkvZDwiBtXX65esblLR5p8w6LmXgPwt2f2B8SoQ==} + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -13589,6 +13772,16 @@ packages: - supports-color dev: true + /sass@1.63.6: + resolution: {integrity: sha512-MJuxGMHzaOW7ipp+1KdELtqKbfAWbH7OLIdoSMnVe3EXPMTmxTmlaZDCTsgIpPCs3w99lLo9/zDKkOrJuT5byw==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.3.4 + source-map-js: 1.0.2 + dev: true + /sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} dev: true @@ -13634,7 +13827,7 @@ packages: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} dependencies: - semver: 7.5.1 + semver: 7.5.4 dev: true /semver@5.7.1: @@ -13678,6 +13871,14 @@ packages: lru-cache: 6.0.0 dev: true + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /serialize-javascript@4.0.0: resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} dependencies: @@ -13752,6 +13953,11 @@ packages: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} dev: true + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + /sisteransi@0.1.1: resolution: {integrity: sha512-PmGOd02bM9YO5ifxpw36nrNMBTptEtfRl4qUYl9SndkolplkrZZOW7PGHjrZL53QvMVj9nQ+TKqUnRsw4tJa4g==} dev: true @@ -13891,6 +14097,7 @@ packages: /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + dev: true /source-map@0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} @@ -13907,6 +14114,7 @@ packages: /sourcemap-codec@1.4.8: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true /spawn-command@0.0.2-1: resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==} @@ -14910,6 +15118,12 @@ packages: hasBin: true dev: true + /typescript@5.1.6: + resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /typical@4.0.0: resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} engines: {node: '>=8'} @@ -15097,7 +15311,7 @@ packages: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.5.1 + semver: 7.5.4 semver-diff: 4.0.0 xdg-basedir: 5.1.0 dev: true @@ -15259,8 +15473,8 @@ packages: fsevents: 2.3.2 dev: true - /vite@4.0.3: - resolution: {integrity: sha512-HvuNv1RdE7deIfQb8mPk51UKjqptO/4RXZ5yXSAvurd5xOckwS/gg8h9Tky3uSbnjYTgUm0hVCet1cyhKd73ZA==} + /vite@4.3.9(@types/node@20.3.3)(sass@1.63.6): + resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -15284,10 +15498,11 @@ packages: terser: optional: true dependencies: - esbuild: 0.16.10 - postcss: 8.4.20 - resolve: 1.22.1 - rollup: 3.8.0 + '@types/node': 20.3.3 + esbuild: 0.17.19 + postcss: 8.4.31 + rollup: 3.29.4 + sass: 1.63.6 optionalDependencies: fsevents: 2.3.2 dev: true @@ -15301,14 +15516,33 @@ packages: acorn-walk: 8.2.0 dev: true - /vue@3.2.45: - resolution: {integrity: sha512-9Nx/Mg2b2xWlXykmCwiTUCWHbWIj53bnkizBxKai1g61f2Xit700A1ljowpTIM11e3uipOeiPcSqnmBg6gyiaA==} + /vue-template-compiler@2.7.15: + resolution: {integrity: sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==} + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + dev: true + + /vue-tsc@1.8.22(typescript@5.1.6): + resolution: {integrity: sha512-j9P4kHtW6eEE08aS5McFZE/ivmipXy0JzrnTgbomfABMaVKx37kNBw//irL3+LlE3kOo63XpnRigyPC3w7+z+A==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@volar/typescript': 1.10.10 + '@vue/language-core': 1.8.22(typescript@5.1.6) + semver: 7.5.4 + typescript: 5.1.6 + dev: true + + /vue@3.3.4: + resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} dependencies: - '@vue/compiler-dom': 3.2.45 - '@vue/compiler-sfc': 3.2.45 - '@vue/runtime-dom': 3.2.45 - '@vue/server-renderer': 3.2.45(vue@3.2.45) - '@vue/shared': 3.2.45 + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-sfc': 3.3.4 + '@vue/runtime-dom': 3.3.4 + '@vue/server-renderer': 3.3.4(vue@3.3.4) + '@vue/shared': 3.3.4 /w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==}